diff options
author | Markus Rickert <rickert@fortiss.org> | 2020-11-30 20:25:28 +0100 |
---|---|---|
committer | Markus Rickert <rickert@fortiss.org> | 2020-11-30 20:45:04 +0100 |
commit | 2dac1681d957035053cafb056c459e2cde6f4fd3 (patch) | |
tree | e1990fbde46974272a0187c2f67e73e3df40a0c0 | |
parent | 6b94c01770556d1c16042553103b89babc1dbef4 (diff) | |
download | libxslt-2dac1681d957035053cafb056c459e2cde6f4fd3.tar.gz |
Require dependencies based on enabled CMake options
-rw-r--r-- | CMakeLists.txt | 54 | ||||
-rw-r--r-- | FindGcrypt.cmake | 40 | ||||
-rw-r--r-- | libxslt-config.cmake.in | 7 |
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) |