File 0009-Allow-using-system-sqlite3.patch of Package kdrive
From 2c1ee3178d477b95fb62306983753df0c864f5d9 Mon Sep 17 00:00:00 2001
From: Christophe Marin <christophe@krop.fr>
Date: Thu, 24 Apr 2025 12:21:42 +0200
Subject: [PATCH 09/10] Allow using system sqlite3
---
CMakeLists.txt | 3 +
cmake/modules/FindSQLite3.cmake | 120 +++++++++++++++++---------
src/libcommonserver/CMakeLists.txt | 1 -
src/libparms/CMakeLists.txt | 3 +-
src/libparms/db/parmsdb.cpp | 2 +-
src/libsyncengine/db/syncdb.cpp | 2 +-
src/libsyncengine/olddb/oldsyncdb.cpp | 2 +-
test/libparms/CMakeLists.txt | 1 -
test/libsyncengine/CMakeLists.txt | 1 -
9 files changed, 85 insertions(+), 50 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d58f00c..b48babb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,6 +29,9 @@ add_subdirectory(src/3rdparty/keychain)
find_package(log4cplus 2.1.2)
cmake_dependent_option(USE_SYSTEM_LOG4CPLUS "Use system log4cplus library" TRUE log4cplus_FOUND FALSE)
+# SQlite3
+find_package(SQLite3 3.8.0 REQUIRED)
+
#####
if(CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
diff --git a/cmake/modules/FindSQLite3.cmake b/cmake/modules/FindSQLite3.cmake
index 4fd1ceb..393309c 100644
--- a/cmake/modules/FindSQLite3.cmake
+++ b/cmake/modules/FindSQLite3.cmake
@@ -1,70 +1,104 @@
-# - Try to find SQLite3
-# Once done this will define
+
#
# SQLITE3_FOUND - system has SQLite3
# SQLITE3_INCLUDE_DIRS - the SQLite3 include directory
# SQLITE3_LIBRARIES - Link these to use SQLite3
# SQLITE3_DEFINITIONS - Compiler switches required for using SQLite3
+
+# SPDX-FileCopyrightText: 2009-2013 Andreas Schneider <asn@cryptomilk.org>
+# SPDX-FileCopyrightText: 2025 Christophe Marin <christophe@krop.fr>
#
-# Copyright (c) 2009-2013 Andreas Schneider <asn@cryptomilk.org>
-#
-# Redistribution and use is allowed according to the terms of the New
-# BSD license.
-# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-#
+# SPDX-License-Identifier: BSD-2-Clause
+#[=======================================================================[.rst:
+FindSQLite3
+-------------
-if (UNIX)
- find_package(PkgConfig)
- if (PKG_CONFIG_FOUND)
- pkg_check_modules(_SQLITE3 sqlite3)
- endif (PKG_CONFIG_FOUND)
-endif (UNIX)
+Try to find SQLite3 library.
-find_path(SQLITE3_INCLUDE_DIR
- NAMES
- sqlite3.h
- PATHS
- ${_SQLITE3_INCLUDEDIR}
- ${SQLITE3_INCLUDE_DIRS}
-)
+The following variables will be defined:
+
+``SQLite3_FOUND``
+ True if SQLite3 is available
+``SQLite3_VERSION``
+ SQLite3 version
+``SQLite3_LIBRARIES``
+ SQLite3 libraries. This variable can be used with target_link_libraries()
+``SQLite3_INCLUDE_DIRS``
+ Include directories of SQLite3. This variable can be used with target_include_directories()
+``SQLite3_DEFINITIONS``
+ Compiler switches required for using SQLite3
+
+If ``SQLite3_FOUND`` is TRUE, the following imported target will be defined:
+
+``SQLite3::SQLite3``
+ The SQLite3 library
+
+Using the imported targets is recommended.
+
+# Additionally, backward-compatible variables are created:
+``SQLITE3_INCLUDE_DIRS``
+ Include directories of SQLite3.
+``SQLITE3_LIBRARIES``
+ SQLite3 libraries.
-find_library(SQLITE3_LIBRARY
+#]=======================================================================]
+
+
+find_package(PkgConfig)
+pkg_check_modules(PC_SQLite3 QUIET IMPORTED_TARGETS sqlite3)
+
+find_library(SQLite3_LIBRARIES
NAMES
sqlite3 sqlite3-0
- PATHS
- ${_SQLITE3_LIBDIR}
- ${SQLITE3_LIBRARIES}
+ HINTS
+ ${PC_SQLite3_LIBRARY_DIRS}
)
-set(SQLITE3_INCLUDE_DIRS
- ${SQLITE3_INCLUDE_DIR}
+find_path(SQLite3_INCLUDE_DIRS
+ NAMES
+ sqlite3.h
+ HINTS
+ ${PC_SQLite3_INCLUDE_DIRS}
)
-if (SQLITE3_LIBRARY)
- set(SQLITE3_LIBRARIES
- ${SQLITE3_LIBRARIES}
- ${SQLITE3_LIBRARY}
- )
-endif (SQLITE3_LIBRARY)
-
-if (SQLite3_FIND_VERSION AND _SQLITE3_VERSION)
- set(SQLite3_VERSION _SQLITE3_VERSION)
-endif (SQLite3_FIND_VERSION AND _SQLITE3_VERSION)
+if(SQLite3_FIND_VERSION AND PC_SQLite3_VERSION)
+ set(SQLite3_VERSION PC_SQLite3_VERSION)
+endif()
if (APPLE OR WIN32)
- set(USE_OUR_OWN_SQLITE3 TRUE)
- set(SQLITE3_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/src/3rdparty/sqlite3)
- set(SQLITE3_LIBRARIES "")
+ set(USE_OUR_OWNPC_SQLite3 TRUE)
+ set(SQLite3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/src/3rdparty/sqlite3)
+ set(SQLite3_LIBRARIES "")
set(SQLITE3_SOURCE ${SQLITE3_INCLUDE_DIR}/sqlite3.c)
- MESSAGE(STATUS "Using own sqlite3 from " ${SQLITE3_INCLUDE_DIR})
+ message(STATUS "Using own sqlite3 from " ${SQLite3_INCLUDE_DIRS})
else()
include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(SQLite3 DEFAULT_MSG SQLITE3_LIBRARIES SQLITE3_INCLUDE_DIRS)
+ find_package_handle_standard_args(SQLite3
+ FOUND_VAR
+ SQLite3_FOUND
+ REQUIRED_VARS
+ SQLite3_LIBRARIES
+ SQLite3_INCLUDE_DIRS
+ VERSION_VAR
+ SQLite3_VERSION
+ )
endif()
+if(SQLite3_FOUND AND NOT TARGET SQLite3::SQLite3)
+ add_library(SQLite3::SQLite3 UNKNOWN IMPORTED)
+ set_target_properties(SQLite3::SQLite3 PROPERTIES
+ IMPORTED_LOCATION "${SQLite3_LIBRARIES}"
+ INTERFACE_COMPILE_OPTIONS "${PC_SQLite3_CFLAGS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIRS}"
+ )
+endif()
+# Backward compatible variables
+set(SQLITE3_INCLUDE_DIRS "${SQLite3_INCLUDE_DIRS}")
+set(SQLITE3_LIBRARIES "${SQLite3_LIBRARIES}")
+set(SQLITE3_FOUND SQLite3_FOUND)
# show the SQLITE3_INCLUDE_DIRS and SQLITE3_LIBRARIES variables only in the advanced view
-mark_as_advanced(SQLITE3_INCLUDE_DIRS SQLITE3_LIBRARIES)
+mark_as_advanced(SQLite3_LIBRARIES SQLite3_INCLUDE_DIRS SQLite3_VERSION SQLITE3_INCLUDE_DIRS SQLITE3_LIBRARIES)
diff --git a/src/libcommonserver/CMakeLists.txt b/src/libcommonserver/CMakeLists.txt
index 26ee0e2..f9c7d26 100644
--- a/src/libcommonserver/CMakeLists.txt
+++ b/src/libcommonserver/CMakeLists.txt
@@ -6,7 +6,6 @@ else()
endif()
find_package(Qt6 REQUIRED Core)
-find_package(SQLite3 3.8.0 REQUIRED)
find_package(Poco 1.13.3 REQUIRED Foundation Net JSON Util)
find_package(OpenSSL 3.1.0 REQUIRED SSL Crypto)
find_package(xxHash 0.8.2 REQUIRED)
diff --git a/src/libparms/CMakeLists.txt b/src/libparms/CMakeLists.txt
index bffc15f..c5fa9fd 100644
--- a/src/libparms/CMakeLists.txt
+++ b/src/libparms/CMakeLists.txt
@@ -67,4 +67,5 @@ endif()
# Link
target_link_libraries(${libparms_NAME}
${libcommonserver_NAME}
- Poco::Foundation)
+ Poco::Foundation
+ SQLite3::SQLite3)
diff --git a/src/libparms/db/parmsdb.cpp b/src/libparms/db/parmsdb.cpp
index 567fdb4..7a8e9d9 100644
--- a/src/libparms/db/parmsdb.cpp
+++ b/src/libparms/db/parmsdb.cpp
@@ -25,7 +25,7 @@
#include "libcommonserver/io/iohelper.h"
#include "libcommonserver/utility/utility.h"
-#include <3rdparty/sqlite3/sqlite3.h>
+#include <sqlite3.h>
#include <fstream>
#include <string>
diff --git a/src/libsyncengine/db/syncdb.cpp b/src/libsyncengine/db/syncdb.cpp
index 926944f..45f2422 100644
--- a/src/libsyncengine/db/syncdb.cpp
+++ b/src/libsyncengine/db/syncdb.cpp
@@ -28,7 +28,7 @@
#include <queue>
-#include <3rdparty/sqlite3/sqlite3.h>
+#include <sqlite3.h>
#define PRAGMA_WRITABLE_SCHEMA_ID "db1"
#define PRAGMA_WRITABLE_SCHEMA "PRAGMA writable_schema=ON;"
diff --git a/src/libsyncengine/olddb/oldsyncdb.cpp b/src/libsyncengine/olddb/oldsyncdb.cpp
index e10260a..801deb8 100644
--- a/src/libsyncengine/olddb/oldsyncdb.cpp
+++ b/src/libsyncengine/olddb/oldsyncdb.cpp
@@ -20,7 +20,7 @@
#include "libcommon/utility/logiffail.h"
#include "libcommonserver/log/log.h"
-#include <3rdparty/sqlite3/sqlite3.h>
+#include <sqlite3.h>
#define SELECT_ALL_SELECTIVESYNC_REQUEST_ID "select_selectivesync"
#define SELECT_ALL_SELECTIVESYNC_REQUEST "SELECT path, type FROM selectivesync;"
diff --git a/test/libparms/CMakeLists.txt b/test/libparms/CMakeLists.txt
index dfdb144..917c5bd 100644
--- a/test/libparms/CMakeLists.txt
+++ b/test/libparms/CMakeLists.txt
@@ -5,7 +5,6 @@ else()
project(testparms LANGUAGES C CXX)
endif()
-find_package(SQLite3 3.8.0 REQUIRED)
find_package(Poco REQUIRED Foundation)
set(testparms_NAME ${APPLICATION_NAME}_test_parms)
diff --git a/test/libsyncengine/CMakeLists.txt b/test/libsyncengine/CMakeLists.txt
index 7a6c2de..6b2f09a 100644
--- a/test/libsyncengine/CMakeLists.txt
+++ b/test/libsyncengine/CMakeLists.txt
@@ -5,7 +5,6 @@ else()
project(testsyncengine LANGUAGES C CXX)
endif()
-find_package(SQLite3 3.8.0 REQUIRED)
find_package(Poco REQUIRED Foundation)
set(testsyncengine_NAME ${APPLICATION_NAME}_test_syncengine)
--
2.50.0