Subject: [bug#30340] [PATCH 1/6] gnu: qtbase: Use the store paths for other packages and dynamically loaded libs.

From: [email-masked] (Ludovic Courtès)
Date: Fri, 09 Feb 2018 14:43:43 +0100

Hi Hartmut,

This sounds like a great improvement!

Hartmut Goebel <[email-masked]> skribis:

> Adobt the NixOS patches as of 2018-01-19:
>
> - .cmake.in and .prf files are not patches.
>
> - src/corelib/tools/qtimezoneprivate_tz.cpp: NixOS uses $TZDIR, we use
>   hardcoded path to tzdata.
>
> - src/corelib/kernel/qcoreapplication.cpp: NixOS adds plugin paths derived
>   from PATH. We do not need this, since we have native-search-path
>   QT_PLUGIN_PATH.
>
> - src/network/kernel/qdnslookup_unix.cpp,
>   src/network/kernel/qhostinfo_unix.cpp: Use hardcoded path to libresolv.
>
> - src/network/ssl/qsslcontext_openssl.cpp: NixOS changes a conditional
>   compilation for Qt 5.9 (but leaves it unchanged for Qt 5.10) to fix
>   compilation with libressl.  But Qt does not support libressl anway, see
>   config.tests/openssl/openssl.cpp in qtbase 5.9.4.
>
> - src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp:
>   Use hardcoded path to libx11.
>
> - src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp:
>   Use hardcoded path to mess's libGL, no need for a fall-back.
>
> - src/plugins/platforms/xcb/qxcbcursor.cpp: Use hardcoded path to Xcursor.
>
> - src/plugins/platformthemes/gtk3/main.cpp: NixOS changes $XDG_DATA_DIRS and
>   $GIO_EXTRA_MODULES in the code. We use search-path-specification for this.
>
> - src/testlib/qtestassert.h: Unchanged for guix.

I don’t understand all of this (does it describe problems or solutions?
what does it mean “files are not patches”? etc.) and I think we should
describe the problems/solutions on their own, without “NixOS does this”
comments, which isn’t really helpful IMO.

As an aside, I think explanations when they’re needed, should go in the
source, not in the commit log.

> * gnu/packages/qt.scm (qtbase) Add comment. [inputs]: Add tzdata.
>   [aguments]<phases>: Add 'patch-paths'.

[...]

> +         (add-after 'unpack 'patch-paths
> +           ;; Use the absolute paths for dynamically loaded libs, otherwise
> +           ;; the lib will be searched in the actual executable's RUNPATH,
> +           ;; which may not include the requested lib.
> +           (lambda* (#:key inputs #:allow-other-keys)
> +             ;; tzdata
> +             (substitute* "src/corelib/tools/qtimezoneprivate_tz.cpp"
> +               (("\"/usr(/(share|lib)/zoneinfo/)" _ path _)
> +                (string-append "\"" (assoc-ref inputs "tzdata") path)))
> +             ;; libresolve. TODO: Check is this is really required

I think you can remove “TODO” here.

> +             (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
> +                                                 "cross-libc" "libc"))))
> +               (substitute* '("src/network/kernel/qdnslookup_unix.cpp"
> +                              "src/network/kernel/qhostinfo_unix.cpp")
> +                 (("^\\s*(lib.setFileName\\(QLatin1String\\(\")(resolv\"\\)\\);)" _ a b)
> +                (string-append a glibc "/lib/lib" b))))
> +             ;; X11/locale (compose path)
> +             (substitute* "src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp"
> +               ;; Don't search in /usr/…/X11/locale, …
> +               (("^\\s*m_possibleLocations.append\\(QStringLiteral\\(\"/usr/.*/X11/locale\"\\)\\);" line)
> +                (string-append "// " line))
> +               ;; … but use libx11's path
> +               (("^\\s*(m_possibleLocations.append\\(QStringLiteral\\()X11_PREFIX \"(/.*/X11/locale\"\\)\\);)" _ a b)
> +                (string-append a "\"" (assoc-ref inputs "libx11") b)))
> +             ;; libGL
> +             (substitute* "src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp"
> +               (("^\\s*(QLibrary lib\\(QLatin1String\\(\")(GL\"\\)\\);)" _ a b)
> +                (string-append a (assoc-ref inputs "mesa") "/lib/lib" b)))
> +             ;; libXcusor
> +             (substitute* "src/plugins/platforms/xcb/qxcbcursor.cpp"
> +               (("^\\s*(QLibrary xcursorLib\\(QLatin1String\\(\")(Xcursor\"\\), 1\\);)" _ a b)
> +                (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))
> +               (("^\\s*(xcursorLib.setFileName\\(QLatin1String\\(\")(Xcursor\"\\)\\);)" _ a b)
> +                (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b)))
> +             #t)))))

That makes sense to me, and actually, I don’t think it needs more
explanations.  :-)

Did you notice improvements on KDE applications?

So, LGTM!

Thanks,
Ludo’.