Author: rinrab
Date: Wed Sep 4 13:19:32 2024
New Revision: 1920465
URL: http://svn.apache.org/viewvc?rev=1920465&view=rev
Log:
On the 'cmake' branch: Rewrite def-file extractor on CMake to drop
Python dependency with default minimal build.
* CMakeLists.txt
(swig.python): Find Python only if tests are enabled.
(target_exports): Use CMake to generate exports for *.def files instead of
invoking Python script.
Modified:
subversion/branches/cmake/CMakeLists.txt
Modified: subversion/branches/cmake/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/CMakeLists.txt?rev=1920465&r1=1920464&r2=1920465&view=diff
==============================================================================
--- subversion/branches/cmake/CMakeLists.txt (original)
+++ subversion/branches/cmake/CMakeLists.txt Wed Sep 4 13:19:32 2024
@@ -262,7 +262,7 @@ if(SVN_ENABLE_SWIG_PYTHON)
Interpreter
Development.Embed
)
-else()
+elseif(SVN_ENABLE_TESTS)
find_package(Python REQUIRED COMPONENTS
Interpreter
)
@@ -316,24 +316,68 @@ endif()
function(target_exports target_name)
if (WIN32)
- set(def_file_path "${CMAKE_BINARY_DIR}/${target_name}.def")
-
- add_custom_command(
- WORKING_DIRECTORY
- "${CMAKE_SOURCE_DIR}"
- COMMAND
- "${Python_EXECUTABLE}"
- ARGS
- "build/generator/extractor.py"
- ${ARGN}
- ">${def_file_path}"
- OUTPUT
- "${def_file_path}"
- DEPENDS
- "build/generator/extractor.py"
- ${ARGN}
+ set(filter_names
+ # svn_config_enumerator_t looks like (to our regex) a
+ # function declaration for svn_boolean_t
+ "svn_boolean_t"
+ # Not available on Windows
+ "svn_auth_get_keychain_simple_provider"
+ "svn_auth_get_keychain_ssl_client_cert_pw_provider"
+ "svn_auth_get_gnome_keyring_simple_provider"
+ "svn_auth_get_gnome_keyring_ssl_client_cert_pw_provider"
+ "svn_auth_get_kwallet_simple_provider"
+ "svn_auth_get_kwallet_ssl_client_cert_pw_provider"
+ "svn_auth_gnome_keyring_version"
+ "svn_auth_kwallet_version"
+ "svn_auth_get_gpg_agent_simple_provider"
+ "svn_auth_gpg_agent_version"
)
+ set(def_file_path ${CMAKE_BINARY_DIR}/${target_name}.def)
+
+ # see build/generator/extractor.py
+ set(func_regex "^([A-Za-z0-9_][A-Za-z0-9_* ]+[ *])?(svn[A-Za-z0-9_]+)\\(")
+
+ set(defs)
+ foreach(file ${ARGN})
+ file(STRINGS ${file} funcs REGEX "${func_regex}")
+
+ foreach(func_string ${funcs})
+ string(REGEX REPLACE "${func_regex}.*$" "\\2" func_name ${func_string})
+
+ list(APPEND defs "${func_name}")
+ endforeach()
+
+ get_filename_component(filename ${file} NAME)
+ if(${filename} STREQUAL "svn_ctype.h")
+ list(APPEND defs "svn_ctype_table = svn_ctype_table_internal CONSTANT")
+ elseif(${filename} STREQUAL "svn_wc_private.h")
+ # svn_wc__internal_walk_children() is now internal to libsvn_wc
+ # but entries-dump.c still calls it
+ list(APPEND defs "svn_wc__internal_walk_children")
+ endif()
+ endforeach()
+
+ list(SORT defs)
+ list(REMOVE_DUPLICATES defs)
+
+ set(def_file_content "EXPORTS\n")
+ foreach(def ${defs})
+ list(FIND filter_names "${def}" skip)
+ if(skip LESS 0)
+ string(APPEND def_file_content "${def}\n")
+ endif()
+ endforeach()
+
+ if(EXISTS "${def_file_path}")
+ file(READ "${def_file_path}" old_file_content)
+ else()
+ set(old_file_content "NOT_EXISTS")
+ endif()
+ if(NOT ${old_file_content} STREQUAL ${def_file_content})
+ file(WRITE "${def_file_path}" ${def_file_content})
+ endif()
+
target_sources("${target_name}" PRIVATE "${def_file_path}")
endif()
endfunction()