Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- declare -x ABI="amd64"
- declare -x ABI_MIPS=""
- declare -x ABI_PPC=""
- declare -x ABI_RISCV=""
- declare -x ABI_S390=""
- declare -x ABI_X86="64"
- declare -x ADA_TARGET=""
- declare -- ALL_DEPEND="
- >=dev-libs/glib-2.0[static-libs(+)]
- sys-libs/zlib[static-libs(+)]
- python? ( python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7[ncurses,readline] ) python_targets_python3_5? ( dev-lang/python:3.5[ncurses,readline] ) python_targets_python3_6? ( dev-lang/python:3.6[ncurses,readline] ) python_targets_python3_7? ( dev-lang/python:3.7[ncurses,readline] ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] )
- systemtap? ( dev-util/systemtap )
- xattr? ( sys-apps/attr[static-libs(+)] )"
- declare -x ALSA_CARDS=""
- declare -x APACHE2_MODULES=""
- declare -x APACHE2_MPMS=""
- declare -x AR="x86_64-pc-linux-gnu-ar"
- declare -x ARCH="amd64"
- declare BDEPEND="
- python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_5? ( dev-lang/python:3.5 ) python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 )
- dev-lang/perl
- sys-apps/texinfo
- virtual/pkgconfig
- doc? ( dev-python/sphinx )
- gtk? ( nls? ( sys-devel/gettext ) )
- test? (
- dev-libs/glib[utils]
- sys-devel/bc
- )
- virtual/pkgconfig"
- declare -x BOOTSTRAP_USE="unicode internal-glib pkg-config split-usr python_targets_python3_6 python_targets_python2_7 multilib"
- declare -x CALLIGRA_FEATURES=""
- declare -x CAMERAS=""
- declare -x CBUILD="x86_64-pc-linux-gnu"
- declare -- CDEPEND="
- !static? (
- >=dev-libs/glib-2.0
- sys-libs/zlib
- python? ( python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7[ncurses,readline] ) python_targets_python3_5? ( dev-lang/python:3.5[ncurses,readline] ) python_targets_python3_6? ( dev-lang/python:3.6[ncurses,readline] ) python_targets_python3_7? ( dev-lang/python:3.7[ncurses,readline] ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] )
- systemtap? ( dev-util/systemtap )
- xattr? ( sys-apps/attr )
- dev-libs/libxml2
- xkb? ( x11-libs/libxkbcommon )
- >=x11-libs/pixman-0.28.0
- accessibility? (
- app-accessibility/brltty[api]
- app-accessibility/brltty
- )
- aio? ( dev-libs/libaio )
- alsa? ( >=media-libs/alsa-lib-1.0.13 )
- bzip2? ( app-arch/bzip2 )
- capstone? ( dev-libs/capstone:= )
- caps? ( sys-libs/libcap-ng )
- curl? ( >=net-misc/curl-7.15.4 )
- fdt? ( >=sys-apps/dtc-1.5.0 )
- glusterfs? ( >=sys-cluster/glusterfs-3.4.0 )
- gnutls? (
- dev-libs/nettle:=
- >=net-libs/gnutls-3.0:=
- )
- gtk? (
- x11-libs/gtk+:3
- vte? ( x11-libs/vte:2.91 )
- )
- infiniband? (
- sys-fabric/libibumad:=
- sys-fabric/libibverbs:=
- sys-fabric/librdmacm:=
- )
- iscsi? ( net-libs/libiscsi )
- jemalloc? ( dev-libs/jemalloc )
- jpeg? ( virtual/jpeg:0= )
- lzo? ( dev-libs/lzo:2 )
- ncurses? (
- sys-libs/ncurses:0=[unicode]
- sys-libs/ncurses:0=
- )
- nfs? ( >=net-fs/libnfs-1.9.3:= )
- numa? ( sys-process/numactl )
- opengl? (
- virtual/opengl
- media-libs/libepoxy
- media-libs/mesa
- media-libs/mesa[egl,gbm]
- )
- png? ( media-libs/libpng:0= )
- pulseaudio? ( media-sound/pulseaudio )
- rbd? ( sys-cluster/ceph )
- sasl? ( dev-libs/cyrus-sasl )
- sdl? (
- media-libs/libsdl2[X]
- media-libs/libsdl2
- )
- seccomp? ( >=sys-libs/libseccomp-2.1.0 )
- smartcard? ( >=app-emulation/libcacard-2.5.0 )
- snappy? ( app-arch/snappy:= )
- spice? (
- >=app-emulation/spice-protocol-0.12.3
- >=app-emulation/spice-0.12.0
- )
- ssh? ( >=net-libs/libssh-0.8.6 )
- usb? ( >=virtual/libusb-1-r2 )
- usbredir? ( >=sys-apps/usbredir-0.6 )
- vde? ( net-misc/vde )
- virgl? ( media-libs/virglrenderer )
- virtfs? ( sys-libs/libcap )
- xen? ( app-emulation/xen-tools:= )
- xfs? ( sys-fs/xfsprogs )
- )
- qemu_softmmu_targets_i386? (
- pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
- )
- !pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
- sys-firmware/sgabios
- ) )
- qemu_softmmu_targets_x86_64? (
- pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
- )
- !pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
- sys-firmware/sgabios
- ) )
- qemu_softmmu_targets_ppc64? (
- pin-upstream-blobs? (
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- )
- !pin-upstream-blobs? (
- >=sys-firmware/seabios-1.10.2[seavgabios]
- )
- )
- "
- declare -x CFLAGS="-march=native -O2 -pipe"
- declare -x CFLAGS_amd64="-m64"
- declare -x CFLAGS_default
- declare -x CFLAGS_x32="-mx32"
- declare -x CFLAGS_x86="-m32"
- declare -x CHOST="x86_64-pc-linux-gnu"
- declare -x CHOST_amd64="x86_64-pc-linux-gnu"
- declare -x CHOST_default="x86_64-pc-linux-gnu"
- declare -x CHOST_x32="x86_64-pc-linux-gnux32"
- declare -x CHOST_x86="i686-pc-linux-gnu"
- declare -x COLLECTD_PLUGINS=""
- declare -x COMMON_FLAGS="-march=native -O2 -pipe"
- declare -- COMMON_TARGETS="aarch64 alpha arm cris hppa i386 m68k microblaze microblazeel
- mips mips64 mips64el mipsel nios2 or1k ppc ppc64 riscv32 riscv64 s390x
- sh4 sh4eb sparc sparc64 x86_64 xtensa xtensaeb"
- declare -x CPU_FLAGS_ARM=""
- declare -x CPU_FLAGS_PPC=""
- declare -x CPU_FLAGS_X86=""
- declare -x CTARGET_default="x86_64-pc-linux-gnu"
- declare -x CURL_SSL=""
- declare -x CXXFLAGS="-march=native -O2 -pipe"
- declare -x DEFAULT_ABI="amd64"
- declare -x DEFINED_PHASES=" compile configure info install postinst postrm prepare pretend setup test"
- declare DEPEND="
- !static? (
- >=dev-libs/glib-2.0
- sys-libs/zlib
- python? ( python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7[ncurses,readline] ) python_targets_python3_5? ( dev-lang/python:3.5[ncurses,readline] ) python_targets_python3_6? ( dev-lang/python:3.6[ncurses,readline] ) python_targets_python3_7? ( dev-lang/python:3.7[ncurses,readline] ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] )
- systemtap? ( dev-util/systemtap )
- xattr? ( sys-apps/attr )
- dev-libs/libxml2
- xkb? ( x11-libs/libxkbcommon )
- >=x11-libs/pixman-0.28.0
- accessibility? (
- app-accessibility/brltty[api]
- app-accessibility/brltty
- )
- aio? ( dev-libs/libaio )
- alsa? ( >=media-libs/alsa-lib-1.0.13 )
- bzip2? ( app-arch/bzip2 )
- capstone? ( dev-libs/capstone:= )
- caps? ( sys-libs/libcap-ng )
- curl? ( >=net-misc/curl-7.15.4 )
- fdt? ( >=sys-apps/dtc-1.5.0 )
- glusterfs? ( >=sys-cluster/glusterfs-3.4.0 )
- gnutls? (
- dev-libs/nettle:=
- >=net-libs/gnutls-3.0:=
- )
- gtk? (
- x11-libs/gtk+:3
- vte? ( x11-libs/vte:2.91 )
- )
- infiniband? (
- sys-fabric/libibumad:=
- sys-fabric/libibverbs:=
- sys-fabric/librdmacm:=
- )
- iscsi? ( net-libs/libiscsi )
- jemalloc? ( dev-libs/jemalloc )
- jpeg? ( virtual/jpeg:0= )
- lzo? ( dev-libs/lzo:2 )
- ncurses? (
- sys-libs/ncurses:0=[unicode]
- sys-libs/ncurses:0=
- )
- nfs? ( >=net-fs/libnfs-1.9.3:= )
- numa? ( sys-process/numactl )
- opengl? (
- virtual/opengl
- media-libs/libepoxy
- media-libs/mesa
- media-libs/mesa[egl,gbm]
- )
- png? ( media-libs/libpng:0= )
- pulseaudio? ( media-sound/pulseaudio )
- rbd? ( sys-cluster/ceph )
- sasl? ( dev-libs/cyrus-sasl )
- sdl? (
- media-libs/libsdl2[X]
- media-libs/libsdl2
- )
- seccomp? ( >=sys-libs/libseccomp-2.1.0 )
- smartcard? ( >=app-emulation/libcacard-2.5.0 )
- snappy? ( app-arch/snappy:= )
- spice? (
- >=app-emulation/spice-protocol-0.12.3
- >=app-emulation/spice-0.12.0
- )
- ssh? ( >=net-libs/libssh-0.8.6 )
- usb? ( >=virtual/libusb-1-r2 )
- usbredir? ( >=sys-apps/usbredir-0.6 )
- vde? ( net-misc/vde )
- virgl? ( media-libs/virglrenderer )
- virtfs? ( sys-libs/libcap )
- xen? ( app-emulation/xen-tools:= )
- xfs? ( sys-fs/xfsprogs )
- )
- qemu_softmmu_targets_i386? (
- pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
- )
- !pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
- sys-firmware/sgabios
- ) )
- qemu_softmmu_targets_x86_64? (
- pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
- )
- !pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
- sys-firmware/sgabios
- ) )
- qemu_softmmu_targets_ppc64? (
- pin-upstream-blobs? (
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- )
- !pin-upstream-blobs? (
- >=sys-firmware/seabios-1.10.2[seavgabios]
- )
- )
- kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
- static? (
- >=dev-libs/glib-2.0[static-libs(+)]
- sys-libs/zlib[static-libs(+)]
- python? ( python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7[ncurses,readline] ) python_targets_python3_5? ( dev-lang/python:3.5[ncurses,readline] ) python_targets_python3_6? ( dev-lang/python:3.6[ncurses,readline] ) python_targets_python3_7? ( dev-lang/python:3.7[ncurses,readline] ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] )
- systemtap? ( dev-util/systemtap )
- xattr? ( sys-apps/attr[static-libs(+)] )
- dev-libs/libxml2[static-libs(+)]
- xkb? ( x11-libs/libxkbcommon[static-libs(+)] )
- >=x11-libs/pixman-0.28.0[static-libs(+)]
- accessibility? (
- app-accessibility/brltty[api]
- app-accessibility/brltty[static-libs(+)]
- )
- aio? ( dev-libs/libaio[static-libs(+)] )
- alsa? ( >=media-libs/alsa-lib-1.0.13 )
- bzip2? ( app-arch/bzip2[static-libs(+)] )
- capstone? ( dev-libs/capstone:= )
- caps? ( sys-libs/libcap-ng[static-libs(+)] )
- curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
- fdt? ( >=sys-apps/dtc-1.5.0[static-libs(+)] )
- glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
- gnutls? (
- dev-libs/nettle:=[static-libs(+)]
- >=net-libs/gnutls-3.0:=[static-libs(+)]
- )
- gtk? (
- x11-libs/gtk+:3
- vte? ( x11-libs/vte:2.91 )
- )
- infiniband? (
- sys-fabric/libibumad:=[static-libs(+)]
- sys-fabric/libibverbs:=[static-libs(+)]
- sys-fabric/librdmacm:=[static-libs(+)]
- )
- iscsi? ( net-libs/libiscsi )
- jemalloc? ( dev-libs/jemalloc )
- jpeg? ( virtual/jpeg:0=[static-libs(+)] )
- lzo? ( dev-libs/lzo:2[static-libs(+)] )
- ncurses? (
- sys-libs/ncurses:0=[unicode]
- sys-libs/ncurses:0=[static-libs(+)]
- )
- nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
- numa? ( sys-process/numactl[static-libs(+)] )
- opengl? (
- virtual/opengl
- media-libs/libepoxy[static-libs(+)]
- media-libs/mesa[static-libs(+)]
- media-libs/mesa[egl,gbm]
- )
- png? ( media-libs/libpng:0=[static-libs(+)] )
- pulseaudio? ( media-sound/pulseaudio )
- rbd? ( sys-cluster/ceph[static-libs(+)] )
- sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
- sdl? (
- media-libs/libsdl2[X]
- media-libs/libsdl2[static-libs(+)]
- )
- seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
- smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
- snappy? ( app-arch/snappy:= )
- spice? (
- >=app-emulation/spice-protocol-0.12.3
- >=app-emulation/spice-0.12.0[static-libs(+)]
- )
- ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
- usb? ( >=virtual/libusb-1-r2[static-libs(+)] )
- usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
- vde? ( net-misc/vde[static-libs(+)] )
- virgl? ( media-libs/virglrenderer[static-libs(+)] )
- virtfs? ( sys-libs/libcap )
- xen? ( app-emulation/xen-tools:= )
- xfs? ( sys-fs/xfsprogs[static-libs(+)] )
- )
- static-user? (
- >=dev-libs/glib-2.0[static-libs(+)]
- sys-libs/zlib[static-libs(+)]
- python? ( python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7[ncurses,readline] ) python_targets_python3_5? ( dev-lang/python:3.5[ncurses,readline] ) python_targets_python3_6? ( dev-lang/python:3.6[ncurses,readline] ) python_targets_python3_7? ( dev-lang/python:3.7[ncurses,readline] ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] )
- systemtap? ( dev-util/systemtap )
- xattr? ( sys-apps/attr[static-libs(+)] ) ) filecaps? ( sys-libs/libcap )"
- declare DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
- declare -- DESKTOP_DATABASE_DIR="/usr/share/applications"
- declare -x DIROPTIONS="-m0755"
- declare -- DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you have the
- kernel module loaded before running kvm. The easiest way to ensure that the
- kernel module is loaded is to load it on boot.
- For AMD CPUs the module is called 'kvm-amd'.
- For Intel CPUs the module is called 'kvm-intel'.
- Please review /etc/conf.d/modules for how to load these.
- Make sure your user is in the 'kvm' group. Just run
- \$ gpasswd -a <USER> kvm
- then have <USER> re-login.
- For brand new installs, the default permissions on /dev/kvm might not let
- you access it. You can tell udev to reset ownership/perms:
- \$ udevadm trigger -c add /dev/kvm
- If you want to register binfmt handlers for qemu user targets:
- For openrc:
- # rc-update add qemu-binfmt
- For systemd:
- # ln -s /usr/share/qemu/binfmt.d/qemu.conf /etc/binfmt.d/qemu.conf"
- declare -x EAPI="7"
- declare -x ELIBC="glibc"
- declare -x ENLIGHTENMENT_MODULES=""
- declare -x ENV_UNSET="DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR"
- declare -- EPOCHREALTIME="1574046709.087706"
- declare -- EPOCHSECONDS="1574046709"
- declare -x EPYTHON="python3.6"
- declare -x EXEOPTIONS="-m0755"
- declare -x FCFLAGS="-march=native -O2 -pipe"
- declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
- declare -x FFLAGS="-march=native -O2 -pipe"
- declare -x FFTOOLS=""
- declare -- FIRMWARE_ABI_VERSION="4.0.0-r50"
- declare -x GCC_SPECS=""
- declare -x GPSD_PROTOCOLS=""
- declare -x GRUB_PLATFORMS=""
- declare -x GSETTINGS_BACKEND="dconf"
- declare HDEPEND=""
- declare HOMEPAGE="http://www.qemu.org http://www.linux-kvm.org"
- declare -x INHERITED=" eutils toolchain-funcs multilib linux-info multibuild python-utils-r1 python-r1 udev fcaps readme.gentoo-r1 pax-utils l10n xdg-utils"
- declare -x INPUT_DEVICES=""
- declare -x INSOPTIONS="-m0644"
- declare IUSE="accessibility +aio alsa bzip2 capstone +caps +curl debug doc
- +fdt glusterfs gnutls gtk infiniband iscsi jemalloc +jpeg kernel_linux
- kernel_FreeBSD lzo ncurses nfs nls numa opengl +oss +pin-upstream-blobs
- +png pulseaudio python rbd sasl +seccomp sdl selinux smartcard snappy
- spice ssh static static-user systemtap tci test usb usbredir vde
- +vhost-net virgl virtfs +vnc vte xattr xen xfs +xkb qemu_softmmu_targets_aarch64 qemu_softmmu_targets_alpha qemu_softmmu_targets_arm qemu_softmmu_targets_cris qemu_softmmu_targets_hppa qemu_softmmu_targets_i386 qemu_softmmu_targets_m68k qemu_softmmu_targets_microblaze qemu_softmmu_targets_microblazeel qemu_softmmu_targets_mips qemu_softmmu_targets_mips64 qemu_softmmu_targets_mips64el qemu_softmmu_targets_mipsel qemu_softmmu_targets_nios2 qemu_softmmu_targets_or1k qemu_softmmu_targets_ppc qemu_softmmu_targets_ppc64 qemu_softmmu_targets_riscv32 qemu_softmmu_targets_riscv64 qemu_softmmu_targets_s390x qemu_softmmu_targets_sh4 qemu_softmmu_targets_sh4eb qemu_softmmu_targets_sparc qemu_softmmu_targets_sparc64 qemu_softmmu_targets_x86_64 qemu_softmmu_targets_xtensa qemu_softmmu_targets_xtensaeb qemu_softmmu_targets_lm32 qemu_softmmu_targets_moxie qemu_softmmu_targets_tricore qemu_softmmu_targets_unicore32 qemu_user_targets_aarch64 qemu_user_targets_alpha qemu_user_targets_arm qemu_user_targets_cris qemu_user_targets_hppa qemu_user_targets_i386 qemu_user_targets_m68k qemu_user_targets_microblaze qemu_user_targets_microblazeel qemu_user_targets_mips qemu_user_targets_mips64 qemu_user_targets_mips64el qemu_user_targets_mipsel qemu_user_targets_nios2 qemu_user_targets_or1k qemu_user_targets_ppc qemu_user_targets_ppc64 qemu_user_targets_riscv32 qemu_user_targets_riscv64 qemu_user_targets_s390x qemu_user_targets_sh4 qemu_user_targets_sh4eb qemu_user_targets_sparc qemu_user_targets_sparc64 qemu_user_targets_x86_64 qemu_user_targets_xtensa qemu_user_targets_xtensaeb qemu_user_targets_aarch64_be qemu_user_targets_armeb qemu_user_targets_mipsn32 qemu_user_targets_mipsn32el qemu_user_targets_ppc64abi32 qemu_user_targets_ppc64le qemu_user_targets_sparc32plus qemu_user_targets_tilegx kernel_linux python_targets_python2_7 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 +filecaps"
- declare -x IUSE_EFFECTIVE="abi_x86_64 accessibility aio alpha alsa amd64 amd64-fbsd amd64-linux arm arm64 bzip2 caps capstone curl debug doc elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc fdt filecaps glusterfs gnutls gtk hppa ia64 infiniband iscsi jemalloc jpeg kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux lzo m68k m68k-mint mips ncurses nfs nls numa opengl oss pin-upstream-blobs png ppc ppc-aix ppc-macos ppc64 ppc64-linux prefix prefix-guest prefix-stack pulseaudio python python_targets_python2_7 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 qemu_softmmu_targets_aarch64 qemu_softmmu_targets_alpha qemu_softmmu_targets_arm qemu_softmmu_targets_cris qemu_softmmu_targets_hppa qemu_softmmu_targets_i386 qemu_softmmu_targets_lm32 qemu_softmmu_targets_m68k qemu_softmmu_targets_microblaze qemu_softmmu_targets_microblazeel qemu_softmmu_targets_mips qemu_softmmu_targets_mips64 qemu_softmmu_targets_mips64el qemu_softmmu_targets_mipsel qemu_softmmu_targets_moxie qemu_softmmu_targets_nios2 qemu_softmmu_targets_or1k qemu_softmmu_targets_ppc qemu_softmmu_targets_ppc64 qemu_softmmu_targets_riscv32 qemu_softmmu_targets_riscv64 qemu_softmmu_targets_s390x qemu_softmmu_targets_sh4 qemu_softmmu_targets_sh4eb qemu_softmmu_targets_sparc qemu_softmmu_targets_sparc64 qemu_softmmu_targets_tricore qemu_softmmu_targets_unicore32 qemu_softmmu_targets_x86_64 qemu_softmmu_targets_xtensa qemu_softmmu_targets_xtensaeb qemu_user_targets_aarch64 qemu_user_targets_aarch64_be qemu_user_targets_alpha qemu_user_targets_arm qemu_user_targets_armeb qemu_user_targets_cris qemu_user_targets_hppa qemu_user_targets_i386 qemu_user_targets_m68k qemu_user_targets_microblaze qemu_user_targets_microblazeel qemu_user_targets_mips qemu_user_targets_mips64 qemu_user_targets_mips64el qemu_user_targets_mipsel qemu_user_targets_mipsn32 qemu_user_targets_mipsn32el qemu_user_targets_nios2 qemu_user_targets_or1k qemu_user_targets_ppc qemu_user_targets_ppc64 qemu_user_targets_ppc64abi32 qemu_user_targets_ppc64le qemu_user_targets_riscv32 qemu_user_targets_riscv64 qemu_user_targets_s390x qemu_user_targets_sh4 qemu_user_targets_sh4eb qemu_user_targets_sparc qemu_user_targets_sparc32plus qemu_user_targets_sparc64 qemu_user_targets_tilegx qemu_user_targets_x86_64 qemu_user_targets_xtensa qemu_user_targets_xtensaeb rbd riscv s390 sasl sdl seccomp selinux sh smartcard snappy sparc sparc-solaris sparc64-solaris spice ssh static static-user systemtap tci test usb usbredir userland_BSD userland_GNU vde vhost-net virgl virtfs vnc vte x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt xattr xen xfs xkb"
- declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-guest prefix-stack"
- declare -- IUSE_SOFTMMU_TARGETS="aarch64 alpha arm cris hppa i386 m68k microblaze microblazeel
- mips mips64 mips64el mipsel nios2 or1k ppc ppc64 riscv32 riscv64 s390x
- sh4 sh4eb sparc sparc64 x86_64 xtensa xtensaeb
- lm32 moxie tricore unicore32"
- declare -- IUSE_USER_TARGETS="aarch64 alpha arm cris hppa i386 m68k microblaze microblazeel
- mips mips64 mips64el mipsel nios2 or1k ppc ppc64 riscv32 riscv64 s390x
- sh4 sh4eb sparc sparc64 x86_64 xtensa xtensaeb
- aarch64_be armeb mipsn32 mipsn32el ppc64abi32 ppc64le sparc32plus
- tilegx"
- declare -x KERNEL="linux"
- declare -x KERNEL_ABI="amd64"
- declare -- KERNEL_DIR="/usr/src/linux"
- declare -- KERNEL_MAKEFILE="/usr/src/linux/Makefile"
- declare -x KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86"
- declare -- KV_DIR="/usr/src/linux"
- declare -- KV_EXTRA="-gentoo"
- declare -- KV_FULL="5.3.11-gentoo"
- declare -- KV_LOCAL=""
- declare -- KV_MAJOR="5"
- declare -- KV_MINOR="3"
- declare -- KV_OUT_DIR="/usr/src/linux"
- declare -- KV_PATCH="11"
- declare -x L10N=""
- declare -x LANG="en_US.utf8"
- declare -x LCD_DEVICES=""
- declare -x LC_COLLATE="C"
- declare -x LC_MESSAGES="C"
- declare -x LD="x86_64-pc-linux-gnu-ld"
- declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed"
- declare -x LDFLAGS_amd64="-m elf_x86_64"
- declare -x LDFLAGS_default
- declare -x LDFLAGS_x32="-m elf32_x86_64"
- declare -x LDFLAGS_x86="-m elf_i386"
- declare -x LIBDIR_amd64="lib64"
- declare -x LIBDIR_default="lib"
- declare -x LIBDIR_x32="libx32"
- declare -x LIBDIR_x86="lib"
- declare -x LIBOPTIONS="-m0644"
- declare -x LIBREOFFICE_EXTENSIONS=""
- declare -x LICENSE="GPL-2 LGPL-2 BSD-2"
- declare -x LIRC_DEVICES=""
- declare -x LLVM_TARGETS=""
- declare -x LV2_PATH="/usr/lib64/lv2"
- declare -x MAIL="/var/mail/root"
- declare -x MAKEOPTS="-j5 V=1"
- declare -x MANPAGER="manpager"
- declare -- MIMEINFO_DATABASE_DIR="/usr/share/mime"
- declare -x MONKEYD_PLUGINS=""
- declare -x MOZ_GMP_PATH="/usr/lib64/nsbrowser/plugins/gmp-gmpopenh264/system-installed"
- declare -x MULTILIB_ABIS="amd64 x86"
- declare -x MULTILIB_STRICT_DENY="64-bit.*shared object"
- declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib"
- declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec|llvm)"
- declare -x NETBEANS_MODULES=""
- declare -x NGINX_MODULES_HTTP=""
- declare -x NGINX_MODULES_MAIL=""
- declare -x NGINX_MODULES_STREAM=""
- declare -x NM="x86_64-pc-linux-gnu-nm"
- declare -x OBJCOPY="x86_64-pc-linux-gnu-objcopy"
- declare -x OFED_DRIVERS=""
- declare -x OFFICE_IMPLEMENTATION=""
- declare -x OPENGL_PROFILE="xorg-x11"
- declare -x OPENMPI_FABRICS=""
- declare -x OPENMPI_OFED_FEATURES=""
- declare -x OPENMPI_RM=""
- declare -a PATCHES=([0]="/var/tmp/portage/app-emulation/qemu-4.1.0/files/qemu-2.5.0-cflags.patch" [1]="/var/tmp/portage/app-emulation/qemu-4.1.0/files/qemu-2.5.0-sysmacros.patch" [2]="/var/tmp/portage/app-emulation/qemu-4.1.0/files/qemu-2.11.1-capstone_include_path.patch" [3]="/var/tmp/portage/app-emulation/qemu-4.1.0/files/qemu-4.0.0-sanitize-interp_info.patch" [4]="/var/tmp/portage/app-emulation/qemu-4.1.0/files/qemu-4.0.0-mkdir_systemtap.patch" [5]="/var/tmp/portage/app-emulation/qemu-4.1.0/files/qemu-4.0.0-xkbcommon.patch")
- declare -x PATH="/var/tmp/portage/app-emulation/qemu-4.1.0/temp/python3.6/bin:/usr/lib/portage/python3.6/ebuild-helpers/xattr:/usr/lib/portage/python3.6/ebuild-helpers:/usr/lib/llvm/9/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin"
- declare -- PAX_MARKINGS="none"
- declare PDEPEND=""
- declare -x PHP_TARGETS=""
- declare -x PKG_CONFIG="x86_64-pc-linux-gnu-pkg-config"
- declare -x PKG_CONFIG_PATH="/var/tmp/portage/app-emulation/qemu-4.1.0/temp/python3.6/pkgconfig:/usr/lib64/pkgconfig"
- declare -- PLOCALES="bg de_DE fr_FR hu it tr zh_CN"
- declare -x PORTAGE_COMPRESSION_COMMAND="bzip2"
- declare -a PORTAGE_DOCOMPRESS=([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")
- declare -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
- declare -a PORTAGE_DOCOMPRESS_SKIP=([0]="/usr/share/doc/qemu-4.1.0/html")
- declare -a PORTAGE_DOSTRIP=([0]="/")
- declare -a PORTAGE_DOSTRIP_SKIP=()
- declare -x POSTGRES_TARGETS=""
- declare -- PPC64_FIRMWARE_DEPEND="
- pin-upstream-blobs? (
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- )
- !pin-upstream-blobs? (
- >=sys-firmware/seabios-1.10.2[seavgabios]
- )
- "
- declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND"
- declare -x PROPERTIES=""
- declare -x PYTHON="/usr/bin/python3.6"
- declare -x PYTHONDONTWRITEBYTECODE="1"
- declare -a PYTHON_COMPAT=([0]="python2_7" [1]="python3_5" [2]="python3_6" [3]="python3_7")
- declare -- PYTHON_DEPS="python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7[ncurses,readline] ) python_targets_python3_5? ( dev-lang/python:3.5[ncurses,readline] ) python_targets_python3_6? ( dev-lang/python:3.6[ncurses,readline] ) python_targets_python3_7? ( dev-lang/python:3.7[ncurses,readline] ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)]"
- declare -- PYTHON_REQUIRED_USE="|| ( python_targets_python2_7 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 )"
- declare -- PYTHON_REQ_USE="ncurses,readline"
- declare -x PYTHON_SINGLE_TARGET=""
- declare -x PYTHON_TARGETS="python2_7 python3_6"
- declare -- PYTHON_USEDEP="python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)"
- declare -- QA_PREBUILT="
- usr/share/qemu/hppa-firmware.img
- usr/share/qemu/openbios-ppc
- usr/share/qemu/openbios-sparc64
- usr/share/qemu/openbios-sparc32
- usr/share/qemu/palcode-clipper
- usr/share/qemu/s390-ccw.img
- usr/share/qemu/s390-netboot.img
- usr/share/qemu/u-boot.e500"
- declare -- QA_WX_LOAD="usr/bin/qemu-i386
- usr/bin/qemu-x86_64
- usr/bin/qemu-alpha
- usr/bin/qemu-arm
- usr/bin/qemu-cris
- usr/bin/qemu-m68k
- usr/bin/qemu-microblaze
- usr/bin/qemu-microblazeel
- usr/bin/qemu-mips
- usr/bin/qemu-mipsel
- usr/bin/qemu-or1k
- usr/bin/qemu-ppc
- usr/bin/qemu-ppc64
- usr/bin/qemu-ppc64abi32
- usr/bin/qemu-sh4
- usr/bin/qemu-sh4eb
- usr/bin/qemu-sparc
- usr/bin/qemu-sparc64
- usr/bin/qemu-armeb
- usr/bin/qemu-sparc32plus
- usr/bin/qemu-s390x
- usr/bin/qemu-unicore32"
- declare -x QEMU_SOFTMMU_TARGETS="x86_64 i386"
- declare -x QEMU_USER_TARGETS="x86_64 i386"
- declare -x QT_QPA_PLATFORMTHEME="qt5ct"
- declare RDEPEND="
- !static? (
- >=dev-libs/glib-2.0
- sys-libs/zlib
- python? ( python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7[ncurses,readline] ) python_targets_python3_5? ( dev-lang/python:3.5[ncurses,readline] ) python_targets_python3_6? ( dev-lang/python:3.6[ncurses,readline] ) python_targets_python3_7? ( dev-lang/python:3.7[ncurses,readline] ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_python2_7(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] )
- systemtap? ( dev-util/systemtap )
- xattr? ( sys-apps/attr )
- dev-libs/libxml2
- xkb? ( x11-libs/libxkbcommon )
- >=x11-libs/pixman-0.28.0
- accessibility? (
- app-accessibility/brltty[api]
- app-accessibility/brltty
- )
- aio? ( dev-libs/libaio )
- alsa? ( >=media-libs/alsa-lib-1.0.13 )
- bzip2? ( app-arch/bzip2 )
- capstone? ( dev-libs/capstone:= )
- caps? ( sys-libs/libcap-ng )
- curl? ( >=net-misc/curl-7.15.4 )
- fdt? ( >=sys-apps/dtc-1.5.0 )
- glusterfs? ( >=sys-cluster/glusterfs-3.4.0 )
- gnutls? (
- dev-libs/nettle:=
- >=net-libs/gnutls-3.0:=
- )
- gtk? (
- x11-libs/gtk+:3
- vte? ( x11-libs/vte:2.91 )
- )
- infiniband? (
- sys-fabric/libibumad:=
- sys-fabric/libibverbs:=
- sys-fabric/librdmacm:=
- )
- iscsi? ( net-libs/libiscsi )
- jemalloc? ( dev-libs/jemalloc )
- jpeg? ( virtual/jpeg:0= )
- lzo? ( dev-libs/lzo:2 )
- ncurses? (
- sys-libs/ncurses:0=[unicode]
- sys-libs/ncurses:0=
- )
- nfs? ( >=net-fs/libnfs-1.9.3:= )
- numa? ( sys-process/numactl )
- opengl? (
- virtual/opengl
- media-libs/libepoxy
- media-libs/mesa
- media-libs/mesa[egl,gbm]
- )
- png? ( media-libs/libpng:0= )
- pulseaudio? ( media-sound/pulseaudio )
- rbd? ( sys-cluster/ceph )
- sasl? ( dev-libs/cyrus-sasl )
- sdl? (
- media-libs/libsdl2[X]
- media-libs/libsdl2
- )
- seccomp? ( >=sys-libs/libseccomp-2.1.0 )
- smartcard? ( >=app-emulation/libcacard-2.5.0 )
- snappy? ( app-arch/snappy:= )
- spice? (
- >=app-emulation/spice-protocol-0.12.3
- >=app-emulation/spice-0.12.0
- )
- ssh? ( >=net-libs/libssh-0.8.6 )
- usb? ( >=virtual/libusb-1-r2 )
- usbredir? ( >=sys-apps/usbredir-0.6 )
- vde? ( net-misc/vde )
- virgl? ( media-libs/virglrenderer )
- virtfs? ( sys-libs/libcap )
- xen? ( app-emulation/xen-tools:= )
- xfs? ( sys-fs/xfsprogs )
- )
- qemu_softmmu_targets_i386? (
- pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
- )
- !pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
- sys-firmware/sgabios
- ) )
- qemu_softmmu_targets_x86_64? (
- pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
- )
- !pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
- sys-firmware/sgabios
- ) )
- qemu_softmmu_targets_ppc64? (
- pin-upstream-blobs? (
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- )
- !pin-upstream-blobs? (
- >=sys-firmware/seabios-1.10.2[seavgabios]
- )
- )
- acct-group/kvm
- selinux? ( sec-policy/selinux-qemu ) "
- declare -- README_GENTOO_SUFFIX=""
- declare REPOSITORY
- declare REQUIRED_USE="|| ( python_targets_python2_7 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 )
- qemu_softmmu_targets_arm? ( fdt )
- qemu_softmmu_targets_microblaze? ( fdt )
- qemu_softmmu_targets_mips64el? ( fdt )
- qemu_softmmu_targets_ppc64? ( fdt )
- qemu_softmmu_targets_ppc? ( fdt )
- qemu_softmmu_targets_riscv32? ( fdt )
- qemu_softmmu_targets_riscv64? ( fdt )
- static? ( static-user !alsa !gtk !opengl !pulseaudio !snappy )
- virtfs? ( xattr )
- vte? ( gtk ) "
- declare -x RESTRICT=""
- declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
- declare -x ROS_MESSAGES=""
- declare -x RUBY_TARGETS=""
- declare -x S="/var/tmp/portage/app-emulation/qemu-4.1.0/work/qemu-4.1.0"
- declare -x SANDBOX_DEBUG="0"
- declare -x SANDBOX_DENY=""
- declare -x SANDBOX_PREDICT="/var/tmp/portage/app-emulation/qemu-4.1.0/homedir:/dev/crypto:/var/cache/man:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig"
- declare -x SANDBOX_READ="/:/var/tmp/portage"
- declare -x SANDBOX_VERBOSE="1"
- declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/ptmx:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp/:/var/tmp/portage:/var/tmp/portage/app-emulation/qemu-4.1.0/homedir/.bash_history"
- declare -x SANE_BACKENDS=""
- declare -x SHELL="/bin/bash"
- declare -x SLOT="0"
- declare -- SOFTMMU_TOOLS_DEPEND="
- dev-libs/libxml2[static-libs(+)]
- xkb? ( x11-libs/libxkbcommon[static-libs(+)] )
- >=x11-libs/pixman-0.28.0[static-libs(+)]
- accessibility? (
- app-accessibility/brltty[api]
- app-accessibility/brltty[static-libs(+)]
- )
- aio? ( dev-libs/libaio[static-libs(+)] )
- alsa? ( >=media-libs/alsa-lib-1.0.13 )
- bzip2? ( app-arch/bzip2[static-libs(+)] )
- capstone? ( dev-libs/capstone:= )
- caps? ( sys-libs/libcap-ng[static-libs(+)] )
- curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
- fdt? ( >=sys-apps/dtc-1.5.0[static-libs(+)] )
- glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
- gnutls? (
- dev-libs/nettle:=[static-libs(+)]
- >=net-libs/gnutls-3.0:=[static-libs(+)]
- )
- gtk? (
- x11-libs/gtk+:3
- vte? ( x11-libs/vte:2.91 )
- )
- infiniband? (
- sys-fabric/libibumad:=[static-libs(+)]
- sys-fabric/libibverbs:=[static-libs(+)]
- sys-fabric/librdmacm:=[static-libs(+)]
- )
- iscsi? ( net-libs/libiscsi )
- jemalloc? ( dev-libs/jemalloc )
- jpeg? ( virtual/jpeg:0=[static-libs(+)] )
- lzo? ( dev-libs/lzo:2[static-libs(+)] )
- ncurses? (
- sys-libs/ncurses:0=[unicode]
- sys-libs/ncurses:0=[static-libs(+)]
- )
- nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
- numa? ( sys-process/numactl[static-libs(+)] )
- opengl? (
- virtual/opengl
- media-libs/libepoxy[static-libs(+)]
- media-libs/mesa[static-libs(+)]
- media-libs/mesa[egl,gbm]
- )
- png? ( media-libs/libpng:0=[static-libs(+)] )
- pulseaudio? ( media-sound/pulseaudio )
- rbd? ( sys-cluster/ceph[static-libs(+)] )
- sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
- sdl? (
- media-libs/libsdl2[X]
- media-libs/libsdl2[static-libs(+)]
- )
- seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
- smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
- snappy? ( app-arch/snappy:= )
- spice? (
- >=app-emulation/spice-protocol-0.12.3
- >=app-emulation/spice-0.12.0[static-libs(+)]
- )
- ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
- usb? ( >=virtual/libusb-1-r2[static-libs(+)] )
- usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
- vde? ( net-misc/vde[static-libs(+)] )
- virgl? ( media-libs/virglrenderer[static-libs(+)] )
- virtfs? ( sys-libs/libcap )
- xen? ( app-emulation/xen-tools:= )
- xfs? ( sys-fs/xfsprogs[static-libs(+)] )"
- declare SRC_URI="http://wiki.qemu-project.org/download/qemu-4.1.0.tar.xz"
- declare -x SUDO_COMMAND="/usr/bin/emerge -v @preserved-rebuild"
- declare -x SUDO_GID="1000"
- declare -x SUDO_UID="1000"
- declare -x SUDO_USER="ethan"
- declare -x SYMLINK_LIB="no"
- declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1"
- declare -x USE="abi_x86_64 aio alsa amd64 bzip2 caps curl elibc_glibc fdt filecaps gtk jpeg kernel_linux ncurses nfs nls opengl oss pin-upstream-blobs png pulseaudio python_targets_python2_7 python_targets_python3_6 qemu_softmmu_targets_i386 qemu_softmmu_targets_x86_64 qemu_user_targets_i386 qemu_user_targets_x86_64 sdl seccomp snappy spice ssh usb userland_GNU vhost-net virgl vnc xattr xkb"
- declare -x USERLAND="GNU"
- declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
- declare -x USE_EXPAND_UNPREFIXED="ARCH"
- declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm64 hppa ia64 m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos riscv s390 sh sparc sparc64-solaris sparc-solaris x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt"
- declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
- declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX linux NetBSD OpenBSD SunOS Winnt"
- declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
- declare -x UWSGI_PLUGINS=""
- declare -x VIDEO_CARDS=""
- declare -x VOICEMAIL_STORAGE=""
- declare -x WINDRES="x86_64-pc-linux-gnu-windres"
- declare -- X86_FIRMWARE_DEPEND="
- pin-upstream-blobs? (
- ~sys-firmware/edk2-ovmf-201905[binary]
- ~sys-firmware/ipxe-1.0.0_p20190728[binary]
- ~sys-firmware/seabios-1.12.0[binary,seavgabios]
- ~sys-firmware/sgabios-0.1_pre8[binary]
- )
- !pin-upstream-blobs? (
- sys-firmware/edk2-ovmf
- sys-firmware/ipxe
- >=sys-firmware/seabios-1.10.2[seavgabios]
- sys-firmware/sgabios
- )"
- declare -x XDG_CONFIG_DIRS="/etc/xdg"
- declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share"
- declare -x XFCE_PLUGINS=""
- declare -x XTABLES_ADDONS=""
- declare -- _EUTILS_ECLASS="1"
- declare -x _E_DESTTREE_="/usr"
- declare -x _E_DOCDESTTREE_=""
- declare -x _E_EXEDESTTREE_=""
- declare -x _E_INSDESTTREE_=""
- declare -- _FCAPS_ECLASS="1"
- declare -- _LINUX_CONFIG_EXISTS_DONE=""
- declare -- _MULTIBUILD="1"
- declare -- _MULTILIB_ECLASS="1"
- declare -- _PAX_UTILS_ECLASS="1"
- declare -a _PYTHON_ALL_IMPLS=([0]="jython2_7" [1]="pypy" [2]="pypy3" [3]="python2_7" [4]="python3_5" [5]="python3_6" [6]="python3_7" [7]="python3_8")
- declare -- _PYTHON_R1="1"
- declare -a _PYTHON_SUPPORTED_IMPLS=([0]="python2_7" [1]="python3_5" [2]="python3_6" [3]="python3_7")
- declare -a _PYTHON_UNSUPPORTED_IMPLS=([0]="jython2_7" [1]="pypy" [2]="pypy3" [3]="python3_8")
- declare -- _PYTHON_UTILS_R1="1"
- declare -- _README_GENTOO_ECLASS="1"
- declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
- declare -- _UDEV_ECLASS="1"
- declare -- get_version_warning_done=""
- declare -- i="2"
- declare -a softmmu_bins=([0]="qemu-system-i386" [1]="qemu-system-x86_64")
- declare -- softmmu_targets="i386-softmmu,x86_64-softmmu"
- declare -- use_softmmu_targets=" qemu_softmmu_targets_aarch64 qemu_softmmu_targets_alpha qemu_softmmu_targets_arm qemu_softmmu_targets_cris qemu_softmmu_targets_hppa qemu_softmmu_targets_i386 qemu_softmmu_targets_m68k qemu_softmmu_targets_microblaze qemu_softmmu_targets_microblazeel qemu_softmmu_targets_mips qemu_softmmu_targets_mips64 qemu_softmmu_targets_mips64el qemu_softmmu_targets_mipsel qemu_softmmu_targets_nios2 qemu_softmmu_targets_or1k qemu_softmmu_targets_ppc qemu_softmmu_targets_ppc64 qemu_softmmu_targets_riscv32 qemu_softmmu_targets_riscv64 qemu_softmmu_targets_s390x qemu_softmmu_targets_sh4 qemu_softmmu_targets_sh4eb qemu_softmmu_targets_sparc qemu_softmmu_targets_sparc64 qemu_softmmu_targets_x86_64 qemu_softmmu_targets_xtensa qemu_softmmu_targets_xtensaeb qemu_softmmu_targets_lm32 qemu_softmmu_targets_moxie qemu_softmmu_targets_tricore qemu_softmmu_targets_unicore32"
- declare -- use_user_targets=" qemu_user_targets_aarch64 qemu_user_targets_alpha qemu_user_targets_arm qemu_user_targets_cris qemu_user_targets_hppa qemu_user_targets_i386 qemu_user_targets_m68k qemu_user_targets_microblaze qemu_user_targets_microblazeel qemu_user_targets_mips qemu_user_targets_mips64 qemu_user_targets_mips64el qemu_user_targets_mipsel qemu_user_targets_nios2 qemu_user_targets_or1k qemu_user_targets_ppc qemu_user_targets_ppc64 qemu_user_targets_riscv32 qemu_user_targets_riscv64 qemu_user_targets_s390x qemu_user_targets_sh4 qemu_user_targets_sh4eb qemu_user_targets_sparc qemu_user_targets_sparc64 qemu_user_targets_x86_64 qemu_user_targets_xtensa qemu_user_targets_xtensaeb qemu_user_targets_aarch64_be qemu_user_targets_armeb qemu_user_targets_mipsn32 qemu_user_targets_mipsn32el qemu_user_targets_ppc64abi32 qemu_user_targets_ppc64le qemu_user_targets_sparc32plus qemu_user_targets_tilegx"
- declare -a user_bins=([0]="qemu-i386" [1]="qemu-x86_64")
- declare -- user_targets="i386-linux-user,x86_64-linux-user"
- PYTHON ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#.24.28PYTHON.29.2C_.24.7BEPYTHON.7D"
- }
- __eapi6_src_install ()
- {
- if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
- emake DESTDIR="${D}" install;
- fi;
- einstalldocs
- }
- __eapi6_src_prepare ()
- {
- if ___is_indexed_array_var PATCHES; then
- [[ ${#PATCHES[@]} -gt 0 ]] && eapply "${PATCHES[@]}";
- else
- if [[ -n ${PATCHES} ]]; then
- eapply ${PATCHES};
- fi;
- fi;
- eapply_user
- }
- __eapi7_ver_compare ()
- {
- local va=${1} vb=${2} a an al as ar b bn bl bs br re LC_ALL=C;
- re="^([0-9]+(\.[0-9]+)*)([a-z]?)((_(alpha|beta|pre|rc|p)[0-9]*)*)(-r[0-9]+)?$";
- [[ ${va} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${va}";
- an=${BASH_REMATCH[1]};
- al=${BASH_REMATCH[3]};
- as=${BASH_REMATCH[4]};
- ar=${BASH_REMATCH[7]};
- [[ ${vb} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${vb}";
- bn=${BASH_REMATCH[1]};
- bl=${BASH_REMATCH[3]};
- bs=${BASH_REMATCH[4]};
- br=${BASH_REMATCH[7]};
- __eapi7_ver_compare_int "${an%%.*}" "${bn%%.*}" || return;
- while [[ ${an} == *.* && ${bn} == *.* ]]; do
- an=${an#*.};
- bn=${bn#*.};
- a=${an%%.*};
- b=${bn%%.*};
- if [[ ${a} == 0* || ${b} == 0* ]]; then
- [[ ${a} =~ 0+$ ]] && a=${a%"${BASH_REMATCH[0]}"};
- [[ ${b} =~ 0+$ ]] && b=${b%"${BASH_REMATCH[0]}"};
- [[ ${a} > ${b} ]] && return 3;
- [[ ${a} < ${b} ]] && return 1;
- else
- __eapi7_ver_compare_int "${a}" "${b}" || return;
- fi;
- done;
- [[ ${an} == *.* ]] && return 3;
- [[ ${bn} == *.* ]] && return 1;
- [[ ${al} > ${bl} ]] && return 3;
- [[ ${al} < ${bl} ]] && return 1;
- as=${as#_}${as:+_};
- bs=${bs#_}${bs:+_};
- while [[ -n ${as} && -n ${bs} ]]; do
- a=${as%%_*};
- b=${bs%%_*};
- if [[ ${a%%[0-9]*} == "${b%%[0-9]*}" ]]; then
- __eapi7_ver_compare_int "${a##*[a-z]}" "${b##*[a-z]}" || return;
- else
- [[ ${a%%[0-9]*} == p ]] && return 3;
- [[ ${b%%[0-9]*} == p ]] && return 1;
- [[ ${a} > ${b} ]] && return 3 || return 1;
- fi;
- as=${as#*_};
- bs=${bs#*_};
- done;
- if [[ -n ${as} ]]; then
- [[ ${as} == p[_0-9]* ]] && return 3 || return 1;
- else
- if [[ -n ${bs} ]]; then
- [[ ${bs} == p[_0-9]* ]] && return 1 || return 3;
- fi;
- fi;
- __eapi7_ver_compare_int "${ar#-r}" "${br#-r}" || return;
- return 2
- }
- __eapi7_ver_compare_int ()
- {
- local a=$1 b=$2 d=$(( ${#1}-${#2} ));
- if [[ ${d} -gt 0 ]]; then
- printf -v b "%0${d}d%s" 0 "${b}";
- else
- if [[ ${d} -lt 0 ]]; then
- printf -v a "%0$(( -d ))d%s" 0 "${a}";
- fi;
- fi;
- [[ ${a} > ${b} ]] && return 3;
- [[ ${a} == "${b}" ]]
- }
- __eapi7_ver_parse_range ()
- {
- local range=${1};
- local max=${2};
- [[ ${range} == [0-9]* ]] || die "${FUNCNAME}: range must start with a number";
- start=${range%-*};
- [[ ${range} == *-* ]] && end=${range#*-} || end=${start};
- if [[ -n ${end} ]]; then
- [[ ${start} -le ${end} ]] || die "${FUNCNAME}: end of range must be >= start";
- [[ ${end} -le ${max} ]] || end=${max};
- else
- end=${max};
- fi
- }
- __eapi7_ver_split ()
- {
- local v=${1} LC_ALL=C;
- comp=();
- local s c;
- while [[ -n ${v} ]]; do
- s=${v%%[a-zA-Z0-9]*};
- v=${v:${#s}};
- [[ ${v} == [0-9]* ]] && c=${v%%[^0-9]*} || c=${v%%[^a-zA-Z]*};
- v=${v:${#c}};
- comp+=("${s}" "${c}");
- done
- }
- _clang_fullversion ()
- {
- local ver="$1";
- shift;
- set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__");
- eval echo "$ver"
- }
- _eapply_patch ()
- {
- local f=${1};
- local prefix=${2};
- ebegin "${prefix:-Applying }${f##*/}";
- ${patch_cmd} -p1 -f -s -g0 --no-backup-if-mismatch "${patch_options[@]}" < "${f}";
- failed=${?};
- if ! eend "${failed}"; then
- __helpers_die "patch -p1 ${patch_options[*]} failed with ${f}";
- fi
- }
- _gcc-install-dir ()
- {
- echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')"
- }
- _gcc-specs-directive_raw ()
- {
- local cc=$(tc-getCC);
- local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
- ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
- $1=="*"directive":" { pspec=spec; spec=""; outside=0; next }
- outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
- spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
- { spec=spec $0 }
- END { print spec }';
- return 0
- }
- _gcc-specs-exists ()
- {
- [[ -f $(_gcc-install-dir)/$1 ]]
- }
- _gcc_fullversion ()
- {
- local ver="$1";
- shift;
- set -- $($(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__");
- eval echo "$ver"
- }
- _pax_list_files ()
- {
- local f cmd;
- cmd=$1;
- shift;
- for f in "$@";
- do
- ${cmd} " ${f}";
- done
- }
- _python_check_dead_variables ()
- {
- local v;
- for v in PYTHON_DEPEND PYTHON_USE_WITH{,_OR,_OPT} {RESTRICT,SUPPORT}_PYTHON_ABIS;
- do
- if [[ -n ${!v} ]]; then
- die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Ebuild_head";
- fi;
- done;
- for v in PYTHON_{CPPFLAGS,CFLAGS,CXXFLAGS,LDFLAGS};
- do
- if [[ -n ${!v} ]]; then
- die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#PYTHON_CFLAGS";
- fi;
- done;
- for v in PYTHON_TESTS_RESTRICTED_ABIS PYTHON_EXPORT_PHASE_FUNCTIONS PYTHON_VERSIONED_{SCRIPTS,EXECUTABLES} PYTHON_NONVERSIONED_EXECUTABLES;
- do
- if [[ -n ${!v} ]]; then
- die "${v} is invalid for python-r1 suite";
- fi;
- done;
- for v in DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES DISTUTILS_SETUP_FILES DISTUTILS_GLOBAL_OPTIONS DISTUTILS_SRC_TEST PYTHON_MODNAME;
- do
- if [[ -n ${!v} ]]; then
- die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#${v}";
- fi;
- done;
- if [[ -n ${DISTUTILS_DISABLE_TEST_DEPENDENCY} ]]; then
- die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#DISTUTILS_SRC_TEST";
- fi;
- for v in PYTHON_BDEPEND PYTHON_MULTIPLE_ABIS PYTHON_ABI_TYPE PYTHON_RESTRICTED_ABIS PYTHON_TESTS_FAILURES_TOLERANT_ABIS PYTHON_CFFI_MODULES_GENERATION_COMMANDS;
- do
- if [[ -n ${!v} ]]; then
- die "${v} is invalid for python-r1 suite";
- fi;
- done
- }
- _python_check_locale_sanity ()
- {
- local -x LC_ALL=${1};
- local IFS=;
- local lc=({a..z});
- local uc=({A..Z});
- local input="${lc[*]}${uc[*]}";
- local output=$(tr '[:lower:][:upper:]' '[:upper:][:lower:]' <<<"${input}");
- [[ ${output} == "${uc[*]}${lc[*]}" ]]
- }
- _python_impl_matches ()
- {
- [[ ${#} -ge 2 ]] || die "${FUNCNAME}: takes at least 2 parameters";
- local impl=${1} pattern;
- shift;
- for pattern in "$@";
- do
- if [[ ${pattern} == -2 ]]; then
- ! python_is_python3 "${impl}";
- return;
- else
- if [[ ${pattern} == -3 ]]; then
- python_is_python3 "${impl}";
- return;
- else
- if [[ ${impl/./_} == ${pattern/./_} ]]; then
- return 0;
- fi;
- fi;
- fi;
- done;
- return 1
- }
- _python_impl_supported ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ ${#} -eq 1 ]] || die "${FUNCNAME}: takes exactly 1 argument (impl).";
- local impl=${1};
- case "${impl}" in
- python2_7 | python3_[5678] | jython2_7)
- return 0
- ;;
- pypy1_[89] | pypy2_0 | python2_[56] | python3_[1234])
- return 1
- ;;
- pypy | pypy3)
- if [[ ${EAPI:-0} == [01234] ]]; then
- die "PyPy is supported in EAPI 5 and newer only.";
- fi
- ;;
- *)
- [[ -n ${PYTHON_COMPAT_NO_STRICT} ]] && return 1;
- die "Invalid implementation in PYTHON_COMPAT: ${impl}"
- ;;
- esac
- }
- _python_ln_rel ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local target=${1};
- local symname=${2};
- local tgpath=${target%/*}/;
- local sympath=${symname%/*}/;
- local rel_target=;
- while [[ -n ${sympath} ]]; do
- local tgseg= symseg=;
- while [[ ! -n ${tgseg} && -n ${tgpath} ]]; do
- tgseg=${tgpath%%/*};
- tgpath=${tgpath#${tgseg}/};
- done;
- while [[ ! -n ${symseg} && -n ${sympath} ]]; do
- symseg=${sympath%%/*};
- sympath=${sympath#${symseg}/};
- done;
- if [[ ${tgseg} != ${symseg} ]]; then
- rel_target=../${rel_target}${tgseg:+${tgseg}/};
- fi;
- done;
- rel_target+=${tgpath}${target##*/};
- debug-print "${FUNCNAME}: ${symname} -> ${target}";
- debug-print "${FUNCNAME}: rel_target = ${rel_target}";
- ln -fs "${rel_target}" "${symname}"
- }
- _python_multibuild_wrapper ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local -x EPYTHON PYTHON;
- local -x PATH=${PATH} PKG_CONFIG_PATH=${PKG_CONFIG_PATH};
- python_export "${MULTIBUILD_VARIANT}" EPYTHON PYTHON;
- python_wrapper_setup;
- "${@}"
- }
- _python_obtain_impls ()
- {
- _python_validate_useflags;
- if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
- MULTIBUILD_VARIANTS=(${PYTHON_COMPAT_OVERRIDE});
- return;
- fi;
- MULTIBUILD_VARIANTS=();
- local impl;
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- has "${impl}" "${PYTHON_COMPAT[@]}" && use "python_targets_${impl}" && MULTIBUILD_VARIANTS+=("${impl}");
- done
- }
- _python_set_impls ()
- {
- local i;
- if ! declare -p PYTHON_COMPAT &> /dev/null; then
- die 'PYTHON_COMPAT not declared.';
- fi;
- if [[ $(declare -p PYTHON_COMPAT) != "declare -a"* ]]; then
- die 'PYTHON_COMPAT must be an array.';
- fi;
- for i in "${PYTHON_COMPAT[@]}";
- do
- _python_impl_supported "${i}";
- done;
- local supp=() unsupp=();
- for i in "${_PYTHON_ALL_IMPLS[@]}";
- do
- if has "${i}" "${PYTHON_COMPAT[@]}"; then
- supp+=("${i}");
- else
- unsupp+=("${i}");
- fi;
- done;
- if [[ ! -n ${supp[@]} ]]; then
- die "No supported implementation in PYTHON_COMPAT.";
- fi;
- if [[ -n ${_PYTHON_SUPPORTED_IMPLS[@]} ]]; then
- if [[ ${_PYTHON_SUPPORTED_IMPLS[@]} != ${supp[@]} ]]; then
- eerror "Supported impls (PYTHON_COMPAT) changed between inherits!";
- eerror "Before: ${_PYTHON_SUPPORTED_IMPLS[*]}";
- eerror "Now : ${supp[*]}";
- die "_PYTHON_SUPPORTED_IMPLS integrity check failed";
- fi;
- if [[ ${_PYTHON_UNSUPPORTED_IMPLS[@]} != ${unsupp[@]} ]]; then
- eerror "Unsupported impls changed between inherits!";
- eerror "Before: ${_PYTHON_UNSUPPORTED_IMPLS[*]}";
- eerror "Now : ${unsupp[*]}";
- die "_PYTHON_UNSUPPORTED_IMPLS integrity check failed";
- fi;
- else
- _PYTHON_SUPPORTED_IMPLS=("${supp[@]}");
- _PYTHON_UNSUPPORTED_IMPLS=("${unsupp[@]}");
- readonly _PYTHON_SUPPORTED_IMPLS _PYTHON_UNSUPPORTED_IMPLS;
- fi
- }
- _python_validate_useflags ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
- if [[ ! -n ${_PYTHON_COMPAT_OVERRIDE_WARNED} ]]; then
- ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python";
- ewarn "implementations will be enabled:";
- ewarn;
- ewarn " ${PYTHON_COMPAT_OVERRIDE}";
- ewarn;
- ewarn "Dependencies won't be satisfied, and PYTHON_TARGETS will be ignored.";
- _PYTHON_COMPAT_OVERRIDE_WARNED=1;
- fi;
- return;
- fi;
- local i;
- for i in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- use "python_targets_${i}" && return 0;
- done;
- eerror "No Python implementation selected for the build. Please add one";
- eerror "of the following values to your PYTHON_TARGETS (in make.conf):";
- eerror;
- eerror "${PYTHON_COMPAT[@]}";
- echo;
- die "No supported Python implementation in PYTHON_TARGETS."
- }
- _tc-getPROG ()
- {
- local tuple=$1;
- local v var vars=$2;
- local prog=($3);
- var=${vars%% *};
- for v in ${vars};
- do
- if [[ -n ${!v} ]]; then
- export ${var}="${!v}";
- echo "${!v}";
- return 0;
- fi;
- done;
- local search=;
- [[ -n $4 ]] && search=$(type -p $4-${prog[0]});
- [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p ${!tuple}-${prog[0]});
- [[ -n ${search} ]] && prog[0]=${search##*/};
- export ${var}="${prog[*]}";
- echo "${!var}"
- }
- _udev_get_udevdir ()
- {
- if $($(tc-getPKG_CONFIG) --exists udev); then
- local udevdir="$($(tc-getPKG_CONFIG) --variable=udevdir udev)";
- echo "${udevdir#${EPREFIX%/}}";
- else
- echo /lib/udev;
- fi
- }
- check_extra_config ()
- {
- use kernel_linux || return;
- local config negate die error reworkmodulenames;
- local soft_errors_count=0 hard_errors_count=0 config_required=0;
- local old_LINUX_CONFIG_EXISTS_DONE="${_LINUX_CONFIG_EXISTS_DONE}";
- linux-info_get_any_version;
- for config in ${CONFIG_CHECK};
- do
- if [[ "${config:0:1}" != "~" ]]; then
- config_required=1;
- break;
- fi;
- done;
- if [[ ${config_required} == 0 ]]; then
- if ! linux_config_exists; then
- ewarn "Unable to check for the following kernel config options due";
- ewarn "to absence of any configured kernel sources or compiled";
- ewarn "config:";
- for config in ${CONFIG_CHECK};
- do
- config=${config#\~};
- config=${config#\!};
- local_error="ERROR_${config}";
- msg="${!local_error}";
- if [[ -z ${msg} ]]; then
- local_error="WARNING_${config}";
- msg="${!local_error}";
- fi;
- ewarn " - ${config}${msg:+ - }${msg}";
- done;
- ewarn "You're on your own to make sure they are set if needed.";
- export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}";
- return 0;
- fi;
- else
- require_configured_kernel;
- fi;
- einfo "Checking for suitable kernel configuration options...";
- for config in ${CONFIG_CHECK};
- do
- die=1;
- error=0;
- negate=0;
- reworkmodulenames=0;
- if [[ ${config:0:1} == "~" ]]; then
- die=0;
- config=${config:1};
- else
- if [[ ${config:0:1} == "@" ]]; then
- die=0;
- reworkmodulenames=1;
- config=${config:1};
- fi;
- fi;
- if [[ ${config:0:1} == "!" ]]; then
- negate=1;
- config=${config:1};
- fi;
- if [[ ${negate} == 1 ]]; then
- linux_chkconfig_present ${config} && error=2;
- else
- if [[ ${reworkmodulenames} == 1 ]]; then
- local temp_config="${config//*:}" i n;
- config="${config//:*}";
- if linux_chkconfig_present ${config}; then
- for i in ${MODULE_NAMES};
- do
- n="${i//${temp_config}}";
- [[ -z ${n//\(*} ]] && MODULE_IGNORE="${MODULE_IGNORE} ${temp_config}";
- done;
- error=2;
- fi;
- else
- linux_chkconfig_present ${config} || error=1;
- fi;
- fi;
- if [[ ${error} > 0 ]]; then
- local report_func="eerror" local_error;
- local_error="ERROR_${config}";
- local_error="${!local_error}";
- if [[ -z "${local_error}" ]]; then
- local_error="${config}_ERROR";
- local_error="${!local_error}";
- fi;
- if [[ ${die} == 0 && -z "${local_error}" ]]; then
- local_error="WARNING_${config}";
- local_error="${!local_error}";
- if [[ -n "${local_error}" ]]; then
- report_func="ewarn";
- fi;
- fi;
- if [[ -z "${local_error}" ]]; then
- [[ ${error} == 1 ]] && local_error="is not set when it should be." || local_error="should not be set. But it is.";
- local_error="CONFIG_${config}:\t ${local_error}";
- fi;
- if [[ ${die} == 0 ]]; then
- ${report_func} " ${local_error}";
- soft_errors_count=$[soft_errors_count + 1];
- else
- ${report_func} " ${local_error}";
- hard_errors_count=$[hard_errors_count + 1];
- fi;
- fi;
- done;
- if [[ ${hard_errors_count} > 0 ]]; then
- eerror "Please check to make sure these options are set correctly.";
- eerror "Failure to do so may cause unexpected problems.";
- eerror "Once you have satisfied these options, please try merging";
- eerror "this package again.";
- export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}";
- die "Incorrect kernel configuration options";
- else
- if [[ ${soft_errors_count} > 0 ]]; then
- ewarn "Please check to make sure these options are set correctly.";
- ewarn "Failure to do so may cause unexpected problems.";
- else
- eend 0;
- fi;
- fi;
- export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}"
- }
- check_kernel_built ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- require_configured_kernel;
- local versionh_path;
- if kernel_is -ge 3 7; then
- versionh_path="include/generated/uapi/linux/version.h";
- else
- versionh_path="include/linux/version.h";
- fi;
- if [ ! -f "${KV_OUT_DIR}/${versionh_path}" ]; then
- eerror "These sources have not yet been prepared.";
- eerror "We cannot build against an unprepared tree.";
- eerror "To resolve this, please type the following:";
- eerror;
- eerror "# cd ${KV_DIR}";
- eerror "# make oldconfig";
- eerror "# make modules_prepare";
- eerror;
- eerror "Then please try merging this module again.";
- die "Kernel sources need compiling first";
- fi
- }
- check_modules_supported ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- require_configured_kernel;
- if ! linux_chkconfig_builtin "MODULES"; then
- eerror "These sources do not support loading external modules.";
- eerror "to be able to use this module please enable \"Loadable modules support\"";
- eerror "in your kernel, recompile and then try merging this module again.";
- die "No support for external modules in ${KV_FULL} config";
- fi
- }
- check_targets ()
- {
- local var=$1 mak=$2;
- local detected sorted;
- pushd "${S}"/default-configs > /dev/null || die;
- detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | LC_COLLATE=C sort -u));
- sorted=$(echo $(printf '%s\n' ${!var} | LC_COLLATE=C sort -u));
- if [[ ${sorted} != "${detected}" ]]; then
- eerror "The ebuild needs to be kept in sync.";
- eerror "${var}: ${sorted}";
- eerror "$(printf '%-*s' ${#var} configure): ${detected}";
- die "sync ${var} to the list of targets";
- fi;
- popd > /dev/null
- }
- check_zlibinflate ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- require_configured_kernel;
- local INFLATE;
- local DEFLATE;
- einfo "Determining the usability of ZLIB_INFLATE support in your kernel";
- ebegin "checking ZLIB_INFLATE";
- linux_chkconfig_builtin CONFIG_ZLIB_INFLATE;
- eend $? || die;
- ebegin "checking ZLIB_DEFLATE";
- linux_chkconfig_builtin CONFIG_ZLIB_DEFLATE;
- eend $? || die;
- local LINENO_START;
- local LINENO_END;
- local SYMBOLS;
- local x;
- LINENO_END="$(grep -n 'CONFIG_ZLIB_INFLATE y' ${KV_DIR}/lib/Config.in | cut -d : -f 1)";
- LINENO_START="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | grep -n 'if \[' | tail -n 1 | cut -d : -f 1)";
- (( LINENO_AMOUNT = $LINENO_END - $LINENO_START ));
- (( LINENO_END = $LINENO_END - 1 ));
- SYMBOLS="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | tail -n $LINENO_AMOUNT | sed -e 's/^.*\(CONFIG_[^\" ]*\).*/\1/g;')";
- for x in $SYMBOLS;
- do
- if [ "${!x}" = "y" ]; then
- einfo "${x} ensures zlib is linked into your kernel - excellent";
- return 0;
- fi;
- done;
- eerror;
- eerror "This kernel module requires ZLIB library support.";
- eerror "You have enabled zlib support in your kernel, but haven't enabled";
- eerror "enabled any option that will ensure that zlib is linked into your";
- eerror "kernel.";
- eerror;
- eerror "Please ensure that you enable at least one of these options:";
- eerror;
- for x in $SYMBOLS;
- do
- eerror " * $x";
- done;
- eerror;
- eerror "Please remember to recompile and install your kernel, and reboot";
- eerror "into your new kernel before attempting to load this kernel module.";
- die "Kernel doesn't include zlib support"
- }
- clang-fullversion ()
- {
- _clang_fullversion '$1.$2.$3' "$@"
- }
- clang-major-version ()
- {
- _clang_fullversion '$1' "$@"
- }
- clang-micro-version ()
- {
- _clang_fullversion '$3' "$@"
- }
- clang-minor-version ()
- {
- _clang_fullversion '$2' "$@"
- }
- clang-version ()
- {
- _clang_fullversion '$1.$2' "$@"
- }
- conf_notuser ()
- {
- if [[ ${buildtype} == "user" ]]; then
- echo "--disable-${2:-$1}";
- else
- use_enable "$@";
- fi
- }
- eapply ()
- {
- local failed patch_cmd=patch;
- local -x LC_COLLATE=POSIX;
- type -P gpatch > /dev/null && patch_cmd=gpatch;
- function _eapply_patch ()
- {
- local f=${1};
- local prefix=${2};
- ebegin "${prefix:-Applying }${f##*/}";
- ${patch_cmd} -p1 -f -s -g0 --no-backup-if-mismatch "${patch_options[@]}" < "${f}";
- failed=${?};
- if ! eend "${failed}"; then
- __helpers_die "patch -p1 ${patch_options[*]} failed with ${f}";
- fi
- };
- local patch_options=() files=();
- local i found_doublehyphen;
- for ((i = 1; i <= ${#@}; ++i ))
- do
- if [[ ${@:i:1} == -- ]]; then
- patch_options=("${@:1:i-1}");
- files=("${@:i+1}");
- found_doublehyphen=1;
- break;
- fi;
- done;
- if [[ -z ${found_doublehyphen} ]]; then
- for ((i = 1; i <= ${#@}; ++i ))
- do
- if [[ ${@:i:1} != -* ]]; then
- patch_options=("${@:1:i-1}");
- files=("${@:i}");
- break;
- fi;
- done;
- for i in "${files[@]}";
- do
- if [[ ${i} == -* ]]; then
- die "eapply: all options must be passed before non-options";
- fi;
- done;
- fi;
- if [[ ${#files[@]} -eq 0 ]]; then
- die "eapply: no files specified";
- fi;
- local f;
- for f in "${files[@]}";
- do
- if [[ -d ${f} ]]; then
- function _eapply_get_files ()
- {
- local LC_ALL=POSIX;
- local prev_shopt=$(shopt -p nullglob);
- shopt -s nullglob;
- local f;
- for f in "${1}"/*;
- do
- if [[ ${f} == *.diff || ${f} == *.patch ]]; then
- files+=("${f}");
- fi;
- done;
- ${prev_shopt}
- };
- local files=();
- _eapply_get_files "${f}";
- [[ ${#files[@]} -eq 0 ]] && die "No *.{patch,diff} files in directory ${f}";
- einfo "Applying patches from ${f} ...";
- local f2;
- for f2 in "${files[@]}";
- do
- _eapply_patch "${f2}" ' ';
- [[ ${failed} -ne 0 ]] && return "${failed}";
- done;
- else
- _eapply_patch "${f}";
- [[ ${failed} -ne 0 ]] && return "${failed}";
- fi;
- done;
- return 0
- }
- eapply_user ()
- {
- [[ ${EBUILD_PHASE} == prepare ]] || die "eapply_user() called during invalid phase: ${EBUILD_PHASE}";
- local tagfile=${T}/.portage_user_patches_applied;
- [[ -f ${tagfile} ]] && return;
- >> "${tagfile}";
- local basedir=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
- local applied d f;
- local -A _eapply_user_patches;
- local prev_shopt=$(shopt -p nullglob);
- shopt -s nullglob;
- for d in "${basedir}"/${CATEGORY}/{${P}-${PR},${P},${PN}}{:${SLOT%/*},};
- do
- for f in "${d}"/*;
- do
- if [[ ( ${f} == *.diff || ${f} == *.patch ) && -z ${_eapply_user_patches[${f##*/}]} ]]; then
- _eapply_user_patches[${f##*/}]=${f};
- fi;
- done;
- done;
- if [[ ${#_eapply_user_patches[@]} -gt 0 ]]; then
- while read -r -d '' f; do
- f=${_eapply_user_patches[${f}]};
- if [[ -s ${f} ]]; then
- eapply "${f}";
- applied=1;
- fi;
- done < <(printf -- '%s\0' "${!_eapply_user_patches[@]}" |
- LC_ALL=C sort -z);
- fi;
- ${prev_shopt};
- [[ -n ${applied} ]] && ewarn "User patches applied."
- }
- ebeep ()
- {
- ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
- }
- econf_build ()
- {
- local CBUILD=${CBUILD:-${CHOST}};
- tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
- }
- edos2unix ()
- {
- [[ $# -eq 0 ]] && return 0;
- sed -i 's/\r$//' -- "$@" || die
- }
- einstalldocs ()
- {
- ( if ! declare -p DOCS &> /dev/null; then
- local d;
- for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
- do
- [[ -f ${d} && -s ${d} ]] && docinto / && dodoc "${d}";
- done;
- else
- if ___is_indexed_array_var DOCS; then
- [[ ${#DOCS[@]} -gt 0 ]] && docinto / && dodoc -r "${DOCS[@]}";
- else
- [[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS};
- fi;
- fi );
- ( if ___is_indexed_array_var HTML_DOCS; then
- [[ ${#HTML_DOCS[@]} -gt 0 ]] && docinto html && dodoc -r "${HTML_DOCS[@]}";
- else
- [[ -n ${HTML_DOCS} ]] && docinto html && dodoc -r ${HTML_DOCS};
- fi )
- }
- emktemp ()
- {
- local exe="touch";
- [[ $1 == -d ]] && exe="mkdir" && shift;
- local topdir=$1;
- if [[ -z ${topdir} ]]; then
- [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
- fi;
- if ! type -P mktemp > /dev/null; then
- local tmp=/;
- while [[ -e ${tmp} ]]; do
- tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
- done;
- ${exe} "${tmp}" || ${exe} -p "${tmp}";
- echo "${tmp}";
- else
- if [[ ${exe} == "touch" ]]; then
- TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
- else
- TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
- fi;
- fi
- }
- epause ()
- {
- ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
- }
- fcaps ()
- {
- debug-print-function ${FUNCNAME} "$@";
- local owner='root';
- local group='0';
- local mode='4711';
- local caps_mode='711';
- while [[ $# -gt 0 ]]; do
- case $1 in
- -o)
- owner=$2;
- shift
- ;;
- -g)
- group=$2;
- shift
- ;;
- -m)
- mode=$2;
- shift
- ;;
- -M)
- caps_mode=$2;
- shift
- ;;
- *)
- break
- ;;
- esac;
- shift;
- done;
- [[ $# -lt 2 ]] && die "${FUNCNAME}: wrong arg count";
- local caps=$1;
- [[ ${caps} == *[-=+]* ]] || caps+="=ep";
- shift;
- local root;
- case ${EBUILD_PHASE} in
- compile | install | preinst)
- root=${ED:-${D}}
- ;;
- postinst)
- root=${EROOT:-${ROOT}}
- ;;
- esac;
- root=${root%/};
- local file;
- for file in "$@";
- do
- [[ ${file} != /* ]] && file="${root}/${file}";
- if use filecaps; then
- debug-print "${FUNCNAME}: setting caps '${caps}' on '${file}'";
- chmod ${caps_mode} "${file}" || die;
- function _libcap ()
- {
- setcap "${caps}" "${file}"
- };
- function _libcap_verify ()
- {
- setcap -v "${caps}" "${file}" > /dev/null
- };
- function _libcap_ng ()
- {
- local caps=",${caps%=ep}";
- filecap "${file}" "${caps//,cap_}"
- };
- function _libcap_ng_verify ()
- {
- local rcaps icaps caps=",${caps%=ep}";
- rcaps=$(filecap "${file}" | sed -nr -e "s:^.{${#file}} +::" -e 's:, +:\n:g' -e 2p | LC_ALL=C sort);
- [[ ${PIPESTATUS[0]} -eq 0 ]] || return 1;
- icaps=$(echo "${caps//,cap_}" | LC_ALL=C sort);
- [[ ${rcaps} == ${icaps} ]]
- };
- local out cmd notfound=0;
- for cmd in _libcap _libcap_ng;
- do
- if ! out=$(LC_ALL=C ${cmd} 2>&1); then
- case ${out} in
- *"command not found"*)
- : $(( ++notfound ));
- continue
- ;;
- *"Not supported"* | *"Operation not supported"*)
- local fstype=$(stat -f -c %T "${file}");
- ewarn "Could not set caps on '${file}' due to missing filesystem support:";
- ewarn "* enable XATTR support for '${fstype}' in your kernel (if configurable)";
- ewarn "* mount the fs with the user_xattr option (if not the default)";
- ewarn "* enable the relevant FS_SECURITY option (if configurable)";
- break
- ;;
- *)
- eerror "Setting caps '${caps}' on file '${file}' failed:";
- eerror "${out}";
- die "could not set caps"
- ;;
- esac;
- else
- ${cmd}_verify || die "Checking caps '${caps}' on '${file}' failed";
- continue 2;
- fi;
- done;
- if [[ ${notfound} -eq 2 ]] && [[ -z ${_FCAPS_WARNED} ]]; then
- _FCAPS_WARNED="true";
- ewarn "Could not find cap utils; make sure libcap or libcap-ng is available.";
- fi;
- fi;
- debug-print "${FUNCNAME}: setting owner/mode on '${file}'";
- chown "${owner}:${group}" "${file}" || die;
- chmod ${mode} "${file}" || die;
- done
- }
- fcaps_pkg_postinst ()
- {
- local arg args=();
- for arg in "${FILECAPS[@]}" "--";
- do
- if [[ ${arg} == "--" ]]; then
- fcaps "${args[@]}";
- args=();
- else
- args+=("${arg}");
- fi;
- done
- }
- firmware_abi_change ()
- {
- local pv;
- for pv in ${REPLACING_VERSIONS};
- do
- if ver_test $pv -lt ${FIRMWARE_ABI_VERSION}; then
- return 0;
- fi;
- done;
- return 1
- }
- gcc-fullversion ()
- {
- _gcc_fullversion '$1.$2.$3' "$@"
- }
- gcc-major-version ()
- {
- _gcc_fullversion '$1' "$@"
- }
- gcc-micro-version ()
- {
- _gcc_fullversion '$3' "$@"
- }
- gcc-minor-version ()
- {
- _gcc_fullversion '$2' "$@"
- }
- gcc-specs-directive ()
- {
- local directive subdname subdirective;
- directive="$(_gcc-specs-directive_raw $1)";
- while [[ ${directive} == *%\(*\)* ]]; do
- subdname=${directive/*%\(};
- subdname=${subdname/\)*};
- subdirective="$(_gcc-specs-directive_raw ${subdname})";
- directive="${directive//\%(${subdname})/${subdirective}}";
- done;
- echo "${directive}";
- return 0
- }
- gcc-specs-nostrict ()
- {
- local directive;
- directive=$(gcc-specs-directive cc1);
- [[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]
- }
- gcc-specs-now ()
- {
- local directive;
- directive=$(gcc-specs-directive link_command);
- [[ "${directive/\{!nonow:}" != "${directive}" ]]
- }
- gcc-specs-pie ()
- {
- local directive;
- directive=$(gcc-specs-directive cc1);
- [[ "${directive/\{!nopie:}" != "${directive}" ]]
- }
- gcc-specs-relro ()
- {
- local directive;
- directive=$(gcc-specs-directive link_command);
- [[ "${directive/\{!norelro:}" != "${directive}" ]]
- }
- gcc-specs-ssp ()
- {
- local directive;
- directive=$(gcc-specs-directive cc1);
- [[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]
- }
- gcc-specs-ssp-to-all ()
- {
- local directive;
- directive=$(gcc-specs-directive cc1);
- [[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]
- }
- gcc-specs-stack-check ()
- {
- local directive;
- directive=$(gcc-specs-directive cc1);
- [[ "${directive/\{!fno-stack-check:}" != "${directive}" ]]
- }
- gcc-version ()
- {
- _gcc_fullversion '$1.$2' "$@"
- }
- gen_usr_ldscript ()
- {
- ewarn "${FUNCNAME}: Please migrate to usr-ldscript.eclass";
- local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
- [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
- tc-is-static-only && return;
- if [[ $(type -t multilib_is_native_abi) == "function" ]]; then
- multilib_is_native_abi || return 0;
- fi;
- case ${CTARGET:-${CHOST}} in
- *-darwin*)
- ;;
- *-android*)
- return 0
- ;;
- *linux* | *-freebsd* | *-openbsd* | *-netbsd*)
- use prefix && return 0
- ;;
- *)
- return 0
- ;;
- esac;
- dodir /usr/${libdir};
- if [[ $1 == "-a" ]]; then
- auto=true;
- shift;
- dodir /${libdir};
- fi;
- local flags=(${CFLAGS} ${LDFLAGS} -Wl,--verbose);
- if $(tc-getLD) --version | grep -q 'GNU gold'; then
- local d="${T}/bfd-linker";
- mkdir -p "${d}";
- ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld;
- flags+=(-B"${d}");
- fi;
- output_format=$($(tc-getCC) "${flags[@]}" 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
- [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
- for lib in "$@";
- do
- local tlib;
- if ${auto}; then
- lib="lib${lib}${suffix}";
- else
- [[ -r ${ED}/${libdir}/${lib} ]] || continue;
- fi;
- case ${CTARGET:-${CHOST}} in
- *-darwin*)
- if ${auto}; then
- tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
- else
- tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
- fi;
- [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
- tlib=${tlib##*/};
- if ${auto}; then
- mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
- if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
- mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
- fi;
- rm -f "${ED}"/${libdir}/${lib};
- fi;
- if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
- chmod u+w "${ED}${libdir}/${tlib}";
- local nowrite=yes;
- fi;
- install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
- [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
- pushd "${ED}/usr/${libdir}" > /dev/null;
- ln -snf "../../${libdir}/${tlib}" "${lib}";
- popd > /dev/null
- ;;
- *)
- if ${auto}; then
- tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
- [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
- mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
- if [[ ${tlib} != ${lib}* ]]; then
- mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
- fi;
- rm -f "${ED}"/${libdir}/${lib};
- else
- tlib=${lib};
- fi;
- cat > "${ED}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
- /* GNU ld script
- Since Gentoo has critical dynamic libraries in /lib, and the static versions
- in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
- run into linking problems. This "fake" dynamic lib is a linker script that
- redirects the linker to the real lib. And yes, this works in the cross-
- compiling scenario as the sysroot-ed linker will prepend the real path.
- See bug https://bugs.gentoo.org/4411 for more info.
- */
- ${output_format}
- GROUP ( ${EPREFIX}/${libdir}/${tlib} )
- END_LDSCRIPT
- ;;
- esac
- fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
- done
- }
- generate_initd ()
- {
- local out="${T}/qemu-binfmt";
- local out_systemd="${T}/qemu.conf";
- local d="${T}/binfmt.d";
- einfo "Generating qemu binfmt scripts and configuration files";
- mkdir -p "${d}";
- "${S}"/scripts/qemu-binfmt-conf.sh --debian --exportdir "${d}" --qemu-path "${EPREFIX}/usr/bin" || die;
- sed -E -i -e 's:^([^ ]+) (.*)$:\1="\2":' "${d}"/* || die;
- local f qcpu package interpreter magic mask;
- cat "${FILESDIR}"/qemu-binfmt.initd.head > "${out}" || die;
- for f in "${d}"/qemu-*;
- do
- source "${f}";
- qcpu=${package#qemu-};
- case ${qcpu} in
- arm*)
- qcpu="arm"
- ;;
- mips*)
- qcpu="mips"
- ;;
- ppc*)
- qcpu="ppc"
- ;;
- s390*)
- qcpu="s390"
- ;;
- sh*)
- qcpu="sh"
- ;;
- sparc*)
- qcpu="sparc"
- ;;
- esac;
- cat <<EOF >> "${out}"
- if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
- printf '%s\n' ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
- fi
- EOF
- echo ":${package}:M::${magic}:${mask}:${interpreter}:OC" >> "${out_systemd}";
- done;
- cat "${FILESDIR}"/qemu-binfmt.initd.tail >> "${out}" || die
- }
- get_abi_CFLAGS ()
- {
- get_abi_var CFLAGS "$@"
- }
- get_abi_CHOST ()
- {
- get_abi_var CHOST "$@"
- }
- get_abi_CTARGET ()
- {
- get_abi_var CTARGET "$@"
- }
- get_abi_FAKE_TARGETS ()
- {
- get_abi_var FAKE_TARGETS "$@"
- }
- get_abi_LDFLAGS ()
- {
- get_abi_var LDFLAGS "$@"
- }
- get_abi_LIBDIR ()
- {
- get_abi_var LIBDIR "$@"
- }
- get_abi_var ()
- {
- local flag=$1;
- local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
- local var="${flag}_${abi}";
- echo ${!var}
- }
- get_all_abis ()
- {
- local x order="" mvar dvar;
- mvar="MULTILIB_ABIS";
- dvar="DEFAULT_ABI";
- if [[ -n $1 ]]; then
- mvar="$1_${mvar}";
- dvar="$1_${dvar}";
- fi;
- if [[ -z ${!mvar} ]]; then
- echo "default";
- return 0;
- fi;
- for x in ${!mvar};
- do
- if [[ ${x} != ${!dvar} ]]; then
- order="${order:+${order} }${x}";
- fi;
- done;
- order="${order:+${order} }${!dvar}";
- echo ${order};
- return 0
- }
- get_all_libdirs ()
- {
- local libdirs abi;
- for abi in ${MULTILIB_ABIS};
- do
- libdirs+=" $(get_abi_LIBDIR ${abi})";
- done;
- [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
- echo "${libdirs}"
- }
- get_exeext ()
- {
- case ${CHOST} in
- *-cygwin* | mingw* | *-mingw*)
- echo ".exe"
- ;;
- esac
- }
- get_install_abis ()
- {
- local x order="";
- if [[ -z ${MULTILIB_ABIS} ]]; then
- echo "default";
- return 0;
- fi;
- if [[ ${EMULTILIB_PKG} == "true" ]]; then
- for x in ${MULTILIB_ABIS};
- do
- if [[ ${x} != "${DEFAULT_ABI}" ]]; then
- has ${x} ${ABI_DENY} || order="${order} ${x}";
- fi;
- done;
- has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
- if [[ -n ${ABI_ALLOW} ]]; then
- local ordera="";
- for x in ${order};
- do
- if has ${x} ${ABI_ALLOW}; then
- ordera="${ordera} ${x}";
- fi;
- done;
- order=${ordera};
- fi;
- else
- order=${DEFAULT_ABI};
- fi;
- if [[ -z ${order} ]]; then
- die "The ABI list is empty. Are you using a proper multilib profile? Perhaps your USE flags or MULTILIB_ABIS are too restrictive for this package.";
- fi;
- echo ${order};
- return 0
- }
- get_libdir ()
- {
- local libdir_var="LIBDIR_${ABI}";
- local libdir="lib";
- [[ -n ${ABI} && -n ${!libdir_var} ]] && libdir=${!libdir_var};
- echo "${libdir}"
- }
- get_libname ()
- {
- local libname;
- local ver=$1;
- case ${CHOST} in
- *-cygwin*)
- libname="dll.a"
- ;;
- mingw* | *-mingw*)
- libname="dll"
- ;;
- *-darwin*)
- libname="dylib"
- ;;
- *-mint*)
- libname="irrelevant"
- ;;
- hppa*-hpux*)
- libname="sl"
- ;;
- *)
- libname="so"
- ;;
- esac;
- if [[ -z $* ]]; then
- echo ".${libname}";
- else
- for ver in "$@";
- do
- case ${CHOST} in
- *-cygwin*)
- echo ".${ver}.${libname}"
- ;;
- *-darwin*)
- echo ".${ver}.${libname}"
- ;;
- *-mint*)
- echo ".${libname}"
- ;;
- *)
- echo ".${libname}.${ver}"
- ;;
- esac;
- done;
- fi
- }
- get_localversion ()
- {
- local lv_list i x;
- local shopt_save=$(shopt -p nullglob);
- shopt -s nullglob;
- local files=(${1}/localversion*);
- ${shopt_save};
- for i in "${files[@]}";
- do
- [[ -n ${i//*~*} ]] && lv_list="${lv_list} ${i}";
- done;
- for i in ${lv_list};
- do
- x="${x}$(<${i})";
- done;
- x=${x/ /};
- echo ${x}
- }
- get_makefile_extract_function ()
- {
- local a='' b='' mkfunc='getfilevar';
- a="$(getfilevar VERSION ${KERNEL_MAKEFILE})";
- b="$(getfilevar_noexec VERSION ${KERNEL_MAKEFILE})";
- [[ "${a}" != "${b}" ]] && mkfunc='getfilevar_noexec';
- echo "${mkfunc}"
- }
- get_modname ()
- {
- local modname;
- local ver=$1;
- case ${CHOST} in
- *-darwin*)
- modname="bundle"
- ;;
- *)
- modname="so"
- ;;
- esac;
- echo ".${modname}"
- }
- get_running_version ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- KV_FULL=$(uname -r);
- if [[ -f ${ROOT%/}/lib/modules/${KV_FULL}/source/Makefile && -f ${ROOT%/}/lib/modules/${KV_FULL}/build/Makefile ]]; then
- KERNEL_DIR=$(readlink -f ${ROOT%/}/lib/modules/${KV_FULL}/source);
- KBUILD_OUTPUT=$(readlink -f ${ROOT%/}/lib/modules/${KV_FULL}/build);
- unset KV_FULL;
- get_version;
- return $?;
- else
- if [[ -f ${ROOT%/}/lib/modules/${KV_FULL}/source/Makefile ]]; then
- KERNEL_DIR=$(readlink -f ${ROOT%/}/lib/modules/${KV_FULL}/source);
- unset KV_FULL;
- get_version;
- return $?;
- else
- if [[ -f ${ROOT%/}/lib/modules/${KV_FULL}/build/Makefile ]]; then
- KERNEL_DIR=$(readlink -f ${ROOT%/}/lib/modules/${KV_FULL}/build);
- unset KV_FULL;
- get_version;
- return $?;
- else
- local kv_full=${KV_FULL//[-+_]*};
- KV_MAJOR=$(ver_cut 1 ${kv_full});
- KV_MINOR=$(ver_cut 2 ${kv_full});
- KV_PATCH=$(ver_cut 3 ${kv_full});
- KV_EXTRA="${KV_FULL#${KV_MAJOR}.${KV_MINOR}${KV_PATCH:+.${KV_PATCH}}}";
- : ${KV_PATCH:=0};
- fi;
- fi;
- fi;
- return 0
- }
- get_udevdir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- echo "$(_udev_get_udevdir)"
- }
- get_version ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- local tmplocal;
- [ -n "${KV_FULL}" ] && return 0;
- unset KV_DIR;
- [ -z "${get_version_warning_done}" ] && qeinfo "Determining the location of the kernel source code";
- [ -d "${KERNEL_DIR}" ] && KV_DIR="${KERNEL_DIR}";
- if [ -z "${KV_DIR}" ]; then
- if [ -z "${get_version_warning_done}" ]; then
- get_version_warning_done=1;
- qewarn "Unable to find kernel sources at ${KERNEL_DIR}";
- if [ "${KERNEL_DIR}" == "/usr/src/linux" ]; then
- qeinfo "Please make sure that ${KERNEL_DIR} points at your running kernel, ";
- qeinfo "(or the kernel you wish to build against).";
- qeinfo "Alternatively, set the KERNEL_DIR environment variable to the kernel sources location";
- else
- qeinfo "Please ensure that the KERNEL_DIR environment variable points at full Linux sources of the kernel you wish to compile against.";
- fi;
- fi;
- return 1;
- fi;
- if [ -z "${KBUILD_OUTPUT}" -a -L "${KERNEL_DIR}/source" ]; then
- KBUILD_OUTPUT=${KERNEL_DIR};
- KERNEL_DIR=$(readlink -f "${KERNEL_DIR}/source");
- KV_DIR=${KERNEL_DIR};
- fi;
- if [ -z "${get_version_warning_done}" ]; then
- qeinfo "Found kernel source directory:";
- qeinfo " ${KV_DIR}";
- fi;
- if [ ! -s "${KV_DIR}/Makefile" ]; then
- if [ -z "${get_version_warning_done}" ]; then
- get_version_warning_done=1;
- qeerror "Could not find a Makefile in the kernel source directory.";
- qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources";
- fi;
- return 1;
- fi;
- local OUTPUT_DIR=${KBUILD_OUTPUT};
- KERNEL_MAKEFILE="${KV_DIR}/Makefile";
- if [[ -z ${OUTPUT_DIR} ]]; then
- local mkfunc=$(get_makefile_extract_function "${KERNEL_MAKEFILE}");
- OUTPUT_DIR=$(${mkfunc} KBUILD_OUTPUT "${KERNEL_MAKEFILE}");
- fi;
- KV_MAJOR=$(getfilevar_noexec VERSION "${KERNEL_MAKEFILE}");
- KV_MINOR=$(getfilevar_noexec PATCHLEVEL "${KERNEL_MAKEFILE}");
- KV_PATCH=$(getfilevar_noexec SUBLEVEL "${KERNEL_MAKEFILE}");
- KV_EXTRA=$(getfilevar_noexec EXTRAVERSION "${KERNEL_MAKEFILE}");
- if [ -z "${KV_MAJOR}" -o -z "${KV_MINOR}" -o -z "${KV_PATCH}" ]; then
- if [ -z "${get_version_warning_done}" ]; then
- get_version_warning_done=1;
- qeerror "Could not detect kernel version.";
- qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources.";
- fi;
- return 1;
- fi;
- [ -d "${OUTPUT_DIR}" ] && KV_OUT_DIR="${OUTPUT_DIR}";
- if [ -n "${KV_OUT_DIR}" ]; then
- qeinfo "Found kernel object directory:";
- qeinfo " ${KV_OUT_DIR}";
- fi;
- KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}";
- if [ -s "${KV_OUT_DIR}"/include/config/kernel.release ]; then
- KV_LOCAL=$(<"${KV_OUT_DIR}"/include/config/kernel.release);
- else
- if [ -s "${KV_OUT_DIR}"/.kernelrelease ]; then
- KV_LOCAL=$(<"${KV_OUT_DIR}"/.kernelrelease);
- else
- KV_LOCAL=;
- fi;
- fi;
- tmplocal=${KV_LOCAL#${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}};
- if [ "$KV_LOCAL" = "$tmplocal" ]; then
- KV_LOCAL=;
- else
- KV_LOCAL=$tmplocal;
- fi;
- if [[ -z ${OUTPUT_DIR} ]]; then
- for OUTPUT_DIR in "${SYSROOT}" "${ROOT%/}" "";
- do
- OUTPUT_DIR+="/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}/build";
- if [[ -e ${OUTPUT_DIR} ]]; then
- break;
- fi;
- done;
- fi;
- KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}";
- qeinfo "Found sources for kernel version:";
- qeinfo " ${KV_FULL}";
- return 0
- }
- getfilevar ()
- {
- local ERROR basefname basedname myARCH="${ARCH}" M="${S}";
- ERROR=0;
- [ -z "${1}" ] && ERROR=1;
- [ ! -f "${2}" ] && ERROR=1;
- if [ "${ERROR}" = 1 ]; then
- echo -e "\n";
- eerror "getfilevar requires 2 variables, with the second a valid file.";
- eerror " getfilevar <VARIABLE> <CONFIGFILE>";
- else
- basefname="$(basename ${2})";
- basedname="$(dirname ${2})";
- unset ARCH;
- [[ ${EAPI:-0} == [0123] ]] && function nonfatal ()
- {
- "$@"
- };
- case ${EBUILD_PHASE_FUNC} in
- pkg_info | pkg_nofetch | pkg_pretend)
- M="${T}"
- ;;
- esac;
- echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | nonfatal emake -C "${basedname}" M="${M}" ${BUILD_FIXES} -s -f - 2> /dev/null;
- ARCH=${myARCH};
- fi
- }
- getfilevar_noexec ()
- {
- local ERROR basefname basedname mycat myARCH="${ARCH}";
- ERROR=0;
- mycat='cat';
- [ -z "${1}" ] && ERROR=1;
- [ ! -f "${2}" ] && ERROR=1;
- [ "${2%.gz}" != "${2}" ] && mycat='zcat';
- if [ "${ERROR}" = 1 ]; then
- echo -e "\n";
- eerror "getfilevar_noexec requires 2 variables, with the second a valid file.";
- eerror " getfilevar_noexec <VARIABLE> <CONFIGFILE>";
- else
- ${mycat} "${2}" | sed -n -e "/^[[:space:]]*${1}[[:space:]]*:\\?=[[:space:]]*\(.*\)\$/{
- s,^[^=]*[[:space:]]*=[[:space:]]*,,g ;
- s,[[:space:]]*\$,,g ;
- p
- }";
- fi
- }
- handle_locales ()
- {
- local detected sorted;
- detected=$(echo $(cd po && printf '%s\n' *.po | grep -v messages.po | sed 's:.po$::' | sort -u));
- sorted=$(echo $(printf '%s\n' ${PLOCALES} | sort -u));
- if [[ ${sorted} != "${detected}" ]]; then
- eerror "The ebuild needs to be kept in sync.";
- eerror "PLOCALES: ${sorted}";
- eerror " po/*.po: ${detected}";
- die "sync PLOCALES";
- fi;
- if use nls; then
- function rm_loc ()
- {
- rm po/$1.po || die
- };
- l10n_for_each_disabled_locale_do rm_loc;
- else
- rm -f po/*.po;
- fi
- }
- has_multilib_profile ()
- {
- [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
- }
- host-is-pax ()
- {
- grep -qs ^PaX: /proc/self/status
- }
- in_iuse ()
- {
- local use=${1};
- if [[ -z "${use}" ]]; then
- echo "!!! in_iuse() called without a parameter." 1>&2;
- echo "!!! in_iuse <USEFLAG>" 1>&2;
- die "in_iuse() called without a parameter";
- fi;
- local liuse=(${IUSE_EFFECTIVE});
- has "${use}" "${liuse[@]#[+-]}"
- }
- is_final_abi ()
- {
- has_multilib_profile || return 0;
- set -- $(get_install_abis);
- local LAST_ABI=$#;
- [[ ${!LAST_ABI} == ${ABI} ]]
- }
- kernel_is ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- linux-info_get_any_version;
- local operator test value;
- case ${1#-} in
- lt)
- operator="-lt";
- shift
- ;;
- gt)
- operator="-gt";
- shift
- ;;
- le)
- operator="-le";
- shift
- ;;
- ge)
- operator="-ge";
- shift
- ;;
- eq)
- operator="-eq";
- shift
- ;;
- *)
- operator="-eq"
- ;;
- esac;
- [[ $# -gt 3 ]] && die "Error in kernel-2_kernel_is(): too many parameters";
- : $(( test = (KV_MAJOR << 16) + (KV_MINOR << 8) + KV_PATCH ));
- : $(( value = (${1:-${KV_MAJOR}} << 16) + (${2:-${KV_MINOR}} << 8) + ${3:-${KV_PATCH}} ));
- [ ${test} ${operator} ${value} ]
- }
- l10n_find_plocales_changes ()
- {
- [[ $# -ne 3 ]] && die "Exactly 3 arguments are needed!";
- ebegin "Looking in ${1} for new locales";
- pushd "${1}" > /dev/null || die "Cannot access ${1}";
- local current= x=;
- for x in ${2}*${3};
- do
- x=${x#"${2}"};
- x=${x%"${3}"};
- current+="${x} ";
- done;
- popd > /dev/null;
- if [[ "$(printf '%s\n' ${PLOCALES} | LC_ALL=C sort)" != "$(printf '%s\n' ${current} | LC_ALL=C sort)" ]]; then
- eend 1 "There are changes in locales! This ebuild should be updated to:";
- eerror "PLOCALES=\"${current%[[:space:]]}\"";
- return 1;
- else
- eend 0;
- fi
- }
- l10n_for_each_disabled_locale_do ()
- {
- local locs x;
- locs=$(l10n_get_locales disabled);
- for x in ${locs};
- do
- "${@}" ${x} || die "failed to process disabled ${x} locale";
- done
- }
- l10n_for_each_locale_do ()
- {
- local locs x;
- locs=$(l10n_get_locales);
- for x in ${locs};
- do
- "${@}" ${x} || die "failed to process enabled ${x} locale";
- done
- }
- l10n_get_locales ()
- {
- local loc locs;
- if [[ -z ${LINGUAS+set} ]]; then
- locs=${PLOCALES};
- else
- for loc in ${LINGUAS};
- do
- has ${loc} ${PLOCALES} && locs+="${loc} ";
- done;
- fi;
- [[ -z ${locs} ]] && locs=${PLOCALE_BACKUP};
- if [[ ${1} == disabled ]]; then
- local disabled_locs;
- for loc in ${PLOCALES};
- do
- has ${loc} ${locs} || disabled_locs+="${loc} ";
- done;
- locs=${disabled_locs};
- fi;
- printf "%s" "${locs}"
- }
- linux-info_get_any_version ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- if ! get_version; then
- ewarn "Unable to calculate Linux Kernel version for build, attempting to use running version";
- if ! get_running_version; then
- die "Unable to determine any Linux Kernel version, please report a bug";
- fi;
- fi
- }
- linux-info_pkg_setup ()
- {
- use kernel_linux || return;
- linux-info_get_any_version;
- if kernel_is 2 4; then
- if [ "$( gcc-major-version )" -eq "4" ]; then
- echo;
- ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with";
- ewarn "linux-2.4 (or modules building against a linux-2.4 kernel)!";
- echo;
- ewarn "Either switch to another gcc-version (via gcc-config) or use a";
- ewarn "newer kernel that supports gcc-4.";
- echo;
- ewarn "Also be aware that bugreports about gcc-4 not working";
- ewarn "with linux-2.4 based ebuilds will be closed as INVALID!";
- echo;
- fi;
- fi;
- [ -n "${CONFIG_CHECK}" ] && check_extra_config
- }
- linux_chkconfig_builtin ()
- {
- linux_config_qa_check linux_chkconfig_builtin;
- [[ $(getfilevar_noexec "CONFIG_$1" "$(linux_config_path)") == y ]]
- }
- linux_chkconfig_module ()
- {
- linux_config_qa_check linux_chkconfig_module;
- [[ $(getfilevar_noexec "CONFIG_$1" "$(linux_config_path)") == m ]]
- }
- linux_chkconfig_present ()
- {
- linux_config_qa_check linux_chkconfig_present;
- [[ $(getfilevar_noexec "CONFIG_$1" "$(linux_config_path)") == [my] ]]
- }
- linux_chkconfig_string ()
- {
- linux_config_qa_check linux_chkconfig_string;
- getfilevar_noexec "CONFIG_$1" "$(linux_config_path)"
- }
- linux_config_bin_exists ()
- {
- export _LINUX_CONFIG_EXISTS_DONE=1;
- use kernel_linux && [[ -s /proc/config.gz ]]
- }
- linux_config_exists ()
- {
- linux_config_src_exists || linux_config_bin_exists
- }
- linux_config_path ()
- {
- if linux_config_src_exists; then
- echo "${KV_OUT_DIR}/.config";
- else
- if linux_config_bin_exists; then
- echo "/proc/config.gz";
- else
- return 1;
- fi;
- fi
- }
- linux_config_qa_check ()
- {
- local f="$1";
- if [ -z "${_LINUX_CONFIG_EXISTS_DONE}" ]; then
- ewarn "QA: You called $f before any linux_config_exists!";
- ewarn "QA: The return value of $f will NOT guaranteed later!";
- fi;
- if ! use kernel_linux; then
- die "$f called on non-Linux system, please fix the ebuild";
- fi
- }
- linux_config_src_exists ()
- {
- export _LINUX_CONFIG_EXISTS_DONE=1;
- use kernel_linux && [[ -n ${KV_OUT_DIR} && -s ${KV_OUT_DIR}/.config ]]
- }
- list-paxables ()
- {
- file "$@" 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//'
- }
- make_wrapper ()
- {
- local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
- local tmpwrapper=$(emktemp);
- has "${EAPI:-0}" 0 1 2 && local EPREFIX="";
- ( echo '#!/bin/sh';
- if [[ -n ${libdir} ]]; then
- local var;
- if [[ ${CHOST} == *-darwin* ]]; then
- var=DYLD_LIBRARY_PATH;
- else
- var=LD_LIBRARY_PATH;
- fi;
- cat <<-EOF
- if [ "\${${var}+set}" = "set" ] ; then
- export ${var}="\${${var}}:${EPREFIX}${libdir}"
- else
- export ${var}="${EPREFIX}${libdir}"
- fi
- EOF
- fi
- [[ -n ${chdir} ]] && printf 'cd "%s" &&\n' "${EPREFIX}${chdir}";
- printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
- chmod go+rx "${tmpwrapper}";
- if [[ -n ${path} ]]; then
- ( exeopts -m 0755;
- exeinto "${path}";
- newexe "${tmpwrapper}" "${wrapper}" ) || die;
- else
- newbin "${tmpwrapper}" "${wrapper}" || die;
- fi
- }
- multibuild_copy_sources ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local _MULTIBUILD_INITIAL_BUILD_DIR=${BUILD_DIR:-${S}};
- einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}";
- local cp_args=();
- if cp --reflink=auto --version &> /dev/null; then
- cp_args+=(--reflink=auto);
- fi;
- function _multibuild_create_source_copy ()
- {
- einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}";
- cp -p -R "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die
- };
- multibuild_foreach_variant _multibuild_create_source_copy
- }
- multibuild_for_best_variant ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
- local MULTIBUILD_VARIANTS=("${MULTIBUILD_VARIANTS[$(( ${#MULTIBUILD_VARIANTS[@]} - 1 ))]}");
- multibuild_foreach_variant "${@}"
- }
- multibuild_foreach_variant ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
- local bdir=${BUILD_DIR:-${S}};
- [[ ${bdir%%/} == ${WORKDIR%%/} ]] && bdir=${WORKDIR}/build;
- local prev_id=${MULTIBUILD_ID:+${MULTIBUILD_ID}-};
- local ret=0 lret=0 v;
- debug-print "${FUNCNAME}: initial build_dir = ${bdir}";
- for v in "${MULTIBUILD_VARIANTS[@]}";
- do
- local MULTIBUILD_VARIANT=${v};
- local MULTIBUILD_ID=${prev_id}${v};
- local BUILD_DIR=${bdir%%/}-${v};
- function _multibuild_run ()
- {
- local i=1;
- while [[ ${!i} == _* ]]; do
- (( i += 1 ));
- done;
- [[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}";
- "${@}"
- };
- _multibuild_run "${@}" > >(exec tee -a "${T}/build-${MULTIBUILD_ID}.log") 2>&1;
- lret=${?};
- done;
- [[ ${ret} -eq 0 && ${lret} -ne 0 ]] && ret=${lret};
- return ${ret}
- }
- multibuild_merge_root ()
- {
- local src=${1};
- local dest=${2};
- local ret;
- if use userland_BSD; then
- tar -C "${src}" -f - -c . | tar -x -f - -C "${dest}";
- [[ ${PIPESTATUS[*]} == '0 0' ]];
- ret=${?};
- else
- local cp_args=();
- if cp -a --version &> /dev/null; then
- cp_args+=(-a);
- else
- cp_args+=(-P -R -p);
- fi;
- if cp --reflink=auto --version &> /dev/null; then
- cp_args+=(--reflink=auto);
- fi;
- cp "${cp_args[@]}" "${src}"/. "${dest}"/;
- ret=${?};
- fi;
- if [[ ${ret} -ne 0 ]]; then
- die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed.";
- fi;
- rm -rf "${src}"
- }
- multibuild_parallel_foreach_variant ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}";
- multibuild_foreach_variant "${@}"
- }
- multilib_env ()
- {
- local CTARGET=${1:-${CTARGET}};
- local cpu=${CTARGET%%*-};
- case ${cpu} in
- aarch64*)
- export CFLAGS_arm=${CFLAGS_arm-};
- case ${cpu} in
- aarch64*be)
- export CHOST_arm="armv8b-${CTARGET#*-}"
- ;;
- *)
- export CHOST_arm="armv8l-${CTARGET#*-}"
- ;;
- esac;
- CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
- export CTARGET_arm=${CHOST_arm};
- export LIBDIR_arm="lib";
- export CFLAGS_arm64=${CFLAGS_arm64-};
- export CHOST_arm64=${CTARGET};
- export CTARGET_arm64=${CHOST_arm64};
- export LIBDIR_arm64="lib64";
- : ${MULTILIB_ABIS=arm64};
- : ${DEFAULT_ABI=arm64}
- ;;
- x86_64*)
- export CFLAGS_x86=${CFLAGS_x86--m32};
- export CHOST_x86=${CTARGET/x86_64/i686};
- CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
- export CTARGET_x86=${CHOST_x86};
- if [[ ${SYMLINK_LIB} == "yes" ]]; then
- export LIBDIR_x86="lib32";
- else
- export LIBDIR_x86="lib";
- fi;
- export CFLAGS_amd64=${CFLAGS_amd64--m64};
- export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
- export CTARGET_amd64=${CHOST_amd64};
- export LIBDIR_amd64="lib64";
- export CFLAGS_x32=${CFLAGS_x32--mx32};
- export CHOST_x32=${CTARGET/%-gnu/-gnux32};
- export CTARGET_x32=${CHOST_x32};
- export LIBDIR_x32="libx32";
- case ${CTARGET} in
- *-gnux32)
- : ${MULTILIB_ABIS=x32 amd64 x86};
- : ${DEFAULT_ABI=x32}
- ;;
- *)
- : ${MULTILIB_ABIS=amd64 x86};
- : ${DEFAULT_ABI=amd64}
- ;;
- esac
- ;;
- mips64* | mipsisa64*)
- export CFLAGS_o32=${CFLAGS_o32--mabi=32};
- export CHOST_o32=${CTARGET/mips64/mips};
- export CHOST_o32=${CHOST_o32/mipsisa64/mipsisa32};
- export CTARGET_o32=${CHOST_o32};
- export LIBDIR_o32="lib";
- export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
- export CHOST_n32=${CTARGET};
- export CTARGET_n32=${CHOST_n32};
- export LIBDIR_n32="lib32";
- export CFLAGS_n64=${CFLAGS_n64--mabi=64};
- export CHOST_n64=${CTARGET};
- export CTARGET_n64=${CHOST_n64};
- export LIBDIR_n64="lib64";
- : ${MULTILIB_ABIS=n64 n32 o32};
- : ${DEFAULT_ABI=n32}
- ;;
- powerpc64*)
- export CFLAGS_ppc=${CFLAGS_ppc--m32};
- export CHOST_ppc=${CTARGET/powerpc64/powerpc};
- export CTARGET_ppc=${CHOST_ppc};
- export LIBDIR_ppc="lib";
- export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
- export CHOST_ppc64=${CTARGET};
- export CTARGET_ppc64=${CHOST_ppc64};
- export LIBDIR_ppc64="lib64";
- : ${MULTILIB_ABIS=ppc64 ppc};
- : ${DEFAULT_ABI=ppc64}
- ;;
- riscv64*)
- export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d};
- export CHOST_lp64d=${CTARGET};
- export CTARGET_lp64d=${CTARGET};
- export LIBDIR_lp64d="lib64/lp64d";
- export CFLAGS_lp64=${CFLAGS_lp64--mabi=lp64};
- export CHOST_lp64=${CTARGET};
- export CTARGET_lp64=${CTARGET};
- export LIBDIR_lp64="lib64/lp64";
- : ${MULTILIB_ABIS=lp64d lp64};
- : ${DEFAULT_ABI=lp64d}
- ;;
- s390x*)
- export CFLAGS_s390=${CFLAGS_s390--m31};
- export CHOST_s390=${CTARGET/s390x/s390};
- export CTARGET_s390=${CHOST_s390};
- export LIBDIR_s390="lib";
- export CFLAGS_s390x=${CFLAGS_s390x--m64};
- export CHOST_s390x=${CTARGET};
- export CTARGET_s390x=${CHOST_s390x};
- export LIBDIR_s390x="lib64";
- : ${MULTILIB_ABIS=s390x s390};
- : ${DEFAULT_ABI=s390x}
- ;;
- sparc64*)
- export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
- export CHOST_sparc32=${CTARGET/sparc64/sparc};
- export CTARGET_sparc32=${CHOST_sparc32};
- export LIBDIR_sparc32="lib";
- export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
- export CHOST_sparc64=${CTARGET};
- export CTARGET_sparc64=${CHOST_sparc64};
- export LIBDIR_sparc64="lib64";
- : ${MULTILIB_ABIS=sparc64 sparc32};
- : ${DEFAULT_ABI=sparc64}
- ;;
- *)
- : ${MULTILIB_ABIS=default};
- : ${DEFAULT_ABI=default}
- ;;
- esac;
- export MULTILIB_ABIS DEFAULT_ABI
- }
- multilib_toolchain_setup ()
- {
- local v vv;
- export ABI=$1;
- if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
- for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
- do
- vv="_abi_saved_${v}";
- [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
- unset ${vv};
- done;
- unset _DEFAULT_ABI_SAVED;
- fi;
- if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
- for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
- do
- vv="_abi_saved_${v}";
- [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
- done;
- export _DEFAULT_ABI_SAVED="true";
- if [[ ${CBUILD} == "${CHOST}" ]]; then
- export CBUILD=$(get_abi_CHOST $1);
- fi;
- export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
- export CC="$(tc-getCC) $(get_abi_CFLAGS)";
- export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
- export F77="$(tc-getF77) $(get_abi_CFLAGS)";
- export FC="$(tc-getFC) $(get_abi_CFLAGS)";
- export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
- export CHOST=$(get_abi_CHOST $1);
- export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
- export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
- fi
- }
- number_abis ()
- {
- set -- `get_install_abis`;
- echo $#
- }
- optfeature ()
- {
- debug-print-function ${FUNCNAME} "$@";
- local i j msg;
- local desc=$1;
- local flag=0;
- shift;
- for i in "$@";
- do
- for j in ${i};
- do
- if has_version "${j}"; then
- flag=1;
- else
- flag=0;
- break;
- fi;
- done;
- if [[ ${flag} -eq 1 ]]; then
- break;
- fi;
- done;
- if [[ ${flag} -eq 0 ]]; then
- for i in "$@";
- do
- msg=" ";
- for j in ${i};
- do
- msg+=" ${j} and";
- done;
- msg="${msg:0: -4} for ${desc}";
- elog "${msg}";
- done;
- fi
- }
- path_exists ()
- {
- eerror "path_exists has been removed. Please see the following post";
- eerror "for a replacement snippet:";
- eerror "https://blogs.gentoo.org/mgorny/2018/08/09/inlining-path_exists/";
- die "path_exists is banned"
- }
- pax-mark ()
- {
- local f;
- local flags;
- local ret=0;
- flags="${1//[!zPpEeMmRrSs]}";
- [[ -n "${flags}" ]] || return 0;
- shift;
- local dodefault="";
- [[ -n "${flags//[!z]}" ]] && dodefault="yes";
- if has PT ${PAX_MARKINGS}; then
- for f in "$@";
- do
- if type -p paxctl > /dev/null; then
- einfo "PT_PAX marking -${flags} ${f} with paxctl";
- paxctl -q${flags} "${f}" > /dev/null 2>&1 && continue;
- fi;
- if type -p paxctl-ng > /dev/null && paxctl-ng -L; then
- einfo "PT_PAX marking -${flags} ${f} with paxctl-ng";
- flags="${flags//z}";
- [[ ${dodefault} == "yes" ]] && paxctl-ng -L -z "${f}" > /dev/null 2>&1;
- [[ -n "${flags}" ]] || continue;
- paxctl-ng -L -${flags} "${f}" > /dev/null 2>&1 && continue;
- fi;
- if type -p scanelf > /dev/null && [[ ${PAX_MARKINGS} != "none" ]]; then
- einfo "PT_PAX marking -${flags} ${f} with scanelf";
- scanelf -Xxz ${flags} "$f" > /dev/null 2>&1;
- else
- if [[ ${PAX_MARKINGS} != "none" ]]; then
- elog "Failed to set PT_PAX markings -${flags} ${f}.";
- ret=1;
- fi;
- fi;
- done;
- fi;
- if has XT ${PAX_MARKINGS}; then
- flags="${flags//z}";
- for f in "$@";
- do
- if type -p paxctl-ng > /dev/null && paxctl-ng -l; then
- einfo "XATTR_PAX marking -${flags} ${f} with paxctl-ng";
- [[ ${dodefault} == "yes" ]] && paxctl-ng -d "${f}" > /dev/null 2>&1;
- [[ -n "${flags}" ]] || continue;
- paxctl-ng -l -${flags} "${f}" > /dev/null 2>&1 && continue;
- fi;
- if type -p setfattr > /dev/null; then
- [[ -n "${flags//[!Ee]}" ]] || flags+="e";
- einfo "XATTR_PAX marking -${flags} ${f} with setfattr";
- [[ ${dodefault} == "yes" ]] && setfattr -x "user.pax.flags" "${f}" > /dev/null 2>&1;
- setfattr -n "user.pax.flags" -v "${flags}" "${f}" > /dev/null 2>&1 && continue;
- fi;
- if [[ ${PAX_MARKINGS} != "none" ]]; then
- elog "Failed to set XATTR_PAX markings -${flags} ${f}.";
- ret=1;
- fi;
- done;
- fi;
- return ${ret}
- }
- pkg_info ()
- {
- echo "Using:";
- echo " $(best_version app-emulation/spice-protocol)";
- echo " $(best_version sys-firmware/edk2-ovmf)";
- if has_version 'sys-firmware/edk2-ovmf[binary]'; then
- echo " USE=binary";
- else
- echo " USE=''";
- fi;
- echo " $(best_version sys-firmware/ipxe)";
- echo " $(best_version sys-firmware/seabios)";
- if has_version 'sys-firmware/seabios[binary]'; then
- echo " USE=binary";
- else
- echo " USE=''";
- fi;
- echo " $(best_version sys-firmware/sgabios)"
- }
- pkg_nofetch ()
- {
- default
- }
- pkg_postinst ()
- {
- if [[ -n ${softmmu_targets} ]] && use kernel_linux; then
- udev_reload;
- fi;
- xdg_icon_cache_update;
- [[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && fcaps cap_net_admin ${EROOT}/usr/libexec/qemu-bridge-helper;
- DISABLE_AUTOFORMATTING=true;
- readme.gentoo_print_elog;
- if use pin-upstream-blobs && firmware_abi_change; then
- ewarn "This version of qemu pins new versions of firmware blobs:";
- ewarn " $(best_version sys-firmware/edk2-ovmf)";
- ewarn " $(best_version sys-firmware/ipxe)";
- ewarn " $(best_version sys-firmware/seabios)";
- ewarn " $(best_version sys-firmware/sgabios)";
- ewarn "This might break resume of hibernated guests (started with a different";
- ewarn "firmware version) and live migration to/from qemu versions with different";
- ewarn "firmware. Please (cold) restart all running guests. For functional";
- ewarn "guest migration ensure that all";
- ewarn "hosts run at least";
- ewarn " app-emulation/qemu-${FIRMWARE_ABI_VERSION}.";
- fi
- }
- pkg_postrm ()
- {
- xdg_icon_cache_update
- }
- pkg_pretend ()
- {
- if use kernel_linux && kernel_is lt 2 6 25; then
- eerror "This version of KVM requres a host kernel of 2.6.25 or higher.";
- else
- if use kernel_linux; then
- if ! linux_config_exists; then
- eerror "Unable to check your kernel for KVM support";
- else
- CONFIG_CHECK="~KVM ~TUN ~BRIDGE";
- ERROR_KVM="You must enable KVM in your kernel to continue";
- ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in";
- ERROR_KVM_AMD+=" your kernel configuration.";
- ERROR_KVM_INTEL="If you have an Intel CPU, you must enable";
- ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration.";
- ERROR_TUN="You will need the Universal TUN/TAP driver compiled";
- ERROR_TUN+=" into your kernel or loaded as a module to use the";
- ERROR_TUN+=" virtual network device if using -net tap.";
- ERROR_BRIDGE="You will also need support for 802.1d";
- ERROR_BRIDGE+=" Ethernet Bridging for some network configurations.";
- use vhost-net && CONFIG_CHECK+=" ~VHOST_NET";
- ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net";
- ERROR_VHOST_NET+=" support";
- if use amd64 || use x86 || use amd64-linux || use x86-linux; then
- if grep -q AuthenticAMD /proc/cpuinfo; then
- CONFIG_CHECK+=" ~KVM_AMD";
- else
- if grep -q GenuineIntel /proc/cpuinfo; then
- CONFIG_CHECK+=" ~KVM_INTEL";
- fi;
- fi;
- fi;
- use python && CONFIG_CHECK+=" ~DEBUG_FS";
- ERROR_DEBUG_FS="debugFS support required for kvm_stat";
- check_extra_config;
- fi;
- fi;
- fi;
- if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then
- eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt";
- eerror "instances are still pointing to it. Please update your";
- eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag";
- eerror "and the right system binary (e.g. qemu-system-x86_64).";
- die "update your virt configs to not use qemu-kvm";
- fi
- }
- pkg_setup ()
- {
- linux-info_pkg_setup "$@"
- }
- python_abi_depend ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_byte-compile_modules ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_clean_byte-compiled_modules ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_clean_installation_image ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_clean_py-compile_files ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_convert_shebangs ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_convert_shebangs"
- }
- python_copy_sources ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local MULTIBUILD_VARIANTS;
- _python_obtain_impls;
- multibuild_copy_sources
- }
- python_disable_pyc ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_doexe ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local f;
- for f in "$@";
- do
- python_newexe "${f}" "${f##*/}";
- done
- }
- python_doheader ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- if [[ ${EAPI:-0} == [0123] ]]; then
- die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
- fi;
- local d PYTHON_INCLUDEDIR=${PYTHON_INCLUDEDIR};
- [[ -n ${PYTHON_INCLUDEDIR} ]] || python_export PYTHON_INCLUDEDIR;
- d=${PYTHON_INCLUDEDIR#${EPREFIX}};
- ( insopts -m 0644;
- insinto "${d}";
- doins -r "${@}" || return ${?} )
- }
- python_domodule ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- if [[ ${EAPI:-0} == [0123] ]]; then
- die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
- fi;
- local d;
- if [[ ${python_moduleroot} == /* ]]; then
- d=${python_moduleroot};
- else
- local PYTHON_SITEDIR=${PYTHON_SITEDIR};
- [[ -n ${PYTHON_SITEDIR} ]] || python_export PYTHON_SITEDIR;
- d=${PYTHON_SITEDIR#${EPREFIX}}/${python_moduleroot//.//};
- fi;
- ( insopts -m 0644;
- insinto "${d}";
- doins -r "${@}" || return ${?} );
- python_optimize "${ED%/}/${d}"
- }
- python_doscript ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local _PYTHON_REWRITE_SHEBANG=1;
- python_doexe "${@}"
- }
- python_enable_pyc ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_execute_function ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_execute_function"
- }
- python_execute_nosetests ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_execute_py.test ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_execute_trial ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_export ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl var;
- case "${1}" in
- python* | jython*)
- impl=${1/_/.};
- shift
- ;;
- pypy | pypy3)
- impl=${1};
- shift
- ;;
- *)
- impl=${EPYTHON};
- if [[ -z ${impl} ]]; then
- die "python_export called without a python implementation and EPYTHON is unset";
- fi
- ;;
- esac;
- debug-print "${FUNCNAME}: implementation: ${impl}";
- for var in "$@";
- do
- case "${var}" in
- EPYTHON)
- export EPYTHON=${impl};
- debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
- ;;
- PYTHON)
- export PYTHON=${EPREFIX}/usr/bin/${impl};
- debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
- ;;
- PYTHON_SITEDIR)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- PYTHON_SITEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_lib())') || die;
- export PYTHON_SITEDIR;
- debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
- ;;
- PYTHON_INCLUDEDIR)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- PYTHON_INCLUDEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_inc())') || die;
- export PYTHON_INCLUDEDIR;
- debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}";
- if [[ ! -d ${PYTHON_INCLUDEDIR} ]]; then
- die "${impl} does not install any header files!";
- fi
- ;;
- PYTHON_LIBPATH)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- PYTHON_LIBPATH=$("${PYTHON}" -c 'import os.path, sysconfig; print(os.path.join(sysconfig.get_config_var("LIBDIR"), sysconfig.get_config_var("LDLIBRARY")) if sysconfig.get_config_var("LDLIBRARY") else "")') || die;
- export PYTHON_LIBPATH;
- debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}";
- if [[ ! -n ${PYTHON_LIBPATH} ]]; then
- die "${impl} lacks a (usable) dynamic library";
- fi
- ;;
- PYTHON_CFLAGS)
- local val;
- case "${impl}" in
- python*)
- val=$($(tc-getPKG_CONFIG) --cflags ${impl/n/n-}) || die
- ;;
- *)
- die "${impl}: obtaining ${var} not supported"
- ;;
- esac;
- export PYTHON_CFLAGS=${val};
- debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}"
- ;;
- PYTHON_LIBS)
- local val;
- case "${impl}" in
- python*)
- val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}) || die
- ;;
- *)
- die "${impl}: obtaining ${var} not supported"
- ;;
- esac;
- export PYTHON_LIBS=${val};
- debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}"
- ;;
- PYTHON_CONFIG)
- local flags val;
- case "${impl}" in
- python*)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- flags=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_config_var("ABIFLAGS") or "")') || die;
- val=${PYTHON}${flags}-config
- ;;
- *)
- die "${impl}: obtaining ${var} not supported"
- ;;
- esac;
- export PYTHON_CONFIG=${val};
- debug-print "${FUNCNAME}: PYTHON_CONFIG = ${PYTHON_CONFIG}"
- ;;
- PYTHON_PKG_DEP)
- local d;
- case ${impl} in
- python2.7)
- PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7'
- ;;
- python3.3)
- PYTHON_PKG_DEP='>=dev-lang/python-3.3.2-r2:3.3'
- ;;
- python*)
- PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
- ;;
- pypy)
- PYTHON_PKG_DEP='>=virtual/pypy-5:0='
- ;;
- pypy3)
- PYTHON_PKG_DEP='>=virtual/pypy3-5:0='
- ;;
- jython2.7)
- PYTHON_PKG_DEP='dev-java/jython:2.7'
- ;;
- *)
- die "Invalid implementation: ${impl}"
- ;;
- esac;
- if [[ -n ${PYTHON_REQ_USE} ]]; then
- PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}];
- fi;
- export PYTHON_PKG_DEP;
- debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}"
- ;;
- PYTHON_SCRIPTDIR)
- local dir;
- export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl};
- debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}"
- ;;
- *)
- die "python_export: unknown variable ${var}"
- ;;
- esac;
- done
- }
- python_export_best ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}";
- eqawarn "python_export_best() is deprecated. Please use python_setup instead,";
- eqawarn "combined with python_export if necessary.";
- [[ ${#} -gt 0 ]] || set -- EPYTHON PYTHON;
- local best MULTIBUILD_VARIANTS;
- _python_obtain_impls;
- function _python_set_best ()
- {
- best=${MULTIBUILD_VARIANT}
- };
- multibuild_for_best_variant _python_set_best;
- unset -f _python_set_best;
- debug-print "${FUNCNAME}: Best implementation is: ${best}";
- python_export "${best}" "${@}";
- python_wrapper_setup
- }
- python_export_utf8_locale ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- type locale > /dev/null || return 0;
- if [[ $(locale charmap) != UTF-8 ]]; then
- local lang locales="C.UTF-8 en_US.UTF-8 en_GB.UTF-8 $(locale -a)";
- for lang in ${locales};
- do
- if [[ $(LC_ALL=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then
- if _python_check_locale_sanity "${lang}"; then
- export LC_CTYPE=${lang};
- if [[ -n ${LC_ALL} ]]; then
- export LC_NUMERIC=${LC_ALL};
- export LC_TIME=${LC_ALL};
- export LC_COLLATE=${LC_ALL};
- export LC_MONETARY=${LC_ALL};
- export LC_MESSAGES=${LC_ALL};
- export LC_PAPER=${LC_ALL};
- export LC_NAME=${LC_ALL};
- export LC_ADDRESS=${LC_ALL};
- export LC_TELEPHONE=${LC_ALL};
- export LC_MEASUREMENT=${LC_ALL};
- export LC_IDENTIFICATION=${LC_ALL};
- export LC_ALL=;
- fi;
- return 0;
- fi;
- fi;
- done;
- ewarn "Could not find a UTF-8 locale. This may trigger build failures in";
- ewarn "some python packages. Please ensure that a UTF-8 locale is listed in";
- ewarn "/etc/locale.gen and run locale-gen.";
- return 1;
- fi;
- return 0
- }
- python_fix_shebang ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)";
- local force quiet;
- while [[ -n ${@} ]]; do
- case "${1}" in
- -f | --force)
- force=1;
- shift
- ;;
- -q | --quiet)
- quiet=1;
- shift
- ;;
- --)
- shift;
- break
- ;;
- *)
- break
- ;;
- esac;
- done;
- [[ -n ${1} ]] || die "${FUNCNAME}: no paths given";
- local path f;
- for path in "$@";
- do
- local any_correct any_fixed is_recursive;
- [[ -d ${path} ]] && is_recursive=1;
- while IFS= read -r -d '' f; do
- local shebang i;
- local error= from=;
- IFS= read -r shebang < "${f}";
- if [[ ${shebang} == '#!'* ]]; then
- local split_shebang=();
- read -r -a split_shebang <<< ${shebang} || die;
- for i in "${split_shebang[@]}";
- do
- case "${i}" in
- *"${EPYTHON}")
- debug-print "${FUNCNAME}: in file ${f#${D%/}}";
- debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}";
- any_correct=1;
- from=${EPYTHON};
- break
- ;;
- *python | *python[23])
- debug-print "${FUNCNAME}: in file ${f#${D%/}}";
- debug-print "${FUNCNAME}: rewriting shebang: ${shebang}";
- if [[ ${i} == *python2 ]]; then
- from=python2;
- if [[ ! -n ${force} ]]; then
- python_is_python3 "${EPYTHON}" && error=1;
- fi;
- else
- if [[ ${i} == *python3 ]]; then
- from=python3;
- if [[ ! -n ${force} ]]; then
- python_is_python3 "${EPYTHON}" || error=1;
- fi;
- else
- from=python;
- fi;
- fi;
- break
- ;;
- *python[23].[0123456789] | *pypy | *pypy3 | *jython[23].[0123456789])
- if [[ ! -n ${force} ]]; then
- error=1;
- else
- case "${i}" in
- *python[23].[0123456789])
- from="python[23].[0123456789]"
- ;;
- *pypy)
- from="pypy"
- ;;
- *pypy3)
- from="pypy3"
- ;;
- *jython[23].[0123456789])
- from="jython[23].[0123456789]"
- ;;
- *)
- die "${FUNCNAME}: internal error in 2nd pattern match"
- ;;
- esac;
- fi;
- break
- ;;
- esac;
- done;
- fi;
- if [[ ! -n ${error} && ! -n ${from} ]]; then
- [[ -n ${is_recursive} ]] && continue;
- error=1;
- fi;
- if [[ ! -n ${quiet} ]]; then
- einfo "Fixing shebang in ${f#${D%/}}.";
- fi;
- if [[ ! -n ${error} ]]; then
- if [[ ${shebang} == *${from}" "* ]]; then
- sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die;
- else
- sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die;
- fi;
- any_fixed=1;
- else
- eerror "The file has incompatible shebang:";
- eerror " file: ${f#${D%/}}";
- eerror " current shebang: ${shebang}";
- eerror " requested impl: ${EPYTHON}";
- die "${FUNCNAME}: conversion of incompatible shebang requested";
- fi;
- done < <(find -H "${path}" -type f -print0 || die);
- if [[ ! -n ${any_fixed} ]]; then
- local cmd=eerror;
- [[ ${EAPI:-0} == [012345] ]] && cmd=eqawarn;
- "${cmd}" "QA warning: ${FUNCNAME}, ${path#${D%/}} did not match any fixable files.";
- if [[ -n ${any_correct} ]]; then
- "${cmd}" "All files have ${EPYTHON} shebang already.";
- else
- "${cmd}" "There are no Python files in specified directory.";
- fi;
- [[ ${cmd} == eerror ]] && die "${FUNCNAME} did not match any fixable files (QA warning fatal in EAPI ${EAPI})";
- fi;
- done
- }
- python_foreach_impl ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local MULTIBUILD_VARIANTS;
- _python_obtain_impls;
- multibuild_foreach_variant _python_multibuild_wrapper "${@}"
- }
- python_gen_any_dep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local depstr=${1};
- [[ -n ${depstr} ]] || die "No dependency string provided";
- shift;
- local i PYTHON_PKG_DEP out=;
- for i in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${i}" "${@-*}"; then
- local PYTHON_USEDEP="python_targets_${i}(-),python_single_target_${i}(+)";
- python_export "${i}" PYTHON_PKG_DEP;
- local i_depstr=${depstr//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}};
- out="( ${PYTHON_PKG_DEP%=} ${i_depstr} ) ${out}";
- fi;
- done;
- echo "|| ( ${out})"
- }
- python_gen_cond_dep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- local dep=${1};
- shift;
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${@}"; then
- if [[ ${dep} == *'${PYTHON_USEDEP}'* ]]; then
- local usedep=$(python_gen_usedep "${@}");
- dep=${dep//\$\{PYTHON_USEDEP\}/${usedep}};
- fi;
- matches+=("python_targets_${impl}? ( ${dep} )");
- fi;
- done;
- echo "${matches[@]}"
- }
- python_gen_impl_dep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- local PYTHON_REQ_USE=${1};
- shift;
- local patterns=("${@-*}");
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${patterns[@]}"; then
- local PYTHON_PKG_DEP;
- python_export "${impl}" PYTHON_PKG_DEP;
- matches+=("python_targets_${impl}? ( ${PYTHON_PKG_DEP} )");
- fi;
- done;
- echo "${matches[@]}"
- }
- python_gen_usedep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${@}"; then
- matches+=("python_targets_${impl}(-)?" "-python_single_target_${impl}(-)");
- fi;
- done;
- [[ -n ${matches[@]} ]] || die "No supported implementations match python_gen_usedep patterns: ${@}";
- local out=${matches[@]};
- echo "${out// /,}"
- }
- python_gen_useflags ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${@}"; then
- matches+=("python_targets_${impl}");
- fi;
- done;
- echo "${matches[@]}"
- }
- python_generate_cffi_modules ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_generate_wrapper_scripts ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_CFLAGS ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_CFLAGS;
- echo "${PYTHON_CFLAGS}"
- }
- python_get_LIBS ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_LIBS;
- echo "${PYTHON_LIBS}"
- }
- python_get_PYTHON_CONFIG ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_CONFIG;
- echo "${PYTHON_CONFIG}"
- }
- python_get_extension_module_suffix ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_implementation ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_implementation_and_version ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_implementational_package ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_includedir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_INCLUDEDIR;
- echo "${PYTHON_INCLUDEDIR}"
- }
- python_get_libdir ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_library ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_library_path ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_LIBPATH;
- echo "${PYTHON_LIBPATH}"
- }
- python_get_scriptdir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_SCRIPTDIR;
- echo "${PYTHON_SCRIPTDIR}"
- }
- python_get_sitedir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_SITEDIR;
- echo "${PYTHON_SITEDIR}"
- }
- python_get_version ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_install_executables ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_is_installed ()
- {
- local impl=${1:-${EPYTHON}};
- [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON";
- local hasv_args=();
- case ${EAPI:-0} in
- 0 | 1 | 2 | 3 | 4)
- local -x ROOT=/
- ;;
- 5 | 6)
- hasv_args+=(--host-root)
- ;;
- *)
- hasv_args+=(-b)
- ;;
- esac;
- case "${impl}" in
- pypy | pypy3)
- local append=;
- if [[ -n ${PYTHON_REQ_USE} ]]; then
- append=[${PYTHON_REQ_USE}];
- fi;
- has_version "${hasv_args[@]}" "dev-python/${impl}${append}" || has_version "${hasv_args[@]}" "dev-python/${impl}-bin${append}"
- ;;
- *)
- local PYTHON_PKG_DEP;
- python_export "${impl}" PYTHON_PKG_DEP;
- has_version "${hasv_args[@]}" "${PYTHON_PKG_DEP}"
- ;;
- esac
- }
- python_is_python3 ()
- {
- local impl=${1:-${EPYTHON}};
- [[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON";
- [[ ${impl} == python3* || ${impl} == pypy3 ]]
- }
- python_merge_intermediate_installation_images ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_mod_cleanup ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
- }
- python_mod_optimize ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
- }
- python_moduleinto ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_moduleroot=${1}
- }
- python_need_rebuild ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_newexe ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- [[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} <path> <new-name>";
- if [[ ${EAPI:-0} == [0123] ]]; then
- die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
- fi;
- local wrapd=${python_scriptroot:-/usr/bin};
- local f=${1};
- local newfn=${2};
- local PYTHON_SCRIPTDIR d;
- python_export PYTHON_SCRIPTDIR;
- d=${PYTHON_SCRIPTDIR#${EPREFIX}};
- ( dodir "${wrapd}";
- exeopts -m 0755;
- exeinto "${d}";
- newexe "${f}" "${newfn}" || return ${?} );
- _python_ln_rel "${ED%/}"/usr/lib/python-exec/python-exec2 "${ED%/}/${wrapd}/${newfn}" || die;
- if [[ -n ${_PYTHON_REWRITE_SHEBANG} ]]; then
- python_fix_shebang -q "${ED%/}/${d}/${newfn}";
- fi
- }
- python_newscript ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local _PYTHON_REWRITE_SHEBANG=1;
- python_newexe "${@}"
- }
- python_optimize ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then
- eerror "The new Python eclasses expect the compiled Python files to";
- eerror "be controlled by the Package Manager. For this reason,";
- eerror "the python_optimize function can be used only during src_* phases";
- eerror "(src_install most commonly) and not during pkg_* phases.";
- echo;
- die "python_optimize is not to be used in pre/post* phases";
- fi;
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- local PYTHON=${PYTHON};
- [[ -n ${PYTHON} ]] || python_export PYTHON;
- if [[ ${#} -eq 0 ]]; then
- local f;
- while IFS= read -r -d '' f; do
- if [[ ${f} == /* && -d ${D%/}${f} ]]; then
- set -- "${D%/}${f}" "${@}";
- fi;
- done < <("${PYTHON}" -c 'import sys; print("".join(x + "\0" for x in sys.path))' || die);
- debug-print "${FUNCNAME}: using sys.path: ${*/%/;}";
- fi;
- local d;
- for d in "$@";
- do
- local instpath=${d#${D%/}};
- instpath=/${instpath##/};
- case "${EPYTHON}" in
- python2.7 | python3.[34])
- "${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
- "${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
- ;;
- python* | pypy3)
- "${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
- "${PYTHON}" -O -m compileall -q -f -d "${instpath}" "${d}";
- "${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
- ;;
- *)
- "${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
- ;;
- esac;
- done
- }
- python_pkg_setup ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
- }
- python_replicate_script ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- function _python_replicate_script ()
- {
- local _PYTHON_FIX_SHEBANG_QUIET=1;
- local PYTHON_SCRIPTDIR;
- python_export PYTHON_SCRIPTDIR;
- ( exeopts -m 0755;
- exeinto "${PYTHON_SCRIPTDIR#${EPREFIX}}";
- doexe "${files[@]}" );
- python_fix_shebang -q "${files[@]/*\//${D%/}/${PYTHON_SCRIPTDIR}/}"
- };
- local files=("${@}");
- python_foreach_impl _python_replicate_script;
- unset -f _python_replicate_script;
- local f;
- for f in "$@";
- do
- _python_ln_rel "${ED%/}/usr/lib/python-exec/python-exec2" "${f}" || die;
- done
- }
- python_scriptinto ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_scriptroot=${1}
- }
- python_set_active_version ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
- }
- python_setup ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- _python_validate_useflags;
- local pycompat=("${PYTHON_COMPAT[@]}");
- if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
- pycompat=(${PYTHON_COMPAT_OVERRIDE});
- fi;
- local has_check_deps;
- declare -f python_check_deps > /dev/null && has_check_deps=1;
- local found;
- for ((i = ${#_PYTHON_SUPPORTED_IMPLS[@]} - 1; i >= 0; i-- ))
- do
- local impl=${_PYTHON_SUPPORTED_IMPLS[i]};
- has "${impl}" "${pycompat[@]}" || continue;
- if [[ ! -n ${PYTHON_COMPAT_OVERRIDE} && ! -n ${has_check_deps} ]]; then
- use "python_targets_${impl}" || continue;
- fi;
- _python_impl_matches "${impl}" "${@-*}" || continue;
- python_export "${impl}" EPYTHON PYTHON;
- if [[ -n ${has_check_deps} ]]; then
- python_is_installed "${impl}" || continue;
- local PYTHON_USEDEP="python_targets_${impl}(-),python_single_target_${impl}(+)";
- python_check_deps || continue;
- fi;
- found=1;
- break;
- done;
- if [[ ! -n ${found} ]]; then
- eerror "${FUNCNAME}: none of the enabled implementation matched the patterns.";
- eerror " patterns: ${@-'(*)'}";
- eerror "Likely a REQUIRED_USE constraint (possibly USE-conditional) is missing.";
- eerror " suggested: || ( \$(python_gen_useflags ${@}) )";
- eerror "(remember to quote all the patterns with '')";
- die "${FUNCNAME}: no enabled implementation satisfy requirements";
- fi;
- python_wrapper_setup
- }
- python_wrapper_setup ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local workdir=${1:-${T}/${EPYTHON}};
- local impl=${2:-${EPYTHON}};
- [[ -n ${workdir} ]] || die "${FUNCNAME}: no workdir specified.";
- [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified.";
- if [[ ! -x ${workdir}/bin/python ]]; then
- _python_check_dead_variables;
- mkdir -p "${workdir}"/{bin,pkgconfig} || die;
- rm -f "${workdir}"/bin/python{,2,3}{,-config} || die;
- rm -f "${workdir}"/bin/2to3 || die;
- rm -f "${workdir}"/pkgconfig/python{,2,3}.pc || die;
- local EPYTHON PYTHON;
- python_export "${impl}" EPYTHON PYTHON;
- local pyver pyother;
- if python_is_python3; then
- pyver=3;
- pyother=2;
- else
- pyver=2;
- pyother=3;
- fi;
- cat > "${workdir}/bin/python" <<-_EOF_ ||
- #!/bin/sh
- exec "${PYTHON}" "\${@}"
- _EOF_
- die
- cp "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die;
- chmod +x "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die;
- local nonsupp=("python${pyother}" "python${pyother}-config");
- if [[ ${EPYTHON} == python* ]]; then
- cat > "${workdir}/bin/python-config" <<-_EOF_ ||
- #!/bin/sh
- exec "${PYTHON}-config" "\${@}"
- _EOF_
- die
- cp "${workdir}/bin/python-config" "${workdir}/bin/python${pyver}-config" || die;
- chmod +x "${workdir}/bin/python-config" "${workdir}/bin/python${pyver}-config" || die;
- ln -s "${PYTHON/python/2to3-}" "${workdir}"/bin/2to3 || die;
- ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}.pc "${workdir}"/pkgconfig/python.pc || die;
- ln -s python.pc "${workdir}"/pkgconfig/python${pyver}.pc || die;
- else
- nonsupp+=(2to3 python-config "python${pyver}-config");
- fi;
- local x;
- for x in "${nonsupp[@]}";
- do
- cat > "${workdir}"/bin/${x} <<-_EOF_ ||
- #!/bin/sh
- echo "${ECLASS}: ${FUNCNAME}: ${x} is not supported by ${EPYTHON} (PYTHON_COMPAT)" >&2
- exit 127
- _EOF_
- die
- chmod +x "${workdir}"/bin/${x} || die;
- done;
- fi;
- if [[ ${PATH##:*} != ${workdir}/bin ]]; then
- PATH=${workdir}/bin${PATH:+:${PATH}};
- fi;
- if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then
- PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}};
- fi;
- export PATH PKG_CONFIG_PATH
- }
- qeerror ()
- {
- qout eerror "${@}"
- }
- qeinfo ()
- {
- qout einfo "${@}"
- }
- qemu_python_install ()
- {
- python_domodule "${S}/python/qemu/qmp.py";
- python_doscript "${S}/scripts/kvm/vmxcap";
- python_doscript "${S}/scripts/qmp/qmp-shell";
- python_doscript "${S}/scripts/qmp/qemu-ga-client"
- }
- qemu_src_configure ()
- {
- debug-print-function ${FUNCNAME} "$@";
- local buildtype=$1;
- local builddir="${S}/${buildtype}-build";
- mkdir "${builddir}";
- local conf_opts=(--prefix=/usr --sysconfdir=/etc --bindir=/usr/bin --libdir=/usr/$(get_libdir) --datadir=/usr/share --docdir=/usr/share/doc/${PF}/html --mandir=/usr/share/man --with-confsuffix=/qemu --localstatedir=/var --disable-bsd-user --disable-guest-agent --disable-strip --disable-werror --disable-gcrypt --python="${PYTHON}" --cc="$(tc-getCC)" --cxx="$(tc-getCXX)" --host-cc="$(tc-getBUILD_CC)" $(use_enable debug debug-info) $(use_enable debug debug-tcg) $(use_enable doc docs) $(use_enable tci tcg-interpreter) $(use_enable xattr attr));
- function conf_notuser ()
- {
- if [[ ${buildtype} == "user" ]]; then
- echo "--disable-${2:-$1}";
- else
- use_enable "$@";
- fi
- };
- conf_opts+=(--disable-bluez $(conf_notuser accessibility brlapi) $(conf_notuser aio linux-aio) $(conf_notuser bzip2) $(conf_notuser capstone) $(conf_notuser caps cap-ng) $(conf_notuser curl) $(conf_notuser fdt) $(conf_notuser glusterfs) $(conf_notuser gnutls) $(conf_notuser gnutls nettle) $(conf_notuser gtk) $(conf_notuser infiniband rdma) $(conf_notuser iscsi libiscsi) $(conf_notuser jemalloc jemalloc) $(conf_notuser jpeg vnc-jpeg) $(conf_notuser kernel_linux kvm) $(conf_notuser lzo) $(conf_notuser ncurses curses) $(conf_notuser nfs libnfs) $(conf_notuser numa) $(conf_notuser opengl) $(conf_notuser png vnc-png) $(conf_notuser rbd) $(conf_notuser sasl vnc-sasl) $(conf_notuser sdl) $(conf_notuser seccomp) $(conf_notuser smartcard) $(conf_notuser snappy) $(conf_notuser spice) $(conf_notuser ssh libssh) $(conf_notuser usb libusb) $(conf_notuser usbredir usb-redir) $(conf_notuser vde) $(conf_notuser vhost-net) $(conf_notuser virgl virglrenderer) $(conf_notuser virtfs) $(conf_notuser vnc) $(conf_notuser vte) $(conf_notuser xen) $(conf_notuser xen xen-pci-passthrough) $(conf_notuser xfs xfsctl) $(conf_notuser xkb xkbcommon));
- if [[ ${buildtype} == "user" ]]; then
- conf_opts+=(--disable-libxml2);
- else
- conf_opts+=(--enable-libxml2);
- fi;
- if [[ ! ${buildtype} == "user" ]]; then
- local audio_opts=($(usev alsa) $(usev oss) $(usev sdl) $(usex pulseaudio pa ""));
- conf_opts+=(--audio-drv-list=$(printf "%s," "${audio_opts[@]}"));
- fi;
- case ${buildtype} in
- user)
- conf_opts+=(--enable-linux-user --disable-system --disable-blobs --disable-tools);
- local static_flag="static-user"
- ;;
- softmmu)
- conf_opts+=(--disable-linux-user --enable-system --disable-tools);
- local static_flag="static"
- ;;
- tools)
- conf_opts+=(--disable-linux-user --disable-system --disable-blobs --enable-tools);
- local static_flag="static"
- ;;
- esac;
- local targets="${buildtype}_targets";
- [[ -n ${targets} ]] && conf_opts+=(--target-list="${!targets}");
- use systemtap && conf_opts+=(--enable-trace-backend=dtrace);
- if use ${static_flag}; then
- conf_opts+=(--static --disable-pie);
- else
- tc-enables-pie && conf_opts+=(--enable-pie);
- fi;
- echo "../configure ${conf_opts[*]}";
- cd "${builddir}";
- ../configure "${conf_opts[@]}" || die "configure failed";
- use kernel_FreeBSD && sed -i -E -e "s|^(HOST_USB=)bsd|\1stub|" "${S}"/config-host.mak
- }
- qewarn ()
- {
- qout ewarn "${@}"
- }
- qout ()
- {
- local outputmsg type;
- type=${1};
- shift;
- outputmsg="${@}";
- case "${EBUILD_PHASE}" in
- depend)
- unset outputmsg
- ;;
- clean)
- unset outputmsg
- ;;
- preinst)
- unset outputmsg
- ;;
- esac;
- [ -n "${outputmsg}" ] && ${type} "${outputmsg}"
- }
- readme.gentoo_create_doc ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- if [[ -n "${DOC_CONTENTS}" ]]; then
- if [[ -n "${DISABLE_AUTOFORMATTING}" ]]; then
- echo "${DOC_CONTENTS}" > "${T}"/README.gentoo || die;
- else
- local saved_flags=$-;
- set -f;
- echo -e ${DOC_CONTENTS} | fold -s -w 70 | sed 's/[[:space:]]*$//' > "${T}"/README.gentoo;
- assert;
- set +f -${saved_flags};
- fi;
- else
- if [[ -f "${FILESDIR}/README.gentoo-${SLOT%/*}" ]]; then
- cp "${FILESDIR}/README.gentoo-${SLOT%/*}" "${T}"/README.gentoo || die;
- else
- if [[ -f "${FILESDIR}/README.gentoo${README_GENTOO_SUFFIX}" ]]; then
- cp "${FILESDIR}/README.gentoo${README_GENTOO_SUFFIX}" "${T}"/README.gentoo || die;
- else
- die "You are not specifying README.gentoo contents!";
- fi;
- fi;
- fi;
- dodoc "${T}"/README.gentoo;
- README_GENTOO_DOC_VALUE=$(< "${T}/README.gentoo")
- }
- readme.gentoo_print_elog ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- if [[ -z "${README_GENTOO_DOC_VALUE}" ]]; then
- die "readme.gentoo_print_elog invoked without matching readme.gentoo_create_doc call!";
- else
- if ! [[ -n "${REPLACING_VERSIONS}" ]] || [[ -n "${FORCE_PRINT_ELOG}" ]]; then
- echo -e "${README_GENTOO_DOC_VALUE}" | while read -r ELINE; do
- elog "${ELINE}";
- done;
- elog "";
- elog "(Note: Above message is only printed the first time package is";
- elog "installed. Please look at ${EPREFIX}/usr/share/doc/${PF}/README.gentoo*";
- elog "for future reference)";
- fi;
- fi
- }
- require_configured_kernel ()
- {
- if ! use kernel_linux; then
- die "${FUNCNAME}() called on non-Linux system, please fix the ebuild";
- fi;
- if ! linux_config_src_exists; then
- qeerror "Could not find a usable .config in the kernel source directory.";
- qeerror "Please ensure that ${KERNEL_DIR} points to a configured set of Linux sources.";
- qeerror "If you are using KBUILD_OUTPUT, please set the environment var so that";
- qeerror "it points to the necessary object directory so that it might find .config.";
- die "Kernel not configured; no .config found in ${KV_OUT_DIR}";
- fi;
- get_version || die "Unable to determine configured kernel version"
- }
- rm_loc ()
- {
- rm po/$1.po || die
- }
- run_in_build_dir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local ret;
- [[ ${#} -ne 0 ]] || die "${FUNCNAME}: no command specified.";
- [[ -n ${BUILD_DIR} ]] || die "${FUNCNAME}: BUILD_DIR not set.";
- mkdir -p "${BUILD_DIR}" || die;
- pushd "${BUILD_DIR}" > /dev/null || die;
- "${@}";
- ret=${?};
- popd > /dev/null || die;
- return ${ret}
- }
- set_arch_to_kernel ()
- {
- export ARCH=$(tc-arch-kernel)
- }
- set_arch_to_portage ()
- {
- export ARCH=$(tc-arch)
- }
- src_compile ()
- {
- if [[ -n ${user_targets} ]]; then
- cd "${S}/user-build";
- default;
- fi;
- if [[ -n ${softmmu_targets} ]]; then
- cd "${S}/softmmu-build";
- default;
- fi;
- cd "${S}/tools-build";
- default
- }
- src_configure ()
- {
- local target;
- python_setup;
- softmmu_targets= softmmu_bins=();
- user_targets= user_bins=();
- for target in ${IUSE_SOFTMMU_TARGETS};
- do
- if use "qemu_softmmu_targets_${target}"; then
- softmmu_targets+=",${target}-softmmu";
- softmmu_bins+=("qemu-system-${target}");
- fi;
- done;
- for target in ${IUSE_USER_TARGETS};
- do
- if use "qemu_user_targets_${target}"; then
- user_targets+=",${target}-linux-user";
- user_bins+=("qemu-${target}");
- fi;
- done;
- softmmu_targets=${softmmu_targets#,};
- user_targets=${user_targets#,};
- [[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu";
- [[ -n ${user_targets} ]] && qemu_src_configure "user";
- qemu_src_configure "tools"
- }
- src_install ()
- {
- if [[ -n ${user_targets} ]]; then
- cd "${S}/user-build";
- emake DESTDIR="${ED}" install;
- generate_initd;
- doinitd "${T}/qemu-binfmt";
- insinto "/usr/share/qemu/binfmt.d";
- doins "${T}/qemu.conf";
- fi;
- if [[ -n ${softmmu_targets} ]]; then
- cd "${S}/softmmu-build";
- emake DESTDIR="${ED}" install;
- [[ -e check-report.html ]] && dodoc check-report.html;
- if use kernel_linux; then
- udev_newrules "${FILESDIR}"/65-kvm.rules-r1 65-kvm.rules;
- fi;
- if use python; then
- python_foreach_impl qemu_python_install;
- fi;
- fi;
- cd "${S}/tools-build";
- emake DESTDIR="${ED}" install;
- pushd "${ED}"/usr/bin > /dev/null;
- pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}";
- popd > /dev/null;
- insinto "/etc/qemu";
- doins "${FILESDIR}/bridge.conf";
- cd "${S}";
- dodoc Changelog MAINTAINERS docs/specs/pci-ids.txt;
- newdoc pc-bios/README README.pc-bios;
- dostrip -x ${QA_PREBUILT};
- if [[ -n ${softmmu_targets} ]]; then
- rm "${ED}/usr/share/qemu/bios.bin";
- rm "${ED}/usr/share/qemu/bios-256k.bin";
- if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
- dosym ../seabios/bios.bin /usr/share/qemu/bios.bin;
- dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin;
- fi;
- rm "${ED}/usr/share/qemu/vgabios.bin";
- rm "${ED}/usr/share/qemu/vgabios-cirrus.bin";
- rm "${ED}/usr/share/qemu/vgabios-qxl.bin";
- rm "${ED}/usr/share/qemu/vgabios-stdvga.bin";
- rm "${ED}/usr/share/qemu/vgabios-virtio.bin";
- rm "${ED}/usr/share/qemu/vgabios-vmware.bin";
- if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc64; then
- dosym ../seavgabios/vgabios-isavga.bin /usr/share/qemu/vgabios.bin;
- dosym ../seavgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin;
- dosym ../seavgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin;
- dosym ../seavgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin;
- dosym ../seavgabios/vgabios-virtio.bin /usr/share/qemu/vgabios-virtio.bin;
- dosym ../seavgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin;
- fi;
- rm "${ED}/usr/share/qemu/sgabios.bin";
- if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
- dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin;
- fi;
- rm "${ED}"/usr/share/qemu/pxe-*.rom;
- if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
- dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom;
- dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom;
- dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom;
- dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom;
- dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom;
- dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom;
- fi;
- fi;
- DISABLE_AUTOFORMATTING=true;
- readme.gentoo_create_doc
- }
- src_prepare ()
- {
- check_targets IUSE_SOFTMMU_TARGETS softmmu;
- check_targets IUSE_USER_TARGETS linux-user;
- default;
- tc-export AR LD NM OBJCOPY PKG_CONFIG;
- export WINDRES=${CHOST}-windres;
- MAKEOPTS+=" V=1";
- handle_locales;
- rm -r dtc || die
- }
- src_test ()
- {
- if [[ -n ${softmmu_targets} ]]; then
- cd "${S}/softmmu-build";
- pax-mark m */qemu-system-*;
- emake -j1 check;
- emake -j1 check-report.html;
- fi
- }
- src_unpack ()
- {
- default
- }
- strip-linguas ()
- {
- local ls newls nols;
- if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
- local op=$1;
- shift;
- ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
- shift;
- local d f;
- for d in "$@";
- do
- if [[ ${op} == "-u" ]]; then
- newls=${ls};
- else
- newls="";
- fi;
- for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
- do
- if [[ ${op} == "-i" ]]; then
- has ${f} ${ls} && newls="${newls} ${f}";
- else
- has ${f} ${ls} || newls="${newls} ${f}";
- fi;
- done;
- ls=${newls};
- done;
- else
- ls="$@";
- fi;
- nols="";
- newls="";
- for f in ${LINGUAS};
- do
- if has ${f} ${ls}; then
- newls="${newls} ${f}";
- else
- nols="${nols} ${f}";
- fi;
- done;
- [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
- export LINGUAS=${newls:1}
- }
- tc-arch ()
- {
- tc-ninja_magic_to_arch portage "$@"
- }
- tc-arch-kernel ()
- {
- tc-ninja_magic_to_arch kern "$@"
- }
- tc-check-openmp ()
- {
- if ! tc-has-openmp; then
- eerror "Your current compiler does not support OpenMP!";
- if tc-is-gcc; then
- eerror "Enable OpenMP support by building sys-devel/gcc with USE=\"openmp\".";
- else
- if tc-is-clang; then
- eerror "OpenMP support in sys-devel/clang is provided by sys-libs/libomp.";
- fi;
- fi;
- die "Active compiler does not have required support for OpenMP";
- fi
- }
- tc-cpp-is-true ()
- {
- local CONDITION=${1};
- shift;
- $(tc-getTARGET_CPP) "${@}" -P - <<-EOF > /dev/null 2>&1
- #if ${CONDITION}
- true
- #else
- #error false
- #endif
- EOF
- }
- tc-detect-is-softfloat ()
- {
- [[ $(tc-getTARGET_CPP) == "gcc -E" ]] && return 1;
- case ${CTARGET:-${CHOST}} in
- *-newlib | *-elf | *-eabi)
- return 1
- ;;
- arm*)
- if tc-cpp-is-true "defined(__ARM_PCS_VFP)"; then
- echo "no";
- else
- if tc-cpp-is-true "defined(__SOFTFP__)"; then
- echo "yes";
- else
- echo "softfp";
- fi;
- fi;
- return 0
- ;;
- *)
- return 1
- ;;
- esac
- }
- tc-enables-pie ()
- {
- tc-cpp-is-true "defined(__PIE__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-enables-ssp ()
- {
- tc-cpp-is-true "defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-enables-ssp-all ()
- {
- tc-cpp-is-true "defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-enables-ssp-strong ()
- {
- tc-cpp-is-true "defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-endian ()
- {
- local host=$1;
- [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
- host=${host%%-*};
- case ${host} in
- aarch64*be)
- echo big
- ;;
- aarch64)
- echo little
- ;;
- alpha*)
- echo little
- ;;
- arm*b*)
- echo big
- ;;
- arm*)
- echo little
- ;;
- cris*)
- echo little
- ;;
- hppa*)
- echo big
- ;;
- i?86*)
- echo little
- ;;
- ia64*)
- echo little
- ;;
- m68*)
- echo big
- ;;
- mips*l*)
- echo little
- ;;
- mips*)
- echo big
- ;;
- powerpc*le)
- echo little
- ;;
- powerpc*)
- echo big
- ;;
- riscv*)
- echo little
- ;;
- s390*)
- echo big
- ;;
- sh*b*)
- echo big
- ;;
- sh*)
- echo little
- ;;
- sparc*)
- echo big
- ;;
- x86_64*)
- echo little
- ;;
- *)
- echo wtf
- ;;
- esac
- }
- tc-env_build ()
- {
- tc-export_build_env;
- CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
- }
- tc-export ()
- {
- local var;
- for var in "$@";
- do
- [[ $(type -t "tc-get${var}") != "function" ]] && die "tc-export: invalid export variable '${var}'";
- "tc-get${var}" > /dev/null;
- done
- }
- tc-export_build_env ()
- {
- tc-export "$@";
- if tc-is-cross-compiler; then
- : ${BUILD_CFLAGS:=-O1 -pipe};
- : ${BUILD_CXXFLAGS:=-O1 -pipe};
- : ${BUILD_CPPFLAGS:= };
- : ${BUILD_LDFLAGS:= };
- else
- : ${BUILD_CFLAGS:=${CFLAGS}};
- : ${BUILD_CXXFLAGS:=${CXXFLAGS}};
- : ${BUILD_CPPFLAGS:=${CPPFLAGS}};
- : ${BUILD_LDFLAGS:=${LDFLAGS}};
- fi;
- export BUILD_{C,CXX,CPP,LD}FLAGS;
- local v;
- for v in BUILD_{C,CXX,CPP,LD}FLAGS;
- do
- export ${v#BUILD_}_FOR_BUILD="${!v}";
- done
- }
- tc-get-compiler-type ()
- {
- local code='
- #if defined(__PATHSCALE__)
- HAVE_PATHCC
- #elif defined(__clang__)
- HAVE_CLANG
- #elif defined(__GNUC__)
- HAVE_GCC
- #endif
- ';
- local res=$($(tc-getCPP "$@") -E -P - <<<"${code}");
- case ${res} in
- *HAVE_PATHCC*)
- echo pathcc
- ;;
- *HAVE_CLANG*)
- echo clang
- ;;
- *HAVE_GCC*)
- echo gcc
- ;;
- *)
- echo unknown
- ;;
- esac
- }
- tc-getAR ()
- {
- tc-getPROG AR ar "$@"
- }
- tc-getAS ()
- {
- tc-getPROG AS as "$@"
- }
- tc-getBUILD_AR ()
- {
- tc-getBUILD_PROG AR ar "$@"
- }
- tc-getBUILD_AS ()
- {
- tc-getBUILD_PROG AS as "$@"
- }
- tc-getBUILD_CC ()
- {
- tc-getBUILD_PROG CC gcc "$@"
- }
- tc-getBUILD_CPP ()
- {
- tc-getBUILD_PROG CPP "$(tc-getBUILD_CC) -E" "$@"
- }
- tc-getBUILD_CXX ()
- {
- tc-getBUILD_PROG CXX g++ "$@"
- }
- tc-getBUILD_LD ()
- {
- tc-getBUILD_PROG LD ld "$@"
- }
- tc-getBUILD_NM ()
- {
- tc-getBUILD_PROG NM nm "$@"
- }
- tc-getBUILD_OBJCOPY ()
- {
- tc-getBUILD_PROG OBJCOPY objcopy "$@"
- }
- tc-getBUILD_PKG_CONFIG ()
- {
- tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
- }
- tc-getBUILD_PROG ()
- {
- local vars="BUILD_$1 $1_FOR_BUILD HOST$1";
- tc-is-cross-compiler || vars+=" $1";
- _tc-getPROG CBUILD "${vars}" "${@:2}"
- }
- tc-getBUILD_RANLIB ()
- {
- tc-getBUILD_PROG RANLIB ranlib "$@"
- }
- tc-getBUILD_STRIP ()
- {
- tc-getBUILD_PROG STRIP strip "$@"
- }
- tc-getCC ()
- {
- tc-getPROG CC gcc "$@"
- }
- tc-getCPP ()
- {
- tc-getPROG CPP "${CC:-gcc} -E" "$@"
- }
- tc-getCXX ()
- {
- tc-getPROG CXX g++ "$@"
- }
- tc-getDLLWRAP ()
- {
- tc-getPROG DLLWRAP dllwrap "$@"
- }
- tc-getF77 ()
- {
- tc-getPROG F77 gfortran "$@"
- }
- tc-getFC ()
- {
- tc-getPROG FC gfortran "$@"
- }
- tc-getGCJ ()
- {
- tc-getPROG GCJ gcj "$@"
- }
- tc-getGO ()
- {
- tc-getPROG GO gccgo "$@"
- }
- tc-getLD ()
- {
- tc-getPROG LD ld "$@"
- }
- tc-getNM ()
- {
- tc-getPROG NM nm "$@"
- }
- tc-getOBJCOPY ()
- {
- tc-getPROG OBJCOPY objcopy "$@"
- }
- tc-getOBJDUMP ()
- {
- tc-getPROG OBJDUMP objdump "$@"
- }
- tc-getPKG_CONFIG ()
- {
- tc-getPROG PKG_CONFIG pkg-config "$@"
- }
- tc-getPROG ()
- {
- _tc-getPROG CHOST "$@"
- }
- tc-getRANLIB ()
- {
- tc-getPROG RANLIB ranlib "$@"
- }
- tc-getRC ()
- {
- tc-getPROG RC windres "$@"
- }
- tc-getSTRIP ()
- {
- tc-getPROG STRIP strip "$@"
- }
- tc-getTARGET_CPP ()
- {
- if [[ -n ${CTARGET} ]]; then
- _tc-getPROG CTARGET TARGET_CPP "gcc -E" "$@";
- else
- tc-getCPP "$@";
- fi
- }
- tc-has-openmp ()
- {
- local base="${T}/test-tc-openmp";
- cat <<-EOF > "${base}.c"
- #include <omp.h>
- int main() {
- int nthreads, tid, ret = 0;
- #pragma omp parallel private(nthreads, tid)
- {
- tid = omp_get_thread_num();
- nthreads = omp_get_num_threads(); ret += tid + nthreads;
- }
- return ret;
- }
- EOF
- $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &> /dev/null;
- local ret=$?;
- rm -f "${base}"*;
- return ${ret}
- }
- tc-has-tls ()
- {
- local base="${T}/test-tc-tls";
- cat <<-EOF > "${base}.c"
- int foo(int *i) {
- static __thread int j = 0;
- return *i ? j : *i;
- }
- EOF
- local flags;
- case $1 in
- -s)
- flags="-S"
- ;;
- -c)
- flags="-c"
- ;;
- -l)
- ;;
- -*)
- die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
- ;;
- esac;
- : ${flags:=-fPIC -shared -Wl,-z,defs};
- [[ $1 == -* ]] && shift;
- $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &> /dev/null;
- local ret=$?;
- rm -f "${base}"*;
- return ${ret}
- }
- tc-is-clang ()
- {
- [[ $(tc-get-compiler-type) == clang ]]
- }
- tc-is-cross-compiler ()
- {
- [[ ${CBUILD:-${CHOST}} != ${CHOST} ]]
- }
- tc-is-gcc ()
- {
- [[ $(tc-get-compiler-type) == gcc ]]
- }
- tc-is-softfloat ()
- {
- tc-detect-is-softfloat || tc-tuple-is-softfloat
- }
- tc-is-static-only ()
- {
- local host=${CTARGET:-${CHOST}};
- [[ ${host} == *-mint* ]]
- }
- tc-ld-disable-gold ()
- {
- if ! tc-ld-is-gold "$@"; then
- return;
- fi;
- ewarn "Forcing usage of the BFD linker instead of GOLD";
- local ld=$(tc-getLD "$@");
- local bfd_ld="${ld%% *}.bfd";
- local path_ld=$(which "${bfd_ld}" 2>/dev/null);
- [[ -e ${path_ld} ]] && export LD=${bfd_ld};
- local fallback="true";
- if tc-is-gcc; then
- local major=$(gcc-major-version "$@");
- local minor=$(gcc-minor-version "$@");
- if [[ ${major} -gt 4 ]] || [[ ${major} -eq 4 && ${minor} -ge 8 ]]; then
- export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
- fallback="false";
- fi;
- else
- if tc-is-clang; then
- local major=$(clang-major-version "$@");
- local minor=$(clang-minor-version "$@");
- if [[ ${major} -gt 3 ]] || [[ ${major} -eq 3 && ${minor} -ge 5 ]]; then
- export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
- fallback="false";
- fi;
- fi;
- fi;
- if [[ ${fallback} == "true" ]]; then
- if [[ -e ${path_ld} ]]; then
- local d="${T}/bfd-linker";
- mkdir -p "${d}";
- ln -sf "${path_ld}" "${d}"/ld;
- export LDFLAGS="${LDFLAGS} -B${d}";
- else
- die "unable to locate a BFD linker to bypass gold";
- fi;
- fi
- }
- tc-ld-is-gold ()
- {
- local out;
- out=$($(tc-getLD "$@") --version 2>&1);
- if [[ ${out} == *"GNU gold"* ]]; then
- return 0;
- fi;
- local base="${T}/test-tc-gold";
- cat <<-EOF > "${base}.c"
- int main() { return 0; }
- EOF
- out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1);
- rm -f "${base}"*;
- if [[ ${out} == *"GNU gold"* ]]; then
- return 0;
- fi;
- return 1
- }
- tc-ld-is-lld ()
- {
- local out;
- out=$($(tc-getLD "$@") --version 2>&1);
- if [[ ${out} == *"LLD"* ]]; then
- return 0;
- fi;
- local base="${T}/test-tc-lld";
- cat <<-EOF > "${base}.c"
- int main() { return 0; }
- EOF
- out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1);
- rm -f "${base}"*;
- if [[ ${out} == *"LLD"* ]]; then
- return 0;
- fi;
- return 1
- }
- tc-ninja_magic_to_arch ()
- {
- function ninj ()
- {
- [[ ${type} == "kern" ]] && echo $1 || echo $2
- };
- local type=$1;
- local host=$2;
- [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
- case ${host} in
- aarch64*)
- echo arm64
- ;;
- alpha*)
- echo alpha
- ;;
- arm*)
- echo arm
- ;;
- avr*)
- ninj avr32 avr
- ;;
- bfin*)
- ninj blackfin bfin
- ;;
- c6x*)
- echo c6x
- ;;
- cris*)
- echo cris
- ;;
- frv*)
- echo frv
- ;;
- hexagon*)
- echo hexagon
- ;;
- hppa*)
- ninj parisc hppa
- ;;
- i?86*)
- if [[ ${type} == "kern" && ${host} == *freebsd* ]]; then
- echo i386;
- else
- echo x86;
- fi
- ;;
- ia64*)
- echo ia64
- ;;
- m68*)
- echo m68k
- ;;
- metag*)
- echo metag
- ;;
- microblaze*)
- echo microblaze
- ;;
- mips*)
- echo mips
- ;;
- nios2*)
- echo nios2
- ;;
- nios*)
- echo nios
- ;;
- or1k | or32*)
- echo openrisc
- ;;
- powerpc*)
- if [[ ${type} == "kern" ]]; then
- echo powerpc;
- else
- if [[ ${host} == powerpc64* ]]; then
- echo ppc64;
- else
- echo ppc;
- fi;
- fi
- ;;
- riscv*)
- echo riscv
- ;;
- s390*)
- echo s390
- ;;
- score*)
- echo score
- ;;
- sh64*)
- ninj sh64 sh
- ;;
- sh*)
- echo sh
- ;;
- sparc64*)
- ninj sparc64 sparc
- ;;
- sparc*)
- [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
- ;;
- tile*)
- echo tile
- ;;
- vax*)
- echo vax
- ;;
- x86_64*freebsd*)
- echo amd64
- ;;
- x86_64*)
- if [[ ${type} == "kern" ]]; then
- echo x86;
- else
- echo amd64;
- fi
- ;;
- xtensa*)
- echo xtensa
- ;;
- *)
- echo unknown
- ;;
- esac
- }
- tc-stack-grows-down ()
- {
- case ${ARCH} in
- hppa | metag)
- return 1
- ;;
- esac;
- return 0
- }
- tc-tuple-is-softfloat ()
- {
- local CTARGET=${CTARGET:-${CHOST}};
- case ${CTARGET//_/-} in
- bfin* | h8300*)
- echo "only"
- ;;
- *-softfloat-*)
- echo "yes"
- ;;
- *-softfp-*)
- echo "softfp"
- ;;
- arm*-hardfloat-* | arm*eabihf)
- echo "no"
- ;;
- *-newlib | *-elf | *-eabi)
- echo "no"
- ;;
- arm*)
- echo "yes"
- ;;
- *)
- echo "no"
- ;;
- esac
- }
- udev_dorules ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- ( insopts -m 0644;
- insinto "$(_udev_get_udevdir)"/rules.d;
- doins "${@}" )
- }
- udev_get_udevdir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- eerror "This ebuild should be using the get_udevdir() function instead of the deprecated udev_get_udevdir()";
- die "Deprecated function call: udev_get_udevdir(), please report to (overlay) maintainers."
- }
- udev_newrules ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- ( insopts -m 0644;
- insinto "$(_udev_get_udevdir)"/rules.d;
- newins "${@}" )
- }
- udev_reload ()
- {
- if [[ ${ROOT} != "" ]] && [[ ${ROOT} != "/" ]]; then
- return 0;
- fi;
- if [[ -d ${ROOT}/run/udev ]]; then
- ebegin "Running udev control --reload for reloading rules and databases";
- udevadm control --reload;
- eend $?;
- fi
- }
- use_if_iuse ()
- {
- in_iuse $1 || return 1;
- use $1
- }
- ver_cut ()
- {
- local range=${1};
- local v=${2:-${PV}};
- local start end;
- local -a comp;
- __eapi7_ver_split "${v}";
- local max=$((${#comp[@]}/2));
- __eapi7_ver_parse_range "${range}" "${max}";
- local IFS=;
- if [[ ${start} -gt 0 ]]; then
- start=$(( start*2 - 1 ));
- fi;
- echo "${comp[*]:start:end*2-start}"
- }
- ver_rs ()
- {
- local v;
- (( ${#} & 1 )) && v=${@: -1} || v=${PV};
- local start end i;
- local -a comp;
- __eapi7_ver_split "${v}";
- local max=$((${#comp[@]}/2 - 1));
- while [[ ${#} -ge 2 ]]; do
- __eapi7_ver_parse_range "${1}" "${max}";
- for ((i = start*2; i <= end*2; i+=2 ))
- do
- [[ ${i} -eq 0 && -z ${comp[i]} ]] && continue;
- comp[i]=${2};
- done;
- shift 2;
- done;
- local IFS=;
- echo "${comp[*]}"
- }
- ver_test ()
- {
- local va op vb;
- if [[ $# -eq 3 ]]; then
- va=${1};
- shift;
- else
- va=${PVR};
- fi;
- [[ $# -eq 2 ]] || die "${FUNCNAME}: bad number of arguments";
- op=${1};
- vb=${2};
- case ${op} in
- -eq | -ne | -lt | -le | -gt | -ge)
- ;;
- *)
- die "${FUNCNAME}: invalid operator: ${op}"
- ;;
- esac;
- __eapi7_ver_compare "${va}" "${vb}";
- test $? "${op}" 2
- }
- xdg_desktop_database_update ()
- {
- if [[ ${EBUILD_PHASE} != post* ]]; then
- die "xdg_desktop_database_update must be used in pkg_post* phases.";
- fi;
- if ! type update-desktop-database &> /dev/null; then
- debug-print "update-desktop-database is not found";
- return;
- fi;
- ebegin "Updating .desktop files database";
- update-desktop-database -q "${EROOT%/}${DESKTOP_DATABASE_DIR}";
- eend $?
- }
- xdg_environment_reset ()
- {
- export XDG_DATA_HOME="${HOME}/.local/share";
- export XDG_CONFIG_HOME="${HOME}/.config";
- export XDG_CACHE_HOME="${HOME}/.cache";
- export XDG_RUNTIME_DIR="${T}/run";
- mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "${XDG_RUNTIME_DIR}" || die;
- chmod 0700 "${XDG_RUNTIME_DIR}" || die;
- unset DBUS_SESSION_BUS_ADDRESS
- }
- xdg_icon_cache_update ()
- {
- if [[ ${EBUILD_PHASE} != post* ]]; then
- die "xdg_icon_cache_update must be used in pkg_post* phases.";
- fi;
- if ! type gtk-update-icon-cache &> /dev/null; then
- debug-print "gtk-update-icon-cache is not found";
- return;
- fi;
- ebegin "Updating icons cache";
- local dir f retval=0;
- local fails=();
- for dir in "${EROOT%/}"/usr/share/icons/*;
- do
- if [[ -f "${dir}/index.theme" ]]; then
- local rv=0;
- gtk-update-icon-cache -qf "${dir}";
- rv=$?;
- if [[ ! $rv -eq 0 ]]; then
- debug-print "Updating cache failed on ${dir}";
- fails+=("${dir}");
- retval=2;
- fi;
- else
- if [[ $(ls "${dir}") = "icon-theme.cache" ]]; then
- rm "${dir}/icon-theme.cache";
- fi;
- fi;
- if [[ -z $(ls "${dir}") ]]; then
- rmdir "${dir}";
- fi;
- done;
- eend ${retval};
- for f in "${fails[@]}";
- do
- eerror "Failed to update cache with icon $f";
- done
- }
- xdg_mimeinfo_database_update ()
- {
- if [[ ${EBUILD_PHASE} != post* ]]; then
- die "xdg_mimeinfo_database_update must be used in pkg_post* phases.";
- fi;
- if ! type update-mime-database &> /dev/null; then
- debug-print "update-mime-database is not found";
- return;
- fi;
- ebegin "Updating shared mime info database";
- update-mime-database "${EROOT%/}${MIMEINFO_DATABASE_DIR}";
- eend $?
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement