svn commit: r1924301 - /apr/apr/branches/1.8.x/CMakeLists.txt
[email protected] Tue, 11 Mar 2025 16:37:57 -0000
Newsgroups
gmane.comp.apache.apr.cvs
Message-ID
<[email protected] >
Author: minfrin
Date: Tue Mar 11 16:37:56 2025
New Revision: 1924301
URL: http://svn.apache.org/viewvc?rev=1924301&view=rev
Log:
Forward port cmake build from apr-1.7 to apr-1.8.
Modified:
apr/apr/branches/1.8.x/CMakeLists.txt
Modified: apr/apr/branches/1.8.x/CMakeLists.txt
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.8.x/CMakeLists.txt?rev=1924301&r1=1924300&r2=1924301&view=diff
==============================================================================
--- apr/apr/branches/1.8.x/CMakeLists.txt (original)
+++ apr/apr/branches/1.8.x/CMakeLists.txt Tue Mar 11 16:37:56 2025
@@ -21,14 +21,45 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(APR C)
+# Enable support for MSVC runtime library selection by abstraction
+# if supported by CMake.
+IF(POLICY CMP0091)
+ CMAKE_POLICY(SET CMP0091 NEW)
+ENDIF()
+
+# Add simple support CMAKE_WARNING_AS_ERROR if CMake doesn't
+# support it.
+IF (CMAKE_VERSION VERSION_LESS 3.24)
+ IF(CMAKE_WARNING_AS_ERROR AND MSVC)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
+ ENDIF()
+ENDIF()
+
+SET(apr_name apr-1)
+SET(apr_libname libapr-1)
+
OPTION(APR_INSTALL_PRIVATE_H "Install selected private .h files (for httpd)" OFF)
OPTION(APR_HAVE_IPV6 "IPv6 support" ON)
OPTION(INSTALL_PDB "Install .pdb files (if generated)" ON)
OPTION(APR_BUILD_TESTAPR "Build the test suite" OFF)
+OPTION(APR_BUILD_SHARED "Build shared libraries" ON)
+OPTION(APR_BUILD_STATIC "Build static libraries" ON)
OPTION(TEST_STATIC_LIBS "Test programs use APR static libraries instead of shared libraries?" OFF)
SET(MIN_WINDOWS_VER "Vista"
CACHE STRING "Minimum Windows version")
+SET(APR_INSTALL_BIN_DIR "bin" CACHE STRING "Install subdirectory for binary files")
+SET(APR_INSTALL_LIB_DIR "lib" CACHE STRING "Install subdirectory for library files")
+SET(APR_INSTALL_INCLUDE_DIR "include" CACHE STRING "Install subdirectory for include files")
+
+IF(NOT APR_BUILD_SHARED AND NOT APR_BUILD_STATIC)
+ MESSAGE(FATAL_ERROR "Both APR_BUILD_SHARED and APR_BUILD_STATIC have been disabled")
+ENDIF()
+
+IF(NOT APR_BUILD_STATIC AND TEST_STATIC_LIBS)
+ MESSAGE(FATAL_ERROR "APR_BUILD_STATIC has been disabled, but TEST_STATIC_LIBS is enabled")
+ENDIF()
+
# create 1-or-0 representation of feature tests for apr.h
SET(apr_have_ipv6_10 0)
@@ -47,6 +78,13 @@ ELSE()
SET(win32_winnt_str ${MIN_WINDOWS_VER})
ENDIF()
+# Read current version.
+FILE(STRINGS include/apr_version.h VERSION_STRINGS REGEX "#define (APR_MAJOR_VERSION|APR_MINOR_VERSION|APR_PATCH_VERSION)")
+
+STRING(REGEX REPLACE ".*#define APR_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" APR_MAJOR_VERSION ${VERSION_STRINGS})
+STRING(REGEX REPLACE ".*#define APR_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" APR_MINOR_VERSION ${VERSION_STRINGS})
+STRING(REGEX REPLACE ".*#define APR_PATCH_VERSION[ \t]+([0-9]+).*" "\\1" APR_PATCH_VERSION ${VERSION_STRINGS})
+
CONFIGURE_FILE(include/apr.hwc
${PROJECT_BINARY_DIR}/apr.h)
@@ -71,16 +109,15 @@ ADD_CUSTOM_TARGET(
# you've generated apr.h before using a different build
SET(APR_INCLUDE_DIRECTORIES
- ${PROJECT_BINARY_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${CMAKE_CURRENT_SOURCE_DIR}/include/arch/win32
- ${CMAKE_CURRENT_SOURCE_DIR}/include/arch/unix
- ${CMAKE_CURRENT_SOURCE_DIR}/include/private
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/arch/win32>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/arch/unix>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/private>
)
SET(APR_SYSTEM_LIBS
ws2_32
- mswsock
rpcrt4
)
@@ -91,6 +128,7 @@ SET(APR_PUBLIC_HEADERS_STATIC
include/apr_atomic.h
include/apr_cstr.h
include/apr_dso.h
+ include/apr_encode.h
include/apr_env.h
include/apr_errno.h
include/apr_escape.h
@@ -178,7 +216,6 @@ SET(APR_SOURCES
network_io/unix/sockaddr.c
network_io/unix/socket_util.c
network_io/win32/sendrecv.c
- network_io/win32/socket_pipe.c
network_io/win32/sockets.c
network_io/win32/sockopt.c
passwd/apr_getpass.c
@@ -269,27 +306,55 @@ IF (MSVC)
ENDIF()
# libapr-1 is shared, apr-1 is static
-ADD_LIBRARY(libapr-1 SHARED ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED} libapr.rc)
-SET(install_targets ${install_targets} libapr-1)
-SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/libapr-1.pdb)
-TARGET_LINK_LIBRARIES(libapr-1 ${APR_SYSTEM_LIBS})
-SET_TARGET_PROPERTIES(libapr-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_EXPORT;WINNT")
-ADD_DEPENDENCIES(libapr-1 test_char_header)
-
-ADD_LIBRARY(apr-1 STATIC ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED})
-SET(install_targets ${install_targets} apr-1)
-TARGET_LINK_LIBRARIES(apr-1 ${APR_SYSTEM_LIBS})
-SET_TARGET_PROPERTIES(apr-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_STATIC;WINNT")
-ADD_DEPENDENCIES(apr-1 test_char_header)
+IF (APR_BUILD_SHARED)
+ ADD_LIBRARY(${apr_libname} SHARED ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED} libapr.rc)
+ LIST(APPEND install_targets ${apr_libname})
+ LIST(APPEND install_bin_pdb $<TARGET_PDB_FILE:${apr_libname}>)
+ TARGET_LINK_LIBRARIES(${apr_libname}
+ PRIVATE ${APR_SYSTEM_LIBS})
+ TARGET_COMPILE_DEFINITIONS(${apr_libname}
+ PRIVATE "APR_DECLARE_EXPORT;WINNT"
+ INTERFACE "APR_DECLARE_IMPORT;WINNT")
+ TARGET_INCLUDE_DIRECTORIES(${apr_libname}
+ PRIVATE ${APR_INCLUDE_DIRECTORIES}
+ INTERFACE $<INSTALL_INTERFACE:${APR_INSTALL_INCLUDE_DIR}> ${APR_INCLUDE_DIRECTORIES}
+ )
+ ADD_DEPENDENCIES(${apr_libname} test_char_header)
+ENDIF()
+
+IF (APR_BUILD_STATIC)
+ ADD_LIBRARY(${apr_name} STATIC ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED})
+ LIST(APPEND install_targets ${apr_name})
+ TARGET_LINK_LIBRARIES(${apr_name}
+ PRIVATE ${APR_SYSTEM_LIBS})
+ TARGET_COMPILE_DEFINITIONS(${apr_name}
+ PRIVATE "APR_DECLARE_STATIC;WINNT"
+ INTERFACE "APR_DECLARE_STATIC;WINNT")
+ TARGET_INCLUDE_DIRECTORIES(${apr_name}
+ PRIVATE ${APR_INCLUDE_DIRECTORIES}
+ INTERFACE $<INSTALL_INTERFACE:${APR_INSTALL_INCLUDE_DIR}> ${APR_INCLUDE_DIRECTORIES}
+ )
+ ADD_DEPENDENCIES(${apr_name} test_char_header)
+ENDIF()
# libaprapp-1 and aprapp-1 are static
-ADD_LIBRARY(libaprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED})
-SET(install_targets ${install_targets} libaprapp-1)
-SET_TARGET_PROPERTIES(libaprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_APP;WINNT")
-
-ADD_LIBRARY(aprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED})
-SET(install_targets ${install_targets} aprapp-1)
-SET_TARGET_PROPERTIES(aprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_STATIC;APR_APP;WINNT")
+IF (APR_BUILD_SHARED)
+ ADD_LIBRARY(libaprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED})
+ LIST(APPEND install_targets libaprapp-1)
+ SET_TARGET_PROPERTIES(libaprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_APP;WINNT")
+ TARGET_INCLUDE_DIRECTORIES(libaprapp-1
+ PRIVATE ${APR_INCLUDE_DIRECTORIES}
+ )
+ENDIF()
+
+IF (APR_BUILD_STATIC)
+ ADD_LIBRARY(aprapp-1 STATIC misc/win32/apr_app.c misc/win32/internal.c ${APR_PUBLIC_HEADERS_GENERATED})
+ LIST(APPEND install_targets aprapp-1)
+ SET_TARGET_PROPERTIES(aprapp-1 PROPERTIES COMPILE_DEFINITIONS "APR_DECLARE_STATIC;APR_APP;WINNT")
+ TARGET_INCLUDE_DIRECTORIES(aprapp-1
+ PRIVATE ${APR_INCLUDE_DIRECTORIES}
+ )
+ENDIF()
IF(APR_BUILD_TESTAPR)
ENABLE_TESTING()
@@ -305,26 +370,18 @@ IF(APR_BUILD_TESTAPR)
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_SOURCE_DIR}/test/data/mmap_datafile.txt
${PROJECT_BINARY_DIR}/data/mmap_datafile.txt)
- EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different
- ${PROJECT_SOURCE_DIR}/test/data/mmap_large_datafile.txt
- ${PROJECT_BINARY_DIR}/data/mmap_large_datafile.txt)
IF(TEST_STATIC_LIBS)
- SET(whichapr apr-1)
+ SET(whichapr ${apr_name})
SET(whichaprapp aprapp-1)
- SET(apiflag -DAPR_DECLARE_STATIC)
ELSE()
- SET(whichapr libapr-1)
+ SET(whichapr ${apr_libname})
SET(whichaprapp libaprapp-1)
- SET(apiflag)
ENDIF()
ADD_EXECUTABLE(testapp test/testapp.c)
- TARGET_LINK_LIBRARIES(testapp ${whichapr} ${whichaprapp} ${APR_SYSTEM_LIBS})
+ TARGET_LINK_LIBRARIES(testapp ${whichapr} ${whichaprapp})
SET_TARGET_PROPERTIES(testapp PROPERTIES LINK_FLAGS /entry:wmainCRTStartup)
- IF(apiflag)
- SET_TARGET_PROPERTIES(testapp PROPERTIES COMPILE_FLAGS ${apiflag})
- ENDIF()
ADD_TEST(NAME testapp COMMAND testapp)
SET (APR_TEST_SOURCES
@@ -337,27 +394,21 @@ IF(APR_BUILD_TESTAPR)
ENDFOREACH()
ADD_EXECUTABLE(testall ${APR_TEST_SOURCES})
- TARGET_LINK_LIBRARIES(testall ${whichapr} ${APR_SYSTEM_LIBS})
+ TARGET_LINK_LIBRARIES(testall ${whichapr} ws2_32.lib)
SET_TARGET_PROPERTIES(testall PROPERTIES COMPILE_DEFINITIONS "BINPATH=$<TARGET_FILE_DIR:testall>")
- IF(apiflag)
- SET_TARGET_PROPERTIES(testall PROPERTIES COMPILE_FLAGS ${apiflag})
- ENDIF()
FOREACH(test ${APR_TEST_SUITES})
ADD_TEST(NAME ${test} COMMAND testall -v ${test})
ENDFOREACH()
ADD_LIBRARY(mod_test MODULE test/mod_test.c)
- TARGET_LINK_LIBRARIES(mod_test ${whichapr} ${APR_SYSTEM_LIBS})
+ TARGET_LINK_LIBRARIES(mod_test ${whichapr})
SET_PROPERTY(TARGET mod_test APPEND PROPERTY LINK_FLAGS /export:print_hello)
# nasty work-around for difficulties adding more than one additional flag
# (they get joined in a bad way behind the scenes)
GET_PROPERTY(link_flags TARGET mod_test PROPERTY LINK_FLAGS)
SET(link_flags "${link_flags} /export:count_reps")
SET_TARGET_PROPERTIES(mod_test PROPERTIES LINK_FLAGS ${link_flags})
- IF(apiflag)
- SET_TARGET_PROPERTIES(mod_test PROPERTIES COMPILE_FLAGS ${apiflag})
- ENDIF()
# Build all the single-source executable files with no special build
# requirements.
@@ -381,11 +432,10 @@ IF(APR_BUILD_TESTAPR)
FOREACH(sourcefile ${single_source_programs})
STRING(REGEX REPLACE ".*/([^\\]+)\\.c" "\\1" proggie ${sourcefile})
ADD_EXECUTABLE(${proggie} ${sourcefile})
- TARGET_LINK_LIBRARIES(${proggie} ${whichapr} ${APR_SYSTEM_LIBS})
+ TARGET_LINK_LIBRARIES(${proggie} ${whichapr})
SET_TARGET_PROPERTIES(${proggie} PROPERTIES COMPILE_DEFINITIONS "BINPATH=$<TARGET_FILE_DIR:${proggie}>")
- IF(apiflag)
- SET_TARGET_PROPERTIES(${proggie} PROPERTIES COMPILE_FLAGS ${apiflag})
- ENDIF()
+
+ ADD_DEPENDENCIES(testall ${proggie})
ENDFOREACH()
# Add tests for programs that run by themselves with no arguments.
@@ -411,20 +461,38 @@ IF(APR_BUILD_TESTAPR)
ENDIF (APR_BUILD_TESTAPR)
# Installation
+INCLUDE(CMakePackageConfigHelpers)
+
+string(TOLOWER "${PROJECT_NAME}" project_name_lower)
-INSTALL(TARGETS ${install_targets}
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib
- )
+write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${project_name_lower}-config-version.cmake"
+ VERSION ${APR_MAJOR_VERSION}.${APR_MINOR_VERSION}.${APR_PATCH_VERSION}
+ COMPATIBILITY SameMajorVersion
+)
+
+INSTALL(TARGETS ${install_targets} EXPORT apr-config
+ RUNTIME DESTINATION ${APR_INSTALL_BIN_DIR}
+ LIBRARY DESTINATION ${APR_INSTALL_LIB_DIR}
+ ARCHIVE DESTINATION ${APR_INSTALL_LIB_DIR}
+)
+
+INSTALL(EXPORT apr-config
+ NAMESPACE apr::
+ DESTINATION "lib/cmake/${project_name_lower}"
+ FILE "${project_name_lower}-config.cmake"
+)
+
+INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/${project_name_lower}-config-version.cmake"
+ DESTINATION "lib/cmake/${project_name_lower}"
+)
IF(INSTALL_PDB)
INSTALL(FILES ${install_bin_pdb}
- DESTINATION bin
+ DESTINATION ${APR_INSTALL_BIN_DIR}
CONFIGURATIONS RelWithDebInfo Debug)
ENDIF()
-INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION include)
+INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION ${APR_INSTALL_INCLUDE_DIR})
IF(APR_INSTALL_PRIVATE_H)
# Kludges for unexpected dependencies of httpd 2.x, not installed by default
SET(APR_PRIVATE_H_FOR_HTTPD
@@ -433,8 +501,8 @@ IF(APR_INSTALL_PRIVATE_H)
include/arch/win32/apr_arch_utf8.h
include/arch/win32/apr_private.h
)
- INSTALL(FILES ${APR_PRIVATE_H_FOR_HTTPD} DESTINATION include/arch/win32)
- INSTALL(FILES include/arch/apr_private_common.h DESTINATION include/arch)
+ INSTALL(FILES ${APR_PRIVATE_H_FOR_HTTPD} DESTINATION ${APR_INSTALL_INCLUDE_DIR}/arch/win32)
+ INSTALL(FILES include/arch/apr_private_common.h DESTINATION ${APR_INSTALL_INCLUDE_DIR}/arch)
ENDIF()
STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype)
@@ -446,9 +514,14 @@ MESSAGE(STATUS "")
MESSAGE(STATUS " Build type ...................... : ${CMAKE_BUILD_TYPE}")
MESSAGE(STATUS " Install .pdb (if available)...... : ${INSTALL_PDB}")
MESSAGE(STATUS " Install prefix .................. : ${CMAKE_INSTALL_PREFIX}")
+MESSAGE(STATUS " Directory for binary files .... : PREFIX/${APR_INSTALL_BIN_DIR}")
+MESSAGE(STATUS " Directory for library files ... : PREFIX/${APR_INSTALL_LIB_DIR}")
+MESSAGE(STATUS " Directory for include files ... : PREFIX/${APR_INSTALL_INCLUDE_DIR}")
MESSAGE(STATUS " C compiler ...................... : ${CMAKE_C_COMPILER}")
MESSAGE(STATUS " IPv6 ............................ : ${APR_HAVE_IPV6}")
MESSAGE(STATUS " Minimum Windows version ......... : ${MIN_WINDOWS_VER}")
+MESSAGE(STATUS " Build shared libs ............... : ${APR_BUILD_SHARED}")
+MESSAGE(STATUS " Build static libs ............... : ${APR_BUILD_STATIC}")
MESSAGE(STATUS " Build test suite ................ : ${APR_BUILD_TESTAPR}")
IF(TEST_STATIC_LIBS)
MESSAGE(STATUS " (testing static libraries)")