app-emulation/qemu: ebuild maintenance (2.8.0-r5)
authorMatthias Maier <tamiko@gentoo.org>
Tue, 28 Feb 2017 00:18:08 +0000 (18:18 -0600)
committerMatthias Maier <tamiko@gentoo.org>
Tue, 28 Feb 2017 05:06:02 +0000 (23:06 -0600)
This commit addresses several bugs in the current dependency handling.

 - Almost all dependencies that were exclusively listed in
   SOFTMMU_LIBS_DEPEND are needed for qemu user targets as well. This is
   evidenced by trying to compile qemu with
     USE="* -static -static-softmmu -static-user"
     QEMU_USER_TARGETS="*" QEMU_SOFTMMU_TARGETS=""
   in a minimal stage-3 environment.

   The only remaining dependencies (exclusive for softmmu system
   targets) are

- always build qemu-tools

- restructure dependencies, bug #611084

Package-Manager: Portage-2.3.3, Repoman-2.3.1

app-emulation/qemu/qemu-2.8.0-r5.ebuild [moved from app-emulation/qemu/qemu-2.8.0-r4.ebuild with 84% similarity]

similarity index 84%
rename from app-emulation/qemu/qemu-2.8.0-r4.ebuild
rename to app-emulation/qemu/qemu-2.8.0-r5.ebuild
index 530bcd9d71d61126e62e61da851383e17dc4d1b5..d4a03a7f1c446bf5b9c326a075fceddef0cb72e8 100644 (file)
@@ -1,7 +1,7 @@
 # Copyright 1999-2017 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-EAPI="5"
+EAPI="6"
 
 PYTHON_COMPAT=( python2_7 )
 PYTHON_REQ_USE="ncurses,readline"
@@ -25,19 +25,20 @@ HOMEPAGE="http://www.qemu.org http://www.linux-kvm.org"
 
 LICENSE="GPL-2 LGPL-2 BSD-2"
 SLOT="0"
-IUSE="accessibility +aio alsa bluetooth bzip2 +caps +curl debug +fdt glusterfs \
-gnutls gtk gtk2 infiniband iscsi +jpeg \
-kernel_linux kernel_FreeBSD lzo ncurses nfs nls numa opengl +pin-upstream-blobs
-+png pulseaudio python \
-rbd sasl +seccomp sdl sdl2 selinux smartcard snappy spice ssh static static-softmmu
-static-user systemtap tci test +threads usb usbredir vde +vhost-net \
-virgl virtfs +vnc vte xattr xen xfs"
-
-COMMON_TARGETS="aarch64 alpha arm cris i386 m68k microblaze microblazeel mips
-mips64 mips64el mipsel or32 ppc ppc64 s390x sh4 sh4eb sparc sparc64
-x86_64"
-IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS} lm32 moxie ppcemb tricore unicore32 xtensa xtensaeb"
-IUSE_USER_TARGETS="${COMMON_TARGETS} armeb mipsn32 mipsn32el ppc64abi32 ppc64le sparc32plus tilegx"
+IUSE="accessibility +aio alsa bluetooth bzip2 +caps +curl debug +fdt
+       glusterfs gnutls gtk gtk2 infiniband iscsi +jpeg kernel_linux
+       kernel_FreeBSD lzo ncurses nfs nls numa opengl +pin-upstream-blobs +png
+       pulseaudio python rbd sasl +seccomp sdl sdl2 selinux smartcard snappy
+       spice ssh static systemtap tci test +threads usb usbredir vde
+       +vhost-net virgl virtfs +vnc vte xattr xen xfs"
+
+COMMON_TARGETS="aarch64 alpha arm cris i386 m68k microblaze microblazeel
+       mips mips64 mips64el mipsel or32 ppc ppc64 s390x sh4 sh4eb sparc
+       sparc64 x86_64"
+IUSE_SOFTMMU_TARGETS="${COMMON_TARGETS}
+       lm32 moxie ppcemb tricore unicore32 xtensa xtensaeb"
+IUSE_USER_TARGETS="${COMMON_TARGETS}
+       armeb mipsn32 mipsn32el ppc64abi32 ppc64le sparc32plus tilegx"
 
 use_softmmu_targets=$(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS})
 use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
@@ -52,32 +53,35 @@ REQUIRED_USE="${PYTHON_REQUIRED_USE}
        qemu_softmmu_targets_ppc? ( fdt )
        qemu_softmmu_targets_ppc64? ( fdt )
        sdl2? ( sdl )
-       static? ( static-softmmu static-user )
-       static-softmmu? ( !alsa !pulseaudio !bluetooth !opengl !gtk !gtk2 )
+       static? ( !alsa !pulseaudio !bluetooth !opengl !gtk !gtk2 )
        virtfs? ( xattr )
        vte? ( gtk )"
 
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# and user/softmmu targets (qemu-*, qemu-system-*).
+#
 # Yep, you need both libcap and libcap-ng since virtfs only uses libcap.
 #
 # The attr lib isn't always linked in (although the USE flag is always
 # respected).  This is because qemu supports using the C library's API
 # when available rather than always using the extranl library.
 #
-# Older versions of gnutls are supported, but it's simpler to just require
-# the latest versions.  This is also why we require nettle.
-#
-# TODO: Split out tools deps into another var.  e.g. bzip2 is only used by
-# system binaries and tools, not user binaries.
-COMMON_LIB_DEPEND=">=dev-libs/glib-2.0[static-libs(+)]
-       sys-libs/zlib[static-libs(+)]
-       bzip2? ( app-arch/bzip2[static-libs(+)] )
-       xattr? ( sys-apps/attr[static-libs(+)] )"
-SOFTMMU_LIB_DEPEND="${COMMON_LIB_DEPEND}
+# To configure and compile qemu user targets or tools alone the following
+# dependencies are not strictly necessary:
+#   alsa? ( >=media-libs/alsa-lib-1.0.13 )
+#   fdt? ( >=sys-apps/dtc-1.4.0[static-libs(+)] )
+#   pulseaudio? ( media-sound/pulseaudio )
+#   seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
+# but these are so few it is not worth the effort to separate this list.
+TARGETS_DEPEND="
+       >=dev-libs/glib-2.0[static-libs(+)]
        >=x11-libs/pixman-0.28.0[static-libs(+)]
+       sys-libs/zlib[static-libs(+)]
        accessibility? ( app-accessibility/brltty[static-libs(+)] )
        aio? ( dev-libs/libaio[static-libs(+)] )
        alsa? ( >=media-libs/alsa-lib-1.0.13 )
        bluetooth? ( net-wireless/bluez )
+       bzip2? ( app-arch/bzip2[static-libs(+)] )
        caps? ( sys-libs/libcap-ng[static-libs(+)] )
        curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
        fdt? ( >=sys-apps/dtc-1.4.0[static-libs(+)] )
@@ -114,6 +118,7 @@ SOFTMMU_LIB_DEPEND="${COMMON_LIB_DEPEND}
        )
        png? ( media-libs/libpng:0=[static-libs(+)] )
        pulseaudio? ( media-sound/pulseaudio )
+       python? ( ${PYTHON_DEPS} )
        rbd? ( sys-cluster/ceph[static-libs(+)] )
        sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
        sdl? (
@@ -134,13 +139,16 @@ SOFTMMU_LIB_DEPEND="${COMMON_LIB_DEPEND}
                >=app-emulation/spice-0.12.0[static-libs(+)]
        )
        ssh? ( >=net-libs/libssh2-1.2.8[static-libs(+)] )
-       usb? ( >=virtual/libusb-1-r2[static-libs(+)] )
+       systemtap? ( dev-util/systemtap )
        usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
+       usb? ( >=virtual/libusb-1-r2[static-libs(+)] )
        vde? ( net-misc/vde[static-libs(+)] )
        virgl? ( media-libs/virglrenderer[static-libs(+)] )
        virtfs? ( sys-libs/libcap )
+       xattr? ( sys-apps/attr[static-libs(+)] )
+       xen? ( app-emulation/xen-tools:= )
        xfs? ( sys-fs/xfsprogs[static-libs(+)] )"
-USER_LIB_DEPEND="${COMMON_LIB_DEPEND}"
+
 X86_FIRMWARE_DEPEND="
        >=sys-firmware/ipxe-1.0.0_p20130624
        pin-upstream-blobs? (
@@ -153,14 +161,11 @@ X86_FIRMWARE_DEPEND="
                sys-firmware/sgabios
                sys-firmware/vgabios
        )"
+
 CDEPEND="
-       !static-softmmu? ( $(printf "%s? ( ${SOFTMMU_LIB_DEPEND//\[static-libs(+)]} ) " ${use_softmmu_targets}) )
-       !static-user? ( $(printf "%s? ( ${USER_LIB_DEPEND//\[static-libs(+)]} ) " ${use_user_targets}) )
+       !static? ( ${TARGETS_DEPEND//\[static-libs(+)]} )
        qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
-       qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
-       python? ( ${PYTHON_DEPS} )
-       systemtap? ( dev-util/systemtap )
-       xen? ( app-emulation/xen-tools:= )"
+       qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )"
 DEPEND="${CDEPEND}
        dev-lang/perl
        =dev-lang/python-2*
@@ -168,15 +173,39 @@ DEPEND="${CDEPEND}
        virtual/pkgconfig
        kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
        gtk? ( nls? ( sys-devel/gettext ) )
-       static-softmmu? ( $(printf "%s? ( ${SOFTMMU_LIB_DEPEND} ) " ${use_softmmu_targets}) )
-       static-user? ( $(printf "%s? ( ${USER_LIB_DEPEND} ) " ${use_user_targets}) )
+       static? ( ${TARGETS_DEPEND} )
        test? (
                dev-libs/glib[utils]
                sys-devel/bc
        )"
 RDEPEND="${CDEPEND}
-       selinux? ( sec-policy/selinux-qemu )
-"
+       selinux? ( sec-policy/selinux-qemu )"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-2.5.0-cflags.patch
+       "${FILESDIR}"/${PN}-2.5.0-sysmacros.patch
+       "${FILESDIR}"/${PN}-2.7.0-CVE-2016-8669-1.patch #597108
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2016-9908.patch   #601826
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2016-9912.patch   #602630
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2016-10028.patch  #603444
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2016-10155.patch  #606720
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-2615.patch   #608034
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-2630.patch   #609396
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5525-1.patch #606264
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5525-2.patch
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5552.patch   #606722
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5578.patch   #607000
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5579.patch   #607100
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5667.patch   #607766
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5856.patch   #608036
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5857.patch   #608038
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5898.patch   #608520
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5931.patch   #608728
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5973.patch   #609334
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5987.patch   #609398
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-6058.patch   #609638
+       "${FILESDIR}"/${PN}-2.8.0-CVE-2017-2620.patch   #609206
+)
 
 STRIP_MASK="/usr/share/qemu/palcode-clipper"
 
@@ -186,8 +215,7 @@ QA_PREBUILT="
        usr/share/qemu/openbios-sparc32
        usr/share/qemu/palcode-clipper
        usr/share/qemu/s390-ccw.img
-       usr/share/qemu/u-boot.e500
-"
+       usr/share/qemu/u-boot.e500"
 
 QA_WX_LOAD="usr/bin/qemu-i386
        usr/bin/qemu-x86_64
@@ -332,29 +360,7 @@ src_prepare() {
                -e 's/^(C|OP_C|HELPER_C)FLAGS=/\1FLAGS+=/' \
                Makefile Makefile.target || die
 
-       epatch "${FILESDIR}"/${PN}-2.5.0-cflags.patch
-       epatch "${FILESDIR}"/${PN}-2.5.0-sysmacros.patch
-       epatch "${FILESDIR}"/${PN}-2.7.0-CVE-2016-8669-1.patch #597108
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2016-9908.patch   #601826
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2016-9912.patch   #602630
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2016-10028.patch  #603444
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2016-10155.patch  #606720
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-2615.patch   #608034
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-2630.patch   #609396
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5525-1.patch #606264
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5525-2.patch
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5552.patch   #606722
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5578.patch   #607000
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5579.patch   #607100
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5667.patch   #607766
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5856.patch   #608036
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5857.patch   #608038
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5898.patch   #608520
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5931.patch   #608728
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5973.patch   #609334
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-5987.patch   #609398
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-6058.patch   #609638
-       epatch "${FILESDIR}"/${PN}-2.8.0-CVE-2017-2620.patch   #609206
+       default
 
        # Fix ld and objcopy being called directly
        tc-export AR LD OBJCOPY
@@ -362,8 +368,6 @@ src_prepare() {
        # Verbose builds
        MAKEOPTS+=" V=1"
 
-       epatch_user
-
        # Run after we've applied all patches.
        handle_locales
 }
@@ -377,7 +381,6 @@ qemu_src_configure() {
 
        local buildtype=$1
        local builddir="${S}/${buildtype}-build"
-       local static_flag="static-${buildtype}"
 
        mkdir "${builddir}"
 
@@ -477,6 +480,7 @@ qemu_src_configure() {
                conf_opts+=(
                        --disable-linux-user
                        --enable-system
+                       --disable-tools
                        --with-system-pixman
                        --audio-drv-list="${audio_opts}"
                )
@@ -488,9 +492,9 @@ qemu_src_configure() {
                        --disable-linux-user
                        --disable-system
                        --disable-blobs
+                       --enable-tools
                        $(use_enable bzip2)
                )
-               static_flag="static"
                ;;
        esac
 
@@ -503,7 +507,7 @@ qemu_src_configure() {
        # We always want to attempt to build with PIE support as it results
        # in a more secure binary. But it doesn't work with static or if
        # the current GCC doesn't have PIE support.
-       if use ${static_flag}; then
+       if use static; then
                conf_opts+=( --static --disable-pie )
        else
                gcc-specs-pie && conf_opts+=( --enable-pie )
@@ -546,7 +550,7 @@ src_configure() {
 
        [[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu"
        [[ -n ${user_targets}    ]] && qemu_src_configure "user"
-       [[ -z ${softmmu_targets}${user_targets} ]] && qemu_src_configure "tools"
+       qemu_src_configure "tools"
 }
 
 src_compile() {
@@ -560,10 +564,8 @@ src_compile() {
                default
        fi
 
-       if [[ -z ${softmmu_targets}${user_targets} ]]; then
-               cd "${S}/tools-build"
-               default
-       fi
+       cd "${S}/tools-build"
+       default
 }
 
 src_test() {
@@ -633,6 +635,7 @@ EOF
        done
        cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
 }
+
 src_install() {
        if [[ -n ${user_targets} ]]; then
                cd "${S}/user-build"
@@ -663,10 +666,8 @@ src_install() {
                fi
        fi
 
-       if [[ -z ${softmmu_targets}${user_targets} ]]; then
-               cd "${S}/tools-build"
-               emake DESTDIR="${ED}" install
-       fi
+       cd "${S}/tools-build"
+       emake DESTDIR="${ED}" install
 
        # Disable mprotect on the qemu binaries as they use JITs to be fast #459348
        pushd "${ED}"/usr/bin >/dev/null