From 677c212a2183f4cd900a9b3a4bb95d8d628c922f Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Fri, 14 Feb 2025 21:30:13 +0100 Subject: [PATCH 01/15] test: Add initial cmake_tests for testing cmake find_package In order to test the cmake configuration of this repository, add a test CMake project which uses this library as a dependency. This project will then be built with the different possible configurations to ensure they work as expected. --- CMakeLists.txt | 1 + test/CMakeLists.txt | 29 +++++++++++++++ .../cmake_tests/build_and_install_ppplugin.sh | 18 +++++++++ .../find_package_test/CMakeLists.txt | 22 +++++++++++ test/cmake_tests/find_package_test/a.cpp | 13 +++++++ test/cmake_tests/find_package_test/a.lua | 3 ++ test/cmake_tests/find_package_test/test.sh | 37 +++++++++++++++++++ 7 files changed, 123 insertions(+) create mode 100755 test/cmake_tests/build_and_install_ppplugin.sh create mode 100644 test/cmake_tests/find_package_test/CMakeLists.txt create mode 100644 test/cmake_tests/find_package_test/a.cpp create mode 100644 test/cmake_tests/find_package_test/a.lua create mode 100755 test/cmake_tests/find_package_test/test.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index fa5b942..9658cbf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,5 +129,6 @@ if(${PPPLUGIN_ENABLE_EXAMPLES}) add_subdirectory(examples) endif() if(${PPPLUGIN_ENABLE_TESTS}) + enable_testing() add_subdirectory(test) endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 90e9f6a..220f948 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,3 +9,32 @@ target_include_directories(${TESTS_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include) target_link_libraries( ${TESTS_NAME} PRIVATE GTest::GTest GTest::Main gmock Threads::Threads ${LIBRARY_TARGET_STATIC}) + +add_test( + NAME cmake_shared_cpp17_compatible_installation_test + COMMAND + test.sh ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_shared "SHARED" "Cpp17" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) +add_test( + NAME cmake_shared_cpp20_compatible_installation_test + COMMAND + test.sh ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_shared "SHARED" "Cpp20" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) +add_test( + NAME cmake_static_cpp17_compatible_installation_test + COMMAND + test.sh ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static "STATIC" "Cpp17" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) +add_test( + NAME cmake_static_cpp20_compatible_installation_test + COMMAND + test.sh ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static "STATIC" "Cpp20" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) diff --git a/test/cmake_tests/build_and_install_ppplugin.sh b/test/cmake_tests/build_and_install_ppplugin.sh new file mode 100755 index 0000000..0c49237 --- /dev/null +++ b/test/cmake_tests/build_and_install_ppplugin.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e +set -x + +ROOT_SOURCE_DIR="${1}" +BUILD_DIR="${2}" +INSTALL_ROOT="${3}" +BUILD_SHARED="${4}" + +echo "Building ppplugin library (shared: ${BUILD_SHARED})..." + +echo "Use sources at '${ROOT_SOURCE_DIR}'..." +cmake "${ROOT_SOURCE_DIR}" -B "${BUILD_DIR}" -DPPPLUGIN_SHARED="${BUILD_SHARED}" +echo "Build in '${BUILD_DIR}'..." +cmake --build "${BUILD_DIR}" +echo "Install to '${INSTALL_ROOT}'..." +cmake --install "${BUILD_DIR}" --prefix "${INSTALL_ROOT}/usr/local" diff --git a/test/cmake_tests/find_package_test/CMakeLists.txt b/test/cmake_tests/find_package_test/CMakeLists.txt new file mode 100644 index 0000000..2c087a4 --- /dev/null +++ b/test/cmake_tests/find_package_test/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.10 FATAL_ERROR) + +project(a) + +find_package(ppplugin REQUIRED) + +message(DEBUG "ppplugin found: ${ppplugin_FOUND}") +message(DEBUG "ppplugin should be shared library: ${PPPLUGIN_SHARED}") +message(DEBUG "ppplugin library dir: ${PPPLUGIN_LIBRARY_DIR}") +message(DEBUG "ppplugin include dir: ${PPPLUGIN_INCLUDE_DIR}") +message( + DEBUG + "ppplugin should be C++17 compatible: ${PPPLUGIN_ENABLE_CPP17_COMPATIBILITY}") + +if(${PPPLUGIN_ENABLE_CPP17_COMPATIBILITY}) + set(CMAKE_CXX_STANDARD 17) +else() + set(CMAKE_CXX_STANDARD 20) +endif() + +add_executable(a a.cpp) +target_link_libraries(a PUBLIC ppplugin::ppplugin) diff --git a/test/cmake_tests/find_package_test/a.cpp b/test/cmake_tests/find_package_test/a.cpp new file mode 100644 index 0000000..10471cd --- /dev/null +++ b/test/cmake_tests/find_package_test/a.cpp @@ -0,0 +1,13 @@ +#include + +#include + +int main(int argc, char* /*argv*/[]) +{ + auto plugin = ppplugin::LuaPlugin::load("a.lua"); + if (plugin) { + std::cout << plugin->call("Main", argc).value().value() << '\n'; + } else { + std::cerr << "Error: " << static_cast(plugin.error().value()) << '\n'; + } +} diff --git a/test/cmake_tests/find_package_test/a.lua b/test/cmake_tests/find_package_test/a.lua new file mode 100644 index 0000000..ce89077 --- /dev/null +++ b/test/cmake_tests/find_package_test/a.lua @@ -0,0 +1,3 @@ +function Main(a) + return a + 10 +end diff --git a/test/cmake_tests/find_package_test/test.sh b/test/cmake_tests/find_package_test/test.sh new file mode 100755 index 0000000..92f4f86 --- /dev/null +++ b/test/cmake_tests/find_package_test/test.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +set -e +set -x + +ROOT_SOURCE_DIR="${1}" +BUILD_DIR="${2}" +INSTALL_ROOT="${3}" + +if [ "${4}" = "SHARED" ]; then + TEST_SHARED=ON +elif [ "${4}" = "STATIC" ]; then + TEST_SHARED=OFF +else + echo "Fourth argument must be 'SHARED' or 'STATIC'" + return +fi + +if [ "${5}" = "Cpp17" ]; then + TEST_CPP17_COMPATIBILITY=ON +elif [ "${5}" = "Cpp20" ]; then + TEST_CPP17_COMPATIBILITY=OFF +else + echo "Fifth argument must be 'Cpp17' or 'Cpp20'" + return +fi + +TEST_BUILD_DIR="${BUILD_DIR}/shared_${TEST_SHARED}_cpp17_${TEST_CPP17_COMPATIBILITY}" +EXECUTABLE_NAME="${TEST_BUILD_DIR}/a" + +"${ROOT_SOURCE_DIR}/test/cmake_tests/build_and_install_ppplugin.sh" "${ROOT_SOURCE_DIR}" "${BUILD_DIR}/ppplugin_build_shared_${TEST_SHARED}" "${INSTALL_ROOT}" "${TEST_SHARED}" + +CMAKE_PREFIX_PATH="${INSTALL_ROOT}/usr/local/lib/cmake" \ + cmake . --log-level DEBUG -B "${TEST_BUILD_DIR}" -DPPPLUGIN_SHARED="${TEST_SHARED}" -DPPPLUGIN_ENABLE_CPP17_COMPATIBILITY="${TEST_CPP17_COMPATIBILITY}" +cmake --build "${TEST_BUILD_DIR}" + +"${EXECUTABLE_NAME}" From 6bb5d912e1efd4e2dc400ad76c5059adca89a7c1 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Fri, 14 Feb 2025 21:56:11 +0100 Subject: [PATCH 02/15] test: Add additional cmake_tests for expected failure These tests are expected to fail because they try to use the shared library when only the static version is installed and the other way around. --- test/CMakeLists.txt | 19 +++++++++++++ test/cmake_tests/find_package_test/test.sh | 31 ++++++++++++++-------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 220f948..360449e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -38,3 +38,22 @@ add_test( ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static "STATIC" "Cpp20" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) + +add_test( + NAME cmake_no_shared_installation_test + COMMAND + test.sh ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_shared_fail "SHARED_FAIL" + "Cpp20" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) +set_property(TEST cmake_no_shared_installation_test PROPERTY WILL_FAIL TRUE) +add_test( + NAME cmake_no_static_installation_test + COMMAND + test.sh ${CMAKE_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static_fail "STATIC_FAIL" + "Cpp20" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) +set_property(TEST cmake_no_static_installation_test PROPERTY WILL_FAIL TRUE) diff --git a/test/cmake_tests/find_package_test/test.sh b/test/cmake_tests/find_package_test/test.sh index 92f4f86..92e310e 100755 --- a/test/cmake_tests/find_package_test/test.sh +++ b/test/cmake_tests/find_package_test/test.sh @@ -7,22 +7,22 @@ ROOT_SOURCE_DIR="${1}" BUILD_DIR="${2}" INSTALL_ROOT="${3}" -if [ "${4}" = "SHARED" ]; then - TEST_SHARED=ON -elif [ "${4}" = "STATIC" ]; then - TEST_SHARED=OFF +if [ "${4}" = "SHARED" ] || [ "${4}" = "STATIC_FAIL" ]; then + TEST_SHARED=ON +elif [ "${4}" = "STATIC" ] || [ "${4}" = "SHARED_FAIL" ]; then + TEST_SHARED=OFF else - echo "Fourth argument must be 'SHARED' or 'STATIC'" - return + echo "Fourth argument must be 'SHARED', 'STATIC', 'SHARED_FAIL' or 'STATIC_FAIL'" + return fi if [ "${5}" = "Cpp17" ]; then - TEST_CPP17_COMPATIBILITY=ON + TEST_CPP17_COMPATIBILITY=ON elif [ "${5}" = "Cpp20" ]; then - TEST_CPP17_COMPATIBILITY=OFF + TEST_CPP17_COMPATIBILITY=OFF else - echo "Fifth argument must be 'Cpp17' or 'Cpp20'" - return + echo "Fifth argument must be 'Cpp17' or 'Cpp20'" + return fi TEST_BUILD_DIR="${BUILD_DIR}/shared_${TEST_SHARED}_cpp17_${TEST_CPP17_COMPATIBILITY}" @@ -30,8 +30,17 @@ EXECUTABLE_NAME="${TEST_BUILD_DIR}/a" "${ROOT_SOURCE_DIR}/test/cmake_tests/build_and_install_ppplugin.sh" "${ROOT_SOURCE_DIR}" "${BUILD_DIR}/ppplugin_build_shared_${TEST_SHARED}" "${INSTALL_ROOT}" "${TEST_SHARED}" +# if it is a test with expected failure, switch dependency to opposite library type to provoke error +if [ "${4}" = "SHARED_FAIL" ]; then + TEST_SHARED=ON + TEST_BUILD_DIR="${TEST_BUILD_DIR}_shared_fail" +elif [ "${4}" = "STATIC_FAIL" ]; then + TEST_SHARED=OFF + TEST_BUILD_DIR="${TEST_BUILD_DIR}_static_fail" +fi + CMAKE_PREFIX_PATH="${INSTALL_ROOT}/usr/local/lib/cmake" \ - cmake . --log-level DEBUG -B "${TEST_BUILD_DIR}" -DPPPLUGIN_SHARED="${TEST_SHARED}" -DPPPLUGIN_ENABLE_CPP17_COMPATIBILITY="${TEST_CPP17_COMPATIBILITY}" + cmake . --log-level DEBUG -B "${TEST_BUILD_DIR}" -DPPPLUGIN_SHARED="${TEST_SHARED}" -DPPPLUGIN_ENABLE_CPP17_COMPATIBILITY="${TEST_CPP17_COMPATIBILITY}" cmake --build "${TEST_BUILD_DIR}" "${EXECUTABLE_NAME}" From 38b775b0b4973ce686d208b67d48784ed4b27a5a Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Fri, 14 Feb 2025 22:15:57 +0100 Subject: [PATCH 03/15] test: Register all gtest tests in CTest --- test/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 360449e..3d303df 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -10,6 +10,8 @@ target_link_libraries( ${TESTS_NAME} PRIVATE GTest::GTest GTest::Main gmock Threads::Threads ${LIBRARY_TARGET_STATIC}) +gtest_discover_tests(${TESTS_NAME}) + add_test( NAME cmake_shared_cpp17_compatible_installation_test COMMAND From 611f2eafa33a0b4e7f9e7cdaadb8ca1df6cb2656 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Sun, 16 Feb 2025 20:59:22 +0100 Subject: [PATCH 04/15] ci: Rename cpp-build.yml to build-and-test.yml --- .github/workflows/{cpp-build.yml => build-and-test.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{cpp-build.yml => build-and-test.yml} (100%) diff --git a/.github/workflows/cpp-build.yml b/.github/workflows/build-and-test.yml similarity index 100% rename from .github/workflows/cpp-build.yml rename to .github/workflows/build-and-test.yml From b0ff748e49f46c2465cff52fb0591449e9ede345 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Sun, 16 Feb 2025 20:57:43 +0100 Subject: [PATCH 05/15] ci: Run cmake_tests in CI For this, an additional job was added to the build-and-test workflow. --- .github/workflows/build-and-test.yml | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 7c5215f..c981ec6 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -144,3 +144,50 @@ jobs: --legend coverage_without_system_and_test_files lcov --list coverage_without_system_and_test_files shell: alpine.sh {0} + + ctest: + name: "ctest" + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v4 + with: + name: build_alpine-v3.20_g++_cpp17 + path: build + - name: Fix artifact permissions + run: chmod +x build/test/tests + + - uses: jirutka/setup-alpine@v1 + with: + branch: v3.20 + packages: > + cmake + ninja-build + g++ + boost-dev + boost-filesystem + boost-python3 + lua5.2-dev + python3-dev + fmt-dev + gtest-dev + - name: Fixup environment + run: | + ln -s /usr/lib/ninja-build/bin/ninja /usr/bin/ninja + ln -s liblua-5.2.so.0 /usr/lib/liblua-5.2.so + shell: alpine.sh --root {0} + + - name: Run cmake tests + run: | + cd build + ctest -R cmake_ + env: + CMAKE_GENERATOR: Ninja + shell: alpine.sh {0} + - uses: actions/upload-artifact@v4 + if: success() || failure() + with: + name: cmake_tests_results + path: build/Testing/Temporary + retention-days: 2 From 6f82270eca0d00bce4b797a1eae644becd839e61 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Mon, 17 Feb 2025 00:29:11 +0100 Subject: [PATCH 06/15] cmake: Fix PPPLUGIN_ENABLE_CPP17_COMPATIBILITY Previously, the fmt::fmt target was not imported when this library was imported via cmake. Additionally, the necessary compile definition is set in projects using it as a dependency via the target-specific target_compile_definitions(). --- CMakeLists.txt | 2 -- cmake/ppplugin-config.cmake.in | 4 ++++ src/CMakeLists.txt | 3 +++ test/CMakeLists.txt | 5 ++--- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9658cbf..cd5acfe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,8 +60,6 @@ set(DEBUG_FLAGS "-g3") if(${PPPLUGIN_ENABLE_CPP17_COMPATIBILITY}) find_package(fmt 8.1.0 REQUIRED) set(CMAKE_CXX_STANDARD 17) - # TODO: generate C++17 compatible header files instead - add_definitions("-DPPPLUGIN_CPP17_COMPATIBILITY") else() set(CMAKE_CXX_STANDARD 20) endif() diff --git a/cmake/ppplugin-config.cmake.in b/cmake/ppplugin-config.cmake.in index b6e2c5d..9d24d6b 100644 --- a/cmake/ppplugin-config.cmake.in +++ b/cmake/ppplugin-config.cmake.in @@ -6,6 +6,10 @@ find_dependency(Boost @Boost_VERSION_MAJOR@ COMPONENTS headers filesystem find_dependency(Python @Python_VERSION_MAJOR@ COMPONENTS Development) find_dependency(Lua @LUA_VERSION_MAJOR@) +if(${PPPLUGIN_ENABLE_CPP17_COMPATIBILITY}) + find_dependency(fmt @fmt_VERSION_MAJOR@) +endif() + check_required_components("@PROJECT_NAME@") set(PPPLUGIN_INCLUDE_DIR ${PACKAGE_PREFIX_DIR}/include) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1be4a5f..3f99946 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,6 +24,9 @@ target_include_directories( PRIVATE ${LUA_INCLUDE_DIR} PUBLIC $ PUBLIC $) +target_compile_definitions( + ${LIBRARY_TARGET} PUBLIC $<$: + "PPPLUGIN_CPP17_COMPATIBILITY">) set_target_properties( ${LIBRARY_TARGET} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3d303df..41c233d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,9 +6,8 @@ add_executable(${TESTS_NAME} detail_templates_tests.cpp expected_tests.cpp scope_guard_tests.cpp) target_include_directories(${TESTS_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include) -target_link_libraries( - ${TESTS_NAME} PRIVATE GTest::GTest GTest::Main gmock Threads::Threads - ${LIBRARY_TARGET_STATIC}) +target_link_libraries(${TESTS_NAME} PRIVATE GTest::GTest GTest::Main gmock + Threads::Threads ${LIBRARY_TARGET}) gtest_discover_tests(${TESTS_NAME}) From 9bb06174d20664ea88c07248af4853e90963207f Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Mon, 17 Feb 2025 00:31:46 +0100 Subject: [PATCH 07/15] test: Compile library with cpp17 compatibility in cmake_tests if necessary --- test/cmake_tests/build_and_install_ppplugin.sh | 3 ++- test/cmake_tests/find_package_test/test.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/test/cmake_tests/build_and_install_ppplugin.sh b/test/cmake_tests/build_and_install_ppplugin.sh index 0c49237..e27f123 100755 --- a/test/cmake_tests/build_and_install_ppplugin.sh +++ b/test/cmake_tests/build_and_install_ppplugin.sh @@ -7,11 +7,12 @@ ROOT_SOURCE_DIR="${1}" BUILD_DIR="${2}" INSTALL_ROOT="${3}" BUILD_SHARED="${4}" +BUILD_CPP17_COMPATIBLE="${5}" echo "Building ppplugin library (shared: ${BUILD_SHARED})..." echo "Use sources at '${ROOT_SOURCE_DIR}'..." -cmake "${ROOT_SOURCE_DIR}" -B "${BUILD_DIR}" -DPPPLUGIN_SHARED="${BUILD_SHARED}" +cmake "${ROOT_SOURCE_DIR}" -B "${BUILD_DIR}" -DPPPLUGIN_SHARED="${BUILD_SHARED}" -DPPPLUGIN_ENABLE_CPP17_COMPATIBILITY="${BUILD_CPP17_COMPATIBLE}" echo "Build in '${BUILD_DIR}'..." cmake --build "${BUILD_DIR}" echo "Install to '${INSTALL_ROOT}'..." diff --git a/test/cmake_tests/find_package_test/test.sh b/test/cmake_tests/find_package_test/test.sh index 92e310e..878d840 100755 --- a/test/cmake_tests/find_package_test/test.sh +++ b/test/cmake_tests/find_package_test/test.sh @@ -28,7 +28,7 @@ fi TEST_BUILD_DIR="${BUILD_DIR}/shared_${TEST_SHARED}_cpp17_${TEST_CPP17_COMPATIBILITY}" EXECUTABLE_NAME="${TEST_BUILD_DIR}/a" -"${ROOT_SOURCE_DIR}/test/cmake_tests/build_and_install_ppplugin.sh" "${ROOT_SOURCE_DIR}" "${BUILD_DIR}/ppplugin_build_shared_${TEST_SHARED}" "${INSTALL_ROOT}" "${TEST_SHARED}" +"${ROOT_SOURCE_DIR}/test/cmake_tests/build_and_install_ppplugin.sh" "${ROOT_SOURCE_DIR}" "${BUILD_DIR}/ppplugin_build_shared_${TEST_SHARED}_cpp17_${TEST_CPP17_COMPATIBILITY}" "${INSTALL_ROOT}" "${TEST_SHARED}" "${TEST_CPP17_COMPATIBILITY}" # if it is a test with expected failure, switch dependency to opposite library type to provoke error if [ "${4}" = "SHARED_FAIL" ]; then From 984e6a399f62fa91307d6ef0abf2fe3bc4b5eaa0 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Mon, 17 Feb 2025 00:32:27 +0100 Subject: [PATCH 08/15] lua|Expected: Minor include fixes --- include/ppplugin/errors.h | 1 - include/ppplugin/expected.h | 2 +- include/ppplugin/lua/lua_state.h | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/ppplugin/errors.h b/include/ppplugin/errors.h index 0aa6749..c23d4e1 100644 --- a/include/ppplugin/errors.h +++ b/include/ppplugin/errors.h @@ -4,7 +4,6 @@ #include "ppplugin/detail/compatibility_utils.h" #include "ppplugin/expected.h" -#include #ifndef PPPLUGIN_CPP17_COMPATIBILITY #include #endif // PPPLUGIN_CPP17_COMPATIBILITY diff --git a/include/ppplugin/expected.h b/include/ppplugin/expected.h index 5f6768c..2fbf6ca 100644 --- a/include/ppplugin/expected.h +++ b/include/ppplugin/expected.h @@ -4,7 +4,7 @@ #include #include #include -#if __cplusplus >= 202101L +#if __cplusplus >= 202101L // if C++23 is available #include #endif // __cplusplus diff --git a/include/ppplugin/lua/lua_state.h b/include/ppplugin/lua/lua_state.h index 599e074..17c8555 100644 --- a/include/ppplugin/lua/lua_state.h +++ b/include/ppplugin/lua/lua_state.h @@ -7,6 +7,7 @@ #include "ppplugin/errors.h" #include +#include #include struct lua_State; From 56c81a18ca300b4648cc421d500834c770a4874a Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Mon, 17 Feb 2025 00:46:49 +0100 Subject: [PATCH 09/15] cmake: Fix boost find_package warning CMake 3.30 removed the FindBoost module in favor of BoostConfig.cmake which is included in boost v1.70 or newer. This new mechanism can be used by simply adding "CONFIG" to the find_package call. Alternatively, the minimum CMake version of 3.30 can be specified to avoid the warning and explicitly use the backwards-compatible fallback mechanism implemented in this CMake version. Since many systems do not have CMake 3.30 yet, this commit upgrades boost to v1.70 which is reasonably seasoned and should be available in most cases and uses the new mechanism. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd5acfe..7b49739 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ option(PPPLUGIN_ENABLE_UNDEFINED_SANITIZE option(PPPLUGIN_ENABLE_UNREACHABLE_SANITIZE "Enable compilation with unreachable sanitize flags" OFF) -find_package(Boost 1.61.0 REQUIRED COMPONENTS headers filesystem) +find_package(Boost 1.70.0 REQUIRED CONFIG COMPONENTS headers filesystem) find_package(Python 3.0 REQUIRED COMPONENTS Development) find_package(Lua 5.2 REQUIRED) From 2991424ca384b7c1282bc5a9a89b4d90e6007692 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Mon, 17 Feb 2025 01:00:15 +0100 Subject: [PATCH 10/15] cmake: Separate directories of cpp17 and cpp20 for test installations --- test/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 41c233d..c143f8b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,28 +16,28 @@ add_test( COMMAND test.sh ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build - ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_shared "SHARED" "Cpp17" + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_shared_cpp17 "SHARED" "Cpp17" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) add_test( NAME cmake_shared_cpp20_compatible_installation_test COMMAND test.sh ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build - ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_shared "SHARED" "Cpp20" + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_shared_cpp20 "SHARED" "Cpp20" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) add_test( NAME cmake_static_cpp17_compatible_installation_test COMMAND test.sh ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build - ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static "STATIC" "Cpp17" + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static_cpp17 "STATIC" "Cpp17" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) add_test( NAME cmake_static_cpp20_compatible_installation_test COMMAND test.sh ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/cmake_find_package_test_build - ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static "STATIC" "Cpp20" + ${CMAKE_CURRENT_BINARY_DIR}/test_install_root_static_cpp20 "STATIC" "Cpp20" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake_tests/find_package_test) add_test( From a2befa36709e1b23907203f351688df5e0485f93 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Tue, 18 Feb 2025 21:11:09 +0100 Subject: [PATCH 11/15] ci: Change cmake linting tool to cmake-lint Additionally, make line width in cmake-format workflow explicit since for the linting it needs to be increased. This is because some lines cannot be formatted with only 80 characters per line. Thus, the character limit per line is increased to 90 for now in the linting job. --- .github/workflows/cmake-format.yml | 2 +- .github/workflows/cmake-lint.yml | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake-format.yml b/.github/workflows/cmake-format.yml index 1e92f53..ea24dd4 100644 --- a/.github/workflows/cmake-format.yml +++ b/.github/workflows/cmake-format.yml @@ -38,4 +38,4 @@ jobs: run: find . \( -path '*/.*' -prune \) -o \( -type f -a -name 'CMakeLists.txt' \) -exec echo "Format checking '{}'..." \; - -exec cmake-format --check -- {} + + -exec cmake-format --check --line-width=80 -- {} + diff --git a/.github/workflows/cmake-lint.yml b/.github/workflows/cmake-lint.yml index 5f1407b..5555e62 100644 --- a/.github/workflows/cmake-lint.yml +++ b/.github/workflows/cmake-lint.yml @@ -30,11 +30,13 @@ jobs: python-version: '3.13' cache-dependency-path: '.github/workflows/cmake-lint.yml' cache: 'pip' - - name: Install dependencies - run: pip install cmakelint + - name: Install CMake linting tool + run: pip install cmakelang - - name: Execute cmakelint + # Check all cmake files; ignore files in hidden directories; + # use increased line width since formatting is checked by other workflow + - name: Execute cmake-lint run: find . \( \( -path './build' -o -path '*/.*' \) -prune \) -o \( -type f -a -iname 'CMakeLists.txt' \) -exec echo "Linting '{}'..." \; - -exec cmakelint --spaces=1 {} + + -exec cmake-lint --line-width=90 -- {} + From e1d7b551ee121ca3df123a4a5f441bdf306ec0a2 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Tue, 18 Feb 2025 21:13:05 +0100 Subject: [PATCH 12/15] ci: Add --output-on-failure to ctest --- .github/workflows/build-and-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index c981ec6..6eb102d 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -181,7 +181,7 @@ jobs: - name: Run cmake tests run: | cd build - ctest -R cmake_ + ctest -R cmake_ --output-on-failure env: CMAKE_GENERATOR: Ninja shell: alpine.sh {0} From a4d230c60ca6a36a3e4eda0f851aee6d08c8d9cd Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Tue, 18 Feb 2025 21:13:45 +0100 Subject: [PATCH 13/15] cmake: Add COMMENT to custom commands in examples --- examples/lua_plugin/CMakeLists.txt | 3 ++- examples/multi_language_plugin/CMakeLists.txt | 8 +++----- examples/multi_return_lua_plugin/CMakeLists.txt | 3 ++- examples/python_plugin/CMakeLists.txt | 3 ++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/examples/lua_plugin/CMakeLists.txt b/examples/lua_plugin/CMakeLists.txt index 09c45f4..e5ea902 100644 --- a/examples/lua_plugin/CMakeLists.txt +++ b/examples/lua_plugin/CMakeLists.txt @@ -7,4 +7,5 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/plugin.lua $/plugin_1.lua COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/plugin.lua - $/plugin_2.lua) + $/plugin_2.lua + COMMENT "Copying Lua plugins to output directory...") diff --git a/examples/multi_language_plugin/CMakeLists.txt b/examples/multi_language_plugin/CMakeLists.txt index 6d83f4b..f54082a 100644 --- a/examples/multi_language_plugin/CMakeLists.txt +++ b/examples/multi_language_plugin/CMakeLists.txt @@ -11,11 +11,9 @@ add_custom_command( POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/plugins/lua_plugin.lua - $) -add_custom_command( - TARGET multi_language_plugin_manager - POST_BUILD + $ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/plugins/python_plugin.py - $) + $ + COMMENT "Copying plugins to output directory...") diff --git a/examples/multi_return_lua_plugin/CMakeLists.txt b/examples/multi_return_lua_plugin/CMakeLists.txt index 35b48fd..9d9ba39 100644 --- a/examples/multi_return_lua_plugin/CMakeLists.txt +++ b/examples/multi_return_lua_plugin/CMakeLists.txt @@ -6,4 +6,5 @@ add_custom_command( TARGET multi_return_lua_plugin_manager POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/plugin.lua - $) + $ + COMMENT "Copying Lua plugin to output directory...") diff --git a/examples/python_plugin/CMakeLists.txt b/examples/python_plugin/CMakeLists.txt index d4dea6d..75346b5 100644 --- a/examples/python_plugin/CMakeLists.txt +++ b/examples/python_plugin/CMakeLists.txt @@ -7,4 +7,5 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/plugin.py $/plugin_1.py COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/plugin.py - $/plugin_2.py) + $/plugin_2.py + COMMENT "Copying Python plugins to output directory...") From 34280b083b1bd714ffd79ac32e206b1ab852fc53 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Tue, 18 Feb 2025 21:14:11 +0100 Subject: [PATCH 14/15] cmake: Resolve duplicate keyword linting issue --- src/CMakeLists.txt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3f99946..bc5d063 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -15,18 +15,19 @@ set(LIBRARY_SOURCES add_library(${LIBRARY_TARGET} ${LIBRARY_SOURCES}) target_link_libraries( ${LIBRARY_TARGET} - PUBLIC Boost::filesystem - PUBLIC Python::Python PRIVATE ${LUA_LIBRARIES} - PUBLIC $<$:fmt::fmt>) + PUBLIC Boost::filesystem Python::Python + $<$:fmt::fmt>) target_include_directories( ${LIBRARY_TARGET} PRIVATE ${LUA_INCLUDE_DIR} PUBLIC $ - PUBLIC $) + $) target_compile_definitions( - ${LIBRARY_TARGET} PUBLIC $<$: - "PPPLUGIN_CPP17_COMPATIBILITY">) + ${LIBRARY_TARGET} + PUBLIC + $<$:"PPPLUGIN_CPP17_COMPATIBILITY"> +) set_target_properties( ${LIBRARY_TARGET} From 4cf129476a2cfca6d1fc0c7419cbfc1ae1df2476 Mon Sep 17 00:00:00 2001 From: Tamino Bauknecht Date: Tue, 18 Feb 2025 21:29:39 +0100 Subject: [PATCH 15/15] ci: Upload coverage as artifact --- .github/workflows/build-and-test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 6eb102d..af40f50 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -144,6 +144,11 @@ jobs: --legend coverage_without_system_and_test_files lcov --list coverage_without_system_and_test_files shell: alpine.sh {0} + - uses: actions/upload-artifact@v4 + with: + name: coverage_${{ matrix.cpp_version }} + path: coverage + retention-days: 3 ctest: name: "ctest"