From 7bcc34050b2e1dc4bc3aa832b08ec123129d71be Mon Sep 17 00:00:00 2001 From: Pierre Langlois Date: Tue, 14 Aug 2018 22:17:24 +0100 Subject: [PATCH] gnu: clementine: Fix creating initial database. It seems a recent version of sqlite broke Clementine's first startup. It turns out we can patch clementine to fix the problem instead of providing a different sqlite package: * gnu/packages/databases.scm (sqlite-with-fts3): Remove. * gnu/packages/music.scm (clementine)[inputs]: Replace sqlite-with-fts3 with sqlite. [source]: Add clementine-fix-sqlite.patch. * gnu/packages/patches/clementine-fix-sqlite.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. Signed-off-by: Leo Famulari --- gnu/local.mk | 1 + gnu/packages/databases.scm | 16 +------------ gnu/packages/music.scm | 5 ++-- .../patches/clementine-fix-sqlite.patch | 23 +++++++++++++++++++ 4 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 gnu/packages/patches/clementine-fix-sqlite.patch diff --git a/gnu/local.mk b/gnu/local.mk index e8f1dbe661..e14657c2d1 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -611,6 +611,7 @@ dist_patch_DATA = \ %D%/packages/patches/clang-runtime-asan-build-fixes.patch \ %D%/packages/patches/clang-runtime-esan-build-fixes.patch \ %D%/packages/patches/classpath-aarch64-support.patch \ + %D%/packages/patches/clementine-fix-sqlite.patch \ %D%/packages/patches/clementine-remove-crypto++-dependency.patch \ %D%/packages/patches/clementine-use-openssl.patch \ %D%/packages/patches/clisp-glibc-2.26.patch \ diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 04b9085e50..dc2c85b961 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -27,7 +27,7 @@ ;;; Copyright © 2017 Alex Vong ;;; Copyright © 2017, 2018 Ben Woodcroft ;;; Copyright © 2017 Rutger Helling -;;; Copyright © 2017 Pierre Langlois +;;; Copyright © 2017, 2018 Pierre Langlois ;;; Copyright © 2015, 2017, 2018 Ricardo Wurmus ;;; Copyright © 2017 Kristofer Buffington ;;; Copyright © 2018 Amirouche Boubekki @@ -1069,20 +1069,6 @@ (define-public sqlite-with-fts5 ((#:configure-flags flags) `(cons "--enable-fts5" ,flags)))))) -;; This is used by Clementine. -(define-public sqlite-with-fts3 - (package (inherit sqlite) - (name "sqlite-with-fts3") - (arguments - (substitute-keyword-arguments (package-arguments sqlite) - ((#:configure-flags flags) - `(list (string-append "CFLAGS=-O2 -DSQLITE_SECURE_DELETE " - "-DSQLITE_ENABLE_UNLOCK_NOTIFY " - "-DSQLITE_ENABLE_DBSTAT_VTAB " - "-DSQLITE_ENABLE_FTS3 " - "-DSQLITE_ENABLE_FTS3_PARENTHESIS " - "-DSQLITE_ENABLE_FTS3_TOKENIZER"))))))) - (define-public tdb (package (name "tdb") diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm index cf1e0f82f4..7d4aeff990 100644 --- a/gnu/packages/music.scm +++ b/gnu/packages/music.scm @@ -238,7 +238,8 @@ (define-public clementine "tinysvcmdns")) #t)) (patches (search-patches "clementine-use-openssl.patch" - "clementine-remove-crypto++-dependency.patch")))) + "clementine-remove-crypto++-dependency.patch" + "clementine-fix-sqlite.patch")))) (build-system cmake-build-system) (arguments '(#:test-target "clementine_test" @@ -281,7 +282,7 @@ (define-public clementine ("pulseaudio" ,pulseaudio) ("qtbase" ,qtbase) ("qtx11extras" ,qtx11extras) - ("sqlite" ,sqlite-with-fts3) + ("sqlite" ,sqlite) ("sparsehash" ,sparsehash) ("taglib" ,taglib))) (home-page "http://clementine-player.org") diff --git a/gnu/packages/patches/clementine-fix-sqlite.patch b/gnu/packages/patches/clementine-fix-sqlite.patch new file mode 100644 index 0000000000..f9d44f9074 --- /dev/null +++ b/gnu/packages/patches/clementine-fix-sqlite.patch @@ -0,0 +1,23 @@ +Patch downloaded from https://github.com/clementine-player/Clementine/pull/5669 . + +diff -ruN clementine-1.3.1.565.gd20c2244a.orig/src/core/database.cpp clementine-1.3.1.565.gd20c2244a/src/core/database.cpp +--- clementine-1.3.1.565.gd20c2244a.orig/src/core/database.cpp 2018-07-07 23:59:24.018540126 +0200 ++++ clementine-1.3.1.565.gd20c2244a/src/core/database.cpp 2018-07-08 00:04:47.991551728 +0200 +@@ -265,6 +265,17 @@ + StaticInit(); + + { ++ ++#ifdef SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER ++ // In case sqlite>=3.12 is compiled without -DSQLITE_ENABLE_FTS3_TOKENIZER ++ // (generally a good idea due to security reasons) the fts3 support should be enabled explicitly. ++ QVariant v = db.driver()->handle(); ++ if (v.isValid() && qstrcmp(v.typeName(), "sqlite3*") == 0) { ++ sqlite3 *handle = *static_cast(v.data()); ++ if (handle) sqlite3_db_config(handle, SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, 1, NULL); ++ } ++#endif ++ + QSqlQuery set_fts_tokenizer(db); + set_fts_tokenizer.prepare("SELECT fts3_tokenizer(:name, :pointer)"); + set_fts_tokenizer.bindValue(":name", "unicode");