guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] gnu: kdbusaddons: Embed path to kdeinit5, avoid dependency c


From: Ludovic Courtès
Subject: Re: [PATCH] gnu: kdbusaddons: Embed path to kdeinit5, avoid dependency cycles.
Date: Thu, 15 Dec 2016 17:06:19 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Hello!

Thomas Danckaert <address@hidden> skribis:

> A remaining issue with kdeinit is, that it needs to run in an
> environment with all the required environment variables (such as
> QT_PLUGIN_PATH and QML2_IMPORT_PATH) for all possible KDE applications
> it has to start (and any libraries they depend on), in order to find
> dependencies at runtime, such as plugins and Qml modules.  If a user
> wants to run a KDE application which relies on kdeinit, but kdeinit is
> already running without all the required environment vars, the
> application will not find all the plugins or Qml modules it needs.
> (In a conventional system, kde applications just need to know one
> central directory where they will find all KDE plugins present on the
> system)

OK.

> I don't know what would be a good solution.  A “kde-master” package,
> which has references to all packaged KDE applications (and some
> libraries which provide plugins) as inputs, and just adds the required
> paths to the user's profile (not very modular, but it could work)?
> Could a kdeinit service could help with this in GuixSD (haven't really
> looked at services yet)?

Other options that come to mind: (1) make ‘QT_PLUGIN_PATH’ and
‘QML2_IMPORT_PATH’ search paths of ‘kinit’; or (2) add a “profile hook”
that creates a file containing the search path, and patch kinit to honor
that file somehow.

Option 1 sounds better, but ‘QT_PLUGIN_PATH’ really belongs to Qt, not
to kinit.

Thoughts?

> From ba729cd9a2bbbc98bd308702ded837cae5980281 Mon Sep 17 00:00:00 2001
> From: Thomas Danckaert <address@hidden>
> 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.

[...]

> +;; 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 '())))

Since ‘kdbusaddons’ doesn’t have any patches, you can omit this ‘source’
field.

> +(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))

Isn’t it enough to do:

  (define kinit-bootstrap
    ((package-input-rewriting `((,kdbusaddons . ,kdbusaddons-bootstrap)))
     kinit))

?  Remember that ‘package-input-rewriting’ replaces inputs recursively.

You can check with ‘guix graph -e '(@ (gnu packages kde) kdeinit-bootstrap)'’
whether you’re really getting what you want.

> 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.

s/path/file name/ please.  :-)

In GNU “path” traditionally means “search path.”

Thanks!

Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]