# Copyright 2003-2020 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 inherit bash-completion-r1 linux-info meson ninja-utils multilib-minimal toolchain-funcs udev usr-ldscript if [[ ${PV} = 9999* ]]; then EGIT_REPO_URI="https://github.com/systemd/systemd.git" inherit git-r3 else if [[ ${PV} == *.* ]]; then MY_PN=systemd-stable else MY_PN=systemd fi MY_PV=${PV/_/-} MY_P=${MY_PN}-${MY_PV} S=${WORKDIR}/${MY_P} SRC_URI="https://github.com/systemd/${MY_PN}/archive/v${MY_PV}/${MY_P}.tar.gz" KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86" fi DESCRIPTION="Linux dynamic and persistent device naming support (aka userspace devfs)" HOMEPAGE="https://www.freedesktop.org/wiki/Software/systemd" LICENSE="LGPL-2.1 MIT GPL-2" SLOT="0" IUSE="acl +kmod selinux static-libs" RESTRICT="test" BDEPEND=" dev-util/gperf >=dev-util/intltool-0.50 >=sys-apps/coreutils-8.16 virtual/pkgconfig app-text/docbook-xml-dtd:4.2 app-text/docbook-xml-dtd:4.5 app-text/docbook-xsl-stylesheets dev-libs/libxslt " COMMON_DEPEND=" >=sys-apps/util-linux-2.30[${MULTILIB_USEDEP}] sys-libs/libcap:0=[${MULTILIB_USEDEP}] acl? ( sys-apps/acl ) kmod? ( >=sys-apps/kmod-15 ) selinux? ( >=sys-libs/libselinux-2.1.9 ) " DEPEND="${COMMON_DEPEND} >=sys-kernel/linux-headers-3.9 " RDEPEND="${COMMON_DEPEND} acct-group/kmem acct-group/tty acct-group/audio acct-group/cdrom acct-group/dialout acct-group/disk acct-group/input acct-group/kvm acct-group/lp acct-group/render acct-group/tape acct-group/video !sys-apps/gentoo-systemd-integration !sys-apps/systemd " PDEPEND=">=sys-apps/hwids-20140304[udev] >=sys-fs/udev-init-scripts-34" pkg_setup() { if [[ ${MERGE_TYPE} != buildonly ]]; then CONFIG_CHECK="~BLK_DEV_BSG ~DEVTMPFS ~!IDE ~INOTIFY_USER ~!SYSFS_DEPRECATED ~!SYSFS_DEPRECATED_V2 ~SIGNALFD ~EPOLL ~FHANDLE ~NET ~!FW_LOADER_USER_HELPER ~UNIX" linux-info_pkg_setup # CONFIG_FHANDLE was introduced by 2.6.39 local MINKV=2.6.39 if kernel_is -lt ${MINKV//./ }; then eerror "Your running kernel is too old to run this version of ${P}" eerror "You need to upgrade kernel at least to ${MINKV}" fi if kernel_is -lt 3 7; then ewarn "Your running kernel is too old to have firmware loader and" ewarn "this version of ${P} doesn't have userspace firmware loader" ewarn "If you need firmware support, you need to upgrade kernel at least to 3.7" fi fi } src_prepare() { cat <<-EOF > "${T}"/40-gentoo.rules # Gentoo specific floppy and usb groups ACTION=="add", SUBSYSTEM=="block", KERNEL=="fd[0-9]", GROUP="floppy" ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="usb" EOF if [[ -d "${WORKDIR}/patches" ]]; then eapply "${WORKDIR}/patches" fi local PATCHES=( ) default } meson_multilib_native_use() { if multilib_is_native_abi && use "$1"; then echo true else echo false fi } multilib_src_configure() { local emesonargs=( -Dacl=$(meson_multilib_native_use acl) -Defi=false -Dkmod=$(meson_multilib_native_use kmod) -Dselinux=$(meson_multilib_native_use selinux) -Dlink-udev-shared=false -Dsplit-usr=true -Drootlibdir="${EPREFIX}/usr/$(get_libdir)" -Dstatic-libudev=$(usex static-libs true false) # Prevent automagic deps -Dgcrypt=false -Dlibcryptsetup=false -Dlibidn=false -Dlibidn2=false -Dlibiptc=false -Dseccomp=false -Dlz4=false -Dxz=false ) meson_src_configure } src_configure() { # Prevent conflicts with i686 cross toolchain, bug 559726 tc-export AR CC NM OBJCOPY RANLIB multilib-minimal_src_configure } multilib_src_compile() { # meson creates this link local libudev=$(readlink src/udev/libudev.so.1) local targets=( src/udev/${libudev} ) if use static-libs; then targets+=( src/udev/libudev.a ) fi if multilib_is_native_abi; then targets+=( udevadm src/udev/ata_id src/udev/cdrom_id src/udev/fido_id src/udev/mtd_probe src/udev/scsi_id src/udev/v4l_id man/udev.conf.5 man/systemd.link.5 man/hwdb.7 man/udev.7 man/systemd-udevd.service.8 man/udevadm.8 ) fi eninja "${targets[@]}" } multilib_src_install() { local libudev=$(readlink src/udev/libudev.so.1) dolib.so src/udev/{${libudev},libudev.so.1,libudev.so} gen_usr_ldscript -a udev use static-libs && dolib.a src/udev/libudev.a insinto "/usr/$(get_libdir)/pkgconfig" doins src/libudev/libudev.pc if multilib_is_native_abi; then into / dobin udevadm dosym ../../bin/udevadm /lib/systemd/systemd-udevd exeinto /lib/udev doexe src/udev/{ata_id,cdrom_id,fido_id,mtd_probe,scsi_id,v4l_id} rm rules.d/99-systemd.rules || die insinto /lib/udev/rules.d doins rules.d/*.rules insinto /usr/share/pkgconfig doins src/udev/udev.pc mv man/systemd-udevd.service.8 man/systemd-udevd.8 || die rm man/systemd-udevd-{control,kernel}.socket.8 || die doman man/*.[0-9] fi } multilib_src_install_all() { doheader src/libudev/libudev.h insinto /etc/udev doins src/udev/udev.conf keepdir /etc/udev/{hwdb.d,rules.d} insinto /lib/systemd/network doins network/99-default.link # see src_prepare() for content of 40-gentoo.rules insinto /lib/udev/rules.d doins "${T}"/40-gentoo.rules doins "${S}"/rules.d/*.rules dobashcomp shell-completion/bash/udevadm insinto /usr/share/zsh/site-functions doins shell-completion/zsh/_udevadm einstalldocs } pkg_postinst() { # Update hwdb database in case the format is changed by udev version. if has_version 'sys-apps/hwids[udev]'; then udevadm hwdb --update --root="${ROOT}" # Only reload when we are not upgrading to avoid potential race w/ incompatible hwdb.bin and the running udevd # https://cgit.freedesktop.org/systemd/systemd/commit/?id=1fab57c209035f7e66198343074e9cee06718bda [[ -z ${REPLACING_VERSIONS} ]] && udev_reload fi }