diff --git a/CMakeLists.txt b/CMakeLists.txt index 91a391e..45dfbac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,9 @@ project(meta.hpp option(META_HPP_NO_EXCEPTIONS "Don't use exceptions" OFF) option(META_HPP_NO_RTTI "Don't use RTTI" OFF) +option(META_HPP_DEVELOP "Generate develop targets" OFF) +option(META_HPP_INSTALL "Generate install targets" ${PROJECT_IS_TOP_LEVEL}) + # # library # @@ -69,7 +72,59 @@ target_link_libraries(${PROJECT_NAME} INTERFACE Threads::Threads) # develop # -if(PROJECT_IS_TOP_LEVEL) +if(META_HPP_DEVELOP) enable_testing() add_subdirectory(develop) endif() + +# +# install +# + +if(META_HPP_INSTALL) + include(CMakePackageConfigHelpers) + include(GNUInstallDirs) + + set(META_HPP_INSTALL_CONFIG_DIR + "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") + + set(META_HPP_INSTALL_CONFIG_INPUT + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.cmake.in") + + set(META_HPP_INSTALL_CONFIG_CMAKE + "${CMAKE_CURRENT_BINARY_DIR}/configs/${PROJECT_NAME}-config.cmake") + + set(META_HPP_INSTALL_CONFIG_VERSION_CMAKE + "${CMAKE_CURRENT_BINARY_DIR}/configs/${PROJECT_NAME}-config-version.cmake") + + configure_package_config_file( + "${META_HPP_INSTALL_CONFIG_INPUT}" + "${META_HPP_INSTALL_CONFIG_CMAKE}" + INSTALL_DESTINATION "${META_HPP_INSTALL_CONFIG_DIR}" + NO_SET_AND_CHECK_MACRO) + + write_basic_package_version_file( + "${META_HPP_INSTALL_CONFIG_VERSION_CMAKE}" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion + ARCH_INDEPENDENT) + + install( + TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-targets) + + install( + DIRECTORY headers/${PROJECT_NAME} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + + install( + EXPORT ${PROJECT_NAME}-targets + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: + DESTINATION "${META_HPP_INSTALL_CONFIG_DIR}") + + install( + FILES "${META_HPP_INSTALL_CONFIG_CMAKE}" + "${META_HPP_INSTALL_CONFIG_VERSION_CMAKE}" + DESTINATION "${META_HPP_INSTALL_CONFIG_DIR}") +endif() diff --git a/CMakePresets.json b/CMakePresets.json index 1be62dd..24a2563 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -7,19 +7,21 @@ }, "configurePresets": [ { - "name": "ninja-base", + "name": "develop-base", "hidden": true, "generator": "Ninja Multi-Config", "binaryDir": "${sourceDir}/develop/build/${presetName}", "installDir": "${sourceDir}/develop/install/${presetName}", "cacheVariables": { + "META_HPP_DEVELOP": true, + "META_HPP_INSTALL": true, "CMAKE_EXPORT_COMPILE_COMMANDS": true } }, { "name": "linux-base", "hidden": true, - "inherits": "ninja-base", + "inherits": "develop-base", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -61,7 +63,7 @@ { "name": "macos-base", "hidden": true, - "inherits": "ninja-base", + "inherits": "develop-base", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -80,21 +82,21 @@ "name": "macos-arm64-san", "inherits": "macos-arm64", "cacheVariables": { - "BUILD_WITH_SANITIZERS": true + "META_HPP_DEVELOP_WITH_SANITIZERS": true } }, { "name": "macos-arm64-san-no-exceptions", "inherits": "macos-arm64-san", "cacheVariables": { - "BUILD_WITH_NO_EXCEPTIONS": true + "META_HPP_DEVELOP_WITH_NO_EXCEPTIONS": true } }, { "name": "macos-arm64-san-no-rtti", "inherits": "macos-arm64-san", "cacheVariables": { - "BUILD_WITH_NO_RTTI": true + "META_HPP_DEVELOP_WITH_NO_RTTI": true } }, { @@ -109,27 +111,27 @@ "name": "macos-x64-san", "inherits": "macos-x64", "cacheVariables": { - "BUILD_WITH_SANITIZERS": true + "META_HPP_DEVELOP_WITH_SANITIZERS": true } }, { "name": "macos-x64-san-no-exceptions", "inherits": "macos-x64-san", "cacheVariables": { - "BUILD_WITH_NO_EXCEPTIONS": true + "META_HPP_DEVELOP_WITH_NO_EXCEPTIONS": true } }, { "name": "macos-x64-san-no-rtti", "inherits": "macos-x64-san", "cacheVariables": { - "BUILD_WITH_NO_RTTI": true + "META_HPP_DEVELOP_WITH_NO_RTTI": true } }, { "name": "windows-base", "hidden": true, - "inherits": "ninja-base", + "inherits": "develop-base", "condition": { "type": "equals", "lhs": "${hostSystemName}", diff --git a/develop/cmake/Config.cmake.in b/cmake/config.cmake.in similarity index 100% rename from develop/cmake/Config.cmake.in rename to cmake/config.cmake.in diff --git a/develop/CMakeLists.txt b/develop/CMakeLists.txt index 6635253..caf3d22 100644 --- a/develop/CMakeLists.txt +++ b/develop/CMakeLists.txt @@ -1,7 +1,7 @@ -option(BUILD_WITH_COVERAGE "Build with coverage" OFF) -option(BUILD_WITH_SANITIZERS "Build with sanitizers" OFF) -option(BUILD_WITH_NO_EXCEPTIONS "Build with no exceptions" ${META_HPP_NO_EXCEPTIONS}) -option(BUILD_WITH_NO_RTTI "Build with no RTTI" ${META_HPP_NO_RTTI}) +option(META_HPP_DEVELOP_WITH_COVERAGE "Build develop targets with coverage" OFF) +option(META_HPP_DEVELOP_WITH_SANITIZERS "Build develop targets with sanitizers" OFF) +option(META_HPP_DEVELOP_WITH_NO_EXCEPTIONS "Build develop targets with no exceptions" ${META_HPP_NO_EXCEPTIONS}) +option(META_HPP_DEVELOP_WITH_NO_RTTI "Build develop targets with no RTTI" ${META_HPP_NO_RTTI}) set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake") @@ -20,53 +20,3 @@ add_subdirectory(unbench) add_subdirectory(unshared) add_subdirectory(untests) add_subdirectory(vendors) - -# -# install -# - -include(CMakePackageConfigHelpers) -include(GNUInstallDirs) - -set(META_HPP_INSTALL_CONFIG_DIR - "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") - -set(META_HPP_INSTALL_CONFIG_INPUT - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in") - -set(META_HPP_INSTALL_GENERATED_CONFIG_CMAKE - "${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_NAME}-config.cmake") - -set(META_HPP_INSTALL_GENERATED_CONFIG_VERSION_CMAKE - "${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_NAME}-config-version.cmake") - -configure_package_config_file( - "${META_HPP_INSTALL_CONFIG_INPUT}" - "${META_HPP_INSTALL_GENERATED_CONFIG_CMAKE}" - INSTALL_DESTINATION "${META_HPP_INSTALL_CONFIG_DIR}" - NO_SET_AND_CHECK_MACRO) - -write_basic_package_version_file( - "${META_HPP_INSTALL_GENERATED_CONFIG_VERSION_CMAKE}" - VERSION ${PROJECT_VERSION} - COMPATIBILITY AnyNewerVersion - ARCH_INDEPENDENT) - -install( - TARGETS ${PROJECT_NAME} - EXPORT ${PROJECT_NAME}-targets) - -install( - DIRECTORY singles/headers/${PROJECT_NAME} - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - -install( - EXPORT ${PROJECT_NAME}-targets - FILE ${PROJECT_NAME}-targets.cmake - NAMESPACE ${PROJECT_NAME}:: - DESTINATION "${META_HPP_INSTALL_CONFIG_DIR}") - -install( - FILES "${META_HPP_INSTALL_GENERATED_CONFIG_CMAKE}" - "${META_HPP_INSTALL_GENERATED_CONFIG_VERSION_CMAKE}" - DESTINATION "${META_HPP_INSTALL_CONFIG_DIR}") diff --git a/develop/cmake/SetupTargets.cmake b/develop/cmake/SetupTargets.cmake index 0c4c323..d68fff6 100644 --- a/develop/cmake/SetupTargets.cmake +++ b/develop/cmake/SetupTargets.cmake @@ -25,15 +25,15 @@ target_compile_options(${PROJECT_NAME}.setup_targets INTERFACE >) target_link_libraries(${PROJECT_NAME}.setup_targets INTERFACE - $<$: + $<$: meta.hpp::enable_gcov> - $<$: + $<$: meta.hpp::enable_asan meta.hpp::enable_ubsan> - $<$: + $<$: meta.hpp::disable_exceptions> - $<$: + $<$: meta.hpp::disable_rtti>) target_compile_definitions(${PROJECT_NAME}.setup_targets INTERFACE - $<$:META_HPP_SANITIZERS>) + $<$:META_HPP_SANITIZERS>)