declare -x ABI="amd64" declare -x ABI_MIPS="" declare -x ABI_PPC="" declare -x ABI_RISCV="" declare -x ABI_S390="" declare -x ABI_X86="64" declare -x ADA_TARGET="" declare -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_no-multilib_hardened-20210216-135536" declare -x AMANDA_SERVER_INDEX="17_1_no-multilib_hardened-20210216-135536" declare -x AMANDA_SERVER_TAPE="17_1_no-multilib_hardened-20210216-135536" 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 -- ARCH_LIB="/usr/lib64/perl5/5.32/x86_64-linux" declare -x AUTOJUMP_ERROR_PATH="/root/.local/share/autojump/errors.log" declare -x AUTOJUMP_SOURCED="1" declare BDEPEND="" declare -x BLASTDB="/usr/share/ncbi/formatdb" declare -x BLASTMAT="/usr/share/ncbi/data" declare -x BOOTSTRAP_USE="unicode internal-glib pkg-config split-usr python_targets_python3_8 multilib hardened pic xtpax -jit -orc" 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 CDF_BASE="/usr" declare -x CDF_BIN="\${CDF_BASE}/bin" declare -x CDF_HELP="\${CDF_BASE}/lib/cdf/help" declare -x CDF_INC="\${CDF_BASE}/include" declare -x CDF_LIB="\${CDF_BASE}/lib" declare -x CFLAGS="-O2 -pipe -march=native -fno-diagnostics-color -falign-functions=32:25:16" declare -x CFLAGS_amd64="-m64" declare -x CFLAGS_x32="-mx32" declare -x CFLAGS_x86="-m32" declare -x CHOST="x86_64-pc-linux-gnu" declare -x CHOST_amd64="x86_64-pc-linux-gnu" declare -x CHOST_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 CSSTRNGS="/usr/share/locale" declare -x CURL_SSL="" declare -x CXXFLAGS="-O2 -pipe -march=native -fno-diagnostics-color -falign-functions=32:25:16" declare -x DCC_EMAILLOG_WHOM_TO_BLAME="" declare -x DEFAULT_ABI="amd64" declare -x DEFINED_PHASES=" compile configure install prepare test" declare DEPEND="dev-perl/Tk dev-lang/perl test? ( x11-base/xorg-server[xvfb] x11-apps/xhost )" declare DESCRIPTION="Create and manipulate tables in Perl + Tk" declare -x DESTTREE="/usr" declare -x DIALIGN2_DIR="/usr/share/dialign2" declare -x DIROPTIONS="-m0755" declare -- DIST_A="Tk-TableMatrix-1.23.tar.gz" declare -- DIST_AUTHOR="CERNEY" declare -- DIST_NAME="Tk-TableMatrix" declare -- DIST_P="Tk-TableMatrix-1.23" declare -- DIST_VERSION="1.23" declare -x EAPI="6" declare -x EGO_BUILD_FLAGS="-p 2" declare -x ELIBC="glibc" declare -x EMBOSS_ACDROOT="/usr/share/EMBOSS/acd" declare -x EMBOSS_DATA="/usr/share/EMBOSS/data" declare -x ENLIGHTENMENT_MODULES="" 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="1614377300.777960" declare -- EPOCHSECONDS="1614377300" declare -x EXEOPTIONS="-m0755" declare -x FCFLAGS="-O2 -pipe -march=native -fno-diagnostics-color" 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="-O2 -pipe -march=native -fno-diagnostics-color" declare -x FFTOOLS="" declare -x G4ABLADATA="/usr/share/geant4/data/G4ABLA3.1" declare -x G4ENSDFSTATEDATA="/usr/share/geant4/data/G4ENSDFSTATE2.3" declare -x G4INCLDATA="/usr/share/geant4/data/G4INCL1.0" declare -x G4LEDATA="/usr/share/geant4/data/G4EMLOW7.13" declare -x G4LEVELGAMMADATA="/usr/share/geant4/data/PhotonEvaporation5.7" declare -x G4NEUTRONHPDATA="/usr/share/geant4/data/G4NDL4.6" declare -x G4PARTICLEHPDATA="/usr/share/geant4/data/G4TENDL1.3.2" declare -x G4PARTICLEXSDATA="/usr/share/geant4/data/G4PARTICLEXS3.1" 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 GO19CONCURRENTCOMPILATION="0" declare -x GOMAXPROCS="2" declare -x GPSD_PROTOCOLS="" declare -x GRUB_PLATFORMS="" declare HOMEPAGE="https://metacpan.org/release/Tk-TableMatrix" declare -x IBPATH="/usr/sbin" declare -x INHERITED=" multiprocessing perl-functions perl-module virtualx" declare -x INPUT_DEVICES="" declare -x INSDESTTREE="" declare -x INSOPTIONS="-m0644" declare IUSE="test" declare -x IUSE_EFFECTIVE="abi_x86_64 alpha amd64 amd64-fbsd amd64-linux arm arm64 arm64-macos elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc hppa ia64 kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k mips ppc ppc-macos ppc64 ppc64-linux prefix prefix-guest prefix-stack riscv s390 sparc sparc-solaris sparc64-solaris test userland_BSD userland_GNU x64-cygwin x64-macos x64-solaris x64-winnt x86 x86-fbsd x86-linux x86-solaris x86-winnt" declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-guest prefix-stack" 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 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~ppc ~sparc ~x86 ~amd64-linux ~x86-linux" declare -x L10N="" declare -x LADSPA_PATH="/usr/lib64/ladspa" declare -x LANG="C.UTF-8" 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_x32="-m elf32_x86_64" declare -x LDFLAGS_x86="-m elf_i386" declare -x LIBDIR_amd64="lib64" declare -x LIBDIR_x32="libx32" declare -x LIBDIR_x86="lib" declare -x LIBGUESTFS_PATH="/usr/share/guestfs/appliance/" declare -x LIBOPTIONS="-m0644" declare -x LIBREOFFICE_EXTENSIONS="" declare -x LICENSE="Artistic" declare -x LIRC_DEVICES="" declare -x LLVM_TARGETS="" declare -x LOGTALKHOME="/usr/share/logtalk-3.36.0" declare -x LUA_SINGLE_TARGET="" declare -x LUA_TARGETS="" declare -x MAKEOPTS="-j 2" declare -x MANPAGER="manpager" declare -x MONKEYD_PLUGINS="" declare -x MULTILIB_ABIS="amd64" declare -x MULTILIB_STRICT_DENY="64-bit.*shared object" declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib" declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec|llvm)" declare -x NCBI="/etc/ncbi" 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="2" declare -x OPCODEDIR="/usr/lib64/csound/plugins" 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/dev-perl/Tk-TableMatrix-1.230.0-r2/files/Tk-TableMatrix-1.23-makemaker.patch") declare -x PATH="/usr/lib/portage/python3.8/ebuild-helpers/xattr:/usr/lib/portage/python3.8/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/share/bcc/tools:/usr/lib/llvm/11/bin:/usr/lib/llvm/10/bin:/usr/bin/cdsclient" declare -x PAX_MARKINGS="none" declare PDEPEND="" declare -- PERL_EXPF="src_prepare src_configure src_compile src_test src_install" declare -x PERL_EXTUTILS_AUTOINSTALL="--skipdeps" declare -x PERL_MM_USE_DEFAULT="1" declare -- PERL_VERSION="5.32.1" declare -x PHP_TARGETS="" 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/Tk-TableMatrix-1.230.0-r2/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 -- PREFER_BUILDPL="yes" declare -x PRELINK_PATH_MASK="/usr/bin/bbkeys" declare -x PROFILE_IS_HARDENED="1" declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND" declare -x PROPERTIES="" declare -x PYTEST_ADDOPTS="--color=no" declare -x PYTHIA8DATA="/usr/share/pythia8/xmldoc" declare -x PYTHONDOCS_3_9="/usr/share/doc/python-docs-3.9.1/html/library" declare -x PYTHONDONTWRITEBYTECODE="1" 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 QPSMTPD_CONFIG="/etc/qpsmtpd" declare -x QRNADB="/usr/share/qrna/data" declare -x QUEX_PATH="/usr/share" declare RDEPEND="dev-perl/Tk dev-lang/perl:= " declare REPOSITORY declare REQUIRED_USE="" declare -x RESTRICT="test" declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" declare -x RNAVIEW="/usr/share/rnaview" 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="-C codegen-units=2" declare -x RUST_TEST_TASKS="2" declare -x RUST_TEST_THREADS="2" declare -x S="/var/tmp/portage/dev-perl/Tk-TableMatrix-1.230.0-r2/work/Tk-TableMatrix-1.23" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_PREDICT="/var/tmp/portage/dev-perl/Tk-TableMatrix-1.230.0-r2/homedir:/dev/crypto:/var/cache/man:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig" declare -x SANDBOX_READ="/:/var/tmp/portage" declare -x SANDBOX_VERBOSE="1" declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/ptmx:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp/:/var/tmp/portage:/var/tmp/portage/dev-perl/Tk-TableMatrix-1.230.0-r2/homedir/.bash_history" declare -x SANE_BACKENDS="" declare -x SBCL_HOME="/usr/lib64/sbcl" declare -x SBCL_SOURCE_ROOT="/usr/lib64/sbcl/src" declare -x SHELL="/bin/bash" declare -- SITE_ARCH="/usr/local/lib64/perl5/5.32/x86_64-linux" declare -- SITE_LIB="/usr/local/lib64/perl5/5.32" declare -x SLOT="0" declare -i SRANDOM="2079508913" declare -- SRC_PREP="yes" declare SRC_URI="mirror://cpan/authors/id/C/CE/CERNEY/Tk-TableMatrix-1.23.tar.gz" declare -x SVDIR="/etc/service/" declare -x SYMLINK_LIB="no" declare -x TERMINFO="/etc/terminfo" declare -x TNS_ADMIN="/etc/oracle/" declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1" declare -x UNCACHED_ERR_FD="" declare -x USE="abi_x86_64 amd64 elibc_glibc kernel_linux userland_GNU" declare -x USERLAND="GNU" declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND" declare -x USE_EXPAND_UNPREFIXED="ARCH" declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm64 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-fbsd x86-linux x86-solaris x86-winnt" declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt" declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX linux NetBSD OpenBSD SunOS Winnt" declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU" declare -x UWSGI_PLUGINS="" declare -- VENDOR_ARCH="/usr/lib64/perl5/vendor_perl/5.32/x86_64-linux" declare -- VENDOR_LIB="/usr/lib64/perl5/vendor_perl/5.32" declare -x VIDEO_CARDS="" declare -- VIRTUALX_COMMAND="emake" declare -- VIRTUALX_DEPEND=" x11-base/xorg-server[xvfb] x11-apps/xhost " declare -- VIRTUALX_REQUIRED="test" declare -x VOICEMAIL_STORAGE="" declare -x XEHELPURL="/usr/share/doc/xephem-3.7.7-r1/html/xephem.html" declare -x XFCE_PLUGINS="" declare -x XTABLES_ADDONS="" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_="" declare -- _MULTIPROCESSING_ECLASS="1" declare -- _VIRTUAL_X="1" declare -- i="PERLPREFIX" declare -- perlinfo_done="true" declare -- pm_echovar="" Xeconf () { debug-print-function ${FUNCNAME} "$@"; [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx econf ....'"; VIRTUALX_COMMAND="econf" virtualmake "$@" } Xemake () { debug-print-function ${FUNCNAME} "$@"; [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx emake ....'"; VIRTUALX_COMMAND="emake" virtualmake "$@" } Xmake () { debug-print-function ${FUNCNAME} "$@"; [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx emake -j1 ....'"; eqawarn "you should not execute make directly"; eqawarn "rather execute Xemake -j1 if you have issues with parallel make"; VIRTUALX_COMMAND="emake -j1" virtualmake "$@" } __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 } _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 } 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 applied d f; local -A _eapply_user_patches; local prev_shopt=$(shopt -p nullglob); shopt -s nullglob; for d in "${basedir}"/${CATEGORY}/{${P}-${PR},${P},${PN}}{:${SLOT%/*},}; do for f in "${d}"/*; do if [[ ( ${f} == *.diff || ${f} == *.patch ) && -z ${_eapply_user_patches[${f##*/}]} ]]; then _eapply_user_patches[${f##*/}]=${f}; fi; done; done; if [[ ${#_eapply_user_patches[@]} -gt 0 ]]; then while read -r -d '' f; do f=${_eapply_user_patches[${f}]}; if [[ -s ${f} ]]; then eapply "${f}"; applied=1; fi; done < <(printf -- '%s\0' "${!_eapply_user_patches[@]}" | LC_ALL=C sort -z); fi; ${prev_shopt}; [[ -n ${applied} ]] && ewarn "User patches applied." } 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 ) } get_libdir () { local libdir_var="LIBDIR_${ABI}"; local libdir="lib"; [[ -n ${ABI} && -n ${!libdir_var} ]] && libdir=${!libdir_var}; echo "${libdir}" } 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 } 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[@]#[+-]}" } 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}} } perl-module_pkg_postinst () { debug-print-function $FUNCNAME "$@"; if [[ ${CATEGORY} != perl-core ]]; then eerror "perl-module.eclass: You are calling perl-module_pkg_postinst outside the perl-core category."; die " This does not do anything; the call can be removed."; fi; perl_link_duallife_scripts } perl-module_pkg_postrm () { debug-print-function $FUNCNAME "$@"; if [[ ${CATEGORY} != perl-core ]]; then eerror "perl-module.eclass: You are calling perl-module_pkg_postrm outside the perl-core category."; die " This does not do anything; the call can be removed."; fi; perl_link_duallife_scripts } perl-module_src_compile () { debug-print-function $FUNCNAME "$@"; perl_set_version; if [[ $(declare -p mymake 2>&-) != "declare -a mymake="* ]]; then local mymake_local=(${mymake}); else local mymake_local=("${mymake[@]}"); fi; if [[ -f Build ]]; then ./Build build || die "Compilation failed"; else if [[ -f Makefile ]]; then set -- OTHERLDFLAGS="${LDFLAGS}" "${mymake_local[@]}"; einfo "emake" "$@"; emake "$@" || die "Compilation failed"; fi; fi } perl-module_src_configure () { debug-print-function $FUNCNAME "$@"; if [[ ${EAPI:-0} == 5 && ${SRC_PREP} == yes ]]; then return 0; fi; SRC_PREP="yes"; perl_check_env; perl_set_version; [[ -z ${pm_echovar} ]] && export PERL_MM_USE_DEFAULT=1; export PERL_EXTUTILS_AUTOINSTALL="--skipdeps"; if [[ $(declare -p myconf 2>&-) != "declare -a myconf="* ]]; then local myconf_local=(${myconf}); else local myconf_local=("${myconf[@]}"); fi; if [[ ( ${PREFER_BUILDPL} == yes || ! -f Makefile.PL ) && -f Build.PL ]]; then if grep -q '\(use\|require\)\s*Module::Build::Tiny' Build.PL; then einfo "Using Module::Build::Tiny"; if [[ ${DEPEND} != *dev-perl/Module-Build-Tiny* && ${PN} != Module-Build-Tiny ]]; then eerror "QA Notice: The ebuild uses Module::Build::Tiny but doesn't depend on it."; die " Add dev-perl/Module-Build-Tiny to DEPEND!"; fi; else einfo "Using Module::Build"; if [[ ${DEPEND} != *virtual/perl-Module-Build* && ${DEPEND} != *dev-perl/Module-Build* && ${PN} != Module-Build ]]; then eerror "QA Notice: The ebuild uses Module::Build but doesn't depend on it."; die " Add dev-perl/Module-Build to DEPEND!"; fi; fi; set -- --installdirs=vendor --libdoc= --destdir="${D}" --create_packlist=1 "${myconf_local[@]}"; einfo "perl Build.PL" "$@"; perl Build.PL "$@" <<< "${pm_echovar}" || die "Unable to build!"; else if [[ -f Makefile.PL ]]; then einfo "Using ExtUtils::MakeMaker"; set -- PREFIX=${EPREFIX}/usr INSTALLDIRS=vendor INSTALLMAN3DIR='none' DESTDIR="${D}" "${myconf_local[@]}"; einfo "perl Makefile.PL" "$@"; perl Makefile.PL "$@" <<< "${pm_echovar}" || die "Unable to build!"; fi; fi; if [[ ! -f Build.PL && ! -f Makefile.PL ]]; then einfo "No Make or Build file detected..."; return; fi } perl-module_src_install () { debug-print-function $FUNCNAME "$@"; perl_set_version; local f; if [[ -f Build ]]; then mytargets="${mytargets:-install}"; mbparams="${mbparams:---pure}"; einfo "./Build ${mytargets} ${mbparams}"; ./Build ${mytargets} ${mbparams} || die "./Build ${mytargets} ${mbparams} failed"; else if [[ -f Makefile ]]; then case "${CATEGORY}" in dev-perl | perl-core) mytargets="pure_install" ;; *) mytargets="install" ;; esac; if [[ $(declare -p myinst 2>&-) != "declare -a myinst="* ]]; then local myinst_local=(${myinst}); else local myinst_local=("${myinst[@]}"); fi; emake "${myinst_local[@]}" ${mytargets} || die "emake ${myinst_local[@]} ${mytargets} failed"; fi; fi; perl_delete_module_manpages; perl_delete_localpod; if [[ ${EAPI:-0} == 5 ]]; then perl_delete_packlist; else perl_fix_packlist; perl_delete_emptybsdir; fi; perl_remove_temppath; for f in Change* CHANGES README* TODO FAQ ${mydoc}; do [[ -s ${f} ]] && dodoc ${f}; done; if [[ ${EAPI:-0} != 5 ]]; then if in_iuse examples && use examples; then [[ ${#DIST_EXAMPLES[@]} -eq 0 ]] || perl_doexamples "${DIST_EXAMPLES[@]}"; fi; fi; perl_link_duallife_scripts } perl-module_src_prepare () { debug-print-function $FUNCNAME "$@"; if [[ ${EAPI:-0} == 5 ]]; then [[ -n ${PATCHES[@]} ]] && epatch "${PATCHES[@]}"; debug-print "$FUNCNAME: applying user patches"; epatch_user; else default; fi; if [[ -n ${PERL_RM_FILES[@]} ]]; then debug-print "$FUNCNAME: stripping unneeded files"; perl_rm_files "${PERL_RM_FILES[@]}"; fi; perl_fix_osx_extra } perl-module_src_test () { debug-print-function $FUNCNAME "$@"; local my_test_control; local my_test_verbose; if [[ ${EAPI:-0} == 5 ]]; then my_test_control=${SRC_TEST}; my_test_verbose=${TEST_VERBOSE:-0}; if has 'do' ${my_test_control} || has 'parallel' ${my_test_control}; then if has "${my_test_verbose}" 0 && has 'parallel' ${my_test_control}; then export HARNESS_OPTIONS=j$(makeopts_jobs); einfo "Test::Harness Jobs=$(makeopts_jobs)"; fi; else einfo Skipping tests due to SRC_TEST=${SRC_TEST}; return 0; fi; else [[ -n "${DIST_TEST_OVERRIDE}" ]] && ewarn DIST_TEST_OVERRIDE is set to ${DIST_TEST_OVERRIDE}; my_test_control=${DIST_TEST_OVERRIDE:-${DIST_TEST:-do parallel}}; if ! has 'do' ${my_test_control} && ! has 'parallel' ${my_test_control}; then einfo Skipping tests due to DIST_TEST=${my_test_control}; return 0; fi; if has verbose ${my_test_control}; then my_test_verbose=1; else my_test_verbose=0; fi; if has parallel ${my_test_control}; then export HARNESS_OPTIONS=j$(makeopts_jobs); einfo "Test::Harness Jobs=$(makeopts_jobs)"; fi; if ! has network ${my_test_control}; then export NO_NETWORK_TESTING=1; fi; fi; perl_set_version; if [[ -f Build ]]; then ./Build test verbose=${my_test_verbose} || die "test failed"; else if [[ -f Makefile ]]; then emake test TEST_VERBOSE=${my_test_verbose} || die "test failed"; fi; fi } perl-module_src_unpack () { debug-print-function $FUNCNAME "$@"; [[ ${EAPI:-0} == 5 ]] || die "perl-module_src_unpack is banned in EAPI=6 or later"; unpacker_src_unpack } perl_check_env () { local errored value; for i in PERL_MM_OPT PERL5LIB PERL5OPT PERL_MB_OPT PERL_CORE PERLPREFIX; do [ -v $i ] || continue; if [ ${errored:-0} == 0 ]; then if [ -n "${I_KNOW_WHAT_I_AM_DOING}" ]; then elog "perl-module.eclass: Suspicious environment values found."; else eerror "perl-module.eclass: Suspicious environment values found."; fi; fi; errored=1; value=${!i}; if [ -n "${I_KNOW_WHAT_I_AM_DOING}" ]; then elog " $i=\"$value\""; else eerror " $i=\"$value\""; fi; done; [ ${errored:-0} == 0 ] && return; if [ -n "${I_KNOW_WHAT_I_AM_DOING}" ]; then elog "Continuing anyway, seems you know what you're doing."; return; fi; eerror "Your environment settings may lead to undefined behavior and/or build failures."; die "Please fix your environment ( ~/.bashrc, package.env, ... ), see above for details." } perl_delete_emptybsdir () { debug-print-function $FUNCNAME "$@"; perl_set_version; if [[ -d ${D}/${VENDOR_ARCH} ]]; then find "${D}/${VENDOR_ARCH}" -type f -a -name '*.bs' -a -empty -delete; find "${D}" -depth -mindepth 1 -type d -empty -delete; fi } perl_delete_localpod () { debug-print-function $FUNCNAME "$@"; find "${D}" -type f -name perllocal.pod -delete; find "${D}" -depth -mindepth 1 -type d -empty -delete } perl_delete_module_manpages () { debug-print-function $FUNCNAME "$@"; if [[ -d "${ED}"/usr/share/man ]]; then find "${ED}"/usr/share/man -type f -name "*.3pm" -delete; find "${ED}"/usr/share/man -depth -type d -empty -delete; fi } perl_delete_packlist () { debug-print-function $FUNCNAME "$@"; perl_set_version; if [[ -d ${D}/${VENDOR_ARCH} ]]; then find "${D}/${VENDOR_ARCH}" -type f -a -name .packlist -delete; perl_delete_emptybsdir; fi } perl_doexamples () { debug-print-function $FUNCNAME "$@"; einfo "Installing examples into /usr/share/doc/${PF}/examples"; docompress -x /usr/share/doc/${PF}/examples; docinto examples/; dodoc -r $@ } perl_domodule () { local target_prefix=""; local files=(); local doins_opts=(); local recursive="false"; local target; local file; while [[ $# -gt 0 ]]; do case $1 in -C | --target-prefix) [[ -z "${2}" || "${2:0:1}" == "-" ]] && die "${FUNCNAME}: -C|--target-prefix expects an argument, got \"$2\"!"; target_prefix="${2}"; shift 2 ;; -r) recursive="true"; shift ;; *) [[ -z "${1}" || "${1:0:1}" == "-" ]] && die "${FUNCNAME}: Unknown argument \"${1}\"!"; files+=("${1}"); shift 1 ;; esac; done; if [[ "true" == $recursive ]]; then doins_opts+=("-r"); fi; for file in "${files[@]}"; do [[ -e "${file}" ]] || die "$FUNCNAME: Argument \"${file}\" is not an existing file"; [[ "false" == ${recursive} && -d "${file}" ]] && die "$FUNCNAME: Argument \"${file}\" is a directory ( needs -r parameter )"; done; target="$(perl_get_vendorlib)"; [[ -z "${target_prefix}" ]] || target="${target%/}/${target_prefix#/}"; insinto "/${target#/}"; doins "${doins_opts[@]}" "${files[@]}" } perl_fix_osx_extra () { debug-print-function $FUNCNAME "$@"; local f; find "${S}" -type f -name "._*" -print0 | while read -rd '' f; do einfo "Removing AppleDouble encoded Macintosh file: ${f#${S}/}"; rm -f "${f}"; f=${f#${S}/}; grep -q "${f}" "${S}"/MANIFEST && elog "AppleDouble encoded Macintosh file in MANIFEST: ${f#${S}/}"; done } perl_fix_packlist () { debug-print-function $FUNCNAME "$@"; local packlist_temp="${T}/.gentoo_packlist_temp"; find "${D}" -type f -name '.packlist' -print0 | while read -rd '' f; do if file "${f}" | grep -q -i " text"; then einfo "Fixing packlist file /${f#${D}}"; sed -i -e "s:${D%/}/:/:g" "${f}"; sort -u "${f}" > "${packlist_temp}"; mv "${packlist_temp}" "${f}"; cat "${f}" | while read -r entry; do if [ ! -e "${D}/${entry}" ]; then einfo "Pruning surplus packlist entry ${entry}"; grep -v -x -F "${entry}" "${f}" > "${packlist_temp}"; mv "${packlist_temp}" "${f}"; fi; done; fi; done } perl_get_module_version () { debug-print-function $FUNCNAME "$@"; [[ $# -gt 0 ]] || die "${FUNCNAME}: No module name provided"; [[ $# -lt 2 ]] || die "${FUNCNAME}: Too many parameters ($#)"; if ! perl_has_module "$@"; then echo "(Not Installed)"; return 1; fi; perl -we 'my $mn = $ARGV[0]; $mn =~ s{(::|\x{27})}{/}g; local $@; eval { require qq[${mn}.pm]; 1 } or do { print q[(Compilation failed in require)]; exit 1; }; my $stash = \%{ $ARGV[0] . q[::] }; if ( not exists $stash->{VERSION} ) { print q[(No VERSION property)]; exit 0; } if ( not defined ${$stash->{VERSION}} ) { print q[(undef)]; exit 0; } print ${$stash->{VERSION}}; exit 0; ' "$@" } perl_get_raw_vendorlib () { debug-print-function $FUNCNAME "$@"; [[ $# -lt 1 ]] || die "${FUNCNAME}: Too many parameters ($#)"; perl -MConfig -e'exists $Config{$ARGV[0]} || die qq{No such Config key "$ARGV[0]"}; print $Config{$ARGV[0]}; exit 0' -- "installvendorlib" || die "Can't extract installvendorlib from Perl Configuration" } perl_get_vendorlib () { debug-print-function $FUNCNAME "$@"; [[ $# -lt 1 ]] || die "${FUNCNAME}: Too many parameters ($#)"; perl -M5.014 -MConfig -e'exists $Config{$ARGV[0]} || die qq{No such Config key "$ARGV[0]"}; print $Config{$ARGV[0]} =~ s{\A\Q$ARGV[1]\E}{}r; exit 0' -- "installvendorlib" "$EPREFIX" || die "Can't extract installvendorlib from Perl Configuration" } perl_has_module () { debug-print-function $FUNCNAME "$@"; [[ $# -gt 0 ]] || die "${FUNCNAME}: No module name provided"; [[ $# -lt 2 ]] || die "${FUNCNAME}: Too many parameters ($#)"; perl -we 'my $mn = $ARGV[0]; $mn =~ s{(::|\x{27})}{/}g; for(@INC){ next if ref $_; exit 0 if -r $_ . q[/] . $mn . q[.pm] } exit 1' "$@" } perl_has_module_version () { debug-print-function $FUNCNAME "$@"; [[ $# -gt 0 ]] || die "${FUNCNAME}: No module name provided"; [[ $# -gt 1 ]] || die "${FUNCNAME}: No module version provided"; [[ $# -lt 3 ]] || die "${FUNCNAME}: Too many parameters ($#)"; perl -we 'my $mn = $ARGV[0]; $mn =~ s{(::|\x{27})}{/}g; exit ( eval { require qq[${mn}.pm]; $ARGV[0]->VERSION($ARGV[1]); 1 } ? 0 : 1 )' "$@" } perl_link_duallife_scripts () { debug-print-function $FUNCNAME "$@"; if [[ ${CATEGORY} != perl-core ]] || ! has_version ">=dev-lang/perl-5.8.8-r8"; then return 0; fi; local i ff; if has "${EBUILD_PHASE:-none}" "postinst" "postrm"; then for i in "${DUALLIFESCRIPTS[@]}"; do alternatives_auto_makesym "/${i}" "/${i}-[0-9]*"; done; for i in "${DUALLIFEMAN[@]}"; do ff=`echo "${EROOT}"/${i%.1}-${PV}-${P}.1*`; ff=${ff##*.1}; alternatives_auto_makesym "/${i}${ff}" "/${i%.1}-[0-9]*"; done; else pushd "${ED}" > /dev/null; for i in $(find usr/bin -maxdepth 1 -type f 2>/dev/null); do mv ${i}{,-${PV}-${P}} || die; DUALLIFESCRIPTS[${#DUALLIFESCRIPTS[*]}]=${i}; done; for i in $(find usr/share/man/man1 -maxdepth 1 -type f 2>/dev/null); do mv ${i} ${i%.1}-${PV}-${P}.1 || die; DUALLIFEMAN[${#DUALLIFEMAN[*]}]=${i}; done; popd > /dev/null; fi } perl_remove_temppath () { debug-print-function $FUNCNAME "$@"; find "${D}" -type f -not -name '*.so' -print0 | while read -rd '' f; do if file "${f}" | grep -q -i " text"; then grep -q "${D}" "${f}" && ewarn "QA: File contains a temporary path ${f}"; sed -i -e "s:${D%/}/:/:g" "${f}"; fi; done } perl_rm_files () { debug-print-function $FUNCNAME "$@"; local skipfile="${T}/.gentoo_makefile_skip"; local manifile="${S}/MANIFEST"; local manitemp="${T}/.gentoo_manifest_temp"; oldifs="$IFS"; IFS="\n"; for filename in "$@"; do einfo "Removing un-needed ${filename}"; rm -f "${S}/${filename}"; [[ -e "${manifile}" ]] && echo "${filename}" >> "${skipfile}"; done; if [[ -e "${manifile}" && -e "${skipfile}" ]]; then einfo "Fixing Manifest"; grep -v -F -f "${skipfile}" "${manifile}" > "${manitemp}"; mv -f -- "${manitemp}" "${manifile}"; rm -- "${skipfile}"; fi; IFS="$oldifs" } perl_set_version () { debug-print-function $FUNCNAME "$@"; debug-print "$FUNCNAME: perlinfo_done=${perlinfo_done}"; ${perlinfo_done} && return 0; perlinfo_done=true; local f version install{{site,vendor}{arch,lib},archlib}; eval "$(perl -V:{version,install{{site,vendor}{arch,lib},archlib}} )"; PERL_VERSION=${version}; SITE_ARCH=${installsitearch}; SITE_LIB=${installsitelib}; ARCH_LIB=${installarchlib}; VENDOR_LIB=${installvendorlib}; VENDOR_ARCH=${installvendorarch} } pkg_nofetch () { default } src_compile () { perl-module_src_compile "$@" } src_configure () { perl-module_src_configure "$@" } src_install () { perl-module_src_install; rm "${D}"/${VENDOR_ARCH}/auto/Tk/pTk/extralibs.ld || die } src_prepare () { perl-module_src_prepare "$@" } src_test () { virtx perl-module_src_test } src_unpack () { default } virtualmake () { debug-print-function ${FUNCNAME} "$@"; [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use virtx"; if [[ -n ${maketype} ]]; then [[ ${EAPI} == [45] ]] || die "maketype is banned in EAPI > 5"; eqawarn "ebuild is exporting \$maketype=${maketype}"; eqawarn "Ebuild should be migrated to use 'virtx command' instead."; VIRTUALX_COMMAND=${maketype}; fi; virtx "${VIRTUALX_COMMAND}" "${@}" } virtx () { debug-print-function ${FUNCNAME} "$@"; [[ $# -lt 1 ]] && die "${FUNCNAME} needs at least one argument"; local i=0; local retval=0; local OLD_SANDBOX_ON="${SANDBOX_ON}"; local XVFB XHOST XDISPLAY; local xvfbargs="-screen 0 1280x1024x24 +extension RANDR"; XVFB=$(type -p Xvfb) || die; XHOST=$(type -p xhost) || die; debug-print "${FUNCNAME}: running Xvfb hack"; export XAUTHORITY=; einfo "Scanning for an open DISPLAY to start Xvfb ..."; XDISPLAY=$(i=1; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i}); debug-print "${FUNCNAME}: XDISPLAY=${XDISPLAY}"; export SANDBOX_ON="0"; debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}"; ${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2; local start=${XDISPLAY}; while [[ ! -f /tmp/.X${XDISPLAY}-lock ]]; do if ((XDISPLAY - start > 15)); then eerror "'${XVFB} :${XDISPLAY} ${xvfbargs}' returns:"; echo; ${XVFB} :${XDISPLAY} ${xvfbargs}; echo; eerror "If possible, correct the above error and try your emerge again."; die "Unable to start Xvfb"; fi; ((XDISPLAY++)); debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}"; ${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2; done; export SANDBOX_ON="${OLD_SANDBOX_ON}"; einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ..."; export DISPLAY=:${XDISPLAY}; debug-print "${FUNCNAME}: $@"; nonfatal "$@"; retval=$?; kill $(cat /tmp/.X${XDISPLAY}-lock); [[ ${retval} -ne 0 ]] && die "Failed to run '$@'"; return 0 }