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 -x ALLOW_TEST="network" declare -x ALSA_CARDS="" declare -x AMANDA_CONFIG_NAME="DailySet1" declare -x AMANDA_DBGDIR="/var/tmp/amanda" declare -x AMANDA_GROUP_NAME="amanda" declare -x AMANDA_PORTS="" declare -x AMANDA_PORTS_BOTH="" declare -x AMANDA_PORTS_TCP="" declare -x AMANDA_PORTS_UDP="" declare -x AMANDA_SERVER="17-1-desktop-plasma-systemd-j4-20220301-040035" declare -x AMANDA_SERVER_INDEX="17-1-desktop-plasma-systemd-j4-20220301-040035" declare -x AMANDA_SERVER_TAPE="17-1-desktop-plasma-systemd-j4-20220301-040035" declare -x AMANDA_SERVER_TAPE_DEVICE="/dev/nst0" declare -x AMANDA_TAR="/bin/tar" declare -x AMANDA_TAR_LISTDIR="/var/spool/amanda/tar-lists" declare -x AMANDA_TMPDIR="/var/tmp/amanda" declare -x AMANDA_USER_HOMEDIR="/var/spool/amanda" declare -x AMANDA_USER_NAME="amanda" declare -x ANT_HOME="/usr/share/ant" declare -x APACHE2_MODULES="" declare -x APACHE2_MPMS="" declare -x ARCH="amd64" declare -x AUTOJUMP_ERROR_PATH="/root/.local/share/autojump/errors.log" declare -x AUTOJUMP_SOURCED="1" declare -x AWS_ELB_HOME="/opt/aws-elb-tools" declare BDEPEND=" virtual/pkgconfig opengl? ( virtual/opengl ) python? ( || ( >=dev-lang/python-3.9.9-r1:3.9 >=dev-lang/python-3.8.12_p1-r1:3.8 ) ) virtual/pkgconfig" declare -x BOOTSTRAP_USE="unicode internal-glib pkg-config split-usr xml python_targets_python3_9 multilib systemd udev" declare -x BROWSER="xdg-open" 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 -x CFLAGS="-pipe -march=native -fno-diagnostics-color -O2" declare -x CFLAGS_amd64="-m64" declare -x CFLAGS_default declare -x CFLAGS_x32="-mx32" declare -x CFLAGS_x86="-m32" declare -x CG_COMPILER_EXE="/opt/bin/cgc" declare -x CG_INC_PATH="/opt/nvidia-cg-toolkit/include" declare -x CG_LIB_PATH="/opt/nvidia-cg-toolkit/lib64" declare -x CHOST="x86_64-pc-linux-gnu" declare -x CHOST_amd64="x86_64-pc-linux-gnu" declare -x CHOST_default="x86_64-pc-linux-gnu" declare -x CHOST_x32="x86_64-pc-linux-gnux32" declare -x CHOST_x86="i686-pc-linux-gnu" declare -x COLLECTD_PLUGINS="" declare -x 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 -O2" declare -x DATAPLOT_FILES="/usr/share/dataplot" declare -x DATAPLOT_WEB="OFF" declare -x DEFAULT_ABI="amd64" declare -x DEFINED_PHASES=" config configure info install postinst prepare setup" declare DEPEND=" acct-user/mythtv dev-libs/glib:2 dev-libs/lzo dev-qt/qtcore:5 dev-qt/qtdbus:5 dev-qt/qtgui:5[jpeg] dev-qt/qtnetwork:5 dev-qt/qtscript:5 dev-qt/qtsql:5[mysql] dev-qt/qtwidgets:5 dev-qt/qtxml:5 media-fonts/corefonts media-fonts/dejavu media-fonts/liberation-fonts media-fonts/tex-gyre media-gfx/exiv2:= media-libs/freetype:2 media-libs/libsamplerate media-libs/taglib sys-libs/zlib alsa? ( media-libs/alsa-lib ) autostart? ( net-dialup/mingetty x11-apps/xset x11-wm/evilwm ) bluray? ( dev-libs/libcdio:= media-libs/libbluray:=[java?] sys-fs/udisks:2 ) cec? ( dev-libs/libcec ) dvd? ( dev-libs/libcdio:= media-libs/libdvdcss sys-fs/udisks:2 ) egl? ( media-libs/mesa[egl(+)] ) fftw? ( sci-libs/fftw:3.0=[threads] ) hdhomerun? ( media-libs/libhdhomerun ) ieee1394? ( media-libs/libiec61883 sys-libs/libavc1394 sys-libs/libraw1394 ) jack? ( virtual/jack ) java? ( dev-java/ant-core ) lame? ( media-sound/lame ) lcd? ( app-misc/lcdproc ) libass? ( media-libs/libass:= ) lirc? ( app-misc/lirc ) nvdec? ( x11-drivers/nvidia-drivers ) opengl? ( dev-qt/qtopengl:5 ) pulseaudio? ( media-sound/pulseaudio ) systemd? ( sys-apps/systemd:= ) vaapi? ( x11-libs/libva:=[opengl] ) vdpau? ( x11-libs/libvdpau ) vpx? ( media-libs/libvpx:= ) x264? ( media-libs/x264:= ) X? ( x11-apps/xinit x11-libs/libX11:= x11-libs/libXext:= x11-libs/libXinerama:= x11-libs/libXrandr:= x11-libs/libXv:= x11-libs/libXxf86vm:= x11-misc/wmctrl:= ) x265? ( media-libs/x265 ) xml? ( dev-libs/libxml2:2 ) xmltv? ( dev-perl/XML-LibXML media-tv/xmltv ) xvid? ( media-libs/xvid ) zeroconf? ( dev-libs/openssl:= net-dns/avahi[mdnsresponder-compat] ) dev-lang/yasm x11-base/xorg-proto perl? ( dev-perl/DBD-mysql dev-perl/DBI dev-perl/HTTP-Message dev-perl/IO-Socket-INET6 dev-perl/LWP-Protocol-https dev-perl/Net-UPnP dev-perl/XML-Simple ) python? ( || ( ( >=dev-lang/python-3.9.9-r1:3.9 dev-python/python-dateutil[python_targets_python3_9(-)] dev-python/future[python_targets_python3_9(-)] dev-python/lxml[python_targets_python3_9(-)] dev-python/mysqlclient[python_targets_python3_9(-)] dev-python/requests-cache[python_targets_python3_9(-)] dev-python/simplejson[python_targets_python3_9(-)] ) ( >=dev-lang/python-3.8.12_p1-r1:3.8 dev-python/python-dateutil[python_targets_python3_8(-)] dev-python/future[python_targets_python3_8(-)] dev-python/lxml[python_targets_python3_8(-)] dev-python/mysqlclient[python_targets_python3_8(-)] dev-python/requests-cache[python_targets_python3_8(-)] dev-python/simplejson[python_targets_python3_8(-)] ) ) ) " declare DESCRIPTION="Open Source DVR and media center hub" declare -x DIROPTIONS="-m0755" declare -- DISABLE_AUTOFORMATTING="yes" declare -- DOC_CONTENTS=" Support for metadata lookup changes is added. User configuration required. Details at: https://www.mythtv.org/wiki/Metadata_Lookup_Changes_March_2021 Suppport for Python 2.7 is removed. If a MYSQL server is installed, a mythtv MySQL user and mythconverg database is created if it does not already exist. You will be prompted for your MySQL root password. A mythtv user is maintained by acct-user/mythtv. An existing mythtv user may be modified to the configuration defined by acct-user/mythtv. The mythtv user's primary group is now mythtv. (formerly video) An existing mythtv user may be changed which may alter some functionality. If it breaks mythtv you may need to (choose one): * Restore the original mythtv user * Create custom acct-user/mythtv overlay for your system * Fix you system to use mythtv as daemon only (recommended) Failure to emerge acct-user/mythtv indicates that the existing mythtv user is customized and not changed. Corrective action (choose one): * Ignore emerge failure * Create custom acct-user/mythtv overlay for your system * Fix you system to use mythtv as daemon only * Delete existing user and try again (dangerous) Mythtv is updated to use correct FHS/Gentoo policy paths. Updating mythtv installations may report: * mythtv is in use, cannot update home * There was an error when attempting to update the home directory for mythtv * Please update it manually on your system (as root): * usermod -d /var/lib/mythtv mythtv This can be ignored. The previous default was /home/mythtv. Use caution if you change the home directory. To have this machine operate as recording host for MythTV, mythbackend must be running. Run the following: rc-update add mythbackend default Your recordings folder must be owned 'mythtv'. e.g. chown -R mythtv /var/lib/mythtv Want mythfrontend to start automatically? Set USE=autostart. Details can be found at: https://dev.gentoo.org/~cardoe/mythtv/autostart.html " declare -x DSM_CONFIG="/etc/tivoli/dsm.opt" declare -x DSM_DIR="/opt/tivoli/tsm/client/ba/bin" declare -x DSM_LOG="/var/log/tsm" declare -x DSSP="/usr/bin/dssp" declare -x EAPI="7" declare -x EC2_AMITOOL_HOME="/usr" 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="1646697023.192041" declare -- EPOCHSECONDS="1646697023" declare -x ETCKEEPER_CONF_DIR="/etc/etckeeper" declare -x EXEOPTIONS="-m0755" declare -x FCFLAGS="-pipe -march=native -fno-diagnostics-color -O2" 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 -O2" declare -x FFTOOLS="" declare -x FLTK_DOCDIR="/usr/share/doc/fltk-1.3.5-r4/html" 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/G4EMLOW8.0" 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.4" declare -x G4PARTICLEXSDATA="/usr/share/geant4/data/G4PARTICLEXS4.0" 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 GRDIR="/usr/gr" declare -x GRUB_PLATFORMS="" declare -x GSETTINGS_BACKEND="dconf" declare -x HFILE_PATH="/usr/share/harmonics" declare HOMEPAGE="https://www.mythtv.org https://github.com/MythTV/mythtv" declare IDEPEND declare -x INHERITED=" edos2unix strip-linguas wrapper eutils toolchain-funcs multilib flag-o-matic eapi8-dosym multiprocessing python-utils-r1 python-any-r1 qmake-utils readme.gentoo-r1 systemd user-info" declare -x INPUT_DEVICES="" declare -x INSOPTIONS="-m0644" declare IUSE="alsa altivec asi autostart bluray cdda cdr cec debug dvd dvb egl exif fftw jack java +lame lcd libass lirc nvdec +opengl oss perl pulseaudio python raw systemd vaapi vdpau vpx +wrapper x264 x265 +xml xmltv +xvid +X zeroconf input_devices_joystick v4l ivtv ieee1394 hdpvr hdhomerun vbox ceton " declare -x IUSE_EFFECTIVE="X abi_x86_64 alpha alsa altivec amd64 amd64-linux arm arm64 arm64-macos asi autostart bluray cdda cdr cec ceton debug dvb dvd egl elibc_Cygwin elibc_Darwin elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_musl exif fftw hdhomerun hdpvr hppa ia64 ieee1394 input_devices_joystick ivtv jack java kernel_Darwin kernel_SunOS kernel_Winnt kernel_linux lame lcd libass lirc m68k mips nvdec opengl oss perl ppc ppc-macos ppc64 ppc64-linux prefix prefix-guest prefix-stack pulseaudio python raw riscv s390 sparc sparc-solaris sparc64-solaris systemd userland_BSD userland_GNU v4l vaapi vbox vdpau vpx wrapper x264 x265 x64-cygwin x64-macos x64-solaris x64-winnt x86 x86-linux x86-solaris x86-winnt xml xmltv xvid zeroconf" declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-guest prefix-stack" declare -- IUSE_INPUT_DEVICES="input_devices_joystick" declare -- IUSE_VIDEO_CAPTURE_DEVICES="v4l ivtv ieee1394 hdpvr hdhomerun vbox ceton" declare -x JAVAC="/etc/java-config-2/current-system-vm/bin/javac" declare -x JAVACC_HOME="/usr/share/javacc/" declare -x JAVA_HOME="/etc/java-config-2/current-system-vm" declare -x JDK_HOME="/etc/java-config-2/current-system-vm" declare -x KERNEL="linux" declare -x KERNEL_ABI="amd64" declare -x KEYWORDS="~amd64 ~x86" declare -x L10N="" declare -x LADSPA_PATH="/usr/lib64/ladspa" declare -x LANG="C.UTF8" declare -x LCD_DEVICES="" declare -x LC_COLLATE="C" declare -x LC_MESSAGES="C" 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 LIBOPTIONS="-m0644" declare -x LIBREOFFICE_EXTENSIONS="" declare -x LICENSE="GPL-2+" declare -x LLVM_TARGETS="" declare -x LUA_SINGLE_TARGET="" declare -x LUA_TARGETS="" declare -x LV2_PATH="/usr/lib64/lv2" declare -x MAILTO="tinderbox" declare -x MAKEOPTS="-j4" declare -x MANPAGER="manpager" declare -x MONKEYD_PLUGINS="" 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 -- MY_COMMIT="5824c588db24b4e71a7d94e829e6419f71089297" declare -x NGINX_MODULES_HTTP="" declare -x NGINX_MODULES_MAIL="" declare -x NGINX_MODULES_STREAM="" 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 -x ORACLE_HOME="/usr/lib64/oracle/client" declare -a PATCHES=([0]="/var/tmp/portage/media-tv/mythtv-31.0_p20210731-r1/files/mythtv-30.0_p20190808-respect_LDFLAGS.patch") declare -x PATH="/usr/lib/portage/python3.9/ebuild-helpers/xattr:/usr/lib/portage/python3.9/ebuild-helpers:/opt/c3-4:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/lib/llvm/13/bin:/opt/nvidia-cg-toolkit/bin:/usr/lib64/subversion/bin:/usr/lib/root/6.24/bin:/opt/aws-elb-tools/bin:/usr/bin/cdsclient" declare -x PAX_MARKINGS="none" declare -x PBS_SERVER_HOME="/var/spool/torque" declare PDEPEND="" declare -x PHP_TARGETS="" declare -x PKGSYSTEM_ENABLE_FSYNC="0" 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/mythtv-31.0_p20210731-r1/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 -x PRELINK_PATH_MASK="/usr/bin/bbkeys" 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 PYTHONDOCS_3_9="/usr/share/doc/python-docs-3.9.6/html/library" declare -x PYTHONDONTWRITEBYTECODE="1" declare -x PYTHONPATH="/usr/lib/root/6.24/lib" declare -a PYTHON_COMPAT=([0]="python3_7" [1]="python3_8" [2]="python3_9") declare -- PYTHON_DEPS="|| ( >=dev-lang/python-3.9.9-r1:3.9 >=dev-lang/python-3.8.12_p1-r1:3.8 )" declare -- PYTHON_REQUIRED_USE="I-DO-NOT-EXIST-IN-PYTHON-ANY-R1" declare -x PYTHON_SINGLE_TARGET="" declare -x PYTHON_TARGETS="" declare -x PY_FORCE_COLOR="0" declare -x QEMU_SOFTMMU_TARGETS="" declare -x QEMU_USER_TARGETS="" declare -x QRNADB="/usr/share/qrna/data" declare -x QT_QPA_PLATFORMTHEME="qt5ct" declare RDEPEND=" acct-user/mythtv dev-libs/glib:2 dev-libs/lzo dev-qt/qtcore:5 dev-qt/qtdbus:5 dev-qt/qtgui:5[jpeg] dev-qt/qtnetwork:5 dev-qt/qtscript:5 dev-qt/qtsql:5[mysql] dev-qt/qtwidgets:5 dev-qt/qtxml:5 media-fonts/corefonts media-fonts/dejavu media-fonts/liberation-fonts media-fonts/tex-gyre media-gfx/exiv2:= media-libs/freetype:2 media-libs/libsamplerate media-libs/taglib sys-libs/zlib alsa? ( media-libs/alsa-lib ) autostart? ( net-dialup/mingetty x11-apps/xset x11-wm/evilwm ) bluray? ( dev-libs/libcdio:= media-libs/libbluray:=[java?] sys-fs/udisks:2 ) cec? ( dev-libs/libcec ) dvd? ( dev-libs/libcdio:= media-libs/libdvdcss sys-fs/udisks:2 ) egl? ( media-libs/mesa[egl(+)] ) fftw? ( sci-libs/fftw:3.0=[threads] ) hdhomerun? ( media-libs/libhdhomerun ) ieee1394? ( media-libs/libiec61883 sys-libs/libavc1394 sys-libs/libraw1394 ) jack? ( virtual/jack ) java? ( dev-java/ant-core ) lame? ( media-sound/lame ) lcd? ( app-misc/lcdproc ) libass? ( media-libs/libass:= ) lirc? ( app-misc/lirc ) nvdec? ( x11-drivers/nvidia-drivers ) opengl? ( dev-qt/qtopengl:5 ) pulseaudio? ( media-sound/pulseaudio ) systemd? ( sys-apps/systemd:= ) vaapi? ( x11-libs/libva:=[opengl] ) vdpau? ( x11-libs/libvdpau ) vpx? ( media-libs/libvpx:= ) x264? ( media-libs/x264:= ) X? ( x11-apps/xinit x11-libs/libX11:= x11-libs/libXext:= x11-libs/libXinerama:= x11-libs/libXrandr:= x11-libs/libXv:= x11-libs/libXxf86vm:= x11-misc/wmctrl:= ) x265? ( media-libs/x265 ) xml? ( dev-libs/libxml2:2 ) xmltv? ( dev-perl/XML-LibXML media-tv/xmltv ) xvid? ( media-libs/xvid ) zeroconf? ( dev-libs/openssl:= net-dns/avahi[mdnsresponder-compat] ) " declare -- README_GENTOO_SUFFIX="" declare REPOSITORY declare REQUIRED_USE=" bluray? ( xml ) cdr? ( cdda ) " declare RESTRICT="" declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" declare -x ROS_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 R_HOME="/usr/lib64/R" declare -x S="/var/tmp/portage/media-tv/mythtv-31.0_p20210731-r1/work/mythtv-5824c588db24b4e71a7d94e829e6419f71089297/mythtv" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_METHOD="any" declare -x SANDBOX_PREDICT="/var/tmp/portage/media-tv/mythtv-31.0_p20210731-r1/homedir:/dev/crypto:/var/cache/man:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig" declare -x SANDBOX_READ="/:/var/tmp/portage" declare -x SANDBOX_VERBOSE="1" declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/ptmx:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp/:/var/tmp/portage:/var/tmp/portage/media-tv/mythtv-31.0_p20210731-r1/homedir/.bash_history" declare -x SANE_BACKENDS="" declare -x SHELL="/bin/bash" declare -x SLOT="0" declare -i SRANDOM="492169395" declare SRC_URI="https://github.com/MythTV/mythtv/archive/5824c588db24b4e71a7d94e829e6419f71089297.tar.gz -> mythtv-31.0_p20210731.tar.gz" declare -x SSH_ASKPASS="/usr/bin/lxqt-openssh-askpass" declare -x SYMLINK_LIB="no" declare -x TERMINFO="/etc/terminfo" declare -x TERMINFO_DIRS="/usr/share/st/terminfo" declare -x TNS_ADMIN="/etc/oracle/" declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1" declare -x USE="X abi_x86_64 alsa amd64 cdda cdr dvd elibc_glibc exif kernel_linux lame opengl systemd userland_GNU wrapper x264 xml xvid" 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 VBOX_APP_HOME="/usr/lib64/virtualbox" declare -x VIDEO_CARDS="" declare -x VOICEMAIL_STORAGE="" declare -x XDG_CONFIG_DIRS="/etc/xdg" declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share" declare -x XTABLES_ADDONS="" declare -- _EUTILS_ECLASS="1" declare -x _E_DESTTREE_="/usr" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_="" declare -x _E_INSDESTTREE_="" declare -- _FLAG_O_MATIC_ECLASS="1" declare -- _MULTILIB_ECLASS="1" declare -- _MULTIPROCESSING_ECLASS="1" declare -a _PYTHON_ALL_IMPLS=([0]="pypy3" [1]="python3_8" [2]="python3_9" [3]="python3_10") declare -- _PYTHON_ANY_R1="1" 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 -a _PYTHON_SUPPORTED_IMPLS=([0]="python3_8" [1]="python3_9") declare -a _PYTHON_UNSUPPORTED_IMPLS=([0]="pypy3" [1]="python3_10") declare -- _PYTHON_UTILS_R1="1" declare -- _QMAKE_UTILS_ECLASS="1" declare -- _README_GENTOO_ECLASS="1" declare -- _STRIP_LINGUAS_ECLASS="1" declare -- _TOOLCHAIN_FUNCS_ECLASS="1" declare -- _USER_INFO_ECLASS="1" declare -- _WRAPPER_ECLASS="1" declare -x enable_year2038="no" declare -- i="host" 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" } _dosym8_canonicalize () { local path slash i prev out IFS=/; path=($1); [[ $1 == /* ]] && slash=/; while true; do prev=; for i in ${!path[@]}; do if [[ -z ${path[i]} || ${path[i]} == . ]]; then unset "path[i]"; else if [[ ${path[i]} != .. ]]; then prev=${i}; else if [[ -n ${prev} || -n ${slash} ]]; then [[ -n ${prev} ]] && unset "path[prev]"; unset "path[i]"; continue 2; fi; fi; fi; done; break; done; out="${slash}${path[*]}"; echo "${out:-.}" } _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 } _filter-hardened () { local f; for f in "$@"; do case "${f}" in -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie) gcc-specs-pie || continue; if ! is-flagq -nopie && ! is-flagq -no-pie; then if test-flags -nopie > /dev/null; then append-flags -nopie; else append-flags -no-pie; fi; fi ;; -fstack-protector) gcc-specs-ssp || continue; is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector) ;; -fstack-protector-all) gcc-specs-ssp-to-all || continue; is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all) ;; -fno-strict-overflow) gcc-specs-nostrict || continue; is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow) ;; esac; done } _filter-var () { local f x var=$1 new=(); shift; for f in ${!var}; do for x in "$@"; do [[ ${f} == ${x} ]] && continue 2; done; new+=("${f}"); done; export ${var}="${new[*]}" } _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" } _is_flagq () { local x var="$1[*]"; for x in ${!var}; do [[ ${x} == $2 ]] && return 0; done; return 1 } _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}" - <<-EOF || die import sysconfig print(sysconfig.get_path("purelib")) EOF ); 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}" - <<-EOF || die import sysconfig print(sysconfig.get_path("platinclude")) EOF ); 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}" - <<-EOF || die 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 "") EOF ); 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}" - <<-EOF || die import sysconfig print(sysconfig.get_config_var("ABIFLAGS") or "") EOF ); 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_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 ;; 3.8) [[ ${impl} == python${pattern/./_} || ${impl} == pypy3 ]] && return 0 ;; 3.9 | 3.10) [[ ${impl} == python${pattern/./_} ]] && return 0 ;; *) [[ ${impl} == ${pattern/./_} ]] && return 0 ;; esac; done; return 1 } _python_run_check_deps () { debug-print-function ${FUNCNAME} "${@}"; local impl=${1}; local hasv_args=(-b); [[ ${EAPI} == 6 ]] && hasv_args=(--host-root); einfo "Checking whether ${impl} is suitable ..."; local PYTHON_PKG_DEP; _python_export "${impl}" PYTHON_PKG_DEP; ebegin " ${PYTHON_PKG_DEP}"; has_version "${hasv_args[@]}" "${PYTHON_PKG_DEP}"; eend ${?} || return 1; declare -f python_check_deps > /dev/null || return 0; local PYTHON_USEDEP="python_targets_${impl}(-)"; local PYTHON_SINGLE_USEDEP="python_single_target_${impl}(-)"; ebegin " python_check_deps"; python_check_deps; eend ${?} } _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; local obsolete=(); if [[ ! -n ${PYTHON_COMPAT_NO_STRICT} ]]; then for i in "${PYTHON_COMPAT[@]}"; do case ${i} in pypy3 | python2_7 | python3_[89] | python3_10) ;; jython2_7 | pypy | pypy1_[89] | pypy2_0 | python2_[5-6] | python3_[1-7]) obsolete+=("${i}") ;; *) 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; if [[ -n ${obsolete[@]} && ${EBUILD_PHASE} == setup ]]; then if [[ $(head -n 1 "${EBUILD}" 2>/dev/null) == *2022* ]]; then eqawarn "Please clean PYTHON_COMPAT of obsolete implementations:"; eqawarn " ${obsolete[*]}"; fi; 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_verify_patterns () { debug-print-function ${FUNCNAME} "${@}"; local impl pattern; for pattern in "$@"; do case ${pattern} in -[23] | 3.[89] | 3.10) continue ;; esac; 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 } _setup-allowed-flags () { ALLOWED_FLAGS=(-pipe -O '-O[12sg]' '-mcpu=*' '-march=*' '-mtune=*' '-fstack-protector*' '-fstack-check*' -fno-stack-check -fstack-clash-protection '-fcf-protection=*' -fbounds-check -fbounds-checking -fno-PIE -fno-pie -nopie -no-pie '-mindirect-branch=*' -mindirect-branch-register '-mfunction-return=*' -mretpoline -fno-unit-at-a-time -fno-strict-overflow '-fsanitize*' '-fno-sanitize*' -g '-g[0-9]' -ggdb '-ggdb[0-9]' -gdwarf '-gdwarf-*' -gstabs -gstabs+ -gz -glldb -fno-diagnostics-color '-fmessage-length=*' -fno-ident -fpermissive -frecord-gcc-switches -frecord-command-line '-fdiagnostics*' '-fplugin*' '-W*' -w '-[DUILR]*' '-Wl,*' '-fuse-ld=*'); ALLOWED_FLAGS+=('-fno-stack-protector*' '-fabi-version=*' -fno-strict-aliasing -fno-bounds-check -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer '-fno-builtin*'); ALLOWED_FLAGS+=('-mregparm=*' -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow -mno-popcnt -mno-abm -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt -msoft-float -mno-soft-float -mhard-float -mno-hard-float '-mfpu=*' -mieee -mieee-with-inexact '-mschedule=*' -mfloat-gprs -mspe -mno-spe -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mx32 '-mabi=*' -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 '-mcmodel=*' -mstack-bias -mno-stack-bias -msecure-plt '-m*-toc' '-mfloat-abi=*' -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-rm7000 -mno-fix-rm7000 -mfix-r10000 -mno-fix-r10000 '-mr10k-cache-barrier=*' -mthumb -marm -ffixed-x18 -mno-fma4 -mno-movbe -mno-xop -mno-lwp -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm -mno-avx2 -mno-bmi2 -mno-fma -mno-lzcnt -mno-fxsr -mno-hle -mno-rtm -mno-xsave -mno-xsaveopt -mno-avx512cd -mno-avx512er -mno-avx512f -mno-avx512pf -mno-sha); ALLOWED_FLAGS+=(-mstackrealign) } _systemd_get_dir () { [[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} "; local variable=${1} fallback=${2} d; local -x PKG_CONFIG_FDO_SYSROOT_RULES=1; if $(tc-getPKG_CONFIG) --exists systemd; then d=$($(tc-getPKG_CONFIG) --variable="${variable}" systemd) || die; d=${d#${EPREFIX}}; else d=${fallback}; fi; echo "${d}" } _systemd_get_systemgeneratordir () { _systemd_get_dir systemdsystemgeneratordir /lib/systemd/system-generators } _systemd_get_systempresetdir () { _systemd_get_dir systemdsystempresetdir /lib/systemd/system-preset } _systemd_get_systemunitdir () { _systemd_get_dir systemdsystemunitdir /lib/systemd/system } _systemd_get_userunitdir () { _systemd_get_dir systemduserunitdir /usr/lib/systemd/user } _systemd_get_utildir () { _systemd_get_dir systemdutildir /lib/systemd } _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}" } _test-flag-PROG () { local comp=$1; local lang=$2; shift 2; if [[ -z ${comp} ]]; then return 1; fi; if [[ -z $1 ]]; then return 1; fi; comp=($(tc-get${comp})); if ! type -p ${comp[0]} > /dev/null; then return 1; fi; local in_src in_ext cmdline_extra=(); case "${lang}" in c) in_ext='c'; in_src='int main(void) { return 0; }'; cmdline_extra+=(-xc -c) ;; c++) in_ext='cc'; in_src='int main(void) { return 0; }'; cmdline_extra+=(-xc++ -c) ;; f77) in_ext='f'; in_src=' end'; cmdline_extra+=(-xf77 -c) ;; f95) in_ext='f90'; in_src='end'; cmdline_extra+=(-xf95 -c) ;; c+ld) in_ext='c'; in_src='int main(void) { return 0; }'; cmdline_extra+=(-xc) ;; esac; local test_in=${T}/test-flag.${in_ext}; local test_out=${T}/test-flag.exe; printf "%s\n" "${in_src}" > "${test_in}" || die "Failed to create '${test_in}'"; local cmdline=("${comp[@]}" -Werror "$@" "${cmdline_extra[@]}" "${test_in}" -o "${test_out}"); if ! "${cmdline[@]}" &> /dev/null; then cmdline+=(-Qunused-arguments); "${cmdline[@]}" &> /dev/null; fi } _test-flags-PROG () { local comp=$1; local flags=(); local x; shift; [[ -z ${comp} ]] && return 1; while (( $# )); do case "$1" in --param | -B) if test-flag-${comp} "$1" "$2"; then flags+=("$1" "$2"); fi; shift 2 ;; *) if test-flag-${comp} "$1"; then flags+=("$1"); fi; shift 1 ;; esac; done; echo "${flags[*]}"; [[ ${#flags[@]} -gt 0 ]] } all-flag-vars () { echo {ADA,C,CPP,CXX,CCAS,F,FC,LD}FLAGS } append-cflags () { [[ $# -eq 0 ]] && return 0; export CFLAGS+=" $*"; return 0 } append-cppflags () { [[ $# -eq 0 ]] && return 0; export CPPFLAGS+=" $*"; return 0 } append-cxxflags () { [[ $# -eq 0 ]] && return 0; export CXXFLAGS+=" $*"; return 0 } append-fflags () { [[ $# -eq 0 ]] && return 0; export FFLAGS+=" $*"; export FCFLAGS+=" $*"; return 0 } append-flags () { [[ $# -eq 0 ]] && return 0; case " $* " in *' '-[DIU]*) eqawarn 'please use append-cppflags for preprocessor flags' ;; *' '-L* | *' '-Wl,*) eqawarn 'please use append-ldflags for linker flags' ;; esac; append-cflags "$@"; append-cxxflags "$@"; append-fflags "$@"; return 0 } append-ldflags () { [[ $# -eq 0 ]] && return 0; local flag; for flag in "$@"; do [[ ${flag} == -l* ]] && eqawarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS"; done; export LDFLAGS="${LDFLAGS} $*"; return 0 } append-lfs-flags () { [[ $# -ne 0 ]] && die "append-lfs-flags takes no arguments"; append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE } append-libs () { [[ $# -eq 0 ]] && return 0; local flag; for flag in "$@"; do if [[ -z "${flag// }" ]]; then eqawarn "Appending an empty argument to LIBS is invalid! Skipping."; continue; fi; case $flag in -[lL]*) export LIBS="${LIBS} ${flag}" ;; -*) eqawarn "Appending non-library to LIBS (${flag}); Other linker flags should be passed via LDFLAGS"; export LIBS="${LIBS} ${flag}" ;; *) export LIBS="${LIBS} -l${flag}" ;; esac; done; return 0 } 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; local command=("${EPYTHON}" -m sphinx.cmd.build); if ! "${EPYTHON}" -c "import sphinx.cmd.build" 2> /dev/null; then command=(sphinx-build); fi; command+=(-b html -d "${dir}"/_build/doctrees "${dir}" "${dir}"/_build/html); echo "${command[@]}" 1>&2; "${command[@]}" || die; HTML_DOCS+=("${dir}/_build/html/.") } 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' "$@" } dosym8 () { local option_r; case $1 in -r) option_r=t; shift ;; esac; [[ $# -eq 2 ]] || die "${FUNCNAME}: bad number of arguments"; local target=$1 link=$2; if [[ -n ${option_r} ]]; then local linkdir comp; [[ ${target} == /* ]] || die "${FUNCNAME}: -r specified but no absolute target path"; target=$(_dosym8_canonicalize "${target}"); linkdir=$(_dosym8_canonicalize "/${link#/}"); linkdir=${linkdir%/*}; linkdir=${linkdir:-/}; local ifs_save=${IFS-' '} IFS=/; for comp in ${linkdir}; do if [[ ${target%%/*} == "${comp}" ]]; then target=${target#"${comp}"}; target=${target#/}; else target=..${target:+/}${target}; fi; done; IFS=${ifs_save}; target=${target:-.}; fi; dosym "${target}" "${link}" } 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} "$@" } edos2unix () { [[ $# -eq 0 ]] && return 0; sed -i 's/\r$//' -- "$@" || die } egetcomment () { local pos; [[ $# -eq 1 ]] || die "usage: egetcomment "; case ${CHOST} in *-freebsd* | *-dragonfly*) pos=8 ;; *) pos=5 ;; esac; egetent passwd "$1" | cut -d: -f${pos} } egetent () { local db=$1 key=$2; [[ $# -ge 3 ]] && die "usage: egetent "; case ${db} in passwd | group) ;; *) die "sorry, database '${db}' not yet supported; file a bug" ;; esac; case ${CHOST} in *-freebsd* | *-dragonfly*) case ${db} in passwd) db="user" ;; *) ;; esac; local opts; if [[ ${key} == [[:digit:]]* ]]; then [[ ${db} == "user" ]] && opts="-u" || opts="-g"; fi; pw show ${db} ${opts} "${key}" -q ;; *-openbsd*) grep "${key}:\*:" /etc/${db} ;; *) type -p nscd > /dev/null && nscd -i "${db}" 2> /dev/null; getent "${db}" "${key}" ;; esac } egetgroupname () { [[ $# -eq 1 ]] || die "usage: egetgroupname "; egetent group "$1" | cut -d: -f1 } egetgroups () { [[ $# -eq 1 ]] || die "usage: egetgroups "; local egroups_arr; read -r -a egroups_arr < <(id -G -n "$1"); local g groups=${egroups_arr[0]}; while read -r g; do [[ -n ${g} ]] && groups+=",${g}"; done < <(printf '%s\n' "${egroups_arr[@]:1}" | sort); echo "${groups}" } egethome () { local pos; [[ $# -eq 1 ]] || die "usage: egethome "; case ${CHOST} in *-freebsd* | *-dragonfly*) pos=9 ;; *) pos=6 ;; esac; egetent passwd "$1" | cut -d: -f${pos} } egetshell () { local pos; [[ $# -eq 1 ]] || die "usage: egetshell "; case ${CHOST} in *-freebsd* | *-dragonfly*) pos=10 ;; *) pos=7 ;; esac; egetent passwd "$1" | cut -d: -f${pos} } egetusername () { [[ $# -eq 1 ]] || die "usage: egetusername "; egetent passwd "$1" | cut -d: -f1 } 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 ) } emktemp () { eqawarn "emktemp is deprecated. Create a temporary file in \${T} instead."; local exe="touch"; [[ $1 == -d ]] && exe="mkdir" && shift; local topdir=$1; if [[ -z ${topdir} ]]; then [[ -z ${T} ]] && topdir="/tmp" || topdir=${T}; fi; if ! type -P mktemp > /dev/null; then local tmp=/; while [[ -e ${tmp} ]]; do tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}; done; ${exe} "${tmp}" || ${exe} -p "${tmp}"; echo "${tmp}"; else if [[ ${exe} == "touch" ]]; then TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX; else TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX; fi; fi } 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} } eqmake5 () { debug-print-function ${FUNCNAME} "$@"; ebegin "Running qmake"; "$(qt5_get_bindir)"/qmake -makefile QMAKE_AR="$(tc-getAR) cqs" QMAKE_CC="$(tc-getCC)" QMAKE_LINK_C="$(tc-getCC)" QMAKE_LINK_C_SHLIB="$(tc-getCC)" QMAKE_CXX="$(tc-getCXX)" QMAKE_LINK="$(tc-getCXX)" QMAKE_LINK_SHLIB="$(tc-getCXX)" QMAKE_OBJCOPY="$(tc-getOBJCOPY)" QMAKE_RANLIB= QMAKE_STRIP= QMAKE_CFLAGS="${CFLAGS}" QMAKE_CFLAGS_RELEASE= QMAKE_CFLAGS_DEBUG= QMAKE_CXXFLAGS="${CXXFLAGS}" QMAKE_CXXFLAGS_RELEASE= QMAKE_CXXFLAGS_DEBUG= QMAKE_LFLAGS="${LDFLAGS}" QMAKE_LFLAGS_RELEASE= QMAKE_LFLAGS_DEBUG= "$@"; if ! eend $?; then echo; eerror "Running qmake has failed! (see above for details)"; eerror "This shouldn't happen - please send a bug report to https://bugs.gentoo.org/"; echo; die "eqmake5 failed"; fi } 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 ${?} } filter-flags () { _filter-hardened "$@"; local v; for v in $(all-flag-vars); do _filter-var ${v} "$@"; done; return 0 } filter-ldflags () { _filter-var LDFLAGS "$@"; return 0 } filter-lfs-flags () { [[ $# -ne 0 ]] && die "filter-lfs-flags takes no arguments"; filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_TIME_BITS=64 } filter-mfpmath () { local orig_mfpmath new_math prune_math; orig_mfpmath=$(get-flag -mfpmath); new_math=$(get-flag mfpmath); new_math=${new_math/both/387,sse}; new_math=" ${new_math//[,+]/ } "; prune_math=""; for prune_math in "$@"; do new_math=${new_math/ ${prune_math} / }; done; new_math=$(echo ${new_math}); new_math=${new_math// /,}; if [[ -z ${new_math} ]]; then filter-flags ${orig_mfpmath}; else replace-flags ${orig_mfpmath} -mfpmath=${new_math}; fi; return 0 } 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 } get-flag () { [[ $# -ne 1 ]] && die "usage: "; local f var findflag="$1"; for var in $(all-flag-vars); do for f in ${!var}; do if [ "${f/${findflag}}" != "${f}" ]; then printf "%s\n" "${f/-${findflag}=}"; return 0; fi; done; done; return 1 } 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_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 } has_multilib_profile () { [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] } 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-flag () { is-flagq "$@" && echo true } is-flagq () { [[ -n $2 ]] && die "Usage: is-flag "; local var; for var in $(all-flag-vars); do _is_flagq ${var} "$1" && return 0; done; return 1 } is-ldflag () { is-ldflagq "$@" && echo true } is-ldflagq () { [[ -n $2 ]] && die "Usage: is-ldflag "; _is_flagq LDFLAGS $1 } is_final_abi () { has_multilib_profile || return 0; set -- $(get_install_abis); local LAST_ABI=$#; [[ ${!LAST_ABI} == ${ABI} ]] } make_wrapper () { local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5; local tmpwrapper="${T}/tmp.wrapper.${wrapper##*/}"; has "${EAPI:-0}" 0 1 2 && local EPREFIX=""; ( echo '#!/bin/sh'; if [[ -n ${libdir} ]]; then local var; if [[ ${CHOST} == *-darwin* ]]; then var=DYLD_LIBRARY_PATH; else var=LD_LIBRARY_PATH; fi; cat <<-EOF if [ "\${${var}+set}" = "set" ] ; then export ${var}="\${${var}}:${EPREFIX}${libdir}" else export ${var}="${EPREFIX}${libdir}" fi EOF fi [[ -n ${chdir} ]] && printf 'cd "%s" &&\n' "${EPREFIX}${chdir}"; printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}"; chmod go+rx "${tmpwrapper}"; if [[ -n ${path} ]]; then ( exeopts -m 0755; exeinto "${path}"; newexe "${tmpwrapper}" "${wrapper}" ) || die; else newbin "${tmpwrapper}" "${wrapper}" || die; fi } 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}} } 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 } no-as-needed () { [[ $# -ne 0 ]] && die "no-as-needed takes no arguments"; case $($(tc-getLD) -v 2>&1 /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_gen_any_dep () { debug-print-function ${FUNCNAME} "${@}"; local depstr=${1}; [[ -n ${depstr} ]] || die "No dependency string provided"; local i PYTHON_PKG_DEP out=; for i in "${_PYTHON_SUPPORTED_IMPLS[@]}"; do 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%=} ${i_depstr} ) ${out}"; done; echo "|| ( ${out})" } 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_has_version () { debug-print-function ${FUNCNAME} "${@}"; local root_arg=(-b); case ${1} in -b | -d | -r) root_arg=("${1}"); shift ;; esac; if [[ ${EAPI} == 6 ]]; then if [[ ${root_arg} == -r ]]; then root_arg=(); else root_arg=(--host-root); fi; fi; local pkg; for pkg in "$@"; do ebegin " ${pkg}"; has_version "${root_arg[@]}" "${pkg}"; eend ${?} || return; done; return 0 } 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} "${@}"; [[ -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}" - <<-EOF || die import sys print("".join(x + "\0" for x in sys.path)) EOF ); 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##/}; einfo "Optimize Python modules for ${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_scriptinto () { debug-print-function ${FUNCNAME} "${@}"; _PYTHON_SCRIPTROOT=${1} } python_setup () { debug-print-function ${FUNCNAME} "${@}"; if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then local impls=(${PYTHON_COMPAT_OVERRIDE}); [[ ${#impls[@]} -eq 1 ]] || die "PYTHON_COMPAT_OVERRIDE must name exactly one implementation for python-any-r1"; ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python"; ewarn "implementation will be used:"; ewarn; ewarn " ${PYTHON_COMPAT_OVERRIDE}"; ewarn; ewarn "Dependencies won't be satisfied, and EPYTHON/eselect-python will be ignored."; _python_export "${impls[0]}" EPYTHON PYTHON; _python_wrapper_setup; einfo "Using ${EPYTHON} to build (via PYTHON_COMPAT_OVERRIDE)"; return; fi; local epython_impl=${EPYTHON/./_}; if [[ -n ${epython_impl} ]]; then if ! has "${epython_impl}" "${_PYTHON_SUPPORTED_IMPLS[@]}"; then if ! has "${epython_impl}" "${_PYTHON_ALL_IMPLS[@]}"; then ewarn "Invalid EPYTHON: ${EPYTHON}"; else einfo "EPYTHON (${EPYTHON}) not supported by the package"; fi; else if _python_run_check_deps "${epython_impl}"; then _python_export EPYTHON PYTHON; _python_wrapper_setup; einfo "Using ${EPYTHON} to build (via EPYTHON)"; return; fi; fi; fi; for ((i = ${#_PYTHON_SUPPORTED_IMPLS[@]} - 1; i >= 0; i-- )) do local impl=${_PYTHON_SUPPORTED_IMPLS[i]}; [[ ${impl} == ${epython_impl} ]] && continue; _python_export "${impl}" EPYTHON PYTHON; if _python_run_check_deps "${impl}"; then _python_wrapper_setup; einfo "Using ${EPYTHON} to build (via PYTHON_COMPAT iteration)"; return; fi; done; eerror "No Python implementation found for the build. This is usually"; eerror "a bug in the ebuild. Please report it to bugs.gentoo.org"; eerror "along with the build log."; echo; die "No supported Python implementation installed." } qt5_get_bindir () { echo ${EPREFIX}$(qt5_get_libdir)/qt5/bin } qt5_get_headerdir () { echo /usr/include/qt5 } qt5_get_libdir () { echo /usr/$(get_libdir) } qt5_get_mkspecsdir () { echo $(qt5_get_libdir)/qt5/mkspecs } qt5_get_plugindir () { echo $(qt5_get_libdir)/qt5/plugins } raw-ldflags () { local x input="$@"; [[ -z ${input} ]] && input=${LDFLAGS}; set --; for x in ${input}; do case ${x} in -Wl,*) x=${x#-Wl,}; set -- "$@" ${x//,/ } ;; *) ;; esac; done; echo "$@" } 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 } replace-cpu-flags () { local newcpu="$#"; newcpu="${!newcpu}"; while [ $# -gt 1 ]; do replace-flags "-march=${1}" "-march=${newcpu}"; replace-flags "-mcpu=${1}" "-mcpu=${newcpu}"; replace-flags "-mtune=${1}" "-mtune=${newcpu}"; shift; done; return 0 } replace-flags () { [[ $# != 2 ]] && die "Usage: replace-flags "; local f var new; for var in $(all-flag-vars); do new=(); for f in ${!var}; do [[ ${f} == ${1} ]] && f=${2}; new+=("${f}"); done; export ${var}="${new[*]}"; done; return 0 } replace-sparc64-flags () { [[ $# -ne 0 ]] && die "replace-sparc64-flags takes no arguments"; local SPARC64_CPUS="ultrasparc3 ultrasparc v9"; if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; export CFLAGS CXXFLAGS } setup-allowed-flags () { [[ ${EAPI} == [567] ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}."; _setup-allowed-flags "$@" } src_compile () { default } src_configure () { local -a myconf; myconf+=(--prefix="${EPREFIX}"/usr); myconf+=(--libdir="${EPREFIX}"/usr/$(get_libdir)); myconf+=(--libdir-name=$(get_libdir)); myconf+=(--mandir="${EPREFIX}"/usr/share/man); if use debug; then myconf+=(--compile-type=debug); myconf+=(--disable-stripping); myconf+=(--enable-valgrind); else myconf+=(--compile-type=release); fi; has ccache "${FEATURES}" || myconf+=(--disable-ccache); has distcc "${FEATURES}" || myconf+=(--disable-distcc); for i in $(get-flag march) $(get-flag mcpu) $(get-flag mtune); do [ "${i}" = "native" ] && i="host"; myconf+=(--cpu="${i}"); break; done; myconf+=($(use_enable altivec)); myconf+=($(use_enable oss audio-oss) $(use_enable alsa audio-alsa) $(use_enable jack audio-jack) $(use_enable pulseaudio audio-pulseoutput)); myconf+=($(use_enable lirc) $(use_enable input_devices_joystick joystick-menu) $(use_enable cec libcec) $(use_enable ieee1394 firewire) $(use_enable hdhomerun) $(use_enable vbox) $(use_enable ceton) $(use_enable v4l v4l2) $(use_enable ivtv) $(use_enable hdpvr) $(use_enable dvb) $(use_enable asi)); myconf+=($(use_enable X x11) $(use_enable X xrandr)); myconf+=($(use_enable nvdec) $(use_enable vaapi) $(use_enable vdpau) $(use_enable opengl) $(use_enable libass)); myconf+=($(use_enable systemd systemd_notify) $(use_enable systemd systemd_journal) $(use_enable xml libxml2) $(use_enable zeroconf libdns-sd)); if use perl && use python; then myconf+=(--with-bindings=perl,python); else if use perl; then myconf+=(--without-bindings=python); myconf+=(--with-bindings=perl); else if use python; then myconf+=(--without-bindings=perl); myconf+=(--with-bindings=python); else myconf+=(--without-bindings=perl,python); fi; fi; fi; use python && myconf+=(--python="${EPYTHON}"); myconf+=($(use_enable java bdjava)); myconf+=($(use_enable lame libmp3lame) $(use_enable xvid libxvid) $(use_enable x264 libx264) $(use_enable x265 libx265) $(use_enable vpx libvpx)); myconf+=(--enable-symbol-visibility); myconf+=(--enable-pic); if tc-is-cross-compiler; then myconf+=(--enable-cross-compile --arch=$(tc-arch-kernel)); myconf+=(--cross-prefix="${CHOST}"-); fi; myconf+=($(use_enable bluray libbluray_external)); einfo "Running ./configure ${myconf[@]} - THIS MAY TAKE A WHILE."; ./configure --prefix="${EPREFIX}/usr" --cc="$(tc-getCC)" --cxx="$(tc-getCXX)" --ar="$(tc-getAR)" --optflags="${CFLAGS}" --extra-cflags="${CFLAGS}" --extra-cxxflags="${CXXFLAGS}" --extra-ldflags="${LDFLAGS}" --qmake=$(qt5_get_bindir)/qmake "${myconf[@]}" } src_install () { emake STRIP="true" INSTALL_ROOT="${D}" install; use python && python_optimize; dodoc AUTHORS UPGRADING README; readme.gentoo_create_doc; insinto /usr/share/mythtv/database; doins database/*; newinitd "${FILESDIR}"/mythbackend.init-r3 mythbackend; newconfd "${FILESDIR}"/mythbackend.conf-r1 mythbackend; if use systemd; then systemd_newunit "${FILESDIR}"/mythbackend.service-28 mythbackend.service; fi; dodoc keys.txt; keepdir /etc/mythtv; fowners -R mythtv /etc/mythtv; keepdir /var/log/mythtv; fowners -R mythtv /var/log/mythtv; insinto /etc/logrotate.d; newins "${FILESDIR}"/mythtv.logrotate.d-r4 mythtv; insinto /usr/share/mythtv/contrib; if ! use perl; then find contrib/ -name '*.pl' -exec rm {} \;; fi; if ! use python; then find contrib/ -name '*.py' -exec rm {} \;; fi; doins -r contrib/*; if use wrapper; then mv "${ED}/usr/bin/mythfrontend" "${ED}/usr/bin/mythfrontend.real" || die "Failed to install mythfrontend.real"; newbin "${FILESDIR}"/mythfrontend.wrapper mythfrontend; newconfd "${FILESDIR}"/mythfrontend.conf mythfrontend; fi; if use autostart; then newenvd - 95mythtv <<-_EOF_ CONFIG_PROTECT=\"$(egethome mythtv)\" _EOF_ insinto $(egethome mythtv) newins "${FILESDIR}"/bash_profile .bash_profile; newins "${FILESDIR}"/xinitrc-r1 .xinitrc; fi; find "${ED}/usr/share/mythtv" -type f -name '*.py' -exec expr \( {} : '.*__init__.py' \) = 0 \; -exec chmod a+x {} \; || die "Failed to make python file $(basename ${file}) executable"; use python && python_fix_shebang "${ED}/usr/share/mythtv"; find "${ED}" -type f \( -name '*.sh' -o -name '*.pl' \) -exec chmod a+x {} \; || die "Failed to make script executable" } src_prepare () { default; sed -e "s:pure_install:pure_install INSTALLDIRS=vendor:" -i "${S}"/bindings/perl/Makefile || die "Cannot convert site_perl to vendor_perl!" } src_test () { default } src_unpack () { default } strip-flags () { [[ $# -ne 0 ]] && die "strip-flags takes no arguments"; local x y var; local ALLOWED_FLAGS; _setup-allowed-flags; set -f; for var in $(all-flag-vars); do local new=(); for x in ${!var}; do for y in "${ALLOWED_FLAGS[@]}"; do if [[ ${x} == ${y} ]]; then new+=("${x}"); break; fi; done; done; if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then new+=(-O2); fi; if [[ ${!var} != "${new[*]}" ]]; then einfo "strip-flags: ${var}: changed '${!var}' to '${new[*]}'"; fi; export ${var}="${new[*]}"; done; set +f; return 0 } strip-linguas () { local d f ls newls nols; if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then local op=$1; shift; ls=$(find "$1" -name '*.po' -exec basename {} .po ';'); shift; for d in "$@"; do if [[ ${op} == "-u" ]]; then newls=${ls}; else newls=""; fi; for f in $(find "${d}" -name '*.po' -exec basename {} .po ';'); do if [[ ${op} == "-i" ]]; then has ${f} ${ls} && newls+=" ${f}"; else has ${f} ${ls} || newls+=" ${f}"; fi; done; ls=${newls}; done; else ls="$@"; fi; nols=""; newls=""; for f in ${LINGUAS}; do if has ${f} ${ls}; then newls+=" ${f}"; else nols+=" ${f}"; fi; done; [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols}; export LINGUAS=${newls:1} } strip-unsupported-flags () { [[ $# -ne 0 ]] && die "strip-unsupported-flags takes no arguments"; export CFLAGS=$(test-flags-CC ${CFLAGS}); export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}); export FFLAGS=$(test-flags-F77 ${FFLAGS}); export FCFLAGS=$(test-flags-FC ${FCFLAGS}); export LDFLAGS=$(test-flags-CCLD ${LDFLAGS}) } systemd_dounit () { debug-print-function ${FUNCNAME} "${@}"; ( insopts -m 0644; insinto "$(_systemd_get_systemunitdir)"; doins "${@}" ) } systemd_douserunit () { debug-print-function ${FUNCNAME} "${@}"; ( insopts -m 0644; insinto "$(_systemd_get_userunitdir)"; doins "${@}" ) } systemd_enable_ntpunit () { debug-print-function ${FUNCNAME} "${@}"; if [[ ${#} -lt 2 ]]; then die "Usage: systemd_enable_ntpunit ..."; fi; local ntpunit_name=${1}; local services=("${@:2}"); if [[ ${ntpunit_name} != [0-9][0-9]-* ]]; then die "ntpunit.d file must be named NN-name where NN are digits."; else if [[ ${ntpunit_name} == *.list ]]; then die "The .list suffix is appended implicitly to ntpunit.d name."; fi; fi; local unitdir=$(systemd_get_systemunitdir); local s; for s in "${services[@]}"; do if [[ ! -f "${D}${unitdir}/${s}" ]]; then die "ntp-units.d provider ${s} not installed (yet?) in \${D}."; fi; echo "${s}" >> "${T}"/${ntpunit_name}.list || die; done; ( insopts -m 0644; insinto "$(_systemd_get_utildir)"/ntp-units.d; doins "${T}"/${ntpunit_name}.list ); local ret=${?}; rm "${T}"/${ntpunit_name}.list || die; return ${ret} } systemd_enable_service () { debug-print-function ${FUNCNAME} "${@}"; [[ ${#} -eq 2 ]] || die "Synopsis: systemd_enable_service target service"; local target=${1}; local service=${2}; local ud=$(_systemd_get_systemunitdir); local destname=${service##*/}; dodir "${ud}"/"${target}".wants && dosym ../"${service}" "${ud}"/"${target}".wants/"${destname}" } systemd_get_systemgeneratordir () { debug-print-function ${FUNCNAME} "${@}"; echo "${EPREFIX}$(_systemd_get_systemgeneratordir)" } systemd_get_systempresetdir () { debug-print-function ${FUNCNAME} "${@}"; echo "${EPREFIX}$(_systemd_get_systempresetdir)" } systemd_get_systemunitdir () { debug-print-function ${FUNCNAME} "${@}"; echo "${EPREFIX}$(_systemd_get_systemunitdir)" } systemd_get_unitdir () { [[ ${EAPI} == 5 ]] || die "${FUNCNAME} is banned in EAPI 6, use systemd_get_systemunitdir instead"; systemd_get_systemunitdir } systemd_get_userunitdir () { debug-print-function ${FUNCNAME} "${@}"; echo "${EPREFIX}$(_systemd_get_userunitdir)" } systemd_get_utildir () { debug-print-function ${FUNCNAME} "${@}"; echo "${EPREFIX}$(_systemd_get_utildir)" } systemd_install_serviced () { debug-print-function ${FUNCNAME} "${@}"; local src=${1}; local service=${2}; [[ -n ${src} ]] || die "No file specified"; if [[ ! -n ${service} ]]; then [[ ${src} == *.conf ]] || die "Source file needs .conf suffix"; service=${src##*/}; service=${service%.conf}; fi; [[ ${service} == *.d ]] && die "Service must not have .d suffix"; ( insopts -m 0644; insinto /etc/systemd/system/"${service}".d; newins "${src}" 00gentoo.conf ) } systemd_is_booted () { debug-print-function ${FUNCNAME} "${@}"; [[ -d /run/systemd/system ]]; local ret=${?}; debug-print "${FUNCNAME}: [[ -d /run/systemd/system ]] -> ${ret}"; return ${ret} } systemd_newunit () { debug-print-function ${FUNCNAME} "${@}"; ( insopts -m 0644; insinto "$(_systemd_get_systemunitdir)"; newins "${@}" ) } systemd_newuserunit () { debug-print-function ${FUNCNAME} "${@}"; ( insopts -m 0644; insinto "$(_systemd_get_userunitdir)"; newins "${@}" ) } systemd_reenable () { type systemctl &> /dev/null || return 0; local x; for x in "$@"; do if systemctl --quiet --root="${ROOT:-/}" is-enabled "${x}"; then systemctl --root="${ROOT:-/}" reenable "${x}"; fi; done } systemd_update_catalog () { debug-print-function ${FUNCNAME} "${@}"; [[ ${EBUILD_PHASE} == post* ]] || die "${FUNCNAME} disallowed during ${EBUILD_PHASE_FUNC:-${EBUILD_PHASE}}"; local journalctl=${EPREFIX}/usr/bin/journalctl; if [[ -x ${journalctl} ]]; then ebegin "Updating systemd journal catalogs"; journalctl --update-catalog; eend $?; else debug-print "${FUNCNAME}: journalctl not found."; fi } systemd_with_unitdir () { [[ ${EAPI} == 5 ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}, use --with-${1:-systemdsystemunitdir}=\"\$(systemd_get_systemunitdir)\" instead"; debug-print-function ${FUNCNAME} "${@}"; local optname=${1:-systemdsystemunitdir}; echo --with-${optname}="$(systemd_get_systemunitdir)" } systemd_with_utildir () { [[ ${EAPI} == 5 ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}, use --with-systemdutildir=\"\$(systemd_get_utildir)\" instead"; debug-print-function ${FUNCNAME} "${@}"; echo --with-systemdutildir="$(systemd_get_utildir)" } 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 } test-flag-CC () { _test-flag-PROG CC c "$@" } test-flag-CCLD () { _test-flag-PROG CC c+ld "$@" } test-flag-CXX () { _test-flag-PROG CXX c++ "$@" } test-flag-F77 () { _test-flag-PROG F77 f77 "$@" } test-flag-FC () { _test-flag-PROG FC f95 "$@" } test-flag-PROG () { [[ ${EAPI} == [567] ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}."; _test-flag-PROG "$@" } test-flags () { test-flags-CC "$@" } test-flags-CC () { _test-flags-PROG CC "$@" } test-flags-CCLD () { _test-flags-PROG CCLD "$@" } test-flags-CXX () { _test-flags-PROG CXX "$@" } test-flags-F77 () { _test-flags-PROG F77 "$@" } test-flags-FC () { _test-flags-PROG FC "$@" } test-flags-PROG () { [[ ${EAPI} == [567] ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}."; _test-flags-PROG "$@" } test_version_info () { if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then return 0; else return 1; fi } use_if_iuse () { eqawarn "use_if_iuse is deprecated."; eqawarn "Define it as a local function, or inline it:"; eqawarn " in_iuse foo && use foo"; in_iuse $1 || return 1; use $1 } ver_cut () { local range=${1}; local v=${2:-${PV}}; local start end; local -a comp; __eapi7_ver_split "${v}"; local max=$((${#comp[@]}/2)); __eapi7_ver_parse_range "${range}" "${max}"; local IFS=; if [[ ${start} -gt 0 ]]; then start=$(( start*2 - 1 )); fi; echo "${comp[*]:start:end*2-start}" } ver_rs () { local v; (( ${#} & 1 )) && v=${@: -1} || v=${PV}; local start end i; local -a comp; __eapi7_ver_split "${v}"; local max=$((${#comp[@]}/2 - 1)); while [[ ${#} -ge 2 ]]; do __eapi7_ver_parse_range "${1}" "${max}"; for ((i = start*2; i <= end*2; i+=2 )) do [[ ${i} -eq 0 && -z ${comp[i]} ]] && continue; comp[i]=${2}; done; shift 2; done; local IFS=; echo "${comp[*]}" } ver_test () { local va op vb; if [[ $# -eq 3 ]]; then va=${1}; shift; else va=${PVR}; fi; [[ $# -eq 2 ]] || die "${FUNCNAME}: bad number of arguments"; op=${1}; vb=${2}; case ${op} in -eq | -ne | -lt | -le | -gt | -ge) ;; *) die "${FUNCNAME}: invalid operator: ${op}" ;; esac; __eapi7_ver_compare "${va}" "${vb}"; test $? "${op}" 2 }