aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2023-09-19 13:23:22 +0200
committerLiliana Marie Prikler <liliana.prikler@gmail.com>2023-10-10 21:59:24 +0200
commitcde1becfaba7a5757b881a5940ef0c6c2a70794f (patch)
treed1a1cf9706c3251674da87e2ab3018fe6f2ef47a
parentd6462be6a83bf33b569980734fb7ee23836c91a0 (diff)
downloadguix-cde1becfaba7a5757b881a5940ef0c6c2a70794f.tar
guix-cde1becfaba7a5757b881a5940ef0c6c2a70794f.tar.gz
gnu: eudev: Update to 3.2.14.
Eudev now has a hardware database /etc/udev/hwdb.bin made up of descriptions installed in the /lib/udev/hwdb.d directory of each package, and more generally, UDEV_HWDB_PATH. This database index is compiled with udevadm hwdb --update. The udev-service-type collects the files and compiles the index. Previously, the hardware description files provided by eudev would be compiled into $prefix/etc/udev/hwdb.bin in the eudev output. * gnu/packages/linux.scm (eudev): Update to 3.2.14. [modules]: Import (guix build utils). [#:phases] <allow-eudev-hwdb>: New phase. <install-in-lib>: New phase. <build-hwdb>: Remove phase. [#:configure-flags]: Set sysconfdir to avoid a prefix. [native-search-paths]: Add UDEV_HWDB_PATH. * gnu/packages/patches/eudev-rules-directory.patch: Rebase it.
-rw-r--r--gnu/packages/linux.scm57
-rw-r--r--gnu/packages/patches/eudev-rules-directory.patch9
2 files changed, 45 insertions, 21 deletions
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index c993e7b9bb..c5049843eb 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -4327,10 +4327,9 @@ to the in-kernel OOM killer.")
(license license:expat)))
(define-public eudev
- ;; The post-systemd fork, maintained by Gentoo.
(package
(name "eudev")
- (version "3.2.11")
+ (version "3.2.14")
(source (origin
(method git-fetch)
(uri (git-reference (url "https://github.com/gentoo/eudev")
@@ -4338,8 +4337,9 @@ to the in-kernel OOM killer.")
(file-name (git-file-name name version))
(sha256
(base32
- "0dzaqwjnl55f69ird57wb6skahc6l7zs1slsrzqqfhww33icp6av"))
- (patches (search-patches "eudev-rules-directory.patch"))))
+ "1f6lz57igi7iw2ls3fpzgw42bfznam4nf9368h7x8yf1mb737yxz"))
+ (patches (search-patches "eudev-rules-directory.patch"))
+ (modules '((guix build utils)))))
(build-system gnu-build-system)
(arguments
(list
@@ -4350,6 +4350,31 @@ to the in-kernel OOM killer.")
(substitute* "man/make.sh"
(("/usr/bin/xsltproc")
(search-input-file (or native-inputs inputs) "/bin/xsltproc")))))
+ (add-before 'bootstrap 'install-in-lib
+ (lambda _
+ ;; When the udev-service-type instantiates /etc, it collects
+ ;; hardware files from the <package>/lib/udev/hwdb.d directories
+ ;; of different packages. Since we set sysconfdir to /etc, the
+ ;; only package-dependent location we can install hwdb files is
+ ;; in <package>/lib/udev/hwdb.d. Eudev is configured to install
+ ;; these files in sysconfdir, but they should be placed into
+ ;; udevlibexecdir.
+ (copy-file "hwdb/Makefile.am" "hwdb/files.am")
+ (call-with-output-file "hwdb/Makefile.am"
+ (lambda (port)
+ (format port "hardwarelibdir = $(udevlibexecdir)/hwdb.d\n")
+ (format port "include ./files.am")))
+ (substitute* "hwdb/files.am"
+ (("dist_udevhwdb_DATA =")
+ "dist_hardwarelib_DATA ="))
+ ;; Do not install the empty udev.conf template.
+ (substitute* "src/udev/Makefile.am"
+ (("dist_udevconf_DATA =")
+ "dist_noinst_DATA ="))
+ ;; Do not ensure that /etc/udev/rules.d exists.
+ (substitute* "rules/Makefile.am"
+ (("\\$\\(MKDIR_P\\) \\$\\(DESTDIR\\)\\$\\(udevconfdir\\)/rules\\.d")
+ "true"))))
(add-after 'install 'move-static-library
(lambda _
(let ((source (string-append #$output "/lib/libudev.a"))
@@ -4361,19 +4386,17 @@ to the in-kernel OOM killer.")
;; such that Libtool looks for it in the usual places.
(substitute* (string-append #$output "/lib/libudev.la")
(("old_library=.*")
- "old_library=''\n")))))
- (add-after 'install 'build-hwdb
- (lambda _
- ;; Build OUT/etc/udev/hwdb.bin. This allows 'lsusb' and
- ;; similar tools to display product names.
- ;;
- ;; XXX: This can't be done when cross-compiling. Find another way
- ;; to generate hwdb.bin for cross-built systems.
- #$@(if (%current-target-system)
- #~(#t)
- #~((invoke (string-append #$output "/bin/udevadm")
- "hwdb" "--update"))))))
- #:configure-flags #~(list "--enable-manpages")))
+ "old_library=''\n"))))))
+ #:configure-flags
+ #~(list "--enable-manpages"
+ ;; By default, autoconf uses $prefix/etc. The udev-service-type
+ ;; makes sure /etc is set up with rules and hardware file
+ ;; descriptions.
+ "--sysconfdir=/etc")))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "UDEV_HWDB_PATH")
+ (files '("lib/udev/hwdb.d")))))
(native-inputs
(list autoconf
automake
diff --git a/gnu/packages/patches/eudev-rules-directory.patch b/gnu/packages/patches/eudev-rules-directory.patch
index 54fc01c6d5..c4b1cfae39 100644
--- a/gnu/packages/patches/eudev-rules-directory.patch
+++ b/gnu/packages/patches/eudev-rules-directory.patch
@@ -4,9 +4,9 @@ The old udev 182 supported $UDEV_CONFIG_FILE, which in turn allowed
the search path to be customized, but eudev no longer has this, hence
this hack.
---- eudev-3.1.5/src/udev/udev-rules.c 2015-10-13 06:22:14.000000000 +0800
-+++ eudev-3.1.5/src/udev/udev-rules.c 2015-10-16 20:45:38.491934336 +0800
-@@ -47,15 +47,11 @@
+--- a/src/udev/udev-rules.c
++++ b/src/udev/udev-rules.c
+@@ -48,16 +48,11 @@ struct uid_gid {
};
};
@@ -20,11 +20,12 @@ this hack.
- "/lib/udev/rules.d",
- "/usr/lib/udev/rules.d",
-#endif
+- "/usr/local/lib/udev/rules.d",
+ NULL, /* placeholder for $EUDEV_RULES_DIRECTORY */
NULL};
struct udev_rules {
-@@ -1704,6 +1700,9 @@
+@@ -1718,6 +1713,9 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names) {
udev_rules_check_timestamp(rules);