Subject: Re: [bug#40791] rebased patch

From: Marius Bakke <[email-masked]>
Date: Fri, 24 Apr 2020 00:23:38 +0200

Hello Tom!

Thanks a lot for this work.

Tom via Guix-patches via <[email-masked]> writes:

> This patch incorporates feedback from IRC (many fixlets).
>
> I rebased it onto the core-updates branch.
>
> The webengine fails with an error I fail to understand:
>
> make[3]: Entering directory '/tmp/guix-build-qtwebengine-5.14.2.drv-0/qtwebengine-everywhere-src-5.14.2/src/core'
> ninja -k1 -j12  -C /tmp/guix-build-qtwebengine-5.14.2.drv-0/qtwebengine-everywhere-src-5.14.2/src/core/release QtWebEngineCore
> ninja: Entering directory `/tmp/guix-build-qtwebengine-5.14.2.drv-0/qtwebengine-everywhere-src-5.14.2/src/core/release'
> ninja: error: '../../3rdparty/chromium/third_party/boringssl/linux-x86_64/crypto/third_party/sike/asm/fp-x86_64.S', needed by 'host/obj/third_party/boringssl/boringssl_asm/fp-x86_64.o', missing and no known rule to make it

This is because QtWebEngine has a whitelist of allowed "third_party"
directories.  Presumably adding
"third_party/boringssl/linux-x86_64/crypto/third_party/sike" to the list
solves it.

Also preserve the related directory below "linux-aarch64" if it exists
(I'm guessing from reading commit
7f2e852267d3484c3b0a3457ad6f3f9ad4debe6a in Guix).  :-)

A few comments on the other patches:

> From 4c90d4de70b3a87cfebf33ef1ef8b07a284ca523 Mon Sep 17 00:00:00 2001
> From: TomZ <[email-masked]>
> Date: Thu, 23 Apr 2020 00:21:31 +0200
> Subject: [PATCH] gnu: Qt: update to 5.14.2
>
> * gnu/packages/qt.scm (qtbase, qtsvg, qtimageformats,
>     qtx11extras, qtxmlpatterns, qtdeclarative, qtconnectivity,
>     qtwebsockets, qtsensors, qtmultimedia, qtwayland,
>     qtserialport, qtserialbus, qtwebchannel, qtwebglplugin,
>     qtwebview, qtlocation, qttools, qtscript, qtquickcontrols,
>     qtquickcontrols2, qtgraphicaleffects, qtgamepad, qtscxml,
>     qtpurchasing, qtcharts, qtdatavis3d, qtnetworkauth,
>     qtremoteobjects, qtspeech, qtwebengine): Update to 5.14.2

Please also mention the changed [arguments] etc for each of the
variables that contain other changes than just the version bump.

> * gnu/packages/qt.scm (qtcanvas3d): Update to 5.12.8

As nothing depends on this, perhaps we should just remove it?  Do you
know if it was merged with some other Qt package?

> diff --git a/gnu/packages/patches/qtbase-use-TZDIR.patch b/gnu/packages/patches/qtbase-use-TZDIR.patch
> index 11c737d844..b6c377b133 100644
> --- a/gnu/packages/patches/qtbase-use-TZDIR.patch
> +++ b/gnu/packages/patches/qtbase-use-TZDIR.patch
> @@ -4,8 +4,8 @@ important to be able to update it fast.
>  
>  Based on a patch fron NixOS.
>  ===================================================================
> ---- qtbase-opensource-src-5.9.4.orig/src/corelib/tools/qtimezoneprivate_tz.cpp
> -+++ qtbase-opensource-src-5.9.4/src/corelib/tools/qtimezoneprivate_tz.cpp
> +--- qtbase-opensource-src-5.14.2.orig/src/corelib/time/qtimezoneprivate_tz.cpp
> ++++ qtbase-opensource-src-5.15.2/src/corelib/time/qtimezoneprivate_tz.cpp
>  @@ -70,7 +70,11 @@
>   // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
>   static QTzTimeZoneHash loadTzTimeZones()
> diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
> index 8a57127771..dbea4e2cef 100644
> --- a/gnu/packages/qt.scm
> +++ b/gnu/packages/qt.scm
> @@ -351,7 +351,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
>  (define-public qtbase
>    (package
>      (name "qtbase")
> -    (version "5.12.7")
> +    (version "5.14.2")
>      (source (origin
>               (method url-fetch)
>               (uri (string-append "https://download.qt.io/official_releases/qt/"
> @@ -360,11 +360,9 @@ developers using C++ or QML, a CSS & JavaScript like language.")
>                                   version ".tar.xz"))
>               (sha256
>                (base32
> -               "0pb68d30clksdhgy8n6rrs838bb3qcsfq4pv463yy2nr4p5kk2di"))
> -             ;; Use TZDIR to avoid depending on package "tzdata".
> +               "12mjsahlma9rw3vz9a6b5h2s6ylg8b34hxc2vnlna5ll429fgfa8"))
>               (patches (search-patches "qtbase-use-TZDIR.patch"
> -                                      "qtbase-moc-ignore-gcc-macro.patch"
> -                                      "qtbase-QTBUG-81715.patch"))
> +                                      "qtbase-moc-ignore-gcc-macro.patch"))
>               (modules '((guix build utils)))
>               (snippet
>                 ;; corelib uses bundled harfbuzz, md4, md5, sha3
> @@ -570,14 +568,6 @@ developers using C++ or QML, a CSS & JavaScript like language.")
>                                "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)))

What happened here?  Did the Qt build system get smart enough to embed
the libx11 file name by itself?

>      (arguments
>       (substitute-keyword-arguments (package-arguments qtsvg)
>         ((#:tests? _ #f) #f))) ; TODO: Enable the tests
> @@ -796,7 +786,8 @@ xmlpatternsvalidator.")))
>         ("pkg-config" ,pkg-config)
>         ("python" ,python)
>         ("python-wrapper" ,python-wrapper)
> -       ("qtsvg" ,qtsvg)))
> +       ("qtsvg" ,qtsvg)
> +       ("vulkan-headers" ,vulkan-headers)))

The new input should also be mentioned in the commit message.  See the
commit log for examples.

> @@ -962,17 +953,13 @@ set of plugins for interacting with pulseaudio and GStreamer.")))
>                   (delete-file-recursively "examples")
>                   #t))))
>      (arguments
> -     (substitute-keyword-arguments (package-arguments qtsvg)
> -       ((#:phases phases)
> -        `(modify-phases ,phases
> -           (add-before 'check 'set-ld-library-path
> -             ;; <https://lists.gnu.org/archive/html/guix-devel/2017-09/msg00019.html>
> -             ;;
> -             ;; Make the uninstalled libQt5WaylandClient.so.5 available to the
> -             ;; wayland platform plugin.
> -             (lambda _
> -               (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/lib"))
> -               #t))))))
> +      (substitute-keyword-arguments (package-arguments qtsvg)
> +        ((#:phases phases)
> +         `(modify-phases ,phases
> +            ;; Tests fail due to missing plugin.
> +            ;; Set https://lists.gnu.org/archive/html/guix-devel/2017-09/msg00019.html
> +            ;;  LD_LIBRARY PATH trick doesn't work anymore, so just disable
> +            (delete 'check)))))

So the test fails because libQt5WaylandClient.so is missing?  Perhaps it
was moved elsewhere?  Try building with --keep-failed and inspect the
build directory, hopefully it's enough to adjust LD_LIBRARY_PATH with
the new library location.

Also, if you must disable tests, use '#:tests? #f' instead of deleting
the check phase.

> @@ -1099,7 +1086,8 @@ popular web engines, Qt WebKit 2 and Qt WebEngine.")))
>       `(("mesa" ,mesa)
>         ("qtbase" ,qtbase)
>         ("qtdeclarative" ,qtdeclarative)
> -       ("qtwebsockets" ,qtwebsockets)))
> +       ("qtwebsockets" ,qtwebsockets)
> +       ("zlib" ,zlib)))

Add to commit message ^

> @@ -1515,6 +1503,10 @@ implementation of OAuth and OAuth2 authenticathon methods for Qt.")))
>                 (substitute* "tests/auto/qml/qml.pro"
>                   (("integration") "# integration")
>                   (("usertypes") "# usertypes"))
> +               ;; disable failing tests
> +               (substitute* "tests/auto/auto.pro"
> +                 (("integration_multiprocess proxy_multiprocess integration_external restart")
> +                   "integration_multiprocess"))

Indentation is off here.  It would be good to comment on why they are
failing.  Perhaps just some /bin/sh invokation need patching?

Again, thank you very much for this.  You mentioned some KDE packages
failed with this new Qt, could you try updating them too?  It should be
a lot easier thanks to the KDE updater: try e.g. './pre-inst-env guix
refresh -t kde -u'.  :-)