From fc853de789b86b7a5e271aee07ed4f432ca036bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rombauts?= Date: Mon, 21 Sep 2026 20:49:07 +0200 Subject: [PATCH 1/2] Add a C++17 consumer test app --- tests/consumer/CMakeLists.txt | 29 +++++++++++++++++++++++++++++ tests/consumer/main.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 tests/consumer/CMakeLists.txt create mode 100644 tests/consumer/main.cpp diff --git a/tests/consumer/CMakeLists.txt b/tests/consumer/CMakeLists.txt new file mode 100644 index 00000000..d5a08f6d --- /dev/null +++ b/tests/consumer/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.5...4.0) +project(SQLiteCpp_Consumer LANGUAGES CXX) + +set(SQLITECPP_CXX_STANDARD 11 CACHE STRING "C++ standard used to build SQLiteCpp") +set(CONSUMER_CXX_STANDARD 11 CACHE STRING "C++ standard used to build the consumer") + +# Build SQLiteCpp with the requested standard. +set(CMAKE_CXX_STANDARD ${SQLITECPP_CXX_STANDARD}) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(SQLITECPP_BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(SQLITECPP_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +set(SQLITECPP_RUN_CPPCHECK OFF CACHE BOOL "" FORCE) +set(SQLITECPP_RUN_CPPLINT OFF CACHE BOOL "" FORCE) +add_subdirectory(../.. SQLiteCpp) + +# Build the consumer with its own standard. +add_executable(SQLiteCpp_Consumer main.cpp) +set_target_properties(SQLiteCpp_Consumer PROPERTIES + CXX_STANDARD ${CONSUMER_CXX_STANDARD} + CXX_STANDARD_REQUIRED ON +) +target_compile_definitions(SQLiteCpp_Consumer PRIVATE + SQLITECPP_CONSUMER_CXX_STANDARD=${CONSUMER_CXX_STANDARD} +) +target_link_libraries(SQLiteCpp_Consumer PRIVATE SQLiteCpp) + +enable_testing() +add_test(NAME SQLiteCpp_Consumer COMMAND SQLiteCpp_Consumer) diff --git a/tests/consumer/main.cpp b/tests/consumer/main.cpp new file mode 100644 index 00000000..a24ac3b6 --- /dev/null +++ b/tests/consumer/main.cpp @@ -0,0 +1,25 @@ +#include + +#if SQLITECPP_CONSUMER_CXX_STANDARD >= 17 && !defined(SQLITECPP_HAVE_STD_FILESYSTEM) +#error "C++17 consumer should expose std::filesystem support" +#endif + +int main() +{ +#ifdef SQLITECPP_HAVE_STD_FILESYSTEM + SQLite::Database db(std::filesystem::path(":memory:"), SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); +#else + SQLite::Database db(":memory:", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); +#endif + + db.exec("CREATE TABLE test (value INTEGER)"); + db.exec("INSERT INTO test VALUES (42)"); + + SQLite::Statement query(db, "SELECT value FROM test"); + if (!query.executeStep()) + { + return 1; + } + + return query.getColumn(0).getInt() == 42 ? 0 : 1; +} From 836d6b5fb2c406df6d0607a7d0d4fd949a09f340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Rombauts?= Date: Mon, 21 Sep 2026 20:49:11 +0200 Subject: [PATCH 2/2] Test mixed C++11 and C++17 builds in CI --- .../workflows/cmake_consumer_standards.yml | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/cmake_consumer_standards.yml diff --git a/.github/workflows/cmake_consumer_standards.yml b/.github/workflows/cmake_consumer_standards.yml new file mode 100644 index 00000000..c5df5ed1 --- /dev/null +++ b/.github/workflows/cmake_consumer_standards.yml @@ -0,0 +1,41 @@ +name: CMake consumer standards + +on: [push, pull_request] + +jobs: + build: + name: C++${{ matrix.library_standard }} library / C++${{ matrix.consumer_standard }} consumer + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + include: + - library_standard: 11 + consumer_standard: 11 + - library_standard: 11 + consumer_standard: 17 + - library_standard: 17 + consumer_standard: 17 + + env: + CC: gcc + CXX: g++ + + steps: + - uses: actions/checkout@v4 + + - name: Configure + run: > + cmake + -S tests/consumer + -B build/consumer + -DCMAKE_BUILD_TYPE=Debug + -DSQLITECPP_CXX_STANDARD=${{ matrix.library_standard }} + -DCONSUMER_CXX_STANDARD=${{ matrix.consumer_standard }} + + - name: Build + run: cmake --build build/consumer --config Debug + + - name: Test + run: ctest --test-dir build/consumer --build-config Debug --output-on-failure