You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@serf.apache.org by br...@apache.org on 2018/09/23 19:58:09 UTC
svn commit: r1841780 - in /serf/trunk: CMakeLists.txt build/FindAPR.cmake
build/FindAPRUtil.cmake
Author: brane
Date: Sun Sep 23 19:58:08 2018
New Revision: 1841780
URL: http://svn.apache.org/viewvc?rev=1841780&view=rev
Log:
Use proper target dependencies for APR and APR-Util, and support
linking with static APR on Windows.
* build/FindAPR.cmake: Define targets APR::APR and APR::APR_static.
* build/FindAPRUtil.cmake: Define targets APR::APRUTIL and APR::APRUTIL_static.
* CMakeLists.txt:
- Use the new APR::* target dependencies instead of variables,
except for generating the pkg-config file.
- Support the APR_STATIC flag on Windows.
Modified:
serf/trunk/CMakeLists.txt
serf/trunk/build/FindAPR.cmake
serf/trunk/build/FindAPRUtil.cmake
Modified: serf/trunk/CMakeLists.txt
URL: http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1841780&r1=1841779&r2=1841780&view=diff
==============================================================================
--- serf/trunk/CMakeLists.txt (original)
+++ serf/trunk/CMakeLists.txt Sun Sep 23 19:58:08 2018
@@ -164,6 +164,7 @@ if(SERF_WINDOWS)
set(SERF_STANDARD_LIBRARIES
"crypt32.lib"
"mswsock.lib"
+ "rpcrt4.lib"
"secur32.lib"
"ws2_32.lib"
)
@@ -179,14 +180,16 @@ if(BROTLI)
message(WARNING "option BROTLI is not implemented")
endif()
-if(APR_STATIC)
- message(WARNING "option APR_STATIC is not implemented")
-endif()
-
-if(EXPAT)
- set(PC_EXPAT_INCLUDE_DIRS "${EXPAT}/include")
- set(PC_EXPAT_LIBRARY_DIRS "${EXPAT}/lib")
-endif()
+if(SERF_WINDOWS)
+ if(EXPAT)
+ set(PC_EXPAT_INCLUDE_DIRS "${EXPAT}/include")
+ set(PC_EXPAT_LIBRARY_DIRS "${EXPAT}/lib")
+ endif(EXPAT)
+else(SERF_WINDOWS)
+ if(EXPAT)
+ message(WARNING "option EXPAT is not implemented on this platform")
+ endif(EXPAT)
+endif(SERF_WINDOWS)
# Find dependencies
find_package(OpenSSL)
@@ -198,23 +201,27 @@ if(SERF_WINDOWS)
# Find ZLIB and OpenSSL runtime libraries etc.
SerfWindowsProcessOpenSSL()
SerfWindowsProcessZLIB()
-endif()
-
+endif(SERF_WINDOWS)
-set(SERF_INTERFACE_INCLUDES
- ${APR_INCLUDES}
- ${APRUTIL_INCLUDES}
-)
-list(REMOVE_DUPLICATES SERF_INTERFACE_INCLUDES)
-
-set(SERF_INTERFACE_LIBRARIES
- ${APR_LIBRARIES}
- ${APR_EXTRALIBS}
- ${APRUTIL_LIBRARIES}
- ${APRUTIL_EXTRALIBS}
-)
-list(REMOVE_DUPLICATES SERF_INTERFACE_LIBRARIES)
+# Calculate the set of private and public targets
+set(SERF_PRIVATE_TARGETS OpenSSL::Crypto OpenSSL::SSL ZLIB::ZLIB)
+if(APR_STATIC)
+ if(SERF_WINDOWS)
+ list(APPEND SERF_PUBLIC_TARGETS APR::APR_static)
+ if(NOT APR_CONTAINS_APRUTIL)
+ list(APPEND SERF_PUBLIC_TARGETS APR::APRUTIL_static)
+ endif()
+ add_definitions("/DAPR_DECLARE_STATIC" "/DAPU_DECLARE_STATIC")
+ else(SERF_WINDOWS)
+ message(WARNING "option APR_STATIC is not implemented on this platform")
+ endif(SERF_WINDOWS)
+else(APR_STATIC)
+ list(APPEND SERF_PUBLIC_TARGETS APR::APR)
+ if(NOT APR_CONTAINS_APRUTIL)
+ list(APPEND SERF_PUBLIC_TARGETS APR::APRUTIL)
+ endif()
+endif(APR_STATIC)
# Feature tests
include(SerfChecks)
@@ -293,13 +300,11 @@ endif(NOT MSVC)
if(NOT SKIP_SHARED)
add_library(serf_shared SHARED ${SOURCES} ${SHARED_SOURCES})
target_compile_options(serf_shared PUBLIC ${APR_CFLAGS})
- target_include_directories(serf_shared SYSTEM BEFORE
- PUBLIC ${SERF_INTERFACE_INCLUDES})
target_include_directories(serf_shared PUBLIC ${SERF_SOURCE_DIR})
target_link_libraries(serf_shared
- PRIVATE OpenSSL::Crypto OpenSSL::SSL ZLIB::ZLIB
+ PRIVATE ${SERF_PRIVATE_TARGETS}
${SERF_STANDARD_LIBRARIES}
- PUBLIC ${SERF_INTERFACE_LIBRARIES})
+ PUBLIC ${SERF_PUBLIC_TARGETS})
set_target_properties(serf_shared
PROPERTIES
VERSION ${SERF_VERSION}
@@ -314,12 +319,10 @@ endif()
if(NOT SKIP_STATIC)
add_library(serf_static STATIC ${SOURCES})
target_compile_options(serf_static PUBLIC ${APR_CFLAGS})
- target_include_directories(serf_static SYSTEM BEFORE
- PUBLIC ${SERF_INTERFACE_INCLUDES})
target_include_directories(serf_static PUBLIC ${SERF_SOURCE_DIR})
target_link_libraries(serf_static
- OpenSSL::Crypto OpenSSL::SSL ZLIB::ZLIB
- ${SERF_INTERFACE_LIBRARIES}
+ ${SERF_PRIVATE_TARGETS}
+ ${SERF_PUBLIC_TARGETS}
${SERF_STANDARD_LIBRARIES})
list(APPEND SERF_TARGETS "serf_static")
endif()
@@ -350,9 +353,16 @@ if(NOT SERF_WINDOWS)
set(INCLUDE_SUBDIR ${SERF_INCLUDE_SUBDIR})
set(VERSION ${SERF_VERSION})
set(MAJOR ${SERF_MAJOR_VERSION})
+ set(SERF_INTERFACE_LIBS
+ ${APR_LIBRARIES}
+ ${APR_EXTRALIBS}
+ ${APRUTIL_LIBRARIES}
+ ${APRUTIL_EXTRALIBS}
+ )
+ list(REMOVE_DUPLICATES SERF_INTERFACE_LIBS)
unset(LIBS)
- foreach(DEPLIB ${SERF_DEPENDENCY_LIBRARIES} ${SERF_INTERFACE_LIBRARIES})
- set(LIBS "${LIBS} ${DEPLIB}")
+ foreach(DEPLIB ${SERF_INTERFACE_LIBS})
+ string(APPEND LIBS " ${DEPLIB}")
endforeach()
configure_file("build/serf.pc.in" "serf.pc" @ONLY)
endfunction()
@@ -362,6 +372,7 @@ if(NOT SERF_WINDOWS)
DESTINATION "share/pkgconfig")
endif()
+
if(NOT SKIP_TESTS)
if(SKIP_STATIC)
message(WARNING "The tests depend on the Serf static library")
Modified: serf/trunk/build/FindAPR.cmake
URL: http://svn.apache.org/viewvc/serf/trunk/build/FindAPR.cmake?rev=1841780&r1=1841779&r2=1841780&view=diff
==============================================================================
--- serf/trunk/build/FindAPR.cmake (original)
+++ serf/trunk/build/FindAPR.cmake Sun Sep 23 19:58:08 2018
@@ -19,24 +19,51 @@
cmake_minimum_required(VERSION 3.0)
-# This module uses:
-# APR_ROOT, the (optional) root of the APR install area.
-# This module defines:
-# APR_FOUND, set to TRUE if found, FALSE otherwise.
-# APR_VERSION, the version of APR that was found.
-# APR_CONTAINS_APRUTIL, set to TRUE if the APR major version is 2 or greater.
-# APR_INCLUDES, where to find apr.h, etc.
-# APR_LIBRARIES, linker switches to use with ld to link against APR
-# APR_EXTRALIBS, additional libraries to link against.
-# APR_CFLAGS, the flags to use to compile.
-# APR_STATIC_LIBS, on Windows: list of static libraries.
-# APR_RUNTIME_LIBS, on Windows: list of DLLs that will be loaded at runtime.
+#.rst:
+# FindAPR
+# --------
+#
+# Find the native Apache Portable Runtime includes and library.
+#
+# IMPORTED Targets
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines :prop_tgt:`IMPORTED` target ``APR::APR``, if
+# APR has been found. On Windows, it may define the :prop_tgt:`IMPORTED`
+# target ``APR::APR_static`` if the static libraries are found.
+#
+# Result Variables
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines the following variables:
+#
+# ::
+#
+# APR_FOUND - True if APR was found.
+# APR_VERSION - The version of APR found (x.y.z)
+# APR_CONTAINS_APRUTIL - True if the APR major version is 2 or greater.
+# APR_INCLUDES - Where to find apr.h, etc.
+# APR_LIBRARIES - Linker switches to use with ld to link against APR
+#
+# ::
+#
+# APR_EXTRALIBS - Additional libraries to link against
+# APR_CFLAGS - The flags to use to compile.
+# APR_STATIC_LIBS - On Windows: list of APR static libraries
+# APR_RUNTIME_LIBS - On Windows: list of APR runtime DLLs
+#
+# Hints
+# ^^^^^
+#
+# A user may set ``APR_ROOT`` to an APR installation root to tell this
+# module where to look. This variable must be defined on Windows.
# -------------------------------------------------------------------
# Common utility functions for FindAPR.cmaks and FindAPRtil.cmake
# -------------------------------------------------------------------
+# Run the APR/Util configuration program
function(_apru_config _program _varname _regexp)
execute_process(COMMAND ${_program} ${ARGN}
OUTPUT_VARIABLE _apru_output
@@ -62,6 +89,7 @@ function(_apru_config _program _varname
endif()
endfunction(_apru_config)
+# Parse the APR/Util version number from the header
function(_apru_version _version_varname _major_varname _minor_varname _header _prefix)
file(STRINGS ${_header} _apru_major
REGEX "^ *# *define +${_prefix}_MAJOR_VERSION +[0-9]+.*$")
@@ -77,12 +105,64 @@ function(_apru_version _version_varname
set(${_minor_varname} ${_apru_minor} PARENT_SCOPE)
endfunction(_apru_version)
+# Windows: Find the DLL (runtime) library
function(_apru_find_dll _varname _dllname)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
find_library(${_varname} NAMES ${_dllname}
PATHS ${ARGN} NO_DEFAULT_PATH PATH_SUFFIXES "bin" "lib")
endfunction(_apru_find_dll)
+# Extract the main and extra static libraries
+function(_apru_extras _static_var _extra_var)
+ # The first element in the list of static libraries will be the the main
+ # APR/Util static library, anything else will be additional interface
+ # libraries.
+ set(_extra "${ARGN}")
+ list(GET _extra 0 _static)
+ list(REMOVE_AT _extra 0)
+ set(${_static_var} ${_static} PARENT_SCOPE)
+ set(${_extra_var} ${_extra} PARENT_SCOPE)
+endfunction(_apru_extras)
+
+# From the list of link libraries, extract the imported location
+function(_apru_location _location_var _extralibs_var)
+ foreach(_part ${ARGN})
+ string(SUBSTRING "${_part}" 0 2 _flag)
+ if(_flag STREQUAL "-L")
+ if(NOT _dir AND NOT _lib)
+ string(SUBSTRING "${_part}" 2 -1 _rest)
+ set(_dir "${_rest}")
+ else()
+ list(APPEND _extra "${_part}")
+ endif()
+ elseif(_flag STREQUAL "-l")
+ if(NOT _lib)
+ string(SUBSTRING "${_part}" 2 -1 _rest)
+ set(_lib "${_rest}")
+ else()
+ list(APPEND _extra " ${_part}")
+ endif()
+ else()
+ if(NOT _lib)
+ set(_lib "${_rest}")
+ else()
+ list(APPEND _extra " ${_part}")
+ endif()
+ endif()
+ endforeach()
+
+ if(NOT _lib)
+ message(FATAL_ERROR "did not find any libraries in '${ARGN}'")
+ endif()
+
+ if(NOT _dir)
+ find_library(${_location_var} NAMES "${_lib}")
+ else()
+ find_library(${_location_var} NAMES "${_lib}" PATHS "${_dir}" NO_DEFAULT_PATH)
+ endif()
+ set(${_extralibs_var} ${_extra} PARENT_SCOPE)
+endfunction(_apru_location)
+
# -------------------------------------------------------------------
if(NOT _apru_include_only_utilities)
@@ -91,7 +171,9 @@ if(NOT _apru_include_only_utilities)
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
- if(NOT DEFINED APR_ROOT)
+ if(DEFINED APR_ROOT)
+ get_filename_component(APR_ROOT "${APR_ROOT}" REALPATH)
+ else()
message(FATAL_ERROR "APR_ROOT must be defined on Windows")
endif()
@@ -114,9 +196,10 @@ if(NOT _apru_include_only_utilities)
PATHS ${APR_ROOT} NO_DEFAULT_PATH PATH_SUFFIXES "lib")
_apru_find_dll(APR_RUNTIME_LIBS "lib${_apr_name}.dll" ${APR_ROOT})
- else() #NOT Windows
+ else() # NOT Windows
if(DEFINED APR_ROOT)
+ get_filename_component(APR_ROOT "${APR_ROOT}" REALPATH)
find_program(APR_CONFIG_EXECUTABLE NAMES apr-2-config apr-1-config
PATHS "${APR_ROOT}/bin" NO_DEFAULT_PATH)
else()
@@ -137,7 +220,7 @@ if(NOT _apru_include_only_utilities)
endif() # NOT Windows
- if(_apr_major GREATER 2)
+ if(${_apr_major} GREATER 1)
set(APR_CONTAINS_APRUTIL TRUE)
else()
set(APR_CONTAINS_APRUTIL FALSE)
@@ -148,4 +231,36 @@ if(NOT _apru_include_only_utilities)
REQUIRED_VARS APR_LIBRARIES APR_INCLUDES
VERSION_VAR APR_VERSION)
+ if(APR_FOUND)
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+ if(APR_LIBRARIES AND APR_RUNTIME_LIBS)
+ add_library(APR::APR SHARED IMPORTED)
+ set_target_properties(APR::APR PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${APR_INCLUDES}"
+ IMPORTED_LOCATION "${APR_RUNTIME_LIBS}"
+ IMPORTED_IMPLIB "${APR_LIBRARIES}")
+ endif()
+
+ if(APR_STATIC_LIBS)
+ _apru_extras(_apr_static _apr_extra ${APR_STATIC_LIBS})
+ add_library(APR::APR_static STATIC IMPORTED)
+ set_target_properties(APR::APR_static PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${APR_INCLUDES}"
+ IMPORTED_INTERFACE_LINK_LIBRARIES "${_apr_extra}"
+ IMPORTED_LOCATION "${_apr_static}")
+ endif()
+
+ else() # NOT Windows
+
+ _apru_location(_apr_library _apr_extra "${APR_LIBRARIES}")
+ add_library(APR::APR UNKNOWN IMPORTED)
+ set_target_properties(APR::APR PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${APR_INCLUDES}"
+ INTERFACE_LINK_LIBRARIES "${APR_EXTRALIBS};${_apr_extra}"
+ IMPORTED_LOCATION "${_apr_library}")
+
+ endif() # NOT Windows
+ endif(APR_FOUND)
+
endif(NOT _apru_include_only_utilities)
Modified: serf/trunk/build/FindAPRUtil.cmake
URL: http://svn.apache.org/viewvc/serf/trunk/build/FindAPRUtil.cmake?rev=1841780&r1=1841779&r2=1841780&view=diff
==============================================================================
--- serf/trunk/build/FindAPRUtil.cmake (original)
+++ serf/trunk/build/FindAPRUtil.cmake Sun Sep 23 19:58:08 2018
@@ -19,27 +19,53 @@
cmake_minimum_required(VERSION 3.0)
-# This module uses:
-# APRUtil_ROOT, the (optional) root of the APR-Util install area.
-# This module defines:
-# APRUTIL_FOUND, set to TRUE if found, FALSE otherwise.
-# APRUTIL_VERSION, the version of APR that was found.
-# APRUTIL_INCLUDES, where to find apr.h, etc.
-# APRUTIL_LIBRARIES, linker switches to use with ld to link against APR
-# APRUTIL_EXTRALIBS, additional libraries to link against.
-# APRUTIL_STATIC_LIBS, on Windows: list of static libraries.
-# APRUTIL_RUNTIME_LIBS, on Windows: list of DLLs that will be loaded at runtime.
+#.rst:
+# FindAPRUtil
+# --------
+#
+# Find the native Apache Portable Runtime Utilities includes and library.
+#
+# IMPORTED Targets
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines :prop_tgt:`IMPORTED` target ``APR::APRUTIL``, if
+# APR-Util has been found. On Windows, it may define the :prop_tgt:`IMPORTED`
+# target ``APR::APRUTIL_static`` if the static libraries are found.
+#
+# Result Variables
+# ^^^^^^^^^^^^^^^^
+#
+# This module defines the following variables:
+#
+# ::
+#
+# APRUTIL_FOUND - True if APR-Util was found
+# APRUTIL_VERSION - The version of APR-Util found (x.y.z)
+# APRUTIL_INCLUDES - Where to find apr.h, etc.
+# APRUTIL_LIBRARIES - Linker switches to use with ld to link against APR
+#
+# ::
+#
+# APRUTIL_EXTRALIBS - Additional libraries to link against
+# APRUTIL_STATIC_LIBS - On Windows: list of APR-Util static libraries
+# APRUTIL_RUNTIME_LIBS - On Windows: list of APR-Util runtime DLLs
+#
+# Hints
+# ^^^^^
+#
+# A user may set ``APRUtil_ROOT`` to an APR-Util installation root to tell
+# this module where to look. This variable must be defined on Windows.
-if(NOT APR_FOUND) # FIXME: should become: if(NOT TARGET APR::APR)
+if(NOT APR_FOUND)
find_package(APR REQUIRED)
endif()
+set(APRUTIL_FOUND FALSE)
+
if(APR_CONTAINS_APRUTIL)
- set(APRUTIL_FOUND TRUE)
set(APRUTIL_VERSION ${APR_VERSION})
-
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(APRUTIL
REQUIRED_VARS APRUTIL_VERSION
@@ -51,11 +77,11 @@ else(APR_CONTAINS_APRUTIL)
include(${CMAKE_CURRENT_LIST_DIR}/FindAPR.cmake)
unset(_apru_include_only_utilities)
- set(APRUTIL_FOUND FALSE)
-
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
- if(NOT DEFINED APRUtil_ROOT)
+ if(DEFINED APRUtil_ROOT)
+ get_filename_component(APRUtil_ROOT "${APRUtil_ROOT}" REALPATH)
+ else()
message(FATAL_ERROR "APRUtil_ROOT must be defined on Windows")
endif()
@@ -102,6 +128,7 @@ else(APR_CONTAINS_APRUTIL)
else() # NOT Windows
if(DEFINED APRUtil_ROOT)
+ get_filename_component(APRUtil_ROOT "${APRUtil_ROOT}" REALPATH)
find_program(APRUTIL_CONFIG_EXECUTABLE apu-1-config
PATHS "${APRUtil_ROOT}/bin" NO_DEFAULT_PATH)
else()
@@ -126,4 +153,43 @@ else(APR_CONTAINS_APRUTIL)
REQUIRED_VARS APRUTIL_LIBRARIES APRUTIL_INCLUDES
VERSION_VAR APRUTIL_VERSION)
+ if(APRUTIL_FOUND)
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+
+ if(APRUTIL_LIBRARIES AND APRUTIL_RUNTIME_LIBS)
+ add_library(APR::APRUTIL SHARED IMPORTED)
+ set_target_properties(APR::APRUTIL PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${APRUTIL_INCLUDES}"
+ IMPORTED_LOCATION "${APRUTIL_RUNTIME_LIBS}"
+ IMPORTED_IMPLIB "${APRUTIL_LIBRARIES}")
+ if(TARGET APR::APR)
+ set_target_properties(APR::APRUTIL PROPERTIES
+ INTERFACE_LINK_LIBRARIES APR::APR)
+ endif()
+ endif()
+
+ if(APRUTIL_STATIC_LIBS)
+ _apru_extras(_apu_static _apu_extra ${APRUTIL_STATIC_LIBS})
+ if(TARGET APR::APR_static)
+ list(APPEND _apu_extra APR::APR_static)
+ endif()
+ add_library(APR::APRUTIL_static STATIC IMPORTED)
+ set_target_properties(APR::APRUTIL_static PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${APRUTIL_INCLUDES}"
+ INTERFACE_LINK_LIBRARIES "${_apu_extra}"
+ IMPORTED_LOCATION "${_apu_static}")
+ endif()
+
+ else() # NOT Windows
+
+ _apru_location(_apu_library _apu_extra "${APRUTIL_LIBRARIES}")
+ add_library(APR::APRUTIL UNKNOWN IMPORTED)
+ set_target_properties(APR::APRUTIL PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${APRUTIL_INCLUDES}"
+ INTERFACE_LINK_LIBRARIES "${APRUTIL_EXTRALIBS};${_apu_extra}"
+ IMPORTED_LOCATION "${_apu_library}")
+
+ endif() # NOT Windows
+ endif(APRUTIL_FOUND)
+
endif(APR_CONTAINS_APRUTIL)
Re: svn commit: r1841780 - in /serf/trunk: CMakeLists.txt
build/FindAPR.cmake build/FindAPRUtil.cmake
Posted by Branko Čibej <br...@apache.org>.
On 23.09.2018 21:58, brane@apache.org wrote:
> Author: brane
> Date: Sun Sep 23 19:58:08 2018
> New Revision: 1841780
>
> URL: http://svn.apache.org/viewvc?rev=1841780&view=rev
> Log:
> Use proper target dependencies for APR and APR-Util, and support
> linking with static APR on Windows.
If only APR used pkg-config instead of its own brand of config script,
this might have been a lot easier ...
-- Brane, who still has to test this with apr-2.x