Warning, /libraries/kdb/cmake/modules/FindSqlite.cmake is written in an unsupported language. File is not indexed.

0001 # - Find SQLite 3
0002 # This module can be used to find SQLite 3.
0003 # (THIS IS AN EXTENDED VERSION OF THE FUTURE FindSqlite.cmake FOR KDB TO MAKE SURE
0004 #  THE DETECTION WORKS AS EXPECTED)
0005 #
0006 # Accepted variables:
0007 #  SQLITE_RECOMMENDED_VERSION
0008 #        If defined, warning will be displayed for SQLite versions older
0009 #        than specified.
0010 #        For example use this before calling find_package:
0011 #           set(SQLITE_RECOMMENDED_VERSION "3.6.22")
0012 #  SQLITE_LOAD_EXTENSION_REQUIRED
0013 #        If defined, extensions loading feature of SQLite is required.
0014 #        For example use this before calling find_package:
0015 #           set(SQLITE_LOAD_EXTENSION_REQUIRED ON)
0016 #
0017 # This module allows to depend on a particular minimum version of SQLite.
0018 # To acomplish that one should use the appropriate cmake syntax for
0019 # find_package(). For example to depend on SQLite >= 3.6.16 one should use:
0020 #
0021 #  find_package(SQLite 3.6.16 REQUIRED)
0022 #
0023 # Variables that FindSqlite.cmake sets:
0024 #  Sqlite_FOUND             TRUE if required version of Sqlite has been found
0025 #  SQLITE_INCLUDE_DIR       include directories to use SQLite
0026 #  SQLITE_LIBRARIES         link these to use SQLite
0027 #  SQLITE_MIN_VERSION       minimum version, if as the second argument of find_package()
0028 #  SQLITE_VERSION_STRING    found version of SQLite, e.g. "3.6.16"
0029 #  SQLITE_VERSION           integer for the found version of SQLite, e.g. 3006016 for 3.6.16
0030 #  SQLITE_MIN_VERSION_MAJOR found major version of SQLite, e.g. 3
0031 #  SQLITE_MIN_VERSION_MINOR found major version of SQLite, e.g. 6
0032 #  SQLITE_MIN_VERSION_PATCH found major version of SQLite, e.g. 16
0033 #  SQLITE_SHELL             sqlite3 executable with full path
0034 #  SQLITE_COMPILE_OPTIONS   compile options used to build libsqlite3
0035 #  SQLITE_CHECK_COMPILE_OPTION(X)
0036 #      Sets X variable to ON if option X has been set in compile options for libsqlite3.
0037 #      Supported can be, among others:
0038 #      ENABLE_COLUMN_METADATA ENABLE_FTS3 ENABLE_FTS3_PARENTHESIS ENABLE_MEMORY_MANAGEMENT
0039 #      ENABLE_RTREE ENABLE_UNLOCK_NOTIFY ENABLE_UPDATE_DELETE_LIMIT SECURE_DELETE SOUNDEX
0040 #      TEMP_STORE THREADSAFE OMIT_LOAD_EXTENSION.
0041 #      For complete list of options read https://www.sqlite.org/compile.html
0042 #      SQLITE_COMPILE_OPTIONS list is used for the check.
0043 #  SQLITE_INCLUDE_PATH      include directory for sqlite3.h
0044 #  SQLITE_EXT_INCLUDE_PATH      include directory for sqlite3ext.h
0045 #
0046 # Copyright (C) 2008 Gilles Caulier <caulier.gilles@gmail.com>
0047 # Copyright (C) 2010-2015 Jarosław Staniek <staniek@kde.org>
0048 #
0049 # Redistribution and use is allowed according to the terms of the BSD license.
0050 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
0051 
0052 set(Sqlite_FOUND TRUE)
0053 
0054 include(FeatureSummary)
0055 set_package_properties(Sqlite
0056     PROPERTIES DESCRIPTION "SQLite3 client library" URL "https://www.sqlite.org")
0057 
0058 if(SQLITE_INCLUDE_DIR AND SQLITE_LIBRARIES)
0059    if(SQLITE_LOAD_EXTENSION_REQUIRED AND SQLITE_LOAD_EXTENSION OR NOT SQLITE_LOAD_EXTENSION_REQUIRED)
0060       # in cache already
0061       set(Sqlite_FIND_QUIETLY TRUE)
0062    endif()
0063 endif()
0064 
0065 # use pkg-config to get the directories and then use these values
0066 # in the FIND_PATH() and FIND_LIBRARY() calls
0067 if(NOT WIN32)
0068   find_package(PkgConfig)
0069 
0070   pkg_check_modules(PC_SQLITE QUIET sqlite3)
0071 
0072   set(SQLITE_DEFINITIONS ${PC_SQLITE_CFLAGS_OTHER})
0073 endif()
0074 
0075 set(SQLITE_INCLUDE_DIR) # start with empty list
0076 
0077 find_path(SQLITE_INCLUDE_PATH NAMES sqlite3.h
0078   PATHS
0079   ${PC_SQLITE_INCLUDEDIR}
0080   ${PC_SQLITE_INCLUDE_DIRS}
0081 )
0082 if(SQLITE_INCLUDE_PATH)
0083   set(SQLITE_INCLUDE_DIR ${SQLITE_INCLUDE_DIR} ${SQLITE_INCLUDE_PATH})
0084 endif()
0085 
0086 find_path(SQLITE_EXT_INCLUDE_PATH NAMES sqlite3ext.h
0087   PATHS
0088   ${PC_SQLITE_INCLUDEDIR}
0089   ${PC_SQLITE_INCLUDE_DIRS}
0090 )
0091 if(SQLITE_EXT_INCLUDE_PATH)
0092   set(SQLITE_INCLUDE_DIR ${SQLITE_INCLUDE_DIR} ${SQLITE_EXT_INCLUDE_PATH})
0093 endif()
0094 
0095 # most of the headers will be in the same directories, avoid creating a list of duplicates
0096 if (SQLITE_INCLUDE_DIR)
0097   list(REMOVE_DUPLICATES SQLITE_INCLUDE_DIR)
0098 endif ()
0099 
0100 find_library(SQLITE_LIBRARIES NAMES sqlite3
0101   PATHS
0102   ${PC_SQLITE_LIBDIR}
0103   ${PC_SQLITE_LIBRARY_DIRS}
0104 )
0105 #message(DEBUG " SQLITE_INCLUDE_DIR: ${SQLITE_INCLUDE_DIR}")
0106 #message(DEBUG " SQLITE_INCLUDE_PATH: ${SQLITE_INCLUDE_PATH}")
0107 #message(DEBUG " SQLITE_EXT_INCLUDE_PATH: ${SQLITE_EXT_INCLUDE_PATH}")
0108 #message(DEBUG " SQLITE_LIBRARIES: ${SQLITE_LIBRARIES}")
0109 
0110 macro(_check_min_sqlite_version)
0111     # Suppport finding at least a particular version, for instance FIND_PACKAGE(Sqlite 3.6.22)
0112     if(Sqlite_FIND_VERSION)
0113         set(SQLITE_MIN_VERSION ${Sqlite_FIND_VERSION} CACHE STRING "Required SQLite minimal version" FORCE)
0114         set(SQLITE_MIN_VERSION_MAJOR ${Sqlite_FIND_VERSION_MAJOR} CACHE STRING "Required SQLite minimal version (major)" FORCE)
0115         set(SQLITE_MIN_VERSION_MINOR ${Sqlite_FIND_VERSION_MINOR} CACHE STRING "Required SQLite minimal version (minor)" FORCE)
0116         set(SQLITE_MIN_VERSION_PATCH ${Sqlite_FIND_VERSION_PATCH} CACHE STRING "Required SQLite minimal version (patch)" FORCE)
0117         math(EXPR SQLITE_MIN_VERSION_NUMBER
0118             "${SQLITE_MIN_VERSION_MAJOR} * 1000000 + ${SQLITE_MIN_VERSION_MINOR} * 1000 + ${SQLITE_MIN_VERSION_PATCH}")
0119         if(SQLITE_MIN_VERSION_NUMBER GREATER SQLITE_VERSION)
0120             if(Sqlite_FIND_REQUIRED)
0121                 message(FATAL_ERROR "Minimal SQLite version required: ${SQLITE_MIN_VERSION}, found ${SQLITE_VERSION_STRING}")
0122             else()
0123                 message(STATUS "WARNING: Minimal SQLite version required: ${SQLITE_MIN_VERSION}, found ${SQLITE_VERSION_STRING}")
0124             endif()
0125             unset(SQLITE_VERSION CACHE)
0126             set(Sqlite_FOUND FALSE)
0127         endif()
0128     endif()
0129 
0130     if(Sqlite_FOUND)
0131         if(NOT Sqlite_FIND_QUIETLY)
0132             message(STATUS "Found SQLite version ${SQLITE_VERSION_STRING}")
0133         endif()
0134     endif()
0135 endmacro(_check_min_sqlite_version)
0136 
0137 macro(_check_recommended_sqlite_version)
0138     if(SQLITE_RECOMMENDED_VERSION)
0139         string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" SQLITE_RECOMMENDED_VERSION_MAJOR ${SQLITE_RECOMMENDED_VERSION})
0140         string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" SQLITE_RECOMMENDED_VERSION_MINOR ${SQLITE_RECOMMENDED_VERSION})
0141         string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\3" SQLITE_RECOMMENDED_VERSION_PATCH ${SQLITE_RECOMMENDED_VERSION})
0142         math(EXPR SQLITE_RECOMMENDED_VERSION_NUMBER
0143             "${SQLITE_RECOMMENDED_VERSION_MAJOR} * 1000000 + ${SQLITE_RECOMMENDED_VERSION_MINOR} * 1000 + ${SQLITE_RECOMMENDED_VERSION_PATCH}")
0144         if(SQLITE_RECOMMENDED_VERSION_NUMBER GREATER SQLITE_VERSION)
0145             message(STATUS "NOTE: Recommended SQLite version is ${SQLITE_RECOMMENDED_VERSION} (but ${SQLITE_VERSION_STRING} is still OK)")
0146         endif()
0147     endif()
0148 endmacro(_check_recommended_sqlite_version)
0149 
0150 macro(_get_compile_options)
0151     find_program(SQLITE_SHELL sqlite3 DOC "sqlite3 executable with full path")
0152     if (SQLITE_SHELL)
0153         set(_COMPILE_OPTIONS_TEST_DB pragma_compile_options_test.sqlite3)
0154         execute_process(COMMAND ${SQLITE_SHELL} ${_COMPILE_OPTIONS_TEST_DB} "pragma compile_options"
0155                         OUTPUT_VARIABLE _COMPILE_OPTIONS_RESULT)
0156         string(REGEX REPLACE "=1\n" ";" SQLITE_COMPILE_OPTIONS "${_COMPILE_OPTIONS_RESULT}")
0157         string(REPLACE "\n" ";" SQLITE_COMPILE_OPTIONS "${SQLITE_COMPILE_OPTIONS}")
0158         set(SQLITE_COMPILE_OPTIONS ${SQLITE_COMPILE_OPTIONS})
0159     endif ()
0160 endmacro(_get_compile_options)
0161 
0162 macro(SQLITE_CHECK_COMPILE_OPTION _OPTION_NAME)
0163     list(FIND SQLITE_COMPILE_OPTIONS "${_OPTION_NAME}" _RESULT)
0164     if (NOT ${_RESULT} EQUAL -1)
0165         set(${_OPTION_NAME} ON)
0166     endif ()
0167 endmacro(SQLITE_CHECK_COMPILE_OPTION)
0168 
0169 if(NOT EXISTS "${SQLITE_INCLUDE_DIR}/sqlite3.h")
0170     set(Sqlite_FOUND FALSE)
0171 endif()
0172 
0173 if(Sqlite_FOUND)
0174    file(READ "${SQLITE_INCLUDE_DIR}/sqlite3.h" SQLITE_VERSION_CONTENT)
0175    string(REGEX MATCH "#define SQLITE_VERSION[ ]+\"[0-9]+\\.[0-9]+\\.[0-9]+\"" SQLITE_VERSION_STRING_MATCH ${SQLITE_VERSION_CONTENT})
0176    if(NOT SQLITE_VERSION_STRING_MATCH)
0177       string(REGEX MATCH "#define SQLITE_VERSION[ ]+\"[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\"" SQLITE_VERSION_STRING_MATCH ${SQLITE_VERSION_CONTENT})
0178    endif()
0179    string(REGEX MATCH "#define SQLITE_VERSION_NUMBER[ ]*[0-9]*\n" SQLITE_VERSION_MATCH ${SQLITE_VERSION_CONTENT})
0180    if(SQLITE_VERSION_STRING_MATCH AND SQLITE_VERSION_MATCH)
0181       string(REGEX REPLACE "#define SQLITE_VERSION[ ]*\"(.*)\".*" "\\1" SQLITE_VERSION_STRING ${SQLITE_VERSION_STRING_MATCH})
0182       string(REGEX REPLACE "#define SQLITE_VERSION_NUMBER[ ]*([0-9]*)\n" "\\1" SQLITE_VERSION ${SQLITE_VERSION_MATCH})
0183       set(SQLITE_VERSION ${SQLITE_VERSION} CACHE STRING "SQLite numeric version")
0184       set(SQLITE_VERSION_STRING ${SQLITE_VERSION_STRING} CACHE STRING "SQLite version")
0185       _check_min_sqlite_version()
0186    else()
0187        set(Sqlite_FOUND FALSE)
0188    endif()
0189    if(Sqlite_FOUND)
0190        _check_recommended_sqlite_version()
0191        _get_compile_options()
0192        if(SQLITE_LOAD_EXTENSION_REQUIRED)
0193           sqlite_check_compile_option(OMIT_LOAD_EXTENSION)
0194           if(OMIT_LOAD_EXTENSION)
0195               message(STATUS "WARNING: SQLite found but it is not built with support for extensions loading. It should be configured with --enable-load-extension option.")
0196               set(Sqlite_FOUND FALSE)
0197           else()
0198               set(SQLITE_LOAD_EXTENSION ON CACHE STRING "Support for extensions loading in SQLite")
0199               if(NOT Sqlite_FIND_QUIETLY)
0200                   message(STATUS "Found support for extensions loading in SQLite.")
0201               endif()
0202           endif()
0203       endif()
0204    endif()
0205 endif()
0206 
0207 include(FindPackageHandleStandardArgs)
0208 find_package_handle_standard_args(Sqlite
0209                                   REQUIRED_VARS SQLITE_INCLUDE_DIR SQLITE_LIBRARIES SQLITE_MIN_VERSION
0210                                                 SQLITE_VERSION_STRING SQLITE_VERSION
0211                                                 SQLITE_MIN_VERSION_MAJOR SQLITE_MIN_VERSION_MINOR
0212                                                 SQLITE_MIN_VERSION_PATCH
0213 )
0214 
0215 if(Sqlite_FOUND)
0216    set(Sqlite_FOUND 1 CACHE INTERNAL "" FORCE)
0217 else()
0218    unset(Sqlite_FOUND CACHE)
0219    set(Sqlite_FOUND FALSE)
0220    unset(SQLITE_INCLUDE_DIR)
0221    unset(SQLITE_INCLUDE_DIR CACHE)
0222    unset(SQLITE_LIBRARIES)
0223    unset(SQLITE_LIBRARIES CACHE)
0224    unset(SQLITE_VERSION)
0225    unset(SQLITE_VERSION CACHE)
0226    unset(SQLITE_VERSION_STRING)
0227    unset(SQLITE_VERSION_STRING CACHE)
0228    unset(SQLITE_LOAD_EXTENSION)
0229    unset(SQLITE_LOAD_EXTENSION CACHE)
0230    unset(Sqlite_EXT_INCLUDE_PATH)
0231 endif()
0232 
0233 mark_as_advanced(SQLITE_INCLUDE_DIR SQLITE_LIBRARIES SQLITE_SHELL)