From ba729cd9a2bbbc98bd308702ded837cae5980281 Mon Sep 17 00:00:00 2001 From: Thomas Danckaert Date: Tue, 6 Dec 2016 14:55:39 +0100 Subject: [PATCH] gnu: kdbusaddons: Embed path to kdeinit5, avoid dependency cycles. kdbusaddons needs to know the location of the kdeinit5 executable, provided by kinit. kinit depends on kdbusaddons, so we add bootstrap versions of all packages in the dependency chain from kinit to kdbusaddons to avoid cyclic dependencies. * gnu/packages/kde-frameworks.scm (kinit-bootstrap, kdbusaddons-bootstrap, kbookmarks-bootstrap, kglobalaccel-bootstrap, kio-bootstrap, kservice-bootstrap, ktextwidgets-bootstrap, kwallet-bootstrap, kxmlgui-bootstrap): New variables. (kdbusaddons)[inputs]: Add kinit-bootstrap. [source,arguments]: Add patch and substitution to embed kinit-bootstrap's store path in the code. * gnu/packages/patches/kdbusaddons-kinit-path.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/kde-frameworks.scm | 68 ++++++++++++++++++++++- gnu/packages/patches/kdbusaddons-kinit-path.patch | 15 +++++ 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 gnu/packages/patches/kdbusaddons-kinit-path.patch diff --git a/gnu/local.mk b/gnu/local.mk index 55dee48..b42258e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -639,6 +639,7 @@ dist_patch_DATA = \ %D%/packages/patches/isl-0.11.1-aarch64-support.patch \ %D%/packages/patches/jbig2dec-ignore-testtest.patch \ %D%/packages/patches/jq-CVE-2015-8863.patch \ + %D%/packages/patches/kdbusaddons-kinit-path.patch \ %D%/packages/patches/khmer-use-libraries.patch \ %D%/packages/patches/kmod-module-directory.patch \ %D%/packages/patches/kobodeluxe-paths.patch \ diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm index 8b84133..ea53e04 100644 --- a/gnu/packages/kde-frameworks.scm +++ b/gnu/packages/kde-frameworks.scm @@ -25,6 +25,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix utils) + #:use-module (gnu packages) #:use-module (gnu packages acl) #:use-module (gnu packages admin) #:use-module (gnu packages attr) @@ -50,7 +51,8 @@ #:use-module (gnu packages version-control) #:use-module (gnu packages web) #:use-module (gnu packages xml) - #:use-module (gnu packages xorg)) + #:use-module (gnu packages xorg) + #:use-module (srfi srfi-1)) (define-public extra-cmake-modules (package @@ -516,7 +518,8 @@ many more.") name "-" version ".tar.xz")) (sha256 (base32 - "07mzb1xr8wyiid25p8kg6mjp6vq8ngvv1ikhq75zvd2cbax530c8")))) + "07mzb1xr8wyiid25p8kg6mjp6vq8ngvv1ikhq75zvd2cbax530c8")) + (patches (search-patches "kdbusaddons-kinit-path.patch")))) (build-system cmake-build-system) (native-inputs `(("extra-cmake-modules" ,extra-cmake-modules) @@ -524,10 +527,18 @@ many more.") ("qttools" ,qttools))) (inputs `(("qtbase" ,qtbase) - ("qtx11extras" ,qtx11extras))) + ("qtx11extras" ,qtx11extras) + ("kinit" ,kinit-bootstrap))) ;; kinit-bootstrap: kinit package which does not depend on kdbusaddons. (arguments `(#:phases (modify-phases %standard-phases + (add-before + 'configure 'patch-source + (lambda* (#:key inputs #:allow-other-keys) + ;; look for the kdeinit5 executable in kinit's store path, + ;; instead of the current application's directory: + (substitute* "src/kdeinitinterface.cpp" + (("@SUBSTITUTEME@") (assoc-ref inputs "kinit"))))) (replace 'check (lambda _ (setenv "DBUS_FATAL_WARNINGS" "0") @@ -2866,3 +2877,54 @@ setUrl, setUserAgent and call.") script engines.") ;; dual licensed (license (list license:gpl2+ license:lgpl2.1+)))) + +;; This version of kdbusaddons does not use kinit as an input, and is used to +;; build kinit-bootstrap, as well as bootstrap versions of all kinit +;; dependencies which also rely on kdbusaddons. +(define kdbusaddons-bootstrap + (package + (inherit kdbusaddons) + (source (origin + (inherit (package-source kdbusaddons)) + (patches '()))) + (inputs (alist-delete "kinit" (package-inputs kdbusaddons))) + (arguments + (substitute-keyword-arguments (package-arguments kdbusaddons) + ((#:phases phases) + `(modify-phases ,phases + (delete 'patch-source))))))) + +(define kservice-bootstrap + ((package-input-rewriting `((,kdbusaddons . ,kdbusaddons-bootstrap))) kservice)) + +(define ktextwidgets-bootstrap + ((package-input-rewriting `((,kservice . ,kservice-bootstrap))) ktextwidgets)) + +(define kwallet-bootstrap + ((package-input-rewriting `((,kdbusaddons . ,kdbusaddons-bootstrap) + (,kservice . ,kservice-bootstrap))) kwallet)) + +(define kglobalaccel-bootstrap + ((package-input-rewriting `((,kdbusaddons . ,kdbusaddons-bootstrap) + (,kservice . ,kservice-bootstrap))) kglobalaccel)) + +(define kxmlgui-bootstrap + ((package-input-rewriting `((,kglobalaccel . ,kglobalaccel-bootstrap) + (,ktextwidgets . ,ktextwidgets-bootstrap))) kxmlgui)) + +(define kbookmarks-bootstrap + ((package-input-rewriting `((,kxmlgui . ,kxmlgui-bootstrap))) kbookmarks)) + +(define kio-bootstrap + ((package-input-rewriting `((,kservice . ,kservice-bootstrap) + (,kxmlgui . ,kxmlgui-bootstrap) + (,kbookmarks . ,kbookmarks-bootstrap) + (,kdbusaddons . ,kdbusaddons-bootstrap) + (,kwallet . ,kwallet-bootstrap) + (,ktextwidgets . ,ktextwidgets-bootstrap))) kio)) + +(define kinit-bootstrap + ((package-input-rewriting `((,kio . ,kio-bootstrap) + (,kservice . ,kservice-bootstrap) + (,kbookmarks . ,kbookmarks-bootstrap) + (,kxmlgui . ,kxmlgui-bootstrap))) kinit)) diff --git a/gnu/packages/patches/kdbusaddons-kinit-path.patch b/gnu/packages/patches/kdbusaddons-kinit-path.patch new file mode 100644 index 0000000..97c7319 --- /dev/null +++ b/gnu/packages/patches/kdbusaddons-kinit-path.patch @@ -0,0 +1,15 @@ +Add placeholder for kinit's store path. + +diff --git a/src/kdeinitinterface.cpp b/src/kdeinitinterface.cpp +index 22fa5e5..3d40937 100644 +--- a/src/kdeinitinterface.cpp ++++ b/src/kdeinitinterface.cpp +@@ -52,7 +52,7 @@ void KDEInitInterface::ensureKdeinitRunning() + // If not found in system paths, search other paths + if (srv.isEmpty()) { + const QStringList searchPaths = QStringList() +- << QCoreApplication::applicationDirPath() // then look where our application binary is located ++ << QString::fromUtf8("@SUBSTITUTEME@/bin") // using QStringLiteral would be more efficient, but breaks guix store reference detection. + << QLibraryInfo::location(QLibraryInfo::BinariesPath); // look where exec path is (can be set in qt.conf) + srv = QStandardPaths::findExecutable(QStringLiteral("kdeinit5"), searchPaths); + if (srv.isEmpty()) { -- 2.7.4