sys-fs/udev: convert to meson
authorMike Gilbert <floppym@gentoo.org>
Sun, 30 Apr 2017 17:22:57 +0000 (13:22 -0400)
committerMike Gilbert <floppym@gentoo.org>
Sun, 30 Apr 2017 17:23:09 +0000 (13:23 -0400)
Package-Manager: Portage-2.3.5_p31, Repoman-2.3.2_p61

sys-fs/udev/udev-9999.ebuild

index ef90718a236640a4b99de33a185c1e29ced14142..43e3e7cc2cce04c990d05b6748fe0e0407d5a8ab 100644 (file)
@@ -3,7 +3,7 @@
 
 EAPI=6
 
-inherit autotools bash-completion-r1 linux-info multilib-minimal toolchain-funcs udev user versionator
+inherit bash-completion-r1 linux-info multilib-minimal multiprocessing toolchain-funcs udev user versionator
 
 if [[ ${PV} = 9999* ]]; then
        EGIT_REPO_URI="https://github.com/systemd/systemd.git"
@@ -44,6 +44,9 @@ COMMON_DEPEND=">=sys-apps/util-linux-2.27.1[${MULTILIB_USEDEP}]
 DEPEND="${COMMON_DEPEND}
        dev-util/gperf
        >=dev-util/intltool-0.50
+       >=dev-util/meson-0.40.0
+       dev-util/ninja
+       dev-util/patchelf
        >=sys-apps/coreutils-8.16
        virtual/os-headers
        virtual/pkgconfig
@@ -119,14 +122,9 @@ src_prepare() {
        # change rules back to group uucp instead of dialout for now wrt #454556
        sed -i -e 's/GROUP="dialout"/GROUP="uucp"/' rules/*.rules || die
 
-       # stub out the am_path_libcrypt function
-       echo 'AC_DEFUN([AM_PATH_LIBGCRYPT],[:])' > m4/gcrypt.m4
-
        # apply user patches
        eapply_user
 
-       eautoreconf
-
        if ! [[ ${PV} = 9999* ]]; then
                check_default_rules
        fi
@@ -137,167 +135,138 @@ src_prepare() {
        fi
 }
 
+meson_multilib_native_use() {
+       if multilib_is_native_abi && use "$1"; then
+               echo true
+       else
+               echo false
+       fi
+}
+
+multilib_src_configure() {
+       local myconf=(
+               --buildtype=plain
+               --libdir="$(get_libdir)"
+               --localstatedir="${EPREFIX}/var"
+               --prefix="${EPREFIX}/usr"
+               --sysconfdir="${EPREFIX}/etc"
+               -Dacl=$(meson_multilib_native_use acl)
+               -Defi=false
+               -Dkmod=$(meson_multilib_native_use kmod)
+               -Dselinux=$(meson_multilib_native_use selinux)
+               -Dsplit-usr=true
+       )
+       set -- meson "${myconf[@]}" "${S}"
+       echo "$@"
+       "$@" || die
+}
+
 src_configure() {
        # Prevent conflicts with i686 cross toolchain, bug 559726
        tc-export AR CC NM OBJCOPY RANLIB
        multilib-minimal_src_configure
 }
 
-multilib_src_configure() {
-       tc-export CC #463846
-       export cc_cv_CFLAGS__flto=no #502950
-       export cc_cv_CFLAGS__Werror_shadow=no #554454
-       export cc_cv_LDFLAGS__Wl__fuse_ld_gold=no #573874
-
-       # Keep sorted by ./configure --help and only pass --disable flags
-       # when *required* to avoid external deps or unnecessary compile
-       local econf_args
-       econf_args=(
-               --libdir=/usr/$(get_libdir)
-               --docdir=/usr/share/doc/${PF}
-               --disable-nls
-               --disable-dbus
-               $(multilib_native_use_enable kmod)
-               --disable-xkbcommon
-               --disable-seccomp
-               $(multilib_native_use_enable selinux)
-               --disable-xz
-               --disable-lz4
-               --disable-pam
-               $(multilib_native_use_enable acl)
-               --disable-gcrypt
-               --disable-audit
-               --disable-libcryptsetup
-               --disable-qrencode
-               --disable-microhttpd
-               --disable-gnuefi
-               --disable-gnutls
-               --disable-libcurl
-               --disable-libidn
-               --disable-quotacheck
-               --disable-logind
-               --disable-polkit
-               --disable-myhostname
-               $(multilib_is_native_abi || echo "--disable-manpages")
-               --enable-split-usr
-               --without-python
-               --with-bashcompletiondir="$(get_bashcompdir)"
-               --with-rootprefix=
-               $(multilib_is_native_abi && echo "--with-rootlibdir=/$(get_libdir)")
-               --disable-elfutils
-       )
-
-       if ! multilib_is_native_abi; then
-               econf_args+=(
-                       MOUNT_{CFLAGS,LIBS}=' '
-               )
+eninja() {
+       if [[ -z ${NINJAOPTS+set} ]]; then
+               NINJAOPTS="-j$(makeopts_jobs) -l$(makeopts_loadavg "${MAKEOPTS}" 0)"
        fi
-
-       ECONF_SOURCE=${S} econf "${econf_args[@]}"
+       set -- ninja -v ${NINJAOPTS} "$@"
+       echo "$@"
+       "$@" || die
 }
 
 multilib_src_compile() {
-       echo 'BUILT_SOURCES: $(BUILT_SOURCES)' > "${T}"/Makefile.extra
-       emake -f Makefile -f "${T}"/Makefile.extra BUILT_SOURCES
+       # meson creates this link
+       local libudev=$(readlink src/libudev/libudev.so.1)
 
-       # Most of the parallel build problems were solved by >=sys-devel/make-3.82-r4,
-       # but not everything -- separate building of the binaries as a workaround,
-       # which will force internal libraries required for the helpers to be built
-       # early enough, like eg. libsystemd-shared.la
+       local targets=(
+               src/libudev/${libudev}
+       )
        if multilib_is_native_abi; then
-               local lib_targets=( libudev.la )
-               emake "${lib_targets[@]}"
-
-               local exec_targets=(
+               targets+=(
                        systemd-udevd
                        udevadm
-               )
-               emake "${exec_targets[@]}"
-
-               local helper_targets=(
-                       ata_id
-                       cdrom_id
-                       collect
-                       scsi_id
-                       v4l_id
-                       mtd_probe
-               )
-               emake "${helper_targets[@]}"
-
-               local man_targets=(
+                       src/udev/ata_id
+                       src/udev/cdrom_id
+                       src/udev/collect
+                       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
                )
-               emake "${man_targets[@]}"
-       else
-               local lib_targets=( libudev.la )
-               emake "${lib_targets[@]}"
        fi
+       ninja -v "${targets[@]}" || die
+}
+
+# meson uses an private python script for this
+strip_rpath() {
+       local x
+       for x; do
+               patchelf --remove-rpath "${x}" || die
+       done
 }
 
 multilib_src_install() {
+       local libudev=$(readlink src/libudev/libudev.so.1)
+
+       into /
+       strip_rpath src/libudev/${libudev}
+       dolib.so src/libudev/{${libudev},libudev.so.1,libudev.so}
+
+       insinto "/usr/$(get_libdir)/pkgconfig"
+       doins src/libudev/libudev.pc
+
        if multilib_is_native_abi; then
-               local targets=(
-                       install-includeHEADERS
-                       install-rootbinPROGRAMS
-                       install-rootlibLTLIBRARIES
-                       install-rootlibexecPROGRAMS
-                       install-udevlibexecPROGRAMS
-                       install-dist_udevconfDATA
-                       install-dist_udevrulesDATA
-                       install-pkgconfiglibDATA
-                       install-pkgconfigdataDATA
-                       install-dist_docDATA
-                       install-directories-hook
-                       install-dist_bashcompletionDATA
-                       install-dist_networkDATA
-                       rootlibexec_PROGRAMS=systemd-udevd
-                       rootbin_PROGRAMS=udevadm
-                       rootlib_LTLIBRARIES="libudev.la"
-                       pkgconfiglib_DATA="src/libudev/libudev.pc"
-                       pkgconfigdata_DATA="src/udev/udev.pc"
-                       INSTALL_DIRS='$(sysconfdir)/udev/rules.d $(sysconfdir)/udev/hwdb.d $(sysconfdir)/systemd/network'
-                       dist_bashcompletion_DATA="shell-completion/bash/udevadm"
-                       dist_network_DATA="network/99-default.link"
-               )
-               emake -j1 DESTDIR="${D}" "${targets[@]}"
-               doman man/{udev.conf.5,systemd.link.5,udev.7,systemd-udevd.service.8,udevadm.8}
+               into /
+               strip_rpath udevadm
+               dobin udevadm
 
-               # Compatibility symlink for software that looks for libudev.so
-               # without using pkg-config
-               dosym ../../$(get_libdir)/libudev.so.1 \
-                       /usr/$(get_libdir)/libudev.so
-       else
-               local targets=(
-                       install-libLTLIBRARIES
-                       install-includeHEADERS
-                       install-pkgconfiglibDATA
-                       lib_LTLIBRARIES="libudev.la"
-                       pkgconfiglib_DATA="src/libudev/libudev.pc"
-                       include_HEADERS="src/libudev/libudev.h"
-               )
+               exeinto /lib/systemd
+               strip_rpath systemd-udevd
+               doexe systemd-udevd
+
+               exeinto /lib/udev
+               strip_rpath src/udev/{ata_id,cdrom_id,collect,mtd_probe,scsi_id,v4l_id}
+               doexe src/udev/{ata_id,cdrom_id,collect,mtd_probe,scsi_id,v4l_id}
+
+               rm rules/99-systemd.rules || die
+               insinto /lib/udev/rules.d
+               doins rules/*.rules
 
-               emake -j1 DESTDIR="${D}" "${targets[@]}"
+               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() {
-       dodoc TODO
+       doheader src/libudev/libudev.h
+
+       insinto /etc/udev
+       doins src/udev/udev.conf
 
-       prune_libtool_files --all
-       rm -f "${D}"/lib/udev/rules.d/99-systemd.rules
-       rm -f "${D}"/usr/share/doc/${PF}/{LICENSE.*,GVARIANT-SERIALIZATION,DIFFERENCES,PORTING-DBUS1,sd-shutdown.h}
+       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
 
-       # maintainer note: by not letting the upstream build-sys create the .so
-       # link, you also avoid a parallel make problem
-       mv "${D}"/usr/share/man/man8/systemd-udevd{.service,}.8
+       dobashcomp shell-completion/bash/udevadm
+
+       insinto /usr/share/zsh/site-functions
+       doins shell-completion/zsh/_udevadm
+
+       einstalldocs
 }
 
 pkg_postinst() {