File 0021-Bug-1611386-Reenable-support-for-enable-system-sqlit.patch of Package MozillaFirefox

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.

Improt changes from: https://phabricator.services.mozilla.com/D18049

Signed-off-by: Björn Bidar <bjorn.bidar@jolla.com>
---
 browser/installer/package-manifest.in  |  2 ++
 config/external/sqlite/moz.build       | 22 ++++++++++++---------
 dom/indexedDB/moz.build                |  8 +++++++-
 storage/SQLiteMutex.h                  |  6 +++---
 storage/moz.build                      | 10 ++++++++--
 storage/mozStorageConnection.cpp       |  4 ++++
 storage/mozStorageService.cpp          | 27 ++++++++++++++++++++++++++
 third_party/sqlite3/src/moz.build      |  2 ++
 third_party/sqlite3/src/sqlite.symbols |  2 --
 toolkit/moz.configure                  | 14 +++++++++++++
 10 files changed, 80 insertions(+), 17 deletions(-)

diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index d069529341728e6fce1ca0f174f3efe99cec4703..a2cbd18a1f03046a5b9d0e1d41f8758974dc88d6 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -152,9 +152,11 @@
 #endif
 #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@
 @BINPATH@/@DLL_PREFIX@gkcodecs@DLL_SUFFIX@
 @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/dom/indexedDB/moz.build b/dom/indexedDB/moz.build
index 151ed72ed6be0f82467664caacbb82721b090180..f5e1a7e1176d3b9ff7050afb64e53b277e823440 100644
--- a/dom/indexedDB/moz.build
+++ b/dom/indexedDB/moz.build
@@ -121,10 +121,16 @@ LOCAL_INCLUDES += [
     "/dom/base",
     "/dom/storage",
     "/ipc/glue",
-    "/third_party/sqlite3/src",
     "/xpcom/build",
 ]
 
+if not CONFIG["MOZ_SYSTEM_SQLITE"]:
+    LOCAL_INCLUDES += ["/third_party/sqlite3/src"]
+else:
+    CXXFLAGS += CONFIG["MOZ_SYSTEM_SQLITE_FCLAGS"]
+    OS_LIBS += CONFIG["MOZ_SYSTEM_SQLITE_LIBS"]
+
+
 XPIDL_SOURCES += [
     "nsIIDBPermissionsRequest.idl",
 ]
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 c17b348ca32a21d860783c50edd9a0f80d360686..54232c4c5c39333f695adbe0d039be3c7cd6fac5 100644
--- a/storage/moz.build
+++ b/storage/moz.build
@@ -108,10 +108,16 @@ if CONFIG["MOZ_BUILD_APP"] == "browser":
 
 LOCAL_INCLUDES += [
     "/dom/base",
-    "/third_party/sqlite3/ext",
-    "/third_party/sqlite3/src",
 ]
 
+if not CONFIG["MOZ_SYSTEM_SQLITE"]:
+    LOCAL_INCLUDES += ["/third_party/sqlite3/src",
+                       "/third_party/sqlite3/ext",
+                       ]
+else:
+    CXXFLAGS += CONFIG["MOZ_SYSTEM_SQLITE_FCLAGS"]
+    OS_LIBS += CONFIG["MOZ_SYSTEM_SQLITE_LIBS"]
+
 if CONFIG["MOZ_FOLD_LIBS"]:
     DEFINES["MOZ_FOLD_LIBS"] = True
 
diff --git a/storage/mozStorageConnection.cpp b/storage/mozStorageConnection.cpp
index 354d1b7218a9dad52b3d2172cc44ea7012aa5aa2..9578cc31e7d5e01a2b475be02fe02143dcdfe3cc 100644
--- a/storage/mozStorageConnection.cpp
+++ b/storage/mozStorageConnection.cpp
@@ -1257,6 +1257,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 3f6891dda4922f5dc8a3bb5bce013a3c7264d413..e1776c6ace73c1d78583df3e273493883366ab8e 100644
--- a/storage/mozStorageService.cpp
+++ b/storage/mozStorageService.cpp
@@ -21,6 +21,7 @@
 #include "nsIPropertyBag2.h"
 #include "ObfuscatingVFS.h"
 #include "QuotaVFS.h"
+#include "nsIPromptService.h"
 #include "mozilla/Services.h"
 #include "mozilla/LateWriteChecks.h"
 #include "mozIStorageCompletionCallback.h"
@@ -170,6 +171,32 @@ 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 7f4ca2de52c740ab7a74e5e0954097b3a9dd797e..2d0b049fbedeea7f57681d6f0394b5f60ed728e6 100644
--- a/third_party/sqlite3/src/moz.build
+++ b/third_party/sqlite3/src/moz.build
@@ -93,6 +93,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
@@ -102,6 +103,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 30b7ce3ad8f5064c7c8fc8a24c6b1c00ff54cff6..0a197d05def6a792e72b85ebd5bebc166f570d57 100644
--- a/third_party/sqlite3/src/sqlite.symbols
+++ b/third_party/sqlite3/src/sqlite.symbols
@@ -46,9 +46,7 @@ sqlite3_column_text16
 sqlite3_column_type
 sqlite3_column_value
 sqlite3_commit_hook
-#ifdef DEBUG
 sqlite3_compileoption_used
-#endif
 sqlite3_complete
 sqlite3_complete16
 sqlite3_config
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
index 29e7d4cdde50cfb57d2a9a5900cd6cb928549d54..7b5a306750a8a0935f822de85884d95292b8dd89 100644
--- a/toolkit/moz.configure
+++ b/toolkit/moz.configure
@@ -502,6 +502,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")
openSUSE Build Service is sponsored by