From 73ca04e7fc5c50eebb4bcee6ef47986cdbefac1c Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Mon, 15 Sep 2025 23:24:46 +0200 Subject: [PATCH 1/6] update to support clang21 and libfmt12 support --- co-cpp19.qbs | 2 +- src/coro19.lib/coro19/coroutine.cpp | 2 +- src/coro19.lib/coro19/coroutine.h | 5 ++--- src/signal19.lib/signal19/SignalWith.h | 5 ++--- src/tuple19.lib/tuple19/Tuple.fmt.h | 6 +++--- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/co-cpp19.qbs b/co-cpp19.qbs index 214ed38f..3ac1d74d 100644 --- a/co-cpp19.qbs +++ b/co-cpp19.qbs @@ -32,7 +32,7 @@ Project { Export { Depends { name: "cpp" } - cpp.cxxLanguageVersion: "c++2a" + cpp.cxxLanguageVersion: "c++23" cpp.treatWarningsAsErrors: true Properties { diff --git a/src/coro19.lib/coro19/coroutine.cpp b/src/coro19.lib/coro19/coroutine.cpp index 1e90d5ef..252a9a0b 100644 --- a/src/coro19.lib/coro19/coroutine.cpp +++ b/src/coro19.lib/coro19/coroutine.cpp @@ -1,7 +1,7 @@ // requires C++ 17 __has_include -#if __has_include() +#if defined(_MSC_VER) && __has_include() # include #endif #if __has_include() diff --git a/src/coro19.lib/coro19/coroutine.h b/src/coro19.lib/coro19/coroutine.h index 8679bc37..3c2cea5f 100644 --- a/src/coro19.lib/coro19/coroutine.h +++ b/src/coro19.lib/coro19/coroutine.h @@ -16,7 +16,7 @@ #pragma once // requires C++ 17 __has_include -#if __has_include() +#if defined(_MSC_VER) && __has_include() # include #endif #if __has_include() @@ -300,8 +300,7 @@ template struct hash> { using result_type = size_t; [[nodiscard]] // - result_type - operator()(argument_type const& _Handle) const noexcept { + result_type operator()(argument_type const& _Handle) const noexcept { return hash()(_Handle.address()); } }; diff --git a/src/signal19.lib/signal19/SignalWith.h b/src/signal19.lib/signal19/SignalWith.h index 26c7f17f..5a73df59 100644 --- a/src/signal19.lib/signal19/SignalWith.h +++ b/src/signal19.lib/signal19/SignalWith.h @@ -88,9 +88,8 @@ template struct SignalWith final : details::Signal { /// Type Erasure for CallbackCancellation struct StoredCancellation { - using Storage = - std::aligned_storage_t; - Storage storage; // fixed size storage + using Storage = uint8_t[sizeof(SignalCancellation) + 2 * sizeof(void*)]; + alignas(SignalCancellation) Storage storage; // fixed size storage template explicit StoredCancellation(SignalWith& signal, Cb&& cb) { using Clean = std::remove_const_t>; diff --git a/src/tuple19.lib/tuple19/Tuple.fmt.h b/src/tuple19.lib/tuple19/Tuple.fmt.h index 3d3cd742..bcb5dc73 100644 --- a/src/tuple19.lib/tuple19/Tuple.fmt.h +++ b/src/tuple19.lib/tuple19/Tuple.fmt.h @@ -8,10 +8,10 @@ namespace tuple19 { /// use values of the tuple as format arguments /// note: you still have to craft the proper format string! -/// usage: vformat(formatStr, tuple19::make_format_args(argsTuple)); -template constexpr auto make_format_args(Tuple const& args) { +/// usage: vformat(formatStr, tuple19::vargs(argsTuple)); +template constexpr auto vargs(Tuple const& args) { return [&](std::index_sequence const&) { - return fmt::make_format_args(args.template at()...); + return fmt::vargs{{args.template at()...}}; }(std::make_index_sequence{}); } From 39ef08e2b5f70982ced6fb38dc0b8a0997e56184 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sat, 24 Jan 2026 13:07:47 +0100 Subject: [PATCH 2/6] Drop conan support * It's just too much effort for no real benefit. --- .devcontainer/gcc12/gcc12.Dockerfile | 3 +- .github/workflows/conan.yml | 72 ------------------ Readme.md | 1 - conan/conanfile.py | 100 ------------------------- conan/docker/clang15.Dockerfile | 15 ---- conan/docker/gcc12.Dockerfile | 10 --- conan/profiles/clang15-libcxx | 11 --- conan/profiles/clang15-libstdcpp | 11 --- conan/profiles/clang18-libstdcpp | 11 --- conan/profiles/gcc12 | 11 --- conan/profiles/msvc2022 | 14 ---- conan/tests/array19/CMakeLists.txt | 11 --- conan/tests/array19/conanfile.txt | 7 -- conan/tests/coro19/CMakeLists.txt | 11 --- conan/tests/coro19/conanfile.txt | 7 -- conan/tests/enum19/CMakeLists.txt | 11 --- conan/tests/enum19/conanfile.txt | 7 -- conan/tests/lookup19/CMakeLists.txt | 11 --- conan/tests/lookup19/conanfile.txt | 7 -- conan/tests/meta19/CMakeLists.txt | 11 --- conan/tests/meta19/conanfile.txt | 7 -- conan/tests/optional19/CMakeLists.txt | 11 --- conan/tests/optional19/conanfile.txt | 7 -- conan/tests/partial19/CMakeLists.txt | 11 --- conan/tests/partial19/conanfile.txt | 7 -- conan/tests/serialize19/CMakeLists.txt | 11 --- conan/tests/serialize19/conanfile.txt | 7 -- conan/tests/signal19/CMakeLists.txt | 11 --- conan/tests/signal19/conanfile.txt | 7 -- conan/tests/string19/CMakeLists.txt | 11 --- conan/tests/string19/conanfile.txt | 7 -- conan/tests/strong19/CMakeLists.txt | 11 --- conan/tests/strong19/conanfile.txt | 7 -- conan/tests/tuple19/CMakeLists.txt | 11 --- conan/tests/tuple19/conanfile.txt | 7 -- conan/tests/variant19/CMakeLists.txt | 11 --- conan/tests/variant19/conanfile.txt | 7 -- script/ci/conan.sh | 17 ----- script/create_conan.sh | 12 --- script/docker_run_cmake_gcc_conan.sh | 8 -- script/test_conan.bat | 36 --------- script/test_conan.sh | 23 ------ 42 files changed, 1 insertion(+), 588 deletions(-) delete mode 100644 .github/workflows/conan.yml delete mode 100644 conan/conanfile.py delete mode 100644 conan/docker/clang15.Dockerfile delete mode 100644 conan/docker/gcc12.Dockerfile delete mode 100644 conan/profiles/clang15-libcxx delete mode 100644 conan/profiles/clang15-libstdcpp delete mode 100644 conan/profiles/clang18-libstdcpp delete mode 100644 conan/profiles/gcc12 delete mode 100644 conan/profiles/msvc2022 delete mode 100644 conan/tests/array19/CMakeLists.txt delete mode 100644 conan/tests/array19/conanfile.txt delete mode 100644 conan/tests/coro19/CMakeLists.txt delete mode 100644 conan/tests/coro19/conanfile.txt delete mode 100644 conan/tests/enum19/CMakeLists.txt delete mode 100644 conan/tests/enum19/conanfile.txt delete mode 100644 conan/tests/lookup19/CMakeLists.txt delete mode 100644 conan/tests/lookup19/conanfile.txt delete mode 100644 conan/tests/meta19/CMakeLists.txt delete mode 100644 conan/tests/meta19/conanfile.txt delete mode 100644 conan/tests/optional19/CMakeLists.txt delete mode 100644 conan/tests/optional19/conanfile.txt delete mode 100644 conan/tests/partial19/CMakeLists.txt delete mode 100644 conan/tests/partial19/conanfile.txt delete mode 100644 conan/tests/serialize19/CMakeLists.txt delete mode 100644 conan/tests/serialize19/conanfile.txt delete mode 100644 conan/tests/signal19/CMakeLists.txt delete mode 100644 conan/tests/signal19/conanfile.txt delete mode 100644 conan/tests/string19/CMakeLists.txt delete mode 100644 conan/tests/string19/conanfile.txt delete mode 100644 conan/tests/strong19/CMakeLists.txt delete mode 100644 conan/tests/strong19/conanfile.txt delete mode 100644 conan/tests/tuple19/CMakeLists.txt delete mode 100644 conan/tests/tuple19/conanfile.txt delete mode 100644 conan/tests/variant19/CMakeLists.txt delete mode 100644 conan/tests/variant19/conanfile.txt delete mode 100755 script/ci/conan.sh delete mode 100755 script/create_conan.sh delete mode 100755 script/docker_run_cmake_gcc_conan.sh delete mode 100644 script/test_conan.bat delete mode 100755 script/test_conan.sh diff --git a/.devcontainer/gcc12/gcc12.Dockerfile b/.devcontainer/gcc12/gcc12.Dockerfile index 155d5a21..a4e67dbe 100644 --- a/.devcontainer/gcc12/gcc12.Dockerfile +++ b/.devcontainer/gcc12/gcc12.Dockerfile @@ -8,5 +8,4 @@ RUN \ git \ gdb \ linux-headers \ - py3-pip \ - && pip install conan + py3-pip diff --git a/.github/workflows/conan.yml b/.github/workflows/conan.yml deleted file mode 100644 index e1fa46f2..00000000 --- a/.github/workflows/conan.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: Conan-Tests - -on: push - -jobs: - Windows: - name: Windows - runs-on: "windows-latest" - steps: - - name: Install Conan - uses: turtlebrowser/get-conan@main - - - name: install CMake - uses: lukka/get-cmake@latest - - - name: Install MSVC - uses: ilammy/msvc-dev-cmd@v1 - - - name: Checkout source - uses: actions/checkout@v4 - - - name: Create conan package - run: | - conan create conan/ --build=missing --profile:all=./conan/profiles/msvc2022 - - - name: Test package components - shell: pwsh - run: | - foreach ($folder in (Get-ChildItem -Path ./conan/tests -Directory | Foreach-Object {$_.Name})) { - echo "Running ${folder}" - & script\test_conan.bat "${folder}" --profile:all="$pwd/conan/profiles/msvc2022" - if ($LASTEXITCODE -ne 0) { - exit(1) - } - } - - Linux: - name: Linux - runs-on: "ubuntu-latest" - - strategy: - fail-fast: false - matrix: - include: - - name: "GCC12" - dockerfile: "gcc12.Dockerfile" - image: "gcc12-conan:latest" - profile: "gcc12" - - name: "Clang15 with libstdc++" - dockerfile: "clang15.Dockerfile" - image: "clang15-conan:latest" - profile: "clang15-libstdcpp" - # - name: "Clang15 with libc++" - # dockerfile: "clang15.Dockerfile" - # image: "clang15-conan:latest" - # profile: "clang15-libcxx" - - steps: - - name: Checkout source - uses: actions/checkout@v4 - - - name: Build Dockerfile - if: ${{ matrix.dockerfile != '' }} - run: >- - docker build -t ${{ matrix.image }} -f "conan/docker/${{ matrix.dockerfile }}" "conan/docker/" - - - name: Create conan package and test it - run: >- - docker run --network="host" --rm - --mount "src=${GITHUB_WORKSPACE},target=/project,type=bind" - --workdir /project ${{ matrix.image }} - script/ci/conan.sh ${{ matrix.profile }} diff --git a/Readme.md b/Readme.md index 28eb9551..3da998ef 100644 --- a/Readme.md +++ b/Readme.md @@ -6,7 +6,6 @@ A versatile collection of compile time optimized tools for C++ programming. [![Qbs-Tests](https://github.com/basicpp17/co-cpp19/actions/workflows/qbs_tests.yml/badge.svg)](https://github.com/basicpp17/co-cpp19/actions/workflows/qbs_tests.yml) [![CMake-Tests](https://github.com/basicpp17/co-cpp19/actions/workflows/cmake_tests.yml/badge.svg)](https://github.com/basicpp17/co-cpp19/actions/workflows/cmake_tests.yml) [![Static Analyzer](https://github.com/basicpp17/co-cpp19/actions/workflows/static_analyse.yml/badge.svg)](https://github.com/basicpp17/co-cpp19/actions/workflows/static_analyse.yml) -[![Conan-Tests](https://github.com/basicpp17/co-cpp19/actions/workflows/conan.yml/badge.svg)](https://github.com/basicpp17/co-cpp19/actions/workflows/conan.yml) ## Target Compilers diff --git a/conan/conanfile.py b/conan/conanfile.py deleted file mode 100644 index 9a2c2670..00000000 --- a/conan/conanfile.py +++ /dev/null @@ -1,100 +0,0 @@ -from conan import ConanFile -from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout -from conan.tools.files import copy, rmdir -from conan.tools.build import check_min_cppstd - -import os - -class Cocpp19Conan(ConanFile): - name = "co-cpp19" - version = "1.0" - description = "C++20 Library with the fastest runtime and compile times" - author = "Hicknhack Software" - license = "MIT License" - url = "https://github.com/basicpp17/co-cpp19" - homepage = "https://github.com/basicpp17/co-cpp19" - topics = ("algorithm", "container", "common", "utility") - - settings = "os", "arch", "compiler", "build_type" - options = { - "shared": [True, False], - "fPIC": [True, False] - } - default_options = { - "shared": False, - "fPIC": True - } - test_requires = "gtest/1.11.0" - generators = "CMakeDeps" - - def layout(self): - self.folders.root = ".." - cmake_layout(self) - - def export_sources(self): - folder = os.path.join(self.recipe_folder, "..") - copy(self, "CMakeLists.txt", folder, self.export_sources_folder) - copy(self, "CoCpp19Config.cmake.in", folder, self.export_sources_folder) - copy(self, "LICENSE", folder, self.export_sources_folder) - copy(self, "src/*", folder, self.export_sources_folder, excludes="*.qbs") - copy(self, "third_party/CMakeLists.txt", folder, self.export_sources_folder) - copy(self, "third_party/googletest.cmake", folder, self.export_sources_folder) - - def config_options(self): - if self.settings.os == "Windows": - del self.options.fPIC - - def validate(self): - check_min_cppstd(self, "20") - - def generate(self): - tc = CMakeToolchain(self) - tc.generate() - - def build(self): - cmake = CMake(self) - cmake.configure() - cmake.build() - - def package(self): - copy(self, "LICENSE", self.source_folder, self.package_folder) - cmake = CMake(self) - cmake.install() - rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) - rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) - - def package_info(self): - self.cpp_info.set_property("cmake_find_mode", "both") - self.cpp_info.set_property("cmake_file_name", "CoCpp19") - self.cpp_info.set_property("cmake_target_name", "CoCpp19") - - components = [ - {"name": "array19"}, - {"name": "coro19", "requires": ["array19"], "libs": ["coro19"]}, - {"name": "enum19", "requires": ["string19"]}, - {"name": "lookup19", "requires": ["array19"]}, - {"name": "meta19", "requires": ["array19"]}, - {"name": "optional19", "requires": ["meta19"]}, - {"name": "partial19", "requires": ["meta19"]}, - {"name": "serialize19", "requires": ["meta19"]}, - {"name": "signal19", "requires": ["array19"]}, - {"name": "string19", "requires": ["tuple19"]}, - {"name": "strong19", "requires": ["string19"]}, - {"name": "tuple19", "requires": ["meta19"]}, - {"name": "variant19", "requires": ["meta19"]} - ] - for comp in components: - name = comp["name"] - self.cpp_info.components[name].set_property("cmake_target_name", f"CoCpp19::{name}") - self.cpp_info.components[name].set_property("pkg_config_name", name) - if "requires" in comp: - self.cpp_info.components[name].requires = comp["requires"] - if "libs" in comp: - self.cpp_info.components[name].libs = comp["libs"] - - # self.cpp_info.names["cmake_find_package"] = "CoCpp19" - # self.cpp_info.names["cmake_find_package_multi"] = "CoCpp19" - - def test(self): - cmake = CMake(self) - cmake.test(output_on_failure=True) diff --git a/conan/docker/clang15.Dockerfile b/conan/docker/clang15.Dockerfile deleted file mode 100644 index 58a8334e..00000000 --- a/conan/docker/clang15.Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM alpine:3.17 - -RUN \ - apk add --update --no-cache \ - bash \ - build-base \ - clang15 \ - cmake \ - ninja \ - py3-pip \ - && pip install conan - -ENV \ - CC=/usr/bin/clang \ - CXX=/usr/bin/clang++ diff --git a/conan/docker/gcc12.Dockerfile b/conan/docker/gcc12.Dockerfile deleted file mode 100644 index e3fca880..00000000 --- a/conan/docker/gcc12.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM alpine:3.17 - -RUN \ - apk add --update --no-cache \ - bash \ - build-base \ - cmake \ - ninja \ - py3-pip \ - && pip install conan diff --git a/conan/profiles/clang15-libcxx b/conan/profiles/clang15-libcxx deleted file mode 100644 index a1b80091..00000000 --- a/conan/profiles/clang15-libcxx +++ /dev/null @@ -1,11 +0,0 @@ -[settings] -os=Linux -arch=x86_64 -compiler=clang -compiler.libcxx=libc++ -compiler.version=15 -compiler.cppstd=20 -build_type=Release - -[options] -*:shared=False diff --git a/conan/profiles/clang15-libstdcpp b/conan/profiles/clang15-libstdcpp deleted file mode 100644 index b44e270f..00000000 --- a/conan/profiles/clang15-libstdcpp +++ /dev/null @@ -1,11 +0,0 @@ -[settings] -os=Linux -arch=x86_64 -compiler=clang -compiler.libcxx=libstdc++11 -compiler.version=15 -compiler.cppstd=20 -build_type=Release - -[options] -*:shared=False diff --git a/conan/profiles/clang18-libstdcpp b/conan/profiles/clang18-libstdcpp deleted file mode 100644 index c14c03ce..00000000 --- a/conan/profiles/clang18-libstdcpp +++ /dev/null @@ -1,11 +0,0 @@ -[settings] -os=Linux -arch=x86_64 -compiler=clang -compiler.libcxx=libstdc++11 -compiler.version=18 -compiler.cppstd=20 -build_type=Release - -[options] -*:shared=False diff --git a/conan/profiles/gcc12 b/conan/profiles/gcc12 deleted file mode 100644 index 3bad5639..00000000 --- a/conan/profiles/gcc12 +++ /dev/null @@ -1,11 +0,0 @@ -[settings] -os=Linux -arch=x86_64 -compiler=gcc -compiler.libcxx=libstdc++11 -compiler.version=12 -compiler.cppstd=20 -build_type=Release - -[options] -*:shared=False diff --git a/conan/profiles/msvc2022 b/conan/profiles/msvc2022 deleted file mode 100644 index d08c7d7d..00000000 --- a/conan/profiles/msvc2022 +++ /dev/null @@ -1,14 +0,0 @@ -[settings] -os=Windows -arch=x86_64 -compiler=msvc -compiler.version=194 -compiler.cppstd=20 -compiler.runtime=dynamic -build_type=Release - -[options] -*:shared=False - -[conf] -tools.cmake.cmaketoolchain:generator=Ninja Multi-Config diff --git a/conan/tests/array19/CMakeLists.txt b/conan/tests/array19/CMakeLists.txt deleted file mode 100644 index 0828240e..00000000 --- a/conan/tests/array19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(conan-array19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS array19 REQUIRED) - -enable_testing() - -include("../../../src/array19.lib/array19/array19.tests.cmake") diff --git a/conan/tests/array19/conanfile.txt b/conan/tests/array19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/array19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/coro19/CMakeLists.txt b/conan/tests/coro19/CMakeLists.txt deleted file mode 100644 index 471a08b3..00000000 --- a/conan/tests/coro19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(conan-coro19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS coro19 REQUIRED) - -enable_testing() - -include("../../../src/coro19.lib/coro19/coro19.tests.cmake") diff --git a/conan/tests/coro19/conanfile.txt b/conan/tests/coro19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/coro19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/enum19/CMakeLists.txt b/conan/tests/enum19/CMakeLists.txt deleted file mode 100644 index 99104789..00000000 --- a/conan/tests/enum19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-enum19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS enum19 REQUIRED) - -enable_testing() - -include("../../../src/enum19.lib/enum19/enum19.tests.cmake") diff --git a/conan/tests/enum19/conanfile.txt b/conan/tests/enum19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/enum19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/lookup19/CMakeLists.txt b/conan/tests/lookup19/CMakeLists.txt deleted file mode 100644 index cb1ea5fb..00000000 --- a/conan/tests/lookup19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-lookup19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS lookup19 REQUIRED) - -enable_testing() - -include("../../../src/lookup19.lib/lookup19/lookup19.tests.cmake") diff --git a/conan/tests/lookup19/conanfile.txt b/conan/tests/lookup19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/lookup19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/meta19/CMakeLists.txt b/conan/tests/meta19/CMakeLists.txt deleted file mode 100644 index 3d67da4a..00000000 --- a/conan/tests/meta19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-meta19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS meta19 REQUIRED) - -enable_testing() - -include("../../../src/meta19.lib/meta19/meta19.tests.cmake") diff --git a/conan/tests/meta19/conanfile.txt b/conan/tests/meta19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/meta19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/optional19/CMakeLists.txt b/conan/tests/optional19/CMakeLists.txt deleted file mode 100644 index 0b77a217..00000000 --- a/conan/tests/optional19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-optional19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS optional19 REQUIRED) - -enable_testing() - -include("../../../src/optional19.lib/optional19/optional19.tests.cmake") diff --git a/conan/tests/optional19/conanfile.txt b/conan/tests/optional19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/optional19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/partial19/CMakeLists.txt b/conan/tests/partial19/CMakeLists.txt deleted file mode 100644 index de086d8d..00000000 --- a/conan/tests/partial19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-partial19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS partial19 REQUIRED) - -enable_testing() - -include("../../../src/partial19.lib/partial19/partial19.tests.cmake") diff --git a/conan/tests/partial19/conanfile.txt b/conan/tests/partial19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/partial19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/serialize19/CMakeLists.txt b/conan/tests/serialize19/CMakeLists.txt deleted file mode 100644 index 002b29c9..00000000 --- a/conan/tests/serialize19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-serialize19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS serialize19 REQUIRED) - -enable_testing() - -include("../../../src/serialize19.lib/serialize19/serialize19.tests.cmake") diff --git a/conan/tests/serialize19/conanfile.txt b/conan/tests/serialize19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/serialize19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/signal19/CMakeLists.txt b/conan/tests/signal19/CMakeLists.txt deleted file mode 100644 index 625b5844..00000000 --- a/conan/tests/signal19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-signal19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS signal19 REQUIRED) - -enable_testing() - -include("../../../src/signal19.lib/signal19/signal19.tests.cmake") diff --git a/conan/tests/signal19/conanfile.txt b/conan/tests/signal19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/signal19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/string19/CMakeLists.txt b/conan/tests/string19/CMakeLists.txt deleted file mode 100644 index de5c17a7..00000000 --- a/conan/tests/string19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-string19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS string19 REQUIRED) - -enable_testing() - -include("../../../src/string19.lib/string19/string19.tests.cmake") diff --git a/conan/tests/string19/conanfile.txt b/conan/tests/string19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/string19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/strong19/CMakeLists.txt b/conan/tests/strong19/CMakeLists.txt deleted file mode 100644 index 7917bd55..00000000 --- a/conan/tests/strong19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-strong19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS strong19 REQUIRED) - -enable_testing() - -include("../../../src/strong19.lib/strong19/strong19.tests.cmake") diff --git a/conan/tests/strong19/conanfile.txt b/conan/tests/strong19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/strong19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/tuple19/CMakeLists.txt b/conan/tests/tuple19/CMakeLists.txt deleted file mode 100644 index e32bd13e..00000000 --- a/conan/tests/tuple19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-tuple19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS tuple19 REQUIRED) - -enable_testing() - -include("../../../src/tuple19.lib/tuple19/tuple19.tests.cmake") diff --git a/conan/tests/tuple19/conanfile.txt b/conan/tests/tuple19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/tuple19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/conan/tests/variant19/CMakeLists.txt b/conan/tests/variant19/CMakeLists.txt deleted file mode 100644 index 6f9433b7..00000000 --- a/conan/tests/variant19/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(cocpp19-variant19) -set(CMAKE_CXX_STANDARD 20) - -set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR} ${CMAKE_MODULE_PATH}) -find_package(GTest REQUIRED) -find_package(CoCpp19 COMPONENTS variant19 REQUIRED) - -enable_testing() - -include("../../../src/variant19.lib/variant19/variant19.tests.cmake") diff --git a/conan/tests/variant19/conanfile.txt b/conan/tests/variant19/conanfile.txt deleted file mode 100644 index e60e0d8c..00000000 --- a/conan/tests/variant19/conanfile.txt +++ /dev/null @@ -1,7 +0,0 @@ -[requires] -co-cpp19/1.0 -gtest/1.11.0 - -[generators] -CMakeDeps -CMakeToolchain diff --git a/script/ci/conan.sh b/script/ci/conan.sh deleted file mode 100755 index 61acee59..00000000 --- a/script/ci/conan.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -e # stop on first error - -# default arguments: -# script/create_conan.sh gcc12 -ConanProfile=${1:-gcc12} -shift - -cd "$(dirname "${BASH_SOURCE[0]}")/../.." -BASE_DIR="$(pwd)" - -script/create_conan.sh "${ConanProfile}" - -for test in conan/tests/*/ -do - script/test_conan.sh "$(basename "${test}")" --profile:all="${BASE_DIR}/conan/profiles/${ConanProfile}" -done diff --git a/script/create_conan.sh b/script/create_conan.sh deleted file mode 100755 index 36b3dfc6..00000000 --- a/script/create_conan.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -e # stop on first error - -# default arguments: -# script/create_conan.sh gcc12 -ConanProfile=${1:-gcc12} -shift - -cd "$(dirname "${BASH_SOURCE[0]}")/.." -BASE_DIR="$(pwd)" - -conan create conan --build=missing --profile:all="./conan/profiles/${ConanProfile}" diff --git a/script/docker_run_cmake_gcc_conan.sh b/script/docker_run_cmake_gcc_conan.sh deleted file mode 100755 index c1499324..00000000 --- a/script/docker_run_cmake_gcc_conan.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -PROJECT="co-cpp19" -IMAGE="conanio/gcc12-ubuntu18.04:latest" -BUILD_VOLUME="${PROJECT}-conan-build" - -cd "$(dirname "$0")/.." -docker run -it --rm --mount "src=$(pwd),target=/project,type=bind" -w /project --mount "src=${BUILD_VOLUME},target=/project/build,type=volume" "${IMAGE}" "$@" diff --git a/script/test_conan.bat b/script/test_conan.bat deleted file mode 100644 index a13473d4..00000000 --- a/script/test_conan.bat +++ /dev/null @@ -1,36 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -:: default arguments: -:: script/test_conan.bat array19 -if "%~1"=="" ( - set ConanCase=array19 -) else ( - set ConanCase=%1 -) - -set "BUILD_PATH=build/conan-%ConanCase%" -set "SOURCE_PATH=conan/tests/%ConanCase%" -set "BASE_DIR=%~dp0.." -set "ConfigPreset=conan-default" -set "BuildPreset=conan-release" -set "TestPreset=conan-release" - -pushd "%~dp0.." - -mkdir "%BUILD_PATH%" -cd "%BUILD_PATH%" - -conan install "%BASE_DIR%/%SOURCE_PATH%" --output-folder=. %2 %3 %4 %5 -if !errorlevel! neq 0 exit /b !errorlevel! - -cmake "%BASE_DIR%/%SOURCE_PATH%" --preset "%ConfigPreset%" -if !errorlevel! neq 0 exit /b !errorlevel! - -cmake --build --preset "%BuildPreset%" -if !errorlevel! neq 0 exit /b !errorlevel! - -ctest --preset "%TestPreset%" -if !errorlevel! neq 0 exit /b !errorlevel! - -popd diff --git a/script/test_conan.sh b/script/test_conan.sh deleted file mode 100755 index d02b9616..00000000 --- a/script/test_conan.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -set -e # stop on first error - -# default arguments: -# script/test_conan.sh array19 -ConanCase=${1:-array19} -shift - -BUILD_PATH="build/conan-${ConanCase}" -SOURCE_PATH="conan/tests/${ConanCase}" -ConfigPreset="conan-release" # "conan-default" for multi config generators -BuildPreset="conan-release" -TestPreset="conan-release" - -cd "$(dirname "${BASH_SOURCE[0]}")/.." -BASE_DIR="$(pwd)" - -mkdir -p ${BUILD_PATH} -cd ${BUILD_PATH} -conan install "${BASE_DIR}/${SOURCE_PATH}" --output-folder=. "$@" -cmake "${BASE_DIR}/${SOURCE_PATH}" --preset "${ConfigPreset}" -cmake --build --preset "${BuildPreset}" -ctest --preset "${TestPreset}" From 75c603959ec3d3299e906ee53d06bedf6f928bb0 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sat, 24 Jan 2026 14:43:19 +0100 Subject: [PATCH 3/6] Use Qbs OnlineSource, cleanup qbs project * prepares the Qbs project to be included by other projects with Qbs OnlineSource --- .github/workflows/qbs_tests.yml | 20 +- co-cpp19.qbs | 48 +- qbs/imports/online/QbsProject.qbs | 6 + qbs/imports/online/Source.qbs | 32 ++ qbs/imports/online/onlinesource.js | 423 ++++++++++++++++++ script/git_clone_googletest.sh | 16 + src/array19.lib/array19.lib.qbs | 9 - src/array19.lib/array19/array19.qbs | 17 +- src/array19.lib/array19/array19.tests.qbs | 14 +- src/coro19.lib/coro19.lib.qbs | 9 - src/coro19.lib/coro19/coro19.qbs | 34 +- src/coro19.lib/coro19/coro19.tests.qbs | 11 +- src/enum19.lib/enum19.lib.qbs | 9 - src/enum19.lib/enum19/enum19.qbs | 21 +- src/enum19.lib/enum19/enum19.tests.qbs | 11 +- src/flags19.lib/flags19.lib.qbs | 9 - src/flags19.lib/flags19/flags19.qbs | 21 +- src/flags19.lib/flags19/flags19.tests.qbs | 11 +- src/lookup19.lib/lookup19.lib.qbs | 9 - src/lookup19.lib/lookup19/lookup19.qbs | 18 +- src/lookup19.lib/lookup19/lookup19.tests.qbs | 14 +- src/meta19.lib/meta19.lib.qbs | 9 - src/meta19.lib/meta19/meta19.qbs | 23 +- src/meta19.lib/meta19/meta19.tests.qbs | 11 +- src/optional19.lib/optional19.lib.qbs | 9 - src/optional19.lib/optional19/optional19.qbs | 19 +- .../optional19/optional19.tests.qbs | 11 +- src/partial19.lib/partial19.lib.qbs | 9 - src/partial19.lib/partial19/partial19.qbs | 17 +- .../partial19/partial19.tests.qbs | 11 +- src/serialize19.lib/serialize19.lib.qbs | 9 - .../serialize19/serialize19.qbs | 36 +- .../serialize19/serialize19.tests.qbs | 25 +- src/signal19.lib/signal19.lib.qbs | 9 - src/signal19.lib/signal19/signal19.qbs | 19 +- src/signal19.lib/signal19/signal19.tests.qbs | 11 +- src/src.qbs | 19 + src/string19.lib/string19.lib.qbs | 9 - src/string19.lib/string19/string19.qbs | 25 +- src/string19.lib/string19/string19.tests.qbs | 11 +- src/strong19.lib/strong19.lib.qbs | 9 - src/strong19.lib/strong19/strong19.qbs | 34 +- src/strong19.lib/strong19/strong19.tests.qbs | 11 +- src/tests.qbs | 21 + src/tuple19.lib/tuple19.lib.qbs | 9 - src/tuple19.lib/tuple19/tuple19.qbs | 17 +- src/tuple19.lib/tuple19/tuple19.tests.qbs | 11 +- src/variant19.lib/variant19.lib.qbs | 9 - src/variant19.lib/variant19/variant19.qbs | 17 +- .../variant19/variant19.tests.qbs | 11 +- third_party/git_clone_googletest.sh | 8 - third_party/googletest.qbs | 75 ++-- third_party/third_party.qbs | 11 +- 53 files changed, 796 insertions(+), 501 deletions(-) create mode 100644 qbs/imports/online/QbsProject.qbs create mode 100644 qbs/imports/online/Source.qbs create mode 100644 qbs/imports/online/onlinesource.js create mode 100755 script/git_clone_googletest.sh delete mode 100644 src/array19.lib/array19.lib.qbs delete mode 100644 src/coro19.lib/coro19.lib.qbs delete mode 100644 src/enum19.lib/enum19.lib.qbs delete mode 100644 src/flags19.lib/flags19.lib.qbs delete mode 100644 src/lookup19.lib/lookup19.lib.qbs delete mode 100644 src/meta19.lib/meta19.lib.qbs delete mode 100644 src/optional19.lib/optional19.lib.qbs delete mode 100644 src/partial19.lib/partial19.lib.qbs delete mode 100644 src/serialize19.lib/serialize19.lib.qbs delete mode 100644 src/signal19.lib/signal19.lib.qbs create mode 100644 src/src.qbs delete mode 100644 src/string19.lib/string19.lib.qbs delete mode 100644 src/strong19.lib/strong19.lib.qbs create mode 100644 src/tests.qbs delete mode 100644 src/tuple19.lib/tuple19.lib.qbs delete mode 100644 src/variant19.lib/variant19.lib.qbs delete mode 100755 third_party/git_clone_googletest.sh diff --git a/.github/workflows/qbs_tests.yml b/.github/workflows/qbs_tests.yml index d07e3e34..c412458d 100644 --- a/.github/workflows/qbs_tests.yml +++ b/.github/workflows/qbs_tests.yml @@ -11,25 +11,27 @@ jobs: fail-fast: false matrix: include: - - image: arbmind/qbs-clang:1.21.0-14 + - image: arbmind/qbs-clang:3.1.2-18 build_args: "modules.cpp.cxxStandardLibrary:libc++ modules.cpp.staticLibraries:c++,c++abi" - - image: arbmind/qbs-clang:2.1.2-17 + - image: arbmind/qbs-clang:3.1.2-21 build_args: "modules.cpp.cxxStandardLibrary:libc++ modules.cpp.staticLibraries:c++,c++abi" - - image: arbmind/qbs-clang-libstdcpp:1.24.0-15-12 - - image: arbmind/qbs-gcc:1.21.0-11 - - image: arbmind/qbs-gcc:1.24.0-12 - - image: arbmind/qbs-gcc:2.1.2-13 + - image: arbmind/qbs-clang-libstdcpp:3.1.2-21-15 + - image: arbmind/qbs-gcc:3.1.2-13 + - image: arbmind/qbs-gcc:3.1.2-14 + - image: arbmind/qbs-gcc:3.1.2-15 steps: - uses: actions/checkout@v4 + # we have no git in container fetch googletest before - name: Get Googletest - run: third_party/git_clone_googletest.sh + run: script/git_clone_googletest.sh - name: Build and run Tests run: >- docker run --rm -v ${GITHUB_WORKSPACE}:/project -w /project --env GTEST_OUTPUT=xml:/project/reports/qbs/ + --env QBS_GOOGLETEST_SOURCE=/project/script/googletest ${{ matrix.image }} build --build-directory /tmp/build @@ -71,10 +73,6 @@ jobs: - uses: actions/checkout@v4 - - name: Get Googletest - run: third_party/git_clone_googletest.sh - shell: bash - - name: Build and run Tests env: GTEST_OUTPUT: xml:${{ github.workspace }}\reports\msvc\ diff --git a/co-cpp19.qbs b/co-cpp19.qbs index 3ac1d74d..88ade5f0 100644 --- a/co-cpp19.qbs +++ b/co-cpp19.qbs @@ -3,37 +3,27 @@ import qbs Project { name: "Co-Cpp19" - // to use libc++ set - // modules.cpp.cxxStandardLibrary:libc++ modules.cpp.staticLibraries:c++,c++abi + property string version: "2026.01" + property string configProductName: "Co-Cpp19-Config" + property bool enableQbsImports: (sourceDirectory === path) + property bool enableTests: (sourceDirectory === path) + property bool enableThirdParty: (sourceDirectory === path) - references: [ - "third_party/third_party.qbs", - "src/array19.lib", - "src/coro19.lib", - "src/enum19.lib", - "src/flags19.lib", - "src/meta19.lib", - "src/lookup19.lib", - "src/optional19.lib", - "src/partial19.lib", - "src/serialize19.lib", - "src/signal19.lib", - "src/string19.lib", - "src/strong19.lib", - "src/tuple19.lib", - "src/variant19.lib", - ] - - AutotestRunner {} + minimumQbsVersion: "3.0" + qbsSearchPaths: enableQbsImports ? ["qbs"] : [] + references: ["src/src.qbs"] // note: if do not use this .qbs project you need a similar setup Product { - name: "cpp19" + name: "Co-Cpp19-Config" + condition: parent.configProductName === "Co-Cpp19-Config" Export { - Depends { name: "cpp" } cpp.cxxLanguageVersion: "c++23" cpp.treatWarningsAsErrors: true + // to use libc++ set + // modules.cpp.cxxStandardLibrary:libc++ + // modules.cpp.staticLibraries:c++,c++abi Properties { condition: qbs.toolchain.contains('msvc') @@ -55,11 +45,19 @@ Project { "-Wno-gnu-zero-variadic-macro-arguments" // accept this extensions for opaque strong types ) } + Depends { name: "cpp" } } } - + SubProject { + condition: parent.enableTests + filePath: "src/tests.qbs" + } + SubProject { + condition: parent.enableThirdParty + filePath: "third_party/third_party.qbs" + } Product { - name: "_Extra Files_" + name: "[CoCpp19 Extra Files]" files: [ ".clang-format", ".clang-tidy", diff --git a/qbs/imports/online/QbsProject.qbs b/qbs/imports/online/QbsProject.qbs new file mode 100644 index 00000000..b7c52f3d --- /dev/null +++ b/qbs/imports/online/QbsProject.qbs @@ -0,0 +1,6 @@ +SubProject { + property variant source + + condition: source && source.found + filePath: source.projectFilePath +} diff --git a/qbs/imports/online/Source.qbs b/qbs/imports/online/Source.qbs new file mode 100644 index 00000000..25d506ce --- /dev/null +++ b/qbs/imports/online/Source.qbs @@ -0,0 +1,32 @@ +import "onlinesource.js" as OnlineSource + +Probe { + id: probe + + property string name + property string uri + property string projectFile + property path sourceCache + property path buildDirectory: project.buildDirectory + + // Results + property path sourceDirectory + property path projectFilePath + + configure: { + var result = OnlineSource.fetch({ + name: probe.name, + uri: probe.uri, + projectFile: probe.projectFile, + sourceCache: probe.sourceCache, + buildDirectory: probe.buildDirectory, + }); + if (result) { + sourceDirectory = result.sourceDirectory; + if (result.projectFile) projectFilePath = result.projectFile; + found = true; + } else { + found = false; + } + } +} diff --git a/qbs/imports/online/onlinesource.js b/qbs/imports/online/onlinesource.js new file mode 100644 index 00000000..24eb63ad --- /dev/null +++ b/qbs/imports/online/onlinesource.js @@ -0,0 +1,423 @@ +// MIT License +// [[ +// Copyright 2026 HicknHack Sotware GmbH +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// ]] +var Environment = require("qbs.Environment"); +var File = require("qbs.File"); +var FileInfo = require("qbs.FileInfo"); +var Process = require("qbs.Process"); +var TextFile = require("qbs.TextFile"); + +/** + * Parse a URI string into its components. + * Supports: + * - gh:user/repo@version#tag + * - gl:user/repo@version#tag + * - bb:user/repo@version#tag + * - https://github.com/user/repo.git@version#tag + * - https://example.com/package.zip@version + * + * @param {string} uri - The URI to parse + * @returns {object} Parsed URI components: { scheme, user, repo, version, tag, url, type } + */ +function parseUri(uri) { + var result = { + scheme: null, + user: null, + repo: null, + version: null, + tag: null, + url: null, + type: "git", // "git", "archive", or "local" + localPath: null + }; + + if (!uri || uri.trim() === "") + return result; + + // Check for file:// scheme (local path) + var fileMatch = uri.match(/^file:\/\/(.+)$/); + if (fileMatch) { + result.type = "local"; + result.localPath = fileMatch[1]; + result.url = uri; + return result; + } + + // Check for absolute local path (Windows or Unix) + if (uri.match(/^[A-Za-z]:[\\/]/) || uri.match(/^\/[^\/]/)) { + result.type = "local"; + result.localPath = uri; + result.url = uri; + return result; + } + + // Extract version (@...) - only the last occurrence + var versionMatch = uri.match(/@([^@#]+)(?:#|$)/); + if (versionMatch) { + result.version = versionMatch[1]; + uri = uri.replace(/@[^@#]+(?=#|$)/, ""); + } + + // Extract tag (#...) - only the last occurrence + var tagMatch = uri.match(/#([^#]+)$/); + if (tagMatch) { + result.tag = tagMatch[1]; + uri = uri.replace(/#[^#]+$/, ""); + } + + // Check for shorthand schemes + var shorthandMatch = uri.match(/^(gh|gl|bb):(.+)$/); + if (shorthandMatch) { + result.scheme = shorthandMatch[1]; + var path = shorthandMatch[2]; + var parts = path.split("/"); + if (parts.length >= 2) { + result.user = parts[0]; + result.repo = parts.slice(1).join("/"); + } + + // Convert to full URL + switch (result.scheme) { + case "gh": + result.url = "https://github.com/" + result.user + "/" + result.repo + ".git"; + break; + case "gl": + result.url = "https://gitlab.com/" + result.user + "/" + result.repo + ".git"; + break; + case "bb": + result.url = "https://bitbucket.org/" + result.user + "/" + result.repo + ".git"; + break; + } + result.type = "git"; + } else if (uri.match(/\.git\/?$/)) { + // Full git URL + result.url = uri; + result.type = "git"; + + // Try to extract user/repo from URL + var gitMatch = uri.match(/([^\/]+)\/([^\/]+?)(?:\.git)?\/?$/); + if (gitMatch) { + result.user = gitMatch[1]; + result.repo = gitMatch[2].replace(/\.git$/, ""); + } + } else if (uri.match(/\.(zip|tar\.gz|tar\.bz2|tar\.xz|tgz)(?:\?|$)/i)) { + // Archive URL + result.url = uri; + result.type = "archive"; + + // Try to extract name from URL + var archiveMatch = uri.match(/([^\/]+)\.(zip|tar\.gz|tar\.bz2|tar\.xz|tgz)/i); + if (archiveMatch) { + result.repo = archiveMatch[1]; + } + } else { + // Assume it's a git URL without .git extension + result.url = uri; + result.type = "git"; + } + + // Default tag to version if not specified + if (!result.tag && result.version) { + if (result.version.match(/^[0-9a-f]{40}$/i)) { + result.tag = result.version; + } else { + result.tag = "v" + result.version; + } + } + + return result; +} + +/** + * Get the cache directory for a package + */ +function getCacheDir(sourceCache, packageName, uriInfo) { + var cacheBase = sourceCache; + if (!cacheBase || cacheBase.trim() === "") { + cacheBase = Environment.getEnv("QBS_SOURCE_CACHE"); + } + if (!cacheBase || cacheBase.trim() === "") { + // Default to temp directory + cacheBase = FileInfo.joinPaths(Environment.getEnv("TEMP") || "/tmp", "qbs-source-cache"); + } + + var packageDir = packageName.replace(/\./g, "/"); + var versionDir = uriInfo.version || uriInfo.tag || "latest"; + + return FileInfo.joinPaths(cacheBase, packageDir, versionDir); +} + +/** + * Clone a git repository + */ +function cloneGitRepo(url, tag, destDir) { + console.info("OnlineSource: Cloning " + url + (tag ? " (tag: " + tag + ")" : "")); + + var process = new Process(); + try { + var args = ["clone"]; + + // Use shallow clone for tags + if (tag) { + args.push("--depth", "1"); + if (tag.match(/^[0-9a-f]{40}$/i)) { + args.push("--revision", tag); + } else { + args.push("--branch", tag); + } + } + + args.push(url, destDir); + + process.exec("git", args, true); + + if (process.exitCode() !== 0) { + throw "Git clone failed: " + process.readStdErr(); + } + + console.info("OnlineSource: Successfully cloned to " + destDir); + return true; + } finally { + process.close(); + } +} + +/** + * Download and extract an archive + */ +function downloadArchive(url, destDir) { + console.info("OnlineSource: Downloading " + url); + + File.makePath(destDir); + + var filename = url.match(/([^\/\?]+)(?:\?.*)?$/)[1]; + var archivePath = FileInfo.joinPaths(destDir, filename); + + var process = new Process(); + try { + // Try curl first, fall back to wget + var result = process.exec("curl", ["-L", "-o", archivePath, url], false); + if (result !== 0) { + result = process.exec("wget", ["-O", archivePath, url], false); + } + + if (result !== 0) { + throw "Failed to download archive: " + url; + } + + // Extract based on extension + if (filename.match(/\.zip$/i)) { + process.exec("unzip", ["-o", archivePath, "-d", destDir], true); + } else if (filename.match(/\.(tar\.gz|tgz)$/i)) { + process.exec("tar", ["-xzf", archivePath, "-C", destDir], true); + } else if (filename.match(/\.tar\.bz2$/i)) { + process.exec("tar", ["-xjf", archivePath, "-C", destDir], true); + } else if (filename.match(/\.tar\.xz$/i)) { + process.exec("tar", ["-xJf", archivePath, "-C", destDir], true); + } + + console.info("OnlineSource: Successfully extracted to " + destDir); + return true; + } finally { + process.close(); + } +} + +/** + * Find Qbs project file in source directory + * Returns the path to the main .qbs file, or null if not found + */ +function detectQbsProject(sourceDir, projectFile) { + // If user specified a project file, use that + if (projectFile) { + var specifiedPath = FileInfo.joinPaths(sourceDir, projectFile); + if (File.exists(specifiedPath)) { + return { + projectFile: specifiedPath, + isQbsProject: true + }; + } + console.warn("OnlineSource: Specified project file not found: " + specifiedPath); + return null; + } + + // Look for .qbs files in root directory + var entries = File.directoryEntries(sourceDir, File.Files); + var qbsFiles = []; + for (var i = 0; i < entries.length; i++) { + if (entries[i].match(/\.qbs$/)) { + qbsFiles.push(entries[i]); + } + } + + if (qbsFiles.length === 0) { + return null; + } + + if (qbsFiles.length === 1) { + return { + projectFile: FileInfo.joinPaths(sourceDir, qbsFiles[0]), + isQbsProject: true + }; + } + + // Multiple .qbs files - look for common patterns + var preferredNames = ["project.qbs", sourceDir.split("/").pop() + ".qbs"]; + for (var j = 0; j < preferredNames.length; j++) { + if (qbsFiles.indexOf(preferredNames[j]) !== -1) { + return { + projectFile: FileInfo.joinPaths(sourceDir, preferredNames[j]), + isQbsProject: true + }; + } + } + + // Default to first one found + console.warn("OnlineSource: Multiple .qbs files found, using: " + qbsFiles[0]); + return { + projectFile: FileInfo.joinPaths(sourceDir, qbsFiles[0]), + isQbsProject: true + }; +} + +function loadCache(cacheFile) { + if (!File.exists(cacheFile)) + return {}; + + try { + var file = new TextFile(cacheFile, TextFile.ReadOnly); + var content = file.readAll(); + file.close(); + var data = JSON.parse(content); + var lastModified = Date.parse(data["lastmodified"]); + var now = new Date(); + if ((now - lastModified) > 30000) { + console.info("OnlineSource: Cache expired (" + (now - lastModified) + "ms old)"); + return {}; + } + console.info("OnlineSource: Cache good (" + (now - lastModified) + "ms old)"); + return data; + } catch (e) { + console.warn("OnlineSource: Failed to read cache file: " + e); + return {}; + } +} + +function saveCache(cacheFile, data) { + try { + data["lastmodified"] = new Date().toISOString(); + File.makePath(FileInfo.path(cacheFile)); + var file = new TextFile(cacheFile, TextFile.WriteOnly); + file.write(JSON.stringify(data, null, 4)); + file.close(); + } catch (e) { + console.warn("OnlineSource: Failed to write cache file: " + e); + } +} + +/** + * fetch - Determine source directory and other properties + */ +function fetch(options) { + var name = options.name; + if (!name || name.trim() === "") { + console.warn("OnlineSource: No module name provided"); + return null; + } + + var cacheFile = FileInfo.joinPaths(options.buildDirectory, "online-source", "resolution-cache.json"); + var resolvedModules = loadCache(cacheFile); + + // Check resolution cache first + if (resolvedModules[name]) { + console.info("OnlineSource: Using cached resolution for '" + name + "'"); + return resolvedModules[name]; + } + + var uri = options.uri; + if (!uri) { + console.warn("OnlineSource: No URI configured for module '" + name + "'"); + return null; + } + + console.info("OnlineSource: Setting up module '" + name + "' from " + uri); + + var uriInfo = parseUri(uri); + if (!uriInfo.url && !uriInfo.localPath) { + throw "OnlineSource: Invalid URI '" + uri + "' for module '" + name + "'"; + } + + var sourceDir = Environment.getEnv("QBS_"+ name.toUpperCase() +"_SOURCE"); + + if (sourceDir && sourceDir.trim !== "") { + console.info("OnlineSource: Using environment path " + sourceDir); + } + else if (uriInfo.type === "local") { // Handle local paths directly (no caching needed) + sourceDir = uriInfo.localPath; + if (!File.exists(sourceDir)) { + throw "OnlineSource: Local path does not exist: " + sourceDir; + } + console.info("OnlineSource: Using local path " + sourceDir); + } + else { + var cacheDir = getCacheDir(options.sourceCache, name, uriInfo); + sourceDir = cacheDir; + + var alreadyCached = File.exists(cacheDir) && File.exists(FileInfo.joinPaths(cacheDir, ".onlinesource-cached")); + if (!alreadyCached) { + File.makePath(cacheDir); + + if (uriInfo.type === "git") { + cloneGitRepo(uriInfo.url, uriInfo.tag, cacheDir); + } else if (uriInfo.type === "archive") { + downloadArchive(uriInfo.url, cacheDir); + + // Find the extracted directory (archives often have a single root folder) + var entries = File.directoryEntries(cacheDir, File.Dirs | File.NoDotAndDotDot); + if (entries.length === 1) { + sourceDir = FileInfo.joinPaths(cacheDir, entries[0]); + } + } + + var markerFile = new TextFile(FileInfo.joinPaths(cacheDir, ".onlinesource-cached"), TextFile.WriteOnly); + markerFile.writeLine(new Date().toISOString()); + markerFile.writeLine(uri); + markerFile.close(); + } else { + console.info("OnlineSource: Using cached version at " + cacheDir); + } + } + + var qbsInfo = detectQbsProject(sourceDir, options.projectFile); + if (qbsInfo) { + console.info("OnlineSource: Detected Qbs project: " + qbsInfo.projectFile); + } + + var result = { + sourceDirectory: sourceDir, + projectFile: (qbsInfo && qbsInfo.isQbsProject) ? qbsInfo.projectFile : null + }; + + resolvedModules[name] = result; + saveCache(cacheFile, resolvedModules); + return result; +} diff --git a/script/git_clone_googletest.sh b/script/git_clone_googletest.sh new file mode 100755 index 00000000..e5db3ba2 --- /dev/null +++ b/script/git_clone_googletest.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# we have not git on docker containers (only compilers) +set -e + +SCRIPT_DIR="$(dirname "$0")" +REPO="https://github.com/google/googletest.git" +TAG="v1.17.0" + +if [ ! -d "${SCRIPT_DIR}/googletest" ]; then + git clone --branch "${TAG}" --depth 1 --no-tags "${REPO}" "${SCRIPT_DIR}/googletest" +else + pushd "${SCRIPT_DIR}/googletest" + git fetch origin tag "${TAG}" --depth 1 --no-tags + git reset --hard FETCH_HEAD + popd +fi diff --git a/src/array19.lib/array19.lib.qbs b/src/array19.lib/array19.lib.qbs deleted file mode 100644 index b0685ebc..00000000 --- a/src/array19.lib/array19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "array19.lib" - - references: [ - "array19/array19.qbs", - "array19/array19.tests.qbs", - ] -} diff --git a/src/array19.lib/array19/array19.qbs b/src/array19.lib/array19/array19.qbs index f52d75c7..12cc180c 100644 --- a/src/array19.lib/array19/array19.qbs +++ b/src/array19.lib/array19/array19.qbs @@ -1,13 +1,6 @@ +import qbs.FileInfo Product { - Depends { name: "cpp19" } - - Export { - Depends { name: "cpp" } - cpp.includePaths: exportingProduct.sourceDirectory + "/.." - Depends { name: "cpp19" } - } - files: [ "AllocatedArrayOf.equals.h", "AllocatedArrayOf.h", @@ -33,4 +26,12 @@ Product { "Zip.h", "adlRange.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: project.configProductName } + } + Depends { name: project.configProductName } } diff --git a/src/array19.lib/array19/array19.tests.qbs b/src/array19.lib/array19/array19.tests.qbs index e86d670f..26eb84d8 100644 --- a/src/array19.lib/array19/array19.tests.qbs +++ b/src/array19.lib/array19/array19.tests.qbs @@ -1,18 +1,12 @@ Application { name: "array19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "array19" } - Depends { name: "googletest" } - - // Depends { name: "cpp" } - // cpp.combineCxxSources: true - + type: base.concat(["autotest"]) files: [ "*.test.cpp", ] + + Depends { name: "array19" } + Depends { name: "googletest" } } diff --git a/src/coro19.lib/coro19.lib.qbs b/src/coro19.lib/coro19.lib.qbs deleted file mode 100644 index 3bce13ec..00000000 --- a/src/coro19.lib/coro19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "coro19.lib" - - references: [ - "coro19/coro19.qbs", - "coro19/coro19.tests.qbs", - ] -} diff --git a/src/coro19.lib/coro19/coro19.qbs b/src/coro19.lib/coro19/coro19.qbs index 2810aa3a..3e99d694 100644 --- a/src/coro19.lib/coro19/coro19.qbs +++ b/src/coro19.lib/coro19/coro19.qbs @@ -1,21 +1,7 @@ +import qbs.FileInfo import qbs.Utilities StaticLibrary { - Depends { name: "cpp" } - Depends { name: "array19" } - Properties { - condition: qbs.toolchain.contains('msvc') && !qbs.toolchain.contains('clang-cl') && (Utilities.versionCompare(cpp.compilerVersion, '19.28.29333') < 0) - cpp.cxxFlags: base.concat("/await") // enable coroutine-ts - } - Properties { - condition: qbs.toolchain.contains('msvc') && qbs.toolchain.contains('clang-cl') && cpp.compilerVersionMajor < 11 - cpp.cxxFlags: base.concat("-Xclang", "-fcoroutines-ts") // enable coroutine-ts - } - Properties { - condition: qbs.toolchain.contains('clang') && cpp.compilerVersionMajor < 11 - cpp.cxxFlags: base.concat("-fcoroutines-ts") // enable coroutine-ts - } - files: [ "CoEnumerator.h", "CoEnumerator.range.h", @@ -24,21 +10,11 @@ StaticLibrary { ] Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + Depends { name: "cpp" } - cpp.includePaths: [ exportingProduct.sourceDirectory + "/.." ] Depends { name: "array19" } - - Properties { - condition: qbs.toolchain.contains('msvc') && !qbs.toolchain.contains('clang-cl') && (Utilities.versionCompare(cpp.compilerVersion, '19.28.29333') < 0) - cpp.cxxFlags: base.concat("/await") // enable coroutine-ts - } - Properties { - condition: qbs.toolchain.contains('msvc') && qbs.toolchain.contains('clang-cl') && cpp.compilerVersionMajor < 11 - cpp.cxxFlags: base.concat("-Xclang", "-fcoroutines-ts") // enable coroutine-ts - } - Properties { - condition: qbs.toolchain.contains('clang') && cpp.compilerVersionMajor < 11 - cpp.cxxFlags: base.concat("-fcoroutines-ts") // enable coroutine-ts - } } + Depends { name: "cpp" } + Depends { name: "array19" } } diff --git a/src/coro19.lib/coro19/coro19.tests.qbs b/src/coro19.lib/coro19/coro19.tests.qbs index deff9ec3..3f070057 100644 --- a/src/coro19.lib/coro19/coro19.tests.qbs +++ b/src/coro19.lib/coro19/coro19.tests.qbs @@ -1,16 +1,13 @@ Application { name: "coro19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "coro19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "CoEnumerator.rang.test.cpp", "CoEnumerator.test.cpp", ] + + Depends { name: "coro19" } + Depends { name: "googletest" } } diff --git a/src/enum19.lib/enum19.lib.qbs b/src/enum19.lib/enum19.lib.qbs deleted file mode 100644 index 2ff47a67..00000000 --- a/src/enum19.lib/enum19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "enum19.lib" - - references: [ - "enum19/enum19.qbs", - "enum19/enum19.tests.qbs", - ] -} diff --git a/src/enum19.lib/enum19/enum19.qbs b/src/enum19.lib/enum19/enum19.qbs index 79155454..babeccbb 100644 --- a/src/enum19.lib/enum19/enum19.qbs +++ b/src/enum19.lib/enum19/enum19.qbs @@ -1,15 +1,6 @@ +import qbs.FileInfo Product { - Depends { name: "cpp" } - Depends { name: "string19" } - Depends { name: "fmt"; required: false } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "string19" } - } - files: [ "ADL.h", "Enum.extras.ostream.h", @@ -20,4 +11,14 @@ Product { "Enum.ostream.h", "visitEnumMemberNames.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "string19" } + } + Depends { name: "cpp" } + Depends { name: "string19" } + Depends { name: "fmt"; required: false } } diff --git a/src/enum19.lib/enum19/enum19.tests.qbs b/src/enum19.lib/enum19/enum19.tests.qbs index a9ef9232..ac8ed124 100644 --- a/src/enum19.lib/enum19/enum19.tests.qbs +++ b/src/enum19.lib/enum19/enum19.tests.qbs @@ -1,17 +1,14 @@ Application { name: "enum19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "enum19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "Enum.ostream.test.cpp", "Enum.test.cpp", "Enum.max.test.cpp", ] + + Depends { name: "enum19" } + Depends { name: "googletest" } } diff --git a/src/flags19.lib/flags19.lib.qbs b/src/flags19.lib/flags19.lib.qbs deleted file mode 100644 index b31b8f86..00000000 --- a/src/flags19.lib/flags19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "flags19.lib" - - references: [ - "flags19/flags19.qbs", - "flags19/flags19.tests.qbs", - ] -} diff --git a/src/flags19.lib/flags19/flags19.qbs b/src/flags19.lib/flags19/flags19.qbs index acdc5386..91ab56c5 100644 --- a/src/flags19.lib/flags19/flags19.qbs +++ b/src/flags19.lib/flags19/flags19.qbs @@ -1,19 +1,20 @@ +import qbs.FileInfo Product { - Depends { name: "cpp" } - Depends { name: "enum19" } - Depends { name: "fmt"; required: false } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "enum19" } - } - files: [ "FlagsOf.fmt.h", "FlagsOf.h", "FlagsOf.ostream.h", "FlagsOf.trait.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "enum19" } + } + Depends { name: "cpp" } + Depends { name: "enum19" } + Depends { name: "fmt"; required: false } } diff --git a/src/flags19.lib/flags19/flags19.tests.qbs b/src/flags19.lib/flags19/flags19.tests.qbs index ed478e55..6f0c2176 100644 --- a/src/flags19.lib/flags19/flags19.tests.qbs +++ b/src/flags19.lib/flags19/flags19.tests.qbs @@ -1,15 +1,12 @@ Application { name: "flags19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "flags19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "FlagsOf.test.cpp", ] + + Depends { name: "flags19" } + Depends { name: "googletest" } } diff --git a/src/lookup19.lib/lookup19.lib.qbs b/src/lookup19.lib/lookup19.lib.qbs deleted file mode 100644 index 3d616a73..00000000 --- a/src/lookup19.lib/lookup19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "lookup19.lib" - - references: [ - "lookup19/lookup19.qbs", - "lookup19/lookup19.tests.qbs", - ] -} diff --git a/src/lookup19.lib/lookup19/lookup19.qbs b/src/lookup19.lib/lookup19/lookup19.qbs index c450a24e..51508f5c 100644 --- a/src/lookup19.lib/lookup19/lookup19.qbs +++ b/src/lookup19.lib/lookup19/lookup19.qbs @@ -1,18 +1,16 @@ +import qbs.FileInfo Product { - Depends { name: "cpp19" } - Depends { name: "array19" } + files: [ + "OrderedSetOf.h", + "OrderedSliceOf.h", + ] Export { - Depends { name: "cpp" } - cpp.includePaths: [ exportingProduct.sourceDirectory + "/.." ] - Depends { name: "cpp19" } + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + Depends { name: "cpp" } Depends { name: "array19" } } - - files: [ - "OrderedSetOf.h", - "OrderedSliceOf.h", - ] + Depends { name: "array19" } } diff --git a/src/lookup19.lib/lookup19/lookup19.tests.qbs b/src/lookup19.lib/lookup19/lookup19.tests.qbs index af1ad17b..dbd38a27 100644 --- a/src/lookup19.lib/lookup19/lookup19.tests.qbs +++ b/src/lookup19.lib/lookup19/lookup19.tests.qbs @@ -1,18 +1,12 @@ Application { name: "lookup19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "lookup19" } - Depends { name: "googletest" } - - // Depends { name: "cpp" } - // cpp.combineCxxSources: true - + type: base.concat(["autotest"]) files: [ "OrderedSetOf.test.cpp", ] + + Depends { name: "lookup19" } + Depends { name: "googletest" } } diff --git a/src/meta19.lib/meta19.lib.qbs b/src/meta19.lib/meta19.lib.qbs deleted file mode 100644 index c44fe762..00000000 --- a/src/meta19.lib/meta19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "meta19.lib" - - references: [ - "meta19/meta19.qbs", - "meta19/meta19.tests.qbs", - ] -} diff --git a/src/meta19.lib/meta19/meta19.qbs b/src/meta19.lib/meta19/meta19.qbs index 0181e83a..73e1e15e 100644 --- a/src/meta19.lib/meta19/meta19.qbs +++ b/src/meta19.lib/meta19/meta19.qbs @@ -1,12 +1,10 @@ +import qbs.FileInfo Product { - Depends { name: "array19" } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "array19" } - } + files: [ + "Unreachable.h", + "nullptr_to.h", + ] Group { name: "Index" @@ -53,8 +51,11 @@ Product { "TypePackTemplate.h", ] } - files: [ - "Unreachable.h", - "nullptr_to.h", - ] + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "array19" } + } + Depends { name: "array19" } } diff --git a/src/meta19.lib/meta19/meta19.tests.qbs b/src/meta19.lib/meta19/meta19.tests.qbs index da1bc8f7..f002ff33 100644 --- a/src/meta19.lib/meta19/meta19.tests.qbs +++ b/src/meta19.lib/meta19/meta19.tests.qbs @@ -1,14 +1,11 @@ Application { name: "meta19.tests" - - Depends { name: "meta19" } - // all tests are compile time only! - - Depends { name: "cpp" } - // cpp.combineCxxSources: true - + consoleApplication: true files: [ "*.test.cpp", ] + + Depends { name: "meta19" } + Depends { name: "cpp" } // note: all tests are compile time only! } diff --git a/src/optional19.lib/optional19.lib.qbs b/src/optional19.lib/optional19.lib.qbs deleted file mode 100644 index a1d58466..00000000 --- a/src/optional19.lib/optional19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "optional19.lib" - - references: [ - "optional19/optional19.qbs", - "optional19/optional19.tests.qbs", - ] -} diff --git a/src/optional19.lib/optional19/optional19.qbs b/src/optional19.lib/optional19/optional19.qbs index e0931ee8..f3cfc3da 100644 --- a/src/optional19.lib/optional19/optional19.qbs +++ b/src/optional19.lib/optional19/optional19.qbs @@ -1,14 +1,6 @@ +import qbs.FileInfo Product { - Depends { name: "cpp" } - Depends { name: "meta19" } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "meta19" } - } - files: [ "Optional.equals.h", "Optional.h", @@ -18,4 +10,13 @@ Product { "PackedOptional.ostream.h", "PackedOptionalNan.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "meta19" } + } + Depends { name: "cpp" } + Depends { name: "meta19" } } diff --git a/src/optional19.lib/optional19/optional19.tests.qbs b/src/optional19.lib/optional19/optional19.tests.qbs index c6cdbb98..892773bd 100644 --- a/src/optional19.lib/optional19/optional19.tests.qbs +++ b/src/optional19.lib/optional19/optional19.tests.qbs @@ -1,17 +1,14 @@ Application { name: "optional19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "optional19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "Optional.test.cpp", "PackedOptional.test.cpp", "PackedOptionalNan.test.cpp", ] + + Depends { name: "optional19" } + Depends { name: "googletest" } } diff --git a/src/partial19.lib/partial19.lib.qbs b/src/partial19.lib/partial19.lib.qbs deleted file mode 100644 index db9a5cd2..00000000 --- a/src/partial19.lib/partial19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "partial19.lib" - - references: [ - "partial19/partial19.qbs", - "partial19/partial19.tests.qbs", - ] -} diff --git a/src/partial19.lib/partial19/partial19.qbs b/src/partial19.lib/partial19/partial19.qbs index b012d5bd..faf5b9a6 100644 --- a/src/partial19.lib/partial19/partial19.qbs +++ b/src/partial19.lib/partial19/partial19.qbs @@ -1,13 +1,6 @@ +import qbs.FileInfo Product { - Depends { name: "meta19" } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "meta19" } - } - files: [ "Bitset.h", "Partial.equals.h", @@ -17,4 +10,12 @@ Product { "PartialWhich.fmt.h", "align.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "meta19" } + } + Depends { name: "meta19" } } diff --git a/src/partial19.lib/partial19/partial19.tests.qbs b/src/partial19.lib/partial19/partial19.tests.qbs index eb5a0ac7..965ec46e 100644 --- a/src/partial19.lib/partial19/partial19.tests.qbs +++ b/src/partial19.lib/partial19/partial19.tests.qbs @@ -1,16 +1,13 @@ Application { name: "partial19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "partial19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "Bitset.test.cpp", "Partial.test.cpp", ] + + Depends { name: "partial19" } + Depends { name: "googletest" } } diff --git a/src/serialize19.lib/serialize19.lib.qbs b/src/serialize19.lib/serialize19.lib.qbs deleted file mode 100644 index 7b701419..00000000 --- a/src/serialize19.lib/serialize19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "serialize19.lib" - - references: [ - "serialize19/serialize19.qbs", - "serialize19/serialize19.tests.qbs", - ] -} diff --git a/src/serialize19.lib/serialize19/serialize19.qbs b/src/serialize19.lib/serialize19/serialize19.qbs index d9afb076..606d9481 100644 --- a/src/serialize19.lib/serialize19/serialize19.qbs +++ b/src/serialize19.lib/serialize19/serialize19.qbs @@ -1,19 +1,10 @@ +import qbs.FileInfo Product { - Depends { name: "cpp" } - Depends { name: "meta19" } - - Depends { name: "optional19"; required: false } - Depends { name: "partial19"; required: false } - Depends { name: "strong19"; required: false } - Depends { name: "tuple19"; required: false } - Depends { name: "variant19"; required: false } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "meta19" } - } + files: [ + "dynamicWrite.h", + "serialize.h", + ] Group { name: "Archive" @@ -66,8 +57,17 @@ Product { "serialize.std_vector.h", ] } - files: [ - "dynamicWrite.h", - "serialize.h", - ] + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "meta19" } + } + Depends { name: "cpp" } + Depends { name: "meta19" } + Depends { name: "optional19"; required: false } + Depends { name: "partial19"; required: false } + Depends { name: "strong19"; required: false } + Depends { name: "tuple19"; required: false } + Depends { name: "variant19"; required: false } } diff --git a/src/serialize19.lib/serialize19/serialize19.tests.qbs b/src/serialize19.lib/serialize19/serialize19.tests.qbs index 1c6a20cb..99ad665a 100644 --- a/src/serialize19.lib/serialize19/serialize19.tests.qbs +++ b/src/serialize19.lib/serialize19/serialize19.tests.qbs @@ -1,17 +1,12 @@ Application { name: "serialize19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "googletest" } - Depends { name: "optional19" } - Depends { name: "partial19" } - Depends { name: "serialize19" } - Depends { name: "tuple19" } - Depends { name: "variant19" } + type: base.concat(["autotest"]) + files: [ + "Codec.test.cpp", + "Endianness.test.cpp", + ] Group { name: "std" @@ -35,8 +30,10 @@ Application { "serialize.Variant.test.cpp", ] } - files: [ - "Codec.test.cpp", - "Endianness.test.cpp", - ] + Depends { name: "googletest" } + Depends { name: "optional19" } + Depends { name: "partial19" } + Depends { name: "serialize19" } + Depends { name: "tuple19" } + Depends { name: "variant19" } } diff --git a/src/signal19.lib/signal19.lib.qbs b/src/signal19.lib/signal19.lib.qbs deleted file mode 100644 index 4ab5ad2a..00000000 --- a/src/signal19.lib/signal19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "signal19.lib" - - references: [ - "signal19/signal19.qbs", - "signal19/signal19.tests.qbs", - ] -} diff --git a/src/signal19.lib/signal19/signal19.qbs b/src/signal19.lib/signal19/signal19.qbs index a34ca299..aace6b93 100644 --- a/src/signal19.lib/signal19/signal19.qbs +++ b/src/signal19.lib/signal19/signal19.qbs @@ -1,17 +1,18 @@ +import qbs.FileInfo Product { - Depends { name: "cpp" } - Depends { name: "meta19" } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "meta19" } - } - files: [ "SignalWith.h", "Subscription.h", "Subscriptions.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "meta19" } + } + Depends { name: "cpp" } + Depends { name: "meta19" } } diff --git a/src/signal19.lib/signal19/signal19.tests.qbs b/src/signal19.lib/signal19/signal19.tests.qbs index 3c6a310d..a511e7ef 100644 --- a/src/signal19.lib/signal19/signal19.tests.qbs +++ b/src/signal19.lib/signal19/signal19.tests.qbs @@ -1,16 +1,13 @@ Application { name: "signal19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "googletest" } - Depends { name: "signal19" } - + type: base.concat(["autotest"]) files: [ "SignalWith.test.cpp", "Subscriptions.test.cpp", ] + + Depends { name: "googletest" } + Depends { name: "signal19" } } diff --git a/src/src.qbs b/src/src.qbs new file mode 100644 index 00000000..7753ef5a --- /dev/null +++ b/src/src.qbs @@ -0,0 +1,19 @@ +Project { + name: "Src" + references: [ + "array19.lib/array19/array19.qbs", + "coro19.lib/coro19/coro19.qbs", + "enum19.lib/enum19/enum19.qbs", + "flags19.lib/flags19/flags19.qbs", + "meta19.lib/meta19/meta19.qbs", + "lookup19.lib/lookup19/lookup19.qbs", + "optional19.lib/optional19/optional19.qbs", + "partial19.lib/partial19/partial19.qbs", + "serialize19.lib/serialize19/serialize19.qbs", + "signal19.lib/signal19/signal19.qbs", + "string19.lib/string19/string19.qbs", + "strong19.lib/strong19/strong19.qbs", + "tuple19.lib/tuple19/tuple19.qbs", + "variant19.lib/variant19/variant19.qbs", + ] +} diff --git a/src/string19.lib/string19.lib.qbs b/src/string19.lib/string19.lib.qbs deleted file mode 100644 index d49ae564..00000000 --- a/src/string19.lib/string19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "string19.lib" - - references: [ - "string19/string19.qbs", - "string19/string19.tests.qbs", - ] -} diff --git a/src/string19.lib/string19/string19.qbs b/src/string19.lib/string19/string19.qbs index 57918f54..c7bf66c8 100644 --- a/src/string19.lib/string19/string19.qbs +++ b/src/string19.lib/string19/string19.qbs @@ -1,13 +1,10 @@ +import qbs.FileInfo Product { - Depends { name: "tuple19" } - Depends { name: "fmt"; required: false } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "tuple19" } - } + files: [ + "ADL.h", + "DynamicString.h", + ] Group { name: "Rope" @@ -43,8 +40,12 @@ Product { "StringView.store.h", ] } - files: [ - "ADL.h", - "DynamicString.h", - ] + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "tuple19" } + } + Depends { name: "tuple19" } + Depends { name: "fmt"; required: false } } diff --git a/src/string19.lib/string19/string19.tests.qbs b/src/string19.lib/string19/string19.tests.qbs index d0a59a26..28c9b081 100644 --- a/src/string19.lib/string19/string19.tests.qbs +++ b/src/string19.lib/string19/string19.tests.qbs @@ -1,14 +1,8 @@ Application { name: "string19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "string19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "Rope.decimal.test.cpp", "Rope.join.test.cpp", @@ -16,4 +10,7 @@ Application { "StringStore.test.cpp", "StringView.test.cpp", ] + + Depends { name: "string19" } + Depends { name: "googletest" } } diff --git a/src/strong19.lib/strong19.lib.qbs b/src/strong19.lib/strong19.lib.qbs deleted file mode 100644 index 5fff336a..00000000 --- a/src/strong19.lib/strong19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "strong19.lib" - - references: [ - "strong19/strong19.qbs", - "strong19/strong19.tests.qbs", - ] -} diff --git a/src/strong19.lib/strong19/strong19.qbs b/src/strong19.lib/strong19/strong19.qbs index 7f3e927a..6aac4c21 100644 --- a/src/strong19.lib/strong19/strong19.qbs +++ b/src/strong19.lib/strong19/strong19.qbs @@ -1,22 +1,6 @@ +import qbs.FileInfo Product { - Depends { name: "string19" } - Depends { name: "fmt"; required: false } - Depends { name: "array19"; required: false } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "string19" } - - Properties { - condition: qbs.toolchain.contains('clang') - cpp.cxxFlags: base.concat( - "-Wno-gnu-zero-variadic-macro-arguments" // accept this extensions for opaque strong types - ) - } - } - files: [ "ADL.h", "Macro.h", @@ -29,4 +13,20 @@ Product { "Strong.traits.h", "WeakOf.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Properties { + condition: qbs.toolchain.contains('clang') + cpp.cxxFlags: base.concat( + "-Wno-gnu-zero-variadic-macro-arguments" // accept this extensions for opaque strong types + ) + } + Depends { name: "cpp" } + Depends { name: "string19" } + } + Depends { name: "string19" } + Depends { name: "fmt"; required: false } + Depends { name: "array19"; required: false } } diff --git a/src/strong19.lib/strong19/strong19.tests.qbs b/src/strong19.lib/strong19/strong19.tests.qbs index 30ba95fe..28878aca 100644 --- a/src/strong19.lib/strong19/strong19.tests.qbs +++ b/src/strong19.lib/strong19/strong19.tests.qbs @@ -1,17 +1,14 @@ Application { name: "strong19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "strong19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "Strong.extras.ostream.test.cpp", "Strong.hash.test.cpp", "Strong.test.cpp", ] + + Depends { name: "strong19" } + Depends { name: "googletest" } } diff --git a/src/tests.qbs b/src/tests.qbs new file mode 100644 index 00000000..c1dbd2f6 --- /dev/null +++ b/src/tests.qbs @@ -0,0 +1,21 @@ +Project { + name: "Tests" + references: [ + "array19.lib/array19/array19.tests.qbs", + "coro19.lib/coro19/coro19.tests.qbs", + "enum19.lib/enum19/enum19.tests.qbs", + "flags19.lib/flags19/flags19.tests.qbs", + "meta19.lib/meta19/meta19.tests.qbs", + "lookup19.lib/lookup19/lookup19.tests.qbs", + "optional19.lib/optional19/optional19.tests.qbs", + "partial19.lib/partial19/partial19.tests.qbs", + "serialize19.lib/serialize19/serialize19.tests.qbs", + "signal19.lib/signal19/signal19.tests.qbs", + "string19.lib/string19/string19.tests.qbs", + "strong19.lib/strong19/strong19.tests.qbs", + "tuple19.lib/tuple19/tuple19.tests.qbs", + "variant19.lib/variant19/variant19.tests.qbs", + ] + + AutotestRunner {} +} diff --git a/src/tuple19.lib/tuple19.lib.qbs b/src/tuple19.lib/tuple19.lib.qbs deleted file mode 100644 index 7e62508f..00000000 --- a/src/tuple19.lib/tuple19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "tuple19.lib" - - references: [ - "tuple19/tuple19.qbs", - "tuple19/tuple19.tests.qbs", - ] -} diff --git a/src/tuple19.lib/tuple19/tuple19.qbs b/src/tuple19.lib/tuple19/tuple19.qbs index 1a5f874f..b0e82021 100644 --- a/src/tuple19.lib/tuple19/tuple19.qbs +++ b/src/tuple19.lib/tuple19/tuple19.qbs @@ -1,13 +1,6 @@ +import qbs.FileInfo Product { - Depends { name: "meta19" } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "meta19" } - } - files: [ "Tuple.bind.h", "Tuple.fmt.h", @@ -16,4 +9,12 @@ Product { "Tuple.ostream.h", "Tuple.trait.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "meta19" } + } + Depends { name: "meta19" } } diff --git a/src/tuple19.lib/tuple19/tuple19.tests.qbs b/src/tuple19.lib/tuple19/tuple19.tests.qbs index 3dc5cfe6..8169bb9f 100644 --- a/src/tuple19.lib/tuple19/tuple19.tests.qbs +++ b/src/tuple19.lib/tuple19/tuple19.tests.qbs @@ -1,17 +1,14 @@ Application { name: "tuple19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "tuple19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "Tuple.bind.test.cpp", "Tuple.join.test.cpp", "Tuple.test.cpp", ] + + Depends { name: "tuple19" } + Depends { name: "googletest" } } diff --git a/src/variant19.lib/variant19.lib.qbs b/src/variant19.lib/variant19.lib.qbs deleted file mode 100644 index fba4e962..00000000 --- a/src/variant19.lib/variant19.lib.qbs +++ /dev/null @@ -1,9 +0,0 @@ - -Project { - name: "variant19.lib" - - references: [ - "variant19/variant19.qbs", - "variant19/variant19.tests.qbs", - ] -} diff --git a/src/variant19.lib/variant19/variant19.qbs b/src/variant19.lib/variant19/variant19.qbs index e73d7897..94fa01f7 100644 --- a/src/variant19.lib/variant19/variant19.qbs +++ b/src/variant19.lib/variant19/variant19.qbs @@ -1,13 +1,6 @@ +import qbs.FileInfo Product { - Depends { name: "meta19" } - - Export { - Depends { name: "cpp" } - cpp.includePaths: [exportingProduct.sourceDirectory + "/.."] - Depends { name: "meta19" } - } - files: [ "None.fmt.h", "None.h", @@ -18,4 +11,12 @@ Product { "Variant.ostream.h", "VariantWhich.fmt.h", ] + + Export { + cpp.includePaths: FileInfo.joinPaths(exportingProduct.sourceDirectory, "..") + + Depends { name: "cpp" } + Depends { name: "meta19" } + } + Depends { name: "meta19" } } diff --git a/src/variant19.lib/variant19/variant19.tests.qbs b/src/variant19.lib/variant19/variant19.tests.qbs index a561c22b..194dfcc5 100644 --- a/src/variant19.lib/variant19/variant19.tests.qbs +++ b/src/variant19.lib/variant19/variant19.tests.qbs @@ -1,16 +1,13 @@ Application { name: "variant19.tests" - condition: googletest.present - consoleApplication: true - type: ["application", "autotest"] - - Depends { name: "variant19" } - Depends { name: "googletest" } - + type: base.concat(["autotest"]) files: [ "None.test.cpp", "Variant.test.cpp", ] + + Depends { name: "variant19" } + Depends { name: "googletest" } } diff --git a/third_party/git_clone_googletest.sh b/third_party/git_clone_googletest.sh deleted file mode 100755 index 7e57fd0f..00000000 --- a/third_party/git_clone_googletest.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [ ! -d "$(dirname "$0")/googletest" ]; then - git clone --depth 1 --no-tags https://github.com/google/googletest.git "$(dirname "$0")/googletest" -fi -pushd "$(dirname "$0")/googletest" -git fetch origin 210aab09deef06e64ab82414697abd0d7cb5978a -git reset --hard FETCH_HEAD -popd diff --git a/third_party/googletest.qbs b/third_party/googletest.qbs index b88c58b3..dcb1e6e8 100644 --- a/third_party/googletest.qbs +++ b/third_party/googletest.qbs @@ -1,45 +1,34 @@ import qbs import qbs.File import qbs.FileInfo +import online StaticLibrary { name: "googletest" - Probe { - id: googletestProbe - property pathList searchPathes: ["./googletest", "../../googletest"] - property path sourcePath: product.sourceDirectory - - property path basePath // valid if found - - configure: { - for (var i=0; i < searchPathes.length; i++) { - var c = searchPathes[i]; - if (File.exists(FileInfo.joinPaths(sourcePath, c, "googletest/src/gtest-all.cc"))) { - found = true; - basePath = FileInfo.joinPaths(sourcePath, c); - return; - } - } - } - } - condition: googletestProbe.found - - files: [ - FileInfo.joinPaths(googletestProbe.basePath, "googlemock/src/gmock-all.cc"), - FileInfo.joinPaths(googletestProbe.basePath, "googletest/src/gtest-all.cc") - ] - - Depends { name: "cpp" } cpp.cxxLanguageVersion: "c++17" cpp.includePaths: [ - FileInfo.joinPaths(googletestProbe.basePath, "googlemock"), - FileInfo.joinPaths(googletestProbe.basePath, "googlemock/include"), - FileInfo.joinPaths(googletestProbe.basePath, "googletest"), - FileInfo.joinPaths(googletestProbe.basePath, "googletest/include"), + FileInfo.joinPaths(source.sourceDirectory, "googlemock"), + FileInfo.joinPaths(source.sourceDirectory, "googlemock/include"), + FileInfo.joinPaths(source.sourceDirectory, "googletest"), + FileInfo.joinPaths(source.sourceDirectory, "googletest/include"), ] cpp.defines: ["GTEST_LANG_CXX11"] + condition: source.found + files: [ + FileInfo.joinPaths(source.sourceDirectory, "googlemock/src/gmock-all.cc"), + FileInfo.joinPaths(source.sourceDirectory, "googletest/src/gtest-all.cc"), + FileInfo.joinPaths(source.sourceDirectory, "googlemock/include/**/*.h"), + FileInfo.joinPaths(source.sourceDirectory, "googletest/include/**/*.h"), + ] + + online.Source { + id: source + + name: "googletest" + uri: "gh:google/googletest@1.17.0" + } Properties { condition: qbs.toolchain.contains('gcc') // also set for clang cpp.cxxFlags: { @@ -54,15 +43,21 @@ StaticLibrary { return flags; } } - Export { - Depends { name: "cpp" } - cpp.includePaths: [ - FileInfo.joinPaths(googletestProbe.basePath, "googlemock/include"), - FileInfo.joinPaths(googletestProbe.basePath, "googletest/include") + property bool useMain: true + + cpp.systemIncludePaths: [ + FileInfo.joinPaths(source.sourceDirectory, "googlemock/include"), + FileInfo.joinPaths(source.sourceDirectory, "googletest/include") ] cpp.defines: ["GTEST_LANG_CXX11"] + Group { + name: "Main" + condition: product.googletest.useMain + + files: FileInfo.joinPaths(source.sourceDirectory, "googlemock/src/gmock_main.cc") + } Properties { condition: qbs.toolchain.contains('gcc') // also set for clang cpp.cxxFlags: base.concat( @@ -71,13 +66,7 @@ StaticLibrary { ) cpp.dynamicLibraries: [ "pthread" ] } - - property bool useMain: true - Group { - name: "Main" - condition: product.googletest.useMain - - files: FileInfo.joinPaths(googletestProbe.basePath, "googlemock/src/gmock_main.cc") - } + Depends { name: "cpp" } } + Depends { name: "cpp" } } diff --git a/third_party/third_party.qbs b/third_party/third_party.qbs index 4b118717..6a40aa55 100644 --- a/third_party/third_party.qbs +++ b/third_party/third_party.qbs @@ -1,15 +1,6 @@ - Project { - + name: "ThirdParty" references: [ "googletest.qbs", ] - - Product { - name: "third_party/[Extra Files]" - files: [ - "git_clone_googletest.sh", - ] - } - } From 8bab0a2a915b673fd218e7102fef2a396c46cc9f Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sat, 24 Jan 2026 15:52:30 +0100 Subject: [PATCH 4/6] Prepare CMakeLists.txt for external inclusion * add options to make the project clean --- .gitignore | 1 + CMakeLists.txt | 56 ++++++++++++------- CMakePresets.json | 5 +- src/array19.lib/CMakeLists.txt | 5 +- src/array19.lib/array19/array19.cmake | 33 ++++++----- src/array19.lib/array19/array19.tests.cmake | 6 +- src/coro19.lib/CMakeLists.txt | 5 +- src/coro19.lib/coro19/coro19.cmake | 41 +++++++------- src/coro19.lib/coro19/coro19.tests.cmake | 6 +- src/enum19.lib/CMakeLists.txt | 5 +- src/enum19.lib/enum19/enum19.cmake | 33 ++++++----- src/enum19.lib/enum19/enum19.tests.cmake | 6 +- src/flags19.lib/CMakeLists.txt | 5 +- src/flags19.lib/flags19/flags19.cmake | 33 ++++++----- src/flags19.lib/flags19/flags19.tests.cmake | 6 +- src/lookup19.lib/CMakeLists.txt | 5 +- src/lookup19.lib/lookup19/lookup19.cmake | 33 ++++++----- .../lookup19/lookup19.tests.cmake | 6 +- src/meta19.lib/CMakeLists.txt | 5 +- src/meta19.lib/meta19/meta19.cmake | 33 ++++++----- src/meta19.lib/meta19/meta19.tests.cmake | 6 +- src/optional19.lib/CMakeLists.txt | 5 +- .../optional19/optional19.cmake | 33 ++++++----- .../optional19/optional19.tests.cmake | 6 +- src/partial19.lib/CMakeLists.txt | 5 +- src/partial19.lib/partial19/partial19.cmake | 33 ++++++----- .../partial19/partial19.tests.cmake | 6 +- src/serialize19.lib/CMakeLists.txt | 5 +- .../serialize19/serialize19.cmake | 33 ++++++----- .../serialize19/serialize19.tests.cmake | 16 +++--- src/signal19.lib/CMakeLists.txt | 5 +- src/signal19.lib/signal19/signal19.cmake | 33 ++++++----- .../signal19/signal19.tests.cmake | 6 +- src/string19.lib/CMakeLists.txt | 5 +- src/string19.lib/string19/string19.cmake | 33 ++++++----- .../string19/string19.tests.cmake | 6 +- src/strong19.lib/CMakeLists.txt | 5 +- src/strong19.lib/strong19/strong19.cmake | 33 ++++++----- .../strong19/strong19.tests.cmake | 6 +- src/tuple19.lib/CMakeLists.txt | 5 +- src/tuple19.lib/tuple19/tuple19.cmake | 33 ++++++----- src/tuple19.lib/tuple19/tuple19.tests.cmake | 6 +- src/variant19.lib/CMakeLists.txt | 5 +- src/variant19.lib/variant19/variant19.cmake | 33 ++++++----- .../variant19/variant19.tests.cmake | 6 +- third_party/CMakeLists.txt | 4 +- third_party/googletest.cmake | 41 +++----------- 47 files changed, 408 insertions(+), 333 deletions(-) diff --git a/.gitignore b/.gitignore index 318d4cc5..288c0b3a 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ third_party/*/ build/ artifacts/ CMakeUserPresets.json +.qtcreator diff --git a/CMakeLists.txt b/CMakeLists.txt index bc1b41b7..182b6796 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,28 +1,42 @@ cmake_minimum_required(VERSION 3.24 FATAL_ERROR) -project (co-cpp19 LANGUAGES CXX) -enable_testing() +project(co-cpp19 LANGUAGES CXX) -include(GNUInstallDirs) -include(CMakePackageConfigHelpers) -set(COCPP19_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CoCpp19") +set(COCPP_MAIN_PROJECT OFF) -find_package(GTest QUIET) +if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set(COCPP_MAIN_PROJECT ON) +endif() + +option(COCPP_BuildTests "Build the unit tests when BUILD_TESTING is enabled." ${COCPP_MAIN_PROJECT}) +option(COCPP_Install "Install CMake targets during install step." ${COCPP_MAIN_PROJECT}) + +if(COCPP_BuildTests) + enable_testing() +endif() + +if(COCPP_Install) + include(GNUInstallDirs) + include(CMakePackageConfigHelpers) + set(COCPP19_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/CoCpp19") +endif() add_subdirectory(third_party) add_subdirectory(src) -configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/CoCpp19Config.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19Config.cmake" - INSTALL_DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} -) -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19ConfigVersion.cmake" - VERSION "1.0.0" - COMPATIBILITY AnyNewerVersion -) -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19Config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19ConfigVersion.cmake" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT cocpp19 -) +if(COCPP_Install) + configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/CoCpp19Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19Config.cmake" + INSTALL_DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + ) + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19ConfigVersion.cmake" + VERSION "1.0.0" + COMPATIBILITY AnyNewerVersion + ) + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/CoCpp19ConfigVersion.cmake" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT cocpp19 + ) +endif() diff --git a/CMakePresets.json b/CMakePresets.json index 455af186..dac2bfdd 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -12,9 +12,10 @@ "generator": "Ninja Multi-Config", "binaryDir": "${sourceDir}/build/${presetName}", "cacheVariables": { - "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", + "CMAKE_EXPORT_COMPILE_COMMANDS": true, "CMAKE_CTEST_ARGUMENTS": "--output-on-failure", - "CMAKE_CONFIGURATION_TYPES": "Debug;Release" + "CMAKE_CONFIGURATION_TYPES": "Debug;Release", + "INSTALL_GTEST": false } }, { diff --git a/src/array19.lib/CMakeLists.txt b/src/array19.lib/CMakeLists.txt index a23e61d1..74778b3f 100644 --- a/src/array19.lib/CMakeLists.txt +++ b/src/array19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include("array19/array19.cmake") -include("array19/array19.tests.cmake") + +if(COCPP_BuildTests) + include("array19/array19.tests.cmake") +endif() diff --git a/src/array19.lib/array19/array19.cmake b/src/array19.lib/array19/array19.cmake index 98d49b0c..7d53f7f6 100644 --- a/src/array19.lib/array19/array19.cmake +++ b/src/array19.lib/array19/array19.cmake @@ -1,30 +1,33 @@ add_library(array19 INTERFACE) target_compile_features(array19 - INTERFACE cxx_std_20 + INTERFACE cxx_std_20 ) target_include_directories(array19 - INTERFACE + INTERFACE $ $ ) file(GLOB array19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(array19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${array19_headers} ) add_library(CoCpp19::array19 ALIAS array19) -install(TARGETS array19 - EXPORT array19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "array19" -) -install(EXPORT array19Targets - FILE "CoCpp19-array19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "array19" -) + +if(COCPP_Install) + install(TARGETS array19 + EXPORT array19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "array19" + ) + install(EXPORT array19Targets + FILE "CoCpp19-array19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "array19" + ) +endif() diff --git a/src/array19.lib/array19/array19.tests.cmake b/src/array19.lib/array19/array19.tests.cmake index 67be8f82..7f992439 100644 --- a/src/array19.lib/array19/array19.tests.cmake +++ b/src/array19.lib/array19/array19.tests.cmake @@ -2,10 +2,10 @@ add_executable(array19-test) file(GLOB array19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(array19-test - PRIVATE ${array19_test_sources} + PRIVATE ${array19_test_sources} ) target_link_libraries(array19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::array19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::array19 ) add_test(NAME array19 COMMAND array19-test) diff --git a/src/coro19.lib/CMakeLists.txt b/src/coro19.lib/CMakeLists.txt index 40003bbb..ccbde5c9 100644 --- a/src/coro19.lib/CMakeLists.txt +++ b/src/coro19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(coro19/coro19.cmake) -include(coro19/coro19.tests.cmake) + +if(COCPP_BuildTests) + include(coro19/coro19.tests.cmake) +endif() diff --git a/src/coro19.lib/coro19/coro19.cmake b/src/coro19.lib/coro19/coro19.cmake index 7666f031..9b3ae7c3 100644 --- a/src/coro19.lib/coro19/coro19.cmake +++ b/src/coro19.lib/coro19/coro19.cmake @@ -1,33 +1,36 @@ add_library(coro19 STATIC) target_link_libraries(coro19 - PUBLIC CoCpp19::array19 + PUBLIC CoCpp19::array19 ) target_include_directories(coro19 - PUBLIC + PUBLIC $ $ ) file(GLOB coro19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(coro19 - PRIVATE "coro19/coroutine.cpp" - PUBLIC FILE_SET public_headers + PRIVATE "coro19/coroutine.cpp" + PUBLIC FILE_SET public_headers TYPE HEADERS FILES ${coro19_headers} ) add_library(CoCpp19::coro19 ALIAS coro19) -install(TARGETS coro19 - EXPORT coro19Targets - LIBRARY COMPONENT "coro19" - ARCHIVE COMPONENT "coro19" - RUNTIME COMPONENT "coro19" - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "coro19" -) -install(EXPORT coro19Targets - FILE "CoCpp19-coro19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "coro19" -) + +if(COCPP_Install) + install(TARGETS coro19 + EXPORT coro19Targets + LIBRARY COMPONENT "coro19" + ARCHIVE COMPONENT "coro19" + RUNTIME COMPONENT "coro19" + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "coro19" + ) + install(EXPORT coro19Targets + FILE "CoCpp19-coro19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "coro19" + ) +endif() diff --git a/src/coro19.lib/coro19/coro19.tests.cmake b/src/coro19.lib/coro19/coro19.tests.cmake index 0f0cfa15..c042c091 100644 --- a/src/coro19.lib/coro19/coro19.tests.cmake +++ b/src/coro19.lib/coro19/coro19.tests.cmake @@ -2,10 +2,10 @@ add_executable(coro19-test) file(GLOB coro19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(coro19-test - PRIVATE ${coro19_test_sources} + PRIVATE ${coro19_test_sources} ) target_link_libraries(coro19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::coro19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::coro19 ) add_test(NAME coro19 COMMAND coro19-test) diff --git a/src/enum19.lib/CMakeLists.txt b/src/enum19.lib/CMakeLists.txt index 1fce7e01..35ab49fb 100644 --- a/src/enum19.lib/CMakeLists.txt +++ b/src/enum19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(enum19/enum19.cmake) -include(enum19/enum19.tests.cmake) + +if(COCPP_BuildTests) + include(enum19/enum19.tests.cmake) +endif() diff --git a/src/enum19.lib/enum19/enum19.cmake b/src/enum19.lib/enum19/enum19.cmake index f9bbc0f3..9ffeda34 100644 --- a/src/enum19.lib/enum19/enum19.cmake +++ b/src/enum19.lib/enum19/enum19.cmake @@ -1,29 +1,32 @@ add_library(enum19 INTERFACE) target_link_libraries(enum19 - INTERFACE CoCpp19::string19 + INTERFACE CoCpp19::string19 ) target_include_directories(enum19 - INTERFACE + INTERFACE $ $ ) file(GLOB enum19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(enum19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${enum19_headers} ) add_library(CoCpp19::enum19 ALIAS enum19) -install(TARGETS enum19 - EXPORT enum19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "enum19" -) -install(EXPORT enum19Targets - FILE "CoCpp19-enum19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "enum19" -) + +if(COCPP_Install) + install(TARGETS enum19 + EXPORT enum19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "enum19" + ) + install(EXPORT enum19Targets + FILE "CoCpp19-enum19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "enum19" + ) +endif() diff --git a/src/enum19.lib/enum19/enum19.tests.cmake b/src/enum19.lib/enum19/enum19.tests.cmake index f2871aae..570d90f8 100644 --- a/src/enum19.lib/enum19/enum19.tests.cmake +++ b/src/enum19.lib/enum19/enum19.tests.cmake @@ -2,10 +2,10 @@ add_executable(enum19-test) file(GLOB enum19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(enum19-test - PRIVATE ${enum19_test_sources} + PRIVATE ${enum19_test_sources} ) target_link_libraries(enum19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::enum19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::enum19 ) add_test(NAME enum19 COMMAND enum19-test) diff --git a/src/flags19.lib/CMakeLists.txt b/src/flags19.lib/CMakeLists.txt index fb186ef7..df107ced 100644 --- a/src/flags19.lib/CMakeLists.txt +++ b/src/flags19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(flags19/flags19.cmake) -include(flags19/flags19.tests.cmake) + +if(COCPP_BuildTests) + include(flags19/flags19.tests.cmake) +endif() diff --git a/src/flags19.lib/flags19/flags19.cmake b/src/flags19.lib/flags19/flags19.cmake index e752bf18..a793b605 100644 --- a/src/flags19.lib/flags19/flags19.cmake +++ b/src/flags19.lib/flags19/flags19.cmake @@ -1,29 +1,32 @@ add_library(flags19 INTERFACE) target_link_libraries(flags19 - INTERFACE CoCpp19::enum19 + INTERFACE CoCpp19::enum19 ) target_include_directories(flags19 - INTERFACE + INTERFACE $ $ ) file(GLOB flags19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(flags19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${flags19_headers} ) add_library(CoCpp19::flags19 ALIAS flags19) -install(TARGETS flags19 - EXPORT flags19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "flags19" -) -install(EXPORT flags19Targets - FILE "CoCpp19-flags19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "flags19" -) + +if(COCPP_Install) + install(TARGETS flags19 + EXPORT flags19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "flags19" + ) + install(EXPORT flags19Targets + FILE "CoCpp19-flags19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "flags19" + ) +endif() diff --git a/src/flags19.lib/flags19/flags19.tests.cmake b/src/flags19.lib/flags19/flags19.tests.cmake index bd7a4c2e..5fd757d0 100644 --- a/src/flags19.lib/flags19/flags19.tests.cmake +++ b/src/flags19.lib/flags19/flags19.tests.cmake @@ -2,10 +2,10 @@ add_executable(flags19-test) file(GLOB flags19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(flags19-test - PRIVATE ${flags19_test_sources} + PRIVATE ${flags19_test_sources} ) target_link_libraries(flags19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::flags19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::flags19 ) add_test(NAME flags19 COMMAND flags19-test) diff --git a/src/lookup19.lib/CMakeLists.txt b/src/lookup19.lib/CMakeLists.txt index 3847ef25..3f98806e 100644 --- a/src/lookup19.lib/CMakeLists.txt +++ b/src/lookup19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(lookup19/lookup19.cmake) -include(lookup19/lookup19.tests.cmake) + +if(COCPP_BuildTests) + include(lookup19/lookup19.tests.cmake) +endif() diff --git a/src/lookup19.lib/lookup19/lookup19.cmake b/src/lookup19.lib/lookup19/lookup19.cmake index 790f527f..4a15c4ab 100644 --- a/src/lookup19.lib/lookup19/lookup19.cmake +++ b/src/lookup19.lib/lookup19/lookup19.cmake @@ -1,30 +1,33 @@ add_library(lookup19 INTERFACE) target_link_libraries(lookup19 - INTERFACE CoCpp19::array19 + INTERFACE CoCpp19::array19 ) target_include_directories(lookup19 - INTERFACE + INTERFACE $ $ ) file(GLOB lookup19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(lookup19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${lookup19_headers} ) add_library(CoCpp19::lookup19 ALIAS lookup19) -install(TARGETS lookup19 - EXPORT lookup19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "lookup19" -) -install(EXPORT lookup19Targets - FILE "CoCpp19-lookup19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "lookup19" -) + +if(COCPP_Install) + install(TARGETS lookup19 + EXPORT lookup19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "lookup19" + ) + install(EXPORT lookup19Targets + FILE "CoCpp19-lookup19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "lookup19" + ) +endif() diff --git a/src/lookup19.lib/lookup19/lookup19.tests.cmake b/src/lookup19.lib/lookup19/lookup19.tests.cmake index 3a90ee55..0e723e8d 100644 --- a/src/lookup19.lib/lookup19/lookup19.tests.cmake +++ b/src/lookup19.lib/lookup19/lookup19.tests.cmake @@ -2,10 +2,10 @@ add_executable(lookup19-test) file(GLOB lookup19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(lookup19-test - PRIVATE ${lookup19_test_sources} + PRIVATE ${lookup19_test_sources} ) target_link_libraries(lookup19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::lookup19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::lookup19 ) add_test(NAME lookup19 COMMAND lookup19-test) diff --git a/src/meta19.lib/CMakeLists.txt b/src/meta19.lib/CMakeLists.txt index 22e50993..82b4316b 100644 --- a/src/meta19.lib/CMakeLists.txt +++ b/src/meta19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(meta19/meta19.cmake) -include(meta19/meta19.tests.cmake) + +if(COCPP_BuildTests) + include(meta19/meta19.tests.cmake) +endif() diff --git a/src/meta19.lib/meta19/meta19.cmake b/src/meta19.lib/meta19/meta19.cmake index 7d4d5789..b69ce9de 100644 --- a/src/meta19.lib/meta19/meta19.cmake +++ b/src/meta19.lib/meta19/meta19.cmake @@ -1,30 +1,33 @@ add_library(meta19 INTERFACE) target_link_libraries(meta19 - INTERFACE CoCpp19::array19 + INTERFACE CoCpp19::array19 ) target_include_directories(meta19 - INTERFACE + INTERFACE $ $ ) file(GLOB meta19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(meta19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${meta19_headers} ) add_library(CoCpp19::meta19 ALIAS meta19) -install(TARGETS meta19 - EXPORT meta19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "meta19" -) -install(EXPORT meta19Targets - FILE "CoCpp19-meta19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "meta19" -) + +if(COCPP_Install) + install(TARGETS meta19 + EXPORT meta19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "meta19" + ) + install(EXPORT meta19Targets + FILE "CoCpp19-meta19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "meta19" + ) +endif() diff --git a/src/meta19.lib/meta19/meta19.tests.cmake b/src/meta19.lib/meta19/meta19.tests.cmake index e24c0c33..4b364ff5 100644 --- a/src/meta19.lib/meta19/meta19.tests.cmake +++ b/src/meta19.lib/meta19/meta19.tests.cmake @@ -2,10 +2,10 @@ add_executable(meta19-test) file(GLOB meta19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(meta19-test - PRIVATE ${meta19_test_sources} + PRIVATE ${meta19_test_sources} ) target_link_libraries(meta19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::meta19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::meta19 ) add_test(NAME meta19 COMMAND meta19-test) diff --git a/src/optional19.lib/CMakeLists.txt b/src/optional19.lib/CMakeLists.txt index c5bcba0d..cc48ca1f 100644 --- a/src/optional19.lib/CMakeLists.txt +++ b/src/optional19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(optional19/optional19.cmake) -include(optional19/optional19.tests.cmake) + +if(COCPP_BuildTests) + include(optional19/optional19.tests.cmake) +endif() diff --git a/src/optional19.lib/optional19/optional19.cmake b/src/optional19.lib/optional19/optional19.cmake index 4f73d816..e4d48626 100644 --- a/src/optional19.lib/optional19/optional19.cmake +++ b/src/optional19.lib/optional19/optional19.cmake @@ -1,30 +1,33 @@ add_library(optional19 INTERFACE) target_link_libraries(optional19 - INTERFACE CoCpp19::meta19 + INTERFACE CoCpp19::meta19 ) target_include_directories(optional19 - INTERFACE + INTERFACE $ $ ) file(GLOB optional19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(optional19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${optional19_headers} ) add_library(CoCpp19::optional19 ALIAS optional19) -install(TARGETS optional19 - EXPORT optional19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "optional19" -) -install(EXPORT optional19Targets - FILE "CoCpp19-optional19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "optional19" -) + +if(COCPP_Install) + install(TARGETS optional19 + EXPORT optional19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "optional19" + ) + install(EXPORT optional19Targets + FILE "CoCpp19-optional19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "optional19" + ) +endif() diff --git a/src/optional19.lib/optional19/optional19.tests.cmake b/src/optional19.lib/optional19/optional19.tests.cmake index 56a1c4ec..287cbccc 100644 --- a/src/optional19.lib/optional19/optional19.tests.cmake +++ b/src/optional19.lib/optional19/optional19.tests.cmake @@ -2,10 +2,10 @@ add_executable(optional19-test) file(GLOB optional19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(optional19-test - PRIVATE ${optional19_test_sources} + PRIVATE ${optional19_test_sources} ) target_link_libraries(optional19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::optional19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::optional19 ) add_test(NAME optional19 COMMAND optional19-test) diff --git a/src/partial19.lib/CMakeLists.txt b/src/partial19.lib/CMakeLists.txt index 896801c6..c8a67f28 100644 --- a/src/partial19.lib/CMakeLists.txt +++ b/src/partial19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(partial19/partial19.cmake) -include(partial19/partial19.tests.cmake) + +if(COCPP_BuildTests) + include(partial19/partial19.tests.cmake) +endif() diff --git a/src/partial19.lib/partial19/partial19.cmake b/src/partial19.lib/partial19/partial19.cmake index c718c43e..7298f790 100644 --- a/src/partial19.lib/partial19/partial19.cmake +++ b/src/partial19.lib/partial19/partial19.cmake @@ -1,30 +1,33 @@ add_library(partial19 INTERFACE) target_link_libraries(partial19 - INTERFACE CoCpp19::meta19 + INTERFACE CoCpp19::meta19 ) target_include_directories(partial19 - INTERFACE + INTERFACE $ $ ) file(GLOB partial19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(partial19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${partial19_headers} ) add_library(CoCpp19::partial19 ALIAS partial19) -install(TARGETS partial19 - EXPORT partial19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "partial19" -) -install(EXPORT partial19Targets - FILE "CoCpp19-partial19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "partial19" -) + +if(COCPP_Install) + install(TARGETS partial19 + EXPORT partial19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "partial19" + ) + install(EXPORT partial19Targets + FILE "CoCpp19-partial19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "partial19" + ) +endif() diff --git a/src/partial19.lib/partial19/partial19.tests.cmake b/src/partial19.lib/partial19/partial19.tests.cmake index 11fc9bdb..d6e89ace 100644 --- a/src/partial19.lib/partial19/partial19.tests.cmake +++ b/src/partial19.lib/partial19/partial19.tests.cmake @@ -2,10 +2,10 @@ add_executable(partial19-test) file(GLOB partial19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(partial19-test - PRIVATE ${partial19_test_sources} + PRIVATE ${partial19_test_sources} ) target_link_libraries(partial19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::partial19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::partial19 ) add_test(NAME partial19 COMMAND partial19-test) diff --git a/src/serialize19.lib/CMakeLists.txt b/src/serialize19.lib/CMakeLists.txt index 55ec57e4..6a7ede42 100644 --- a/src/serialize19.lib/CMakeLists.txt +++ b/src/serialize19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(serialize19/serialize19.cmake) -include(serialize19/serialize19.tests.cmake) + +if(COCPP_BuildTests) + include(serialize19/serialize19.tests.cmake) +endif() diff --git a/src/serialize19.lib/serialize19/serialize19.cmake b/src/serialize19.lib/serialize19/serialize19.cmake index 7eb57aaf..fbfe5709 100644 --- a/src/serialize19.lib/serialize19/serialize19.cmake +++ b/src/serialize19.lib/serialize19/serialize19.cmake @@ -1,30 +1,33 @@ add_library(serialize19 INTERFACE) target_link_libraries(serialize19 - INTERFACE CoCpp19::meta19 + INTERFACE CoCpp19::meta19 ) target_include_directories(serialize19 - INTERFACE + INTERFACE $ $ ) file(GLOB serialize19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(serialize19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${serialize19_headers} ) add_library(CoCpp19::serialize19 ALIAS serialize19) -install(TARGETS serialize19 - EXPORT serialize19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "serialize19" -) -install(EXPORT serialize19Targets - FILE "CoCpp19-serialize19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "serialize19" -) + +if(COCPP_Install) + install(TARGETS serialize19 + EXPORT serialize19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "serialize19" + ) + install(EXPORT serialize19Targets + FILE "CoCpp19-serialize19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "serialize19" + ) +endif() diff --git a/src/serialize19.lib/serialize19/serialize19.tests.cmake b/src/serialize19.lib/serialize19/serialize19.tests.cmake index 992258e4..377e2c1c 100644 --- a/src/serialize19.lib/serialize19/serialize19.tests.cmake +++ b/src/serialize19.lib/serialize19/serialize19.tests.cmake @@ -2,15 +2,15 @@ add_executable(serialize19-test) file(GLOB serialize19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(serialize19-test - PRIVATE ${serialize19_test_sources} + PRIVATE ${serialize19_test_sources} ) target_link_libraries(serialize19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::serialize19 - PRIVATE CoCpp19::optional19 - PRIVATE CoCpp19::partial19 - PRIVATE CoCpp19::string19 - PRIVATE CoCpp19::tuple19 - PRIVATE CoCpp19::variant19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::serialize19 + PRIVATE CoCpp19::optional19 + PRIVATE CoCpp19::partial19 + PRIVATE CoCpp19::string19 + PRIVATE CoCpp19::tuple19 + PRIVATE CoCpp19::variant19 ) add_test(NAME serialize19 COMMAND serialize19-test) diff --git a/src/signal19.lib/CMakeLists.txt b/src/signal19.lib/CMakeLists.txt index edcd760c..0eb617b9 100644 --- a/src/signal19.lib/CMakeLists.txt +++ b/src/signal19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(signal19/signal19.cmake) -include(signal19/signal19.tests.cmake) + +if(COCPP_BuildTests) + include(signal19/signal19.tests.cmake) +endif() diff --git a/src/signal19.lib/signal19/signal19.cmake b/src/signal19.lib/signal19/signal19.cmake index 407a029f..c316699e 100644 --- a/src/signal19.lib/signal19/signal19.cmake +++ b/src/signal19.lib/signal19/signal19.cmake @@ -1,30 +1,33 @@ add_library(signal19 INTERFACE) target_link_libraries(signal19 - INTERFACE CoCpp19::array19 + INTERFACE CoCpp19::array19 ) target_include_directories(signal19 - INTERFACE + INTERFACE $ $ ) file(GLOB signal19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(signal19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${signal19_headers} ) add_library(CoCpp19::signal19 ALIAS signal19) -install(TARGETS signal19 - EXPORT signal19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "signal19" -) -install(EXPORT signal19Targets - FILE "CoCpp19-signal19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "signal19" -) + +if(COCPP_Install) + install(TARGETS signal19 + EXPORT signal19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "signal19" + ) + install(EXPORT signal19Targets + FILE "CoCpp19-signal19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "signal19" + ) +endif() diff --git a/src/signal19.lib/signal19/signal19.tests.cmake b/src/signal19.lib/signal19/signal19.tests.cmake index 07ff1e96..1948d05e 100644 --- a/src/signal19.lib/signal19/signal19.tests.cmake +++ b/src/signal19.lib/signal19/signal19.tests.cmake @@ -2,10 +2,10 @@ add_executable(signal19-test) file(GLOB signal19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(signal19-test - PRIVATE ${signal19_test_sources} + PRIVATE ${signal19_test_sources} ) target_link_libraries(signal19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::signal19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::signal19 ) add_test(NAME signal19 COMMAND signal19-test) diff --git a/src/string19.lib/CMakeLists.txt b/src/string19.lib/CMakeLists.txt index f2248036..1f2635f3 100644 --- a/src/string19.lib/CMakeLists.txt +++ b/src/string19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(string19/string19.cmake) -include(string19/string19.tests.cmake) + +if(COCPP_BuildTests) + include(string19/string19.tests.cmake) +endif() diff --git a/src/string19.lib/string19/string19.cmake b/src/string19.lib/string19/string19.cmake index f071e8ad..8c3eb1bc 100644 --- a/src/string19.lib/string19/string19.cmake +++ b/src/string19.lib/string19/string19.cmake @@ -1,30 +1,33 @@ add_library(string19 INTERFACE) target_link_libraries(string19 - INTERFACE CoCpp19::tuple19 + INTERFACE CoCpp19::tuple19 ) target_include_directories(string19 - INTERFACE + INTERFACE $ $ ) file(GLOB string19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(string19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${string19_headers} ) add_library(CoCpp19::string19 ALIAS string19) -install(TARGETS string19 - EXPORT string19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "string19" -) -install(EXPORT string19Targets - FILE "CoCpp19-string19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "string19" -) + +if(COCPP_Install) + install(TARGETS string19 + EXPORT string19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "string19" + ) + install(EXPORT string19Targets + FILE "CoCpp19-string19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "string19" + ) +endif() diff --git a/src/string19.lib/string19/string19.tests.cmake b/src/string19.lib/string19/string19.tests.cmake index 74dae857..574b727c 100644 --- a/src/string19.lib/string19/string19.tests.cmake +++ b/src/string19.lib/string19/string19.tests.cmake @@ -2,10 +2,10 @@ add_executable(string19-test) file(GLOB string19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(string19-test - PRIVATE ${string19_test_sources} + PRIVATE ${string19_test_sources} ) target_link_libraries(string19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::string19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::string19 ) add_test(NAME string19 COMMAND string19-test) diff --git a/src/strong19.lib/CMakeLists.txt b/src/strong19.lib/CMakeLists.txt index 1fb2182e..7551ab95 100644 --- a/src/strong19.lib/CMakeLists.txt +++ b/src/strong19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(strong19/strong19.cmake) -include(strong19/strong19.tests.cmake) + +if(COCPP_BuildTests) + include(strong19/strong19.tests.cmake) +endif() diff --git a/src/strong19.lib/strong19/strong19.cmake b/src/strong19.lib/strong19/strong19.cmake index 790407b8..623dc077 100644 --- a/src/strong19.lib/strong19/strong19.cmake +++ b/src/strong19.lib/strong19/strong19.cmake @@ -1,30 +1,33 @@ add_library(strong19 INTERFACE) target_link_libraries(strong19 - INTERFACE CoCpp19::string19 + INTERFACE CoCpp19::string19 ) target_include_directories(strong19 - INTERFACE + INTERFACE $ $ ) file(GLOB strong19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(strong19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${strong19_headers} ) add_library(CoCpp19::strong19 ALIAS strong19) -install(TARGETS strong19 - EXPORT strong19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "strong19" -) -install(EXPORT strong19Targets - FILE "CoCpp19-strong19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "strong19" -) + +if(COCPP_Install) + install(TARGETS strong19 + EXPORT strong19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "strong19" + ) + install(EXPORT strong19Targets + FILE "CoCpp19-strong19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "strong19" + ) +endif() diff --git a/src/strong19.lib/strong19/strong19.tests.cmake b/src/strong19.lib/strong19/strong19.tests.cmake index f26ceb3a..c657e856 100644 --- a/src/strong19.lib/strong19/strong19.tests.cmake +++ b/src/strong19.lib/strong19/strong19.tests.cmake @@ -2,10 +2,10 @@ add_executable(strong19-test) file(GLOB strong19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(strong19-test - PRIVATE ${strong19_test_sources} + PRIVATE ${strong19_test_sources} ) target_link_libraries(strong19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::strong19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::strong19 ) add_test(NAME strong19 COMMAND strong19-test) diff --git a/src/tuple19.lib/CMakeLists.txt b/src/tuple19.lib/CMakeLists.txt index e7b1f985..71f4656e 100644 --- a/src/tuple19.lib/CMakeLists.txt +++ b/src/tuple19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(tuple19/tuple19.cmake) -include(tuple19/tuple19.tests.cmake) + +if(COCPP_BuildTests) + include(tuple19/tuple19.tests.cmake) +endif() diff --git a/src/tuple19.lib/tuple19/tuple19.cmake b/src/tuple19.lib/tuple19/tuple19.cmake index 62986cc5..b41c11ea 100644 --- a/src/tuple19.lib/tuple19/tuple19.cmake +++ b/src/tuple19.lib/tuple19/tuple19.cmake @@ -1,30 +1,33 @@ add_library(tuple19 INTERFACE) target_link_libraries(tuple19 - INTERFACE CoCpp19::meta19 + INTERFACE CoCpp19::meta19 ) target_include_directories(tuple19 - INTERFACE + INTERFACE $ $ ) file(GLOB tuple19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(tuple19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${tuple19_headers} ) add_library(CoCpp19::tuple19 ALIAS tuple19) -install(TARGETS tuple19 - EXPORT tuple19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "tuple19" -) -install(EXPORT tuple19Targets - FILE "CoCpp19-tuple19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "tuple19" -) + +if(COCPP_Install) + install(TARGETS tuple19 + EXPORT tuple19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "tuple19" + ) + install(EXPORT tuple19Targets + FILE "CoCpp19-tuple19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "tuple19" + ) +endif() diff --git a/src/tuple19.lib/tuple19/tuple19.tests.cmake b/src/tuple19.lib/tuple19/tuple19.tests.cmake index d1e48223..634ff57a 100644 --- a/src/tuple19.lib/tuple19/tuple19.tests.cmake +++ b/src/tuple19.lib/tuple19/tuple19.tests.cmake @@ -2,10 +2,10 @@ add_executable(tuple19-test) file(GLOB tuple19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(tuple19-test - PRIVATE ${tuple19_test_sources} + PRIVATE ${tuple19_test_sources} ) target_link_libraries(tuple19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::tuple19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::tuple19 ) add_test(NAME tuple19 COMMAND tuple19-test) diff --git a/src/variant19.lib/CMakeLists.txt b/src/variant19.lib/CMakeLists.txt index 15f5824d..0762d380 100644 --- a/src/variant19.lib/CMakeLists.txt +++ b/src/variant19.lib/CMakeLists.txt @@ -1,3 +1,6 @@ include(variant19/variant19.cmake) -include(variant19/variant19.tests.cmake) + +if(COCPP_BuildTests) + include(variant19/variant19.tests.cmake) +endif() diff --git a/src/variant19.lib/variant19/variant19.cmake b/src/variant19.lib/variant19/variant19.cmake index 1b37b5ed..5f29f171 100644 --- a/src/variant19.lib/variant19/variant19.cmake +++ b/src/variant19.lib/variant19/variant19.cmake @@ -1,30 +1,33 @@ add_library(variant19 INTERFACE) target_link_libraries(variant19 - INTERFACE CoCpp19::meta19 + INTERFACE CoCpp19::meta19 ) target_include_directories(variant19 - INTERFACE + INTERFACE $ $ ) file(GLOB variant19_headers "${CMAKE_CURRENT_LIST_DIR}/*.h") target_sources(variant19 - INTERFACE FILE_SET public_headers + INTERFACE FILE_SET public_headers TYPE HEADERS FILES ${variant19_headers} ) add_library(CoCpp19::variant19 ALIAS variant19) -install(TARGETS variant19 - EXPORT variant19Targets - FILE_SET public_headers - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT "variant19" -) -install(EXPORT variant19Targets - FILE "CoCpp19-variant19-targets.cmake" - NAMESPACE "CoCpp19::" - DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} - COMPONENT "variant19" -) + +if(COCPP_Install) + install(TARGETS variant19 + EXPORT variant19Targets + FILE_SET public_headers + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT "variant19" + ) + install(EXPORT variant19Targets + FILE "CoCpp19-variant19-targets.cmake" + NAMESPACE "CoCpp19::" + DESTINATION ${COCPP19_CMAKE_CONFIG_DESTINATION} + COMPONENT "variant19" + ) +endif() diff --git a/src/variant19.lib/variant19/variant19.tests.cmake b/src/variant19.lib/variant19/variant19.tests.cmake index 6fc14c23..7b5a7eb5 100644 --- a/src/variant19.lib/variant19/variant19.tests.cmake +++ b/src/variant19.lib/variant19/variant19.tests.cmake @@ -2,10 +2,10 @@ add_executable(variant19-test) file(GLOB variant19_test_sources "${CMAKE_CURRENT_LIST_DIR}/*.test.cpp") target_sources(variant19-test - PRIVATE ${variant19_test_sources} + PRIVATE ${variant19_test_sources} ) target_link_libraries(variant19-test - PRIVATE GTest::gtest_main - PRIVATE CoCpp19::variant19 + PRIVATE GTest::gtest_main + PRIVATE CoCpp19::variant19 ) add_test(NAME variant19 COMMAND variant19-test) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 3b06d86d..4a8c0a0b 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -1 +1,3 @@ -include(googletest.cmake) \ No newline at end of file +if(COCPP_BuildTests) + include(googletest.cmake) +endif() diff --git a/third_party/googletest.cmake b/third_party/googletest.cmake index 485e7b19..64409c53 100644 --- a/third_party/googletest.cmake +++ b/third_party/googletest.cmake @@ -1,41 +1,14 @@ include(FetchContent) +find_package(GTest QUIET) find_package(Threads REQUIRED) set(THREADS_PREFER_PTHREAD_FLAG ON) if(NOT ${GTest_FOUND}) - FetchContent_Declare( - googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.11.0 - ) - FetchContent_GetProperties(googletest) - if(NOT googletest_POPULATED) - FetchContent_Populate(googletest) - - set(gtest_SOURCE_DIR "${googletest_SOURCE_DIR}/googletest") - add_library(gtest STATIC - "${gtest_SOURCE_DIR}/src/gtest-all.cc" - ) - target_include_directories(gtest - PRIVATE "${gtest_SOURCE_DIR}" - PUBLIC "${gtest_SOURCE_DIR}/include" - ) - if(NOT ${CMAKE_USE_PTHREADS_INIT}) - target_compile_definitions(gtest - PUBLIC GTEST_HAS_PTHREAD=0 - ) - endif() - target_link_libraries(gtest - PRIVATE Threads::Threads - ) - add_library(GTest::gtest ALIAS gtest) - - add_library(gtest_main STATIC - "${gtest_SOURCE_DIR}/src/gtest_main.cc" - ) - target_link_libraries(gtest_main - PUBLIC gtest + FetchContent_Declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG v1.17.0 + CMAKE_ARGS -DINSTALL_GTEST:BOOL=OFF ) - add_library(GTest::gtest_main ALIAS gtest_main) - endif() + FetchContent_MakeAvailable(googletest) endif() From f5ba7fc7395ffbeef1cea2711588f000d3ab487f Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sat, 24 Jan 2026 16:06:19 +0100 Subject: [PATCH 5/6] Add missing include --- src/signal19.lib/signal19/SignalWith.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/signal19.lib/signal19/SignalWith.h b/src/signal19.lib/signal19/SignalWith.h index 5a73df59..610e4174 100644 --- a/src/signal19.lib/signal19/SignalWith.h +++ b/src/signal19.lib/signal19/SignalWith.h @@ -4,6 +4,7 @@ #include #include +#include namespace signal19 { From f6837c57b3bfdae28cf558dc0076a39345590b87 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sun, 25 Jan 2026 18:46:23 +0100 Subject: [PATCH 6/6] Add clang21 devcontainer * uses devcontainer dev version --- .../clang17.Dockerfile => clang21/clang21.Dockerfile} | 10 ++++++---- .devcontainer/{clang17 => clang21}/devcontainer.json | 7 ++++--- 2 files changed, 10 insertions(+), 7 deletions(-) rename .devcontainer/{clang17/clang17.Dockerfile => clang21/clang21.Dockerfile} (83%) rename .devcontainer/{clang17 => clang21}/devcontainer.json (60%) diff --git a/.devcontainer/clang17/clang17.Dockerfile b/.devcontainer/clang21/clang21.Dockerfile similarity index 83% rename from .devcontainer/clang17/clang17.Dockerfile rename to .devcontainer/clang21/clang21.Dockerfile index 9c72e5c5..c81dff5a 100644 --- a/.devcontainer/clang17/clang17.Dockerfile +++ b/.devcontainer/clang21/clang21.Dockerfile @@ -1,11 +1,12 @@ -FROM mcr.microsoft.com/devcontainers/base:alpine-3.20 +FROM mcr.microsoft.com/devcontainers/base:dev-alpine3.23 RUN \ apk add --update --no-cache \ - clang17 \ + clang21 \ libc++-dev \ cmake \ ninja \ + qbs \ git \ gdb \ linux-headers \ @@ -25,5 +26,6 @@ RUN \ && echo "end" >>/home/vscode/.gdbinit ENV \ - CC=/usr/bin/clang \ - CXX=/usr/bin/clang++ + PATH="/usr/lib/llvm21/bin:${PATH}" \ + CC=/usr/bin/clang-21 \ + CXX=/usr/bin/clang++-21 diff --git a/.devcontainer/clang17/devcontainer.json b/.devcontainer/clang21/devcontainer.json similarity index 60% rename from .devcontainer/clang17/devcontainer.json rename to .devcontainer/clang21/devcontainer.json index 2abe01d6..11216cac 100644 --- a/.devcontainer/clang17/devcontainer.json +++ b/.devcontainer/clang21/devcontainer.json @@ -1,7 +1,7 @@ { - "name": "cocpp19-clang17", + "name": "cocpp19-clang21", "build": { - "dockerfile": "./clang17.Dockerfile", + "dockerfile": "./clang21.Dockerfile", "context": "." }, "customizations": { @@ -9,7 +9,8 @@ "extensions": [ "ms-vscode.cpptools", "ms-vscode.cmake-tools", - "ms-python.python" + "ms-python.python", + "qbs-community.qbs-tools" ] } },