Author: rinrab
Date: Mon May 4 15:09:48 2026
New Revision: 1933812
Log:
cmake: Import targets.cmake before processing dependencies; This would allow
potentially refering to those targets in dependency search. Although cmake
allows to link a non-existing target, the target that it is linked to has to be
declared before.
* CMakeLists.txt
(target_exports, ra-libs, fs-libs, the-include): Move them up.
Modified:
subversion/trunk/CMakeLists.txt
Modified: subversion/trunk/CMakeLists.txt
==============================================================================
--- subversion/trunk/CMakeLists.txt Mon May 4 14:59:52 2026
(r1933811)
+++ subversion/trunk/CMakeLists.txt Mon May 4 15:09:48 2026
(r1933812)
@@ -244,6 +244,62 @@ endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake")
+function(target_exports target_name)
+ if (WIN32)
+ 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"
+ # Unavailable in release mode
+ "svn_fs_base__trail_debug"
+ )
+
+ set(def_file_path ${CMAKE_BINARY_DIR}/${target_name}.def)
+ set(headers)
+
+ foreach(file ${ARGN})
+ list(APPEND headers "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+ endforeach()
+
+ add_custom_command(
+ OUTPUT "${def_file_path}"
+ DEPENDS ${headers}
+ COMMAND ${CMAKE_COMMAND}
+ "-DEXPORT_HEADER_FILE_PATHS=${headers}"
+ "-DEXPORT_DEF_FILE_PATH=${def_file_path}"
+ "-DEXPORT_BLACKLIST=${filter_names}"
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/extractor.cmake"
+ WORKING_DIRECTORY "${SERF_SOURCE_DIR}"
+ )
+
+ target_sources("${target_name}" PRIVATE "${def_file_path}")
+ endif()
+endfunction()
+
+if (NOT EXISTS "${CMAKE_SOURCE_DIR}/build/cmake/targets.cmake")
+ message(SEND_ERROR
+ "The 'build/cmake/targets.cmake' file does NOT exist. "
+ "Use the following command to generate it:\n"
+ " python gen-make.py -t cmake"
+ )
+endif()
+
+add_library(ra-libs INTERFACE)
+add_library(fs-libs INTERFACE)
+
+include("build/cmake/targets.cmake")
+
# Require pkg-config if we are going to use it, to show the `Found PkgConfig`
# meassge and insure it has actually been found. (yea, this invokes the module
# for second time, but we are guaranteed to from it to not perform actual look
@@ -606,49 +662,6 @@ if(SVN_ENABLE_SWIG_RUBY)
swig_target_external_runtime(external-ruby ruby)
endif()
-function(target_exports target_name)
- if (WIN32)
- 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"
- # Unavailable in release mode
- "svn_fs_base__trail_debug"
- )
-
- set(def_file_path ${CMAKE_BINARY_DIR}/${target_name}.def)
- set(headers)
-
- foreach(file ${ARGN})
- list(APPEND headers "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
- endforeach()
-
- add_custom_command(
- OUTPUT "${def_file_path}"
- DEPENDS ${headers}
- COMMAND ${CMAKE_COMMAND}
- "-DEXPORT_HEADER_FILE_PATHS=${headers}"
- "-DEXPORT_DEF_FILE_PATH=${def_file_path}"
- "-DEXPORT_BLACKLIST=${filter_names}"
- -P "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/extractor.cmake"
- WORKING_DIRECTORY "${SERF_SOURCE_DIR}"
- )
-
- target_sources("${target_name}" PRIVATE "${def_file_path}")
- endif()
-endfunction()
-
### Checks
include(CheckIncludeFiles)
@@ -774,17 +787,6 @@ if (MSVC)
)
endif()
-if (NOT EXISTS "${CMAKE_SOURCE_DIR}/build/cmake/targets.cmake")
- message(SEND_ERROR
- "The 'build/cmake/targets.cmake' file does NOT exist. "
- "Use the following command to generate it:\n"
- " python gen-make.py -t cmake"
- )
-endif()
-
-add_library(ra-libs INTERFACE)
-add_library(fs-libs INTERFACE)
-
if(SVN_ENABLE_NLS)
# Note: when installing these dependecies with vcpkg, you will need to
# install 'gettext' package with 'tools' feature. Use the following command
@@ -866,8 +868,6 @@ set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
# (just svn_subr-1.[lib|a])
set(CMAKE_STATIC_LIBRARY_PREFIX "")
-include("build/cmake/targets.cmake")
-
if(SVN_ENABLE_TESTS)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
set(run_tests_script "${CMAKE_CURRENT_SOURCE_DIR}/build/run_tests.py")