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"


Reply via email to