| # Copyright 2003-2022 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI=7 |
| PYTHON_COMPAT=( python3_{8..11} ) |
| |
| inherit bash-completion-r1 flag-o-matic linux-info meson-multilib ninja-utils python-any-r1 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" |
| |
| # musl patches taken from: |
| # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-core/systemd/systemd |
| MUSL_PATCHSET="249.5-r1" |
| SRC_URI+=" |
| elibc_musl? ( |
| https://dev.gentoo.org/~gyakovlev/distfiles/systemd-musl-patches-${MUSL_PATCHSET}.tar.xz |
| https://dev.gentoo.org/~soap/distfiles/systemd-musl-patches-${MUSL_PATCHSET}.tar.xz |
| )" |
| |
| KEYWORDS="*" |
| 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 test" |
| RESTRICT="!test? ( test )" |
| |
| BDEPEND=" |
| dev-util/gperf |
| sys-devel/gettext |
| >=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 |
| ${PYTHON_DEPS} |
| $(python_gen_any_dep 'dev-python/jinja[${PYTHON_USEDEP}]') |
| test? ( |
| app-text/tree |
| dev-lang/perl |
| ) |
| " |
| COMMON_DEPEND=" |
| >=sys-apps/util-linux-2.30[${MULTILIB_USEDEP}] |
| sys-libs/libcap:0=[${MULTILIB_USEDEP}] |
| virtual/libcrypt:=[${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/tape |
| acct-group/video |
| !sys-apps/gentoo-systemd-integration |
| !sys-apps/systemd |
| !sys-apps/hwids[udev] |
| " |
| |
| python_check_deps() { |
| python_has_version "dev-python/jinja[${PYTHON_USEDEP}]" |
| } |
| |
| 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() { |
| local PATCHES=( |
| "${FILESDIR}/249.9-cross-compile.patch" |
| |
| "${FILESDIR}"/CHROMIUM-50-udev-default.rules-Disable-REMOVE_CMD-su.patch |
| "${FILESDIR}"/CHROMIUM-Don-t-read-udev-rules-from-run.patch |
| "${FILESDIR}"/CHROMIUM-Use-the-video-group-for-drm-kfd-udmabuf.patch |
| "${FILESDIR}"/CHROMIUM-udev-Drop-VMware-USB-mouse-workaround.patch |
| "${FILESDIR}"/CHROMIUM-udev-bypass-v4l_id-query-for-mipi-camera-re.patch |
| "${FILESDIR}"/CHROMIUM-Drop-sgx-group-rule.patch |
| |
| "${FILESDIR}"/BACKPORT-udev-check-existence-of-property-before-use.patch |
| "${FILESDIR}"/BACKPORT-udev-builtin-path_id-split-out-add_id_tag.patch |
| "${FILESDIR}"/BACKPORT-udev-add-USB-revision-in-ID_PATH.patch |
| "${FILESDIR}"/BACKPORT-udev-Add-dev-media-by-path-symlinks-for-media-contro.patch |
| "${FILESDIR}"/BACKPORT-udev-permanent-symlinks-with-USB-revision-for-dev-me.patch |
| ) |
| use elibc_musl && PATCHES+=( "${WORKDIR}"/musl-patches ) |
| |
| # Filter out key mapping entries for AT keyboards in order to avoid |
| # potential conflicts with the key mappings expected by Chrome OS for |
| # the internal keyboard of a Chromebook. |
| sed -i -e '/^evdev:atkbd:/,/^\s*$/ { /^\s*$/!s/^/#/ }' \ |
| hwdb.d/60-keyboard.hwdb || die |
| |
| default |
| } |
| |
| multilib_src_configure() { |
| local emesonargs=( |
| $(meson_native_use_bool acl) |
| -Defi=false |
| $(meson_native_use_bool kmod) |
| $(meson_native_use_bool selinux) |
| -Dlink-udev-shared=false |
| -Dsplit-usr=true |
| -Drootlibdir="${EPREFIX}/usr/$(get_libdir)" |
| |
| # Prevent automagic deps |
| -Dgcrypt=false |
| -Dlibcryptsetup=false |
| -Didn=false |
| -Dlibidn=false |
| -Dlibidn2=false |
| -Dlibiptc=false |
| -Dp11kit=false |
| -Dseccomp=false |
| -Dlz4=false |
| -Dxz=false |
| ) |
| use elibc_musl && emesonargs+=( |
| -Dgshadow=false |
| -Dsmack=false |
| -Dutmp=false |
| ) |
| |
| meson_src_configure |
| } |
| |
| src_configure() { |
| # Prevent conflicts with i686 cross toolchain, bug 559726 |
| tc-export AR CC NM OBJCOPY RANLIB |
| python_setup |
| |
| use elibc_musl && append-cppflags -D__UAPI_DEF_ETHHDR=0 |
| |
| multilib-minimal_src_configure |
| } |
| |
| multilib_src_compile() { |
| # ChromeOS-specific |
| touch ${S}/tools/chromiumos/__init__.py || die |
| |
| # meson creates this link |
| local libudev=$(readlink libudev.so.1) |
| |
| local targets=( |
| ${libudev} |
| src/libudev/libudev.pc |
| ) |
| 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/udev.pc |
| 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 |
| hwdb.d/60-autosuspend-chromiumos.hwdb |
| rules.d/50-udev-default.rules |
| rules.d/64-btrfs.rules |
| ) |
| fi |
| eninja "${targets[@]}" |
| } |
| |
| src_test() { |
| # The testsuite is *very* finicky. Don't try running it in |
| # containers or anything but a full VM or on bare metal. |
| # udev calls 'mknod' a number of times, and this interacts |
| # badly with kernel namespaces. |
| |
| if [[ ! -w /dev ]]; then |
| ewarn "udev tests needs full access to /dev" |
| ewarn "Skipping tests" |
| else |
| meson-multilib_src_test |
| fi |
| } |
| |
| multilib_src_test() { |
| # two binaries required by udev-test.pl |
| eninja systemd-detect-virt test-udev |
| local -x PATH="${PWD}:${PATH}" |
| |
| # prepare ${BUILD_DIR}/test/sys, required by udev-test.pl |
| "${EPYTHON}" "${S}"/test/sys-script.py test || die |
| |
| # the perl script contains all the udev tests |
| "${S}"/test/udev-test.pl || die |
| } |
| |
| multilib_src_install() { |
| local libudev=$(readlink libudev.so.1) |
| |
| dolib.so {${libudev},libudev.so.1,libudev.so} |
| gen_usr_ldscript -a udev |
| |
| 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 |
| newsbin udevadm udevd # TODO: Remove this copy, b/300084033 |
| |
| exeinto /lib/udev |
| doexe src/udev/{ata_id,cdrom_id,fido_id,mtd_probe,scsi_id,v4l_id} |
| |
| # Install generated rules (${BUILD_DIR}/rules.d/*.rules) |
| insinto /lib/udev/rules.d |
| doins rules.d/*.rules |
| insinto /lib/udev/hwdb.d |
| doins hwdb.d/*.hwdb |
| |
| 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 |
| |
| # Install static rules (${S}/rules.d/*.rules) |
| insinto /lib/udev/rules.d |
| doins rules.d/*.rules |
| doins "${FILESDIR}"/40-gentoo.rules |
| insinto /lib/udev/hwdb.d |
| doins hwdb.d/*.hwdb |
| |
| # Drop in our common keyboard rules |
| doins "${FILESDIR}/61-keyboard-chromeos.hwdb" |
| |
| # Remove some large files that are not needed in ChromeOS |
| rm "${ED}/$(get_udevdir)/hwdb.d"/{20-OUI.hwdb,20-pci-vendor-model.hwdb} || die |
| |
| dobashcomp shell-completion/bash/udevadm |
| |
| insinto /usr/share/zsh/site-functions |
| doins shell-completion/zsh/_udevadm |
| |
| einstalldocs |
| } |