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_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()

View File

@@ -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}",

View File

@@ -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}")

View File

@@ -25,15 +25,15 @@ target_compile_options(${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>
$<$<BOOL:${BUILD_WITH_SANITIZERS}>:
$<$<BOOL:${META_HPP_DEVELOP_WITH_SANITIZERS}>:
meta.hpp::enable_asan
meta.hpp::enable_ubsan>
$<$<BOOL:${BUILD_WITH_NO_EXCEPTIONS}>:
$<$<BOOL:${META_HPP_DEVELOP_WITH_NO_EXCEPTIONS}>:
meta.hpp::disable_exceptions>
$<$<BOOL:${BUILD_WITH_NO_RTTI}>:
$<$<BOOL:${META_HPP_DEVELOP_WITH_NO_RTTI}>:
meta.hpp::disable_rtti>)
target_compile_definitions(${PROJECT_NAME}.setup_targets INTERFACE
$<$<BOOL:${BUILD_WITH_SANITIZERS}>:META_HPP_SANITIZERS>)
$<$<BOOL:${META_HPP_DEVELOP_WITH_SANITIZERS}>:META_HPP_SANITIZERS>)