declare -x ABI="amd64" declare -x ABI_MIPS="" declare -x ABI_PPC="" 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_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8[ncurses,readline] ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9[ncurses,readline] ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10[ncurses,readline] ) ) 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 -x AS="x86_64-pc-linux-gnu-as" declare BDEPEND=" python_targets_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8 ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9 ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10 ) dev-lang/perl sys-apps/texinfo virtual/pkgconfig doc? ( dev-python/sphinx[python_targets_python3_8(-)?,python_targets_python3_9(-)?,python_targets_python3_10(-)?] dev-python/sphinx_rtd_theme[python_targets_python3_8(-)?,python_targets_python3_9(-)?,python_targets_python3_10(-)?] ) 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 xml python_targets_python3_9 multilib systemd udev" declare -x CALLIGRA_FEATURES="" declare -x CAMERAS="" declare -x CARGO_TERM_COLOR="never" declare -x CATKIN_PREFIX_PATH="/usr" declare -x CBUILD="x86_64-pc-linux-gnu" declare -- CDEPEND=" !static? ( >=dev-libs/glib-2.0 sys-libs/zlib python? ( python_targets_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8[ncurses,readline] ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9[ncurses,readline] ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10[ncurses,readline] ) ) systemtap? ( dev-util/systemtap ) xattr? ( sys-apps/attr ) dev-libs/libxml2 >=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 ) bpf? ( dev-libs/libbpf:= ) 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 ) fuse? ( >=sys-fs/fuse-3.1:3 ) 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-cluster/rdma-core ) iscsi? ( net-libs/libiscsi ) io-uring? ( sys-libs/liburing:= ) jack? ( virtual/jack ) jemalloc? ( dev-libs/jemalloc ) jpeg? ( virtual/jpeg:0= ) lzo? ( dev-libs/lzo:2 ) multipath? ( sys-fs/multipath-tools ) ncurses? ( sys-libs/ncurses:=[unicode(+)] sys-libs/ncurses:= ) 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(+)] ) pam? ( sys-libs/pam ) png? ( media-libs/libpng:0= ) pulseaudio? ( media-sound/pulseaudio ) rbd? ( sys-cluster/ceph ) sasl? ( dev-libs/cyrus-sasl ) sdl? ( media-libs/libsdl2[video] media-libs/libsdl2 ) sdl-image? ( media-libs/sdl2-image ) seccomp? ( >=sys-libs/libseccomp-2.1.0 ) slirp? ( net-libs/libslirp ) 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 ) udev? ( virtual/libudev:= ) 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 ) zstd? ( >=app-arch/zstd-1.4.0 ) ) qemu_softmmu_targets_i386? ( pin-upstream-blobs? ( ~sys-firmware/edk2-ovmf-202105[binary] ~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/seabios-1.14.0[binary,seavgabios] ~sys-firmware/sgabios-0.1_pre10[binary] ) !pin-upstream-blobs? ( >=sys-firmware/edk2-ovmf-202105 sys-firmware/ipxe[qemu] >=sys-firmware/seabios-1.14.0[seavgabios] sys-firmware/sgabios ) ) qemu_softmmu_targets_x86_64? ( pin-upstream-blobs? ( ~sys-firmware/edk2-ovmf-202105[binary] ~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/seabios-1.14.0[binary,seavgabios] ~sys-firmware/sgabios-0.1_pre10[binary] ) !pin-upstream-blobs? ( >=sys-firmware/edk2-ovmf-202105 sys-firmware/ipxe[qemu] >=sys-firmware/seabios-1.14.0[seavgabios] sys-firmware/sgabios ) ) qemu_softmmu_targets_ppc? ( pin-upstream-blobs? ( ~sys-firmware/seabios-1.14.0[binary,seavgabios] ) !pin-upstream-blobs? ( >=sys-firmware/seabios-1.14.0[seavgabios] ) ) qemu_softmmu_targets_ppc64? ( pin-upstream-blobs? ( ~sys-firmware/seabios-1.14.0[binary,seavgabios] ) !pin-upstream-blobs? ( >=sys-firmware/seabios-1.14.0[seavgabios] ) ) " declare -x CFLAGS="-pipe -march=native -fno-diagnostics-color -Og -g -falign-functions=32:25:16" 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 -- 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="-pipe -march=native -fno-diagnostics-color -Og -g -falign-functions=32:25:16" declare -x DCC_EMAILLOG_WHOM_TO_BLAME="" 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_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8[ncurses,readline] ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9[ncurses,readline] ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10[ncurses,readline] ) ) systemtap? ( dev-util/systemtap ) xattr? ( sys-apps/attr ) dev-libs/libxml2 >=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 ) bpf? ( dev-libs/libbpf:= ) 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 ) fuse? ( >=sys-fs/fuse-3.1:3 ) 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-cluster/rdma-core ) iscsi? ( net-libs/libiscsi ) io-uring? ( sys-libs/liburing:= ) jack? ( virtual/jack ) jemalloc? ( dev-libs/jemalloc ) jpeg? ( virtual/jpeg:0= ) lzo? ( dev-libs/lzo:2 ) multipath? ( sys-fs/multipath-tools ) ncurses? ( sys-libs/ncurses:=[unicode(+)] sys-libs/ncurses:= ) 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(+)] ) pam? ( sys-libs/pam ) png? ( media-libs/libpng:0= ) pulseaudio? ( media-sound/pulseaudio ) rbd? ( sys-cluster/ceph ) sasl? ( dev-libs/cyrus-sasl ) sdl? ( media-libs/libsdl2[video] media-libs/libsdl2 ) sdl-image? ( media-libs/sdl2-image ) seccomp? ( >=sys-libs/libseccomp-2.1.0 ) slirp? ( net-libs/libslirp ) 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 ) udev? ( virtual/libudev:= ) 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 ) zstd? ( >=app-arch/zstd-1.4.0 ) ) qemu_softmmu_targets_i386? ( pin-upstream-blobs? ( ~sys-firmware/edk2-ovmf-202105[binary] ~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/seabios-1.14.0[binary,seavgabios] ~sys-firmware/sgabios-0.1_pre10[binary] ) !pin-upstream-blobs? ( >=sys-firmware/edk2-ovmf-202105 sys-firmware/ipxe[qemu] >=sys-firmware/seabios-1.14.0[seavgabios] sys-firmware/sgabios ) ) qemu_softmmu_targets_x86_64? ( pin-upstream-blobs? ( ~sys-firmware/edk2-ovmf-202105[binary] ~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/seabios-1.14.0[binary,seavgabios] ~sys-firmware/sgabios-0.1_pre10[binary] ) !pin-upstream-blobs? ( >=sys-firmware/edk2-ovmf-202105 sys-firmware/ipxe[qemu] >=sys-firmware/seabios-1.14.0[seavgabios] sys-firmware/sgabios ) ) qemu_softmmu_targets_ppc? ( pin-upstream-blobs? ( ~sys-firmware/seabios-1.14.0[binary,seavgabios] ) !pin-upstream-blobs? ( >=sys-firmware/seabios-1.14.0[seavgabios] ) ) qemu_softmmu_targets_ppc64? ( pin-upstream-blobs? ( ~sys-firmware/seabios-1.14.0[binary,seavgabios] ) !pin-upstream-blobs? ( >=sys-firmware/seabios-1.14.0[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_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8[ncurses,readline] ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9[ncurses,readline] ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10[ncurses,readline] ) ) systemtap? ( dev-util/systemtap ) xattr? ( sys-apps/attr[static-libs(+)] ) dev-libs/libxml2[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 ) bpf? ( dev-libs/libbpf:= ) 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(+)] ) fuse? ( >=sys-fs/fuse-3.1:3[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-cluster/rdma-core[static-libs(+)] ) iscsi? ( net-libs/libiscsi ) io-uring? ( sys-libs/liburing:=[static-libs(+)] ) jack? ( virtual/jack ) jemalloc? ( dev-libs/jemalloc ) jpeg? ( virtual/jpeg:0=[static-libs(+)] ) lzo? ( dev-libs/lzo:2[static-libs(+)] ) multipath? ( sys-fs/multipath-tools ) ncurses? ( sys-libs/ncurses:=[unicode(+)] sys-libs/ncurses:=[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(+)] ) pam? ( sys-libs/pam ) png? ( media-libs/libpng:0=[static-libs(+)] ) pulseaudio? ( media-sound/pulseaudio ) rbd? ( sys-cluster/ceph ) sasl? ( dev-libs/cyrus-sasl[static-libs(+)] ) sdl? ( media-libs/libsdl2[video] media-libs/libsdl2[static-libs(+)] ) sdl-image? ( media-libs/sdl2-image[static-libs(+)] ) seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] ) slirp? ( net-libs/libslirp[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(+)] ) udev? ( virtual/libudev:= ) 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(+)] ) zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] ) ) static-user? ( >=dev-libs/glib-2.0[static-libs(+)] sys-libs/zlib[static-libs(+)] python? ( python_targets_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8[ncurses,readline] ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9[ncurses,readline] ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10[ncurses,readline] ) ) systemtap? ( dev-util/systemtap ) xattr? ( sys-apps/attr[static-libs(+)] ) ) " 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 kvm then have 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 DSSP="/usr/bin/dssp" declare -x EAPI="8" declare -x EC2_AMITOOL_HOME="/usr" declare -- EDK2_OVMF_VERSION="202105" declare -x EGO_BUILD_FLAGS="-p 4" declare -x ELIBC="glibc" declare -x ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH 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="1643508617.465549" declare -- EPOCHSECONDS="1643508617" declare -x EPYTHON="python3.9" declare -x EXEOPTIONS="-m0755" declare -- E_IDEPEND="filecaps? ( sys-libs/libcap )" declare -x FCFLAGS="-pipe -march=native -fno-diagnostics-color -Og -g" 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="-pipe -march=native -fno-diagnostics-color -Og -g" declare -x FFTOOLS="" declare -- FIRMWARE_ABI_VERSION="6.2.0" declare -x G4ABLADATA="/usr/share/geant4/data/G4ABLA3.1" declare -x G4ENSDFSTATEDATA="/usr/share/geant4/data/G4ENSDFSTATE2.3" declare -x G4INCLDATA="/usr/share/geant4/data/G4INCL1.0" declare -x G4LEDATA="/usr/share/geant4/data/G4EMLOW7.13" declare -x G4LEVELGAMMADATA="/usr/share/geant4/data/PhotonEvaporation5.7" declare -x G4NEUTRONHPDATA="/usr/share/geant4/data/G4NDL4.6" declare -x G4PARTICLEHPDATA="/usr/share/geant4/data/G4TENDL1.3.2" declare -x G4PARTICLEXSDATA="/usr/share/geant4/data/G4PARTICLEXS3.1.1" declare -x G4PIIDATA="/usr/share/geant4/data/G4PII1.3" declare -x G4RADIOACTIVEDATA="/usr/share/geant4/data/RadioactiveDecay5.6" declare -x G4REALSURFACEDATA="/usr/share/geant4/data/RealSurface2.2" declare -x G4SAIDXSDATA="/usr/share/geant4/data/G4SAIDDATA2.0" declare -x GCC_COLORS="" declare -x GCC_SPECS="" declare -x GIT_PAGER="cat" declare -x GO19CONCURRENTCOMPILATION="0" declare -x GPSD_PROTOCOLS="" declare -x GRUB_PLATFORMS="" declare HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org" declare IDEPEND declare -x INHERITED=" toolchain-funcs multilib linux-info multibuild multiprocessing python-utils-r1 python-r1 udev fcaps readme.gentoo-r1 pax-utils xdg-utils" declare -x INPUT_DEVICES="" declare -x INSOPTIONS="-m0644" declare IUSE="accessibility +aio alsa bpf bzip2 capstone +caps +curl debug +doc +fdt fuse glusterfs gnutls gtk infiniband iscsi io-uring jack jemalloc +jpeg lzo multipath ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux +slirp smartcard snappy spice ssh static static-user systemtap test udev usb usbredir vde +vhost-net vhost-user-fs virgl virtfs +vnc vte xattr xen xfs zstd 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_avr qemu_softmmu_targets_rx qemu_softmmu_targets_tricore 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_hexagon qemu_user_targets_mipsn32 qemu_user_targets_mipsn32el qemu_user_targets_ppc64abi32 qemu_user_targets_ppc64le qemu_user_targets_sparc32plus python_targets_python3_8 python_targets_python3_9 python_targets_python3_10 +filecaps" declare -x IUSE_EFFECTIVE="abi_x86_64 accessibility aio alpha alsa amd64 amd64-linux arm arm64 arm64-macos bpf bzip2 caps capstone curl debug doc elibc_Cygwin elibc_Darwin elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_musl fdt filecaps fuse glusterfs gnutls gtk hppa ia64 infiniband io-uring iscsi jack jemalloc jpeg kernel_Darwin kernel_SunOS kernel_Winnt kernel_linux lzo m68k mips multipath ncurses nfs nls numa opengl oss pam pin-upstream-blobs plugins png ppc ppc-macos ppc64 ppc64-linux prefix prefix-guest prefix-stack pulseaudio python python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 qemu_softmmu_targets_aarch64 qemu_softmmu_targets_alpha qemu_softmmu_targets_arm qemu_softmmu_targets_avr 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_rx 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_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_hexagon 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_x86_64 qemu_user_targets_xtensa qemu_user_targets_xtensaeb rbd riscv s390 sasl sdl sdl-image seccomp selinux slirp smartcard snappy sparc sparc-solaris sparc64-solaris spice ssh static static-user systemtap test udev usb usbredir userland_BSD userland_GNU vde vhost-net vhost-user-fs virgl virtfs vnc vte x64-cygwin x64-macos x64-solaris x64-winnt x86 x86-linux x86-solaris x86-winnt xattr xen xfs zstd" 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 avr rx tricore " 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 hexagon mipsn32 mipsn32el ppc64abi32 ppc64le sparc32plus " 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 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86" declare -- KV_DIR="/usr/src/linux" declare -- KV_EXTRA="" declare -- KV_FULL="5.15.18-gentoo-dist" declare -- KV_LOCAL="-gentoo-dist" declare -- KV_MAJOR="5" declare -- KV_MINOR="15" declare -- KV_OUT_DIR="/usr/src/linux" declare -- KV_PATCH="18" declare -x L10N="" declare -x LADSPA_PATH="/usr/lib64/ladspa" declare -x LAGAN_DIR="/usr/lib64/lagan" declare -x LANG="C.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 -Wl,--defsym=__gentoo_check_ldflags__=0" 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 LIBGUESTFS_PATH="/usr/share/guestfs/appliance/" declare -x LIBOPTIONS="-m0644" declare -x LIBREOFFICE_EXTENSIONS="" declare -x LICENSE="GPL-2 LGPL-2 BSD-2" declare -x LLVM_TARGETS="" declare -x LUA_SINGLE_TARGET="" declare -x LUA_TARGETS="" declare -x MAILTO="tinderbox" declare -x MAKEOPTS="-j4 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|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec|llvm)" 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 NX_SYSTEM="/opt/NX" declare -x OBJCOPY="x86_64-pc-linux-gnu-objcopy" declare -x OCAML_COLOR="never" declare -x OFED_DRIVERS="" declare -x OFFICE_IMPLEMENTATION="" declare -x OMP_DYNAMIC="FALSE" declare -x OMP_NESTED="FALSE" declare -x OMP_NUM_THREADS="4" declare -x OPENMPI_FABRICS="" declare -x OPENMPI_OFED_FEATURES="" declare -x OPENMPI_RM="" declare -a PATCHES=([0]="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/files/qemu-2.11.1-capstone_include_path.patch" [1]="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/files/qemu-5.2.0-disable-keymap.patch" [2]="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/files/qemu-6.0.0-make.patch" [3]="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/files/qemu-6.1.0-strings.patch" [4]="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/files/qemu-6.2.0-user-SLIC-crash.patch" [5]="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/files/qemu-6.2.0-also-build-virtfs-proxy-helper.patch") declare -x PATH="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/temp/python3.9/bin:/usr/lib/portage/python3.9/ebuild-helpers/xattr:/usr/lib/portage/python3.9/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/lib/llvm/13/bin:/usr/lib/llvm/12/bin" declare -x PAX_MARKINGS="none" declare PDEPEND="" declare -x PHP_TARGETS="" declare -x PKGSYSTEM_ENABLE_FSYNC="0" declare -x PKG_CONFIG="x86_64-pc-linux-gnu-pkg-config" declare -x PKG_CONFIG_PATH="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/temp/python3.9/pkgconfig" 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-6.2.0-r3/html") declare -a PORTAGE_DOSTRIP=([0]="/") declare -a PORTAGE_DOSTRIP_SKIP=() declare -x PORTAGE_TMPFS="/dev/shm" declare -x PORT_LOGDIR="/var/log/portage" declare -x POSTGRES_TARGETS="" declare -- PPC_FIRMWARE_DEPEND=" pin-upstream-blobs? ( ~sys-firmware/seabios-1.14.0[binary,seavgabios] ) !pin-upstream-blobs? ( >=sys-firmware/seabios-1.14.0[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 -- PROPERTIES="" declare -x PYTEST_ADDOPTS="--color=no" declare -x PYTHON="/usr/bin/python3.9" declare -x PYTHONDONTWRITEBYTECODE="1" declare -a PYTHON_COMPAT=([0]="python3_8" [1]="python3_9" [2]="python3_10") declare -- PYTHON_DEPS="python_targets_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8[ncurses,readline] ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9[ncurses,readline] ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10[ncurses,readline] ) " declare -- PYTHON_REQUIRED_USE="|| ( python_targets_python3_8 python_targets_python3_9 python_targets_python3_10 )" declare -- PYTHON_REQ_USE="ncurses,readline" declare -x PYTHON_SINGLE_TARGET="" declare -x PYTHON_TARGETS="python3_9" declare -- PYTHON_USEDEP="python_targets_python3_8(-)?,python_targets_python3_9(-)?,python_targets_python3_10(-)?" declare -x PY_FORCE_COLOR="0" 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/opensbi-riscv64-generic-fw_dynamic.elf usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf 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="i386 x86_64" declare -x QEMU_USER_TARGETS="i386 x86_64" declare -x RANLIB="x86_64-pc-linux-gnu-ranlib" declare RDEPEND=" !static? ( >=dev-libs/glib-2.0 sys-libs/zlib python? ( python_targets_python3_8? ( >=dev-lang/python-3.8.12_p1-r1:3.8[ncurses,readline] ) python_targets_python3_9? ( >=dev-lang/python-3.9.9-r1:3.9[ncurses,readline] ) python_targets_python3_10? ( >=dev-lang/python-3.10.0_p1-r1:3.10[ncurses,readline] ) ) systemtap? ( dev-util/systemtap ) xattr? ( sys-apps/attr ) dev-libs/libxml2 >=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 ) bpf? ( dev-libs/libbpf:= ) 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 ) fuse? ( >=sys-fs/fuse-3.1:3 ) 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-cluster/rdma-core ) iscsi? ( net-libs/libiscsi ) io-uring? ( sys-libs/liburing:= ) jack? ( virtual/jack ) jemalloc? ( dev-libs/jemalloc ) jpeg? ( virtual/jpeg:0= ) lzo? ( dev-libs/lzo:2 ) multipath? ( sys-fs/multipath-tools ) ncurses? ( sys-libs/ncurses:=[unicode(+)] sys-libs/ncurses:= ) 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(+)] ) pam? ( sys-libs/pam ) png? ( media-libs/libpng:0= ) pulseaudio? ( media-sound/pulseaudio ) rbd? ( sys-cluster/ceph ) sasl? ( dev-libs/cyrus-sasl ) sdl? ( media-libs/libsdl2[video] media-libs/libsdl2 ) sdl-image? ( media-libs/sdl2-image ) seccomp? ( >=sys-libs/libseccomp-2.1.0 ) slirp? ( net-libs/libslirp ) 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 ) udev? ( virtual/libudev:= ) 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 ) zstd? ( >=app-arch/zstd-1.4.0 ) ) qemu_softmmu_targets_i386? ( pin-upstream-blobs? ( ~sys-firmware/edk2-ovmf-202105[binary] ~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/seabios-1.14.0[binary,seavgabios] ~sys-firmware/sgabios-0.1_pre10[binary] ) !pin-upstream-blobs? ( >=sys-firmware/edk2-ovmf-202105 sys-firmware/ipxe[qemu] >=sys-firmware/seabios-1.14.0[seavgabios] sys-firmware/sgabios ) ) qemu_softmmu_targets_x86_64? ( pin-upstream-blobs? ( ~sys-firmware/edk2-ovmf-202105[binary] ~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/seabios-1.14.0[binary,seavgabios] ~sys-firmware/sgabios-0.1_pre10[binary] ) !pin-upstream-blobs? ( >=sys-firmware/edk2-ovmf-202105 sys-firmware/ipxe[qemu] >=sys-firmware/seabios-1.14.0[seavgabios] sys-firmware/sgabios ) ) qemu_softmmu_targets_ppc? ( pin-upstream-blobs? ( ~sys-firmware/seabios-1.14.0[binary,seavgabios] ) !pin-upstream-blobs? ( >=sys-firmware/seabios-1.14.0[seavgabios] ) ) qemu_softmmu_targets_ppc64? ( pin-upstream-blobs? ( ~sys-firmware/seabios-1.14.0[binary,seavgabios] ) !pin-upstream-blobs? ( >=sys-firmware/seabios-1.14.0[seavgabios] ) ) acct-group/kvm selinux? ( sec-policy/selinux-qemu sys-libs/libselinux ) " declare -- README_GENTOO_SUFFIX="" declare REPOSITORY declare REQUIRED_USE="|| ( python_targets_python3_8 python_targets_python3_9 python_targets_python3_10 ) 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 ) qemu_softmmu_targets_x86_64? ( fdt ) sdl-image? ( sdl ) static? ( static-user !alsa !gtk !jack !opengl !pam !pulseaudio !plugins !rbd !snappy !udev ) static-user? ( !plugins ) vhost-user-fs? ( caps seccomp ) virgl? ( opengl ) virtfs? ( caps xattr ) vte? ( gtk ) multipath? ( udev ) plugins? ( !static !static-user ) " declare RESTRICT="test" 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_DISTRO="Gentoo" declare -x ROS_MASTER_URI="http://localhost:11311/" declare -x ROS_MESSAGES="" declare -x ROS_PACKAGE_PATH="/usr/share/ros_packages" declare -x ROS_ROOT="/usr/share/ros" declare -x RUBY_TARGETS="" declare -x RUSTFLAGS="-Ctarget-cpu=native -v" declare -x RUST_TEST_TASKS="4" declare -x RUST_TEST_THREADS="4" declare -x S="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/work/qemu-6.2.0" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_METHOD="any" declare -x SANDBOX_PREDICT="/var/tmp/portage/app-emulation/qemu-6.2.0-r3/homedir:/dev/crypto:/var/cache/man" 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/:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp/:/var/tmp/portage:/var/tmp/portage/app-emulation/qemu-6.2.0-r3/homedir/.bash_history" declare -x SANE_BACKENDS="" declare -x SBCL_HOME="/usr/lib64/sbcl" declare -x SBCL_SOURCE_ROOT="/usr/lib64/sbcl/src" declare -x SCHEME_LIBRARY_PATH="/usr/share/slib/" declare -- SEABIOS_VERSION="1.14.0" declare -x SHELL="/bin/bash" declare -x SLOT="0" declare -- SOFTMMU_TOOLS_DEPEND=" dev-libs/libxml2[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 ) bpf? ( dev-libs/libbpf:= ) 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(+)] ) fuse? ( >=sys-fs/fuse-3.1:3[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-cluster/rdma-core[static-libs(+)] ) iscsi? ( net-libs/libiscsi ) io-uring? ( sys-libs/liburing:=[static-libs(+)] ) jack? ( virtual/jack ) jemalloc? ( dev-libs/jemalloc ) jpeg? ( virtual/jpeg:0=[static-libs(+)] ) lzo? ( dev-libs/lzo:2[static-libs(+)] ) multipath? ( sys-fs/multipath-tools ) ncurses? ( sys-libs/ncurses:=[unicode(+)] sys-libs/ncurses:=[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(+)] ) pam? ( sys-libs/pam ) png? ( media-libs/libpng:0=[static-libs(+)] ) pulseaudio? ( media-sound/pulseaudio ) rbd? ( sys-cluster/ceph ) sasl? ( dev-libs/cyrus-sasl[static-libs(+)] ) sdl? ( media-libs/libsdl2[video] media-libs/libsdl2[static-libs(+)] ) sdl-image? ( media-libs/sdl2-image[static-libs(+)] ) seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] ) slirp? ( net-libs/libslirp[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(+)] ) udev? ( virtual/libudev:= ) 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(+)] ) zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] ) " declare -i SRANDOM="2788308935" declare SRC_URI="https://download.qemu.org/qemu-6.2.0.tar.xz" declare -x STRINGS="x86_64-pc-linux-gnu-strings" declare -x SYMLINK_LIB="no" declare -x TERMINFO="/etc/terminfo" declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1" declare -x UNCACHED_ERR_FD="" declare -x USE="abi_x86_64 aio amd64 bzip2 caps curl doc elibc_glibc fdt filecaps infiniband jpeg kernel_linux ncurses nls oss pam pin-upstream-blobs png python_targets_python3_9 qemu_softmmu_targets_i386 qemu_softmmu_targets_x86_64 qemu_user_targets_i386 qemu_user_targets_x86_64 seccomp slirp udev userland_GNU vhost-net vnc xattr" 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-linux arm arm64 arm64-macos hppa ia64 m68k mips ppc ppc64 ppc64-linux ppc-macos riscv s390 sparc sparc64-solaris sparc-solaris x64-cygwin x64-macos x64-solaris x64-winnt x86 x86-linux x86-solaris x86-winnt" declare -x USE_EXPAND_VALUES_ELIBC="bionic Cygwin Darwin glibc mingw musl SunOS Winnt" declare -x USE_EXPAND_VALUES_KERNEL="Darwin linux 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-202105[binary] ~sys-firmware/ipxe-1.21.1[binary,qemu] ~sys-firmware/seabios-1.14.0[binary,seavgabios] ~sys-firmware/sgabios-0.1_pre10[binary] ) !pin-upstream-blobs? ( >=sys-firmware/edk2-ovmf-202105 sys-firmware/ipxe[qemu] >=sys-firmware/seabios-1.14.0[seavgabios] sys-firmware/sgabios )" declare -x XTABLES_ADDONS="" 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_ECLASS="1" declare -- _MULTILIB_ECLASS="1" declare -- _MULTIPROCESSING_ECLASS="1" declare -- _PAX_UTILS_ECLASS="1" declare -a _PYTHON_ALL_IMPLS=([0]="pypy3" [1]="python3_8" [2]="python3_9" [3]="python3_10") declare -a _PYTHON_HISTORICAL_IMPLS=([0]="jython2_7" [1]="pypy" [2]="pypy1_8" [3]="pypy1_9" [4]="pypy2_0" [5]="python2_5" [6]="python2_6" [7]="python2_7" [8]="python3_1" [9]="python3_2" [10]="python3_3" [11]="python3_4" [12]="python3_5" [13]="python3_6" [14]="python3_7") declare -- _PYTHON_R1="1" declare -a _PYTHON_SUPPORTED_IMPLS=([0]="python3_8" [1]="python3_9" [2]="python3_10") declare -a _PYTHON_UNSUPPORTED_IMPLS=([0]="pypy3") 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 -x gl_cv_type_time_t_bits_macro="no" declare -- i="1" 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_avr qemu_softmmu_targets_rx qemu_softmmu_targets_tricore" 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_hexagon qemu_user_targets_mipsn32 qemu_user_targets_mipsn32el qemu_user_targets_ppc64abi32 qemu_user_targets_ppc64le qemu_user_targets_sparc32plus" declare -a user_bins=([0]="qemu-i386" [1]="qemu-x86_64") declare -- user_targets="i386-linux-user,x86_64-linux-user" SwitchGCC () { local latest=$(gcc-config --list-profiles --nocolor | cut -f3 -d' ' -s | grep -E 'x86_64-(pc|gentoo)-linux-(gnu|musl)-.*[0-9]$'| tail -n 1); local current=$(gcc -dumpversion | cut -f1 -d'.'); if gcc-config --list-profiles --nocolor | grep -q -F "$latest *"; then echo "SwitchGCC: $current is $latest"; else echo "SwitchGCC: switch from $current to $latest" >> $taskfile.history; gcc-config --nocolor $latest; source_profile; add2backlog "@preserved-rebuild"; if grep -q '^LIBTOOL="rdlibtool"' /etc/portage/make.conf; then add2backlog "sys-devel/slibtool"; fi; add2backlog "sys-devel/libtool"; add2backlog "%emerge --unmerge sys-devel/gcc:$current"; fi } declare -fx SwitchGCC __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 } __eapi8_src_prepare () { local f; if ___is_indexed_array_var PATCHES; then [[ ${#PATCHES[@]} -gt 0 ]] && eapply -- "${PATCHES[@]}"; else if [[ -n ${PATCHES} ]]; then eapply -- ${PATCHES}; fi; fi; eapply_user } _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##*/}"; local all_opts=(-p1 -f -g0 --no-backup-if-mismatch "${patch_options[@]}"); if ${patch_cmd} "${all_opts[@]}" --dry-run -s -F0 < "${f}" &> /dev/null; then all_opts+=(-s -F0); fi; ${patch_cmd} "${all_opts[@]}" < "${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_EPYTHON () { if [[ -z ${EPYTHON} ]]; then die "EPYTHON unset, invalid call context"; fi } _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_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 sysconfig; print(sysconfig.get_path("purelib"))') || 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 sysconfig; print(sysconfig.get_path("platinclude"))') || 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 python2* | python3.6 | python3.7*) val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}) || die ;; python*) val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}-embed) || 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.8) PYTHON_PKG_DEP=">=dev-lang/python-3.8.12_p1-r1:3.8" ;; python3.9) PYTHON_PKG_DEP=">=dev-lang/python-3.9.9-r1:3.9" ;; python3.10) PYTHON_PKG_DEP=">=dev-lang/python-3.10.0_p1-r1:3.10" ;; python*) PYTHON_PKG_DEP="dev-lang/python:${impl#python}" ;; pypy) PYTHON_PKG_DEP='>=dev-python/pypy-7.3.0:0=' ;; pypy3) PYTHON_PKG_DEP='>=dev-python/pypy3-7.3.7-r1:0=' ;; *) 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_gen_usedep () { debug-print-function ${FUNCNAME} "${@}"; local impl matches=(); _python_verify_patterns "${@}"; for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then matches+=("python_targets_${impl}(-)?"); fi; done; [[ -n ${matches[@]} ]] || die "No supported implementations match python_gen_usedep patterns: ${@}"; local out=${matches[@]}; echo "${out// /,}" } _python_impl_matches () { [[ ${#} -ge 1 ]] || die "${FUNCNAME}: takes at least 1 parameter"; [[ ${#} -eq 1 ]] && return 0; local impl=${1} pattern; shift; for pattern in "$@"; do case ${pattern} in -2 | python2* | pypy) if [[ ${EAPI} != [67] ]]; then eerror; eerror "Python 2 is no longer supported in Gentoo, please remove Python 2"; eerror "${FUNCNAME[1]} calls."; die "Passing ${pattern} to ${FUNCNAME[1]} is banned in EAPI ${EAPI}"; fi ;; -3) if [[ ${EAPI} != [67] ]]; then eerror; eerror "Python 2 is no longer supported in Gentoo, please remove Python 2"; eerror "${FUNCNAME[1]} calls."; die "Passing ${pattern} to ${FUNCNAME[1]} is banned in EAPI ${EAPI}"; fi; return 0 ;; *) [[ ${impl/./_} == ${pattern/./_} ]] && return 0 ;; esac; done; return 1 } _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; if [[ ! -n ${PYTHON_COMPAT_NO_STRICT} ]]; then for i in "${PYTHON_COMPAT[@]}"; do case ${i} in jython2_7 | pypy | pypy1_[89] | pypy2_0 | pypy3 | python2_[5-7] | python3_[1-9] | python3_10) ;; *) if has "${i}" "${_PYTHON_ALL_IMPLS[@]}" "${_PYTHON_HISTORICAL_IMPLS[@]}"; then die "Mis-synced patterns in _python_set_impls: missing ${i}"; else die "Invalid implementation in PYTHON_COMPAT: ${i}"; fi ;; esac; done; fi; 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 if [[ -n ${_PYTHON_ALLOW_PY27} ]] && has python2_7 "${PYTHON_COMPAT[@]}"; then supp+=(python2_7); else die "No supported implementation in PYTHON_COMPAT."; fi; 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." } _python_verify_patterns () { debug-print-function ${FUNCNAME} "${@}"; local impl pattern; for pattern in "$@"; do [[ ${pattern} == -[23] ]] && continue; for impl in "${_PYTHON_ALL_IMPLS[@]}" "${_PYTHON_HISTORICAL_IMPLS[@]}"; do [[ ${impl} == ${pattern/./_} ]] && continue 2; done; die "Invalid implementation pattern: ${pattern}"; done } _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 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}{,-embed}.pc || die; local EPYTHON PYTHON; _python_export "${impl}" EPYTHON PYTHON; local pyver pyother; if [[ ${EPYTHON} != python2* ]]; 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${pyver}.pc || die; if [[ ${EPYTHON} != python[23].[67] ]]; then ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}-embed.pc "${workdir}"/pkgconfig/python${pyver}-embed.pc || die; fi; 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 } _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 () { local -x PKG_CONFIG_FDO_SYSROOT_RULES=1; if $($(tc-getPKG_CONFIG) --exists udev); then local udevdir="$($(tc-getPKG_CONFIG) --variable=udevdir udev)"; echo "${udevdir#${EPREFIX%/}}"; else echo /lib/udev; fi } build_sphinx () { debug-print-function ${FUNCNAME} "${@}"; [[ ${#} -eq 1 ]] || die "${FUNCNAME} takes 1 arg: "; local dir=${1}; sed -i -e 's:^intersphinx_mapping:disabled_&:' "${dir}"/conf.py || die; "${EPYTHON}" -m sphinx.cmd.build -b html -d "${dir}"/_build/doctrees "${dir}" "${dir}"/_build/html || die; HTML_DOCS+=("${dir}/_build/html/.") } 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} -gt 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} -gt 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} -gt 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}"/configs/targets/ > /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_malloc () { if [[ ! ${buildtype} == "user" ]]; then usex "${1}" "--enable-malloc=${1}" ""; fi } conf_notuser () { if [[ ${buildtype} == "user" ]]; then echo "--disable-${2:-$1}"; else use_enable "$@"; fi } conf_softmmu () { if [[ ${buildtype} == "softmmu" ]]; then use_enable "$@"; else echo "--disable-${2:-$1}"; fi } conf_tools () { if [[ ${buildtype} == "tools" ]]; then use_enable "$@"; else echo "--disable-${2:-$1}"; 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##*/}"; local all_opts=(-p1 -f -g0 --no-backup-if-mismatch "${patch_options[@]}"); if ${patch_cmd} "${all_opts[@]}" --dry-run -s -F0 < "${f}" &> /dev/null; then all_opts+=(-s -F0); fi; ${patch_cmd} "${all_opts[@]}" < "${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 columns=${COLUMNS:-0}; [[ ${columns} == 0 ]] && columns=$(set -- $( ( stty size /dev/null || echo 24 80 ) ; echo $2); (( columns > 0 )) || (( columns = 80 )); 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 if [[ -z ${applied} ]]; then einfo "${PORTAGE_COLOR_INFO}$(for ((column = 0; column < ${columns} - 3; column++)); do echo -n =; done)${PORTAGE_COLOR_NORMAL}"; einfo "Applying user patches from ${basedir} ..."; fi; eapply "${f}"; applied=1; fi; done < <(printf -- '%s\0' "${!_eapply_user_patches[@]}" | LC_ALL=C sort -z); fi; ${prev_shopt}; if [[ -n ${applied} ]]; then einfo "User patches applied."; einfo "${PORTAGE_COLOR_INFO}$(for ((column = 0; column < ${columns} - 3; column++)); do echo -n =; done)${PORTAGE_COLOR_NORMAL}"; fi } econf_build () { local CBUILD=${CBUILD:-${CHOST}}; tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@" } einstalldocs () { ( if [[ $(declare -p DOCS 2>/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 ) } epytest () { debug-print-function ${FUNCNAME} "${@}"; _python_check_EPYTHON; local color; case ${NOCOLOR} in true | yes) color=no ;; *) color=yes ;; esac; local args=(-vv -ra -l -Wdefault "--color=${color}" -p no:cov -p no:flake8 -p no:flakes -p no:pylint); local x; for x in "${EPYTEST_DESELECT[@]}"; do args+=(--deselect "${x}"); done; for x in "${EPYTEST_IGNORE[@]}"; do args+=(--ignore "${x}"); done; set -- "${EPYTHON}" -m pytest "${args[@]}" "${@}"; echo "${@}" 1>&2; "${@}" || die -n "pytest failed with ${EPYTHON}"; local ret=${?}; rm -rf .hypothesis .pytest_cache || die; return ${ret} } eunittest () { debug-print-function ${FUNCNAME} "${@}"; _python_check_EPYTHON; set -- "${EPYTHON}" -m unittest_or_fail discover -v "${@}"; echo "${@}" 1>&2; "${@}" || die -n "Tests failed with ${EPYTHON}"; return ${?} } fcaps () { debug-print-function ${FUNCNAME} "$@"; if [[ ${EUID} != 0 ]]; then einfo "Insufficient privileges to execute ${FUNCNAME}, skipping."; return 0; fi; 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; if ! out=$(LC_ALL=C setcap "${caps}" "${file}" 2>&1); then case ${out} in *"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)" ;; *) eerror "Setting caps '${caps}' on file '${file}' failed:"; eerror "${out}"; die "could not set caps" ;; esac; else setcap -v "${caps}" "${file}" > /dev/null || die "Checking caps '${caps}' on '${file}' failed"; continue; 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 <> "${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_nproc () { local nproc; if type -P nproc &> /dev/null; then nproc=$(nproc); fi; if [[ -z ${nproc} ]] && type -P sysctl &> /dev/null; then nproc=$(sysctl -n hw.ncpu 2>/dev/null); fi; if [[ -z ${nproc} ]] && type -P python &> /dev/null; then nproc=$(python -c 'import multiprocessing; print(multiprocessing.cpu_count());' 2>/dev/null); fi; if [[ -n ${nproc} ]]; then echo "${nproc}"; else echo "${1:-1}"; fi } get_running_version () { if ! use kernel_linux; then die "${FUNCNAME}() called on non-Linux system, please fix the ebuild"; fi; local kv=$(uname -r); if [[ -f ${ROOT%/}/lib/modules/${kv}/source/Makefile ]]; then KERNEL_DIR=$(readlink -f "${ROOT%/}/lib/modules/${kv}/source"); if [[ -f ${ROOT%/}/lib/modules/${kv}/build/Makefile ]]; then KBUILD_OUTPUT=$(readlink -f "${ROOT%/}/lib/modules/${kv}/build"); fi; get_version && return 0; fi; KV_FULL=${kv}; 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}; 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; kernel_get_makefile; if [[ ! -s ${KERNEL_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}; if [[ -z ${OUTPUT_DIR} ]]; then local mkfunc=$(get_makefile_extract_function "${KERNEL_MAKEFILE}"); OUTPUT_DIR=$(${mkfunc} KBUILD_OUTPUT "${KERNEL_MAKEFILE}"); fi; KV_MAJOR=$(getfilevar VERSION "${KERNEL_MAKEFILE}"); KV_MINOR=$(getfilevar PATCHLEVEL "${KERNEL_MAKEFILE}"); KV_PATCH=$(getfilevar SUBLEVEL "${KERNEL_MAKEFILE}"); KV_EXTRA=$(getfilevar 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}"; 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 "; else basefname="$(basename ${2})"; basedname="$(dirname ${2})"; unset ARCH; [[ ${EAPI:-0} == [0123] ]] && function nonfatal () { "$@" }; echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | nonfatal emake -C "${basedname}" --no-print-directory M="${T}" dot-config=0 need-config= ${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 "; else ${mycat} "${2}" | sed -n -e "/^[[:space:]]*${1}[[:space:]]*:\\?=[[:space:]]*\(.*\)\$/{ s,^[^=]*[[:space:]]*=[[:space:]]*,,g ; s,[[:space:]]*\$,,g ; p }"; 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 " 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_get_makefile () { [[ -s ${KV_DIR}/GNUMakefile ]] && KERNEL_MAKEFILE="${KV_DIR}/GNUMakefile" && return; [[ -s ${KV_DIR}/makefile ]] && KERNEL_MAKEFILE="${KV_DIR}/makefile" && return; [[ -s ${KV_DIR}/Makefile ]] && KERNEL_MAKEFILE="${KV_DIR}/Makefile" && return } 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; 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"; ver_test "${KV_MAJOR:-0}.${KV_MINOR:-0}.${KV_PATCH:-0}" "${operator}" "${1:-${KV_MAJOR:-0}}.${2:-${KV_MINOR:-0}}.${3:-${KV_PATCH:-0}}" } 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; [ -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/: .*$//' } makeopts_jobs () { [[ $# -eq 0 ]] && set -- "${MAKEOPTS}"; local jobs=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' -e "s:.*[[:space:]](-[a-z]*j|--jobs)[[:space:]].*:${2:-999}:p"); echo ${jobs:-1} } makeopts_loadavg () { [[ $# -eq 0 ]] && set -- "${MAKEOPTS}"; local lavg=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load)[=[:space:]])[[:space:]]*([0-9]+(\.[0-9]+)?)[[:space:]].*:\3:p' -e "s:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:${2:-999}:p"); echo ${lavg:-${2:-999}} } multibuild_copy_sources () { debug-print-function ${FUNCNAME} "${@}"; local _MULTIBUILD_INITIAL_BUILD_DIR=${BUILD_DIR:-${S}}; einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}"; function _multibuild_create_source_copy () { einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}"; cp -p -R --reflink=auto "${_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[-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 () { debug-print-function ${FUNCNAME} "${@}"; local src=${1}; local dest=${2}; cp -a --reflink=auto "${src}"/. "${dest}"/ || die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed"; rm -rf "${src}" || die } multilib_env () { local CTARGET=${1:-${CTARGET}}; local cpu=${CTARGET%%*-}; if [[ ${CTARGET} = *-musl* ]]; then : ${MULTILIB_ABIS=default}; : ${DEFAULT_ABI=default}; export MULTILIB_ABIS DEFAULT_ABI; return; fi; 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 ;; loongarch64*) export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d}; export CHOST_lp64d=${CTARGET}; export CTARGET_lp64d=${CTARGET}; export LIBDIR_lp64d=${LIBDIR_lp64d-lib64}; : ${MULTILIB_ABIS=lp64d}; : ${DEFAULT_ABI=lp64d} ;; 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*) : ${MULTILIB_ABIS=lp64d lp64 ilp32d ilp32}; : ${DEFAULT_ABI=lp64d}; local __libdir_riscvdefaultabi_variable="LIBDIR_${DEFAULT_ABI}"; local __libdir_riscvdefaultabi=${!__libdir_riscvdefaultabi_variable}; export ${__libdir_riscvdefaultabi_variable}=${__libdir_riscvdefaultabi:-lib64}; export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d -march=rv64gc}; export CHOST_lp64d=${CTARGET}; export CTARGET_lp64d=${CTARGET}; export LIBDIR_lp64d=${LIBDIR_lp64d-lib64/lp64d}; export CFLAGS_lp64=${CFLAGS_lp64--mabi=lp64 -march=rv64imac}; export CHOST_lp64=${CTARGET}; export CTARGET_lp64=${CTARGET}; export LIBDIR_lp64=${LIBDIR_lp64-lib64/lp64}; export CFLAGS_ilp32d=${CFLAGS_ilp32d--mabi=ilp32d -march=rv32imafdc}; export CHOST_ilp32d=${CTARGET/riscv64/riscv32}; export CTARGET_ilp32d=${CTARGET/riscv64/riscv32}; export LIBDIR_ilp32d=${LIBDIR_ilp32d-lib32/ilp32d}; export CFLAGS_ilp32=${CFLAGS_ilp32--mabi=ilp32 -march=rv32imac}; export CHOST_ilp32=${CTARGET/riscv64/riscv32}; export CTARGET_ilp32=${CTARGET/riscv64/riscv32}; export LIBDIR_ilp32=${LIBDIR_ilp32-lib32/ilp32} ;; riscv32*) : ${MULTILIB_ABIS=ilp32d ilp32}; : ${DEFAULT_ABI=ilp32d}; local __libdir_riscvdefaultabi_variable="LIBDIR_${DEFAULT_ABI}"; local __libdir_riscvdefaultabi=${!__libdir_riscvdefaultabi_variable}; export ${__libdir_riscvdefaultabi_variable}=${__libdir_riscvdefaultabi:-lib}; export CFLAGS_ilp32d=${CFLAGS_ilp32d--mabi=ilp32d -march=rv32imafdc}; export CHOST_ilp32d=${CTARGET}; export CTARGET_ilp32d=${CTARGET}; export LIBDIR_ilp32d=${LIBDIR_ilp32d-lib32/ilp32d}; export CFLAGS_ilp32=${CFLAGS_ilp32--mabi=ilp32 -march=rv32imac}; export CHOST_ilp32=${CTARGET}; export CTARGET_ilp32=${CTARGET}; export LIBDIR_ilp32=${LIBDIR_ilp32-lib32/ilp32} ;; 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; local save_restore_variables=(CBUILD CHOST AR CC CXX F77 FC LD NM OBJCOPY OBJDUMP PKG_CONFIG RANLIB READELF STRINGS STRIP PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG_SYSTEM_INCLUDE_PATH PKG_CONFIG_SYSTEM_LIBRARY_PATH); if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then for v in "${save_restore_variables[@]}"; 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 "${save_restore_variables[@]}"; 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 AR="$(tc-getAR)"; 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 NM="$(tc-getNM)"; export OBJCOPY="$(tc-getOBJCOPY)"; export OBJDUMP="$(tc-getOBJDUMP)"; export PKG_CONFIG="$(tc-getPKG_CONFIG)"; export RANLIB="$(tc-getRANLIB)"; export READELF="$(tc-getREADELF)"; export STRINGS="$(tc-getSTRINGS)"; export STRIP="$(tc-getSTRIP)"; export CHOST=$(get_abi_CHOST $1); export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig; export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig; export PKG_CONFIG_SYSTEM_INCLUDE_PATH=${EPREFIX}/usr/include; export PKG_CONFIG_SYSTEM_LIBRARY_PATH=${EPREFIX}/$(get_libdir):${EPREFIX}/usr/$(get_libdir); fi } number_abis () { set -- `get_install_abis`; echo $# } 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 requires 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_copy_sources () { debug-print-function ${FUNCNAME} "${@}"; local MULTIBUILD_VARIANTS; _python_obtain_impls; multibuild_copy_sources } 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).'; local includedir=$(python_get_includedir); local d=${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).'; local d; if [[ ${_PYTHON_MODULEROOT} == /* ]]; then d=${_PYTHON_MODULEROOT}; else local sitedir=$(python_get_sitedir); d=${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_export () { debug-print-function ${FUNCNAME} "${@}"; eqawarn "python_export() is part of private eclass API."; eqawarn "Please call python_get*() instead."; [[ ${EAPI} == [67] ]] || die "${FUNCNAME} banned in EAPI ${EAPI}"; _python_export "${@}" } 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 error=1; fi; else if [[ ${i} == *python3 ]]; then from=python3; else from=python; fi; fi; break ;; *python[23].[0-9] | *python3.[1-9][0-9] | *pypy | *pypy3 | *jython[23].[0-9]) if [[ ! -n ${force} ]]; then error=1; else case "${i}" in *python[23].[0-9]) from="python[23].[0-9]" ;; *python3.[1-9][0-9]) from="python3.[1-9][0-9]" ;; *pypy) from="pypy" ;; *pypy3) from="pypy3" ;; *jython[23].[0-9]) from="jython[23].[0-9]" ;; *) 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 eerror "QA error: ${FUNCNAME}, ${path#${D%/}} did not match any fixable files."; if [[ -n ${any_correct} ]]; then eerror "All files have ${EPYTHON} shebang already."; else eerror "There are no Python files in specified directory."; fi; die "${FUNCNAME} did not match any fixable files"; 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}; shift; local i PYTHON_PKG_DEP out=; _python_verify_patterns "${@}"; for i in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${i}" "${@}"; then local PYTHON_USEDEP="python_targets_${i}(-)"; local PYTHON_SINGLE_USEDEP="python_single_target_${i}(-)"; _python_export "${i}" PYTHON_PKG_DEP; local i_depstr=${depstr//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}}; i_depstr=${i_depstr//\$\{PYTHON_SINGLE_USEDEP\}/${PYTHON_SINGLE_USEDEP}}; out="( ${PYTHON_PKG_DEP/:0=/:0} ${i_depstr} ) ${out}"; fi; done; echo "|| ( ${out})" } python_gen_cond_dep () { debug-print-function ${FUNCNAME} "${@}"; local impl matches=(); local dep=${1}; shift; _python_verify_patterns "${@}"; 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; _python_verify_patterns "${@}"; for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; 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} "${@}"; if [[ ${EBUILD_PHASE} == setup ]]; then eqawarn "python_gen_usedep() is deprecated. Please use python_gen_cond_dep instead."; fi; [[ ${EAPI} == [67] ]] || die "${FUNCNAME} banned in EAPI ${EAPI}"; _python_gen_usedep "${@}" } python_gen_useflags () { debug-print-function ${FUNCNAME} "${@}"; local impl matches=(); _python_verify_patterns "${@}"; for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do if _python_impl_matches "${impl}" "${@}"; then matches+=("python_targets_${impl}"); fi; done; echo "${matches[@]}" } 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_includedir () { debug-print-function ${FUNCNAME} "${@}"; _python_export "${@}" PYTHON_INCLUDEDIR; echo "${PYTHON_INCLUDEDIR}" } 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_is_installed () { local impl=${1:-${EPYTHON}}; [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON"; local hasv_args=(-b); [[ ${EAPI} == 6 ]] && hasv_args=(--host-root); local PYTHON_PKG_DEP; _python_export "${impl}" PYTHON_PKG_DEP; has_version "${hasv_args[@]}" "${PYTHON_PKG_DEP}" } python_is_python3 () { eqawarn "${FUNCNAME} is deprecated, as Python 2 is not supported anymore"; [[ ${EAPI} == [67] ]] || die "${FUNCNAME} banned in EAPI ${EAPI}"; local impl=${1:-${EPYTHON}}; [[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON"; [[ ${impl} == python3* || ${impl} == pypy3 ]] } python_moduleinto () { debug-print-function ${FUNCNAME} "${@}"; _PYTHON_MODULEROOT=${1} } python_newexe () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; [[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} "; local wrapd=${_PYTHON_SCRIPTROOT:-/usr/bin}; local f=${1}; local newfn=${2}; local scriptdir=$(python_get_scriptdir); local d=${scriptdir#${EPREFIX}}; ( dodir "${wrapd}"; exeopts -m 0755; exeinto "${d}"; newexe "${f}" "${newfn}" || return ${?} ); local dosym=dosym; [[ ${EAPI} == [67] ]] && dosym=dosym8; "${dosym}" -r /usr/lib/python-exec/python-exec2 "${wrapd}/${newfn}"; 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; [[ -x ${PYTHON} ]] || die "PYTHON (${PYTHON}) is not executable"; 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 jobs=$(makeopts_jobs "${MAKEOPTS}" INF); [[ ${jobs} == INF ]] && jobs=$(get_nproc); 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}" ;; python3.[5678] | pypy3) "${PYTHON}" -m compileall -j "${jobs}" -q -f -d "${instpath}" "${d}"; "${PYTHON}" -O -m compileall -j "${jobs}" -q -f -d "${instpath}" "${d}"; "${PYTHON}" -OO -m compileall -j "${jobs}" -q -f -d "${instpath}" "${d}" ;; python*) "${PYTHON}" -m compileall -j "${jobs}" -o 0 -o 1 -o 2 --hardlink-dupes -q -f -d "${instpath}" "${d}" ;; *) "${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}" ;; esac; done } 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 local dosym=dosym; [[ ${EAPI} == [67] ]] && dosym=dosym8; "${dosym}" -r /usr/lib/python-exec/python-exec2 "${f#${ED}}"; done } python_scriptinto () { debug-print-function ${FUNCNAME} "${@}"; _PYTHON_SCRIPTROOT=${1} } python_setup () { debug-print-function ${FUNCNAME} "${@}"; local has_check_deps; declare -f python_check_deps > /dev/null && has_check_deps=1; if [[ ! -n ${has_check_deps} ]]; then _python_validate_useflags; fi; local pycompat=("${PYTHON_COMPAT[@]}"); if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then pycompat=(${PYTHON_COMPAT_OVERRIDE}); fi; local found; _python_verify_patterns "${@}"; 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}(-)"; local PYTHON_SINGLE_USEDEP="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; einfo "Using ${EPYTHON} in global scope" } python_wrapper_setup () { debug-print-function ${FUNCNAME} "${@}"; eqawarn "python_wrapper_setup() is part of private eclass API."; eqawarn "Please call python_setup() instead."; [[ ${EAPI} == [67] ]] || die "${FUNCNAME} banned in EAPI ${EAPI}"; _python_wrapper_setup "${@}" } qeerror () { qout eerror "${@}" } qeinfo () { qout einfo "${@}" } qemu_python_install () { python_domodule "${S}/python/qemu"; 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 --localstatedir=/var --disable-bsd-user --disable-containers --disable-guest-agent --disable-strip --with-git-submodules=ignore --disable-tcg-interpreter --disable-werror --disable-gcrypt --python="${PYTHON}" --cc="$(tc-getCC)" --cxx="$(tc-getCXX)" --host-cc="$(tc-getBUILD_CC)" $(use_enable alsa) $(use_enable debug debug-info) $(use_enable debug debug-tcg) $(use_enable jack) $(use_enable nls gettext) $(use_enable oss) $(use_enable plugins) $(use_enable pulseaudio pa) $(use_enable selinux) $(use_enable xattr attr)); function conf_notuser () { if [[ ${buildtype} == "user" ]]; then echo "--disable-${2:-$1}"; else use_enable "$@"; fi }; function conf_softmmu () { if [[ ${buildtype} == "softmmu" ]]; then use_enable "$@"; else echo "--disable-${2:-$1}"; fi }; function conf_tools () { if [[ ${buildtype} == "tools" ]]; then use_enable "$@"; else echo "--disable-${2:-$1}"; fi }; function conf_malloc () { if [[ ! ${buildtype} == "user" ]]; then usex "${1}" "--enable-malloc=${1}" ""; fi }; conf_opts+=($(conf_notuser accessibility brlapi) $(conf_notuser aio linux-aio) $(conf_softmmu bpf) $(conf_notuser bzip2) $(conf_notuser capstone) $(conf_notuser caps cap-ng) $(conf_notuser curl) $(conf_tools doc docs) $(conf_notuser fdt) $(conf_notuser fuse) $(conf_notuser glusterfs) $(conf_notuser gnutls) $(conf_notuser gnutls nettle) $(conf_notuser gtk) $(conf_notuser infiniband rdma) $(conf_notuser iscsi libiscsi) $(conf_notuser io-uring linux-io-uring) $(conf_malloc jemalloc) $(conf_notuser jpeg vnc-jpeg) $(conf_notuser kernel_linux kvm) $(conf_notuser lzo) $(conf_notuser multipath mpath) $(conf_notuser ncurses curses) $(conf_notuser nfs libnfs) $(conf_notuser numa) $(conf_notuser opengl) $(conf_notuser pam auth-pam) $(conf_notuser png vnc-png) $(conf_notuser rbd) $(conf_notuser sasl vnc-sasl) $(conf_notuser sdl) $(conf_softmmu sdl-image) $(conf_notuser seccomp) $(conf_notuser slirp slirp system) $(conf_notuser smartcard) $(conf_notuser snappy) $(conf_notuser spice) $(conf_notuser ssh libssh) $(conf_notuser udev libudev) $(conf_notuser usb libusb) $(conf_notuser usbredir usb-redir) $(conf_notuser vde) $(conf_notuser vhost-net) $(conf_notuser vhost-user-fs) $(conf_tools vhost-user-fs virtiofsd) $(conf_notuser virgl virglrenderer) $(conf_softmmu virtfs) $(conf_notuser vnc) $(conf_notuser vte) $(conf_notuser xen) $(conf_notuser xen xen-pci-passthrough) $(conf_notuser xfs xfsctl) --disable-xkbcommon $(conf_notuser zstd)); if [[ ${buildtype} == "user" ]]; then conf_opts+=(--disable-libxml2); else conf_opts+=(--enable-libxml2); fi; if [[ ! ${buildtype} == "user" ]]; then local audio_opts=($(usex pulseaudio pa "") $(usev jack) $(usev sdl) $(usev alsa) $(usev oss)); conf_opts+=(--audio-drv-list=$(IFS=,; echo "${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; tc-is-cross-compiler && conf_opts+=(--cross-prefix="${CHOST}-"); conf_opts+=(${EXTRA_CONF_QEMU}); echo "../configure ${conf_opts[*]}"; cd "${builddir}"; ../configure "${conf_opts[@]}" || die "configure failed" } 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; ( docinto .; dodoc "${T}"/README.gentoo ) || die; 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" } 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-r2 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 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_ppc || 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 AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS; export WINDRES=${CHOST}-windres; MAKEOPTS+=" V=1"; rm -r dtc || die } src_test () { if [[ -n ${softmmu_targets} ]]; then cd "${S}/softmmu-build"; pax-mark m */qemu-system-*; emake check; fi } src_unpack () { default } 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 ;; loongarch*) 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) READELF=$(tc-getBUILD_READELF) "$@" } 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_READELF () { tc-getBUILD_PROG READELF readelf "$@" } tc-getBUILD_STRINGS () { tc-getBUILD_PROG STRINGS strings "$@" } 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-getREADELF () { tc-getPROG READELF readelf "$@" } tc-getSTRINGS () { tc-getPROG STRINGS strings "$@" } 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 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 () { tc-ld-is-gold "$@" && tc-ld-force-bfd "$@" } tc-ld-force-bfd () { if ! tc-ld-is-gold "$@" && ! tc-ld-is-lld "$@"; then return; fi; ewarn "Forcing usage of the BFD linker"; 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"; 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 ;; loongarch*) ninj loongarch loong ;; 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 [[ -n ${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 } 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 retval=0; local fails=(); for dir in "${EROOT%/}"/usr/share/icons/*; do if [[ -f ${dir}/index.theme ]]; then if ! gtk-update-icon-cache -qf "${dir}"; 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 dir in "${fails[@]}"; do eerror "Failed to update cache with icon ${dir}"; 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; local -x PKGSYSTEM_ENABLE_FSYNC=0; ebegin "Updating shared mime info database"; update-mime-database "${EROOT%/}${MIMEINFO_DATABASE_DIR}"; eend $? }