Subject: [PATCH gnome-team 1/3] gnu: eudev: Update libudev version to 251.

From: Vivien Kraus <[email-masked]>
Date: Tue, 19 Sep 2023 13:23:22 +0200

Support for version 251 is only provided as a merge request for now:

https://github.com/eudev-project/eudev/pull/253

This merge request bumps the eudev version to 3.2.14, but it has not been
released yet.

The udevadm command to generate the hwdb.bin file now looks at file under
/lib/udev/hwdb.d, and generates /lib/udev/hwdb.bin. The intention is not to
touch /etc so that users can supply their own files. The steps to generate the
file are:

1. Copy /etc/udev/hwdb.d to /lib/udev/hwdb.d to accept all files from eudev;
2. Generate /lib/udev/hwdb.bin from /lib/udev/hwdb.d (by passing --usr to the
udevadm command-line) − if not cross-compiling;
3. Copy /lib/udev/hwdb.bin to /etc/udev − if not cross-compiling.

Point 1. is dealt with in a new phase, and points 2. and 3. are dealt with in
the 'build-hwdb phase.

* gnu/packages/linux.scm (eudev): Update to v3.2.12, but bump version to
3.2.14.beta.
[#:phases] <allow-eudev-hwdb>: New phase.
<build-hwdb>: Update accordingly.
* gnu/packages/patches/eudev-bump-to-251.patch: New file.
* gnu/packages/linux.scm (eudev): Use it here.
* gnu/local.mk (dist_patch_DATA): Register it here.
---
 gnu/local.mk                                 |   1 +
 gnu/packages/linux.scm                       |  22 ++-
 gnu/packages/patches/eudev-bump-to-251.patch | 134 +++++++++++++++++++
 3 files changed, 151 insertions(+), 6 deletions(-)
 create mode 100644 gnu/packages/patches/eudev-bump-to-251.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index db21feb507..8b9365055d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1122,6 +1122,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/esmini-use-pkgconfig.patch		\
   %D%/packages/patches/esmtp-add-lesmtp.patch		\
   %D%/packages/patches/eudev-rules-directory.patch		\
+  %D%/packages/patches/eudev-bump-to-251.patch		\
   %D%/packages/patches/evdi-fix-build-with-linux-6.2.patch	\
   %D%/packages/patches/exercism-disable-self-update.patch	\
   %D%/packages/patches/extempore-unbundle-external-dependencies.patch	\
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 91109c41d9..2cad9cbbe9 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -4225,16 +4225,17 @@ (define-public eudev
   ;; The post-systemd fork, maintained by Gentoo.
   (package
     (name "eudev")
-    (version "3.2.11")
+    (version "3.2.14.beta")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url "https://github.com/gentoo/eudev")
-                                  (commit (string-append "v" version))))
+                                  (commit "v3.2.12")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0dzaqwjnl55f69ird57wb6skahc6l7zs1slsrzqqfhww33icp6av"))
-              (patches (search-patches "eudev-rules-directory.patch"))))
+                "0wpckjxzsb4wkj3pwnw14zmp3z8ivf03hjbgs838q5gfridpxnf7"))
+              (patches (search-patches "eudev-rules-directory.patch"
+                                       "eudev-bump-to-251.patch"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -4257,7 +4258,14 @@ (define-public eudev
                 (substitute* (string-append #$output "/lib/libudev.la")
                   (("old_library=.*")
                    "old_library=''\n")))))
-          (add-after 'install 'build-hwdb
+          (add-after 'install 'allow-eudev-hwdb
+            (lambda _
+              ;; eudev distributes the hwdb, but each file has to be enabled
+              ;; by being copied under /lib/udev/hwdb.d. We accept all of
+              ;; them.
+              (symlink (string-append #$output "/etc/udev/hwdb.d")
+                       (string-append #$output "/lib/udev/hwdb.d"))))
+          (add-after 'allow-eudev-hwdb 'build-hwdb
             (lambda _
               ;; Build OUT/etc/udev/hwdb.bin.  This allows 'lsusb' and
               ;; similar tools to display product names.
@@ -4267,7 +4275,9 @@ (define-public eudev
               #$@(if (%current-target-system)
                      #~(#t)
                      #~((invoke (string-append #$output "/bin/udevadm")
-                                "hwdb" "--update"))))))
+                                "hwdb" "--update" "--usr")
+                        (symlink (string-append #$output "/lib/udev/hwdb.bin")
+                                 (string-append #$output "/etc/udev/hwdb.bin")))))))
        #:configure-flags #~(list "--enable-manpages")))
     (native-inputs
      (list autoconf
diff --git a/gnu/packages/patches/eudev-bump-to-251.patch b/gnu/packages/patches/eudev-bump-to-251.patch
new file mode 100644
index 0000000000..96a73f4ede
--- /dev/null
+++ b/gnu/packages/patches/eudev-bump-to-251.patch
@@ -0,0 +1,134 @@
+From 4d29151078c351569767dfef490a29e379afd430 Mon Sep 17 00:00:00 2001
+Message-ID: <[email-masked]>
+In-Reply-To: <[email-masked]>
+References: <[email-masked]>
+From: Boian Bonev <[email-masked]>
+Date: Tue, 30 May 2023 16:16:33 +0000
+Subject: [PATCH 1/1] Update as per IRC discussion
+
+Bump udev version to 251
+
+Export dummies for
+
+ - udev_device_has_current_tag
+ - udev_device_get_current_tags_list_entry
+
+since the current eudev device database does not support the concept of
+current tags
+
+bump version to 3.2.14
+---
+ README.md                    | 18 ++++++++++++------
+ configure.ac                 |  4 ++--
+ src/libudev/libudev-device.c | 11 +++++++++++
+ src/libudev/libudev.h        |  2 ++
+ src/libudev/libudev.sym      |  6 ++++++
+ 5 files changed, 33 insertions(+), 8 deletions(-)
+
+diff --git a/README.md b/README.md
+index 848ef3348..6016380ba 100644
+--- a/README.md
++++ b/README.md
+@@ -1,11 +1,17 @@
+-This git repo is a fork of git://anongit.freedesktop.org/systemd/systemd
+-with the aim of isolating udev from any particular flavor of system
+-initialization.  In this case, the isolation is from systemd.
++**eudev** is a standalone dynamic and persistent device naming support (aka
++userspace devfs) daemon that runs independently from the init system.
++**eudev** strives to remain init system and linux distribution neutral. It is
++currently used as the devfs manager for more than a dozen different linux
++distributions.
++
++This git repo is a fork of git://anongit.freedesktop.org/systemd/systemd with
++the aim of isolating udev from any particular flavor of system initialization.
++In this case, the isolation is from systemd.
+ 
+ This is a project started by Gentoo developers and testing was initially being
+-done mostly on OpenRC.  We welcome contribution from others using a variety of
+-system initializations to ensure eudev remains system initialization and
+-distribution neutral.  On 2021-08-20 Gentoo decided to abandon eudev and a new
++done mostly on OpenRC. We welcome contribution from others using a variety of
++system initializations to ensure **eudev** remains system initialization and
++distribution neutral. On 2021-08-20 Gentoo decided to abandon eudev and a new
+ project was established on 2021-09-14 by Alpine, Devuan and Gentoo
+ contributors (alphabetical order).
+ 
+diff --git a/configure.ac b/configure.ac
+index 3e31b0ebc..0d9a135bc 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1,6 +1,6 @@
+ AC_PREREQ([2.68])
+-AC_INIT([eudev],[3.2.12],[https://github.com/gentoo/eudev/issues])
+-AC_SUBST(UDEV_VERSION, 243)
++AC_INIT([eudev],[3.2.14],[https://github.com/gentoo/eudev/issues])
++AC_SUBST(UDEV_VERSION, 251)
+ AC_CONFIG_SRCDIR([src/udev/udevd.c])
+ 
+ AC_USE_SYSTEM_EXTENSIONS
+diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
+index ac67ce846..7d7a6622e 100644
+--- a/src/libudev/libudev-device.c
++++ b/src/libudev/libudev-device.c
+@@ -1819,6 +1819,12 @@ _public_ struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_dev
+         return udev_list_get_entry(&udev_device->tags_list);
+ }
+ 
++_public_ struct udev_list_entry *udev_device_get_current_tags_list_entry(struct udev_device *udev_device)
++{
++        // TODO: eudev database does not support current tags
++        return udev_device_get_tags_list_entry(udev_device);
++}
++
+ /**
+  * udev_device_has_tag:
+  * @udev_device: udev device
+@@ -1842,6 +1848,11 @@ _public_ int udev_device_has_tag(struct udev_device *udev_device, const char *ta
+         return false;
+ }
+ 
++_public_ int udev_device_has_current_tag(struct udev_device *udev_device, const char *tag) {
++        // TODO: eudev database does not support current tags
++        return udev_device_has_tag(udev_device, tag);
++}
++
+ #define ENVP_SIZE                        128
+ #define MONITOR_BUF_SIZE                4096
+ static int update_envp_monitor_buf(struct udev_device *udev_device)
+diff --git a/src/libudev/libudev.h b/src/libudev/libudev.h
+index 8491d2b81..0202964d6 100644
+--- a/src/libudev/libudev.h
++++ b/src/libudev/libudev.h
+@@ -100,6 +100,7 @@ int udev_device_get_is_initialized(struct udev_device *udev_device);
+ struct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device *udev_device);
+ struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device);
+ struct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device);
++struct udev_list_entry *udev_device_get_current_tags_list_entry(struct udev_device *udev_device);
+ struct udev_list_entry *udev_device_get_sysattr_list_entry(struct udev_device *udev_device);
+ const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key);
+ const char *udev_device_get_driver(struct udev_device *udev_device);
+@@ -110,6 +111,7 @@ unsigned long long int udev_device_get_usec_since_initialized(struct udev_device
+ const char *udev_device_get_sysattr_value(struct udev_device *udev_device, const char *sysattr);
+ int udev_device_set_sysattr_value(struct udev_device *udev_device, const char *sysattr, char *value);
+ int udev_device_has_tag(struct udev_device *udev_device, const char *tag);
++int udev_device_has_current_tag(struct udev_device *udev_device, const char *tag);
+ 
+ /*
+  * udev_monitor
+diff --git a/src/libudev/libudev.sym b/src/libudev/libudev.sym
+index 76726fca7..d56c2aeab 100644
+--- a/src/libudev/libudev.sym
++++ b/src/libudev/libudev.sym
+@@ -118,3 +118,9 @@ global:
+         udev_queue_flush;
+         udev_queue_get_fd;
+ } LIBUDEV_199;
++
++LIBUDEV_247 {
++global:
++        udev_device_has_current_tag;
++        udev_device_get_current_tags_list_entry;
++} LIBUDEV_215;
+-- 
+2.41.0
+
-- 
2.41.0