move the installation logic to the top-level of cmakelists

discussion: https://github.com/BlackMATov/meta.hpp/issues/119
This commit is contained in:
BlackMATov
2025-01-25 05:09:52 +07:00
parent 166e6f3cf2
commit c7cb12f11f
5 changed files with 77 additions and 70 deletions

View File

@@ -41,6 +41,9 @@ project(meta.hpp
option(META_HPP_NO_EXCEPTIONS "Don't use exceptions" OFF) option(META_HPP_NO_EXCEPTIONS "Don't use exceptions" OFF)
option(META_HPP_NO_RTTI "Don't use RTTI" 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 # library
# #
@@ -69,7 +72,59 @@ target_link_libraries(${PROJECT_NAME} INTERFACE Threads::Threads)
# develop # develop
# #
if(PROJECT_IS_TOP_LEVEL) if(META_HPP_DEVELOP)
enable_testing() enable_testing()
add_subdirectory(develop) add_subdirectory(develop)
endif() 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()

View File

@@ -7,19 +7,21 @@
}, },
"configurePresets": [ "configurePresets": [
{ {
"name": "ninja-base", "name": "develop-base",
"hidden": true, "hidden": true,
"generator": "Ninja Multi-Config", "generator": "Ninja Multi-Config",
"binaryDir": "${sourceDir}/develop/build/${presetName}", "binaryDir": "${sourceDir}/develop/build/${presetName}",
"installDir": "${sourceDir}/develop/install/${presetName}", "installDir": "${sourceDir}/develop/install/${presetName}",
"cacheVariables": { "cacheVariables": {
"META_HPP_DEVELOP": true,
"META_HPP_INSTALL": true,
"CMAKE_EXPORT_COMPILE_COMMANDS": true "CMAKE_EXPORT_COMPILE_COMMANDS": true
} }
}, },
{ {
"name": "linux-base", "name": "linux-base",
"hidden": true, "hidden": true,
"inherits": "ninja-base", "inherits": "develop-base",
"condition": { "condition": {
"type": "equals", "type": "equals",
"lhs": "${hostSystemName}", "lhs": "${hostSystemName}",
@@ -61,7 +63,7 @@
{ {
"name": "macos-base", "name": "macos-base",
"hidden": true, "hidden": true,
"inherits": "ninja-base", "inherits": "develop-base",
"condition": { "condition": {
"type": "equals", "type": "equals",
"lhs": "${hostSystemName}", "lhs": "${hostSystemName}",
@@ -80,21 +82,21 @@
"name": "macos-arm64-san", "name": "macos-arm64-san",
"inherits": "macos-arm64", "inherits": "macos-arm64",
"cacheVariables": { "cacheVariables": {
"BUILD_WITH_SANITIZERS": true "META_HPP_DEVELOP_WITH_SANITIZERS": true
} }
}, },
{ {
"name": "macos-arm64-san-no-exceptions", "name": "macos-arm64-san-no-exceptions",
"inherits": "macos-arm64-san", "inherits": "macos-arm64-san",
"cacheVariables": { "cacheVariables": {
"BUILD_WITH_NO_EXCEPTIONS": true "META_HPP_DEVELOP_WITH_NO_EXCEPTIONS": true
} }
}, },
{ {
"name": "macos-arm64-san-no-rtti", "name": "macos-arm64-san-no-rtti",
"inherits": "macos-arm64-san", "inherits": "macos-arm64-san",
"cacheVariables": { "cacheVariables": {
"BUILD_WITH_NO_RTTI": true "META_HPP_DEVELOP_WITH_NO_RTTI": true
} }
}, },
{ {
@@ -109,27 +111,27 @@
"name": "macos-x64-san", "name": "macos-x64-san",
"inherits": "macos-x64", "inherits": "macos-x64",
"cacheVariables": { "cacheVariables": {
"BUILD_WITH_SANITIZERS": true "META_HPP_DEVELOP_WITH_SANITIZERS": true
} }
}, },
{ {
"name": "macos-x64-san-no-exceptions", "name": "macos-x64-san-no-exceptions",
"inherits": "macos-x64-san", "inherits": "macos-x64-san",
"cacheVariables": { "cacheVariables": {
"BUILD_WITH_NO_EXCEPTIONS": true "META_HPP_DEVELOP_WITH_NO_EXCEPTIONS": true
} }
}, },
{ {
"name": "macos-x64-san-no-rtti", "name": "macos-x64-san-no-rtti",
"inherits": "macos-x64-san", "inherits": "macos-x64-san",
"cacheVariables": { "cacheVariables": {
"BUILD_WITH_NO_RTTI": true "META_HPP_DEVELOP_WITH_NO_RTTI": true
} }
}, },
{ {
"name": "windows-base", "name": "windows-base",
"hidden": true, "hidden": true,
"inherits": "ninja-base", "inherits": "develop-base",
"condition": { "condition": {
"type": "equals", "type": "equals",
"lhs": "${hostSystemName}", "lhs": "${hostSystemName}",

View File

@@ -1,7 +1,7 @@
option(BUILD_WITH_COVERAGE "Build with coverage" OFF) option(META_HPP_DEVELOP_WITH_COVERAGE "Build develop targets with coverage" OFF)
option(BUILD_WITH_SANITIZERS "Build with sanitizers" OFF) option(META_HPP_DEVELOP_WITH_SANITIZERS "Build develop targets with sanitizers" OFF)
option(BUILD_WITH_NO_EXCEPTIONS "Build with no exceptions" ${META_HPP_NO_EXCEPTIONS}) option(META_HPP_DEVELOP_WITH_NO_EXCEPTIONS "Build develop targets 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_NO_RTTI "Build develop targets with no RTTI" ${META_HPP_NO_RTTI})
set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake") set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMake")
@@ -20,53 +20,3 @@ add_subdirectory(unbench)
add_subdirectory(unshared) add_subdirectory(unshared)
add_subdirectory(untests) add_subdirectory(untests)
add_subdirectory(vendors) 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}")

View File

@@ -25,15 +25,15 @@ target_compile_options(${PROJECT_NAME}.setup_targets INTERFACE
>) >)
target_link_libraries(${PROJECT_NAME}.setup_targets INTERFACE target_link_libraries(${PROJECT_NAME}.setup_targets INTERFACE
$<$<BOOL:${BUILD_WITH_COVERAGE}>: $<$<BOOL:${META_HPP_DEVELOP_WITH_COVERAGE}>:
meta.hpp::enable_gcov> meta.hpp::enable_gcov>
$<$<BOOL:${BUILD_WITH_SANITIZERS}>: $<$<BOOL:${META_HPP_DEVELOP_WITH_SANITIZERS}>:
meta.hpp::enable_asan meta.hpp::enable_asan
meta.hpp::enable_ubsan> meta.hpp::enable_ubsan>
$<$<BOOL:${BUILD_WITH_NO_EXCEPTIONS}>: $<$<BOOL:${META_HPP_DEVELOP_WITH_NO_EXCEPTIONS}>:
meta.hpp::disable_exceptions> meta.hpp::disable_exceptions>
$<$<BOOL:${BUILD_WITH_NO_RTTI}>: $<$<BOOL:${META_HPP_DEVELOP_WITH_NO_RTTI}>:
meta.hpp::disable_rtti>) meta.hpp::disable_rtti>)
target_compile_definitions(${PROJECT_NAME}.setup_targets INTERFACE target_compile_definitions(${PROJECT_NAME}.setup_targets INTERFACE
$<$<BOOL:${BUILD_WITH_SANITIZERS}>:META_HPP_SANITIZERS>) $<$<BOOL:${META_HPP_DEVELOP_WITH_SANITIZERS}>:META_HPP_SANITIZERS>)