Author: jun66j5
Date: Sun May 10 07:38:44 2026
New Revision: 1934025

Log:
cmake: Use apxs for building Apache modules on Unix environments.

* CMakeLists.txt
  (): Find Httpd package before `include(.../targets.cmake)`.

* build/cmake/FindHttpd.cmake
  (): Add license header, use `include(GNUInstallDirs)` for libexecdir,
  initialize variables using apxs on non-WIN32, and add `HTTPD_MODULES_DIR`
  cache variable.

* build/generator/templates/targets.cmake.ezt
  (Apache modules): Set empty to prefix of *.lib files on WIN32 and use
  `${HTTPD_MODULES_DIR}` for destination of *.so files.

Modified:
   subversion/trunk/CMakeLists.txt
   subversion/trunk/build/cmake/FindHttpd.cmake
   subversion/trunk/build/generator/templates/targets.cmake.ezt

Modified: subversion/trunk/CMakeLists.txt
==============================================================================
--- subversion/trunk/CMakeLists.txt     Sun May 10 07:31:28 2026        
(r1934024)
+++ subversion/trunk/CMakeLists.txt     Sun May 10 07:38:44 2026        
(r1934025)
@@ -298,6 +298,14 @@ if (NOT EXISTS "${CMAKE_SOURCE_DIR}/buil
   )
 endif()
 
+### Httpd
+
+if(SVN_ENABLE_APACHE_MODULES)
+  find_package(Httpd REQUIRED)
+  add_library(external-libhttpd ALIAS httpd::httpd)
+  add_library(external-mod_dav ALIAS httpd::mod_dav)
+endif()
+
 add_library(ra-libs INTERFACE)
 add_library(fs-libs INTERFACE)
 
@@ -497,14 +505,6 @@ elseif(SVN_ENABLE_TESTS)
   )
 endif()
 
-### Httpd
-
-if(SVN_ENABLE_APACHE_MODULES)
-  find_package(Httpd REQUIRED)
-  add_library(external-libhttpd ALIAS httpd::httpd)
-  add_library(external-mod_dav ALIAS httpd::mod_dav)
-endif()
-
 ### KWallet
 
 if(SVN_ENABLE_AUTH_KWALLET)

Modified: subversion/trunk/build/cmake/FindHttpd.cmake
==============================================================================
--- subversion/trunk/build/cmake/FindHttpd.cmake        Sun May 10 07:31:28 
2026        (r1934024)
+++ subversion/trunk/build/cmake/FindHttpd.cmake        Sun May 10 07:38:44 
2026        (r1934025)
@@ -1,62 +1,123 @@
-find_path(HTTPD_INCLUDE_DIR
-  NAMES httpd.h
-  PATH_SUFFIXES
-    include
-)
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# FindHttpd.cmake -- CMake module for Httpd library
+#
+
+include(GNUInstallDirs)
+
+if(WIN32)
+  find_path(HTTPD_INCLUDE_DIR
+    NAMES httpd.h
+    PATH_SUFFIXES
+      include
+  )
 
-find_library(HTTPD_LIBRARY
-  NAMES libhttpd
-  PATH_SUFFIXES lib
-)
+  find_library(HTTPD_LIBRARY
+    NAMES libhttpd
+    PATH_SUFFIXES lib
+  )
 
-find_file(HTTPD_DLL
-  NAMES libhttpd.dll
-  PATH_SUFFIXES bin
-)
+  find_library(MOD_DAV_LIBRARY
+    NAMES mod_dav
+    PATH_SUFFIXES lib
+  )
 
-find_library(MOD_DAV_LIBRARY
-  NAMES mod_dav
-  PATH_SUFFIXES lib
-)
+  if (HTTPD_INCLUDE_DIR AND EXISTS "${HTTPD_INCLUDE_DIR}/ap_release.h")
+    file(
+      STRINGS "${HTTPD_INCLUDE_DIR}/ap_release.h" VERSION_STRINGS
+      REGEX "#define 
(AP_SERVER_MAJORVERSION_NUMBER|AP_SERVER_MINORVERSION_NUMBER|AP_SERVER_PATCHLEVEL_NUMBER)"
+    )
 
-if (HTTPD_INCLUDE_DIR AND EXISTS "${HTTPD_INCLUDE_DIR}/ap_release.h")
-  file(
-    STRINGS "${HTTPD_INCLUDE_DIR}/ap_release.h" VERSION_STRINGS
-    REGEX "#define 
(AP_SERVER_MAJORVERSION_NUMBER|AP_SERVER_MINORVERSION_NUMBER|AP_SERVER_PATCHLEVEL_NUMBER)"
-  )
+    string(REGEX REPLACE ".*AP_SERVER_MAJORVERSION_NUMBER +([0-9]+).*" "\\1" 
HTTPD_VERSION_MAJOR ${VERSION_STRINGS})
+    string(REGEX REPLACE ".*AP_SERVER_MINORVERSION_NUMBER +([0-9]+).*" "\\1" 
HTTPD_VERSION_MINOR ${VERSION_STRINGS})
+    string(REGEX REPLACE ".*AP_SERVER_PATCHLEVEL_NUMBER +([0-9]+).*" "\\1" 
HTTPD_VERSION_PATCH ${VERSION_STRINGS})
 
-  string(REGEX REPLACE ".*AP_SERVER_MAJORVERSION_NUMBER +([0-9]+).*" "\\1" 
HTTPD_VERSION_MAJOR ${VERSION_STRINGS})
-  string(REGEX REPLACE ".*AP_SERVER_MINORVERSION_NUMBER +([0-9]+).*" "\\1" 
HTTPD_VERSION_MINOR ${VERSION_STRINGS})
-  string(REGEX REPLACE ".*AP_SERVER_PATCHLEVEL_NUMBER +([0-9]+).*" "\\1" 
HTTPD_VERSION_PATCH ${VERSION_STRINGS})
+    set(HTTPD_VERSION 
"${HTTPD_VERSION_MAJOR}.${HTTPD_VERSION_MINOR}.${HTTPD_VERSION_PATCH}")
+  endif()
+  set(_httpd_modules_dir "${CMAKE_INSTALL_BINDIR}")
+
+else()
+  find_program(APXS_EXECUTABLE
+               NAMES apxs2 apxs
+               PATH /usr/local/apache2/bin /usr/local/apache/bin /usr/bin 
/usr/sbin)
+
+  function(_APXS_CONFIG_VAR VARNAME OUTVAR)
+    execute_process(COMMAND "${APXS_EXECUTABLE}" -q ${VARNAME}
+                    RESULT_VARIABLE _APXS_SUCCESS
+                    OUTPUT_VARIABLE _APXS_OUTPUT
+                    OUTPUT_STRIP_TRAILING_WHITESPACE
+                    ERROR_QUIET)
+    set(${OUTVAR} "${_APXS_OUTPUT}" PARENT_SCOPE)
+  endfunction()
+
+  if(APXS_EXECUTABLE)
+    _APXS_CONFIG_VAR("HTTPD_VERSION" HTTPD_VERSION)
+    _APXS_CONFIG_VAR("INCLUDEDIR" HTTPD_INCLUDE_DIR)
+    set(_httpd_modules_dir "${CMAKE_INSTALL_LIBEXECDIR}")
+    set(HTTPD_FOUND TRUE)
+  endif()
 
-  set(HTTPD_VERSION 
"${HTTPD_VERSION_MAJOR}.${HTTPD_VERSION_MINOR}.${HTTPD_VERSION_PATCH}")
 endif()
 
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+set(HTTPD_MODULES_DIR "${_httpd_modules_dir}"
+    CACHE PATH "Install directory for Apache modules")
+
+find_package_handle_standard_args(
   Httpd
   REQUIRED_VARS
-    HTTPD_LIBRARY
     HTTPD_INCLUDE_DIR
-    MOD_DAV_LIBRARY
+    HTTPD_MODULES_DIR
   VERSION_VAR
     HTTPD_VERSION
 )
 
 if(HTTPD_FOUND)
   if(NOT TARGET httpd::httpd)
-    add_library(httpd::httpd SHARED IMPORTED)
+    add_library(httpd::httpd INTERFACE IMPORTED)
     set_target_properties(httpd::httpd PROPERTIES
       INTERFACE_INCLUDE_DIRECTORIES ${HTTPD_INCLUDE_DIR}
-      IMPORTED_LOCATION ${HTTPD_DLL}
-      IMPORTED_IMPLIB ${HTTPD_LIBRARY}
     )
+    if(WIN32)
+      set_target_properties(httpd::httpd PROPERTIES
+        INTERFACE_LINK_LIBRARIES ${HTTPD_LIBRARY}
+      )
+    elseif(APPLE)
+      target_link_options(httpd::httpd INTERFACE
+        "-Wl,-undefined,dynamic_lookup"
+      )
+    endif()
   endif()
 
   if(NOT TARGET httpd::mod_dav)
-    add_library(httpd::mod_dav STATIC IMPORTED)
+    add_library(httpd::mod_dav INTERFACE IMPORTED)
     set_target_properties(httpd::mod_dav PROPERTIES
       INTERFACE_INCLUDE_DIRECTORIES ${HTTPD_INCLUDE_DIR}
-      IMPORTED_LOCATION ${MOD_DAV_LIBRARY}
     )
+    if(WIN32)
+      set_target_properties(httpd::mod_dav PROPERTIES
+        INTERFACE_LINK_LIBRARIES ${MOD_DAV_LIBRARY}
+      )
+    elseif(APPLE)
+      target_link_options(httpd::mod_dav INTERFACE
+        "-Wl,-undefined,dynamic_lookup"
+      )
+    endif()
   endif()
+
 endif()

Modified: subversion/trunk/build/generator/templates/targets.cmake.ezt
==============================================================================
--- subversion/trunk/build/generator/templates/targets.cmake.ezt        Sun May 
10 07:31:28 2026        (r1934024)
+++ subversion/trunk/build/generator/templates/targets.cmake.ezt        Sun May 
10 07:38:44 2026        (r1934025)
@@ -49,7 +49,10 @@ if ([targets.enable_condition])[is targe
     [targets.msvc_export][end]
   )[end]
   set_target_properties([targets.name] PROPERTIES OUTPUT_NAME 
"[targets.output_name]")[if-any targets.is_apache_mod]
-  set_target_properties([targets.name] PROPERTIES PREFIX "" SUFFIX ".so")[else]
+  set_target_properties([targets.name] PROPERTIES PREFIX "" SUFFIX ".so")
+  if(WIN32)
+    set_target_properties([targets.name] PROPERTIES IMPORT_PREFIX "")
+  endif()[else]
   set_target_properties([targets.name] PROPERTIES SOVERSION "${SVN_SOVERSION}" 
VERSION "${SVN_SOVERSION}.${SVN_VER_MINOR}.${SVN_VER_PATCH}")[end]
   target_include_directories([targets.name] PUBLIC
     "${CMAKE_CURRENT_SOURCE_DIR}/subversion/include"
@@ -91,6 +94,8 @@ if ([targets.enable_condition])[is targe
   if (WIN32)
     target_sources([targets.name] PRIVATE build/win32/svn.rc)
   endif()[if-any targets.install_target]
-  install(TARGETS [targets.name])[end][end]
+  install(TARGETS [targets.name][if-any targets.is_apache_mod]
+    LIBRARY DESTINATION "${HTTPD_MODULES_DIR}"
+  [end])[end][end]
 endif()
 [end]

Reply via email to