Skip to content

Instantly share code, notes, and snippets.

@Althorion
Created July 28, 2017 11:22
Show Gist options
  • Save Althorion/06c94eea445f93bc187fc468513021d5 to your computer and use it in GitHub Desktop.
Save Althorion/06c94eea445f93bc187fc468513021d5 to your computer and use it in GitHub Desktop.
declare -x ABI="amd64"
declare -x ABI_X86="64"
declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci"
declare -x ANT_HOME="/usr/share/ant"
declare -x APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
declare -x ARCH="amd64"
declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_4 python_targets_python2_7 multilib systemd udev"
declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author"
declare -x CBUILD="x86_64-pc-linux-gnu"
declare -x CFLAGS="-march=native -O2 -pipe"
declare -x CFLAGS_amd64="-m64"
declare -x CFLAGS_default
declare -x CFLAGS_x32="-mx32"
declare -x CFLAGS_x86="-m32"
declare -x CHOST="x86_64-pc-linux-gnu"
declare -x CHOST_amd64="x86_64-pc-linux-gnu"
declare -x CHOST_default="x86_64-pc-linux-gnu"
declare -x CHOST_x32="x86_64-pc-linux-gnux32"
declare -x CHOST_x86="i686-pc-linux-gnu"
declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
declare -x CPU_FLAGS_X86="aes avx f16c fma3 fma4 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 xop"
declare -x CTARGET_default="x86_64-pc-linux-gnu"
declare -x CXXFLAGS="-march=native -O2 -pipe"
declare -x DEFAULT_ABI="amd64"
declare -x DEFINED_PHASES=" compile configure install prepare test unpack"
declare DEPEND="
>=dev-python/fonttools-3.5.0[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)]
dev-python/setuptools[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)]
cython? ( >=dev-python/cython-0.24[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)] )
test? ( dev-python/pytest-runner[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)] )
python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_4? ( dev-lang/python:3.4 ) python_targets_python3_5? ( dev-lang/python:3.5 ) python_targets_python3_6? ( dev-lang/python:3.6 ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)]"
declare DESCRIPTION="A CFF table subroutinizer for FontTools"
declare -- DESKTOP_DATABASE_DIR="/usr/share/applications"
declare -- DESKTOP_DATABASE_UPDATE_BIN="/usr/bin/update-desktop-database"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -x EAPI="6"
declare -x ELIBC="glibc"
declare -x EXEOPTIONS="-m0755"
declare -x FCFLAGS="-O2 -pipe"
declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
declare -x FFLAGS="-O2 -pipe"
declare -x FLTK_DOCDIR="/usr/share/doc/fltk-1.3.3-r3/html"
declare -x GCC_SPECS=""
declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx"
declare -x GRUB_PLATFORMS="efi-64"
declare -x GSETTINGS_BACKEND="dconf"
declare HDEPEND=""
declare HOMEPAGE="https://github.com/googlei18n/compreffor"
declare -x INHERITED=" vcs-snapshot toolchain-funcs multilib xdg-utils multiprocessing multibuild python-utils-r1 python-r1 distutils-r1"
declare -x INPUT_DEVICES="libinput"
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare IUSE="+cython test python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6"
declare -x IUSE_EFFECTIVE="abi_x86_64 alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 cython 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 m68k-mint mips nios2 ppc ppc-aix ppc-macos ppc64 ppc64-linux prefix prefix-chain prefix-guest python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 riscv s390 sh sparc sparc-fbsd sparc-solaris sparc64-solaris test userland_BSD userland_GNU x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt"
declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-chain prefix-guest"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="amd64"
declare -x KEYWORDS="~amd64 ~x86"
declare -x L10N="en-GB en-US en-CA pl-PL en pl"
declare -x LANG="pl_PL.UTF-8"
declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
declare -x LC_COLLATE="C"
declare -x LC_CTYPE="pl_PL.UTF-8"
declare -x LC_MESSAGES="C"
declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed"
declare -x LDFLAGS_amd64="-m elf_x86_64"
declare -x LDFLAGS_default
declare -x LDFLAGS_x32="-m elf32_x86_64"
declare -x LDFLAGS_x86="-m elf_i386"
declare -x LIBDIR_amd64="lib64"
declare -x LIBDIR_default="lib"
declare -x LIBDIR_x32="libx32"
declare -x LIBDIR_x86="lib32"
declare -x LIBOPTIONS="-m0644"
declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
declare -x LICENSE="Apache-2.0"
declare -x LINGUAS="en_GB en_US en_CA pl_PL en pl"
declare -x MAIL="/var/mail/root"
declare -x MAKEOPTS="-j8"
declare -x MANPAGER="manpager"
declare -- MIMEINFO_DATABASE_DIR="/usr/share/mime"
declare -- MIMEINFO_DATABASE_UPDATE_BIN="/usr/bin/update-mime-database"
declare -x MULTILIB_ABIS="amd64 x86"
declare -x MULTILIB_STRICT_DENY="64-bit.*shared object"
declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib"
declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec|llvm)"
declare -x MULTIOSDIRS="../lib64:../lib32"
declare -- MY_PV="0.4.5"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OFFICE_IMPLEMENTATION="libreoffice"
declare -x OPENGL_PROFILE="xorg-x11"
declare -x PATH="/usr/lib/portage/python3.4/ebuild-helpers/xattr:/usr/lib/portage/python3.4/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/5.4.0:/usr/lib/llvm/4/bin"
declare PDEPEND=""
declare -x PHP_TARGETS="php5-6"
declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig"
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/compreffor-0.4.5/html")'
declare -x PORTAGE_NICENESS="15"
declare -x POSTGRES_TARGETS="postgres9_5"
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 PROVIDE=""
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -a PYTHON_COMPAT='([0]="python2_7" [1]="python3_4" [2]="python3_5" [3]="python3_6")'
declare -- PYTHON_DEPS="python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_4? ( dev-lang/python:3.4 ) python_targets_python3_5? ( dev-lang/python:3.5 ) python_targets_python3_6? ( dev-lang/python:3.6 ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)]"
declare -- PYTHON_REQUIRED_USE="|| ( python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 )"
declare -x PYTHON_SINGLE_TARGET="python3_4"
declare -x PYTHON_TARGETS="python2_7 python3_4"
declare -- PYTHON_USEDEP="python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)"
declare -x QT_GRAPHICSSYSTEM="raster"
declare -x QT_QPA_PLATFORMTHEME="qt5ct"
declare RDEPEND="
>=dev-python/fonttools-3.5.0[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)]
python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) python_targets_python3_4? ( dev-lang/python:3.4 ) python_targets_python3_5? ( dev-lang/python:3.5 ) python_targets_python3_6? ( dev-lang/python:3.6 ) >=dev-lang/python-exec-2:=[python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-)]"
declare REPOSITORY
declare REQUIRED_USE="|| ( python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 )"
declare -x RESTRICT="primaryuri"
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 RUBY_TARGETS="ruby21 ruby22"
declare -x R_HOME="/usr/lib64/R"
declare -x S="/var/tmp/portage/dev-python/compreffor-0.4.5/work/compreffor-0.4.5"
declare -x SANDBOX_DEBUG="0"
declare -x SANDBOX_DENY=""
declare -x SANDBOX_PREDICT="/var/tmp/portage/dev-python/compreffor-0.4.5/homedir:/dev/crypto:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig"
declare -x SANDBOX_READ="/:/var/tmp"
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/:/var/tmp/portage/dev-python/compreffor-0.4.5/homedir/.bash_history"
declare -x SHELL="/bin/bash"
declare -x SLOT="0"
declare SRC_URI="
mirror://githubcl/googlei18n/compreffor/tar.gz/0.4.5 -> compreffor-0.4.5.tar.gz
"
declare -x SUDO_COMMAND="/usr/bin/emerge -avquDN --with-bdeps=y --backtrack=666 @world"
declare -x SUDO_GID="1000"
declare -x SUDO_UID="1000"
declare -x SUDO_USER="althorion"
declare -x SYMLINK_LIB="yes"
declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1"
declare -x USE="abi_x86_64 amd64 cython elibc_glibc kernel_linux python_targets_python2_7 python_targets_python3_4 userland_GNU"
declare -x USERLAND="GNU"
declare -x USERNAME="root"
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 arm-linux arm64 hppa ia64 m68k m68k-mint mips nios2 ppc ppc64 ppc64-linux ppc-aix ppc-macos riscv s390 sh sparc sparc64-solaris sparc-fbsd sparc-solaris x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt"
declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX linux NetBSD OpenBSD SunOS Winnt"
declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
declare -x VIDEO_CARDS="amdgpu radeonsi"
declare -x XDG_CACHE_HOME="/var/tmp/portage/dev-python/compreffor-0.4.5/homedir/.cache"
declare -x XDG_CONFIG_DIRS="/etc/xdg"
declare -x XDG_CONFIG_HOME="/var/tmp/portage/dev-python/compreffor-0.4.5/homedir/.config"
declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share:/usr/share/gdm"
declare -x XDG_DATA_HOME="/var/tmp/portage/dev-python/compreffor-0.4.5/homedir/.local/share"
declare -x XDG_RUNTIME_DIR="/var/tmp/portage/dev-python/compreffor-0.4.5/temp/run"
declare -x XFCE_PLUGINS=""
declare -x XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
declare -- _DISTUTILS_R1="1"
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -- _MULTIBUILD="1"
declare -- _MULTILIB_ECLASS="1"
declare -- _MULTIPROCESSING_ECLASS="1"
declare -a _PYTHON_ALL_IMPLS='([0]="jython2_7" [1]="pypy" [2]="pypy3" [3]="python2_7" [4]="python3_4" [5]="python3_5" [6]="python3_6")'
declare -- _PYTHON_R1="1"
declare -a _PYTHON_SUPPORTED_IMPLS='([0]="python2_7" [1]="python3_4" [2]="python3_5" [3]="python3_6")'
declare -a _PYTHON_UNSUPPORTED_IMPLS='([0]="jython2_7" [1]="pypy" [2]="pypy3")'
declare -- _PYTHON_UTILS_R1="1"
declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
declare -- phase_func
PYTHON ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#.24.28PYTHON.29.2C_.24.7BEPYTHON.7D"
}
__eapi6_src_install ()
{
if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
emake DESTDIR="${D}" install;
fi;
einstalldocs
}
__eapi6_src_prepare ()
{
if [[ $(declare -p PATCHES 2>/dev/null) == "declare -a"* ]]; then
[[ -n ${PATCHES[@]} ]] && 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"
}
_distutils-r1_check_namespace_pth ()
{
local f pth=();
while IFS= read -r -d '' f; do
pth+=("${f}");
done < <(find "${ED}" -name '*-nspkg.pth' -print0);
if [[ -n ${pth[@]} ]]; then
ewarn "The following *-nspkg.pth files were found installed:";
ewarn;
for f in "${pth[@]}";
do
ewarn " ${f#${ED%/}}";
done;
ewarn;
ewarn "The presence of those files may break namespaces in Python 3.5+. Please";
ewarn "read our documentation on reliable handling of namespaces and update";
ewarn "the ebuild accordingly:";
ewarn;
ewarn " https://wiki.gentoo.org/wiki/Project:Python/Namespace_packages";
fi
}
_distutils-r1_clean_egg_info ()
{
rm -rf "${BUILD_DIR}"/lib/*.egg-info || die
}
_distutils-r1_copy_egg_info ()
{
mkdir -p "${BUILD_DIR}" || die;
find -name '*.egg-info' -type d -exec cp -R -p {} "${BUILD_DIR}"/ ';' || die
}
_distutils-r1_create_setup_cfg ()
{
cat > "${HOME}"/.pydistutils.cfg <<-_EOF_ ||
[build]
build-base = ${BUILD_DIR}
# using a single directory for them helps us export
# ${PYTHONPATH} and ebuilds find the sources independently
# of whether the package installs extensions or not
#
# note: due to some packages (wxpython) relying on separate
# platlib & purelib dirs, we do not set --build-lib (which
# can not be overriden with --build-*lib)
build-platlib = %(build-base)s/lib
build-purelib = %(build-base)s/lib
# make the ebuild writer lives easier
build-scripts = %(build-base)s/scripts
# this is needed by distutils_install_for_testing since
# setuptools like to create .egg files for install --home.
[bdist_egg]
dist-dir = ${BUILD_DIR}/dist
_EOF_
die
if [[ ${EBUILD_PHASE} == install ]]; then
cat >> "${HOME}"/.pydistutils.cfg <<-_EOF_ ||
# installation paths -- allow calling extra install targets
# without the default 'install'
[install]
compile = True
optimize = 2
root = ${D}
_EOF_
die
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
cat >> "${HOME}"/.pydistutils.cfg <<-_EOF_ ||
install-scripts = $(python_get_scriptdir)
_EOF_
die;
fi;
fi
}
_distutils-r1_disable_ez_setup ()
{
local stub="def use_setuptools(*args, **kwargs): pass";
if [[ -f ez_setup.py ]]; then
echo "${stub}" > ez_setup.py || die;
fi;
if [[ -f distribute_setup.py ]]; then
echo "${stub}" > distribute_setup.py || die;
fi
}
_distutils-r1_run_common_phase ()
{
local DISTUTILS_ORIG_BUILD_DIR=${BUILD_DIR};
if [[ -n ${DISTUTILS_SINGLE_IMPL} ]]; then
_distutils-r1_run_foreach_impl "${@}";
else
local -x EPYTHON PYTHON;
local -x PATH=${PATH} PKG_CONFIG_PATH=${PKG_CONFIG_PATH};
python_setup "${DISTUTILS_ALL_SUBPHASE_IMPLS[@]}";
local MULTIBUILD_VARIANTS=("${EPYTHON/./_}");
local _DISTUTILS_INITIAL_CWD=${PWD};
multibuild_foreach_variant distutils-r1_run_phase "${@}";
fi
}
_distutils-r1_run_foreach_impl ()
{
debug-print-function ${FUNCNAME} "${@}";
local _DISTUTILS_INITIAL_CWD=${PWD};
set -- distutils-r1_run_phase "${@}";
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
python_foreach_impl "${@}";
else
if [[ ! -n ${EPYTHON} ]]; then
die "EPYTHON unset, python-single-r1_pkg_setup not called?!";
fi;
local BUILD_DIR=${BUILD_DIR:-${S}};
BUILD_DIR=${BUILD_DIR%%/}_${EPYTHON};
"${@}";
fi
}
_distutils-r1_wrap_scripts ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${#} -eq 2 ]] || die "usage: ${FUNCNAME} <path> <bindir>";
local path=${1};
local bindir=${2};
local PYTHON_SCRIPTDIR;
python_export PYTHON_SCRIPTDIR;
local f python_files=() non_python_files=();
if [[ -d ${path}${PYTHON_SCRIPTDIR} ]]; then
for f in "${path}${PYTHON_SCRIPTDIR}"/*;
do
[[ -d ${f} ]] && die "Unexpected directory: ${f}";
debug-print "${FUNCNAME}: found executable at ${f#${path}/}";
local shebang;
read -r shebang < "${f}";
if [[ ${shebang} == '#!'*${EPYTHON}* ]]; then
debug-print "${FUNCNAME}: matching shebang: ${shebang}";
python_files+=("${f}");
else
debug-print "${FUNCNAME}: non-matching shebang: ${shebang}";
non_python_files+=("${f}");
fi;
mkdir -p "${path}${bindir}" || die;
done;
for f in "${python_files[@]}";
do
local basename=${f##*/};
debug-print "${FUNCNAME}: installing wrapper at ${bindir}/${basename}";
_python_ln_rel "${path}${EPREFIX}"/usr/lib/python-exec/python-exec2 "${path}${bindir}/${basename}" || die;
done;
for f in "${non_python_files[@]}";
do
local basename=${f##*/};
debug-print "${FUNCNAME}: moving ${f#${path}/} to ${bindir}/${basename}";
mv "${f}" "${path}${bindir}/${basename}" || die;
done;
fi
}
_gcc-install-dir ()
{
echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')"
}
_gcc-specs-directive_raw ()
{
local cc=$(tc-getCC);
local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
$1=="*"directive":" { pspec=spec; spec=""; outside=0; next }
outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
{ spec=spec $0 }
END { print spec }';
return 0
}
_gcc-specs-exists ()
{
[[ -f $(_gcc-install-dir)/$1 ]]
}
_gcc_fullversion ()
{
local ver="$1";
shift;
set -- $($(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__");
eval echo "$ver"
}
_multijob_fork ()
{
[[ $# -eq 1 ]] || die "incorrect number of arguments";
local ret=0;
[[ $1 == "post" ]] && : $(( ++mj_num_jobs ));
if [[ ${mj_num_jobs} -ge ${mj_max_jobs} ]]; then
multijob_finish_one;
ret=$?;
fi;
[[ $1 == "pre" ]] && : $(( ++mj_num_jobs ));
return ${ret}
}
_python_check_dead_variables ()
{
local v;
for v in PYTHON_DEPEND PYTHON_USE_WITH{,_OR,_OPT} {RESTRICT,SUPPORT}_PYTHON_ABIS;
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Ebuild_head";
fi;
done;
for v in PYTHON_{CPPFLAGS,CFLAGS,CXXFLAGS,LDFLAGS};
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#PYTHON_CFLAGS";
fi;
done;
for v in PYTHON_TESTS_RESTRICTED_ABIS PYTHON_EXPORT_PHASE_FUNCTIONS PYTHON_VERSIONED_{SCRIPTS,EXECUTABLES} PYTHON_NONVERSIONED_EXECUTABLES;
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite";
fi;
done;
for v in DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES DISTUTILS_SETUP_FILES DISTUTILS_GLOBAL_OPTIONS DISTUTILS_SRC_TEST PYTHON_MODNAME;
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#${v}";
fi;
done;
if [[ -n ${DISTUTILS_DISABLE_TEST_DEPENDENCY} ]]; then
die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#DISTUTILS_SRC_TEST";
fi;
for v in PYTHON_BDEPEND PYTHON_MULTIPLE_ABIS PYTHON_ABI_TYPE PYTHON_RESTRICTED_ABIS PYTHON_TESTS_FAILURES_TOLERANT_ABIS PYTHON_CFFI_MODULES_GENERATION_COMMANDS;
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite";
fi;
done
}
_python_check_locale_sanity ()
{
local -x LC_ALL=${1};
local IFS=;
local lc=({a..z});
local uc=({A..Z});
local input="${lc[*]}${uc[*]}";
local output=$(tr '[:lower:][:upper:]' '[:upper:][:lower:]' <<<"${input}");
[[ ${output} == "${uc[*]}${lc[*]}" ]]
}
_python_impl_matches ()
{
[[ ${#} -ge 2 ]] || die "${FUNCNAME}: takes at least 2 parameters";
local impl=${1} pattern;
shift;
for pattern in "$@";
do
if [[ ${pattern} == -2 ]]; then
! python_is_python3 "${impl}";
return;
else
if [[ ${pattern} == -3 ]]; then
python_is_python3 "${impl}";
return;
else
if [[ ${impl/./_} == ${pattern/./_} ]]; then
return 0;
fi;
fi;
fi;
done;
return 1
}
_python_impl_supported ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${#} -eq 1 ]] || die "${FUNCNAME}: takes exactly 1 argument (impl).";
local impl=${1};
case "${impl}" in
python2_7 | python3_[456] | jython2_7)
return 0
;;
pypy1_[89] | pypy2_0 | python2_[56] | python3_[123])
return 1
;;
pypy | pypy3)
if [[ ${EAPI:-0} == [01234] ]]; then
die "PyPy is supported in EAPI 5 and newer only.";
fi
;;
*)
[[ -n ${PYTHON_COMPAT_NO_STRICT} ]] && return 1;
die "Invalid implementation in PYTHON_COMPAT: ${impl}"
;;
esac
}
_python_ln_rel ()
{
debug-print-function ${FUNCNAME} "${@}";
local target=${1};
local symname=${2};
local tgpath=${target%/*}/;
local sympath=${symname%/*}/;
local rel_target=;
while [[ -n ${sympath} ]]; do
local tgseg= symseg=;
while [[ ! -n ${tgseg} && -n ${tgpath} ]]; do
tgseg=${tgpath%%/*};
tgpath=${tgpath#${tgseg}/};
done;
while [[ ! -n ${symseg} && -n ${sympath} ]]; do
symseg=${sympath%%/*};
sympath=${sympath#${symseg}/};
done;
if [[ ${tgseg} != ${symseg} ]]; then
rel_target=../${rel_target}${tgseg:+${tgseg}/};
fi;
done;
rel_target+=${tgpath}${target##*/};
debug-print "${FUNCNAME}: ${symname} -> ${target}";
debug-print "${FUNCNAME}: rel_target = ${rel_target}";
ln -fs "${rel_target}" "${symname}"
}
_python_multibuild_wrapper ()
{
debug-print-function ${FUNCNAME} "${@}";
local -x EPYTHON PYTHON;
local -x PATH=${PATH} PKG_CONFIG_PATH=${PKG_CONFIG_PATH};
python_export "${MULTIBUILD_VARIANT}" EPYTHON PYTHON;
python_wrapper_setup;
"${@}"
}
_python_obtain_impls ()
{
_python_validate_useflags;
if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
MULTIBUILD_VARIANTS=(${PYTHON_COMPAT_OVERRIDE});
return;
fi;
MULTIBUILD_VARIANTS=();
local impl;
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
has "${impl}" "${PYTHON_COMPAT[@]}" && use "python_targets_${impl}" && MULTIBUILD_VARIANTS+=("${impl}");
done
}
_python_set_impls ()
{
local i;
if ! declare -p PYTHON_COMPAT &> /dev/null; then
die 'PYTHON_COMPAT not declared.';
fi;
if [[ $(declare -p PYTHON_COMPAT) != "declare -a"* ]]; then
die 'PYTHON_COMPAT must be an array.';
fi;
for i in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${i}";
done;
local supp=() unsupp=();
for i in "${_PYTHON_ALL_IMPLS[@]}";
do
if has "${i}" "${PYTHON_COMPAT[@]}"; then
supp+=("${i}");
else
unsupp+=("${i}");
fi;
done;
if [[ ! -n ${supp[@]} ]]; then
die "No supported implementation in PYTHON_COMPAT.";
fi;
if [[ -n ${_PYTHON_SUPPORTED_IMPLS[@]} ]]; then
if [[ ${_PYTHON_SUPPORTED_IMPLS[@]} != ${supp[@]} ]]; then
eerror "Supported impls (PYTHON_COMPAT) changed between inherits!";
eerror "Before: ${_PYTHON_SUPPORTED_IMPLS[*]}";
eerror "Now : ${supp[*]}";
die "_PYTHON_SUPPORTED_IMPLS integrity check failed";
fi;
if [[ ${_PYTHON_UNSUPPORTED_IMPLS[@]} != ${unsupp[@]} ]]; then
eerror "Unsupported impls changed between inherits!";
eerror "Before: ${_PYTHON_UNSUPPORTED_IMPLS[*]}";
eerror "Now : ${unsupp[*]}";
die "_PYTHON_UNSUPPORTED_IMPLS integrity check failed";
fi;
else
_PYTHON_SUPPORTED_IMPLS=("${supp[@]}");
_PYTHON_UNSUPPORTED_IMPLS=("${unsupp[@]}");
readonly _PYTHON_SUPPORTED_IMPLS _PYTHON_UNSUPPORTED_IMPLS;
fi
}
_python_validate_useflags ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
if [[ ! -n ${_PYTHON_COMPAT_OVERRIDE_WARNED} ]]; then
ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python";
ewarn "implementations will be enabled:";
ewarn;
ewarn " ${PYTHON_COMPAT_OVERRIDE}";
ewarn;
ewarn "Dependencies won't be satisfied, and PYTHON_TARGETS will be ignored.";
_PYTHON_COMPAT_OVERRIDE_WARNED=1;
fi;
return;
fi;
local i;
for i in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
use "python_targets_${i}" && return 0;
done;
eerror "No Python implementation selected for the build. Please add one";
eerror "of the following values to your PYTHON_TARGETS (in make.conf):";
eerror;
eerror "${PYTHON_COMPAT[@]}";
echo;
die "No supported Python implementation in PYTHON_TARGETS."
}
_tc-getPROG ()
{
local tuple=$1;
local v var vars=$2;
local prog=($3);
var=${vars%% *};
for v in ${vars};
do
if [[ -n ${!v} ]]; then
export ${var}="${!v}";
echo "${!v}";
return 0;
fi;
done;
local search=;
[[ -n $4 ]] && search=$(type -p $4-${prog[0]});
[[ -z ${search} && -n ${!tuple} ]] && search=$(type -p ${!tuple}-${prog[0]});
[[ -n ${search} ]] && prog[0]=${search##*/};
export ${var}="${prog[*]}";
echo "${!var}"
}
bashpid ()
{
sh -c 'echo ${PPID}'
}
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' "$@"
}
distutils-r1_python_compile ()
{
debug-print-function ${FUNCNAME} "${@}";
_distutils-r1_copy_egg_info;
esetup.py build "${@}"
}
distutils-r1_python_configure ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI 6 (it was a no-op)"
}
distutils-r1_python_install ()
{
debug-print-function ${FUNCNAME} "${@}";
local args=("${@}");
local -x PYTHONDONTWRITEBYTECODE=;
addpredict "${EPREFIX}/usr/$(get_libdir)/${EPYTHON}";
addpredict /usr/lib/portage/pym;
addpredict /usr/local;
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
local mydistutilsargs=("${mydistutilsargs[@]}");
local scriptdir=${EPREFIX}/usr/bin;
local arg arg_vars;
[[ -n ${mydistutilsargs[@]} ]] && eval arg_vars+=('mydistutilsargs['{0..$(( ${#mydistutilsargs[@]} - 1 ))}']');
[[ -n ${args[@]} ]] && eval arg_vars+=('args['{0..$(( ${#args[@]} - 1 ))}']');
set -- "${arg_vars[@]}";
while [[ -n ${@} ]]; do
local arg_var=${1};
shift;
local a=${!arg_var};
case "${a}" in
--install-scripts=*)
scriptdir=${a#--install-scripts=};
unset "${arg_var}"
;;
--install-scripts)
scriptdir=${!1};
unset "${arg_var}" "${1}";
shift
;;
esac;
done;
fi;
local root=${D%/}/_${EPYTHON};
[[ -n ${DISTUTILS_SINGLE_IMPL} ]] && root=${D%/};
esetup.py install --root="${root}" "${args[@]}";
local forbidden_package_names=(examples test tests);
local p;
for p in "${forbidden_package_names[@]}";
do
if [[ -d ${root}$(python_get_sitedir)/${p} ]]; then
die "Package installs '${p}' package which is forbidden and likely a bug in the build system.";
fi;
done;
if [[ -d ${root}/usr/$(get_libdir)/pypy/share ]]; then
local cmd=die;
[[ ${EAPI} == [45] ]] && cmd=eqawarn;
"${cmd}" "Package installs 'share' in PyPy prefix, see bug #465546.";
fi;
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
_distutils-r1_wrap_scripts "${root}" "${scriptdir}";
multibuild_merge_root "${root}" "${D}";
fi
}
distutils-r1_python_install_all ()
{
debug-print-function ${FUNCNAME} "${@}";
einstalldocs;
if declare -p EXAMPLES &> /dev/null; then
[[ ${EAPI} != [45] ]] && die "EXAMPLES are banned in EAPI ${EAPI}";
( docinto examples;
dodoc -r "${EXAMPLES[@]}" );
docompress -x "/usr/share/doc/${PF}/examples";
fi;
_DISTUTILS_DEFAULT_CALLED=1
}
distutils-r1_python_prepare ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI 6 (it was a no-op)"
}
distutils-r1_python_prepare_all ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ ! -n ${DISTUTILS_OPTIONAL} ]]; then
if [[ ${EAPI} != [45] ]]; then
default;
else
[[ -n ${PATCHES} ]] && epatch "${PATCHES[@]}";
epatch_user;
fi;
fi;
if [[ ! -n ${DISTUTILS_IN_SOURCE_BUILD+1} ]]; then
if declare -f python_prepare > /dev/null; then
DISTUTILS_IN_SOURCE_BUILD=1;
fi;
fi;
_distutils-r1_disable_ez_setup;
if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} && ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
python_copy_sources;
fi;
_DISTUTILS_DEFAULT_CALLED=1
}
distutils-r1_run_phase ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} ]]; then
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
cd "${BUILD_DIR}" || die;
fi;
local BUILD_DIR=${BUILD_DIR}/build;
fi;
local -x PYTHONPATH="${BUILD_DIR}/lib:${PYTHONPATH}";
mkdir -p "${BUILD_DIR}/lib" || die;
local -x AR=${AR} CC=${CC} CPP=${CPP} CXX=${CXX};
tc-export AR CC CPP CXX;
local ldopts;
case "${CHOST}" in
*-aix*)
ldopts='-shared -Wl,-berok'
;;
*-darwin*)
ldopts='-bundle -undefined dynamic_lookup'
;;
*)
ldopts='-shared'
;;
esac;
local -x LDSHARED="${CC} ${ldopts}" LDCXXSHARED="${CXX} ${ldopts}";
"${@}";
cd "${_DISTUTILS_INITIAL_CWD}" || die
}
distutils-r1_src_compile ()
{
debug-print-function ${FUNCNAME} "${@}";
if declare -f python_compile > /dev/null; then
_distutils-r1_run_foreach_impl python_compile;
else
_distutils-r1_run_foreach_impl distutils-r1_python_compile;
fi;
if declare -f python_compile_all > /dev/null; then
_distutils-r1_run_common_phase python_compile_all;
fi
}
distutils-r1_src_configure ()
{
python_export_utf8_locale;
xdg_environment_reset;
if declare -f python_configure > /dev/null; then
_distutils-r1_run_foreach_impl python_configure;
fi;
if declare -f python_configure_all > /dev/null; then
_distutils-r1_run_common_phase python_configure_all;
fi
}
distutils-r1_src_install ()
{
debug-print-function ${FUNCNAME} "${@}";
if declare -f python_install > /dev/null; then
_distutils-r1_run_foreach_impl python_install;
else
_distutils-r1_run_foreach_impl distutils-r1_python_install;
fi;
local _DISTUTILS_DEFAULT_CALLED;
if declare -f python_install_all > /dev/null; then
_distutils-r1_run_common_phase python_install_all;
else
_distutils-r1_run_common_phase distutils-r1_python_install_all;
fi;
if [[ ! -n ${_DISTUTILS_DEFAULT_CALLED} ]]; then
local cmd=die;
[[ ${EAPI} == [45] ]] && cmd=eqawarn;
"${cmd}" "QA: python_install_all() didn't call distutils-r1_python_install_all";
fi;
_distutils-r1_check_namespace_pth
}
distutils-r1_src_prepare ()
{
debug-print-function ${FUNCNAME} "${@}";
local _DISTUTILS_DEFAULT_CALLED;
if declare -f python_prepare_all > /dev/null; then
python_prepare_all;
else
distutils-r1_python_prepare_all;
fi;
if [[ ! -n ${_DISTUTILS_DEFAULT_CALLED} ]]; then
local cmd=die;
[[ ${EAPI} == [45] ]] && cmd=eqawarn;
"${cmd}" "QA: python_prepare_all() didn't call distutils-r1_python_prepare_all";
fi;
if declare -f python_prepare > /dev/null; then
_distutils-r1_run_foreach_impl python_prepare;
fi
}
distutils-r1_src_test ()
{
debug-print-function ${FUNCNAME} "${@}";
if declare -f python_test > /dev/null; then
_distutils-r1_run_foreach_impl python_test;
_distutils-r1_run_foreach_impl _distutils-r1_clean_egg_info;
fi;
if declare -f python_test_all > /dev/null; then
_distutils-r1_run_common_phase python_test_all;
fi
}
distutils_get_intermediate_installation_image ()
{
die "${FUNCNAME}() is invalid for distutils-r1"
}
distutils_install_for_testing ()
{
debug-print-function ${FUNCNAME} "${@}";
TEST_DIR=${BUILD_DIR}/test;
local bindir=${TEST_DIR}/scripts;
local libdir=${TEST_DIR}/lib;
PYTHONPATH=${libdir}:${PYTHONPATH};
local add_args=(install --home="${TEST_DIR}" --install-lib="${libdir}" --install-scripts="${bindir}");
mkdir -p "${libdir}" || die;
esetup.py "${add_args[@]}" "${@}"
}
distutils_pkg_postinst ()
{
die "${FUNCNAME}() is invalid for distutils-r1, and pkg_postinst is unnecessary"
}
distutils_pkg_postrm ()
{
die "${FUNCNAME}() is invalid for distutils-r1, and pkg_postrm is unnecessary"
}
distutils_src_compile ()
{
die "${FUNCNAME}() is invalid for distutils-r1, you probably want: ${FUNCNAME/_/-r1_}"
}
distutils_src_install ()
{
die "${FUNCNAME}() is invalid for distutils-r1, you probably want: ${FUNCNAME/_/-r1_}"
}
distutils_src_prepare ()
{
die "${FUNCNAME}() is invalid for distutils-r1, you probably want: ${FUNCNAME/_/-r1_}"
}
distutils_src_test ()
{
die "${FUNCNAME}() is invalid for distutils-r1, you probably want: ${FUNCNAME/_/-r1_}"
}
distutils_src_unpack ()
{
die "${FUNCNAME}() is invalid for distutils-r1, and you don't want it in EAPI ${EAPI} anyway"
}
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};
started_applying=1;
ebegin "${prefix:-Applying }${f##*/}";
${patch_cmd} -p1 -f -s -g0 --no-backup-if-mismatch "${patch_options[@]}" < "${f}";
failed=${?};
if ! eend "${failed}"; then
__helpers_die "patch -p1 ${patch_options[*]} failed with ${f}";
fi
};
local patch_options=() files=();
local i found_doublehyphen;
for ((i = 1; i <= ${#@}; ++i ))
do
if [[ ${@:i:1} == -- ]]; then
patch_options=("${@:1:i-1}");
files=("${@:i+1}");
found_doublehyphen=1;
break;
fi;
done;
if [[ -z ${found_doublehyphen} ]]; then
for ((i = 1; i <= ${#@}; ++i ))
do
if [[ ${@:i:1} != -* ]]; then
patch_options=("${@:1:i-1}");
files=("${@:i}");
break;
fi;
done;
for i in "${files[@]}";
do
if [[ ${i} == -* ]]; then
die "eapply: all options must be passed before non-options";
fi;
done;
fi;
if [[ -z ${files[@]} ]]; 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}";
[[ -z ${files[@]} ]] && 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 d applied;
local prev_shopt=$(shopt -p nullglob);
shopt -s nullglob;
for d in "${basedir}"/${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT%/*}};
do
if [[ -n $(echo "${d}"/*.diff) || -n $(echo "${d}"/*.patch) ]]; then
eapply "${d}";
applied=1;
fi;
done;
${prev_shopt};
[[ -n ${applied} ]] && ewarn "User patches applied."
}
econf_build ()
{
local CBUILD=${CBUILD:-${CHOST}};
tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
}
einstalldocs ()
{
( if ! declare -p DOCS &> /dev/null; then
local d;
for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
do
[[ -f ${d} && -s ${d} ]] && docinto / && dodoc "${d}";
done;
else
if [[ $(declare -p DOCS) == "declare -a"* ]]; then
[[ -n ${DOCS[@]} ]] && docinto / && dodoc -r "${DOCS[@]}";
else
[[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS};
fi;
fi );
( if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
[[ -n ${HTML_DOCS[@]} ]] && docinto html && dodoc -r "${HTML_DOCS[@]}";
else
[[ -n ${HTML_DOCS} ]] && docinto html && dodoc -r ${HTML_DOCS};
fi )
}
esetup.py ()
{
debug-print-function ${FUNCNAME} "${@}";
local die_args=();
[[ ${EAPI} != [45] ]] && die_args+=(-n);
[[ -n ${BUILD_DIR} ]] && _distutils-r1_create_setup_cfg;
set -- "${PYTHON:-python}" setup.py "${mydistutilsargs[@]}" "${@}";
echo "${@}" 1>&2;
"${@}" || die "${die_args[@]}";
local ret=${?};
if [[ -n ${BUILD_DIR} ]]; then
rm "${HOME}"/.pydistutils.cfg || die "${die_args[@]}";
fi;
return ${ret}
}
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 ()
{
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_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 <USEFLAG>" 1>&2;
die "in_iuse() called without a parameter";
fi;
local liuse=(${IUSE_EFFECTIVE});
has "${use}" "${liuse[@]#[+-]}"
}
is_final_abi ()
{
has_multilib_profile || return 0;
set -- $(get_install_abis);
local LAST_ABI=$#;
[[ ${!LAST_ABI} == ${ABI} ]]
}
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]+\.[0-9]+).*:\3:p' -e "s:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:${2:-999}:p");
echo ${lavg:-${2:-999}}
}
multibuild_copy_sources ()
{
debug-print-function ${FUNCNAME} "${@}";
local _MULTIBUILD_INITIAL_BUILD_DIR=${BUILD_DIR:-${S}};
einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}";
local cp_args=();
if cp --reflink=auto --version &> /dev/null; then
cp_args+=(--reflink=auto);
fi;
function _multibuild_create_source_copy ()
{
einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}";
cp -p -R "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die
};
multibuild_foreach_variant _multibuild_create_source_copy
}
multibuild_for_best_variant ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
local MULTIBUILD_VARIANTS=("${MULTIBUILD_VARIANTS[$(( ${#MULTIBUILD_VARIANTS[@]} - 1 ))]}");
multibuild_foreach_variant "${@}"
}
multibuild_foreach_variant ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
local bdir=${BUILD_DIR:-${S}};
[[ ${bdir%%/} == ${WORKDIR%%/} ]] && bdir=${WORKDIR}/build;
local prev_id=${MULTIBUILD_ID:+${MULTIBUILD_ID}-};
local ret=0 lret=0 v;
debug-print "${FUNCNAME}: initial build_dir = ${bdir}";
for v in "${MULTIBUILD_VARIANTS[@]}";
do
local MULTIBUILD_VARIANT=${v};
local MULTIBUILD_ID=${prev_id}${v};
local BUILD_DIR=${bdir%%/}-${v};
function _multibuild_run ()
{
local i=1;
while [[ ${!i} == _* ]]; do
(( i += 1 ));
done;
[[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}";
"${@}"
};
_multibuild_run "${@}" > >(exec tee -a "${T}/build-${MULTIBUILD_ID}.log") 2>&1;
lret=${?};
done;
[[ ${ret} -eq 0 && ${lret} -ne 0 ]] && ret=${lret};
return ${ret}
}
multibuild_merge_root ()
{
local src=${1};
local dest=${2};
local ret;
if use userland_BSD; then
tar -C "${src}" -f - -c . | tar -x -f - -C "${dest}";
[[ ${PIPESTATUS[*]} == '0 0' ]];
ret=${?};
else
local cp_args=();
if cp -a --version &> /dev/null; then
cp_args+=(-a);
else
cp_args+=(-P -R -p);
fi;
if cp --reflink=auto --version &> /dev/null; then
cp_args+=(--reflink=auto);
fi;
cp "${cp_args[@]}" "${src}"/. "${dest}"/;
ret=${?};
fi;
if [[ ${ret} -ne 0 ]]; then
die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed.";
fi;
rm -rf "${src}"
}
multibuild_parallel_foreach_variant ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}";
multibuild_foreach_variant "${@}"
}
multijob_child_init ()
{
local mode="pre";
case $1 in
--pre)
mode="pre";
shift
;;
--post)
mode="post";
shift
;;
esac;
if [[ $# -eq 0 ]]; then
trap 'echo ${BASHPID:-$(bashpid)} $? >&'${mj_write_fd} EXIT;
trap 'exit 1' INT TERM;
else
local ret;
[[ ${mode} == "pre" ]] && {
multijob_pre_fork;
ret=$?
};
( multijob_child_init;
"$@" ) & [[ ${mode} == "post" ]] && {
multijob_post_fork;
ret=$?
};
return ${ret};
fi
}
multijob_finish ()
{
local ret=0;
while [[ ${mj_num_jobs} -gt 0 ]]; do
multijob_finish_one;
: $(( ret |= $? ));
done;
wait;
[[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments";
EBUILD_DEATH_HOOKS=${EBUILD_DEATH_HOOKS/ wait / };
return ${ret}
}
multijob_finish_one ()
{
[[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments";
local pid ret;
read -r -u ${mj_read_fd} pid ret || die;
: $(( --mj_num_jobs ));
return ${ret}
}
multijob_init ()
{
has wait ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" wait ";
local pipe="${T}/multijob.pipe";
mkfifo -m 600 "${pipe}";
redirect_alloc_fd mj_read_fd "${pipe}";
redirect_alloc_fd mj_write_fd "${pipe}" '>';
rm -f "${pipe}";
mj_max_jobs=$(makeopts_jobs "$@");
mj_num_jobs=0
}
multijob_post_fork ()
{
_multijob_fork post "$@"
}
multijob_pre_fork ()
{
_multijob_fork pre "$@"
}
multilib_env ()
{
local CTARGET=${1:-${CTARGET}};
local cpu=${CTARGET%%*-};
case ${cpu} in
aarch64*)
export CFLAGS_arm=${CFLAGS_arm-};
case ${cpu} in
aarch64*be)
export CHOST_arm="armv8b-${CTARGET#*-}"
;;
*)
export CHOST_arm="armv8l-${CTARGET#*-}"
;;
esac;
CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
export CTARGET_arm=${CHOST_arm};
export LIBDIR_arm="lib";
export CFLAGS_arm64=${CFLAGS_arm64-};
export CHOST_arm64=${CTARGET};
export CTARGET_arm64=${CHOST_arm64};
export LIBDIR_arm64="lib64";
: ${MULTILIB_ABIS=arm64};
: ${DEFAULT_ABI=arm64}
;;
x86_64*)
export CFLAGS_x86=${CFLAGS_x86--m32};
export CHOST_x86=${CTARGET/x86_64/i686};
CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
export CTARGET_x86=${CHOST_x86};
if [[ ${SYMLINK_LIB} == "yes" ]]; then
export LIBDIR_x86="lib32";
else
export LIBDIR_x86="lib";
fi;
export CFLAGS_amd64=${CFLAGS_amd64--m64};
export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
export CTARGET_amd64=${CHOST_amd64};
export LIBDIR_amd64="lib64";
export CFLAGS_x32=${CFLAGS_x32--mx32};
export CHOST_x32=${CTARGET/%-gnu/-gnux32};
export CTARGET_x32=${CHOST_x32};
export LIBDIR_x32="libx32";
case ${CTARGET} in
*-gnux32)
: ${MULTILIB_ABIS=x32 amd64 x86};
: ${DEFAULT_ABI=x32}
;;
*)
: ${MULTILIB_ABIS=amd64 x86};
: ${DEFAULT_ABI=amd64}
;;
esac
;;
mips64*)
export CFLAGS_o32=${CFLAGS_o32--mabi=32};
export CHOST_o32=${CTARGET/mips64/mips};
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}
;;
s390x*)
export CFLAGS_s390=${CFLAGS_s390--m31};
export CHOST_s390=${CTARGET/s390x/s390};
export CTARGET_s390=${CHOST_s390};
export LIBDIR_s390="lib";
export CFLAGS_s390x=${CFLAGS_s390x--m64};
export CHOST_s390x=${CTARGET};
export CTARGET_s390x=${CHOST_s390x};
export LIBDIR_s390x="lib64";
: ${MULTILIB_ABIS=s390x s390};
: ${DEFAULT_ABI=s390x}
;;
sparc64*)
export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
export CHOST_sparc32=${CTARGET/sparc64/sparc};
export CTARGET_sparc32=${CHOST_sparc32};
export LIBDIR_sparc32="lib";
export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
export CHOST_sparc64=${CTARGET};
export CTARGET_sparc64=${CHOST_sparc64};
export LIBDIR_sparc64="lib64";
: ${MULTILIB_ABIS=sparc64 sparc32};
: ${DEFAULT_ABI=sparc64}
;;
*)
: ${MULTILIB_ABIS=default};
: ${DEFAULT_ABI=default}
;;
esac;
export MULTILIB_ABIS DEFAULT_ABI
}
multilib_toolchain_setup ()
{
local v vv;
export ABI=$1;
if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
do
vv="_abi_saved_${v}";
[[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
unset ${vv};
done;
unset _DEFAULT_ABI_SAVED;
fi;
if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
do
vv="_abi_saved_${v}";
[[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
done;
export _DEFAULT_ABI_SAVED="true";
if [[ ${CBUILD} == "${CHOST}" ]]; then
export CBUILD=$(get_abi_CHOST $1);
fi;
export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
export CC="$(tc-getCC) $(get_abi_CFLAGS)";
export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
export F77="$(tc-getF77) $(get_abi_CFLAGS)";
export FC="$(tc-getFC) $(get_abi_CFLAGS)";
export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
export CHOST=$(get_abi_CHOST $1);
export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
fi
}
number_abis ()
{
set -- `get_install_abis`;
echo $#
}
pkg_nofetch ()
{
default
}
python_abi_depend ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_byte-compile_modules ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_clean_byte-compiled_modules ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_clean_installation_image ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_clean_py-compile_files ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_convert_shebangs ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_convert_shebangs"
}
python_copy_sources ()
{
debug-print-function ${FUNCNAME} "${@}";
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_copy_sources
}
python_disable_pyc ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_doexe ()
{
debug-print-function ${FUNCNAME} "${@}";
local f;
for f in "$@";
do
python_newexe "${f}" "${f##*/}";
done
}
python_doheader ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
if [[ ${EAPI:-0} == [0123] ]]; then
die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
fi;
local d PYTHON_INCLUDEDIR=${PYTHON_INCLUDEDIR};
[[ -n ${PYTHON_INCLUDEDIR} ]] || python_export PYTHON_INCLUDEDIR;
d=${PYTHON_INCLUDEDIR#${EPREFIX}};
( insinto "${d}";
doins -r "${@}" || return ${?} )
}
python_domodule ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
if [[ ${EAPI:-0} == [0123] ]]; then
die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
fi;
local d;
if [[ ${python_moduleroot} == /* ]]; then
d=${python_moduleroot};
else
local PYTHON_SITEDIR=${PYTHON_SITEDIR};
[[ -n ${PYTHON_SITEDIR} ]] || python_export PYTHON_SITEDIR;
d=${PYTHON_SITEDIR#${EPREFIX}}/${python_moduleroot//.//};
fi;
( insinto "${d}";
doins -r "${@}" || return ${?} );
python_optimize "${ED}/${d}"
}
python_doscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_doexe "${@}"
}
python_enable_pyc ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_execute_function ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_execute_function"
}
python_execute_nosetests ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_execute_py.test ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_execute_trial ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_export ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl var;
case "${1}" in
python* | jython*)
impl=${1/_/.};
shift
;;
pypy | pypy3)
impl=${1};
shift
;;
*)
impl=${EPYTHON};
if [[ -z ${impl} ]]; then
die "python_export called without a python implementation and EPYTHON is unset";
fi
;;
esac;
debug-print "${FUNCNAME}: implementation: ${impl}";
for var in "$@";
do
case "${var}" in
EPYTHON)
export EPYTHON=${impl};
debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
;;
PYTHON)
export PYTHON=${EPREFIX}/usr/bin/${impl};
debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
;;
PYTHON_SITEDIR)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
PYTHON_SITEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_lib())') || die;
export PYTHON_SITEDIR;
debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
;;
PYTHON_INCLUDEDIR)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
PYTHON_INCLUDEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_inc())') || die;
export PYTHON_INCLUDEDIR;
debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}";
if [[ ! -d ${PYTHON_INCLUDEDIR} ]]; then
die "${impl} does not install any header files!";
fi
;;
PYTHON_LIBPATH)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
PYTHON_LIBPATH=$("${PYTHON}" -c 'import os.path, sysconfig; print(os.path.join(sysconfig.get_config_var("LIBDIR"), sysconfig.get_config_var("LDLIBRARY")) if sysconfig.get_config_var("LDLIBRARY") else "")') || die;
export PYTHON_LIBPATH;
debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}";
if [[ ! -n ${PYTHON_LIBPATH} ]]; then
die "${impl} lacks a (usable) dynamic library";
fi
;;
PYTHON_CFLAGS)
local val;
case "${impl}" in
python*)
val=$($(tc-getPKG_CONFIG) --cflags ${impl/n/n-}) || die
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_CFLAGS=${val};
debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}"
;;
PYTHON_LIBS)
local val;
case "${impl}" in
python*)
val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}) || die
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_LIBS=${val};
debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}"
;;
PYTHON_CONFIG)
local flags val;
case "${impl}" in
python*)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
flags=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_config_var("ABIFLAGS") or "")') || die;
val=${PYTHON}${flags}-config
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_CONFIG=${val};
debug-print "${FUNCNAME}: PYTHON_CONFIG = ${PYTHON_CONFIG}"
;;
PYTHON_PKG_DEP)
local d;
case ${impl} in
python2.7)
PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7'
;;
python3.3)
PYTHON_PKG_DEP='>=dev-lang/python-3.3.2-r2:3.3'
;;
python*)
PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
;;
pypy)
PYTHON_PKG_DEP='>=virtual/pypy-5:0='
;;
pypy3)
PYTHON_PKG_DEP='>=virtual/pypy3-5:0='
;;
jython2.7)
PYTHON_PKG_DEP='dev-java/jython:2.7'
;;
*)
die "Invalid implementation: ${impl}"
;;
esac;
if [[ -n ${PYTHON_REQ_USE} ]]; then
PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}];
fi;
export PYTHON_PKG_DEP;
debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}"
;;
PYTHON_SCRIPTDIR)
local dir;
export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl};
debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}"
;;
*)
die "python_export: unknown variable ${var}"
;;
esac;
done
}
python_export_best ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}";
eqawarn "python_export_best() is deprecated. Please use python_setup instead,";
eqawarn "combined with python_export if necessary.";
[[ ${#} -gt 0 ]] || set -- EPYTHON PYTHON;
local best MULTIBUILD_VARIANTS;
_python_obtain_impls;
function _python_set_best ()
{
best=${MULTIBUILD_VARIANT}
};
multibuild_for_best_variant _python_set_best;
unset -f _python_set_best;
debug-print "${FUNCNAME}: Best implementation is: ${best}";
python_export "${best}" "${@}";
python_wrapper_setup
}
python_export_utf8_locale ()
{
debug-print-function ${FUNCNAME} "${@}";
type locale > /dev/null || return 0;
if [[ $(locale charmap) != UTF-8 ]]; then
local lang locales="C.UTF-8 en_US.UTF-8 en_GB.UTF-8 $(locale -a)";
for lang in ${locales};
do
if [[ $(LC_ALL=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then
if _python_check_locale_sanity "${lang}"; then
export LC_CTYPE=${lang};
if [[ -n ${LC_ALL} ]]; then
export LC_NUMERIC=${LC_ALL};
export LC_TIME=${LC_ALL};
export LC_COLLATE=${LC_ALL};
export LC_MONETARY=${LC_ALL};
export LC_MESSAGES=${LC_ALL};
export LC_PAPER=${LC_ALL};
export LC_NAME=${LC_ALL};
export LC_ADDRESS=${LC_ALL};
export LC_TELEPHONE=${LC_ALL};
export LC_MEASUREMENT=${LC_ALL};
export LC_IDENTIFICATION=${LC_ALL};
export LC_ALL=;
fi;
return 0;
fi;
fi;
done;
ewarn "Could not find a UTF-8 locale. This may trigger build failures in";
ewarn "some python packages. Please ensure that a UTF-8 locale is listed in";
ewarn "/etc/locale.gen and run locale-gen.";
return 1;
fi;
return 0
}
python_fix_shebang ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)";
local force quiet;
while [[ -n ${@} ]]; do
case "${1}" in
-f | --force)
force=1;
shift
;;
-q | --quiet)
quiet=1;
shift
;;
--)
shift;
break
;;
*)
break
;;
esac;
done;
[[ -n ${1} ]] || die "${FUNCNAME}: no paths given";
local path f;
for path in "$@";
do
local any_correct any_fixed is_recursive;
[[ -d ${path} ]] && is_recursive=1;
while IFS= read -r -d '' f; do
local shebang i;
local error= from=;
IFS= read -r shebang < "${f}";
if [[ ${shebang} == '#!'* ]]; then
local split_shebang=();
read -r -a split_shebang <<< ${shebang} || die;
for i in "${split_shebang[@]}";
do
case "${i}" in
*"${EPYTHON}")
debug-print "${FUNCNAME}: in file ${f#${D}}";
debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}";
any_correct=1;
from=${EPYTHON};
break
;;
*python | *python[23])
debug-print "${FUNCNAME}: in file ${f#${D}}";
debug-print "${FUNCNAME}: rewriting shebang: ${shebang}";
if [[ ${i} == *python2 ]]; then
from=python2;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" && error=1;
fi;
else
if [[ ${i} == *python3 ]]; then
from=python3;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" || error=1;
fi;
else
from=python;
fi;
fi;
break
;;
*python[23].[0123456789] | *pypy | *pypy3 | *jython[23].[0123456789])
if [[ ! -n ${force} ]]; then
error=1;
else
case "${i}" in
*python[23].[0123456789])
from="python[23].[0123456789]"
;;
*pypy)
from="pypy"
;;
*pypy3)
from="pypy3"
;;
*jython[23].[0123456789])
from="jython[23].[0123456789]"
;;
*)
die "${FUNCNAME}: internal error in 2nd pattern match"
;;
esac;
fi;
break
;;
esac;
done;
fi;
if [[ ! -n ${error} && ! -n ${from} ]]; then
[[ -n ${is_recursive} ]] && continue;
error=1;
fi;
if [[ ! -n ${quiet} ]]; then
einfo "Fixing shebang in ${f#${D}}.";
fi;
if [[ ! -n ${error} ]]; then
if [[ ${shebang} == *${from}" "* ]]; then
sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die;
else
sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die;
fi;
any_fixed=1;
else
eerror "The file has incompatible shebang:";
eerror " file: ${f#${D}}";
eerror " current shebang: ${shebang}";
eerror " requested impl: ${EPYTHON}";
die "${FUNCNAME}: conversion of incompatible shebang requested";
fi;
done < <(find -H "${path}" -type f -print0 || die);
if [[ ! -n ${any_fixed} ]]; then
local cmd=eerror;
[[ ${EAPI:-0} == [012345] ]] && cmd=eqawarn;
"${cmd}" "QA warning: ${FUNCNAME}, ${path#${D}} did not match any fixable files.";
if [[ -n ${any_correct} ]]; then
"${cmd}" "All files have ${EPYTHON} shebang already.";
else
"${cmd}" "There are no Python files in specified directory.";
fi;
[[ ${cmd} == eerror ]] && die "${FUNCNAME} did not match any fixable files (QA warning fatal in EAPI ${EAPI})";
fi;
done
}
python_foreach_impl ()
{
debug-print-function ${FUNCNAME} "${@}";
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_foreach_variant _python_multibuild_wrapper "${@}"
}
python_gen_any_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local depstr=${1};
[[ -n ${depstr} ]] || die "No dependency string provided";
shift;
local i PYTHON_PKG_DEP out=;
for i in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${i}" "${@-*}"; then
local PYTHON_USEDEP="python_targets_${i}(-),python_single_target_${i}(+)";
python_export "${i}" PYTHON_PKG_DEP;
local i_depstr=${depstr//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}};
out="( ${PYTHON_PKG_DEP%=} ${i_depstr} ) ${out}";
fi;
done;
echo "|| ( ${out})"
}
python_gen_cond_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
local dep=${1};
shift;
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${@}"; then
if [[ ${dep} == *'${PYTHON_USEDEP}'* ]]; then
local usedep=$(python_gen_usedep "${@}");
dep=${dep//\$\{PYTHON_USEDEP\}/${usedep}};
fi;
matches+=("python_targets_${impl}? ( ${dep} )");
fi;
done;
echo "${matches[@]}"
}
python_gen_impl_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
local PYTHON_REQ_USE=${1};
shift;
local patterns=("${@-*}");
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${patterns[@]}"; then
local PYTHON_PKG_DEP;
python_export "${impl}" PYTHON_PKG_DEP;
matches+=("python_targets_${impl}? ( ${PYTHON_PKG_DEP} )");
fi;
done;
echo "${matches[@]}"
}
python_gen_usedep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${@}"; then
matches+=("python_targets_${impl}(-)?" "-python_single_target_${impl}(-)");
fi;
done;
[[ -n ${matches[@]} ]] || die "No supported implementations match python_gen_usedep patterns: ${@}";
local out=${matches[@]};
echo "${out// /,}"
}
python_gen_useflags ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${@}"; then
matches+=("python_targets_${impl}");
fi;
done;
echo "${matches[@]}"
}
python_generate_cffi_modules ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_generate_wrapper_scripts ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_CFLAGS ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_CFLAGS;
echo "${PYTHON_CFLAGS}"
}
python_get_LIBS ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_LIBS;
echo "${PYTHON_LIBS}"
}
python_get_PYTHON_CONFIG ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_CONFIG;
echo "${PYTHON_CONFIG}"
}
python_get_extension_module_suffix ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_implementation ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_implementation_and_version ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_implementational_package ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_includedir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_INCLUDEDIR;
echo "${PYTHON_INCLUDEDIR}"
}
python_get_libdir ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_library ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_library_path ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_LIBPATH;
echo "${PYTHON_LIBPATH}"
}
python_get_scriptdir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_SCRIPTDIR;
echo "${PYTHON_SCRIPTDIR}"
}
python_get_sitedir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_SITEDIR;
echo "${PYTHON_SITEDIR}"
}
python_get_version ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_install_executables ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_is_installed ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON";
local -x ROOT=/;
case "${impl}" in
pypy | pypy3)
local append=;
if [[ -n ${PYTHON_REQ_USE} ]]; then
append=[${PYTHON_REQ_USE}];
fi;
has_version "dev-python/${impl}${append}" || has_version "dev-python/${impl}-bin${append}"
;;
*)
local PYTHON_PKG_DEP;
python_export "${impl}" PYTHON_PKG_DEP;
has_version "${PYTHON_PKG_DEP}"
;;
esac
}
python_is_python3 ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON";
[[ ${impl} == python3* || ${impl} == pypy3 ]]
}
python_merge_intermediate_installation_images ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_mod_cleanup ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
}
python_mod_optimize ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
}
python_moduleinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_moduleroot=${1}
}
python_need_rebuild ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_newexe ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
[[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} <path> <new-name>";
if [[ ${EAPI:-0} == [0123] ]]; then
die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
fi;
local wrapd=${python_scriptroot:-/usr/bin};
local f=${1};
local newfn=${2};
local PYTHON_SCRIPTDIR d;
python_export PYTHON_SCRIPTDIR;
d=${PYTHON_SCRIPTDIR#${EPREFIX}};
( dodir "${wrapd}";
exeinto "${d}";
newexe "${f}" "${newfn}" || return ${?} );
_python_ln_rel "${ED%/}"/usr/lib/python-exec/python-exec2 "${ED%/}/${wrapd}/${newfn}" || die;
if [[ -n ${_PYTHON_REWRITE_SHEBANG} ]]; then
python_fix_shebang -q "${ED%/}/${d}/${newfn}";
fi
}
python_newscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_newexe "${@}"
}
python_optimize ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then
eerror "The new Python eclasses expect the compiled Python files to";
eerror "be controlled by the Package Manager. For this reason,";
eerror "the python_optimize function can be used only during src_* phases";
eerror "(src_install most commonly) and not during pkg_* phases.";
echo;
die "python_optimize is not to be used in pre/post* phases";
fi;
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local PYTHON=${PYTHON};
[[ -n ${PYTHON} ]] || python_export PYTHON;
if [[ ${#} -eq 0 ]]; then
local f;
while IFS= read -r -d '' f; do
if [[ ${f} == /* && -d ${D}${f} ]]; then
set -- "${D}${f}" "${@}";
fi;
done < <("${PYTHON}" -c 'import sys; print("\0".join(sys.path))' || die);
debug-print "${FUNCNAME}: using sys.path: ${*/%/;}";
fi;
local d;
for d in "$@";
do
local instpath=${d#${D}};
instpath=/${instpath##/};
case "${EPYTHON}" in
python2.7 | python3.[34])
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
;;
python* | pypy3)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -O -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
;;
*)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
;;
esac;
done
}
python_pkg_setup ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
}
python_prepare_all ()
{
use cython && rm -f "${S}"/src/cython/_compreffor.cpp;
distutils-r1_python_prepare_all
}
python_replicate_script ()
{
debug-print-function ${FUNCNAME} "${@}";
function _python_replicate_script ()
{
local _PYTHON_FIX_SHEBANG_QUIET=1;
local PYTHON_SCRIPTDIR;
python_export PYTHON_SCRIPTDIR;
( exeinto "${PYTHON_SCRIPTDIR#${EPREFIX}}";
doexe "${files[@]}" );
python_fix_shebang -q "${files[@]/*\//${D%/}/${PYTHON_SCRIPTDIR}/}"
};
local files=("${@}");
python_foreach_impl _python_replicate_script;
unset -f _python_replicate_script;
local f;
for f in "$@";
do
_python_ln_rel "${ED%/}/usr/lib/python-exec/python-exec2" "${f}" || die;
done
}
python_scriptinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_scriptroot=${1}
}
python_set_active_version ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
}
python_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_validate_useflags;
local pycompat=("${PYTHON_COMPAT[@]}");
if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
pycompat=(${PYTHON_COMPAT_OVERRIDE});
fi;
local has_check_deps;
declare -f python_check_deps > /dev/null && has_check_deps=1;
local found;
for ((i = ${#_PYTHON_SUPPORTED_IMPLS[@]} - 1; i >= 0; i-- ))
do
local impl=${_PYTHON_SUPPORTED_IMPLS[i]};
has "${impl}" "${pycompat[@]}" || continue;
if [[ ! -n ${PYTHON_COMPAT_OVERRIDE} && ! -n ${has_check_deps} ]]; then
use "python_targets_${impl}" || continue;
fi;
_python_impl_matches "${impl}" "${@-*}" || continue;
python_export "${impl}" EPYTHON PYTHON;
if [[ -n ${has_check_deps} ]]; then
python_is_installed "${impl}" || continue;
local PYTHON_USEDEP="python_targets_${impl}(-),python_single_target_${impl}(+)";
python_check_deps || continue;
fi;
found=1;
break;
done;
if [[ ! -n ${found} ]]; then
eerror "${FUNCNAME}: none of the enabled implementation matched the patterns.";
eerror " patterns: ${@-'(*)'}";
eerror "Likely a REQUIRED_USE constraint (possibly USE-conditional) is missing.";
eerror " suggested: || ( \$(python_gen_useflags ${@}) )";
eerror "(remember to quote all the patterns with '')";
die "${FUNCNAME}: no enabled implementation satisfy requirements";
fi;
python_wrapper_setup
}
python_test ()
{
esetup.py test
}
python_wrapper_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
local workdir=${1:-${T}/${EPYTHON}};
local impl=${2:-${EPYTHON}};
[[ -n ${workdir} ]] || die "${FUNCNAME}: no workdir specified.";
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified.";
if [[ ! -x ${workdir}/bin/python ]]; then
_python_check_dead_variables;
mkdir -p "${workdir}"/{bin,pkgconfig} || die;
rm -f "${workdir}"/bin/python{,2,3}{,-config} || die;
rm -f "${workdir}"/bin/2to3 || die;
rm -f "${workdir}"/pkgconfig/python{,2,3}.pc || die;
local EPYTHON PYTHON;
python_export "${impl}" EPYTHON PYTHON;
local pyver pyother;
if python_is_python3; then
pyver=3;
pyother=2;
else
pyver=2;
pyother=3;
fi;
cat > "${workdir}/bin/python" <<-_EOF_ ||
#!/bin/sh
exec "${PYTHON}" "\${@}"
_EOF_
die
cp "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die;
chmod +x "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die;
local nonsupp=("python${pyother}" "python${pyother}-config");
if [[ ${EPYTHON} == python* ]]; then
cat > "${workdir}/bin/python-config" <<-_EOF_ ||
#!/bin/sh
exec "${PYTHON}-config" "\${@}"
_EOF_
die
cp "${workdir}/bin/python-config" "${workdir}/bin/python${pyver}-config" || die;
chmod +x "${workdir}/bin/python-config" "${workdir}/bin/python${pyver}-config" || die;
ln -s "${PYTHON/python/2to3-}" "${workdir}"/bin/2to3 || die;
ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}.pc "${workdir}"/pkgconfig/python.pc || die;
ln -s python.pc "${workdir}"/pkgconfig/python${pyver}.pc || die;
else
nonsupp+=(2to3 python-config "python${pyver}-config");
fi;
local x;
for x in "${nonsupp[@]}";
do
cat > "${workdir}"/bin/${x} <<-_EOF_ ||
#!/bin/sh
echo "${ECLASS}: ${FUNCNAME}: ${x} is not supported by ${EPYTHON} (PYTHON_COMPAT)" >&2
exit 127
_EOF_
die
chmod +x "${workdir}"/bin/${x} || die;
done;
fi;
if [[ ${PATH##:*} != ${workdir}/bin ]]; then
PATH=${workdir}/bin${PATH:+:${PATH}};
fi;
if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then
PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}};
fi;
export PATH PKG_CONFIG_PATH
}
redirect_alloc_fd ()
{
local var=$1 file=$2 redir=${3:-"<>"};
if [[ ! -L /dev/fd && ${CBUILD} == *linux* ]]; then
eerror "You're missing a /dev/fd symlink to /proc/self/fd.";
eerror "Please fix the symlink and check your boot scripts (udev/etc...).";
die "/dev/fd is broken";
fi;
if [[ $(( (BASH_VERSINFO[0] << 8) + BASH_VERSINFO[1] )) -ge $(( (4 << 8) + 1 )) ]]; then
eval "exec {${var}}${redir}'${file}'";
else
local fd=10;
while :; do
if [[ ! -e /dev/fd/${fd} ]] && [[ ! -L /dev/fd/${fd} ]]; then
eval "exec ${fd}${redir}'${file}'" && break;
fi;
[[ ${fd} -gt 1024 ]] && die 'could not locate a free temp fd !?';
: $(( ++fd ));
done;
: $(( ${var} = fd ));
fi
}
run_in_build_dir ()
{
debug-print-function ${FUNCNAME} "${@}";
local ret;
[[ ${#} -ne 0 ]] || die "${FUNCNAME}: no command specified.";
[[ -n ${BUILD_DIR} ]] || die "${FUNCNAME}: BUILD_DIR not set.";
mkdir -p "${BUILD_DIR}" || die;
pushd "${BUILD_DIR}" > /dev/null || die;
"${@}";
ret=${?};
popd > /dev/null || die;
return ${ret}
}
src_compile ()
{
distutils-r1_src_compile "$@"
}
src_configure ()
{
distutils-r1_src_configure "$@"
}
src_install ()
{
distutils-r1_src_install "$@"
}
src_prepare ()
{
distutils-r1_src_prepare "$@"
}
src_test ()
{
distutils-r1_src_test "$@"
}
src_unpack ()
{
vcs-snapshot_src_unpack "$@"
}
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-enables-pie ()
{
local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null
#if defined(__PIE__)
true
#endif
EOF
)";
[[ ${ret} == true ]]
}
tc-enables-ssp ()
{
local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null
#if defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__)
true
#endif
EOF
)";
[[ ${ret} == true ]]
}
tc-enables-ssp-all ()
{
local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null
#if defined(__SSP_ALL__)
true
#endif
EOF
)";
[[ ${ret} == true ]]
}
tc-enables-ssp-strong ()
{
local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null
#if defined(__SSP_STRONG__) || defined(__SSP_ALL__)
true
#endif
EOF
)";
[[ ${ret} == true ]]
}
tc-endian ()
{
local host=$1;
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
host=${host%%-*};
case ${host} in
aarch64*be)
echo big
;;
aarch64)
echo little
;;
alpha*)
echo little
;;
arm*b*)
echo big
;;
arm*)
echo little
;;
cris*)
echo little
;;
hppa*)
echo big
;;
i?86*)
echo little
;;
ia64*)
echo little
;;
m68*)
echo big
;;
mips*l*)
echo little
;;
mips*)
echo big
;;
powerpc*le)
echo little
;;
powerpc*)
echo big
;;
s390*)
echo big
;;
sh*b*)
echo big
;;
sh*)
echo little
;;
sparc*)
echo big
;;
x86_64*)
echo little
;;
*)
echo wtf
;;
esac
}
tc-env_build ()
{
tc-export_build_env;
CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
}
tc-export ()
{
local var;
for var in "$@";
do
[[ $(type -t "tc-get${var}") != "function" ]] && die "tc-export: invalid export variable '${var}'";
"tc-get${var}" > /dev/null;
done
}
tc-export_build_env ()
{
tc-export "$@";
: ${BUILD_CFLAGS:=-O1 -pipe};
: ${BUILD_CXXFLAGS:=-O1 -pipe};
: ${BUILD_CPPFLAGS:= };
: ${BUILD_LDFLAGS:= };
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 ()
{
_tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
}
tc-getBUILD_RANLIB ()
{
tc-getBUILD_PROG RANLIB ranlib "$@"
}
tc-getBUILD_STRIP ()
{
tc-getBUILD_PROG STRIP strip "$@"
}
tc-getCC ()
{
tc-getPROG CC gcc "$@"
}
tc-getCPP ()
{
tc-getPROG CPP "${CC:-gcc} -E" "$@"
}
tc-getCXX ()
{
tc-getPROG CXX g++ "$@"
}
tc-getDLLWRAP ()
{
tc-getPROG DLLWRAP dllwrap "$@"
}
tc-getF77 ()
{
tc-getPROG F77 gfortran "$@"
}
tc-getFC ()
{
tc-getPROG FC gfortran "$@"
}
tc-getGCJ ()
{
tc-getPROG GCJ gcj "$@"
}
tc-getGO ()
{
tc-getPROG GO gccgo "$@"
}
tc-getLD ()
{
tc-getPROG LD ld "$@"
}
tc-getNM ()
{
tc-getPROG NM nm "$@"
}
tc-getOBJCOPY ()
{
tc-getPROG OBJCOPY objcopy "$@"
}
tc-getOBJDUMP ()
{
tc-getPROG OBJDUMP objdump "$@"
}
tc-getPKG_CONFIG ()
{
tc-getPROG PKG_CONFIG pkg-config "$@"
}
tc-getPROG ()
{
_tc-getPROG CHOST "$@"
}
tc-getRANLIB ()
{
tc-getPROG RANLIB ranlib "$@"
}
tc-getRC ()
{
tc-getPROG RC windres "$@"
}
tc-getSTRIP ()
{
tc-getPROG STRIP strip "$@"
}
tc-has-openmp ()
{
local base="${T}/test-tc-openmp";
cat > "${base}.c" <<-EOF
#include <omp.h>
int main() {
int nthreads, tid, ret = 0;
#pragma omp parallel private(nthreads, tid)
{
tid = omp_get_thread_num();
nthreads = omp_get_num_threads(); ret += tid + nthreads;
}
return ret;
}
EOF
$(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &> /dev/null;
local ret=$?;
rm -f "${base}"*;
return ${ret}
}
tc-has-tls ()
{
local base="${T}/test-tc-tls";
cat > "${base}.c" <<-EOF
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 ()
{
local CTARGET=${CTARGET:-${CHOST}};
case ${CTARGET} in
bfin* | h8300*)
echo "only"
;;
*)
if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then
echo "yes";
else
if [[ ${CTARGET//_/-} == *-softfp-* ]]; then
echo "softfp";
else
echo "no";
fi;
fi
;;
esac
}
tc-is-static-only ()
{
local host=${CTARGET:-${CHOST}};
[[ ${host} == *-mint* ]]
}
tc-ld-disable-gold ()
{
if ! tc-ld-is-gold "$@"; then
return;
fi;
ewarn "Forcing usage of the BFD linker instead of GOLD";
local ld=$(tc-getLD "$@");
local bfd_ld="${ld%% *}.bfd";
local path_ld=$(which "${bfd_ld}" 2>/dev/null);
[[ -e ${path_ld} ]] && export LD=${bfd_ld};
local major=$(gcc-major-version "$@");
local minor=$(gcc-minor-version "$@");
if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]]; then
if [[ -e ${path_ld} ]]; then
local d="${T}/bfd-linker";
mkdir -p "${d}";
ln -sf "${path_ld}" "${d}"/ld;
export LDFLAGS="${LDFLAGS} -B${d}";
else
die "unable to locate a BFD linker to bypass gold";
fi;
else
export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
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 > "${base}.c" <<-EOF
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-ninja_magic_to_arch ()
{
function ninj ()
{
[[ ${type} == "kern" ]] && echo $1 || echo $2
};
local type=$1;
local host=$2;
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
case ${host} in
aarch64*)
echo arm64
;;
alpha*)
echo alpha
;;
arm*)
echo arm
;;
avr*)
ninj avr32 avr
;;
bfin*)
ninj blackfin bfin
;;
c6x*)
echo c6x
;;
cris*)
echo cris
;;
frv*)
echo frv
;;
hexagon*)
echo hexagon
;;
hppa*)
ninj parisc hppa
;;
i?86*)
if [[ ${type} == "kern" && ${host} == *freebsd* ]]; then
echo i386;
else
echo x86;
fi
;;
ia64*)
echo ia64
;;
m68*)
echo m68k
;;
metag*)
echo metag
;;
microblaze*)
echo microblaze
;;
mips*)
echo mips
;;
nios2*)
echo nios2
;;
nios*)
echo nios
;;
or1k | or32*)
echo openrisc
;;
powerpc*)
if [[ ${type} == "kern" ]]; then
echo powerpc;
else
if [[ ${host} == powerpc64* ]]; then
echo ppc64;
else
echo ppc;
fi;
fi
;;
riscv*)
echo riscv
;;
s390*)
echo s390
;;
score*)
echo score
;;
sh64*)
ninj sh64 sh
;;
sh*)
echo sh
;;
sparc64*)
ninj sparc64 sparc
;;
sparc*)
[[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
;;
tile*)
echo tile
;;
vax*)
echo vax
;;
x86_64*freebsd*)
echo amd64
;;
x86_64*)
if [[ ${type} == "kern" ]]; then
echo x86;
else
echo amd64;
fi
;;
xtensa*)
echo xtensa
;;
*)
echo unknown
;;
esac
}
tc-stack-grows-down ()
{
case ${ARCH} in
hppa | metag)
return 1
;;
esac;
return 0
}
vcs-snapshot_src_unpack ()
{
debug-print-function ${FUNCNAME} "${@}";
local f;
for f in ${A};
do
case "${f}" in
*.tar | *.tar.gz | *.tar.bz2 | *.tar.xz)
local destdir=${WORKDIR}/${f%.tar*};
debug-print "${FUNCNAME}: unpacking ${f} to ${destdir}";
mkdir "${destdir}" || die;
tar -C "${destdir}" -x --strip-components 1 -f "${DISTDIR}/${f}" || die
;;
*)
debug-print "${FUNCNAME}: falling back to unpack for ${f}";
unpack "${f}"
;;
esac;
done
}
xdg_desktop_database_update ()
{
local updater="${EROOT}${DESKTOP_DATABASE_UPDATE_BIN}";
if [[ ${EBUILD_PHASE} != post* ]]; then
die "xdg_desktop_database_update must be used in pkg_post* phases.";
fi;
if [[ ! -x "${updater}" ]]; then
debug-print "${updater} is not executable";
return;
fi;
ebegin "Updating .desktop files database";
"${updater}" -q "${EROOT}${DESKTOP_DATABASE_DIR}";
eend $?
}
xdg_environment_reset ()
{
export XDG_DATA_HOME="${HOME}/.local/share";
export XDG_CONFIG_HOME="${HOME}/.config";
export XDG_CACHE_HOME="${HOME}/.cache";
export XDG_RUNTIME_DIR="${T}/run";
mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "${XDG_RUNTIME_DIR}" || die;
chmod 0700 "${XDG_RUNTIME_DIR}" || die;
unset DBUS_SESSION_BUS_ADDRESS
}
xdg_mimeinfo_database_update ()
{
local updater="${EROOT}${MIMEINFO_DATABASE_UPDATE_BIN}";
if [[ ${EBUILD_PHASE} != post* ]]; then
die "xdg_mimeinfo_database_update must be used in pkg_post* phases.";
fi;
if [[ ! -x "${updater}" ]]; then
debug-print "${updater} is not executable";
return;
fi;
ebegin "Updating shared mime info database";
"${updater}" "${EROOT}${MIMEINFO_DATABASE_DIR}";
eend $?
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment