Subject: Re: [bug#42958] [PATCH core-updates 03/29] gnu: glib: Update package definition.

From: Efraim Flashner <[email-masked]>
Date: Thu, 24 Sep 2020 15:55:53 +0300

On Thu, Sep 24, 2020 at 08:28:45AM -0400, Raghav Gururajan wrote:
> From 67bad944e2b775ebe2bd0101220b78b2a07c8bdf Mon Sep 17 00:00:00 2001
> From: Raghav Gururajan <[email-masked]>
> Date: Thu, 24 Sep 2020 04:44:59 -0400
> Subject: [PATCH 10/11] gnu: glib: Update to 2.64.3.
> 
> * gnu/packages/glib.scm (glib) [version]: Update to 2.64.3.
> [source]<origin>[sha256]: Modify base32.
> [patches]: Add glib-disable-failing-tests.patch.
> Remove glib-tests-timer.patch.
> [arguments]<#:disallowed-references>: Remove argument.
> <#:phases>['patch-python-references]: New phase.
> ['pre-check]: New phase.
> ['move-bin]: New phase.
> ['patch-dbus-launch-path]: Remove phase.
> ['patch-gio-launch-desktop]: Remove phase.
> ['pre-build]: Remove phase.
> ['disable-failing-tests]: Remove phase.
> ['check]: Remove phase.
> ['move-executables]: Remove phase.
> [native-inputs]: Add intltool, python, libxml2 and libxslt.
> Remove dbus.
> [inputs]: Add dbus and libelf.
> * gnu/packages/patches/glib-disable-failing-tests.patch: New file.
> * gnu/packages/patches/glib-tests-timer.patch: Delete file.
> * gnu/local.mk (dist_patch_DATA): Adjust.
> ---
>  gnu/local.mk                                  |   2 +-
>  gnu/packages/glib.scm                         | 179 +++++-------------
>  .../patches/glib-disable-failing-tests.patch  |  84 ++++++++
>  gnu/packages/patches/glib-tests-timer.patch   |  15 --
>  4 files changed, 136 insertions(+), 144 deletions(-)
>  create mode 100644 gnu/packages/patches/glib-disable-failing-tests.patch
>  delete mode 100644 gnu/packages/patches/glib-tests-timer.patch
> 
> diff --git a/gnu/local.mk b/gnu/local.mk
> index f3b5b17e84..2fc47ca2ec 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -1034,7 +1034,7 @@ dist_patch_DATA =						\
>    %D%/packages/patches/ghostscript-no-header-id.patch		\
>    %D%/packages/patches/ghostscript-no-header-uuid.patch		\
>    %D%/packages/patches/ghostscript-no-header-creationdate.patch \
> -  %D%/packages/patches/glib-tests-timer.patch			\
> +  %D%/packages/patches/glib-disable-failing-tests.patch		\
>    %D%/packages/patches/glibc-CVE-2018-11236.patch		\
>    %D%/packages/patches/glibc-CVE-2018-11237.patch		\
>    %D%/packages/patches/glibc-CVE-2019-7309.patch		\
> diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
> index 21b39b94e8..be5d45596d 100644
> --- a/gnu/packages/glib.scm
> +++ b/gnu/packages/glib.scm
> @@ -178,7 +178,7 @@ shared NFS home directories.")
>    (package
>      (properties '((hidden? . #t)))
>      (name "glib")
> -    (version "2.62.6")
> +    (version "2.64.3")
>      (source
>       (origin
>         (method url-fetch)
> @@ -187,8 +187,9 @@ shared NFS home directories.")
>                         name "/" (string-take version 4) "/"
>                         name "-" version ".tar.xz"))
>         (sha256
> -        (base32 "174bsmbmcvaw69ff9g60q5sx0fn23rkhqcwqz17h5s7sprps4kqh"))
> -       (patches (search-patches "glib-tests-timer.patch"))
> +        (base32 "08pbgiv5m3rica4ydvwvpq5mrxbyswx7l1jzjc2ch52xjabvr77y"))
> +       (patches
> +        (search-patches "glib-disable-failing-tests.patch"))
>         (modules '((guix build utils)))
>         (snippet
>          '(begin
> @@ -198,27 +199,23 @@ shared NFS home directories.")
>      (build-system meson-build-system)
>      (outputs '("out" "bin"))
>      (arguments
> -     `(#:disallowed-references (,tzdata-for-tests)
> -       #:phases
> +     `(#:phases
>         (modify-phases %standard-phases
> -         (add-after 'unpack 'patch-dbus-launch-path
> +         ;; Python references are not being patched in patch-phase of build,
> +         ;; despite using python-wrapper as input. So we patch them manually.
> +         (add-after 'unpack 'patch-python-references
>             (lambda* (#:key inputs #:allow-other-keys)
> -             (let ((dbus (assoc-ref inputs "dbus")))
> -               (substitute* "gio/gdbusaddress.c"
> -                 (("command_line = g_strdup_printf \\(\"dbus-launch")
> -                  (string-append "command_line = g_strdup_printf (\""
> -                                 dbus "/bin/dbus-launch")))
> -               #t)))
> -         (add-after 'unpack 'patch-gio-launch-desktop
> -           (lambda* (#:key outputs #:allow-other-keys)
> -             (let ((out (assoc-ref outputs "out")))
> -               ;; See also <https://gitlab.gnome.org/GNOME/glib/issues/1633>
> -               ;; for another future fix.
> -               (substitute* "gio/gdesktopappinfo.c"
> -                 (("gio-launch-desktop")
> -                  (string-append out "/libexec/gio-launch-desktop")))
> -               #t)))
> -         (add-before 'build 'pre-build
> +             (substitute* '("gio/gdbus-2.0/codegen/gdbus-codegen.in"
> +                            "glib/gtester-report.in"
> +                            "gobject/glib-genmarshal.in"
> +                            "gobject/glib-mkenums.in")
> +               (("@PYTHON@")
> +                (string-append (assoc-ref inputs "python")
> +                               "/bin/python"
> +                               ,(version-major+minor
> +                                 (package-version python)))))

If you substitute it with (which "python") then you don't need to work
out the python version, and it looks like you don't need to add python
as an input (and you can keep using just python-wrapper).

> +             #t))
> +         (add-before 'check 'pre-check
>             (lambda* (#:key inputs outputs #:allow-other-keys)
>               ;; For tests/gdatetime.c.
>               (setenv "TZDIR"
> @@ -228,133 +225,59 @@ shared NFS home directories.")
>               (setenv "HOME" (getcwd))
>               (setenv "XDG_CACHE_HOME" (getcwd))
>               #t))
> -         (add-after 'unpack 'disable-failing-tests
> -           (lambda _
> -             (let ((disable
> -                    (lambda (test-file test-paths)
> -                      (define pattern+procs
> -                        (map (lambda (test-path)
> -                               (cons
> -                                ;; XXX: only works for single line statements.
> -                                (format #f "g_test_add_func.*\"~a\".*" test-path)
> -                                (const "")))
> -                             test-paths))
> -                      (substitute test-file pattern+procs)))
> -                   (failing-tests
> -                    '(("glib/tests/thread.c"
> -                       ( ;; prlimit(2) returns ENOSYS on Linux 2.6.32-5-xen-amd64
> -                        ;; as found on hydra.gnu.org, and strace(1) doesn't
> -                        ;; recognize it.
> -                        "/thread/thread4"))
> -                      ;; This tries to find programs in FHS directories.
> -                      ("glib/tests/utils.c"
> -                       ("/utils/find-program"))
> -                      ;; This fails because "glib/tests/echo-script" cannot be
> -                      ;; found.
> -                      ("glib/tests/spawn-singlethread.c"
> -                       ("/gthread/spawn-script"))
> -                      ("glib/tests/timer.c"
> -                       ( ;; fails if compiler optimizations are enabled, which they
> -                        ;; are by default.
> -                        "/timer/stop"))
> -                      ("gio/tests/gapplication.c"
> -                       ( ;; XXX: proven to be unreliable.  See:
> -                        ;;  <https://bugs.debian.org/756273>
> -                        ;;  <http://bugs.gnu.org/18445>
> -                        "/gapplication/quit"
> -                        ;; XXX: fails randomly for unknown reason. See:
> -                        ;;  <https://lists.gnu.org/archive/html/guix-devel/2016-04/msg00215.html>
> -                        "/gapplication/local-actions"))
> -                      ("gio/tests/contenttype.c"
> -                       ( ;; XXX: requires shared-mime-info.
> -                        "/contenttype/guess"
> -                        "/contenttype/guess_svg_from_data"
> -                        "/contenttype/subtype"
> -                        "/contenttype/list"
> -                        "/contenttype/icon"
> -                        "/contenttype/symbolic-icon"
> -                        "/contenttype/tree"))
> -                      ("gio/tests/appinfo.c"
> -                       ( ;; XXX: requires update-desktop-database.
> -                        "/appinfo/associations"))
> -                      ("gio/tests/desktop-app-info.c"
> -                       ( ;; XXX: requires update-desktop-database.
> -                        "/desktop-app-info/delete"
> -                        "/desktop-app-info/default"
> -                        "/desktop-app-info/fallback"
> -                        "/desktop-app-info/lastused"
> -                        "/desktop-app-info/search"))
> -                      ("gio/tests/gdbus-peer.c"
> -                       ( ;; Requires /etc/machine-id.
> -                        "/gdbus/codegen-peer-to-peer"))
> -                      ("gio/tests/gdbus-address-get-session.c"
> -                       ( ;; Requires /etc/machine-id.
> -                        "/gdbus/x11-autolaunch"))
> -                      ("gio/tests/gsocketclient-slow.c"
> -                       ( ;; These tests tries to resolve "localhost", and fails.
> -                        "/socket-client/happy-eyeballs/slow"
> -                        "/socket-client/happy-eyeballs/cancellation/delayed"))
> -                      )))
> -               (for-each (lambda (x) (apply disable x)) failing-tests)
> -               #t)))
> -         (replace 'check
> -           (lambda _
> -             (setenv "MESON_TESTTHREADS"
> -                     (number->string (parallel-job-count)))
> -             ;; Do not run tests marked as "flaky".
> -             (invoke "meson" "test" "--no-suite" "flaky")))
> -         ;; TODO: meson does not permit the bindir to be outside of prefix.
> -         ;; See https://github.com/mesonbuild/meson/issues/2561
> -         ;; We can remove this once meson is patched.
> -         (add-after 'install 'move-executables
> +         ;; Meson does not permit the bindir to be outside of prefix.
> +         (add-after 'install 'move-bin
>             (lambda* (#:key outputs #:allow-other-keys)
> -             (let ((out (assoc-ref outputs "out"))
> -                   (bin (assoc-ref outputs "bin")))
> +             (let* ((out (assoc-ref outputs "out"))
> +                    (bin (assoc-ref outputs "bin")))
>                 (mkdir-p bin)
> -               (rename-file (string-append out "/bin")
> -                            (string-append bin "/bin"))
> -               ;; This one is an implementation detail of glib.
> -               ;; It is wrong that that's in "/bin" in the first place,
> -               ;; but that's what upstream is doing right now.
> -               ;; See <https://gitlab.gnome.org/GNOME/glib/issues/1633>.
> -               (mkdir (string-append out "/libexec"))
> -               (rename-file (string-append bin "/bin/gio-launch-desktop")
> -                            (string-append out "/libexec/gio-launch-desktop"))
> +               (rename-file
> +                (string-append out "/bin")
> +                (string-append bin "/bin"))
>                 ;; Do not refer to "bindir", which points to "${prefix}/bin".
>                 ;; We don't patch "bindir" to point to "$bin/bin", because that
>                 ;; would create a reference cycle between the "out" and "bin"
>                 ;; outputs.
> -               (substitute* (list (string-append out "/lib/pkgconfig/gio-2.0.pc")
> -                                  (string-append out "/lib/pkgconfig/glib-2.0.pc"))
> +               (substitute*
> +                   (list
> +                    (string-append out "/lib/pkgconfig/gio-2.0.pc")
> +                    (string-append out "/lib/pkgconfig/glib-2.0.pc"))
>                   (("bindir=\\$\\{prefix\\}/bin") "")
>                   (("=\\$\\{bindir\\}/") "="))
>                 #t))))))
>      (native-inputs
>       `(("gettext" ,gettext-minimal)
> +       ("libintl" ,intltool)
>         ("m4" ,m4)
> -       ("dbus" ,dbus)
> -       ("pkg-config" ,pkg-config)
> -       ("python" ,python-wrapper)
>         ("perl" ,perl)
> -       ("tzdata" ,tzdata-for-tests)))
> +       ("pkg-config" ,pkg-config)
> +       ("python-wrapper" ,python-wrapper)
> +       ("python" ,python)               ; For 'patch-python-references
> +       ("tzdata" ,tzdata-for-tests)
> +       ("xmllint" ,libxml2)
> +       ("xsltproc" ,libxslt)))
> +    (inputs
> +     `(("dbus" ,dbus)
> +       ("libelf" ,libelf)))
>      (propagated-inputs
> -     `(("pcre" ,pcre)
> -       ("libffi" ,libffi)
> -       ("util-linux" ,util-linux "lib")
> +     `(("libffi" ,libffi)
>         ("libselinux" ,libselinux)
> +       ("pcre" ,pcre)
> +       ("util-linux" ,util-linux "lib")
>         ("zlib" ,zlib)))
>      (native-search-paths
>       ;; This variable is not really "owned" by GLib, but several related
>       ;; packages refer to it: gobject-introspection's tools use it as a search
>       ;; path for .gir files, and it's also a search path for schemas produced
>       ;; by 'glib-compile-schemas'.
> -     (list (search-path-specification
> -            (variable "XDG_DATA_DIRS")
> -            (files '("share")))
> -           ;; To load extra gio modules from glib-networking, etc.
> -           (search-path-specification
> -            (variable "GIO_EXTRA_MODULES")
> -            (files '("lib/gio/modules")))))
> +     (list
> +      (search-path-specification
> +       (variable "XDG_DATA_DIRS")
> +       (files '("share")))
> +      ;; To load extra gio modules from glib-networking, etc.
> +      (search-path-specification
> +       (variable "GIO_EXTRA_MODULES")
> +       (files '("lib/gio/modules")))))
>      (search-paths native-search-paths)
>      (synopsis "Thread-safe general utility library; basis of GTK+ and GNOME")
>      (description
> diff --git a/gnu/packages/patches/glib-disable-failing-tests.patch b/gnu/packages/patches/glib-disable-failing-tests.patch
> new file mode 100644
> index 0000000000..3601c42030
> --- /dev/null
> +++ b/gnu/packages/patches/glib-disable-failing-tests.patch
> @@ -0,0 +1,84 @@
> +From a2e6783f2278ed32b1e552691ec5d67d6940757e Mon Sep 17 00:00:00 2001
> +From: Raghav Gururajan <[email-masked]>
> +Date: Tue, 9 Jun 2020 05:17:53 -0400
> +Subject: [PATCH] PATCH: Disable failing tests.
> +
> +---
> + gio/tests/meson.build  | 19 -------------------
> + glib/tests/meson.build |  2 --
> + 2 files changed, 21 deletions(-)
> +
> +diff --git a/gio/tests/meson.build b/gio/tests/meson.build
> +index c7c3e3035..6e38eb39e 100644
> +--- a/gio/tests/meson.build
> ++++ b/gio/tests/meson.build
> +@@ -34,7 +34,6 @@ gio_tests = {
> +   'buffered-output-stream' : {},
> +   'cancellable' : {},
> +   'contexts' : {},
> +-  'contenttype' : {},
> +   'converter-stream' : {},
> +   'credentials' : {},
> +   'data-input-stream' : {},
> +@@ -78,7 +77,6 @@ gio_tests = {
> +   'tls-certificate' : {'extra_sources' : ['gtesttlsbackend.c']},
> +   'tls-interaction' : {'extra_sources' : ['gtesttlsbackend.c']},
> +   'tls-database' : {'extra_sources' : ['gtesttlsbackend.c']},
> +-  'gdbus-address-get-session' : {},
> +   'win32-appinfo' : {},
> + }
> + 
> +@@ -135,10 +133,6 @@ endif
> + if host_machine.system() != 'windows'
> +   gio_tests += {
> +     'file' : {},
> +-    'gdbus-peer' : {
> +-      'dependencies' : [libgdbus_example_objectmanager_dep],
> +-      'install_rpath' : installed_tests_execdir
> +-    },
> +     'gdbus-peer-object-manager' : {},
> +     'live-g-file' : {},
> +     'socket-address' : {},
> +@@ -173,19 +167,6 @@ if host_machine.system() != 'windows'
> +     }
> +   endif
> + 
> +-  # Uninstalled because of the check-for-executable logic in DesktopAppInfo
> +-  # unable to find the installed executable
> +-  if not glib_have_cocoa
> +-    gio_tests += {
> +-      'appinfo' : {
> +-        'install' : false,
> +-      },
> +-      'desktop-app-info' : {
> +-        'install' : false,
> +-      },
> +-    }
> +-  endif
> +-
> +   test_extra_programs += {
> +     'basic-application' : {},
> +     'dbus-launch' : {},
> +diff --git a/glib/tests/meson.build b/glib/tests/meson.build
> +index 8da477d19..9fa24dd49 100644
> +--- a/glib/tests/meson.build
> ++++ b/glib/tests/meson.build
> +@@ -103,7 +103,6 @@ glib_tests = {
> +   'utf8-pointer' : {},
> +   'utf8-validate' : {},
> +   'utf8-misc' : {},
> +-  'utils' : {},
> +   'unicode' : {},
> +   'uri' : {},
> +   '1bit-mutex' : {},
> +@@ -151,7 +150,6 @@ if host_machine.system() == 'windows'
> + else
> +   glib_tests += {
> +     'include' : {},
> +-    'unix' : {},
> +   }
> +   if have_rtld_next
> +     glib_tests += {
> +-- 
> +2.26.2
> +
> diff --git a/gnu/packages/patches/glib-tests-timer.patch b/gnu/packages/patches/glib-tests-timer.patch
> deleted file mode 100644
> index e37425c0c8..0000000000
> --- a/gnu/packages/patches/glib-tests-timer.patch
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -* On i686 floating-point roundoff errors could sometimes cause this check to
> -  fail depending on the elapsed microseconds.  Improve rounding by adding a
> -  fractional bit.
> -
> ---- glib-2.40.0/glib/tests/timer.c	2014-03-05 08:05:42.000000000 -0600
> -+++ glib-2.40.0/glib/tests/timer.c	2014-07-10 16:33:12.746862822 -0500
> -@@ -35,7 +35,7 @@
> -   elapsed = g_timer_elapsed (timer, &micros);
> - 
> -   g_assert_cmpfloat (elapsed, <, 1.0);
> --  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6)) % 1000000);
> -+  g_assert_cmpuint (micros, ==, ((guint64)(elapsed * 1e6 + 0.5)) % 1000000);
> - 
> -   g_timer_destroy (timer);
> - }
> -- 
> 2.28.0
> 

-- 
Efraim Flashner   <[email-masked]>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted