From 87308cc72fc725f535a78d91b4e02e98a8289bd7 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Sat, 20 Jun 2026 19:04:15 +0200 Subject: [PATCH 01/14] Bump version: 1.91.0-rc0 -> 1.91.0-rc1 --- .bumpversion.cfg | 2 +- .bumpversion.md | 2 +- .pre-commit-config.yaml | 2 +- CMakeLists.txt | 29 ++++++++++++++++------------- CMakeReleasePresets.json | 4 ++-- README.md | 2 +- examples/CMakeLists.txt | 10 +++++----- requirements.txt | 8 ++++---- 8 files changed, 31 insertions(+), 28 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index cce5abd9..262d6fe2 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -4,7 +4,7 @@ message = Bump version: {current_version} -> {new_version} tag_message = Release v{new_version} tag_name = v{new_version} tag = True -current_version = 1.90.0-rc2 +current_version = 1.91.0-rc1 parse = (?P\d+)\.(?P\d+)\.(?P\d+)([-](?P(dev|rc))+(?P\d+))? serialize = {major}.{minor}.{patch}-{release}{build} diff --git a/.bumpversion.md b/.bumpversion.md index 484db6d8..fc8182de 100644 --- a/.bumpversion.md +++ b/.bumpversion.md @@ -50,7 +50,7 @@ Start with an initial release, say `1.0.0`. `ValueError: The part has already the maximum value among ['dev', 'rc', 'ga'] and cannot be bumped`. * A whole version string may be set with: - bumpversion --new-version 1.90.0 patch --no-commit --no-tag --allow-dirty + bumpversion --new-version 1.91.0-rc0 release --no-commit --no-tag --allow-dirty # Reference diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6a597b57..10b94ece 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,7 +15,7 @@ repos: # This brings in a portable version of clang-format. # See also: https://github.com/ssciwr/clang-format-wheel - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v22.1.0 + rev: v22.1.5 hooks: - id: clang-format types_or: [c++, c, json] diff --git a/CMakeLists.txt b/CMakeLists.txt index 20eda552..d7739d7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ -cmake_minimum_required(VERSION 3.30...4.3) +cmake_minimum_required(VERSION 3.30...4.4) # gersemi: off -project(Boost-CMake LANGUAGES CXX VERSION 1.90.0.2) +project(Boost-CMake LANGUAGES CXX VERSION 1.91.0.1) # gersemi: on if(PROJECT_IS_TOP_LEVEL) @@ -75,16 +75,18 @@ set(BOOST_LIBS_REQUIRED headers) set(BOOST_EXCLUDE_LIBRARIES cobalt fiber + graph iostreams locale log json + serialization timer wave ) if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL) - # NOTE: Compiled libs without warnings OSX with clang v21.1.7! CK + # NOTE: Compiled libs without warnings OSX with clang v22.1.7! CK list( APPEND BOOST_INCLUDE_LIBRARIES ${BOOST_LIBS_REQUIRED} @@ -99,7 +101,7 @@ if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL) exception filesystem # FIXME: Warnings with g++-15 on OSX! CK geometry # deps on any - graph # deps on any, serialization + # TODO(CK): graph # deps on any, serialization json math optional @@ -110,7 +112,7 @@ if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL) property_map # deps on any property_tree # deps on any regex - serialization + # TODO(CK): serialization signals2 system test @@ -131,7 +133,7 @@ endif() # ---- Add/prepare dependency handling via CPM ---- # see https://github.com/TheLartians/CPM.cmake for more info -set(BOOST_SUBDIR boost_1_90_0) +set(BOOST_SUBDIR boost-1.91.0-1) if(EXISTS "$ENV{CPM_SOURCE_CACHE}/${BOOST_SUBDIR}") set(FETCHCONTENT_SOURCE_DIR_BOOST "$ENV{CPM_SOURCE_CACHE}/${BOOST_SUBDIR}" @@ -147,14 +149,15 @@ if(FETCHCONTENT_SOURCE_DIR_BOOST) ) endif() -set(BOOST_VERSION 1.90.0) +set(BOOST_VERSION 1.91.0) +set(BOOST_FILE_VERSION ${BOOST_VERSION}-1) set(BOOST_URL - "https://github.com/boostorg/boost/releases/download/boost-${BOOST_VERSION}/boost-${BOOST_VERSION}-cmake.7z" + "https://github.com/boostorg/boost/releases/download/boost-${BOOST_FILE_VERSION}/boost-${BOOST_FILE_VERSION}-cmake.7z" CACHE STRING "Boost download URL" ) set(BOOST_URL_SHA256 - "218e74c4aa362a994b7b7a23b2920f455a00205c656405fcf262cf60b8871921" + "29c7d4f4ac36ad853b6765d03571ea60d90286775df026b4efd9f3281131972b" CACHE STRING "Boost download URL SHA256 checksum" ) @@ -166,9 +169,9 @@ FetchContent_Declare( URL ${BOOST_URL} URL_HASH SHA256=${BOOST_URL_SHA256} DOWNLOAD_EXTRACT_TIMESTAMP ON - PATCH_COMMAND - git apply -p0 - ${CMAKE_CURRENT_SOURCE_DIR}/patches/${BOOST_VERSION}/cmake-01.patch + # PATCH_COMMAND + # git apply -p0 + # ${CMAKE_CURRENT_SOURCE_DIR}/patches/${BOOST_VERSION}/cmake-01.patch SYSTEM ${EXCLUDE_FROM_ALL} ) @@ -178,7 +181,7 @@ if(NOT Boost_POPULATED) message(STATUS "Fetching Boost") FetchContent_MakeAvailable(Boost) message(STATUS "Fetching Boost - done") - set(BOOST_SOURCE ${boost_SOURCE_DIR}) + set(BOOST_SOURCE ${Boost_SOURCE_DIR}) message(STATUS "Boost_SOURCE_DIR=${Boost_SOURCE_DIR}") endif() diff --git a/CMakeReleasePresets.json b/CMakeReleasePresets.json index e78fdbff..fbcb6dd9 100644 --- a/CMakeReleasePresets.json +++ b/CMakeReleasePresets.json @@ -22,8 +22,8 @@ "BOOST_STANDALONE": true, "BUILD_SHARED_LIBS": true, "CMAKE_BUILD_TYPE": "Release", - "CMAKE_CXX_EXTENSIONS": true, - "CMAKE_CXX_STANDARD": "20", + "CMAKE_CXX_EXTENSIONS": false, + "CMAKE_CXX_STANDARD": "23", "CMAKE_CXX_STANDARD_REQUIRED": true, "CMAKE_DEBUG_POSTFIX": "-d", "CMAKE_EXPORT_COMPILE_COMMANDS": true, diff --git a/README.md b/README.md index 1cd424ae..1563df4b 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ option(BUILD_SHARED_LIBS "Build shared libraries" NO) set(BOOST_INCLUDE_LIBRARIES any pfr beast filesystem headers) set(BOOST_USE_MODULES ON) set(Boost_VERBOSE ON) -CPMAddPackage("gh:ClausKlein/boost-cmake#v1.90.0-rc2") +CPMAddPackage("gh:ClausKlein/boost-cmake#v1.91.0-rc1") target_include_directories( ${PROJECT_NAME} PUBLIC $ diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index e1b71f9f..ab1290e7 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,6 +1,6 @@ -cmake_minimum_required(VERSION 3.30...4.3) +cmake_minimum_required(VERSION 3.30...4.4) -# test boost-cmake v1.90.0-rc2 +# test boost-cmake v1.91.0-rc1 project(BoostExamples LANGUAGES CXX) enable_testing() @@ -12,7 +12,7 @@ if(PROJECT_IS_TOP_LEVEL) set(CMAKE_SKIP_TEST_ALL_DEPENDENCY NO) if(NOT DEFINED CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 20) + set(CMAKE_CXX_STANDARD 23) endif() if(NOT DEFINED CMAKE_PREFIX_PATH) list(APPEND CMAKE_PREFIX_PATH ../stagedir) @@ -36,7 +36,7 @@ if(PROJECT_IS_TOP_LEVEL) set(BUILD_SHARED_LIBS ON) set(BOOST_SKIP_INSTALL_RULES ${CMAKE_SKIP_INSTALL_RULES}) - set(BOOST_VERSION 1.90.0) + set(BOOST_VERSION 1.91.0-1) include(FetchContent) FetchContent_Declare( @@ -44,7 +44,7 @@ if(PROJECT_IS_TOP_LEVEL) URL https://github.com/boostorg/boost/releases/download/boost-${BOOST_VERSION}/boost-${BOOST_VERSION}-cmake.7z URL_HASH - SHA256=218e74c4aa362a994b7b7a23b2920f455a00205c656405fcf262cf60b8871921 + SHA256:29c7d4f4ac36ad853b6765d03571ea60d90286775df026b4efd9f3281131972b EXCLUDE_FROM_ALL SYSTEM FIND_PACKAGE_ARGS diff --git a/requirements.txt b/requirements.txt index 4f26a506..09fad138 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,10 +17,10 @@ pre-commit ### cmake build context bump2version>=1.0.1 check-jsonschema>=0.31.2 -cmake-format>=0.6.13 +# cmake-format>=0.6.13 cmake>=3.30 -codespell>=2.4.1 +codespell>=2.4.2 conan>=2.13.0 -gcovr>=8.3 -ninja>=1.11 +gcovr>=8.6 +ninja>=1.13 yamllint>=1.35 From 9496197ef307c98c5b66011c13c6e62511ad11b1 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Sat, 20 Jun 2026 19:35:42 +0200 Subject: [PATCH 02/14] Prevent unity_builds on windows --- .github/workflows/cmake.yml | 2 +- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6d4b49d0..d6616ad9 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -36,7 +36,7 @@ jobs: - name: Setup build environment uses: lukka/get-cmake@latest with: - cmakeVersion: "~4.2.1" + cmakeVersion: "~4.3.4" ninjaVersion: "^1.13.0" - name: Setup MSVC diff --git a/CMakeLists.txt b/CMakeLists.txt index d7739d7b..ebf133c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ if(BOOST_USE_MODULES AND NOT UNIX) set(BUILD_SHARED_LIBS OFF) endif() -if(NOT BOOST_USE_MODULES) +if(NOT BOOST_USE_MODULES AND UNIX) message(STATUS "Use CMAKE_UNITY_BUILD") set(CMAKE_UNITY_BUILD ON) endif() From 902dde11ab1af3bcbbcdc5800c11ac16a7556c4c Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Sun, 21 Jun 2026 14:48:19 +0200 Subject: [PATCH 03/14] Test BOOST_USE_MODULES too --- CMakeLists.txt | 12 ++--- CMakeReleasePresets.json | 2 +- GNUmakefile | 8 ++-- examples/CMakeLists.txt | 8 ++-- patches/1.91.0/cmake-01.patch | 89 +++++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 patches/1.91.0/cmake-01.patch diff --git a/CMakeLists.txt b/CMakeLists.txt index ebf133c9..6b7ba28d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,12 +75,10 @@ set(BOOST_LIBS_REQUIRED headers) set(BOOST_EXCLUDE_LIBRARIES cobalt fiber - graph iostreams locale log json - serialization timer wave ) @@ -101,7 +99,7 @@ if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL) exception filesystem # FIXME: Warnings with g++-15 on OSX! CK geometry # deps on any - # TODO(CK): graph # deps on any, serialization + graph # deps on any, serialization json math optional @@ -112,7 +110,7 @@ if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL) property_map # deps on any property_tree # deps on any regex - # TODO(CK): serialization + serialization signals2 system test @@ -169,9 +167,9 @@ FetchContent_Declare( URL ${BOOST_URL} URL_HASH SHA256=${BOOST_URL_SHA256} DOWNLOAD_EXTRACT_TIMESTAMP ON - # PATCH_COMMAND - # git apply -p0 - # ${CMAKE_CURRENT_SOURCE_DIR}/patches/${BOOST_VERSION}/cmake-01.patch + PATCH_COMMAND + git apply -p0 + ${CMAKE_CURRENT_SOURCE_DIR}/patches/${BOOST_VERSION}/cmake-01.patch SYSTEM ${EXCLUDE_FROM_ALL} ) diff --git a/CMakeReleasePresets.json b/CMakeReleasePresets.json index fbcb6dd9..893c7eed 100644 --- a/CMakeReleasePresets.json +++ b/CMakeReleasePresets.json @@ -23,7 +23,7 @@ "BUILD_SHARED_LIBS": true, "CMAKE_BUILD_TYPE": "Release", "CMAKE_CXX_EXTENSIONS": false, - "CMAKE_CXX_STANDARD": "23", + "CMAKE_CXX_STANDARD": "20", "CMAKE_CXX_STANDARD_REQUIRED": true, "CMAKE_DEBUG_POSTFIX": "-d", "CMAKE_EXPORT_COMPILE_COMMANDS": true, diff --git a/GNUmakefile b/GNUmakefile index 2b96a3c4..61835b0c 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -21,8 +21,8 @@ ifeq (${hostSystemName},Darwin) export GCC_PREFIX:=$(shell brew --prefix gcc) export GCC_DIR:=$(shell realpath ${GCC_PREFIX}) -# export CMAKE_CXX_STDLIB_MODULES_JSON:=${GCC_DIR}/lib/gcc/current/libstdc++.modules.json -# export CXX::=g++-15 + # export CMAKE_CXX_STDLIB_MODULES_JSON:=${GCC_DIR}/lib/gcc/current/libstdc++.modules.json + # export CXX::=g++-15 # export CXXFLAGS:=-stdlib=libstdc++ # export GCOV:="gcov" else ifeq (${hostSystemName},Linux) @@ -42,13 +42,13 @@ examples: # XXX install ninja -C build test -v fresh: - cmake --workflow --preset Release --log-level=VERBOSE --fresh + cmake --workflow --preset Release --fresh compile_commands.json: build/Release/compile_commands.json ln -sf $< . build/Release/compile_commands.json: GNUmakefile CMakeLists.txt - cmake --preset Release --log-level=VERBOSE + cmake --preset Release --log-level=VERBOSE -D BOOST_USE_MODULES=ON build: compile_commands.json cmake --build --preset Release diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index ab1290e7..a4d4b1d3 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -10,9 +10,11 @@ enable_testing() if(PROJECT_IS_TOP_LEVEL) include(../cmake/ccache.cmake) - set(CMAKE_SKIP_TEST_ALL_DEPENDENCY NO) + set(CMAKE_SKIP_TEST_ALL_DEPENDENCY OFF) + set(CMAKE_CXX_EXTENSIONS OFF) + set(CMAKE_CXX_STANDARD_REQUIRED ON) if(NOT DEFINED CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 23) + set(CMAKE_CXX_STANDARD 20) endif() if(NOT DEFINED CMAKE_PREFIX_PATH) list(APPEND CMAKE_PREFIX_PATH ../stagedir) @@ -34,7 +36,7 @@ if(PROJECT_IS_TOP_LEVEL) set(CMAKE_SKIP_INSTALL_RULES ON) - set(BUILD_SHARED_LIBS ON) + set(BUILD_SHARED_LIBS OFF) set(BOOST_SKIP_INSTALL_RULES ${CMAKE_SKIP_INSTALL_RULES}) set(BOOST_VERSION 1.91.0-1) diff --git a/patches/1.91.0/cmake-01.patch b/patches/1.91.0/cmake-01.patch new file mode 100644 index 00000000..955da17d --- /dev/null +++ b/patches/1.91.0/cmake-01.patch @@ -0,0 +1,89 @@ +--- tools/cmake/include/BoostInstall.cmake.old 2026-01-08 11:26:12.013228000 +0100 ++++ tools/cmake/include/BoostInstall.cmake 2026-01-08 13:59:42.824649975 +0100 +@@ -337,6 +337,22 @@ + string(APPEND CONFIG_INSTALL_DIR "-static") + endif() + ++ 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 ${CMAKE_INSTALL_DATADIR}) ++ endif() ++ endif() ++ ++ 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 + # explicit destination specification required for 3.13, 3.14 no longer needs it + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" +@@ -344,8 +360,18 @@ + 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 ++ # XXX FILE_SET CXX_MODULES DESTINATION "${CMAKE_INSTALL_DATADIR}" ++ ${__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 ++ # XXX FILE_SET HEADERS ++ ${__INSTALL_HEADER_SETS} + ) + ++ # TODO(CK): what is this for? + export(TARGETS ${LIB} NAMESPACE Boost:: FILE export/${LIB}-targets.cmake) + + if(MSVC) +@@ -362,7 +388,9 @@ + __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 ++ # XXX CXX_MODULES_DIRECTORY . ++ ) + + set_target_properties(${LIB} PROPERTIES _boost_is_installed ON) + +--- tools/cmake/include/BoostRoot.cmake.old 2026-01-08 11:31:49.525898365 +0100 ++++ tools/cmake/include/BoostRoot.cmake 2026-01-08 11:31:04.000000000 +0100 +@@ -123,7 +123,9 @@ + set(BOOST_SKIP_INSTALL_RULES ON) + endif() + +- set(BUILD_TESTING OFF) ++ if(NOT BOOST_BUILD_TESTING) ++ set(BUILD_TESTING OFF) ++ endif() + + endif() + +@@ -303,6 +305,9 @@ + + endmacro() + ++# C++20 modules ++option(BOOST_USE_MODULES "Build Boost as a collection of C++20 modules (unstable)" OFF) ++ + # + + file(GLOB __boost_libraries RELATIVE "${BOOST_SUPERPROJECT_SOURCE_DIR}/libs" "${BOOST_SUPERPROJECT_SOURCE_DIR}/libs/*/CMakeLists.txt" "${BOOST_SUPERPROJECT_SOURCE_DIR}/libs/numeric/*/CMakeLists.txt") +--- libs/serialization/CMakeLists.txt.old 2025-12-10 17:42:32.995666000 +0100 ++++ libs/serialization/CMakeLists.txt 2026-01-08 18:20:48.675263056 +0100 +@@ -6,6 +6,8 @@ + + project(boost_serialization VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) + ++set(CMAKE_UNITY_BUILD OFF) ++ + add_library(boost_serialization + src/archive_exception.cpp + src/basic_archive.cpp From 01a4842f709056761754f09a6c107f4adf7e1016 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Sun, 21 Jun 2026 15:01:32 +0200 Subject: [PATCH 04/14] Update Readme and CPM.cmake module --- README.md | 6 +++--- cmake/CPM.cmake | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1563df4b..e839e1ca 100644 --- a/README.md +++ b/README.md @@ -41,8 +41,8 @@ Boost will automatically be downloaded from https://github.com/boostorg/boost/re If that is not acceptable to you, you can use an alternate Boost version, apply custom patches or just mirror the current archive in your internal network like so: ``` -set(BOOST_URL http://internal.mirror/boost-1.90.0-cmake.7z) -set(BOOST_URL_SHA256 218e74c4aa362a994b7b7a23b2920f455a00205c656405fcf262cf60b8871921) +set(BOOST_URL http://internal.mirror/boost-1.91.0-1-cmake.7z) +set(BOOST_URL_SHA256 29c7d4f4ac36ad853b6765d03571ea60d90286775df026b4efd9f3281131972b) ``` If you have boost-cmake and Boost cmake sources files already available and want to point to them, you can use the following: @@ -70,7 +70,7 @@ packageProject( INCLUDE_HEADER_PATTERN "*.h" DISABLE_VERSION_SUFFIX YES COMPATIBILITY SameMajorVersion - DEPENDENCIES "Boost 1.90" + DEPENDENCIES "Boost 1.91" ) include(CPack) diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 70ce5879..cf1772ed 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -2,9 +2,9 @@ # # SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors -set(CPM_DOWNLOAD_VERSION 0.42.0) +set(CPM_DOWNLOAD_VERSION 0.42.3) set(CPM_HASH_SUM - "2020b4fc42dba44817983e06342e682ecfc3d2f484a581f11cc5731fbe4dce8a" + "a609e875fd532b067174250f6abbc3dac22fe2d64869783fb1e80bda1625c844" ) if(CPM_SOURCE_CACHE) From 2e71c0a145419c592c627171037a311b5424ec21 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Sun, 21 Jun 2026 16:22:48 +0200 Subject: [PATCH 05/14] Test BOOST_USE_MODULES on CI --- .github/workflows/cmake.yml | 2 +- GNUmakefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d6616ad9..22331fd4 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -52,7 +52,7 @@ jobs: compiler: llvm - name: Configure CMake - run: cmake --preset ${{env.BUILD_TYPE}} --log-level=VERBOSE + run: cmake --preset ${{env.BUILD_TYPE}} --log-level=VERBOSE -D BOOST_USE_MODULES=ON - name: Build # Build your program with the given configuration diff --git a/GNUmakefile b/GNUmakefile index 61835b0c..d698da84 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -22,7 +22,7 @@ ifeq (${hostSystemName},Darwin) export GCC_DIR:=$(shell realpath ${GCC_PREFIX}) # export CMAKE_CXX_STDLIB_MODULES_JSON:=${GCC_DIR}/lib/gcc/current/libstdc++.modules.json - # export CXX::=g++-15 + # export CXX:=g++-15 # export CXXFLAGS:=-stdlib=libstdc++ # export GCOV:="gcov" else ifeq (${hostSystemName},Linux) From cc6df655d11cf6f7aaf56e0475ddb8887a97f719 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Mon, 22 Jun 2026 20:25:23 +0200 Subject: [PATCH 06/14] Patch boost_any too --- CMakeLists.txt | 26 +++++++++++++++++++++++++- CMakeReleasePresets.json | 2 +- GNUmakefile | 3 ++- examples/CMakeLists.txt | 2 +- examples/any_module_usage_sample.cpp | 2 +- patches/1.91.0/cmake-01.patch | 22 ++++++++++++++++++++++ 6 files changed, 52 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b7ba28d..879add12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,29 @@ cmake_minimum_required(VERSION 3.30...4.4) +if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30.0") + if(CMAKE_VERSION VERSION_LESS "3.31.8") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "0e5b6991-d74f-4b3d-a41c-cf096e0b2508" + ) + elseif(CMAKE_VERSION VERSION_LESS "4.0.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "d0edc3af-4c50-42ea-a356-e2862fe7a444" + ) + elseif(CMAKE_VERSION VERSION_LESS "4.0.3") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "a9e1cf81-9932-4810-974b-6eccaf14e457" + ) + elseif(CMAKE_VERSION VERSION_LESS "4.3.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "d0edc3af-4c50-42ea-a356-e2862fe7a444" + ) + elseif(CMAKE_VERSION VERSION_LESS "4.4.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "451f2fe2-a8a2-47c3-bc32-94786d8fc91b" + ) + endif() +endif() + # gersemi: off project(Boost-CMake LANGUAGES CXX VERSION 1.91.0.1) # gersemi: on @@ -12,7 +36,7 @@ if(PROJECT_IS_TOP_LEVEL) option(BOOST_USE_MODULES "Do build with CXX_MODULES if possible" OFF) if(BOOST_USE_MODULES) set(CMAKE_CXX_SCAN_FOR_MODULES ON) - set(CMAKE_CXX_MODULE_STD OFF) # TODO(CK): not yet! + # XXX set(CMAKE_CXX_MODULE_STD ON) # TODO(CK): not yet! else() set(CMAKE_CXX_SCAN_FOR_MODULES OFF) endif() diff --git a/CMakeReleasePresets.json b/CMakeReleasePresets.json index 893c7eed..fbcb6dd9 100644 --- a/CMakeReleasePresets.json +++ b/CMakeReleasePresets.json @@ -23,7 +23,7 @@ "BUILD_SHARED_LIBS": true, "CMAKE_BUILD_TYPE": "Release", "CMAKE_CXX_EXTENSIONS": false, - "CMAKE_CXX_STANDARD": "20", + "CMAKE_CXX_STANDARD": "23", "CMAKE_CXX_STANDARD_REQUIRED": true, "CMAKE_DEBUG_POSTFIX": "-d", "CMAKE_EXPORT_COMPILE_COMMANDS": true, diff --git a/GNUmakefile b/GNUmakefile index d698da84..96af1465 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -48,7 +48,8 @@ compile_commands.json: build/Release/compile_commands.json ln -sf $< . build/Release/compile_commands.json: GNUmakefile CMakeLists.txt - cmake --preset Release --log-level=VERBOSE -D BOOST_USE_MODULES=ON + cmake --preset Release --log-level=VERBOSE -D BOOST_USE_MODULES=ON -D CMAKE_CXX_MODULE_STD=ON \ + -D CMAKE_CXX_STDLIB_MODULES_JSON=${CMAKE_CXX_STDLIB_MODULES_JSON} build: compile_commands.json cmake --build --preset Release diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a4d4b1d3..51cbe6f8 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -14,7 +14,7 @@ if(PROJECT_IS_TOP_LEVEL) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(NOT DEFINED CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 20) + set(CMAKE_CXX_STANDARD 23) endif() if(NOT DEFINED CMAKE_PREFIX_PATH) list(APPEND CMAKE_PREFIX_PATH ../stagedir) diff --git a/examples/any_module_usage_sample.cpp b/examples/any_module_usage_sample.cpp index cc0d3369..b1faf5f0 100644 --- a/examples/any_module_usage_sample.cpp +++ b/examples/any_module_usage_sample.cpp @@ -47,7 +47,7 @@ namespace { auto main() -> int { boost::any const a = 42; #ifdef BOOST_ANY_USE_STD_MODULE - std::println(stdout, "{}", any_to_string(a)); + std::println(std::cout, "{}", any_to_string(a)); #else std::cout << any_to_string(a) << '\n'; #endif diff --git a/patches/1.91.0/cmake-01.patch b/patches/1.91.0/cmake-01.patch index 955da17d..93fc4a66 100644 --- a/patches/1.91.0/cmake-01.patch +++ b/patches/1.91.0/cmake-01.patch @@ -87,3 +87,25 @@ add_library(boost_serialization src/archive_exception.cpp src/basic_archive.cpp +--- libs/any/CMakeLists.txt.old 2026-06-22 19:54:36.000000000 ++++ libs/any/CMakeLists.txt 2026-06-22 19:59:27.000000000 +@@ -14,16 +14,17 @@ + ) + + target_compile_features(boost_any PUBLIC cxx_std_20) + target_compile_definitions(boost_any PUBLIC BOOST_USE_MODULES) + set(__boost_cxx_standard ${CMAKE_CXX_STANDARD}) + if (NOT __boost_cxx_standard) +- set(__boost_cxx_standard 20) ++ set(__boost_cxx_standard 23) + endif() + if (CMAKE_CXX_COMPILER_IMPORT_STD AND ${__boost_cxx_standard} IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD) +- target_compile_definitions(boost_any PRIVATE BOOST_ANY_USE_STD_MODULE) ++ target_compile_definitions(boost_any PUBLIC BOOST_ANY_USE_STD_MODULE) ++ target_compile_features(boost_any PUBLIC cxx_std_${__boost_cxx_standard}) + message(STATUS "Using `import std;`") + else() + message(STATUS "`import std;` is not available") + endif() + set(__scope PUBLIC) + else() From 85753e733cb45b04a2b8122f4f4ef1c82f1b2c24 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 06:42:10 +0200 Subject: [PATCH 07/14] Disable CMAKE_CXX_MODULE_STD again --- CMakeLists.txt | 3 ++- CMakeReleasePresets.json | 2 +- GNUmakefile | 1 + examples/CMakeLists.txt | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 879add12..0ee54adf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,7 @@ if(PROJECT_IS_TOP_LEVEL) option(BOOST_USE_MODULES "Do build with CXX_MODULES if possible" OFF) if(BOOST_USE_MODULES) set(CMAKE_CXX_SCAN_FOR_MODULES ON) - # XXX set(CMAKE_CXX_MODULE_STD ON) # TODO(CK): not yet! + set(CMAKE_CXX_MODULE_STD OFF) # TODO(CK): not yet! else() set(CMAKE_CXX_SCAN_FOR_MODULES OFF) endif() @@ -125,6 +125,7 @@ if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL) geometry # deps on any graph # deps on any, serialization json + lexical_cast # TODO(CK): use BOOST_USE_MODULES but import std wrong! math optional parser # deps on type_index diff --git a/CMakeReleasePresets.json b/CMakeReleasePresets.json index fbcb6dd9..893c7eed 100644 --- a/CMakeReleasePresets.json +++ b/CMakeReleasePresets.json @@ -23,7 +23,7 @@ "BUILD_SHARED_LIBS": true, "CMAKE_BUILD_TYPE": "Release", "CMAKE_CXX_EXTENSIONS": false, - "CMAKE_CXX_STANDARD": "23", + "CMAKE_CXX_STANDARD": "20", "CMAKE_CXX_STANDARD_REQUIRED": true, "CMAKE_DEBUG_POSTFIX": "-d", "CMAKE_EXPORT_COMPILE_COMMANDS": true, diff --git a/GNUmakefile b/GNUmakefile index 96af1465..872024de 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -47,6 +47,7 @@ fresh: compile_commands.json: build/Release/compile_commands.json ln -sf $< . +# NOTE: Works only yet on OSX with clang v22.1.7 with this arguments! CK build/Release/compile_commands.json: GNUmakefile CMakeLists.txt cmake --preset Release --log-level=VERBOSE -D BOOST_USE_MODULES=ON -D CMAKE_CXX_MODULE_STD=ON \ -D CMAKE_CXX_STDLIB_MODULES_JSON=${CMAKE_CXX_STDLIB_MODULES_JSON} diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 51cbe6f8..a4d4b1d3 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -14,7 +14,7 @@ if(PROJECT_IS_TOP_LEVEL) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(NOT DEFINED CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 23) + set(CMAKE_CXX_STANDARD 20) endif() if(NOT DEFINED CMAKE_PREFIX_PATH) list(APPEND CMAKE_PREFIX_PATH ../stagedir) From 04a32b4d8739b04c59173b8144d49867bfec56b3 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 07:18:53 +0200 Subject: [PATCH 08/14] pre-commit autoupdate --- .pre-commit-config.yaml | 5 +++-- examples/CMakeLists.txt | 6 +----- requirements.txt | 3 +-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 10b94ece..f1bf54f9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,8 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - # - id: trailing-whitespace + - id: trailing-whitespace + exclude: ^patches/\.*(patch|diff)$ - id: end-of-file-fixer - id: check-json - id: check-yaml @@ -23,7 +24,7 @@ repos: # CMake linting and formatting - repo: https://github.com/BlankSpruce/gersemi - rev: 0.26.0 + rev: 0.27.7 hooks: - id: gersemi name: CMake linting diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a4d4b1d3..97b619e3 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -51,11 +51,7 @@ if(PROJECT_IS_TOP_LEVEL) SYSTEM FIND_PACKAGE_ARGS 1.90.0.1 - COMPONENTS - any - asio - regex - unit_test_framework + COMPONENTS any asio regex unit_test_framework ) FetchContent_MakeAvailable(Boost) endblock() diff --git a/requirements.txt b/requirements.txt index 09fad138..7c02bba1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,10 +17,9 @@ pre-commit ### cmake build context bump2version>=1.0.1 check-jsonschema>=0.31.2 -# cmake-format>=0.6.13 cmake>=3.30 codespell>=2.4.2 -conan>=2.13.0 +conan>=2.28.1 gcovr>=8.6 ninja>=1.13 yamllint>=1.35 From 5e0569cdbae52a51d884e130df7e5032bedf34c9 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 07:25:43 +0200 Subject: [PATCH 09/14] disable gersemi at pre-commit hooks --- .pre-commit-config.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f1bf54f9..5addb098 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ repos: rev: v6.0.0 hooks: - id: trailing-whitespace - exclude: ^patches/\.*(patch|diff)$ + exclude: ^.*\.(patch|cfg)$ - id: end-of-file-fixer - id: check-json - id: check-yaml @@ -22,12 +22,12 @@ repos: types_or: [c++, c, json] exclude: docs/TODO.json - # CMake linting and formatting - - repo: https://github.com/BlankSpruce/gersemi - rev: 0.27.7 - hooks: - - id: gersemi - name: CMake linting + # # CMake linting and formatting + # - repo: https://github.com/BlankSpruce/gersemi + # rev: 0.27.7 + # hooks: + # - id: gersemi + # name: CMake linting # TODO: Markdown linting # Config file: .markdownlint.yaml From d0636edd25d7847d20c142f7a9d22f2f45b4f0e3 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 13:21:49 +0200 Subject: [PATCH 10/14] Patch pfr, lexical_cast, and type_index too --- patches/1.91.0/cmake-01.patch | 134 ++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/patches/1.91.0/cmake-01.patch b/patches/1.91.0/cmake-01.patch index 93fc4a66..f0758966 100644 --- a/patches/1.91.0/cmake-01.patch +++ b/patches/1.91.0/cmake-01.patch @@ -109,3 +109,137 @@ endif() set(__scope PUBLIC) else() +--- libs/lexical_cast/CMakeLists.txt.old 2026-06-23 12:16:39.262084782 +0200 ++++ libs/lexical_cast/CMakeLists.txt 2026-06-23 12:33:54.908892502 +0200 +@@ -3,25 +3,30 @@ + # Distributed under the Boost Software License, Version 1.0. + # https://www.boost.org/LICENSE_1_0.txt + +-cmake_minimum_required(VERSION 3.5...4.0) ++cmake_minimum_required(VERSION 3.28...4.0) + + project(boost_lexical_cast VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) + +- +-if (BOOST_USE_MODULES) ++if(BOOST_USE_MODULES) + add_library(boost_lexical_cast) + target_sources(boost_lexical_cast PUBLIC +- FILE_SET modules_public TYPE CXX_MODULES FILES +- ${CMAKE_CURRENT_LIST_DIR}/modules/boost_lexical_cast.cppm ++ FILE_SET modules_public ++ TYPE CXX_MODULES ++ FILES modules/boost_lexical_cast.cppm + ) + + target_compile_features(boost_lexical_cast PUBLIC cxx_std_20) + target_compile_definitions(boost_lexical_cast PUBLIC BOOST_USE_MODULES) +- if (CMAKE_CXX_COMPILER_IMPORT_STD) +- target_compile_definitions(boost_lexical_cast PRIVATE BOOST_LEXICAL_CAST_USE_STD_MODULE) ++ set(__boost_cxx_standard ${CMAKE_CXX_STANDARD}) ++ if(NOT __boost_cxx_standard) ++ set(__boost_cxx_standard 23) ++ endif() ++ if(CMAKE_CXX_COMPILER_IMPORT_STD AND ${__boost_cxx_standard} IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD) ++ target_compile_definitions(boost_lexical_cast PUBLIC BOOST_LEXICAL_CAST_USE_STD_MODULE) ++ target_compile_features(boost_lexical_cast PUBLIC cxx_std_${__boost_cxx_standard}) + message(STATUS "Using `import std;`") + else() +- message(STATUS "`import std;` is not awailable") ++ message(STATUS "`import std;` is not available") + endif() + set(__scope PUBLIC) + else() +@@ -43,4 +48,3 @@ + if(BUILD_TESTING) + add_subdirectory(test) + endif() +- +--- libs/pfr/CMakeLists.txt.old 2026-06-23 12:57:13.166120620 +0200 ++++ libs/pfr/CMakeLists.txt 2026-06-23 13:06:24.695676463 +0200 +@@ -4,20 +4,27 @@ + # Distributed under the Boost Software License, Version 1.0. + # https://www.boost.org/LICENSE_1_0.txt + +-cmake_minimum_required(VERSION 3.5...3.31) ++cmake_minimum_required(VERSION 3.28...4.0) + + project(boost_pfr VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) + +-if (BOOST_USE_MODULES) ++if(BOOST_USE_MODULES) + add_library(boost_pfr) + target_sources(boost_pfr PUBLIC +- FILE_SET modules_public TYPE CXX_MODULES FILES modules/boost_pfr.cppm ++ FILE_SET modules_public ++ TYPE CXX_MODULES ++ FILES modules/boost_pfr.cppm + ) + + target_compile_features(boost_pfr PUBLIC cxx_std_20) + target_compile_definitions(boost_pfr PUBLIC BOOST_USE_MODULES) +- if (CMAKE_CXX_COMPILER_IMPORT_STD) +- target_compile_definitions(boost_pfr PRIVATE BOOST_PFR_USE_STD_MODULE) ++ set(__boost_cxx_standard ${CMAKE_CXX_STANDARD}) ++ if(NOT __boost_cxx_standard) ++ set(__boost_cxx_standard 23) ++ endif() ++ if(CMAKE_CXX_COMPILER_IMPORT_STD AND ${__boost_cxx_standard} IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD) ++ target_compile_definitions(boost_pfr PUBLIC BOOST_PFR_USE_STD_MODULE) ++ target_compile_features(boost_pfr PUBLIC cxx_std_${__boost_cxx_standard}) + message(STATUS "Using `import std;`") + else() + message(STATUS "`import std;` is not available") +@@ -31,11 +38,11 @@ + add_library(Boost::pfr ALIAS boost_pfr) + + enable_testing() +-if (BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") ++if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") + add_subdirectory(test) + endif() + +-if (BOOST_USE_MODULES AND BUILD_TESTING) ++if(BOOST_USE_MODULES AND BUILD_TESTING) + add_executable(boost_pfr_module_usage modules/usage_sample.cpp) + target_link_libraries(boost_pfr_module_usage PRIVATE Boost::pfr) + add_test(NAME boost_pfr_module_usage COMMAND boost_pfr_module_usage) +--- libs/type_index/CMakeLists.txt.old 2026-06-23 12:37:11.660738834 +0200 ++++ libs/type_index/CMakeLists.txt 2026-06-23 12:44:32.000000000 +0200 +@@ -3,23 +3,30 @@ + # Distributed under the Boost Software License, Version 1.0. + # https://www.boost.org/LICENSE_1_0.txt + +-cmake_minimum_required(VERSION 3.5...3.31) ++cmake_minimum_required(VERSION 3.28...4.0) + + project(boost_type_index VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) + +-if (BOOST_USE_MODULES) ++if(BOOST_USE_MODULES) + add_library(boost_type_index) + target_sources(boost_type_index PUBLIC +- FILE_SET modules_public TYPE CXX_MODULES FILES modules/boost_type_index.cppm ++ FILE_SET modules_public ++ TYPE CXX_MODULES ++ FILES modules/boost_type_index.cppm + ) + + target_compile_features(boost_type_index PUBLIC cxx_std_20) + target_compile_definitions(boost_type_index PUBLIC BOOST_USE_MODULES) +- if (CMAKE_CXX_COMPILER_IMPORT_STD) +- target_compile_definitions(boost_type_index PRIVATE BOOST_TYPE_INDEX_USE_STD_MODULE) ++ set(__boost_cxx_standard ${CMAKE_CXX_STANDARD}) ++ if(NOT __boost_cxx_standard) ++ set(__boost_cxx_standard 23) ++ endif() ++ if(CMAKE_CXX_COMPILER_IMPORT_STD AND ${__boost_cxx_standard} IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD) ++ target_compile_definitions(boost_type_index PUBLIC BOOST_TYPE_INDEX_USE_STD_MODULE) ++ target_compile_features(boost_type_index PUBLIC cxx_std_${__boost_cxx_standard}) + message(STATUS "Using `import std;`") + else() +- message(STATUS "`import std;` is not awailable") ++ message(STATUS "`import std;` is not available") + endif() + set(__scope PUBLIC) + else() From d7d56594b7a01a71842547a051a681f777da1334 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 14:20:18 +0200 Subject: [PATCH 11/14] Prepare manual test with g++-16 on OSX --- CMakeLists.txt | 47 ++++++++-------------- GNUmakefile | 22 +++++----- cmake/enable-experimental-import-std.cmake | 24 +++++++++++ examples/CMakeLists.txt | 10 ++++- 4 files changed, 61 insertions(+), 42 deletions(-) create mode 100644 cmake/enable-experimental-import-std.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ee54adf..04405bfe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,28 +1,6 @@ cmake_minimum_required(VERSION 3.30...4.4) -if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30.0") - if(CMAKE_VERSION VERSION_LESS "3.31.8") - set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD - "0e5b6991-d74f-4b3d-a41c-cf096e0b2508" - ) - elseif(CMAKE_VERSION VERSION_LESS "4.0.0") - set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD - "d0edc3af-4c50-42ea-a356-e2862fe7a444" - ) - elseif(CMAKE_VERSION VERSION_LESS "4.0.3") - set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD - "a9e1cf81-9932-4810-974b-6eccaf14e457" - ) - elseif(CMAKE_VERSION VERSION_LESS "4.3.0") - set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD - "d0edc3af-4c50-42ea-a356-e2862fe7a444" - ) - elseif(CMAKE_VERSION VERSION_LESS "4.4.0") - set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD - "451f2fe2-a8a2-47c3-bc32-94786d8fc91b" - ) - endif() -endif() +include(cmake/enable-experimental-import-std.cmake) # gersemi: off project(Boost-CMake LANGUAGES CXX VERSION 1.91.0.1) @@ -36,7 +14,11 @@ if(PROJECT_IS_TOP_LEVEL) option(BOOST_USE_MODULES "Do build with CXX_MODULES if possible" OFF) if(BOOST_USE_MODULES) set(CMAKE_CXX_SCAN_FOR_MODULES ON) - set(CMAKE_CXX_MODULE_STD OFF) # TODO(CK): not yet! + if(CMAKE_CXX_STANDARD GREATER_EQUAL 23) + set(CMAKE_CXX_MODULE_STD ON) + else() + set(CMAKE_CXX_MODULE_STD OFF) + endif() else() set(CMAKE_CXX_SCAN_FOR_MODULES OFF) endif() @@ -98,11 +80,16 @@ endif() set(BOOST_LIBS_REQUIRED headers) set(BOOST_EXCLUDE_LIBRARIES cobalt + contract # FIXME: deps on any! CK fiber iostreams + graph # FIXME: deps on any! CK locale log json + program_options # FIXME: deps on any! CK + property_map # FIXME: deps on any! CK + property_tree # FIXME: deps on any! CK timer wave ) @@ -118,22 +105,22 @@ if(PROJECT_IS_TOP_LEVEL AND NOT BOOST_BUILD_ALL) beast # deps on type_index chrono container - contract # deps on any + contract # TODO: deps on any! CK coroutine exception filesystem # FIXME: Warnings with g++-15 on OSX! CK geometry # deps on any - graph # deps on any, serialization + graph # TODO: deps on any, serialization! CK json - lexical_cast # TODO(CK): use BOOST_USE_MODULES but import std wrong! + lexical_cast # use BOOST_USE_MODULES math optional parser # deps on type_index pfr # use BOOST_USE_MODULES process # deps on type_index - program_options # deps on any - property_map # deps on any - property_tree # deps on any + program_options # TODO: deps on any! CK + property_map # TODO: deps on any! CK + property_tree # TODO: deps on any! CK regex serialization signals2 diff --git a/GNUmakefile b/GNUmakefile index 872024de..c0bd8416 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -12,19 +12,19 @@ ifeq (${hostSystemName},Darwin) export LLVM_DIR:=$(shell realpath ${LLVM_PREFIX}) export PATH:=${LLVM_DIR}/bin:${PATH} - export CMAKE_CXX_STDLIB_MODULES_JSON:=${LLVM_DIR}/lib/c++/libc++.modules.json - export CXX:=clang++ - export LDFLAGS:=-L$(LLVM_DIR)/lib/c++ -lc++abi # NO! -lc++ -lc++experimental - export GCOV:="llvm-cov gcov" + # export CMAKE_CXX_STDLIB_MODULES_JSON:=${LLVM_DIR}/lib/c++/libc++.modules.json + # export CXX:=clang++ + # export LDFLAGS:=-L$(LLVM_DIR)/lib/c++ -lc++abi # NO! -lc++ -lc++experimental + # export GCOV:="llvm-cov gcov" - ### TODO: to test g++-15: + ### TODO: to test g++-16: export GCC_PREFIX:=$(shell brew --prefix gcc) export GCC_DIR:=$(shell realpath ${GCC_PREFIX}) - # export CMAKE_CXX_STDLIB_MODULES_JSON:=${GCC_DIR}/lib/gcc/current/libstdc++.modules.json - # export CXX:=g++-15 - # export CXXFLAGS:=-stdlib=libstdc++ - # export GCOV:="gcov" + export CMAKE_CXX_STDLIB_MODULES_JSON:=${GCC_DIR}/lib/gcc/current/libstdc++.modules.json + export CXX:=g++-16 + export CXXFLAGS:=-stdlib=libstdc++ + export GCOV:="gcov" else ifeq (${hostSystemName},Linux) export LLVM_DIR:=/usr/lib/llvm-20 export PATH:=${LLVM_DIR}/bin:${PATH} @@ -50,7 +50,7 @@ compile_commands.json: build/Release/compile_commands.json # NOTE: Works only yet on OSX with clang v22.1.7 with this arguments! CK build/Release/compile_commands.json: GNUmakefile CMakeLists.txt cmake --preset Release --log-level=VERBOSE -D BOOST_USE_MODULES=ON -D CMAKE_CXX_MODULE_STD=ON \ - -D CMAKE_CXX_STDLIB_MODULES_JSON=${CMAKE_CXX_STDLIB_MODULES_JSON} + -D CMAKE_CXX_STDLIB_MODULES_JSON=${CMAKE_CXX_STDLIB_MODULES_JSON} -D CMAKE_CXX_STANDARD=26 build: compile_commands.json cmake --build --preset Release @@ -66,7 +66,7 @@ clean: -find . -name '*~' -delete distclean: # XXX clean - rm -rf build stagedir + rm -rf build stagedir .cache compile_commands.json format: git ls-files ::*.cmake ::*CMakeLists.txt | xargs gersemi -i diff --git a/cmake/enable-experimental-import-std.cmake b/cmake/enable-experimental-import-std.cmake new file mode 100644 index 00000000..e41a5f7c --- /dev/null +++ b/cmake/enable-experimental-import-std.cmake @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.3.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "451f2fe2-a8a2-47c3-bc32-94786d8fc91b" + ) +elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "3.30.0") + if(CMAKE_VERSION VERSION_LESS "3.31.8") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "0e5b6991-d74f-4b3d-a41c-cf096e0b2508" + ) + elseif(CMAKE_VERSION VERSION_LESS "4.0.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "d0edc3af-4c50-42ea-a356-e2862fe7a444" + ) + elseif(CMAKE_VERSION VERSION_LESS "4.0.3") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "a9e1cf81-9932-4810-974b-6eccaf14e457" + ) + elseif(CMAKE_VERSION VERSION_LESS "4.3.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD + "d0edc3af-4c50-42ea-a356-e2862fe7a444" + ) + endif() +endif() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 97b619e3..eb717f1b 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 3.30...4.4) +include(../cmake/enable-experimental-import-std.cmake) + # test boost-cmake v1.91.0-rc1 project(BoostExamples LANGUAGES CXX) @@ -24,7 +26,11 @@ if(PROJECT_IS_TOP_LEVEL) endif() if(BOOST_USE_MODULES) set(CMAKE_CXX_SCAN_FOR_MODULES ON) - set(CMAKE_CXX_MODULE_STD OFF) # TODO(CK): not yet! + if(CMAKE_CXX_STANDARD GREATER_EQUAL 23) + set(CMAKE_CXX_MODULE_STD ON) + else() + set(CMAKE_CXX_MODULE_STD OFF) + endif() else() set(CMAKE_CXX_SCAN_FOR_MODULES OFF) endif() @@ -94,7 +100,9 @@ if(NOT PROJECT_IS_TOP_LEVEL) "${CMAKE_CURRENT_BINARY_DIR}/find-package-test" --build-generator ${CMAKE_GENERATOR} --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-options "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" + "-DCMAKE_CXX_MODULE_STD=${CMAKE_CXX_MODULE_STD}" "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}" + "-DCMAKE_CXX_STDLIB_MODULES_JSON=${CMAKE_CXX_STDLIB_MODULES_JSON}" "-DCMAKE_BUILD_TYPE=$" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" "-DBOOST_USE_MODULES=${BOOST_USE_MODULES}" From f5bd1e5c065505a303d1fd9c2826b82718804461 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 17:32:00 +0200 Subject: [PATCH 12/14] Disable Boost::any for now, caused by Windows build problems! --- CMakeLists.txt | 1 + examples/CMakeLists.txt | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04405bfe..6397ae21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,7 @@ endif() set(BOOST_LIBS_REQUIRED headers) set(BOOST_EXCLUDE_LIBRARIES + any cobalt contract # FIXME: deps on any! CK fiber diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index eb717f1b..2064d72d 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -38,7 +38,7 @@ if(PROJECT_IS_TOP_LEVEL) block() set(BOOST_DEBUG YES) set(BOOST_VERBOSE YES) - list(APPEND BOOST_INCLUDE_LIBRARIES any asio regex test) + list(APPEND BOOST_INCLUDE_LIBRARIES asio regex test) set(CMAKE_SKIP_INSTALL_RULES ON) @@ -65,7 +65,7 @@ endif() # ---- Create test binaries ---- -if(BOOST_USE_MODULES) +if(BOOST_USE_MODULES AND TARGET Boost::any) add_executable(ExampleModuleAny any_module_usage_sample.cpp) target_link_libraries(ExampleModuleAny PRIVATE Boost::any) add_test(NAME ExampleModuleAny COMMAND ExampleModuleAny) From e9e83486d0514b42211903da8582d26dfc800831 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 19:42:16 +0200 Subject: [PATCH 13/14] Upgrade Node.js CI actions as 20 is deprecated --- .github/workflows/cmake.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 22331fd4..c793cedd 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -36,12 +36,12 @@ jobs: - name: Setup build environment uses: lukka/get-cmake@latest with: - cmakeVersion: "~4.3.4" - ninjaVersion: "^1.13.0" + cmakeVersion: "^4.3.4" + ninjaVersion: "~1.13.0" - name: Setup MSVC if: startsWith(matrix.os, 'windows') - uses: TheMrMilchmann/setup-msvc-dev@v3 + uses: TheMrMilchmann/setup-msvc-dev@v4 with: arch: x64 From b9dcf642baa8a08b3f398b4cab80a0007d062572 Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Tue, 23 Jun 2026 19:49:27 +0200 Subject: [PATCH 14/14] Use llvm-22 on CI --- .github/workflows/cmake.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c793cedd..c49aa250 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -27,9 +27,9 @@ jobs: fail-fast: false matrix: - os: [macos, ubuntu, windows] + os: [macos-latest, ubuntu-26.04, windows-latest] - runs-on: ${{ matrix.os }}-latest + runs-on: ${{ matrix.os }} # -latest steps: - uses: actions/checkout@v4 @@ -46,10 +46,10 @@ jobs: arch: x64 - name: Setup Cpp - if: matrix.os != 'windows' + if: matrix.os != 'windows-latest' uses: aminya/setup-cpp@v1 with: - compiler: llvm + compiler: llvm-22 - name: Configure CMake run: cmake --preset ${{env.BUILD_TYPE}} --log-level=VERBOSE -D BOOST_USE_MODULES=ON