From 8608dc08e25a9b4b1ec3da0e7bf6c627bf2acc07 Mon Sep 17 00:00:00 2001 From: Mikko Johannes Koivunalho Date: Sun, 20 Oct 2019 02:24:02 +0200 Subject: [PATCH 1/2] Add support for CMake User Package Registry The registries are especially useful to help projects find packages in non-standard install locations or directly in their own build trees. Signed-off-by: Mikko Johannes Koivunalho --- CMakeLists.txt | 26 ++++++++++++++++++++------ cmake/check-config.cmake.in | 2 +- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 12b01768..c5d1b18d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -487,29 +487,43 @@ set(EXPORT_NAME ${PROJECT_NAME}) include(CMakePackageConfigHelpers) configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${EXPORT_NAME}-config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_NAME}-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config.cmake INSTALL_DESTINATION ${LIB_INSTALL_DIR}/${EXPORT_NAME}/cmake ) write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_NAME}-config-version.cmake + ${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-config-version.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) export(EXPORT check-targets - FILE "${CMAKE_CURRENT_BINARY_DIR}/check-targets.cmake" + FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/${EXPORT_NAME}-targets.cmake" NAMESPACE Check:: ) install(EXPORT check-targets NAMESPACE Check:: - FILE check-targets.cmake + FILE "${EXPORT_NAME}-targets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${EXPORT_NAME} ) install( FILES - "${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_NAME}-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/${EXPORT_NAME}-config-version.cmake" + "${CMAKE_BINARY_DIR}/cmake/${EXPORT_NAME}-config.cmake" + "${CMAKE_BINARY_DIR}/cmake/${EXPORT_NAME}-config-version.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${EXPORT_NAME} ) +# Store the current build directory in the CMake user package registry. +# This helps dependent projects use a package from the current +# project’s build tree, i.e. without installing it. + +# In CMake 3.14 and below the export(PACKAGE) command populated +# the user package registry by default and users needed to set +# the CMAKE_EXPORT_NO_PACKAGE_REGISTRY to disable it, +# e.g. in automated build and packaging environments. Since +# the user package registry is stored outside the build tree, +# this side effect should not be enabled by default. +# Therefore CMake 3.15 and above prefer that export(PACKAGE) does nothing +# unless an explicit CMAKE_EXPORT_PACKAGE_REGISTRY variable is set. +export(PACKAGE "${PROJECT_NAME}") + diff --git a/cmake/check-config.cmake.in b/cmake/check-config.cmake.in index 15aabf71..82620719 100644 --- a/cmake/check-config.cmake.in +++ b/cmake/check-config.cmake.in @@ -1,3 +1,3 @@ @PACKAGE_INIT@ -include("${CMAKE_CURRENT_LIST_DIR}/check-targets.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/@EXPORT_NAME@-targets.cmake") From fb49d7995ac6cb9fbe259d2d96a5bd43f5b115e0 Mon Sep 17 00:00:00 2001 From: Mikko Johannes Koivunalho Date: Sun, 20 Oct 2019 02:27:38 +0200 Subject: [PATCH 2/2] Add header check_stdint.h to public headers Signed-off-by: Mikko Johannes Koivunalho --- src/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 437ea2a6..53ebf646 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -138,10 +138,12 @@ endif (MSVC) # More configuration for exporting set(LIBRARY_OUTPUT_NAME "check") +list(APPEND public_headers "${CMAKE_CURRENT_BINARY_DIR}/check.h") +list(APPEND public_headers "${CMAKE_BINARY_DIR}/check_stdint.h") set_target_properties(check PROPERTIES OUTPUT_NAME ${LIBRARY_OUTPUT_NAME} - PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/check.h + PUBLIC_HEADER "${public_headers}" ) if (MSVC) @@ -154,16 +156,18 @@ set_target_properties(checkShared PROPERTIES OUTPUT_NAME ${LIBRARY_OUTPUT_NAME} VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} - PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/check.h + PUBLIC_HEADER "${public_headers}" ) target_include_directories(check PUBLIC $ + $ $ ) target_include_directories(checkShared PUBLIC $ + $ $ )