From c1dd5625beb19b9f62373278fd71f1c6e6beafab Mon Sep 17 00:00:00 2001 From: Steve Downey Date: Sun, 10 Nov 2024 14:05:54 -0500 Subject: [PATCH] Convert to INTERFACE and verify headers Convert to an interface library and use verify headers to test that headers are self-contained and compile correctly by themselves. Test install at end of CI and run both Asan and RWDI builds. --- .github/workflows/ci.yml | 20 ++++++++++++++++--- CMakeLists.txt | 4 +++- Makefile | 1 + src/beman/optional26/CMakeLists.txt | 3 --- src/beman/optional26/detail/iterator.cpp | 4 ---- src/beman/optional26/optional.cpp | 4 ---- src/beman/optional26/tests/CMakeLists.txt | 2 -- src/beman/optional26/tests/test_types.cpp | 4 ---- src/beman/optional26/tests/test_utilities.cpp | 4 ---- 9 files changed, 21 insertions(+), 25 deletions(-) delete mode 100644 src/beman/optional26/detail/iterator.cpp delete mode 100644 src/beman/optional26/optional.cpp delete mode 100644 src/beman/optional26/tests/test_types.cpp delete mode 100644 src/beman/optional26/tests/test_utilities.cpp diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a41d1c..77e28dd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,13 +82,27 @@ jobs: echo ${{ matrix.config.cmake_args }} echo ${{ matrix.config.toolchain }} rm -rf .build - cmake ${{ matrix.config.cmake_args }} -DCMAKE_TOOLCHAIN_FILE="etc/${{ matrix.config.toolchain }}-toolchain.cmake" -B .build -S . - - name: CMake Build + cmake ${{ matrix.config.cmake_args }} -DCMAKE_INSTALL_PREFIX=.install -DCMAKE_TOOLCHAIN_FILE="etc/${{ matrix.config.toolchain }}-toolchain.cmake" -B .build -S . + - name: CMake ASAN Build run: | set -x + cmake --build .build --config Asan --target all_verify_interface_header_sets -- -k 0 cmake --build .build --config Asan --target all -- -k 0 - - name: CMake Test + - name: CMake ASAN Test run: | set -x [[ ! -z "${{ matrix.config.asan_options }}" ]] && export ASAN_OPTIONS="${{ matrix.config.asan_options }}" ctest --build-config Asan --output-on-failure --test-dir .build + - name: CMake RWDI Build + run: | + set -x + cmake --build .build --config RelWithDebInfo --target all_verify_interface_header_sets -- -k 0 + cmake --build .build --config RelWithDebInfo --target all -- -k 0 + - name: CMake RWDI Test + run: | + set -x + ctest --build-config RelWithDebInfo --output-on-failure --test-dir .build + - name: Install + run: | + set -x + cmake -DCMAKE_INSTALL_PREFIX=.install --install .build --config RelWithDebInfo --component beman_optional26_development --verbose diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f012e3..b3aa944 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,8 +31,10 @@ if(OPTIONAL26_ENABLE_TESTING) FetchContent_MakeAvailable(googletest) endif() +set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON) + # Create the library target and named header set for beman_optional26 -add_library(beman_optional26 STATIC) +add_library(beman_optional26 INTERFACE) target_sources( beman_optional26 PUBLIC FILE_SET beman_optional26_headers TYPE HEADERS BASE_DIRS src include diff --git a/Makefile b/Makefile index 90e9175..c98ab60 100755 --- a/Makefile +++ b/Makefile @@ -61,6 +61,7 @@ $(_build_path)/CMakeCache.txt: | $(_build_path) .gitmodules TARGET:=all compile: $(_build_path)/CMakeCache.txt ## Compile the project + cmake --build $(_build_path) --config $(CONFIG) --target all_verify_interface_header_sets -- -k 0 cmake --build $(_build_path) --config $(CONFIG) --target all -- -k 0 install: $(_build_path)/CMakeCache.txt compile ## Install the project diff --git a/src/beman/optional26/CMakeLists.txt b/src/beman/optional26/CMakeLists.txt index 1bd7439..10a7fc9 100644 --- a/src/beman/optional26/CMakeLists.txt +++ b/src/beman/optional26/CMakeLists.txt @@ -1,9 +1,6 @@ # src/beman/optional26/CMakeLists.txt -*-cmake-*- # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# Ensure that optional and iterator get compiled at least once -target_sources(beman_optional26 PUBLIC optional.cpp detail/iterator.cpp) - # The library is empty -- exclude it install( TARGETS beman_optional26 diff --git a/src/beman/optional26/detail/iterator.cpp b/src/beman/optional26/detail/iterator.cpp deleted file mode 100644 index c01fe5d..0000000 --- a/src/beman/optional26/detail/iterator.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// src/beman/optional26/detail/iterator.cpp -*-C++-*- -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#include diff --git a/src/beman/optional26/optional.cpp b/src/beman/optional26/optional.cpp deleted file mode 100644 index f5b151c..0000000 --- a/src/beman/optional26/optional.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// src/beman/optional26/optional.cpp -*-C++-*- -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#include diff --git a/src/beman/optional26/tests/CMakeLists.txt b/src/beman/optional26/tests/CMakeLists.txt index a35e019..5a2c1ad 100644 --- a/src/beman/optional26/tests/CMakeLists.txt +++ b/src/beman/optional26/tests/CMakeLists.txt @@ -17,8 +17,6 @@ target_sources( optional_range_support.t.cpp optional_ref.t.cpp optional_ref_monadic.t.cpp - test_types.cpp - test_utilities.cpp ) target_sources( diff --git a/src/beman/optional26/tests/test_types.cpp b/src/beman/optional26/tests/test_types.cpp deleted file mode 100644 index a851377..0000000 --- a/src/beman/optional26/tests/test_types.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// src/beman/optional26/test/test_types.cpp -*-C++-*- -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#include diff --git a/src/beman/optional26/tests/test_utilities.cpp b/src/beman/optional26/tests/test_utilities.cpp deleted file mode 100644 index 0c48cce..0000000 --- a/src/beman/optional26/tests/test_utilities.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// src/beman/optional26/test/test_utilities.cpp -*-C++-*- -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#include