Author: rinrab
Date: Thu Jun 27 16:46:58 2024
New Revision: 1918716
URL: http://svn.apache.org/viewvc?rev=1918716&view=rev
Log:
On the 'cmake' branch: Implement minimal external dependencies.
* build/cmake/dependencies.cmake: New file for finding dependencies and
creating `external-*` fake targets.
* build/cmake/FindAPR.cmake,
build/cmake/FindAPRUtil.cmake: New CMake modules for finding APR and
APR-Util externals.
* build/generator/gen_cmake.py
(Generator.write, dependencies enumerator): Add external dependencies to
the list of libraries with `external-` prefix.
* build/generator/templates/CMakeLists.txt.ezt
(): Include the build/cmake/dependencies.cmake file. This is needed to
have `external-*` fake targets.
Added:
subversion/branches/cmake/build/cmake/
subversion/branches/cmake/build/cmake/FindAPR.cmake
subversion/branches/cmake/build/cmake/FindAPRUtil.cmake
subversion/branches/cmake/build/cmake/dependencies.cmake
Modified:
subversion/branches/cmake/build/generator/gen_cmake.py
subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt
Added: subversion/branches/cmake/build/cmake/FindAPR.cmake
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/build/cmake/FindAPR.cmake?rev=1918716&view=auto
==============================================================================
--- subversion/branches/cmake/build/cmake/FindAPR.cmake (added)
+++ subversion/branches/cmake/build/cmake/FindAPR.cmake Thu Jun 27 16:46:58 2024
@@ -0,0 +1,61 @@
+find_path(APR_INCLUDE_DIR
+ NAMES apr.h
+ PATH_SUFFIXES
+ include
+ include/apr-1
+)
+
+find_library(APR_LIBRARY_SHARED
+ NAMES libapr-1
+ PATH_SUFFIXES lib
+)
+
+find_library(APR_LIBRARY_STATIC
+ NAMES apr-1
+ PATH_SUFFIXES lib
+)
+
+find_file(APR_DLL
+ NAMES libapr-1.dll
+ PATH_SUFFIXES bin
+)
+
+if(APR_LIBRARY_SHARED)
+ set(APR_LIBRARY ${APR_LIBRARY_SHARED})
+elseif(APR_LIBRARY_STATIC)
+ set(APR_LIBRARY ${APR_LIBRARY_STATIC})
+endif()
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ APR
+ REQUIRED_VARS
+ APR_LIBRARY
+ APR_INCLUDE_DIR
+)
+
+if(APR_FOUND)
+ if (NOT TARGET apr::apr)
+ if (APR_LIBRARY_SHARED)
+ add_library(apr::apr SHARED IMPORTED)
+ target_compile_definitions(apr::apr INTERFACE "APR_DECLARE_IMPORT")
+ set_target_properties(apr::apr PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES ${APR_INCLUDE_DIR}
+ IMPORTED_LOCATION ${APR_DLL}
+ IMPORTED_IMPLIB ${APR_LIBRARY}
+ )
+ else()
+ add_library(apr::apr STATIC IMPORTED)
+ target_compile_definitions(apr::apr INTERFACE "APR_DECLARE_STATIC")
+ set_target_properties(apr::apr PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES ${APR_INCLUDE_DIR}
+ IMPORTED_LOCATION ${APR_LIBRARY}
+ )
+ endif()
+
+ if (WIN32)
+ target_link_libraries(apr::apr INTERFACE ws2_32 rpcrt4)
+ endif()
+ endif()
+endif()
Added: subversion/branches/cmake/build/cmake/FindAPRUtil.cmake
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/build/cmake/FindAPRUtil.cmake?rev=1918716&view=auto
==============================================================================
--- subversion/branches/cmake/build/cmake/FindAPRUtil.cmake (added)
+++ subversion/branches/cmake/build/cmake/FindAPRUtil.cmake Thu Jun 27 16:46:58
2024
@@ -0,0 +1,57 @@
+find_path(APRUTIL_INCLUDE_DIR
+ NAMES apu.h
+ PATH_SUFFIXES
+ include
+ include/apr-1 # Not yet in apr
+)
+
+find_library(APRUTIL_LIBRARY_SHARED
+ NAMES libaprutil-1
+ PATH_SUFFIXES lib
+)
+
+find_library(APRUTIL_LIBRARY_STATIC
+ NAMES aprutil-1
+ PATH_SUFFIXES lib
+)
+
+find_file(APRUTIL_DLL
+ NAMES libaprutil-1.dll
+ PATH_SUFFIXES bin
+)
+
+if(APRUTIL_LIBRARY_SHARED)
+ set(APRUTIL_LIBRARY ${APRUTIL_LIBRARY_SHARED})
+elseif(APRUTIL_LIBRARY_STATIC)
+ set(APRUTIL_LIBRARY ${APRUTIL_LIBRARY_STATIC})
+endif()
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+ APRUtil
+ REQUIRED_VARS
+ APRUTIL_LIBRARY
+ APRUTIL_INCLUDE_DIR
+)
+
+if(APRUtil_FOUND)
+ if(NOT TARGET apr::aprutil)
+ if (APRUTIL_LIBRARY_SHARED)
+ add_library(apr::aprutil SHARED IMPORTED)
+ target_compile_definitions(apr::aprutil INTERFACE "APU_DECLARE_IMPORT")
+ set_target_properties(apr::aprutil PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES ${APRUTIL_INCLUDE_DIR}
+ IMPORTED_LOCATION ${APRUTIL_DLL}
+ IMPORTED_IMPLIB ${APRUTIL_LIBRARY}
+ )
+ else()
+ add_library(apr::aprutil STATIC IMPORTED)
+ target_compile_definitions(apr::aprutil INTERFACE "APU_DECLARE_STATIC")
+ set_target_properties(apr::aprutil PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES ${APRUTIL_INCLUDE_DIR}
+ IMPORTED_LOCATION ${APRUTIL_LIBRARY}
+ )
+ endif()
+ endif()
+endif()
Added: subversion/branches/cmake/build/cmake/dependencies.cmake
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/build/cmake/dependencies.cmake?rev=1918716&view=auto
==============================================================================
--- subversion/branches/cmake/build/cmake/dependencies.cmake (added)
+++ subversion/branches/cmake/build/cmake/dependencies.cmake Thu Jun 27
16:46:58 2024
@@ -0,0 +1,68 @@
+# Setup modules path
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake")
+
+### APR
+
+find_package(APR REQUIRED)
+add_library(external-apr ALIAS apr::apr)
+
+### APR-Util
+
+find_package(APRUtil REQUIRED)
+add_library(external-aprutil ALIAS apr::aprutil)
+
+### ZLIB
+
+find_package(ZLIB)
+add_library(external-zlib ALIAS ZLIB::ZLIB)
+
+### EXPAT
+
+find_package(EXPAT MODULE REQUIRED)
+add_library(external-xml ALIAS EXPAT::EXPAT)
+
+### LZ4
+
+option(SVN_USE_INTERNAL_LZ4 "Use internal version of lz4" ON)
+
+if(SVN_USE_INTERNAL_LZ4)
+ add_library(external-lz4 STATIC "build/win32/empty.c")
+ target_compile_definitions(external-lz4 PUBLIC "SVN_INTERNAL_LZ4")
+else()
+ find_package(lz4 CONFIG REQUIRED)
+ add_library(external-lz4 ALIAS lz4::lz4)
+endif()
+
+### UTF8PROC
+
+option(SVN_USE_INTERNAL_UTF8PROC "Use internal version of utf8proc" ON)
+
+if(SVN_USE_INTERNAL_UTF8PROC)
+ add_library(external-utf8proc STATIC "build/win32/empty.c")
+ target_compile_definitions(external-utf8proc PUBLIC "SVN_INTERNAL_UTF8PROC")
+else()
+ message(FATAL_ERROR "TODO:")
+ # find_package(utf8proc CONFIG REQUIRED)
+ # add_library(external-utf8proc ALIAS utf8proc)
+endif()
+
+### SQLite3
+
+option(SVN_SQLITE_USE_AMALGAMATION "Use sqlite amalgamation" ON)
+set(SVN_SQLITE_AMALGAMATION_ROOT "${CMAKE_SOURCE_DIR}/sqlite-amalgamation"
+ CACHE STRING "Directory with sqlite amalgamation"
+)
+
+if(SVN_SQLITE_USE_AMALGAMATION)
+ add_library(external-sqlite STATIC "build/win32/empty.c")
+ find_path(SVN_SQLITE_AMALGAMATION_DIR
+ NAMES sqlite3.c
+ PATHS ${SVN_SQLITE_AMALGAMATION_ROOT}
+ )
+ target_include_directories(external-sqlite PUBLIC
${SVN_SQLITE_AMALGAMATION_DIR})
+ target_compile_definitions(external-sqlite PUBLIC SVN_SQLITE_INLINE)
+else()
+ find_package(SQLite3 REQUIRED)
+ add_library(external-sqlite ALIAS SQLite::SQLite3)
+endif()
Modified: subversion/branches/cmake/build/generator/gen_cmake.py
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/build/generator/gen_cmake.py?rev=1918716&r1=1918715&r2=1918716&view=diff
==============================================================================
--- subversion/branches/cmake/build/generator/gen_cmake.py (original)
+++ subversion/branches/cmake/build/generator/gen_cmake.py Thu Jun 27 16:46:58
2024
@@ -77,8 +77,24 @@ class Generator(gen_base.GeneratorBase):
for dep in self.get_dependecies(target.name):
if isinstance(dep, gen_base.TargetLinked):
if dep.external_lib:
- # TODO: implement external dependecies
- pass
+ if dep.name == "ra-libs":
+ # TODO
+ pass
+ elif dep.name == "fs-libs":
+ # TODO
+ pass
+ elif dep.name in ["apriconv",
+ "apr_memcache",
+ "magic",
+ "intl",
+ "macos-plist",
+ "macos-keychain",
+ "sasl"]:
+ # These dependencies are currently ignored
+ # TODO:
+ pass
+ else:
+ libs.append("external-" + dep.name)
else:
libs.append(dep.name)
elif isinstance(dep, gen_base.ObjectFile):
Modified: subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt
URL:
http://svn.apache.org/viewvc/subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt?rev=1918716&r1=1918715&r2=1918716&view=diff
==============================================================================
--- subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt
(original)
+++ subversion/branches/cmake/build/generator/templates/CMakeLists.txt.ezt Thu
Jun 27 16:46:58 2024
@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.12)
project("Subversion")
+include("build/cmake/dependencies.cmake")
+
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/subversion/svn_private_config.hw"
"${CMAKE_CURRENT_BINARY_DIR}/svn_private_config.h"