diff mbox series

[PATCH/next,v9,06/12] package/libudev: make it selectable

Message ID 20230806140241.4155773-7-bernd@kuhls.net
State New
Headers show
Series Introduce libudev (branch yem/libudev-6) | expand

Commit Message

Bernd Kuhls Aug. 6, 2023, 2:02 p.m. UTC
From: "Yann E. MORIN" <yann.morin.1998@free.fr>

Usually, it is not possible for a package to select a virtual package it
depends on, and expects a provider to suddenly be available.

However, for libudev, this is slightly simpler: there will be only two
providers ever: eudev and systemd. Both are incompatible one with the
other, systemd is only available if chosen as an init system.

So, if systemd is not enabled (as an init system), then we can
forcefully enable eudev as the provider for libudev.

However, this can cause circular dependencies in Kconfig, du to a rather
complex chain of select and depends. For example, when libinput is
converting in a later patch, we'd end up with:

    package/weston/Config.in:6:error: recursive dependency detected!
    package/weston/Config.in:6:     symbol BR2_PACKAGE_WESTON depends on BR2_PACKAGE_HAS_UDEV
    package/udev/Config.in:1:       symbol BR2_PACKAGE_HAS_UDEV is selected by BR2_PACKAGE_EUDEV_DAEMON
    package/eudev/Config.in:24:     symbol BR2_PACKAGE_EUDEV_DAEMON depends on BR2_PACKAGE_EUDEV
    package/eudev/Config.in:1:      symbol BR2_PACKAGE_EUDEV is selected by BR2_PACKAGE_LIBUDEV
    package/libudev/Config.in:1:    symbol BR2_PACKAGE_LIBUDEV is selected by BR2_PACKAGE_LIBINPUT
    package/libinput/Config.in:1:   symbol BR2_PACKAGE_LIBINPUT is selected by BR2_PACKAGE_WESTON

The root cause being a mis-match of select and depends on in the same
chain, where Kconfig can not determine that an external condition will
ensure that the chain is in fact broken at some point.

To fix that, we move the symbol for the eudev daemon out of the eudev
if-block. This breaks the chain.

Yet, we still want to tell the user that the daemon is enabled, so we
introduce a dummy symbol, just for the sake of having a forced-on
prompt.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
---
 package/eudev/Config.in   | 25 +++++++++++++++++--------
 package/libudev/Config.in |  7 +++++++
 2 files changed, 24 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/package/eudev/Config.in b/package/eudev/Config.in
index b7fa6b8bc5..d35e442c2f 100644
--- a/package/eudev/Config.in
+++ b/package/eudev/Config.in
@@ -1,3 +1,17 @@ 
+# This symbol is outside the eudev if-block, so that we do not have
+# a circular dependency in kconfig. Thus, we need the dummy symbol,
+# below, to inform the user that the daemon has indeed been enabled.
+config BR2_PACKAGE_EUDEV_DAEMON
+	bool
+	select BR2_PACKAGE_HAS_UDEV
+	select BR2_PACKAGE_UDEV_GENTOO_SCRIPTS if BR2_INIT_OPENRC
+	select BR2_PACKAGE_UTIL_LINUX
+	select BR2_PACKAGE_UTIL_LINUX_LIBS
+	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
+	select BR2_PACKAGE_KMOD
+	# We can select this has we're sure eudev is selected when we are.
+	select BR2_PACKAGE_EUDEV_DAEMON_DUMMY
+
 config BR2_PACKAGE_EUDEV
 	bool "eudev"
 	depends on BR2_USE_MMU # uses fork()
@@ -18,19 +32,14 @@  if BR2_PACKAGE_EUDEV
 config BR2_PACKAGE_PROVIDES_LIBUDEV
 	default "eudev"
 
-config BR2_PACKAGE_EUDEV_DAEMON
+config BR2_PACKAGE_EUDEV_DAEMON_DUMMY
 	bool "udev daemon"
 	depends on BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV
-	select BR2_PACKAGE_HAS_UDEV
-	select BR2_PACKAGE_UDEV_GENTOO_SCRIPTS if BR2_INIT_OPENRC
-	select BR2_PACKAGE_UTIL_LINUX
-	select BR2_PACKAGE_UTIL_LINUX_LIBS
-	select BR2_PACKAGE_UTIL_LINUX_LIBBLKID
-	select BR2_PACKAGE_KMOD
 	help
 	  Install the udev daemon.
 
-if BR2_PACKAGE_EUDEV_DAEMON
+# Use the dummy symbol for proper indetation
+if BR2_PACKAGE_EUDEV_DAEMON_DUMMY
 
 config BR2_PACKAGE_PROVIDES_UDEV
 	default "eudev"
diff --git a/package/libudev/Config.in b/package/libudev/Config.in
index 2dbafe4991..8784f4374a 100644
--- a/package/libudev/Config.in
+++ b/package/libudev/Config.in
@@ -1,3 +1,10 @@ 
+config BR2_PACKAGE_LIBUDEV
+	bool
+	depends on BR2_USE_MMU # eudev / systemd
+	depends on BR2_USE_WCHAR # eudev / systemd
+	depends on !BR2_STATIC_LIBS # eudev / systemd
+	select BR2_PACKAGE_EUDEV if !BR2_PACKAGE_SYSTEMD
+
 config BR2_PACKAGE_HAS_LIBUDEV
 	bool