From ab58369caf211ddbdb9844f4e0aab7b05ccdefdd Mon Sep 17 00:00:00 2001 From: Bart Beumer Date: Tue, 9 Dec 2025 23:05:44 +0100 Subject: [PATCH] WIP C++23 --- .devcontainer/devcontainer.json | 6 ++++-- .devcontainer/postcreate.py | 5 +++-- applications/http-mandelbrot/CMakeLists.txt | 2 +- applications/text2image/CMakeLists.txt | 2 +- bmrshared-freetype/CMakeLists.txt | 2 +- bmrshared-magic/lib/CMakeLists.txt | 2 +- bmrshared-magic/tst/CMakeLists.txt | 2 +- bmrshared-web/lib/CMakeLists.txt | 2 +- bmrshared/lib/CMakeLists.txt | 2 +- bmrshared/tst/CMakeLists.txt | 2 +- conanfile.py | 3 +++ devcontainer.Dockerfile | 17 +++++++++-------- 12 files changed, 27 insertions(+), 20 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 2a476bd..0898d12 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,10 +3,11 @@ "build": { "dockerfile": "../devcontainer.Dockerfile", "args": { - "BUILD_TYPE": "Debug" + "BUILD_TYPE": "Debug", + "COMPILER_CPPSTD": "23" } }, - "postCreateCommand": "${containerWorkspaceFolder}/.devcontainer/postcreate.py --build_type=Debug", + "postCreateCommand": "${containerWorkspaceFolder}/.devcontainer/postcreate.py --build_type=Debug --cppstd=23", // Configure tool-specific properties. "customizations": { "vscode": { @@ -14,6 +15,7 @@ "conan-extension.installArgs": [ "-of build", "-s build_type=Debug" + "-s compiler.cppstd=23" ], }, "extensions": [ diff --git a/.devcontainer/postcreate.py b/.devcontainer/postcreate.py index 2e5d200..5f19e12 100755 --- a/.devcontainer/postcreate.py +++ b/.devcontainer/postcreate.py @@ -4,7 +4,8 @@ import os parser = argparse.ArgumentParser() parser.add_argument('--build_type') +parser.add_argument('--cppstd') args = parser.parse_args() -print ('Executing post-create steps. Build type ', args.build_type) -os.system('conan install /workspaces/network-experiment -of /workspaces/build -s build_type=' + args.build_type) +print ('Executing post-create steps. Build type ', args.build_type. ' C++ standard ' + arg.cppstd) +os.system('conan install /workspaces/network-experiment -of /workspaces/build -s compiler.cppstd= ' + arg.cppstd + ' -s build_type=' + args.build_type) diff --git a/applications/http-mandelbrot/CMakeLists.txt b/applications/http-mandelbrot/CMakeLists.txt index cabf095..3bc7122 100644 --- a/applications/http-mandelbrot/CMakeLists.txt +++ b/applications/http-mandelbrot/CMakeLists.txt @@ -11,7 +11,7 @@ add_executable( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_link_libraries( diff --git a/applications/text2image/CMakeLists.txt b/applications/text2image/CMakeLists.txt index dd4fac2..678a8ee 100644 --- a/applications/text2image/CMakeLists.txt +++ b/applications/text2image/CMakeLists.txt @@ -10,7 +10,7 @@ add_executable( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_link_libraries( diff --git a/bmrshared-freetype/CMakeLists.txt b/bmrshared-freetype/CMakeLists.txt index 6e2f8bb..94f35c8 100644 --- a/bmrshared-freetype/CMakeLists.txt +++ b/bmrshared-freetype/CMakeLists.txt @@ -12,7 +12,7 @@ add_library( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_include_directories( diff --git a/bmrshared-magic/lib/CMakeLists.txt b/bmrshared-magic/lib/CMakeLists.txt index 7db3975..9ef75db 100644 --- a/bmrshared-magic/lib/CMakeLists.txt +++ b/bmrshared-magic/lib/CMakeLists.txt @@ -9,7 +9,7 @@ add_library( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_include_directories( diff --git a/bmrshared-magic/tst/CMakeLists.txt b/bmrshared-magic/tst/CMakeLists.txt index cf18725..51151bc 100644 --- a/bmrshared-magic/tst/CMakeLists.txt +++ b/bmrshared-magic/tst/CMakeLists.txt @@ -11,7 +11,7 @@ add_executable( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_link_libraries( diff --git a/bmrshared-web/lib/CMakeLists.txt b/bmrshared-web/lib/CMakeLists.txt index 09b2eab..4790aa2 100644 --- a/bmrshared-web/lib/CMakeLists.txt +++ b/bmrshared-web/lib/CMakeLists.txt @@ -11,7 +11,7 @@ add_library( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_include_directories( diff --git a/bmrshared/lib/CMakeLists.txt b/bmrshared/lib/CMakeLists.txt index ac6ed80..0b600d8 100644 --- a/bmrshared/lib/CMakeLists.txt +++ b/bmrshared/lib/CMakeLists.txt @@ -9,7 +9,7 @@ add_library( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_include_directories( diff --git a/bmrshared/tst/CMakeLists.txt b/bmrshared/tst/CMakeLists.txt index cf7009d..0b4ad6d 100644 --- a/bmrshared/tst/CMakeLists.txt +++ b/bmrshared/tst/CMakeLists.txt @@ -13,7 +13,7 @@ add_executable( set_property( TARGET ${PROJECT_NAME} - PROPERTY CXX_STANDARD 20 + PROPERTY CXX_STANDARD 23 ) target_link_libraries( diff --git a/conanfile.py b/conanfile.py index f28ab2c..34107be 100644 --- a/conanfile.py +++ b/conanfile.py @@ -8,6 +8,9 @@ class HelloConan(ConanFile): requires = "boost/1.89.0", "gtest/1.14.0", "libmagic/5.45", "freetype/2.14.1", "libjpeg/9f" generators = "CMakeDeps" build_policy = "*" + default_options = { + "boost/1.89.0:without_cobalt": True + } def generate(self): # We need to find the folder of libmagic and supply it to cmake so that diff --git a/devcontainer.Dockerfile b/devcontainer.Dockerfile index 5cc586f..f8f341c 100644 --- a/devcontainer.Dockerfile +++ b/devcontainer.Dockerfile @@ -1,7 +1,8 @@ FROM alpine:3.21.3 # Build type used by conan. "Debug" and "Release" are supported. -ARG BUILD_TYPE=Debug +ARG BUILD_TYPE +ARG COMPILER_CPPSTD RUN mkdir -p /root/.local/bin ENV PATH="${PATH}:/root/.local/bin" @@ -29,18 +30,18 @@ RUN apk add --no-cache \ python3 \ pipx && \ pipx ensurepath -RUN pipx install conan && \ - conan profile detect +RUN pipx install conan +RUN conan profile detect # Pre-build some conan packages we require and take a lot of time to build. This to # avoid expensive rebuilding everytime we need a fresh dev container.. RUN mkdir -p /workspaces/tmp WORKDIR /workspaces/tmp -RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=boost/1.89.0 -RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=libmagic/5.45 -RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=freetype/2.14.1 -RUN conan install -s build_type=${BUILD_TYPE} -b=missing --requires=gtest/1.14.0 -RUN conan install -s build_type=${BUILD_TYPE} -b=missing --requires=libjpeg/9f +RUN conan install -s build_type=$BUILD_TYPE -s compiler.cppstd=$COMPILER_CPPSTD -b=* --requires=boost/1.89.0 -o without_cobalt=True +RUN conan install -s build_type=$BUILD_TYPE -s compiler.cppstd=$COMPILER_CPPSTD -b=* --requires=libmagic/5.45 +RUN conan install -s build_type=$BUILD_TYPE -s compiler.cppstd=$COMPILER_CPPSTD -b=* --requires=freetype/2.14.1 +RUN conan install -s build_type=$BUILD_TYPE -s compiler.cppstd=$COMPILER_CPPSTD -b=missing --requires=gtest/1.14.0 +RUN conan install -s build_type=$BUILD_TYPE -s compiler.cppstd=$COMPILER_CPPSTD -b=missing --requires=libjpeg/9f WORKDIR /workspaces RUN rm -rf tmp