From f8de87bc1bd1e13de7969275022f60a074714d4c Mon Sep 17 00:00:00 2001 From: Pierre Wendling Date: Thu, 17 Aug 2023 09:42:20 -0400 Subject: [PATCH] CI: Test the generated CMake package. --- .github/workflows/build.yml | 102 ++++++++++++++++++ test/cmake/CMakeLists.txt | 19 ++++ test/cmake/main.cpp | 3 + .../googletest/cmake/internal_utils.cmake | 4 +- 4 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 test/cmake/CMakeLists.txt create mode 100644 test/cmake/main.cpp diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..0360a0ba3 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,102 @@ +name: Github PR +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + workflow_dispatch: +permissions: read-all +defaults: + run: + shell: bash +jobs: + cmake-build: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + build: [static, shared] + generator: ["Default Generator", "MinGW Makefiles"] + exclude: + - os: macos-latest + build: shared + - os: macos-latest + generator: "MinGW Makefiles" + - os: ubuntu-latest + generator: "MinGW Makefiles" + env: + YAML_BUILD_SHARED_LIBS: ${{ matrix.build == 'shared' && 'ON' || 'OFF' }} + YAML_CPP_BUILD_TESTS: 'ON' + CMAKE_GENERATOR: >- + ${{format(matrix.generator != 'Default Generator' && '-G "{0}"' || '', matrix.generator)}} + CMAKE_INSTALL_PREFIX: "${{ github.workspace }}/install-prefix" + CMAKE_BUILD_TYPE: Debug + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - name: Configure + run: | + cmake \ + ${{ env.CMAKE_GENERATOR }} \ + -S "${{ github.workspace }}" \ + -B build \ + -D CMAKE_INSTALL_PREFIX="${{ env.CMAKE_INSTALL_PREFIX }}" \ + -D CMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }} \ + -D YAML_BUILD_SHARED_LIBS=${{ env.YAML_BUILD_SHARED_LIBS }} \ + -D YAML_CPP_BUILD_TESTS=${{ env.YAML_CPP_BUILD_TESTS }} + + - name: Build + run: | + cmake \ + --build build \ + --config ${{ env.CMAKE_BUILD_TYPE }} \ + --verbose \ + --parallel + + - name: Run Tests + shell: bash + run: | + ctest \ + --test-dir build \ + --build-config ${{ env.CMAKE_BUILD_TYPE }} \ + --output-on-failure \ + --verbose + + - name: Install + run: cmake --install build --config ${{ env.CMAKE_BUILD_TYPE }} + + - name: Configure CMake package test + run: | + cmake \ + ${{ env.CMAKE_GENERATOR }} \ + -S "${{ github.workspace }}/test/cmake" \ + -B consumer-build \ + -D CMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }} \ + -D CMAKE_PREFIX_PATH="${{ env.CMAKE_INSTALL_PREFIX }}" + + - name: Build CMake package test + run: | + cmake \ + --build consumer-build \ + --config ${{ env.CMAKE_BUILD_TYPE }} \ + --verbose + + bazel-build: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - name: Build + run: | + cd "${{ github.workspace }}" + bazel build :all + + - name: Test + run: | + cd "${{ github.workspace }}" + bazel test test + diff --git a/test/cmake/CMakeLists.txt b/test/cmake/CMakeLists.txt new file mode 100644 index 000000000..14ea5fe49 --- /dev/null +++ b/test/cmake/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.5) +project(yaml-cpp-consumer LANGUAGES CXX) + +find_package(yaml-cpp CONFIG REQUIRED) +get_target_property(LIBRARY_TYPE yaml-cpp TYPE) + +if(LIBRARY_TYPE STREQUAL "SHARED_LIBRARY") + if(NOT YAML_CPP_SHARED_LIBS_BUILT) + message(FATAL_ERROR "Library type (${LIBRARY_TYPE}) contradicts config: ${YAML_CPP_SHARED_LIBS_BUILT}") + endif() +else() + if(YAML_CPP_SHARED_LIBS_BUILT) + message(FATAL_ERROR "Library type (${LIBRARY_TYPE}) contradicts config: ${YAML_CPP_SHARED_LIBS_BUILT}") + endif() +endif() + +add_executable(main main.cpp) +set_target_properties(main PROPERTIES CXX_STANDARD 11) +target_link_libraries(main PRIVATE ${YAML_CPP_LIBRARIES}) diff --git a/test/cmake/main.cpp b/test/cmake/main.cpp new file mode 100644 index 000000000..bce9ea62c --- /dev/null +++ b/test/cmake/main.cpp @@ -0,0 +1,3 @@ +#include "yaml-cpp/yaml.h" + +int main(int, char**) { YAML::Parser foo{}; } diff --git a/test/gtest-1.10.0/googletest/cmake/internal_utils.cmake b/test/gtest-1.10.0/googletest/cmake/internal_utils.cmake index 2f70f0b08..36cbecb16 100644 --- a/test/gtest-1.10.0/googletest/cmake/internal_utils.cmake +++ b/test/gtest-1.10.0/googletest/cmake/internal_utils.cmake @@ -82,13 +82,13 @@ macro(config_compiler_and_linker) # http://stackoverflow.com/questions/3232669 explains the issue. set(cxx_base_flags "${cxx_base_flags} -wd4702") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - set(cxx_base_flags "-Wall -Wshadow -Werror -Wconversion") + set(cxx_base_flags "-Wall -Wshadow -Wconversion") set(cxx_exception_flags "-fexceptions") set(cxx_no_exception_flags "-fno-exceptions") set(cxx_strict_flags "-W -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wredundant-decls") set(cxx_no_rtti_flags "-fno-rtti") elseif (CMAKE_COMPILER_IS_GNUCXX) - set(cxx_base_flags "-Wall -Wshadow -Werror") + set(cxx_base_flags "-Wall -Wshadow") if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0) set(cxx_base_flags "${cxx_base_flags} -Wno-error=dangling-else") endif()