From 5b6aeea31082fec77edeb05960a8bd79ceabce6d Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 11 Nov 2025 15:42:30 -0800 Subject: [PATCH 01/16] Testing CPP library update --- .github/workflows/ci.yml | 169 +++++++++++++++++++++++++++------------ .vscode/extensions.json | 1 - CMakeLists.txt | 3 +- CMakePresets.json | 17 +++- 4 files changed, 136 insertions(+), 54 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e98ecea..bfed9d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,9 +5,9 @@ name: CI on: push: - branches: [ main, develop ] + branches: [main, develop] pull_request: - branches: [ main ] + branches: [main] release: types: [published] @@ -32,42 +32,109 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - - name: Configure CMake - run: cmake --preset=test + - name: Configure CMake + run: cmake --preset=test - - name: Build - run: cmake --build --preset=test + - name: Build + run: cmake --build --preset=test - - name: Test - run: ctest --preset=test + - name: Test + run: ctest --preset=test - clang-tidy: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 + install-test: + name: Test Installation (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + needs: test + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] - - name: Setup Ninja - uses: ashutoshvarma/setup-ninja@master + steps: + - uses: actions/checkout@v5 + + - name: Build and Install + run: | + cmake --preset=default + cmake --build --preset=default + cmake --install build/default --prefix ${{ runner.temp }}/install + + - name: Test find_package + shell: bash + run: | + # Create a minimal test to verify the installation works with find_package + mkdir -p ${{ runner.temp }}/test-find-package + cd ${{ runner.temp }}/test-find-package + + # Get project name from CMakeLists.txt + PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}') + + # Create test CMakeLists.txt + cat > CMakeLists.txt << EOF + cmake_minimum_required(VERSION 3.20) + project(test-find-package CXX) + + set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") + find_package(\${PROJECT_NAME} REQUIRED) + + message(STATUS "Successfully found \${PROJECT_NAME}") + EOF + + # Test find_package + cmake -B build -S . + + - name: Test CPMFindPackage + shell: bash + run: | + # Create test to verify CPMFindPackage works (tries find_package first, then CPM) + mkdir -p ${{ runner.temp }}/test-cpm + cd ${{ runner.temp }}/test-cpm + + # Download CPM.cmake + mkdir cmake + curl -L https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake -o cmake/CPM.cmake + + # Get project name from CMakeLists.txt + PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}') + + # Create test CMakeLists.txt that uses CPMFindPackage + cat > CMakeLists.txt << EOF + cmake_minimum_required(VERSION 3.20) + project(test-cpm CXX) + + set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") + set(CPM_SOURCE_CACHE \${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "CPM cache") + include(cmake/CPM.cmake) + + # CPMFindPackage tries find_package first, then falls back to CPMAddPackage + CPMFindPackage( + NAME \${PROJECT_NAME} + GITHUB_REPOSITORY ${{ github.repository }} + GIT_TAG ${{ github.sha }} + ) + + message(STATUS "Successfully acquired \${PROJECT_NAME} via CPMFindPackage") + EOF + + # Test CPMFindPackage (should find the installed version first) + cmake -B build -S . - - name: Setup Clang - uses: egor-tensin/setup-clang@v1 - with: - version: latest + clang-tidy: + runs-on: ubuntu-latest - - name: Install clang-tidy - run: sudo apt-get update && sudo apt-get install -y clang-tidy + steps: + - uses: actions/checkout@v5 - - name: Configure CMake with clang-tidy - run: cmake --preset=clang-tidy + - name: Configure CMake with clang-tidy + run: cmake --preset=clang-tidy - - name: Build with clang-tidy - run: cmake --build --preset=clang-tidy + - name: Build with clang-tidy + run: cmake --build --preset=clang-tidy - - name: Run tests with clang-tidy - run: ctest --preset=clang-tidy + - name: Run tests with clang-tidy + run: ctest --preset=clang-tidy docs: runs-on: ubuntu-latest @@ -76,27 +143,27 @@ jobs: id-token: write pages: write contents: read - + steps: - - uses: actions/checkout@v5 - - - name: Install Doxygen - uses: ssciwr/doxygen-install@v1 - - - name: Configure CMake - run: cmake --preset=docs - - - name: Build Documentation - run: cmake --build --preset=docs - - - name: Setup Pages - uses: actions/configure-pages@v5 - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: build/docs/html - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - uses: actions/checkout@v5 + + - name: Install Doxygen + uses: ssciwr/doxygen-install@v1 + + - name: Configure CMake + run: cmake --preset=docs + + - name: Build Documentation + run: cmake --build --preset=docs + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v4 + with: + path: build/docs/html + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 63a4875..6ffa416 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,4 @@ { - "_comment": "Auto-generated from cpp-library (https://github.com/stlab/cpp-library) - Do not edit this file directly", "recommendations": [ "matepek.vscode-catch2-test-adapter", "llvm-vs-code-extensions.vscode-clangd", diff --git a/CMakeLists.txt b/CMakeLists.txt index c7ab98c..53c0525 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,8 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library@4.0.3") +CPMAddPackage("gh:stlab/cpp-library#3ab13f2be3b835fd1e6feaab7845088c31642eba") +# CPMAddPackage("gh:stlab/cpp-library@4.0.3") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) # Let cpp-library handle the project declaration and version detection diff --git a/CMakePresets.json b/CMakePresets.json index 1e805dd..c61386b 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -68,6 +68,20 @@ "CMAKE_CXX_EXTENSIONS": "OFF", "CPP_LIBRARY_FORCE_INIT": "ON" } + }, + { + "name": "install", + "displayName": "Local Install Test", + "description": "Configuration for testing installation locally (installs to build/install/prefix)", + "binaryDir": "${sourceDir}/build/install", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "BUILD_TESTING": "OFF", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", + "CMAKE_CXX_EXTENSIONS": "OFF", + "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/prefix" + } } ], "buildPresets": [ @@ -75,7 +89,8 @@ { "name": "test", "displayName": "Build Tests", "configurePreset": "test" }, { "name": "docs", "displayName": "Build Docs", "configurePreset": "docs", "targets": "docs" }, { "name": "clang-tidy", "displayName": "Build with Clang-Tidy", "configurePreset": "clang-tidy" }, - { "name": "init", "displayName": "Initialize Templates", "configurePreset": "init" } + { "name": "init", "displayName": "Initialize Templates", "configurePreset": "init" }, + { "name": "install", "displayName": "Build for Local Install", "configurePreset": "install" } ], "testPresets": [ { "name": "test", "displayName": "Run All Tests", "configurePreset": "test", "output": { "outputOnFailure": true } }, From 634a6508c94ece57c51f5356df6aa9d300e64aca Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 11 Nov 2025 15:54:29 -0800 Subject: [PATCH 02/16] Simplifying installation test. --- .github/workflows/ci.yml | 42 +++------------------------------------- 1 file changed, 3 insertions(+), 39 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bfed9d7..4f6c526 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: cd ${{ runner.temp }}/test-find-package # Get project name from CMakeLists.txt - PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}') + THIS_PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}') # Create test CMakeLists.txt cat > CMakeLists.txt << EOF @@ -77,50 +77,14 @@ jobs: project(test-find-package CXX) set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") - find_package(\${PROJECT_NAME} REQUIRED) + find_package(${THIS_PROJECT_NAME} REQUIRED) - message(STATUS "Successfully found \${PROJECT_NAME}") + message(STATUS "Successfully found ${THIS_PROJECT_NAME}") EOF # Test find_package cmake -B build -S . - - name: Test CPMFindPackage - shell: bash - run: | - # Create test to verify CPMFindPackage works (tries find_package first, then CPM) - mkdir -p ${{ runner.temp }}/test-cpm - cd ${{ runner.temp }}/test-cpm - - # Download CPM.cmake - mkdir cmake - curl -L https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake -o cmake/CPM.cmake - - # Get project name from CMakeLists.txt - PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}') - - # Create test CMakeLists.txt that uses CPMFindPackage - cat > CMakeLists.txt << EOF - cmake_minimum_required(VERSION 3.20) - project(test-cpm CXX) - - set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") - set(CPM_SOURCE_CACHE \${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "CPM cache") - include(cmake/CPM.cmake) - - # CPMFindPackage tries find_package first, then falls back to CPMAddPackage - CPMFindPackage( - NAME \${PROJECT_NAME} - GITHUB_REPOSITORY ${{ github.repository }} - GIT_TAG ${{ github.sha }} - ) - - message(STATUS "Successfully acquired \${PROJECT_NAME} via CPMFindPackage") - EOF - - # Test CPMFindPackage (should find the installed version first) - cmake -B build -S . - clang-tidy: runs-on: ubuntu-latest From 019328424c7c14896b277f0529752ed88b1be6f6 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 11 Nov 2025 16:06:48 -0800 Subject: [PATCH 03/16] Updating library templates and version. --- .github/workflows/ci.yml | 42 +++++++++++++++++++++++++++++++++++++--- CMakeLists.txt | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f6c526..b9c1b70 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: cd ${{ runner.temp }}/test-find-package # Get project name from CMakeLists.txt - THIS_PROJECT_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\(.*\))/\1/' | awk '{print $1}') + PACKAGE_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') # Create test CMakeLists.txt cat > CMakeLists.txt << EOF @@ -77,14 +77,50 @@ jobs: project(test-find-package CXX) set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") - find_package(${THIS_PROJECT_NAME} REQUIRED) + find_package(${PACKAGE_NAME} REQUIRED) - message(STATUS "Successfully found ${THIS_PROJECT_NAME}") + message(STATUS "Successfully found ${PACKAGE_NAME}") EOF # Test find_package cmake -B build -S . + - name: Test CPMFindPackage + shell: bash + run: | + # Create test to verify CPMFindPackage works (tries find_package first, then CPM) + mkdir -p ${{ runner.temp }}/test-cpm + cd ${{ runner.temp }}/test-cpm + + # Download CPM.cmake + mkdir cmake + curl -L https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake -o cmake/CPM.cmake + + # Get project name from CMakeLists.txt + PACKAGE_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') + + # Create test CMakeLists.txt that uses CPMFindPackage + cat > CMakeLists.txt << EOF + cmake_minimum_required(VERSION 3.20) + project(test-cpm CXX) + + set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") + set(CPM_SOURCE_CACHE \${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "CPM cache") + include(cmake/CPM.cmake) + + # CPMFindPackage tries find_package first, then falls back to CPMAddPackage + CPMFindPackage( + NAME ${PACKAGE_NAME} + GITHUB_REPOSITORY ${{ github.repository }} + GIT_TAG ${{ github.sha }} + ) + + message(STATUS "Successfully acquired ${PACKAGE_NAME} via CPMFindPackage") + EOF + + # Test CPMFindPackage (should find the installed version first) + cmake -B build -S . + clang-tidy: runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index 22aa54a..161b816 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#3ab13f2be3b835fd1e6feaab7845088c31642eba") +CPMAddPackage("gh:stlab/cpp-library#79bc0a0f8680185273ae33477f9fbd7b6d137ccb") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 131405de99ab297ca4e0734d30e100bc48435f8d Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 11 Nov 2025 16:18:36 -0800 Subject: [PATCH 04/16] Updating to fix Windows quoting issue. --- .github/workflows/ci.yml | 4 ++-- CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9c1b70..574fd28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: cd ${{ runner.temp }}/test-find-package # Get project name from CMakeLists.txt - PACKAGE_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') + PACKAGE_NAME=$(grep -m1 "project(" "${{ github.workspace }}/CMakeLists.txt" | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') # Create test CMakeLists.txt cat > CMakeLists.txt << EOF @@ -97,7 +97,7 @@ jobs: curl -L https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake -o cmake/CPM.cmake # Get project name from CMakeLists.txt - PACKAGE_NAME=$(grep -m1 "project(" ${{ github.workspace }}/CMakeLists.txt | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') + PACKAGE_NAME=$(grep -m1 "project(" "${{ github.workspace }}/CMakeLists.txt" | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') # Create test CMakeLists.txt that uses CPMFindPackage cat > CMakeLists.txt << EOF diff --git a/CMakeLists.txt b/CMakeLists.txt index 161b816..35fc5c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#79bc0a0f8680185273ae33477f9fbd7b6d137ccb") +CPMAddPackage("gh:stlab/cpp-library#7d2ce0bb48837e89b00a4dc1eb780acc04ba89ca") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 399d509a3de066935bdb1ee912e15f52d6c7b01a Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 11 Nov 2025 16:25:35 -0800 Subject: [PATCH 05/16] Trying again to fix quote issue. --- .github/workflows/ci.yml | 10 ++++++++-- CMakeLists.txt | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 574fd28..e0dba04 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,12 +71,15 @@ jobs: # Get project name from CMakeLists.txt PACKAGE_NAME=$(grep -m1 "project(" "${{ github.workspace }}/CMakeLists.txt" | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') + # Convert paths to forward slashes for CMake (works on all platforms) + INSTALL_PREFIX=$(echo "${{ runner.temp }}/install" | sed 's|\\|/|g') + # Create test CMakeLists.txt cat > CMakeLists.txt << EOF cmake_minimum_required(VERSION 3.20) project(test-find-package CXX) - set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") + set(CMAKE_PREFIX_PATH "${INSTALL_PREFIX}") find_package(${PACKAGE_NAME} REQUIRED) message(STATUS "Successfully found ${PACKAGE_NAME}") @@ -99,12 +102,15 @@ jobs: # Get project name from CMakeLists.txt PACKAGE_NAME=$(grep -m1 "project(" "${{ github.workspace }}/CMakeLists.txt" | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') + # Convert paths to forward slashes for CMake (works on all platforms) + INSTALL_PREFIX=$(echo "${{ runner.temp }}/install" | sed 's|\\|/|g') + # Create test CMakeLists.txt that uses CPMFindPackage cat > CMakeLists.txt << EOF cmake_minimum_required(VERSION 3.20) project(test-cpm CXX) - set(CMAKE_PREFIX_PATH "${{ runner.temp }}/install") + set(CMAKE_PREFIX_PATH "${INSTALL_PREFIX}") set(CPM_SOURCE_CACHE \${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "CPM cache") include(cmake/CPM.cmake) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35fc5c4..d29b9f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#7d2ce0bb48837e89b00a4dc1eb780acc04ba89ca") +CPMAddPackage("gh:stlab/cpp-library#eb92bfda330b7752725f895fb90397ee52aea9e1") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From f2923f6443f8ffd1662c152b20de5a1d2459fd1a Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 11 Nov 2025 16:33:16 -0800 Subject: [PATCH 06/16] Testing latest cpp-library. --- .github/workflows/ci.yml | 39 --------------------------------------- CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 40 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0dba04..8ba32b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -88,45 +88,6 @@ jobs: # Test find_package cmake -B build -S . - - name: Test CPMFindPackage - shell: bash - run: | - # Create test to verify CPMFindPackage works (tries find_package first, then CPM) - mkdir -p ${{ runner.temp }}/test-cpm - cd ${{ runner.temp }}/test-cpm - - # Download CPM.cmake - mkdir cmake - curl -L https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake -o cmake/CPM.cmake - - # Get project name from CMakeLists.txt - PACKAGE_NAME=$(grep -m1 "project(" "${{ github.workspace }}/CMakeLists.txt" | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') - - # Convert paths to forward slashes for CMake (works on all platforms) - INSTALL_PREFIX=$(echo "${{ runner.temp }}/install" | sed 's|\\|/|g') - - # Create test CMakeLists.txt that uses CPMFindPackage - cat > CMakeLists.txt << EOF - cmake_minimum_required(VERSION 3.20) - project(test-cpm CXX) - - set(CMAKE_PREFIX_PATH "${INSTALL_PREFIX}") - set(CPM_SOURCE_CACHE \${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "CPM cache") - include(cmake/CPM.cmake) - - # CPMFindPackage tries find_package first, then falls back to CPMAddPackage - CPMFindPackage( - NAME ${PACKAGE_NAME} - GITHUB_REPOSITORY ${{ github.repository }} - GIT_TAG ${{ github.sha }} - ) - - message(STATUS "Successfully acquired ${PACKAGE_NAME} via CPMFindPackage") - EOF - - # Test CPMFindPackage (should find the installed version first) - cmake -B build -S . - clang-tidy: runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index d29b9f7..c9c4754 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#eb92bfda330b7752725f895fb90397ee52aea9e1") +CPMAddPackage("gh:stlab/cpp-library#b2d8e3ca8fe830d3c6ff6098f78dd8933f7b2437") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 0c3fc5123690202bd2e5344bbdb176d6e7fee871 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 11 Nov 2025 17:37:31 -0800 Subject: [PATCH 07/16] Another test. --- .github/workflows/ci.yml | 49 ++++++++++++++++++++-------------------- CMakeLists.txt | 2 +- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ba32b2..2986d13 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,21 +13,23 @@ on: jobs: test: + name: Test (${{ matrix.name }}) strategy: + fail-fast: false matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - compiler: [gcc, clang, msvc] - exclude: - - os: ubuntu-latest - compiler: msvc - - os: macos-latest - compiler: msvc - - os: macos-latest - compiler: gcc - - os: windows-latest - compiler: gcc - - os: windows-latest - compiler: clang + include: + - name: Ubuntu GCC + os: ubuntu-latest + cc: gcc + cxx: g++ + - name: Ubuntu Clang + os: ubuntu-latest + cc: clang + cxx: clang++ + - name: macOS + os: macos-latest + - name: Windows + os: windows-latest runs-on: ${{ matrix.os }} @@ -36,6 +38,9 @@ jobs: - name: Configure CMake run: cmake --preset=test + env: + CC: ${{ matrix.cc }} + CXX: ${{ matrix.cxx }} - name: Build run: cmake --build --preset=test @@ -68,25 +73,21 @@ jobs: mkdir -p ${{ runner.temp }}/test-find-package cd ${{ runner.temp }}/test-find-package - # Get project name from CMakeLists.txt - PACKAGE_NAME=$(grep -m1 "project(" "${{ github.workspace }}/CMakeLists.txt" | sed 's/project(\([^)]*\)).*/\1/' | awk '{print $1}') - - # Convert paths to forward slashes for CMake (works on all platforms) - INSTALL_PREFIX=$(echo "${{ runner.temp }}/install" | sed 's|\\|/|g') - # Create test CMakeLists.txt cat > CMakeLists.txt << EOF cmake_minimum_required(VERSION 3.20) project(test-find-package CXX) - set(CMAKE_PREFIX_PATH "${INSTALL_PREFIX}") - find_package(${PACKAGE_NAME} REQUIRED) + find_package(stlab-enum-ops REQUIRED) - message(STATUS "Successfully found ${PACKAGE_NAME}") + message(STATUS "Successfully found stlab-enum-ops") EOF - # Test find_package - cmake -B build -S . + # Convert paths to forward slashes for CMake (works on all platforms) + INSTALL_PREFIX=$(echo "${{ runner.temp }}/install" | sed 's|\\|/|g') + + # Test find_package with CMAKE_PREFIX_PATH + cmake -B build -S . -DCMAKE_PREFIX_PATH="${INSTALL_PREFIX}" clang-tidy: runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index c9c4754..fe20869 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#b2d8e3ca8fe830d3c6ff6098f78dd8933f7b2437") +CPMAddPackage("gh:stlab/cpp-library#77c30bc9d7b0c35359a1f0ef951e63e60e24edf7") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 4e99dad9fa269f458b7980dea65a107e705f4c98 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Wed, 12 Nov 2025 09:59:45 -0800 Subject: [PATCH 08/16] Update CI workflow to conditionally run steps Added conditional execution for environment setup and CMake configuration steps based on the presence of matrix.cc. --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2986d13..7e0dfd2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,6 +41,11 @@ jobs: env: CC: ${{ matrix.cc }} CXX: ${{ matrix.cxx }} + if: ${{ matrix.cc }} + + - name: Configure CMake + run: cmake --preset=test + if: ${{ !matrix.cc }} - name: Build run: cmake --build --preset=test From 7cf4b7cc931707def5b998682610c2ffc0364cc6 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Wed, 12 Nov 2025 10:08:31 -0800 Subject: [PATCH 09/16] Update stlab/cpp-library dependency version Changed the stlab/cpp-library commit hash in CPMAddPackage to 69e1aff67499f3fb227f279a5472e46d312b3a84 for improved compatibility or bug fixes. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe20869..070b16b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#77c30bc9d7b0c35359a1f0ef951e63e60e24edf7") +CPMAddPackage("gh:stlab/cpp-library#69e1aff67499f3fb227f279a5472e46d312b3a84") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 695b637e1e4b4f6d5f75a3ec0b716c12529bf88a Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Mon, 17 Nov 2025 17:01:53 -0800 Subject: [PATCH 10/16] Update stlab/cpp-library to latest commit Bumped the stlab/cpp-library dependency from commit 69e1aff to 39419e2 to incorporate recent changes and improvements from the upstream repository. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 070b16b..c202c2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#69e1aff67499f3fb227f279a5472e46d312b3a84") +CPMAddPackage("gh:stlab/cpp-library#39419e2eb68019fcf8db3af237316308ddf3ec59") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 49254ebead33fb2d3f5ed3926bfe5ac81e9c2de0 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Mon, 17 Nov 2025 17:27:46 -0800 Subject: [PATCH 11/16] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c202c2a..a5341f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#39419e2eb68019fcf8db3af237316308ddf3ec59") +CPMAddPackage("gh:stlab/cpp-library#e940916f9d3d3de0c2993fcbd33b18b3e1a1e767") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 59d55c159fe33f6ef538bc55424c1c8faa97b2b3 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Mon, 17 Nov 2025 17:30:57 -0800 Subject: [PATCH 12/16] Regerate ci template. --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7e0dfd2..1a928b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,9 +83,9 @@ jobs: cmake_minimum_required(VERSION 3.20) project(test-find-package CXX) - find_package(stlab-enum-ops REQUIRED) + find_package(enum-ops REQUIRED) - message(STATUS "Successfully found stlab-enum-ops") + message(STATUS "Successfully found enum-ops") EOF # Convert paths to forward slashes for CMake (works on all platforms) From 09a264eedeb94197a4280489cfa6b54b958e7100 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 18 Nov 2025 10:13:49 -0800 Subject: [PATCH 13/16] Update CI workflow and cpp-library dependency Removes the install-test job from the CI workflow and updates the stlab/cpp-library dependency to a new commit hash in CMakeLists.txt. Also fixes quoting in INSTALL_PREFIX assignment for cross-platform compatibility. --- .github/workflows/ci.yml | 14 +------------- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a928b6..6126eec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,18 +53,6 @@ jobs: - name: Test run: ctest --preset=test - install-test: - name: Test Installation (${{ matrix.os }}) - runs-on: ${{ matrix.os }} - needs: test - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - - steps: - - uses: actions/checkout@v5 - - name: Build and Install run: | cmake --preset=default @@ -89,7 +77,7 @@ jobs: EOF # Convert paths to forward slashes for CMake (works on all platforms) - INSTALL_PREFIX=$(echo "${{ runner.temp }}/install" | sed 's|\\|/|g') + INSTALL_PREFIX=$(echo '${{ runner.temp }}/install' | sed 's|\\|/|g') # Test find_package with CMAKE_PREFIX_PATH cmake -B build -S . -DCMAKE_PREFIX_PATH="${INSTALL_PREFIX}" diff --git a/CMakeLists.txt b/CMakeLists.txt index a5341f1..ca8db5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#e940916f9d3d3de0c2993fcbd33b18b3e1a1e767") +CPMAddPackage("gh:stlab/cpp-library#0516b9be7607caaea6737b552b1acdb9c9c620bc") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 4081373f7acbcac5afa174b67a47bb9259698c95 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 18 Nov 2025 11:41:12 -0800 Subject: [PATCH 14/16] Update project name and dependency references Renamed the CMake project from 'stlab-enum-ops' to 'enum-ops' and updated the referenced dependency hash for 'cpp-library'. Also updated the CI workflow to use the new project name in find_package and status messages. --- .github/workflows/ci.yml | 4 ++-- CMakeLists.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6126eec..3029f9a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,9 +71,9 @@ jobs: cmake_minimum_required(VERSION 3.20) project(test-find-package CXX) - find_package(enum-ops REQUIRED) + find_package(stlab-enum-ops REQUIRED) - message(STATUS "Successfully found enum-ops") + message(STATUS "Successfully found stlab-enum-ops") EOF # Convert paths to forward slashes for CMake (works on all platforms) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca8db5b..bb958bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.20) # Project declaration - cpp_library_setup will use this name and detect version from git tags -project(stlab-enum-ops) +project(enum-ops) # Setup cpp-library infrastructure if(PROJECT_IS_TOP_LEVEL) @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#0516b9be7607caaea6737b552b1acdb9c9c620bc") +CPMAddPackage("gh:stlab/cpp-library#e4a3ee5dc2da1d05d44a7b74a142c94a53de8003") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From 809d3c362da4b42c5bf7eacd13d455ee9367be15 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Tue, 18 Nov 2025 12:05:29 -0800 Subject: [PATCH 15/16] Update CI workflow and cpp-library dependency The CI workflow now sets CC and CXX environment variables conditionally based on the matrix, and splits the build/install steps accordingly. The cpp-library dependency is updated to commit 4f09b3b7f0abcc4ef1b39060ce03784920ce32e5 in CMakeLists.txt. --- .github/workflows/ci.yml | 11 +++++++++++ CMakeLists.txt | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3029f9a..4a000ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,6 +58,17 @@ jobs: cmake --preset=default cmake --build --preset=default cmake --install build/default --prefix ${{ runner.temp }}/install + env: + CC: ${{ matrix.cc }} + CXX: ${{ matrix.cxx }} + if: ${{ matrix.cc }} + + - name: Build and Install + run: | + cmake --preset=default + cmake --build --preset=default + cmake --install build/default --prefix ${{ runner.temp }}/install + if: ${{ !matrix.cc }} - name: Test find_package shell: bash diff --git a/CMakeLists.txt b/CMakeLists.txt index bb958bc..ba89763 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ include(cmake/CPM.cmake) # NAME cpp-library # URL "${CMAKE_SOURCE_DIR}/../cpp-library" # ) -CPMAddPackage("gh:stlab/cpp-library#e4a3ee5dc2da1d05d44a7b74a142c94a53de8003") +CPMAddPackage("gh:stlab/cpp-library#4f09b3b7f0abcc4ef1b39060ce03784920ce32e5") # CPMAddPackage("gh:stlab/cpp-library@4.0.5") include(${cpp-library_SOURCE_DIR}/cpp-library.cmake) From d212a134e91a6e465b6ddaa07085313501926ec8 Mon Sep 17 00:00:00 2001 From: Sean Parent Date: Thu, 20 Nov 2025 13:45:37 -0800 Subject: [PATCH 16/16] Making cache default setting more robust. --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba89763..7c8ef19 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,8 +4,9 @@ cmake_minimum_required(VERSION 3.20) project(enum-ops) # Setup cpp-library infrastructure -if(PROJECT_IS_TOP_LEVEL) - set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "CPM cache") +if(PROJECT_IS_TOP_LEVEL AND NOT CPM_SOURCE_CACHE AND NOT DEFINED ENV{CPM_SOURCE_CACHE}) + set(CPM_SOURCE_CACHE "${CMAKE_SOURCE_DIR}/.cache/cpm" CACHE PATH "CPM source cache") + message(STATUS "Setting cpm cache dir to: ${CPM_SOURCE_CACHE}") endif() include(cmake/CPM.cmake)