Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/cmake_consumer_standards.yml
Original file line number Diff line number Diff line change
@@ -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
29 changes: 29 additions & 0 deletions tests/consumer/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
25 changes: 25 additions & 0 deletions tests/consumer/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <SQLiteCpp/SQLiteCpp.h>

#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;
}
Loading