summarylogtreecommitdiffstats
path: root/0026-Bug-1611386-Reenable-support-for-enable-system-sqlit.patch
diff options
context:
space:
mode:
Diffstat (limited to '0026-Bug-1611386-Reenable-support-for-enable-system-sqlit.patch')
-rw-r--r--0026-Bug-1611386-Reenable-support-for-enable-system-sqlit.patch251
1 files changed, 251 insertions, 0 deletions
diff --git a/0026-Bug-1611386-Reenable-support-for-enable-system-sqlit.patch b/0026-Bug-1611386-Reenable-support-for-enable-system-sqlit.patch
new file mode 100644
index 000000000000..f1a4f4c63bd9
--- /dev/null
+++ b/0026-Bug-1611386-Reenable-support-for-enable-system-sqlit.patch
@@ -0,0 +1,251 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= <bjorn.bidar@jolla.com>
+Date: Mon, 6 Mar 2023 05:17:15 +0200
+Subject: [PATCH] Bug 1611386 - Reenable support for --enable-system-sqlite
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Revert "Bug 1611386 - Drop support for --enable-system-sqlite. r=asuth,glandium"
+
+This reverts commit b5b6473a6d6d59e1361e529db9b8b6e1f7448f29.
+
+Signed-off-by: Björn Bidar <bjorn.bidar@jolla.com>
+---
+ browser/installer/package-manifest.in | 2 ++
+ config/external/sqlite/moz.build | 22 +++++++++------
+ storage/SQLiteMutex.h | 6 ++--
+ storage/moz.build | 6 ++++
+ storage/mozStorageConnection.cpp | 4 +++
+ storage/mozStorageService.cpp | 39 ++++++++++++++++++++++++++
+ third_party/sqlite3/src/moz.build | 2 ++
+ third_party/sqlite3/src/sqlite.symbols | 1 +
+ toolkit/moz.configure | 14 +++++++++
+ 9 files changed, 84 insertions(+), 12 deletions(-)
+
+diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
+index 9229a0bd0e041815331aaf2973afda22c007423d..42e26fafdf7e90a5fbda3d798d1e1d807a5b4a69 100644
+--- a/browser/installer/package-manifest.in
++++ b/browser/installer/package-manifest.in
+@@ -143,9 +143,11 @@
+ @RESPATH@/update-settings.ini
+ #endif
+ @RESPATH@/platform.ini
++#ifndef MOZ_SYSTEM_SQLITE
+ #ifndef MOZ_FOLD_LIBS
+ @BINPATH@/@DLL_PREFIX@mozsqlite3@DLL_SUFFIX@
+ #endif
++#endif
+ @BINPATH@/@DLL_PREFIX@lgpllibs@DLL_SUFFIX@
+ #ifdef MOZ_FFVPX
+ @BINPATH@/@DLL_PREFIX@mozavutil@DLL_SUFFIX@
+diff --git a/config/external/sqlite/moz.build b/config/external/sqlite/moz.build
+index 6294924c564ae8c2ebc0033895be91069179fcd2..b978fd9caba375242de1be25072b251461010044 100644
+--- a/config/external/sqlite/moz.build
++++ b/config/external/sqlite/moz.build
+@@ -4,15 +4,19 @@
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+-DIRS += ["../../../third_party/sqlite3/src"]
+-if CONFIG["MOZ_FOLD_LIBS"]:
++if CONFIG["MOZ_SYSTEM_SQLITE"]:
+ Library("sqlite")
+- # When folding libraries, sqlite is actually in the nss library.
+- USE_LIBS += [
+- "nss",
+- ]
++ OS_LIBS += CONFIG["SQLITE_LIBS"]
+ else:
+- SharedLibrary("sqlite")
+- SHARED_LIBRARY_NAME = "mozsqlite3"
++ DIRS += ["../../../third_party/sqlite3/src"]
++ if CONFIG["MOZ_FOLD_LIBS"]:
++ Library("sqlite")
++ # When folding libraries, sqlite is actually in the nss library.
++ USE_LIBS += [
++ "nss",
++ ]
++ else:
++ SharedLibrary("sqlite")
++ SHARED_LIBRARY_NAME = "mozsqlite3"
+
+- SYMBOLS_FILE = "/third_party/sqlite3/src/sqlite.symbols"
++ SYMBOLS_FILE = "/third_party/sqlite3/src/sqlite.symbols"
+diff --git a/storage/SQLiteMutex.h b/storage/SQLiteMutex.h
+index b7198b1912fdc8d1182a445421aec3450474c23d..3ecc0bb997cf376e996bff2d9c184ecffc78b4be 100644
+--- a/storage/SQLiteMutex.h
++++ b/storage/SQLiteMutex.h
+@@ -56,7 +56,7 @@ class SQLiteMutex : private BlockingResourceBase {
+ */
+ void lock() {
+ MOZ_ASSERT(mMutex, "No mutex associated with this wrapper!");
+-#if defined(DEBUG)
++#if defined(DEBUG) && !defined(MOZ_SYSTEM_SQLITE)
+ // While SQLite Mutexes may be recursive, in our own code we do not want to
+ // treat them as such.
+ CheckAcquire();
+@@ -64,7 +64,7 @@ class SQLiteMutex : private BlockingResourceBase {
+
+ ::sqlite3_mutex_enter(mMutex);
+
+-#if defined(DEBUG)
++#if defined(DEBUG) && !defined(MOZ_SYSTEM_SQLITE)
+ Acquire(); // Call is protected by us holding the mutex.
+ #endif
+ }
+@@ -74,7 +74,7 @@ class SQLiteMutex : private BlockingResourceBase {
+ */
+ void unlock() {
+ MOZ_ASSERT(mMutex, "No mutex associated with this wrapper!");
+-#if defined(DEBUG)
++#if defined(DEBUG) && !defined(MOZ_SYSTEM_SQLITE)
+ // While SQLite Mutexes may be recursive, in our own code we do not want to
+ // treat them as such.
+ Release(); // Call is protected by us holding the mutex.
+diff --git a/storage/moz.build b/storage/moz.build
+index 3d8b15e9c7f3f67bc61ffc72db5f28fe2f44ba06..7cbecf3314b61179db355f80c5cc3d9de75eb4ab 100644
+--- a/storage/moz.build
++++ b/storage/moz.build
+@@ -100,6 +100,12 @@ if CONFIG["MOZ_THUNDERBIRD"] or CONFIG["MOZ_SUITE"]:
+ # will need to change it here as well.
+ DEFINES["SQLITE_MAX_LIKE_PATTERN_LENGTH"] = 50000
+
++# See Sqlite moz.build for reasoning about TEMP_STORE.
++# For system sqlite we cannot use the compile time option, so we use a pragma.
++if CONFIG['MOZ_SYSTEM_SQLITE'] and (CONFIG['OS_TARGET'] == 'Android'
++ or CONFIG['HAVE_64BIT_BUILD']):
++ DEFINES['MOZ_MEMORY_TEMP_STORE_PRAGMA'] = True
++
+ LOCAL_INCLUDES += [
+ "/dom/base",
+ "/third_party/sqlite3/src",
+diff --git a/storage/mozStorageConnection.cpp b/storage/mozStorageConnection.cpp
+index 0f0d76839114d22eef341190b982ad4f386909ae..bce31015580acd68ba90ea1d5efef1bb18a40d6b 100644
+--- a/storage/mozStorageConnection.cpp
++++ b/storage/mozStorageConnection.cpp
+@@ -869,6 +869,10 @@ nsresult Connection::initializeInternal() {
+ return convertResultCode(srv);
+ }
+
++#if defined(MOZ_MEMORY_TEMP_STORE_PRAGMA)
++ (void)ExecuteSimpleSQL("PRAGMA temp_store = 2;"_ns);
++#endif
++
+ // Register our built-in SQL functions.
+ srv = registerFunctions(mDBConn);
+ if (srv != SQLITE_OK) {
+diff --git a/storage/mozStorageService.cpp b/storage/mozStorageService.cpp
+index 73cf85ff197d877d42a60f4c7606ac4ca43d3ab5..e1cc43d9c060517c8b385c15ba6dab8ffb61bd9c 100644
+--- a/storage/mozStorageService.cpp
++++ b/storage/mozStorageService.cpp
+@@ -35,6 +35,20 @@
+
+ using mozilla::intl::Collator;
+
++#include "nsIPromptService.h"
++
++////////////////////////////////////////////////////////////////////////////////
++//// Defines
++
++#define PREF_TS_SYNCHRONOUS "toolkit.storage.synchronous"
++#define PREF_TS_SYNCHRONOUS_DEFAULT 1
++
++#define PREF_TS_PAGESIZE "toolkit.storage.pageSize"
++
++// This value must be kept in sync with the value of SQLITE_DEFAULT_PAGE_SIZE in
++// third_party/sqlite3/src/Makefile.in.
++#define PREF_TS_PAGESIZE_DEFAULT 32768
++
+ namespace mozilla {
+ namespace storage {
+
+@@ -167,6 +181,31 @@ already_AddRefed<Service> Service::getSingleton() {
+ return do_AddRef(gService);
+ }
+
++ // Ensure that we are using the same version of SQLite that we compiled with
++ // or newer. Our configure check ensures we are using a new enough version
++ // at compile time.
++ if (SQLITE_VERSION_NUMBER > ::sqlite3_libversion_number() ||
++ !::sqlite3_compileoption_used("SQLITE_SECURE_DELETE") ||
++ !::sqlite3_compileoption_used("SQLITE_THREADSAFE=1") ||
++ !::sqlite3_compileoption_used("SQLITE_ENABLE_FTS3") ||
++ !::sqlite3_compileoption_used("SQLITE_ENABLE_UNLOCK_NOTIFY") ||
++ !::sqlite3_compileoption_used("SQLITE_ENABLE_DBSTAT_VTAB")) {
++ nsCOMPtr<nsIPromptService> ps(do_GetService(NS_PROMPTSERVICE_CONTRACTID));
++ if (ps) {
++ nsAutoString title, message;
++ title.AppendLiteral("SQLite Version Error");
++ message.AppendLiteral(
++ "The application has been updated, but the SQLite "
++ "library wasn't updated properly and the application "
++ "cannot run. Please try to launch the application again. "
++ "If that should still fail, please try reinstalling "
++ "it, or contact the support of where you got the "
++ "application from.");
++ (void)ps->Alert(nullptr, title.get(), message.get());
++ }
++ MOZ_CRASH("SQLite Version Error");
++ }
++
+ // The first reference to the storage service must be obtained on the
+ // main thread.
+ NS_ENSURE_TRUE(NS_IsMainThread(), nullptr);
+diff --git a/third_party/sqlite3/src/moz.build b/third_party/sqlite3/src/moz.build
+index 0742b37700999fac57077eebaae21f1c94ea3990..6c03d19006088448e91b57af42d18e2236ecc208 100644
+--- a/third_party/sqlite3/src/moz.build
++++ b/third_party/sqlite3/src/moz.build
+@@ -79,6 +79,7 @@ DEFINES['SQLITE_OMIT_BUILTIN_TEST'] = True
+ # Try to use a MEMORY temp store when possible. That allows for better
+ # performance and doesn't suffer from a full separate tmp partition.
+ # Exclude 32bit platforms due to address space fragmentation issues.
++# System Sqlite is managed through a PRAGMA instead.
+ if CONFIG['OS_TARGET'] == 'Android':
+ # On Android there's no tmp partition, so always use a MEMORY temp store.
+ DEFINES['SQLITE_TEMP_STORE'] = 3
+@@ -88,6 +89,7 @@ elif CONFIG['HAVE_64BIT_BUILD']:
+
+ # Change the default temp files prefix, to easily distinguish files we created
+ # vs files created by other Sqlite instances in the system.
++# This has obviously no effect in case of System Sqlite.
+ DEFINES['SQLITE_TEMP_FILE_PREFIX'] = '"mz_etilqs_"'
+
+ # Enabling sqlite math functions
+diff --git a/third_party/sqlite3/src/sqlite.symbols b/third_party/sqlite3/src/sqlite.symbols
+index 4ee20bc0d53556e9713f49f9b70ee30b45a138f8..903d6b29f62528b6ecd762ef69fb5f206cc87fde 100644
+--- a/third_party/sqlite3/src/sqlite.symbols
++++ b/third_party/sqlite3/src/sqlite.symbols
+@@ -39,6 +39,7 @@ sqlite3_column_text16
+ sqlite3_column_type
+ sqlite3_column_value
+ sqlite3_commit_hook
++sqlite3_compileoption_used
+ sqlite3_complete
+ sqlite3_complete16
+ sqlite3_config
+diff --git a/toolkit/moz.configure b/toolkit/moz.configure
+index e2e0bc4063d460fd4a21bde7278bc26845a048ed..be091370a786c902a736a2950c01a0c50bc30748 100644
+--- a/toolkit/moz.configure
++++ b/toolkit/moz.configure
+@@ -378,6 +378,20 @@ sndio = pkg_check_modules("MOZ_SNDIO", "sndio", when="--enable-sndio")
+
+ set_config("MOZ_SNDIO", depends_if(sndio)(lambda _: True))
+
++# SQLite
++# ==============================================================
++option('--with-system-sqlite', help="Use system sqlite (located with pkgconfig")
++
++@depends('--with-system-sqlite')
++def check_for_sqlite(value):
++ return bool(value)
++
++system_sqlite = pkg_check_modules('SQLITE', 'sqlite3',
++ when=check_for_sqlite)
++
++set_config('MOZ_SYSTEM_SQLITE', depends_if(system_sqlite)(lambda _: True))
++set_define('MOZ_SYSTEM_SQLITE', depends_if(system_sqlite)(lambda _: True))
++
+ # Javascript engine
+ # ==============================================================
+ include("../js/moz.configure")