From fcb4edacb36a4037889cf9ac7a0005eec249e658 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Thu, 4 Dec 2025 07:09:56 +0100 Subject: [PATCH 1/4] Feat: Add support to install FILE_SET too --- include/BoostInstall.cmake | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/include/BoostInstall.cmake b/include/BoostInstall.cmake index ca0997c..d7f0149 100644 --- a/include/BoostInstall.cmake +++ b/include/BoostInstall.cmake @@ -337,6 +337,16 @@ function(boost_install_target) string(APPEND CONFIG_INSTALL_DIR "-static") endif() + get_target_property(INTERFACE_CXX_MODULE_SETS ${LIB} INTERFACE_CXX_MODULE_SETS) + if(INTERFACE_CXX_MODULE_SETS) + boost_message(DEBUG "boost_install_target: '${__TARGET}' has INTERFACE_CXX_MODULE_SETS=${INTERFACE_CXX_MODULE_SETS}") + set(__INSTALL_CXX_MODULES FILE_SET ${INTERFACE_CXX_MODULE_SETS} DESTINATION ${CONFIG_INSTALL_DIR}) + endif() + get_target_property(HEADER_SET ${LIB} HEADER_SET) + if(HEADER_SET) + boost_message(DEBUG "boost_install_target: '${__TARGET}' has HEADER_SET=${HEADER_SET}") + endif() + install(TARGETS ${LIB} EXPORT ${LIB}-targets # explicit destination specification required for 3.13, 3.14 no longer needs it RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" @@ -344,8 +354,16 @@ function(boost_install_target) ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" PRIVATE_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + # explicit needed if used starting with cmake v3.28 + FILE_SET CXX_MODULES DESTINATION ${CONFIG_INSTALL_DIR} + ${__INSTALL_CXX_MODULES} + CXX_MODULES_BMI DESTINATION ${CONFIG_INSTALL_DIR}/bmi-${CMAKE_CXX_COMPILER_ID}_$ + # explicit needed if used starting with cmake v3.23 + FILE_SET HEADERS + FILE_SET ${HEADER_SET} ) + # TODO(CK): what is this for? export(TARGETS ${LIB} NAMESPACE Boost:: FILE export/${LIB}-targets.cmake) if(MSVC) @@ -362,7 +380,9 @@ function(boost_install_target) __boost_install_update_sources(${LIB} ${__EXTRA_DIRECTORY} ${__EXTRA_INSTALL_DIRECTORY}) endif() - install(EXPORT ${LIB}-targets DESTINATION "${CONFIG_INSTALL_DIR}" NAMESPACE Boost:: FILE ${LIB}-targets.cmake) + install(EXPORT ${LIB}-targets DESTINATION "${CONFIG_INSTALL_DIR}" NAMESPACE Boost:: FILE ${LIB}-targets.cmake + CXX_MODULES_DIRECTORY . + ) set_target_properties(${LIB} PROPERTIES _boost_is_installed ON) From 4dc59128331f477587af4f9675d3938d8e923f61 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Sat, 13 Dec 2025 21:26:33 +0100 Subject: [PATCH 2/4] Do only what is possible with old CMake versions --- include/BoostInstall.cmake | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/include/BoostInstall.cmake b/include/BoostInstall.cmake index d7f0149..6ec6fc8 100644 --- a/include/BoostInstall.cmake +++ b/include/BoostInstall.cmake @@ -337,14 +337,20 @@ function(boost_install_target) string(APPEND CONFIG_INSTALL_DIR "-static") endif() - get_target_property(INTERFACE_CXX_MODULE_SETS ${LIB} INTERFACE_CXX_MODULE_SETS) - if(INTERFACE_CXX_MODULE_SETS) - boost_message(DEBUG "boost_install_target: '${__TARGET}' has INTERFACE_CXX_MODULE_SETS=${INTERFACE_CXX_MODULE_SETS}") - set(__INSTALL_CXX_MODULES FILE_SET ${INTERFACE_CXX_MODULE_SETS} DESTINATION ${CONFIG_INSTALL_DIR}) + if(NOT CMAKE_VERSION VERSION_LESS 3.28) + get_target_property(INTERFACE_CXX_MODULE_SETS ${LIB} INTERFACE_CXX_MODULE_SETS) + if(INTERFACE_CXX_MODULE_SETS) + boost_message(DEBUG "boost_install_target: '${__TARGET}' has INTERFACE_CXX_MODULE_SETS=${INTERFACE_CXX_MODULE_SETS}") + set(__INSTALL_CXX_MODULES FILE_SET ${INTERFACE_CXX_MODULE_SETS} DESTINATION ${CONFIG_INSTALL_DIR}) + endif() endif() - get_target_property(HEADER_SET ${LIB} HEADER_SET) - if(HEADER_SET) - boost_message(DEBUG "boost_install_target: '${__TARGET}' has HEADER_SET=${HEADER_SET}") + + if(NOT CMAKE_VERSION VERSION_LESS 3.23) + get_target_property(INTERFACE_HEADER_SETS ${LIB} INTERFACE_HEADER_SETS) + if(INTERFACE_HEADER_SETS) + boost_message(DEBUG "boost_install_target: '${__TARGET}' has INTERFACE_HEADER_SETS=${INTERFACE_HEADER_SETS}") + set(__INSTALL_HEADER_SETS FILE_SET ${INTERFACE_HEADER_SETS}) + endif() endif() install(TARGETS ${LIB} EXPORT ${LIB}-targets @@ -355,12 +361,14 @@ function(boost_install_target) PRIVATE_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" # explicit needed if used starting with cmake v3.28 - FILE_SET CXX_MODULES DESTINATION ${CONFIG_INSTALL_DIR} + # XXX FILE_SET CXX_MODULES DESTINATION ${CONFIG_INSTALL_DIR} ${__INSTALL_CXX_MODULES} - CXX_MODULES_BMI DESTINATION ${CONFIG_INSTALL_DIR}/bmi-${CMAKE_CXX_COMPILER_ID}_$ + # Any module files from C++ modules from PUBLIC sources in a file set of type CXX_MODULES will be installed to the given DESTINATION. + # FIXME: why does this silently not work here? CK + # XXX CXX_MODULES_BMI DESTINATION ${CONFIG_INSTALL_DIR}/bmi-${CMAKE_CXX_COMPILER_ID}_$ # explicit needed if used starting with cmake v3.23 - FILE_SET HEADERS - FILE_SET ${HEADER_SET} + # XXX FILE_SET HEADERS + ${__INSTALL_HEADER_SETS} ) # TODO(CK): what is this for? @@ -381,7 +389,7 @@ function(boost_install_target) endif() install(EXPORT ${LIB}-targets DESTINATION "${CONFIG_INSTALL_DIR}" NAMESPACE Boost:: FILE ${LIB}-targets.cmake - CXX_MODULES_DIRECTORY . + # XXX CXX_MODULES_DIRECTORY . ) set_target_properties(${LIB} PROPERTIES _boost_is_installed ON) From 24ce72761488b1ca5b6b790e2511c08d06e95ed3 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 16 Dec 2025 14:21:46 +0100 Subject: [PATCH 3/4] Respect review comments --- include/BoostInstall.cmake | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/include/BoostInstall.cmake b/include/BoostInstall.cmake index 6ec6fc8..6627fd7 100644 --- a/include/BoostInstall.cmake +++ b/include/BoostInstall.cmake @@ -337,15 +337,17 @@ function(boost_install_target) string(APPEND CONFIG_INSTALL_DIR "-static") endif() - if(NOT CMAKE_VERSION VERSION_LESS 3.28) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28) get_target_property(INTERFACE_CXX_MODULE_SETS ${LIB} INTERFACE_CXX_MODULE_SETS) if(INTERFACE_CXX_MODULE_SETS) boost_message(DEBUG "boost_install_target: '${__TARGET}' has INTERFACE_CXX_MODULE_SETS=${INTERFACE_CXX_MODULE_SETS}") set(__INSTALL_CXX_MODULES FILE_SET ${INTERFACE_CXX_MODULE_SETS} DESTINATION ${CONFIG_INSTALL_DIR}) + set(__INSTALL_CXX_MODULES_BMI CXX_MODULES_BMI DESTINATION ${CONFIG_INSTALL_DIR}/bmi-${CMAKE_CXX_COMPILER_ID}_$) + set(__EXPORT_CXX_MODULES_DIRECTORY CXX_MODULES_DIRECTORY .) endif() endif() - if(NOT CMAKE_VERSION VERSION_LESS 3.23) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.23) get_target_property(INTERFACE_HEADER_SETS ${LIB} INTERFACE_HEADER_SETS) if(INTERFACE_HEADER_SETS) boost_message(DEBUG "boost_install_target: '${__TARGET}' has INTERFACE_HEADER_SETS=${INTERFACE_HEADER_SETS}") @@ -360,13 +362,12 @@ function(boost_install_target) ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" PRIVATE_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" - # explicit needed if used starting with cmake v3.28 + # NOTE: explicit needed if used starting with cmake v3.28 # XXX FILE_SET CXX_MODULES DESTINATION ${CONFIG_INSTALL_DIR} ${__INSTALL_CXX_MODULES} # Any module files from C++ modules from PUBLIC sources in a file set of type CXX_MODULES will be installed to the given DESTINATION. - # FIXME: why does this silently not work here? CK - # XXX CXX_MODULES_BMI DESTINATION ${CONFIG_INSTALL_DIR}/bmi-${CMAKE_CXX_COMPILER_ID}_$ - # explicit needed if used starting with cmake v3.23 + ${__INSTALL_CXX_MODULES_BMI} + # NOTE: explicit needed if used starting with cmake v3.23 # XXX FILE_SET HEADERS ${__INSTALL_HEADER_SETS} ) @@ -389,7 +390,7 @@ function(boost_install_target) endif() install(EXPORT ${LIB}-targets DESTINATION "${CONFIG_INSTALL_DIR}" NAMESPACE Boost:: FILE ${LIB}-targets.cmake - # XXX CXX_MODULES_DIRECTORY . + ${__EXPORT_CXX_MODULES_DIRECTORY} ) set_target_properties(${LIB} PROPERTIES _boost_is_installed ON) From 7252fc4b23bf693f78cd8eea777dbde20906fb0f Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Wed, 17 Dec 2025 10:01:59 +0100 Subject: [PATCH 4/4] Use VERSION_GREATER_EQUAL --- include/BoostInstall.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/BoostInstall.cmake b/include/BoostInstall.cmake index 6627fd7..fcae1c3 100644 --- a/include/BoostInstall.cmake +++ b/include/BoostInstall.cmake @@ -3,7 +3,7 @@ # Distributed under the Boost Software License, Version 1.0. # See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt -if(NOT CMAKE_VERSION VERSION_LESS 3.10) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.10) include_guard() endif() @@ -366,7 +366,7 @@ function(boost_install_target) # XXX FILE_SET CXX_MODULES DESTINATION ${CONFIG_INSTALL_DIR} ${__INSTALL_CXX_MODULES} # Any module files from C++ modules from PUBLIC sources in a file set of type CXX_MODULES will be installed to the given DESTINATION. - ${__INSTALL_CXX_MODULES_BMI} + # TODO(CK) ${__INSTALL_CXX_MODULES_BMI} # NOTE: explicit needed if used starting with cmake v3.23 # XXX FILE_SET HEADERS ${__INSTALL_HEADER_SETS} @@ -380,7 +380,7 @@ function(boost_install_target) install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) endif() - if(TYPE STREQUAL "STATIC_LIBRARY" AND NOT CMAKE_VERSION VERSION_LESS 3.15) + if(TYPE STREQUAL "STATIC_LIBRARY" AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.15) install(FILES "$/$$.pdb" DESTINATION ${CMAKE_INSTALL_LIBDIR} OPTIONAL) endif() endif() @@ -390,7 +390,7 @@ function(boost_install_target) endif() install(EXPORT ${LIB}-targets DESTINATION "${CONFIG_INSTALL_DIR}" NAMESPACE Boost:: FILE ${LIB}-targets.cmake - ${__EXPORT_CXX_MODULES_DIRECTORY} + # TODO(CK) ${__EXPORT_CXX_MODULES_DIRECTORY} ) set_target_properties(${LIB} PROPERTIES _boost_is_installed ON) @@ -520,7 +520,7 @@ function(boost_install_target) # Header-only libraries are architecture-independent - if(NOT CMAKE_VERSION VERSION_LESS 3.14) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14) write_basic_package_version_file("${CONFIG_VERSION_FILE_NAME}" COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT)