Subject: [PATCH v3] gnu: elogind: Update to 255.17.

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 24 Jan 2025 23:56:36 +0900

* gnu/packages/freedesktop.scm (elogind): Update to 255.17.
[source]: Delete patches.
[configure-flags]: Add mode and libexecdir options.  Remove obsolete
rootlibexecdir, dbussessionservicedir and dbus-interfaces-dir ones.  Update
'man' option value to 'enabled'.
[phases] {do-not-install-empty-/var/log/elogind-dir}
{patch-tzdata}: New phases.
{adjust-tests}: Fix FHS assumptions in a few test files.  Re-instate the
cgroup and copy_holes tests.  Disable the cgroup-util, mountpoint-util,
bus-creds, login and sd-device tests.
[native-inputs]: Remove m4.  Add tzdata.
* gnu/packages/patches/elogind-fix-rpath.patch: Delete file.
* gnu/local.mk (dist_patch_DATA): De-register it.

Change-Id: I2426532b6b5143ad5e30ca879858356c4b9a2c3e
---

Changes in v3:
 - rebased

 gnu/local.mk                                 |  1 -
 gnu/packages/freedesktop.scm                 | 74 ++++++++++++++------
 gnu/packages/patches/elogind-fix-rpath.patch | 60 ----------------
 3 files changed, 54 insertions(+), 81 deletions(-)
 delete mode 100644 gnu/packages/patches/elogind-fix-rpath.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 5091f93eb8..d3fd9ecfa5 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1202,7 +1202,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/elm-ghc9.2.patch	\
   %D%/packages/patches/elm-offline-package-registry.patch	\
   %D%/packages/patches/elm-reactor-static-files.patch		\
-  %D%/packages/patches/elogind-fix-rpath.patch			\
   %D%/packages/patches/emacs-all-the-icons-remove-duplicate-rs.patch	\
   %D%/packages/patches/emacs-deferred-fix-number-of-arguments.patch	\
   %D%/packages/patches/emacs-elpy-dup-test-name.patch		\
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index c6f18e9949..380464801d 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -27,7 +27,7 @@
 ;;; Copyright © 2021 Robby Zambito <[email-masked]>
 ;;; Copyright © 2021, 2022, 2023 Maxime Devos <[email-masked]>
 ;;; Copyright © 2021, 2022, 2024 John Kehayias <[email-masked]>
-;;; Copyright © 2021-2024 Maxim Cournoyer <[email-masked]>
+;;; Copyright © 2021-2025 Maxim Cournoyer <[email-masked]>
 ;;; Copyright © 2022 Daniel Meißner <[email-masked]>
 ;;; Copyright © 2022 Wamm K. D. <[email-masked]>
 ;;; Copyright © 2022 Petr Hodina <[email-masked]>
@@ -823,7 +823,7 @@ (define-public libxdg-basedir
 (define-public elogind
   (package
     (name "elogind")
-    (version "252.9")
+    (version "255.17")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -832,8 +832,7 @@ (define-public elogind
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "049cfv97975x700s7lx4p9i22nv6v7j046iwkspxba7kr5qq7akw"))
-              (patches (search-patches "elogind-fix-rpath.patch"))))
+                "0cb6p559281dzh24is91v6d4v4kz45yhyizibi4sfql9nign865h"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags
@@ -842,11 +841,8 @@ (define-public elogind
                  (libexec (string-append out "/libexec/elogind"))
                  (dbus-data (string-append out "/share/dbus-1"))
                  (dbuspolicy (string-append dbus-data "/system.d"))
-                 (dbussessionservice (string-append dbus-data "/services"))
                  (dbussystemservice (string-append dbus-data
                                                    "/system-services"))
-                 (dbusinterfaces (string-append dbus-data "/interfaces"))
-
                  #$@(if (not (target-riscv64?))
                         #~((kexec-tools #$(this-package-input "kexec-tools")))
                         #~())
@@ -860,13 +856,11 @@ (define-public elogind
                  (poweroff-path (string-append shepherd "/sbin/shutdown"))
                  (reboot-path (string-append shepherd "/sbin/reboot")))
             (list
-             (string-append "-Drootprefix=" out)
+             "-Dmode=release"
+             (string-append "-Dlibexecdir=" libexec)
              (string-append "-Dsysconfdir=" sysconf)
-             (string-append "-Drootlibexecdir=" libexec)
              (string-append "-Ddbuspolicydir=" dbuspolicy)
-             (string-append "-Ddbussessionservicedir=" dbussessionservice)
              (string-append "-Ddbussystemservicedir=" dbussystemservice)
-             (string-append "-Ddbus-interfaces-dir=" dbusinterfaces)
              (string-append "-Dc_link_args=-Wl,-rpath=" libexec)
              (string-append "-Dcpp_link_args=-Wl,-rpath=" libexec)
              (string-append "-Dhalt-path=" halt-path)
@@ -877,7 +871,7 @@ (define-public elogind
              (string-append "-Dreboot-path=" reboot-path)
              (string-append "-Dnologin-path=" nologin-path)
              "-Dcgroup-controller=elogind"
-             "-Dman=true"
+             "-Dman=enabled"
              ;; Disable some tests.
              "-Dslow-tests=false"
              ;; Adjust the default user shell to /bin/sh (otherwise it is set
@@ -885,6 +879,18 @@ (define-public elogind
              "-Ddefault-user-shell=/bin/sh"))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tzdata
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (substitute* "src/basic/time-util.c"
+               (("/usr/share/zoneinfo")
+                (search-input-directory (or native-inputs inputs)
+                                        "share/zoneinfo")))))
+         (add-after 'unpack 'do-not-install-empty-/var/log/elogind-dir
+           (lambda _
+             ;; This is the elogind state directory, which is not writable in
+             ;; the build environment.
+             (substitute* "meson.build"
+               (("install_emptydir\\(elogindstatedir)") ""))))
          (add-after 'unpack 'fix-pkttyagent-path
            (lambda _
              (substitute* "meson.build"
@@ -901,18 +907,46 @@ (define-public elogind
                (("PKGSYSCONFDIR") "\"/etc/elogind\""))))
          (add-after 'unpack 'adjust-tests
            (lambda _
+             ;; A few tests expect /var/tmp to exists, but it doesn't in the
+             ;; container.
+             (substitute* '("src/test/test-xattr-util.c"
+                            "src/test/test-copy.c"
+                            "src/test/test-fs-util.c")
+               (("/var/tmp/")
+                "/tmp/"))
+             (substitute* "src/test/test-xattr-util.c"
+               ;; The xattr-util test depends on /usr; patch it to use /tmp
+               ;; instead.
+               (("fd, \"usr\", \"user.idontexist\"")
+                "fd, \"/tmp\", \"user.idontexist\""))
+             (substitute* '("src/test/test-chase.c"
+                            "src/test/test-fd-util.c")
+               ;; Many checks use /usr, which doesn't exist in our
+               ;; environment.
+               (("/usr")
+                "/tmp")
+               (("\"usr\"")
+                "\"tmp\""))
              (substitute* "src/test/meson.build"
-               ((".*'test-cgroup.c'.*") "")) ;no cgroup in container
+               ;; Requires cgroup support.
+               ((".*'test-cgroup-util\\.c'.*") "")
+               ;; Requires privilege to create mount namespaces.
+               ((".*'test-mountpoint-util\\.c'.*") ""))
+             (substitute* "src/libelogind/meson.build"
+               ;; The bus-creds test fails due to requiring cgroups.
+               ((".*'sd-bus/test-bus-creds.c'.*") "")
+               ;; The login test fails due to 'sd_pid_get_slice' returning
+               ;; NULL.
+               ((".*'sd-login/test-login.c'.*") "")
+               ;; The sd-device test fails due to 'devname_from_devnum'
+               ;; returning NULL.
+               ((".*'sd-device/test-sd-device.c'.*") ""))
              ;; This test tries to copy some bytes from /usr/lib/os-release,
              ;; which does not exist in the build container.  Choose something
              ;; more likely to be available.
              (substitute* "src/test/test-copy.c"
                (("/usr/lib/os-release")
-                "/etc/passwd")
-               ;; Skip the copy_holes test, which fails for unknown reasons
-               ;; (see: https://github.com/elogind/elogind/issues/261).
-               (("TEST_RET\\(copy_holes).*" all)
-                (string-append all "        return 77;\n")))
+                "/etc/passwd"))
              ;; Use a shebang that works in the build container.
              (substitute* "src/test/test-exec-util.c"
                (("#!/bin/sh")
@@ -948,11 +982,11 @@ (define-public elogind
            docbook-xsl
            gettext-minimal
            gperf
-           m4
            pkg-config
            python
            python-jinja2
-           libxslt))
+           libxslt
+           tzdata))
     (inputs
      (append
       (if (not (target-riscv64?))
diff --git a/gnu/packages/patches/elogind-fix-rpath.patch b/gnu/packages/patches/elogind-fix-rpath.patch
deleted file mode 100644
index 2a76cc467f..0000000000
--- a/gnu/packages/patches/elogind-fix-rpath.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Retrieved from https://github.com/elogind/elogind/issues/258
-
-From: Mark Hindley <[email-masked]>
-Date: Wed, 24 May 2023 10:39:41 +0100
-Subject: Fixup_executable_rpath
-
-./meson.build sets
-
- install_rpath : rootlibexecdir
-
-however src/shared/meson.build sets
-
-libshared = shared_library(
-          [snip]
-        install_dir : rootpkglibdir
-        )
----
- meson.build | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index 694a2fd..a575f69 100644
---- a/meson.build
-+++ b/meson.build
-@@ -2903,7 +2903,7 @@ executable('elogind',
-                 dependencies : [threads,
-                                 libacl,
-                                 libudev],
--                install_rpath : rootlibexecdir,
-+                install_rpath : rootpkglibdir,
-                 install : true,
-                 install_dir : rootlibexecdir)
- 
-@@ -2913,7 +2913,7 @@ exe = executable('loginctl',
-                         link_with : [libshared],
-                         dependencies : [threads,
-                                         libudev],
--                        install_rpath : rootlibexecdir,
-+                        install_rpath : rootpkglibdir,
-                         install : true,
-                         install_dir : rootbindir)
- public_programs += [exe]
-@@ -2923,7 +2923,7 @@ exe = executable('elogind-inhibit',
-                         include_directories : includes,
-                         link_with : [libshared],
-                         dependencies : [threads],
--                        install_rpath : rootlibexecdir,
-+                        install_rpath : rootpkglibdir,
-                         install : true,
-                         install_dir : rootbindir)
- public_programs += [exe]
-@@ -4283,7 +4283,7 @@ executable('elogind-uaccess-command',
-                         libshared],
-            dependencies: [libacl,
-                           libudev],
--           install_rpath : rootlibexecdir,
-+           install_rpath : rootpkglibdir,
-            install : true,
-            install_dir : rootlibexecdir)
- #endif // 0

base-commit: 9b98e4b0ee45fb712d815601645fb561a83b4e25
-- 
2.47.1