From 2786e0a9223ffd8b9cb9168d51a2363ca09f91d8 Mon Sep 17 00:00:00 2001 From: Chris Hayden Date: Wed, 12 Feb 2025 12:35:29 +0000 Subject: [PATCH 1/4] Initial config-file package creation. --- CMakeLists.txt | 6 ++++++ cmake/beman.exemplar-config.cmake.in | 7 +++++++ src/beman/exemplar/CMakeLists.txt | 29 +++++++++++++++++++++++++--- 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 cmake/beman.exemplar-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 1cfbb655..ac0142a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ project( # targets (e.g., library, executable, etc.). DESCRIPTION "A Beman library exemplar" LANGUAGES CXX + VERSION 0.1.0 ) enable_testing() @@ -25,6 +26,11 @@ option( ${PROJECT_IS_TOP_LEVEL} ) +option(BEMAN_EXEMPLAR_INSTALL_CONFIG_FILE_PACKAGE + "Enable creating and installing a CMake config-file package. Default: ${PROJECT_IS_TOP_LEVEL}. Values: { ON, OFF }." + ${PROJECT_IS_TOP_LEVEL} +) + include(FetchContent) include(GNUInstallDirs) diff --git a/cmake/beman.exemplar-config.cmake.in b/cmake/beman.exemplar-config.cmake.in new file mode 100644 index 00000000..5769cc3b --- /dev/null +++ b/cmake/beman.exemplar-config.cmake.in @@ -0,0 +1,7 @@ +set(BEMAN_EXEMPLAR_VERSION @PROJECT_VERSION@) + +@PACKAGE_INIT@ + +include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake) + +check_required_components(@PROJECT_NAME@) diff --git a/src/beman/exemplar/CMakeLists.txt b/src/beman/exemplar/CMakeLists.txt index 0a405211..f51e843c 100644 --- a/src/beman/exemplar/CMakeLists.txt +++ b/src/beman/exemplar/CMakeLists.txt @@ -13,13 +13,36 @@ target_sources( FILES ${PROJECT_SOURCE_DIR}/include/beman/exemplar/identity.hpp ) -set_target_properties(beman.exemplar PROPERTIES VERIFY_INTERFACE_HEADER_SETS ON) +set_target_properties(beman.exemplar PROPERTIES VERIFY_INTERFACE_HEADER_SETS ON EXPORT_NAME exemplar) install( TARGETS beman.exemplar EXPORT beman.exemplar DESTINATION - $<$:debug/>${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION $<$:debug/>${CMAKE_INSTALL_BINDIR} + ${CMAKE_INSTALL_LIBDIR}$<$:/debug> + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}$<$:/debug> FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) + +if(BEMAN_EXEMPLAR_INSTALL_CONFIG_FILE_PACKAGE) + include(CMakePackageConfigHelpers) + + configure_package_config_file("${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in" "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + PATH_VARS PROJECT_NAME PROJECT_VERSION + ) + + write_basic_package_version_file("${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-version.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion + ) + + install(FILES + "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake" + "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-version.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + COMPONENT development + ) + + install(EXPORT beman.exemplar DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" NAMESPACE beman FILE ${PROJECT_NAME}-targets.cmake COMPONENT development) +endif() From 14bfe035d856bd9c774667f899a2fd1af7324c61 Mon Sep 17 00:00:00 2001 From: Chris Hayden Date: Wed, 12 Feb 2025 12:37:39 +0000 Subject: [PATCH 2/4] Fix namespace. --- src/beman/exemplar/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/beman/exemplar/CMakeLists.txt b/src/beman/exemplar/CMakeLists.txt index f51e843c..2447fe2b 100644 --- a/src/beman/exemplar/CMakeLists.txt +++ b/src/beman/exemplar/CMakeLists.txt @@ -44,5 +44,5 @@ if(BEMAN_EXEMPLAR_INSTALL_CONFIG_FILE_PACKAGE) COMPONENT development ) - install(EXPORT beman.exemplar DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" NAMESPACE beman FILE ${PROJECT_NAME}-targets.cmake COMPONENT development) + install(EXPORT beman.exemplar DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" NAMESPACE beman:: FILE ${PROJECT_NAME}-targets.cmake COMPONENT development) endif() From 2b25bb81357726e975d20733218c27cae05f7ebc Mon Sep 17 00:00:00 2001 From: Chris Hayden Date: Wed, 12 Feb 2025 12:40:02 +0000 Subject: [PATCH 3/4] Formatting. --- CMakeLists.txt | 7 ++-- src/beman/exemplar/CMakeLists.txt | 55 +++++++++++++++++++------------ 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac0142a7..89c52f2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,9 +26,10 @@ option( ${PROJECT_IS_TOP_LEVEL} ) -option(BEMAN_EXEMPLAR_INSTALL_CONFIG_FILE_PACKAGE - "Enable creating and installing a CMake config-file package. Default: ${PROJECT_IS_TOP_LEVEL}. Values: { ON, OFF }." - ${PROJECT_IS_TOP_LEVEL} +option( + BEMAN_EXEMPLAR_INSTALL_CONFIG_FILE_PACKAGE + "Enable creating and installing a CMake config-file package. Default: ${PROJECT_IS_TOP_LEVEL}. Values: { ON, OFF }." + ${PROJECT_IS_TOP_LEVEL} ) include(FetchContent) diff --git a/src/beman/exemplar/CMakeLists.txt b/src/beman/exemplar/CMakeLists.txt index 2447fe2b..0d187e8f 100644 --- a/src/beman/exemplar/CMakeLists.txt +++ b/src/beman/exemplar/CMakeLists.txt @@ -13,7 +13,10 @@ target_sources( FILES ${PROJECT_SOURCE_DIR}/include/beman/exemplar/identity.hpp ) -set_target_properties(beman.exemplar PROPERTIES VERIFY_INTERFACE_HEADER_SETS ON EXPORT_NAME exemplar) +set_target_properties( + beman.exemplar + PROPERTIES VERIFY_INTERFACE_HEADER_SETS ON EXPORT_NAME exemplar +) install( TARGETS beman.exemplar @@ -25,24 +28,34 @@ install( ) if(BEMAN_EXEMPLAR_INSTALL_CONFIG_FILE_PACKAGE) - include(CMakePackageConfigHelpers) - - configure_package_config_file("${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in" "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake" - INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" - PATH_VARS PROJECT_NAME PROJECT_VERSION - ) - - write_basic_package_version_file("${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-version.cmake" - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion - ) - - install(FILES - "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake" - "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-version.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" - COMPONENT development - ) - - install(EXPORT beman.exemplar DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" NAMESPACE beman:: FILE ${PROJECT_NAME}-targets.cmake COMPONENT development) + include(CMakePackageConfigHelpers) + + configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in" + "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + PATH_VARS PROJECT_NAME PROJECT_VERSION + ) + + write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-version.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion + ) + + install( + FILES + "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake" + "${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-version.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + COMPONENT development + ) + + install( + EXPORT beman.exemplar + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + NAMESPACE beman:: + FILE ${PROJECT_NAME}-targets.cmake + COMPONENT development + ) endif() From 05c619013f7d7c300567b15ca36c935f188f859e Mon Sep 17 00:00:00 2001 From: Chris Hayden Date: Wed, 12 Feb 2025 12:55:43 +0000 Subject: [PATCH 4/4] Add a configuration test for disabling config-file package creation and installation. --- .github/workflows/ci_tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 52af6077..d2d6e14f 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -150,6 +150,8 @@ jobs: arg: "-DBEMAN_EXEMPLAR_BUILD_TESTS=OFF" - name: "Disable example building" arg: "-DBEMAN_EXEMPLAR_BUILD_EXAMPLES=OFF" + - name: "Disable config-file package creation" + arg: "-DBEMAN_EXEMPLAR_INSTALL_CONFIG_FILE_PACKAGE=OFF" name: "CMake: ${{ matrix.args.name }}" steps: - uses: actions/checkout@v4