Skip to content

Commit 68c74b5

Browse files
committed
CMake: add an option SQLITECPP_BUILD_LIBRARY
It's now possible to run the C++ linter without building the library
1 parent 23da948 commit 68c74b5

File tree

1 file changed

+64
-50
lines changed

1 file changed

+64
-50
lines changed

CMakeLists.txt

Lines changed: 64 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,12 @@ if (SQLITECPP_INCLUDE_SCRIPT)
210210
source_group(scripts FILES ${SQLITECPP_SCRIPT})
211211
endif()
212212

213-
# add sources of the wrapper as a "SQLiteCpp" static library
214-
add_library(SQLiteCpp ${SQLITECPP_SRC} ${SQLITECPP_INC} ${SQLITECPP_DOC} ${SQLITECPP_SCRIPT})
213+
# Build the "SQLiteCpp" wrapper as a static library
214+
option(SQLITECPP_BUILD_LIBRARY "Build SQLiteCpp wrapper as a library." ON)
215+
if (SQLITECPP_BUILD_LIBRARY)
216+
# Note: add doc and script files to display them in the Visual Studio solution
217+
add_library(SQLiteCpp ${SQLITECPP_SRC} ${SQLITECPP_INC} ${SQLITECPP_DOC} ${SQLITECPP_SCRIPT})
218+
endif (SQLITECPP_BUILD_LIBRARY)
215219

216220
# Options relative to SQLite and SQLiteC++ functions
217221

@@ -255,9 +259,11 @@ if (SQLITE_OMIT_LOAD_EXTENSION)
255259
target_compile_definitions(SQLiteCpp PUBLIC SQLITE_OMIT_LOAD_EXTENSION)
256260
endif (SQLITE_OMIT_LOAD_EXTENSION)
257261

258-
if (UNIX AND (CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
259-
set_target_properties(SQLiteCpp PROPERTIES COMPILE_FLAGS "-fPIC")
260-
endif (UNIX AND (CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
262+
if (SQLITECPP_BUILD_LIBRARY)
263+
if (UNIX AND (CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
264+
set_target_properties(SQLiteCpp PROPERTIES COMPILE_FLAGS "-fPIC")
265+
endif (UNIX AND (CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
266+
endif (SQLITECPP_BUILD_LIBRARY)
261267

262268
option(SQLITECPP_USE_ASAN "Use Address Sanitizer." OFF)
263269
if (SQLITECPP_USE_ASAN)
@@ -276,16 +282,18 @@ if (SQLITECPP_USE_GCOV)
276282
set_target_properties(SQLiteCpp PROPERTIES COMPILE_FLAGS "-fkeep-inline-functions -fkeep-static-functions")
277283
endif ()
278284

279-
## Build provided copy of SQLite3 C library ##
285+
## Build the SQLite3 C library, or link to the installed one
280286

281287
option(SQLITECPP_INTERNAL_SQLITE "Add the internal SQLite3 source to the project." ON)
282288
if (SQLITECPP_INTERNAL_SQLITE)
283-
message(STATUS "Compile sqlite3 from source in subdirectory")
284-
option(SQLITE_ENABLE_RTREE "Enable RTree extension when building internal sqlite3 library." OFF)
285-
option(SQLITE_ENABLE_DBSTAT_VTAB "Enable DBSTAT read-only eponymous virtual table extension when building internal sqlite3 library." OFF)
286-
# build the SQLite3 C library (for ease of use/compatibility) versus Linux sqlite3-dev package
287-
add_subdirectory(sqlite3)
288-
target_link_libraries(SQLiteCpp PUBLIC SQLite::SQLite3)
289+
if (SQLITECPP_BUILD_LIBRARY)
290+
message(STATUS "Compile sqlite3 from source in subdirectory")
291+
option(SQLITE_ENABLE_RTREE "Enable RTree extension when building internal sqlite3 library." OFF)
292+
option(SQLITE_ENABLE_DBSTAT_VTAB "Enable DBSTAT read-only eponymous virtual table extension when building internal sqlite3 library." OFF)
293+
# build the SQLite3 C library (for ease of use/compatibility) versus Linux sqlite3-dev package
294+
add_subdirectory(sqlite3)
295+
target_link_libraries(SQLiteCpp PUBLIC SQLite::SQLite3)
296+
endif (SQLITECPP_BUILD_LIBRARY)
289297
else (SQLITECPP_INTERNAL_SQLITE)
290298
# When using the SQLite codec, we need to link against the sqlcipher lib & include <sqlcipher/sqlite3.h>
291299
# So this gets the lib & header, and links/includes everything
@@ -349,44 +357,48 @@ if (SQLITECPP_DISABLE_EXPANDED_SQL)
349357
endif (SQLITECPP_DISABLE_EXPANDED_SQL)
350358

351359
# Link target with pthread and dl for Unix
352-
if (UNIX)
360+
if (UNIX AND SQLITECPP_BUILD_LIBRARY)
353361
set(THREADS_PREFER_PTHREAD_FLAG ON)
354362
find_package(Threads REQUIRED)
355363
target_link_libraries(SQLiteCpp PUBLIC Threads::Threads ${CMAKE_DL_LIBS})
356-
endif (UNIX)
364+
endif ()
357365

358366
# Set includes for target and transitive downstream targets
359367

360-
target_include_directories(SQLiteCpp
361-
PUBLIC
362-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
363-
$<INSTALL_INTERFACE:include/>)
368+
if (SQLITECPP_BUILD_LIBRARY)
369+
target_include_directories(SQLiteCpp
370+
PUBLIC
371+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
372+
$<INSTALL_INTERFACE:include/>)
373+
endif (SQLITECPP_BUILD_LIBRARY)
364374

365375
# Allow the library to be installed via "make install" and found with "find_package"
366376

367-
include(GNUInstallDirs)
368-
install(TARGETS SQLiteCpp
369-
EXPORT ${PROJECT_NAME}Targets
370-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
371-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
372-
COMPONENT libraries)
373-
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers FILES_MATCHING REGEX ".*\\.(hpp|h)$")
374-
install(EXPORT ${PROJECT_NAME}Targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
375-
install(FILES ${PROJECT_SOURCE_DIR}/package.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
376-
377-
include(CMakePackageConfigHelpers)
378-
write_basic_package_version_file(
379-
cmake/${PROJECT_NAME}ConfigVersion.cmake
380-
VERSION ${PROJECT_VERSION}
381-
COMPATIBILITY AnyNewerVersion)
382-
configure_package_config_file(
383-
cmake/${PROJECT_NAME}Config.cmake.in
384-
cmake/${PROJECT_NAME}Config.cmake
385-
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
386-
install(FILES
387-
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}Config.cmake
388-
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake
389-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
377+
if (SQLITECPP_BUILD_LIBRARY)
378+
include(GNUInstallDirs)
379+
install(TARGETS SQLiteCpp
380+
EXPORT ${PROJECT_NAME}Targets
381+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
382+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
383+
COMPONENT libraries)
384+
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers FILES_MATCHING REGEX ".*\\.(hpp|h)$")
385+
install(EXPORT ${PROJECT_NAME}Targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
386+
install(FILES ${PROJECT_SOURCE_DIR}/package.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
387+
388+
include(CMakePackageConfigHelpers)
389+
write_basic_package_version_file(
390+
cmake/${PROJECT_NAME}ConfigVersion.cmake
391+
VERSION ${PROJECT_VERSION}
392+
COMPATIBILITY AnyNewerVersion)
393+
configure_package_config_file(
394+
cmake/${PROJECT_NAME}Config.cmake.in
395+
cmake/${PROJECT_NAME}Config.cmake
396+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
397+
install(FILES
398+
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}Config.cmake
399+
${CMAKE_CURRENT_BINARY_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake
400+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
401+
endif (SQLITECPP_BUILD_LIBRARY)
390402

391403
# Optional additional targets:
392404

@@ -398,25 +410,25 @@ if (SQLITECPP_RUN_CPPLINT)
398410
if (PYTHONINTERP_FOUND)
399411
# add a cpplint target to the "all" target
400412
add_custom_target(SQLiteCpp_cpplint
401-
ALL
402-
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/cpplint.py ${CPPLINT_ARG_OUTPUT} ${CPPLINT_ARG_VERBOSE} ${CPPLINT_ARG_LINELENGTH} ${SQLITECPP_SRC} ${SQLITECPP_INC}
413+
ALL
414+
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/cpplint.py ${CPPLINT_ARG_OUTPUT} ${CPPLINT_ARG_VERBOSE} ${CPPLINT_ARG_LINELENGTH} ${SQLITECPP_SRC} ${SQLITECPP_INC}
403415
)
404416
endif (PYTHONINTERP_FOUND)
405417
else()
406418
find_package(Python)
407-
if (PYTHON_INTERPRETER_FOUND)
419+
if (Python_Interpreter_FOUND)
408420
# add a cpplint target to the "all" target
409421
add_custom_target(SQLiteCpp_cpplint
410-
ALL
411-
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/cpplint.py ${CPPLINT_ARG_OUTPUT} ${CPPLINT_ARG_VERBOSE} ${CPPLINT_ARG_LINELENGTH} ${SQLITECPP_SRC} ${SQLITECPP_INC}
422+
ALL
423+
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/cpplint.py ${CPPLINT_ARG_OUTPUT} ${CPPLINT_ARG_VERBOSE} ${CPPLINT_ARG_LINELENGTH} ${SQLITECPP_SRC} ${SQLITECPP_INC}
412424
)
413-
endif (PYTHON_INTERPRETER_FOUND)
425+
endif (Python_Interpreter_FOUND)
414426
endif()
415427
else (SQLITECPP_RUN_CPPLINT)
416428
message(STATUS "SQLITECPP_RUN_CPPLINT OFF")
417429
endif (SQLITECPP_RUN_CPPLINT)
418430

419-
option(SQLITECPP_RUN_CPPCHECK "Run cppcheck C++ static analysis tool." ON)
431+
option(SQLITECPP_RUN_CPPCHECK "Run cppcheck C++ static analysis tool." OFF)
420432
if (SQLITECPP_RUN_CPPCHECK)
421433
find_program(CPPCHECK_EXECUTABLE NAMES cppcheck)
422434
if (CPPCHECK_EXECUTABLE)
@@ -426,7 +438,7 @@ if (SQLITECPP_RUN_CPPCHECK)
426438
COMMAND ${CPPCHECK_EXECUTABLE} -j 8 cppcheck --enable=style --quiet ${CPPCHECK_ARG_TEMPLATE} ${PROJECT_SOURCE_DIR}/src
427439
)
428440
execute_process(COMMAND "${CPPCHECK_EXECUTABLE}" --version OUTPUT_VARIABLE CPPCHECK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
429-
message(STATUS "Found Cppcheck: ${CPPCHECK_EXECUTABLE} ${CPPCHECK_VERSION}")
441+
message(STATUS "Found Cppcheck: ${CPPCHECK_EXECUTABLE} (found version ${CPPCHECK_VERSION})")
430442
else (CPPCHECK_EXECUTABLE)
431443
message(STATUS "Could NOT find cppcheck")
432444
endif (CPPCHECK_EXECUTABLE)
@@ -516,4 +528,6 @@ else (SQLITECPP_BUILD_TESTS)
516528
endif (SQLITECPP_BUILD_TESTS)
517529

518530
# API version for SQLiteCpp shared library.
519-
set_property(TARGET SQLiteCpp PROPERTY SOVERSION 0)
531+
if (SQLITECPP_BUILD_LIBRARY)
532+
set_property(TARGET SQLiteCpp PROPERTY SOVERSION 0)
533+
endif (SQLITECPP_BUILD_LIBRARY)

0 commit comments

Comments
 (0)