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/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d6616ad9..c3979bb2 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -27,32 +27,31 @@ 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 - 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 - 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 + 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/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6a597b57..5addb098 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: ^.*\.(patch|cfg)$ - id: end-of-file-fixer - id: check-json - id: check-yaml @@ -15,18 +16,18 @@ 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] exclude: docs/TODO.json - # CMake linting and formatting - - repo: https://github.com/BlankSpruce/gersemi - rev: 0.26.0 - 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 diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ac628eb..6397ae21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,9 @@ -cmake_minimum_required(VERSION 3.30...4.3) +cmake_minimum_required(VERSION 3.30...4.4) + +include(cmake/enable-experimental-import-std.cmake) # 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) @@ -12,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() @@ -73,18 +79,24 @@ endif() set(BOOST_LIBS_REQUIRED headers) set(BOOST_EXCLUDE_LIBRARIES + any 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 ) 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} @@ -94,21 +106,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 # 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 @@ -131,7 +144,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 +160,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" ) @@ -178,7 +192,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..893c7eed 100644 --- a/CMakeReleasePresets.json +++ b/CMakeReleasePresets.json @@ -22,7 +22,7 @@ "BOOST_STANDALONE": true, "BUILD_SHARED_LIBS": true, "CMAKE_BUILD_TYPE": "Release", - "CMAKE_CXX_EXTENSIONS": true, + "CMAKE_CXX_EXTENSIONS": false, "CMAKE_CXX_STANDARD": "20", "CMAKE_CXX_STANDARD_REQUIRED": true, "CMAKE_DEBUG_POSTFIX": "-d", diff --git a/GNUmakefile b/GNUmakefile index 2b96a3c4..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} @@ -42,13 +42,15 @@ 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 $< . +# 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 + 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_STANDARD=26 build: compile_commands.json cmake --build --preset Release @@ -64,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/README.md b/README.md index 1cd424ae..e839e1ca 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 $ @@ -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) 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 e1b71f9f..2064d72d 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,6 +1,8 @@ -cmake_minimum_required(VERSION 3.30...4.3) +cmake_minimum_required(VERSION 3.30...4.4) -# test boost-cmake v1.90.0-rc2 +include(../cmake/enable-experimental-import-std.cmake) + +# test boost-cmake v1.91.0-rc1 project(BoostExamples LANGUAGES CXX) enable_testing() @@ -10,7 +12,9 @@ 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 20) endif() @@ -22,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() @@ -30,13 +38,13 @@ 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) - set(BUILD_SHARED_LIBS ON) + set(BUILD_SHARED_LIBS OFF) 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,16 +52,12 @@ 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 1.90.0.1 - COMPONENTS - any - asio - regex - unit_test_framework + COMPONENTS any asio regex unit_test_framework ) FetchContent_MakeAvailable(Boost) endblock() @@ -61,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) @@ -96,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}" 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 new file mode 100644 index 00000000..f0758966 --- /dev/null +++ b/patches/1.91.0/cmake-01.patch @@ -0,0 +1,245 @@ +--- 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 +--- 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() +--- 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() diff --git a/requirements.txt b/requirements.txt index 4f26a506..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.1 -conan>=2.13.0 -gcovr>=8.3 -ninja>=1.11 +codespell>=2.4.2 +conan>=2.28.1 +gcovr>=8.6 +ninja>=1.13 yamllint>=1.35