summaryrefslogtreecommitdiff
path: root/subprojects/boost-sqlite/CMakeLists.txt
blob: 34a74631d85aa4af18f64eb273690d41009f1f93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
cmake_minimum_required(VERSION 3.12...3.20)

set(BOOST_SQLITE_VERSION 1)
if(BOOST_SUPERPROJECT_VERSION)
    set(BOOST_SQLITE_VERSION ${BOOST_SUPERPROJECT_VERSION})
endif()

project(boost_sqlite
        VERSION "${BOOST_SQLITE_VERSION}"
        DESCRIPTION "A sqlite C++ library"
        LANGUAGES CXX)

set(BOOST_SQLITE_IS_ROOT OFF)
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
    set(BOOST_SQLITE_IS_ROOT ON)
endif()

set(BOOST_SQLITE_SOURCES
    src/detail/exception.cpp
    src/backup.cpp
    src/blob.cpp
    src/connection.cpp
    src/error.cpp
    src/field.cpp
    src/meta_data.cpp
    src/resultset.cpp
    src/row.cpp
    src/value.cpp
)

find_package(SQLite3)
if(NOT SQLite3_FOUND)
    message(STATUS "Boost.sqlite has been disabled, because the required package Sqlite3 hasn't been found")
    return()
endif()

if (BOOST_SQLITE_IS_ROOT)
    if(NOT BOOST_SUPERPROJECT_VERSION)
        option(BOOST_SQLITE_INSTALL "Install boost::sqlite files" ON)
        option(BOOST_SQLITE_BUILD_TESTS "Build boost::sqlite tests" ON)
        option(BOOST_SQLITE_BUILD_EXAMPLES "Build boost::sqlite examples" ON)
    else()
        set(BOOST_SQLITE_BUILD_TESTS ${BUILD_TESTING})
    endif()

    find_package(Threads REQUIRED)
    find_package(Boost REQUIRED json OPTIONAL_COMPONENTS url unit_test_framework)

endif()

add_library(boost_sqlite ${BOOST_SQLITE_SOURCES})
target_include_directories(boost_sqlite PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_link_libraries(boost_sqlite PUBLIC Boost::headers SQLite::SQLite3)
add_library(Boost::sqlite ALIAS boost_sqlite)

add_library(boost_sqlite_ext ${BOOST_SQLITE_SOURCES} src/ext.cpp)
target_include_directories(boost_sqlite_ext PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_link_libraries(boost_sqlite_ext PUBLIC Boost::headers SQLite::SQLite3)
target_compile_definitions(boost_sqlite_ext PUBLIC BOOST_SQLITE_COMPILE_EXTENSION=1)
set_property(TARGET boost_sqlite_ext PROPERTY POSITION_INDEPENDENT_CODE ON)
add_library(Boost::sqlite_ext ALIAS boost_sqlite_ext)

if (NOT BOOST_SQLITE_IS_ROOT)
    if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
        set(BOOST_SQLITE_BUILD_TESTS ON)
    endif()
    target_link_libraries(boost_sqlite PUBLIC Boost::callable_traits Boost::config Boost::core Boost::describe Boost::pfr Boost::system)
    target_link_libraries(boost_sqlite_ext PUBLIC Boost::callable_traits Boost::config Boost::core Boost::describe Boost::pfr Boost::system)
else()
    if(NOT BOOST_SUPERPROJECT_VERSION)
        option(BOOST_SQLITE_INSTALL "Install boost::sqlite files" ON)
        option(BOOST_SQLITE_BUILD_TESTS "Build boost::sqlite tests" ON)
        option(BOOST_SQLITE_BUILD_EXAMPLES "Build boost::sqlite examples" ON)
    else()
        set(BOOST_SQLITE_BUILD_TESTS ${BUILD_TESTING})
    endif()

    file(GLOB_RECURSE ADOC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.adoc)
    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doc/index.html
            COMMAND asciidoctor ${CMAKE_CURRENT_SOURCE_DIR}/doc/index.adoc -b html5 -a generate-diagram -o ${CMAKE_CURRENT_BINARY_DIR}/doc/index.html
            DEPENDS ${ADOC_FILES})

    add_custom_target(boost_sqlite_doc DEPENDS  ${CMAKE_CURRENT_BINARY_DIR}/doc/index.html)

endif()


if(BUILD_SHARED_LIBS)
    target_compile_definitions(boost_sqlite     PUBLIC BOOST_SQLITE_DYN_LINK=1)
    target_compile_definitions(boost_sqlite_ext PUBLIC BOOST_SQLITE_DYN_LINK=1)
else()
    target_compile_definitions(boost_sqlite     PUBLIC BOOST_SQLITE_STATIC_LINK=1)
    target_compile_definitions(boost_sqlite_ext PUBLIC BOOST_SQLITE_STATIC_LINK=1)
endif()

if(BOOST_SQLITE_INSTALL AND NOT BOOST_SUPERPROJECT_VERSION)
    install(TARGETS boost_sqlite
            RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
            LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
            ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
            )
endif()

if(BUILD_TESTING)
    enable_testing()
    add_subdirectory(test)
endif()


if(BOOST_SQLITE_BUILD_EXAMPLES)
    add_subdirectory(example)
endif()