diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 93680ceb..71787be7 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -154,6 +154,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 diff --git a/CMakeLists.txt b/CMakeLists.txt index 9cc11edc..5cff347c 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,12 @@ 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..0d187e8f 100644 --- a/src/beman/exemplar/CMakeLists.txt +++ b/src/beman/exemplar/CMakeLists.txt @@ -13,13 +13,49 @@ 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()