summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Rickert <rickert@fortiss.org>2020-11-30 20:25:28 +0100
committerMarkus Rickert <rickert@fortiss.org>2020-11-30 20:45:04 +0100
commit2dac1681d957035053cafb056c459e2cde6f4fd3 (patch)
treee1990fbde46974272a0187c2f67e73e3df40a0c0
parent6b94c01770556d1c16042553103b89babc1dbef4 (diff)
downloadlibxslt-2dac1681d957035053cafb056c459e2cde6f4fd3.tar.gz
Require dependencies based on enabled CMake options
-rw-r--r--CMakeLists.txt54
-rw-r--r--FindGcrypt.cmake40
-rw-r--r--libxslt-config.cmake.in7
3 files changed, 76 insertions, 25 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e1def21d..13fef2a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.12)
project(libxslt1 C)
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+
include(CheckCSourceCompiles)
include(CheckFunctionExists)
include(CheckIncludeFiles)
@@ -29,33 +31,30 @@ set(VERSION ${LIBXSLT_DOTTED_VERSION})
set(LIBEXSLT_VERSION ${LIBEXSLT_DOTTED_VERSION})
find_package(LibXml2 CONFIG REQUIRED)
-find_package(Python2 COMPONENTS Interpreter Development)
-find_package(Threads)
-
-check_library_exists(grypt gcry_control "gcrypt.h" HAVE_GCRYPT)
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(LIBXSLT_WITH_DEBUGGER "Add the debugging support" ON)
-
-if(HAVE_GCRYPT)
- option(LIBXSLT_WITH_CRYPTO "Add crypto support to exslt" ON)
-else()
- set(LIBXSLT_WITH_CRYPTO OFF)
-endif()
-
+option(LIBXSLT_WITH_CRYPTO "Add crypto support to exslt" OFF)
option(LIBXSLT_WITH_MEM_DEBUG "Add the memory debugging module" OFF)
option(LIBXSLT_WITH_MODULES "Add the module support" ON)
option(LIBXSLT_WITH_PROFILER "Add the profiling support" ON)
+option(LIBXSLT_WITH_PYTHON "Build Python bindings" ON)
+option(LIBXSLT_WITH_THREADS "Add multithread support" ON)
+set(LIBXSLT_WITH_TRIO OFF)
+option(LIBXSLT_WITH_XSLT_DEBUG "Add the debugging code" ON)
+
+if(LIBXSLT_WITH_CRYPTO)
+ find_package(Gcrypt REQUIRED)
+endif()
-if(Python2_FOUND)
- option(LIBXSLT_WITH_PYTHON "Build Python bindings" ON)
+if(LIBXSLT_WITH_PYTHON)
+ find_package(Python2 COMPONENTS Interpreter Development REQUIRED)
set(LIBXSLT_PYTHON_INSTALL_DIR ${Python2_SITEARCH} CACHE PATH "Python bindings install directory")
-else()
- set(LIBXSLT_WITH_PYTHON OFF)
endif()
-set(LIBXSLT_WITH_TRIO OFF)
-option(LIBXSLT_WITH_XSLT_DEBUG "Add the debugging code" ON)
+if(LIBXSLT_WITH_THREADS)
+ find_package(Threads REQUIRED)
+endif()
foreach(VARIABLE IN ITEMS WITH_CRYPTO WITH_DEBUGGER WITH_MEM_DEBUG WITH_MODULES WITH_PROFILER WITH_PYTHON WITH_TRIO WITH_XSLT_DEBUG)
if(LIBXSLT_${VARIABLE})
@@ -67,7 +66,11 @@ endforeach()
set(MODULE_EXTENSION "${CMAKE_SHARED_LIBRARY_SUFFIX}")
-if(Threads_FOUND)
+if(LIBXSLT_WITH_CRYPTO)
+ list(APPEND CMAKE_REQUIRED_LIBRARIES Gcrypt::Gcrypt)
+endif()
+
+if(LIBXSLT_WITH_THREADS)
list(APPEND CMAKE_REQUIRED_LIBRARIES Threads::Threads)
endif()
@@ -86,6 +89,7 @@ else()
check_function_exists(fprintf HAVE_FPRINTF)
check_include_files(fp_class.h HAVE_FP_CLASS_H)
check_function_exists(ftime HAVE_FTIME)
+ check_library_exists(gcrypt gcry_control "gcrypt.h" HAVE_GCRYPT)
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
check_function_exists(gmtime HAVE_GMTIME)
check_function_exists(gmtime_r HAVE_GMTIME_R)
@@ -212,7 +216,7 @@ target_include_directories(
)
if(LIBXSLT_WITH_CRYPTO)
- target_link_libraries(LibXslt PRIVATE gcrypt)
+ target_link_libraries(LibXslt PRIVATE Gcrypt::Gcrypt)
endif()
target_link_libraries(LibXslt PUBLIC LibXml2::LibXml2)
@@ -221,7 +225,7 @@ if(UNIX)
target_link_libraries(LibXslt PRIVATE m)
endif()
-if(Threads_FOUND)
+if(LIBXSLT_WITH_THREADS)
target_link_libraries(LibXslt PRIVATE Threads::Threads)
endif()
@@ -300,8 +304,8 @@ target_include_directories(
$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>
)
-if(LIBXSLT_WITH_GCRYPT)
- target_link_libraries(LibExslt PRIVATE gcrypt)
+if(LIBXSLT_WITH_CRYPTO)
+ target_link_libraries(LibExslt PRIVATE Gcrypt::Gcrypt)
endif()
target_link_libraries(LibExslt PUBLIC LibXslt LibXml2::LibXml2)
@@ -310,7 +314,7 @@ if(UNIX)
target_link_libraries(LibExslt PRIVATE m)
endif()
-if(Threads_FOUND)
+if(LIBXSLT_WITH_THREADS)
target_link_libraries(LibExslt PRIVATE Threads::Threads)
endif()
@@ -419,6 +423,10 @@ install(FILES libxslt/libxslt.3 DESTINATION ${CMAKE_INSTALL_MANDIR}/man3 COMPONE
install(FILES doc/xsltproc.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT documentation)
install(DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/libxslt COMPONENT documentation PATTERN Makefile.* EXCLUDE)
+if(LIBXSLT_WITH_CRYPTO)
+ install(FILES FindGcrypt.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libxslt-${VERSION} COMPONENT development)
+endif()
+
configure_package_config_file(
libxslt-config.cmake.in libxslt-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libxslt-${VERSION}
diff --git a/FindGcrypt.cmake b/FindGcrypt.cmake
new file mode 100644
index 00000000..781113d5
--- /dev/null
+++ b/FindGcrypt.cmake
@@ -0,0 +1,40 @@
+include(FindPackageHandleStandardArgs)
+include(SelectLibraryConfigurations)
+
+find_path(GCRYPT_INCLUDE_DIRS NAMES gcrypt.h)
+
+mark_as_advanced(GCRYPT_INCLUDE_DIRS)
+
+find_library(GCRYPT_LIBRARY_DEBUG NAMES gcryptd)
+find_library(GCRYPT_LIBRARY_RELEASE NAMES gcrypt)
+
+select_library_configurations(GCRYPT)
+
+if(GCRYPT_INCLUDE_DIRS AND EXISTS "${GCRYPT_INCLUDE_DIRS}/gcrypt.h")
+ file(STRINGS "${GCRYPT_INCLUDE_DIRS}/gcrypt.h" _GCRYPT_VERSION_DEFINE REGEX "#define[\t ]+GCRYPT_VERSION[\t ]+\"[^\"]*\".*")
+ string(REGEX REPLACE "#define[\t ]+GCRYPT_VERSION[\t ]+\"([^\"]*)\".*" "\\1" GCRYPT_VERSION "${_GCRYPT_VERSION_DEFINE}")
+ unset(_GCRYPT_VERSION_DEFINE)
+endif()
+
+find_package_handle_standard_args(
+ Gcrypt
+ FOUND_VAR GCRYPT_FOUND
+ REQUIRED_VARS GCRYPT_INCLUDE_DIRS GCRYPT_LIBRARIES
+ VERSION_VAR GCRYPT_VERSION
+)
+
+if(GCRYPT_FOUND AND NOT TARGET Gcrypt::Gcrypt)
+ add_library(Gcrypt::Gcrypt UNKNOWN IMPORTED)
+ if(GCRYPT_LIBRARY_RELEASE)
+ set_property(TARGET Gcrypt::Gcrypt APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(Gcrypt::Gcrypt PROPERTIES IMPORTED_LOCATION_RELEASE "${GCRYPT_LIBRARY_RELEASE}")
+ endif()
+ if(GCRYPT_LIBRARY_DEBUG)
+ set_property(TARGET Gcrypt::Gcrypt APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(Gcrypt::Gcrypt PROPERTIES IMPORTED_LOCATION_DEBUG "${GCRYPT_LIBRARY_DEBUG}")
+ endif()
+ set_target_properties(
+ Gcrypt::Gcrypt PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${GCRYPT_INCLUDE_DIRS}"
+ )
+endif()
diff --git a/libxslt-config.cmake.in b/libxslt-config.cmake.in
index b3f9d2f2..1405e0e6 100644
--- a/libxslt-config.cmake.in
+++ b/libxslt-config.cmake.in
@@ -57,8 +57,11 @@ if(NOT @BUILD_SHARED_LIBS@)
endif()
if(@LIBXSLT_WITH_CRYPTO@)
- list(APPEND LIBXSLT_LIBRARIES gcrypt)
- list(APPEND LIBXSLT_EXSLT_LIBRARIES gcrypt)
+ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
+ find_dependency(Gcrypt)
+ list(APPEND LIBXSLT_INCLUDE_DIRS ${GCRYPT_INCLUDE_DIRS})
+ list(APPEND LIBXSLT_LIBRARIES ${GCRYPT_LIBRARIES})
+ list(APPEND LIBXSLT_EXSLT_LIBRARIES ${GCRYPT_LIBRARIES})
endif()
if(UNIX)