mirror of
https://github.com/cuberite/SQLiteCpp.git
synced 2025-08-06 18:56:40 -04:00

make the meson file link statically the library when building the unit tests executable so it does not fail on windows as the symbols are not exported by default
227 lines
6.2 KiB
Meson
227 lines
6.2 KiB
Meson
project(
|
|
'SQLiteCpp', 'cpp',
|
|
# SQLiteCpp requires C++11 support
|
|
default_options: ['cpp_std=c++11'],
|
|
license: 'MIT',
|
|
version: '3.1.1',
|
|
)
|
|
|
|
cxx = meson.get_compiler('cpp')
|
|
|
|
## at best we might try to test if this code compiles
|
|
## testing for compilers or platforms is not reliable enough
|
|
## example: native clang on windows or mingw in windows
|
|
unix_like_code = '''
|
|
#if defined(unix) || defined(__unix__) || defined(__unix)
|
|
// do nothing
|
|
#else
|
|
# error "Non Unix-like OS"
|
|
#endif
|
|
'''
|
|
unix_like = cxx.compiles(unix_like_code, name : 'unix like environment')
|
|
|
|
thread_dep = dependency('threads')
|
|
# sqlite3 support
|
|
sqlite3_dep = dependency(
|
|
'sqlite3',
|
|
fallback: ['sqlite3', 'sqlite3_dep']
|
|
)
|
|
|
|
sqlitecpp_incl = [
|
|
include_directories('include')
|
|
]
|
|
sqlitecpp_srcs = [
|
|
'src/Backup.cpp',
|
|
'src/Column.cpp',
|
|
'src/Database.cpp',
|
|
'src/Exception.cpp',
|
|
'src/Statement.cpp',
|
|
'src/Transaction.cpp',
|
|
]
|
|
sqlitecpp_args = [
|
|
'-Wall',
|
|
]
|
|
sqlitecpp_link = []
|
|
sqlitecpp_deps = [
|
|
sqlite3_dep,
|
|
thread_dep,
|
|
]
|
|
## used to override the default sqlitecpp options like cpp standard
|
|
sqlitecpp_opts = []
|
|
|
|
## tests
|
|
|
|
sqlitecpp_test_srcs = [
|
|
'tests/Column_test.cpp',
|
|
'tests/Database_test.cpp',
|
|
'tests/Statement_test.cpp',
|
|
'tests/Backup_test.cpp',
|
|
'tests/Transaction_test.cpp',
|
|
'tests/VariadicBind_test.cpp',
|
|
'tests/Exception_test.cpp',
|
|
'tests/ExecuteMany_test.cpp',
|
|
]
|
|
sqlitecpp_test_args = [
|
|
# do not use ambiguous overloads by default
|
|
'-DNON_AMBIGOUS_OVERLOAD'
|
|
]
|
|
|
|
## samples
|
|
|
|
sqlitecpp_sample_srcs = [
|
|
'examples/example1/main.cpp',
|
|
]
|
|
|
|
# if not using MSVC we need to add this compiler arguments
|
|
# for a list of MSVC supported arguments please check:
|
|
# https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-alphabetically?view=msvc-170
|
|
if not (host_machine.system() == 'windows' and cxx.get_id() == 'msvc')
|
|
sqlitecpp_args += [
|
|
'-Wextra',
|
|
'-Wpedantic',
|
|
'-Wswitch-enum',
|
|
'-Wshadow',
|
|
'-Wno-long-long',
|
|
]
|
|
endif
|
|
## using MSVC headers requires c++14, if not will show an error on xstddef as:
|
|
## 'auto' return without trailing return type; deduced return types are a C++14 extension
|
|
if host_machine.system() == 'windows'
|
|
message('[WINDOWS] using c++14 standard')
|
|
sqlitecpp_opts += [
|
|
'cpp_std=c++14',
|
|
]
|
|
endif
|
|
# Options relative to SQLite and SQLiteC++ functions
|
|
|
|
if get_option('SQLITE_ENABLE_COLUMN_METADATA')
|
|
sqlitecpp_args += [
|
|
'-DSQLITE_ENABLE_COLUMN_METADATA',
|
|
]
|
|
endif
|
|
|
|
if get_option('SQLITE_ENABLE_ASSERT_HANDLER')
|
|
sqlitecpp_args += [
|
|
'-DSQLITE_ENABLE_ASSERT_HANDLER',
|
|
]
|
|
endif
|
|
|
|
if get_option('SQLITE_HAS_CODEC')
|
|
sqlitecpp_args += [
|
|
'SQLITE_HAS_CODEC',
|
|
]
|
|
endif
|
|
|
|
if get_option('SQLITE_USE_LEGACY_STRUCT')
|
|
sqlitecpp_args += [
|
|
'-DSQLITE_USE_LEGACY_STRUCT',
|
|
]
|
|
endif
|
|
|
|
if unix_like
|
|
sqlitecpp_args += [
|
|
'-DfPIC',
|
|
]
|
|
# add dl dependency
|
|
libdl_dep = cxx.find_library('dl')
|
|
sqlitecpp_deps += [
|
|
libdl_dep,
|
|
]
|
|
endif
|
|
|
|
if get_option('b_coverage')
|
|
# Prevent the compiler from removing the unused inline functions so that they get tracked as "non-covered"
|
|
sqlitecpp_args += [
|
|
'-fkeep-inline-functions',
|
|
'-fkeep-static-functions',
|
|
]
|
|
endif
|
|
|
|
|
|
libsqlitecpp = library(
|
|
'sqlitecpp',
|
|
sqlitecpp_srcs,
|
|
include_directories: sqlitecpp_incl,
|
|
cpp_args: sqlitecpp_args,
|
|
dependencies: sqlitecpp_deps,
|
|
# override the default options
|
|
override_options: sqlitecpp_opts,
|
|
# install: true,
|
|
# API version for SQLiteCpp shared library.
|
|
version: '0',)
|
|
if get_option('SQLITECPP_BUILD_TESTS')
|
|
# for the unit tests we need to link against a static version of SQLiteCpp
|
|
libsqlitecpp_static = static_library(
|
|
'sqlitecpp_static',
|
|
sqlitecpp_srcs,
|
|
include_directories: sqlitecpp_incl,
|
|
cpp_args: sqlitecpp_args,
|
|
dependencies: sqlitecpp_deps,
|
|
# override the default options
|
|
override_options: sqlitecpp_opts,)
|
|
# static libraries do not have a version
|
|
endif
|
|
|
|
install_headers(
|
|
'include/SQLiteCpp/SQLiteCpp.h',
|
|
'include/SQLiteCpp/Assertion.h',
|
|
'include/SQLiteCpp/Backup.h',
|
|
'include/SQLiteCpp/Column.h',
|
|
'include/SQLiteCpp/Database.h',
|
|
'include/SQLiteCpp/Exception.h',
|
|
'include/SQLiteCpp/Statement.h',
|
|
'include/SQLiteCpp/Transaction.h',
|
|
'include/SQLiteCpp/VariadicBind.h',
|
|
'include/SQLiteCpp/ExecuteMany.h',
|
|
)
|
|
|
|
sqlitecpp_dep = declare_dependency(
|
|
include_directories: sqlitecpp_incl,
|
|
link_with: libsqlitecpp,
|
|
)
|
|
if get_option('SQLITECPP_BUILD_TESTS')
|
|
## make the dependency static so the unit tests can link against it
|
|
## (mainly for windows as the symbols are not exported by default)
|
|
sqlitecpp_static_dep = declare_dependency(
|
|
include_directories: sqlitecpp_incl,
|
|
link_with: libsqlitecpp_static,
|
|
)
|
|
endif
|
|
|
|
if get_option('SQLITECPP_BUILD_TESTS')
|
|
gtest_dep = dependency(
|
|
'gtest',
|
|
main : true,
|
|
fallback: ['gtest', 'gtest_dep'])
|
|
sqlitecpp_test_dependencies = [
|
|
gtest_dep,
|
|
sqlitecpp_static_dep,
|
|
sqlite3_dep,
|
|
]
|
|
|
|
testexe = executable('testexe', sqlitecpp_test_srcs,
|
|
dependencies: sqlitecpp_test_dependencies,
|
|
cpp_args: sqlitecpp_test_args,
|
|
# override the default options
|
|
override_options: sqlitecpp_opts,)
|
|
|
|
test_args = []
|
|
|
|
test('sqlitecpp unit tests', testexe, args: test_args)
|
|
endif
|
|
if get_option('SQLITECPP_BUILD_EXAMPLES')
|
|
## demo executable
|
|
sqlitecpp_demo_exe = executable('SQLITECPP_sample_demo',
|
|
sqlitecpp_sample_srcs,
|
|
dependencies: sqlitecpp_dep,
|
|
# override the default options
|
|
override_options: sqlitecpp_opts,)
|
|
endif
|
|
|
|
pkgconfig = import('pkgconfig')
|
|
pkgconfig.generate(
|
|
libsqlitecpp,
|
|
description: 'a smart and easy to use C++ SQLite3 wrapper.',
|
|
version: meson.project_version(),
|
|
)
|