From b9e0849e39a33f7afe4b0f83f8585baf09143dd9 Mon Sep 17 00:00:00 2001 From: bramtechs Date: Fri, 20 Dec 2024 20:16:45 +0100 Subject: [PATCH 1/7] ci build and test --- .github/workflows/build.yml | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0de4a03 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,57 @@ +name: CMake with GoogleTest on multiple platforms + +on: + pull_request: + branches: "*" + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: true + matrix: + os: [ubuntu-latest, windows-latest] + build_type: [Release] + c_compiler: [gcc, clang, cl] + include: + - os: windows-latest + c_compiler: cl + cpp_compiler: cl + - os: ubuntu-latest + c_compiler: gcc + cpp_compiler: g++ + - os: ubuntu-latest + c_compiler: clang + cpp_compiler: clang++ + exclude: + - os: windows-latest + c_compiler: gcc + - os: windows-latest + c_compiler: clang + - os: ubuntu-latest + c_compiler: cl + + steps: + - uses: actions/checkout@v4 + + - name: Set reusable strings + id: strings + shell: bash + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + + - name: Configure CMake + run: > + cmake -B ${{ steps.strings.outputs.build-output-dir }} + -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} + -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + -S ${{ github.workspace }} + + - name: Build + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} + + - name: Test + working-directory: ${{ steps.strings.outputs.build-output-dir }} + run: ctest --output-on-failure --build-config ${{ matrix.build_type }} From 8f6aaeb67800d81f9bf7567555b60d22e047e210 Mon Sep 17 00:00:00 2001 From: bramtechs Date: Fri, 20 Dec 2024 20:23:22 +0100 Subject: [PATCH 2/7] move up static methods --- multini.hh | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/multini.hh b/multini.hh index 589ce77..83df67a 100644 --- a/multini.hh +++ b/multini.hh @@ -33,6 +33,19 @@ public: } private: + static auto countPrefix(const std::string_view& sv, char ch) + { + return std::ranges::distance(sv + | std::views::take_while([ch](char c) { return c == ch; })); + } + + static auto countSuffix(const std::string_view& sv, char ch) + { + return std::ranges::distance(sv + | std::views::reverse + | std::views::take_while([ch](char c) { return c == ch; })); + } + class Line { public: Line(const std::string_view& line, int lineNum = 0, ErrorBag* errors = nullptr) @@ -121,19 +134,6 @@ private: }); } - static auto countPrefix(const std::string_view& sv, char ch) - { - return std::ranges::distance(sv - | std::views::take_while([ch](char c) { return c == ch; })); - } - - static auto countSuffix(const std::string_view& sv, char ch) - { - return std::ranges::distance(sv - | std::views::reverse - | std::views::take_while([ch](char c) { return c == ch; })); - } - ErrorBag mErrors {}; std::multimap> mSections {}; }; From fcb1f4a72a093a408723a635a722a58cfccfaaaa Mon Sep 17 00:00:00 2001 From: bramtechs Date: Fri, 20 Dec 2024 20:26:42 +0100 Subject: [PATCH 3/7] no fail fast --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0de4a03..c20fc39 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,7 +9,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: - fail-fast: true + fail-fast: false matrix: os: [ubuntu-latest, windows-latest] build_type: [Release] From 47baea314e262e98c7ba5d290d5edf4941de49e9 Mon Sep 17 00:00:00 2001 From: bramtechs Date: Fri, 20 Dec 2024 20:55:28 +0100 Subject: [PATCH 4/7] try to get newer compilers for ci --- .github/workflows/build.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c20fc39..bef36b3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,6 +49,18 @@ jobs: -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -S ${{ github.workspace }} + # Install latest compilers on Ubuntu + - name: Install latest GCC and Clang (Ubuntu) + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt update + sudo apt install -y gcc-14 g++-14 clang-18 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 10 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 10 + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 10 + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 10 + + - name: Build run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} From 488b223ab7a9b1889b0aee052b507654dd0e4d2f Mon Sep 17 00:00:00 2001 From: bramtechs Date: Fri, 20 Dec 2024 20:55:36 +0100 Subject: [PATCH 5/7] linux cmake preset --- CMakePresets.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakePresets.json b/CMakePresets.json index 73c3ee8..f5366e0 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -5,6 +5,11 @@ "name": "windows", "generator": "Visual Studio 17 2022", "binaryDir": "${sourceDir}/build" + }, + { + "name": "linux", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build" } ] } From 5215d674373f3cad7d547fe1b3e75ad79d5b8cfb Mon Sep 17 00:00:00 2001 From: bramtechs Date: Fri, 20 Dec 2024 21:02:11 +0100 Subject: [PATCH 6/7] try new ci action --- .github/workflows/build.yml | 65 ++++++++----------------------------- 1 file changed, 14 insertions(+), 51 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bef36b3..bd936d2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,64 +6,27 @@ on: jobs: build: - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest] - build_type: [Release] - c_compiler: [gcc, clang, cl] - include: - - os: windows-latest - c_compiler: cl - cpp_compiler: cl - - os: ubuntu-latest - c_compiler: gcc - cpp_compiler: g++ - - os: ubuntu-latest - c_compiler: clang - cpp_compiler: clang++ - exclude: - - os: windows-latest - c_compiler: gcc - - os: windows-latest - c_compiler: clang - - os: ubuntu-latest - c_compiler: cl - + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set reusable strings - id: strings - shell: bash - run: | - echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" - + - name: Install compiler + id: install_cc + uses: rlalik/setup-cpp-compiler@master + with: + compiler: latest + - name: Configure CMake run: > - cmake -B ${{ steps.strings.outputs.build-output-dir }} - -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} - -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} - -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + cmake -B build + -DCMAKE_CXX_COMPILER=${{ steps.install_cc.outputs.cxx }} + -DCMAKE_C_COMPILER=${{ steps.install_cc.outputs.cc }} + -DCMAKE_BUILD_TYPE=Debug -S ${{ github.workspace }} - - # Install latest compilers on Ubuntu - - name: Install latest GCC and Clang (Ubuntu) - if: matrix.os == 'ubuntu-latest' - run: | - sudo apt update - sudo apt install -y gcc-14 g++-14 clang-18 - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 10 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 10 - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 10 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 10 - - name: Build - run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} + run: cmake --build build --parallel - name: Test - working-directory: ${{ steps.strings.outputs.build-output-dir }} - run: ctest --output-on-failure --build-config ${{ matrix.build_type }} + working-directory: build + run: ctest --output-on-failure From bd91676a058819af76daba5fe75a6bbdfb1b77d8 Mon Sep 17 00:00:00 2001 From: bramtechs Date: Tue, 24 Dec 2024 16:07:51 +0100 Subject: [PATCH 7/7] cmake define library --- CMakeLists.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e2e1a03..b97dead 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,20 @@ project (multini) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) +add_library(${PROJECT_NAME} INTERFACE + multini.hh +) +target_include_directories(${PROJECT_NAME} INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR} +) + +# Check if cmake is being used directly or via add_subdirectory +if(NOT MULTINI_TESTS AND CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set(MULTINI_TESTS ON) +endif() + +if (MULTINI_TESTS) + include(FetchContent) FetchContent_Declare( googletest @@ -21,8 +35,11 @@ add_executable (multini_tests multini_tests.cc multini.hh) target_link_libraries( multini_tests + ${PROJECT_NAME} GTest::gtest_main ) include(GoogleTest) gtest_discover_tests(multini_tests) + +endif() \ No newline at end of file