Ok, a few comments from me.

On Mon, 06 Aug 2012 13:00:08 +0300
Samuli Suominen <ssuomi...@gentoo.org> wrote:

> --- systemd.eclass    2012-08-06 12:49:20.532528219 +0300
> +++ /tmp/systemd.eclass       2012-08-06 12:57:28.333542735 +0300

First of all, I'm not really convinced systemd.eclass is a good place
for this.

The main reason for introducing a separate systemd.eclass was to have
a single place to control installing systemd unit files. The rule is
quite simple here: you install systemd unit files, you inherit
the eclass.

Most importantly, this allows us to easily find out which packages
install such files and perform global operations on them. For example,
if a particular user had systemd locations in INSTALL_MASK and changed
his mind, he can easily update his system by rebuilding all packages
inheriting systemd.eclass.

If all packages installing udev rules start inheriting it, the above
will no longer be correct. Also, the opposite way -- rebuilding
packages installing udev rules -- won't be that easy.

That's not my call but I believe that putting those functions in
separate udev.eclass could be the best course of action, for the reason
stated above -- we can easily find out what installs them, and rebuild
it all at once.

> @@ -25,6 +25,8 @@
>  # }
>  # @CODE
>  
> +inherit toolchain-funcs
> +
>  case ${EAPI:-0} in
>       0|1|2|3|4) ;;
>       *) die "${ECLASS}.eclass API in EAPI ${EAPI} not yet
> established." @@ -34,6 +36,31 @@
>  DEPEND="!<sys-apps/systemd-29-r4
>       !=sys-apps/systemd-37-r1"
>  
> +# @FUNCTION: _systemd_get_udevdir
> +# @INTERNAL
> +# @DESCRIPTION:
> +# Get unprefixed udevdir.
> +_systemd_get_udevdir() {
> +     if $($(tc-getPKG_CONFIG) --exists udev); then
> +             echo -n "$($(tc-getPKG_CONFIG) --variable=udevdir
> udev)"

Secondly, I believe you shouldn't do such a thing *without* depending
on udev. Even though there is fallback here, there is another problem:
you are introducing a *potential inconsistency* between built packages,
depending on contents of udev.pc. Thus, I believe the package should
depend on the package providing it so that the dependency tree is
complete.

Also, I'm not so sure if this will work correctly for Prefix.

> +     else
> +             echo -n /lib/udev
> +     fi
> +}

And finally, I believe we shouldn't even be making the install location
variable. Right now, the Gentoo location for udev rules is /lib/udev,
and I believe William will agree with me on this. We hadn't decided on
moving them, and thus all udev and systemd versions in the tree *will*
support /lib/udev (I still need to commit patched systemd).

If we decide to move rules to /usr/lib/udev, I believe we will move
them all at once. And then all users will have to use a newer
(or patched) udev supporting the new location (or both). In order to
enforce that, the eclass would have to block old udev versions (like
the systemd.eclass blocks old systemd versions).

Making the install location dynamic is just asking for trouble.
Consider the following: user installs new udev, rebuilds package, then
downgrades udev. Package rules no longer work. That's what we would
like to avoid.

> +
> +# @FUNCTION: systemd_get_udevdir
> +# @DESCRIPTION:
> +# Output the path for the udev directory (not including ${D}).
> +# This function always succeeds, even if udev is not installed.
> +# Dependencies need to include sys-fs/udev or otherwise
> +# the fallback return value is /lib/udev.
> +systemd_get_udevdir() {
> +     has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
> +     debug-print-function ${FUNCNAME} "${@}"
> +
> +     echo -n "${EPREFIX}$(_systemd_get_udevdir)"
> +}
> +
>  # @FUNCTION: _systemd_get_unitdir
>  # @INTERNAL
>  # @DESCRIPTION:

As a final note, please note that this is mostly my opinion as systemd
maintainer. I believe William has a final word on udev itself.

-- 
Best regards,
Michał Górny

Attachment: signature.asc
Description: PGP signature

Reply via email to