-
- declare -x ABI="arm"
- declare -x ABI_MIPS=""
- declare -x ABI_PPC=""
- declare -x ABI_S390=""
- declare -x ABI_X86=""
- declare -x ALSA_CARDS=""
- declare -x APACHE2_MODULES=""
- declare -x APACHE2_MPMS=""
- declare -x ARCH="arm"
- declare BDEPEND="python_targets_pypy? ( >=virtual/pypy-5:0= ) 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 ) python_targets_python3_7? ( dev-lang/python:3.7 ) >=dev-lang/python-exec-2:=[python_targets_pypy(-)?,python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_pypy(-),-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)]"
- declare -x BOOTSTRAP_USE="cxx unicode internal-glib split-usr python_targets_python3_6 python_targets_python2_7"
- declare -x BUILD_CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
- declare -x BUILD_CPPFLAGS=""
- declare -x BUILD_CXXFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
- declare -x BUILD_LDFLAGS="-Wl,-O1 -Wl,--as-needed"
- declare -x CALLIGRA_EXPERIMENTAL_FEATURES=""
- declare -x CALLIGRA_FEATURES=""
- declare -x CAMERAS=""
- declare -x CBUILD="x86_64-pc-linux-gnu"
- declare -x CFLAGS="-O2 -pipe -fomit-frame-pointer -march=armv6j -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard"
- declare -x CFLAGS_default
- declare -x CHOST="armv6j-unknown-linux-gnueabihf"
- declare -x CHOST_arm="armv6j-unknown-linux-gnueabihf"
- declare -x CHOST_default="armv6j-unknown-linux-gnueabihf"
- declare -x COLLECTD_PLUGINS=""
- declare -x CPU_FLAGS_ARM=""
- declare -x CPU_FLAGS_X86=""
- declare -x CTARGET_default="armv6j-unknown-linux-gnueabihf"
- declare -x CURL_SSL=""
- declare -x CXXFLAGS="-O2 -pipe -fomit-frame-pointer -march=armv6j -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard"
- declare -x DCC_EMAILLOG_WHOM_TO_BLAME=""
- declare -x DEFAULT_ABI="arm"
- declare -x DEFINED_PHASES=" compile configure install prepare test"
- declare DEPEND="sys-apps/attr
- dev-python/setuptools[python_targets_pypy(-)?,python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_pypy(-),-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)]
- doc? ( >=dev-python/sphinx-1.3.1[python_targets_pypy(-)?,python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_pypy(-),-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] )
- test? ( dev-python/nose[python_targets_pypy(-)?,python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_pypy(-),-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)] ) "
- declare DESCRIPTION="Python interface to xattr"
- declare -x DIROPTIONS="-m0755"
- declare -x EAPI="7"
- declare -x ELIBC="glibc"
- declare -x ENLIGHTENMENT_MODULES=""
- declare -x ENV_UNSET="DBUS_SESSION_BUS_ADDRESS DISPLAY 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 -x EXEOPTIONS="-m0755"
- declare -x FCFLAGS="-O2 -pipe -march=armv6j"
- 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=armv6j"
- declare -x FFTOOLS=""
- declare -x GCC_SPECS=""
- declare -x GPSD_PROTOCOLS=""
- declare -x GRUB_PLATFORMS=""
- declare HDEPEND=""
- declare HOMEPAGE="https://pyxattr.k1024.org/"
- declare -x HOSTCC="x86_64-pc-linux-gnu-gcc"
- declare -x INHERITED=" multiprocessing toolchain-funcs multilib multibuild python-utils-r1 python-r1 distutils-r1 eutils"
- declare -x INPUT_DEVICES=""
- declare -x INSOPTIONS="-m0644"
- declare IUSE="doc test python_targets_pypy python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7"
- declare -x IUSE_EFFECTIVE="alpha amd64 amd64-fbsd amd64-linux arm arm64 doc elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc 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 ppc ppc-aix ppc-macos ppc64 ppc64-linux prefix prefix-chain prefix-guest python_targets_pypy python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 s390 sh sparc 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="prefix prefix-chain prefix-guest"
- declare -x KERNEL="linux"
- declare -x KERNEL_ABI="arm"
- declare -x KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux"
- declare -x L10N=""
- declare -x LANG="en_US.utf8"
- declare -x LCD_DEVICES=""
- declare -x LC_ADDRESS="en_US.utf8"
- declare -x LC_COLLATE="C"
- declare -x LC_CTYPE="en_US.utf8"
- declare -x LC_IDENTIFICATION="en_US.utf8"
- declare -x LC_MEASUREMENT="en_US.utf8"
- declare -x LC_MESSAGES="en_US.utf8"
- declare -x LC_MONETARY="en_US.utf8"
- declare -x LC_NAME="en_US.utf8"
- declare -x LC_NUMERIC="en_US.utf8"
- declare -x LC_PAPER="en_US.utf8"
- declare -x LC_TELEPHONE="en_US.utf8"
- declare -x LC_TIME="en_US.utf8"
- declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed"
- declare -x LDFLAGS_default
- declare -x LIBDIR_arm="lib"
- declare -x LIBDIR_default="lib"
- declare -x LIBOPTIONS="-m0644"
- declare -x LIBREOFFICE_EXTENSIONS=""
- declare -x LICENSE="LGPL-2.1"
- declare -x LIRC_DEVICES=""
- declare -x LLVM_TARGETS=""
- declare -x MAIL="/var/mail/necktwi"
- declare -x MAKEOPTS="-j5 -l4"
- declare -x MANPAGER="manpager"
- declare -x MONKEYD_PLUGINS=""
- declare -x MULTILIB_ABIS="arm"
- declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
- declare -x NETBEANS_MODULES=""
- declare -x NGINX_MODULES_HTTP=""
- declare -x NGINX_MODULES_MAIL=""
- declare -x NGINX_MODULES_STREAM=""
- declare -x OFED_DRIVERS=""
- declare -x OFFICE_IMPLEMENTATION=""
- declare -x OPENGL_PROFILE="xorg-x11"
- declare -x OPENMPI_FABRICS=""
- declare -x OPENMPI_OFED_FEATURES=""
- declare -x OPENMPI_RM=""
- declare -x PATH="/usr/lib/ccache/bin:/usr/lib/portage/python3.6/ebuild-helpers/xattr:/usr/lib/portage/python3.6/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin"
- declare PDEPEND=""
- declare -x PHP_TARGETS=""
- declare -x PKG_CONFIG_PATH="/usr/armv6j-unknown-linux-gnueabihf/usr/lib/pkgconfig/"
- declare -x PORTAGE_COMPRESSION_COMMAND="bzip2"
- declare -a PORTAGE_DOCOMPRESS=([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")
- declare -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
- declare -a PORTAGE_DOCOMPRESS_SKIP=([0]="/usr/share/doc/pyxattr-0.6.1/html")
- declare -a PORTAGE_DOSTRIP=([0]="/")
- declare -a PORTAGE_DOSTRIP_SKIP=()
- declare -x POSTGRES_TARGETS=""
- 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 PYTHONDONTWRITEBYTECODE="1"
- declare -a PYTHON_COMPAT=([0]="python2_7" [1]="python3_4" [2]="python3_5" [3]="python3_6" [4]="python3_7" [5]="pypy")
- declare -- PYTHON_DEPS="python_targets_pypy? ( >=virtual/pypy-5:0= ) 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 ) python_targets_python3_7? ( dev-lang/python:3.7 ) >=dev-lang/python-exec-2:=[python_targets_pypy(-)?,python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_pypy(-),-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)]"
- declare -- PYTHON_REQUIRED_USE="|| ( python_targets_pypy python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 )"
- declare -x PYTHON_SINGLE_TARGET=""
- declare -x PYTHON_TARGETS="python2_7 python3_6"
- declare -- PYTHON_USEDEP="python_targets_pypy(-)?,python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_pypy(-),-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)"
- declare -x QEMU_SOFTMMU_TARGETS=""
- declare -x QEMU_USER_TARGETS=""
- declare RDEPEND="sys-apps/attr python_targets_pypy? ( >=virtual/pypy-5:0= ) 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 ) python_targets_python3_7? ( dev-lang/python:3.7 ) >=dev-lang/python-exec-2:=[python_targets_pypy(-)?,python_targets_python2_7(-)?,python_targets_python3_4(-)?,python_targets_python3_5(-)?,python_targets_python3_6(-)?,python_targets_python3_7(-)?,-python_single_target_pypy(-),-python_single_target_python2_7(-),-python_single_target_python3_4(-),-python_single_target_python3_5(-),-python_single_target_python3_6(-),-python_single_target_python3_7(-)]"
- declare REPOSITORY
- declare REQUIRED_USE="|| ( python_targets_pypy python_targets_python2_7 python_targets_python3_4 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 )"
- declare -x RESTRICT=""
- declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
- declare -x ROS_MESSAGES=""
- declare -x RUBY_TARGETS=""
- declare -x S="/usr/armv6j-unknown-linux-gnueabihf/tmp/portage/dev-python/pyxattr-0.6.1/work/pyxattr-0.6.1"
- declare -x SANDBOX_DEBUG="0"
- declare -x SANDBOX_DENY=""
- declare -x SANDBOX_PREDICT="/usr/armv6j-unknown-linux-gnueabihf/tmp/portage/dev-python/pyxattr-0.6.1/homedir"
- declare -x SANDBOX_READ="/:/usr/armv6j-unknown-linux-gnueabihf/tmp:/var/CCache"
- 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/armv6j-unknown-linux-gnueabihf/tmp:/usr/armv6j-unknown-linux-gnueabihf/tmp/portage/dev-python/pyxattr-0.6.1/homedir/.bash_history:/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/CCache:/var/tmp/"
- declare -x SANE_BACKENDS=""
- declare -x SHELL="/bin/bash"
- declare -x SLOT="0"
- declare SRC_URI="mirror://pypi/p/pyxattr/pyxattr-0.6.1.tar.gz
- https://pyxattr.k1024.org/downloads/pyxattr-0.6.1.tar.gz"
- declare -x SSH_CLIENT="192.168.19.1 53444 22"
- declare -x SSH_CONNECTION="192.168.19.1 53444 192.168.19.128 22"
- declare -x SSH_TTY="/dev/pts/0"
- declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1"
- declare -x UNCACHED_ERR_FD=""
- declare -x USE="arm elibc_glibc kernel_linux python_targets_python2_7 python_targets_python3_6 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 hppa ia64 m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos s390 sh sparc sparc64-solaris sparc-solaris x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt"
- declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
- declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX linux NetBSD OpenBSD SunOS Winnt"
- declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
- declare -x UWSGI_PLUGINS=""
- declare -x VIDEO_CARDS=""
- declare -x VISUAL="emacs"
- declare -x VOICEMAIL_STORAGE=""
- declare -x XFCE_PLUGINS=""
- declare -x XTABLES_ADDONS=""
- declare -- _DISTUTILS_R1="1"
- declare -- _EUTILS_ECLASS="1"
- declare -x _E_DESTTREE_="/usr"
- declare -x _E_DOCDESTTREE_=""
- declare -x _E_EXEDESTTREE_=""
- declare -x _E_INSDESTTREE_=""
- 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" [7]="python3_7")
- declare -- _PYTHON_R1="1"
- declare -a _PYTHON_SUPPORTED_IMPLS=([0]="pypy" [1]="python2_7" [2]="python3_4" [3]="python3_5" [4]="python3_6" [5]="python3_7")
- declare -a _PYTHON_UNSUPPORTED_IMPLS=([0]="jython2_7" [1]="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
- [[ ${#PATCHES[@]} -gt 0 ]] && eapply "${PATCHES[@]}";
- else
- if [[ -n ${PATCHES} ]]; then
- eapply ${PATCHES};
- fi;
- fi;
- eapply_user
- }
- __eapi7_ver_compare ()
- {
- local va=${1} vb=${2} a an al as ar b bn bl bs br re LC_ALL=C;
- re="^([0-9]+(\.[0-9]+)*)([a-z]?)((_(alpha|beta|pre|rc|p)[0-9]*)*)(-r[0-9]+)?$";
- [[ ${va} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${va}";
- an=${BASH_REMATCH[1]};
- al=${BASH_REMATCH[3]};
- as=${BASH_REMATCH[4]};
- ar=${BASH_REMATCH[7]};
- [[ ${vb} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${vb}";
- bn=${BASH_REMATCH[1]};
- bl=${BASH_REMATCH[3]};
- bs=${BASH_REMATCH[4]};
- br=${BASH_REMATCH[7]};
- __eapi7_ver_compare_int "${an%%.*}" "${bn%%.*}" || return;
- while [[ ${an} == *.* && ${bn} == *.* ]]; do
- an=${an#*.};
- bn=${bn#*.};
- a=${an%%.*};
- b=${bn%%.*};
- if [[ ${a} == 0* || ${b} == 0* ]]; then
- [[ ${a} =~ 0+$ ]] && a=${a%"${BASH_REMATCH[0]}"};
- [[ ${b} =~ 0+$ ]] && b=${b%"${BASH_REMATCH[0]}"};
- [[ ${a} > ${b} ]] && return 3;
- [[ ${a} < ${b} ]] && return 1;
- else
- __eapi7_ver_compare_int "${a}" "${b}" || return;
- fi;
- done;
- [[ ${an} == *.* ]] && return 3;
- [[ ${bn} == *.* ]] && return 1;
- [[ ${al} > ${bl} ]] && return 3;
- [[ ${al} < ${bl} ]] && return 1;
- as=${as#_}${as:+_};
- bs=${bs#_}${bs:+_};
- while [[ -n ${as} && -n ${bs} ]]; do
- a=${as%%_*};
- b=${bs%%_*};
- if [[ ${a%%[0-9]*} == "${b%%[0-9]*}" ]]; then
- __eapi7_ver_compare_int "${a##*[a-z]}" "${b##*[a-z]}" || return;
- else
- [[ ${a%%[0-9]*} == p ]] && return 3;
- [[ ${b%%[0-9]*} == p ]] && return 1;
- [[ ${a} > ${b} ]] && return 3 || return 1;
- fi;
- as=${as#*_};
- bs=${bs#*_};
- done;
- if [[ -n ${as} ]]; then
- [[ ${as} == p[_0-9]* ]] && return 3 || return 1;
- else
- if [[ -n ${bs} ]]; then
- [[ ${bs} == p[_0-9]* ]] && return 1 || return 3;
- fi;
- fi;
- __eapi7_ver_compare_int "${ar#-r}" "${br#-r}" || return;
- return 2
- }
- __eapi7_ver_compare_int ()
- {
- local a=$1 b=$2 d=$(( ${#1}-${#2} ));
- if [[ ${d} -gt 0 ]]; then
- printf -v b "%0${d}d%s" 0 "${b}";
- else
- if [[ ${d} -lt 0 ]]; then
- printf -v a "%0$(( -d ))d%s" 0 "${a}";
- fi;
- fi;
- [[ ${a} > ${b} ]] && return 3;
- [[ ${a} == "${b}" ]]
- }
- __eapi7_ver_parse_range ()
- {
- local range=${1};
- local max=${2};
- [[ ${range} == [0-9]* ]] || die "${FUNCNAME}: range must start with a number";
- start=${range%-*};
- [[ ${range} == *-* ]] && end=${range#*-} || end=${start};
- if [[ -n ${end} ]]; then
- [[ ${start} -le ${end} ]] || die "${FUNCNAME}: end of range must be >= start";
- [[ ${end} -le ${max} ]] || end=${max};
- else
- end=${max};
- fi
- }
- __eapi7_ver_split ()
- {
- local v=${1} LC_ALL=C;
- comp=();
- local s c;
- while [[ -n ${v} ]]; do
- s=${v%%[a-zA-Z0-9]*};
- v=${v:${#s}};
- [[ ${v} == [0-9]* ]] && c=${v%%[^0-9]*} || c=${v%%[^a-zA-Z]*};
- v=${v:${#c}};
- comp+=("${s}" "${c}");
- done
- }
- _clang_fullversion ()
- {
- local ver="$1";
- shift;
- set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__");
- eval echo "$ver"
- }
- _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 overridden 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"
- }
- _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_[4567] | 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}"
- }
- 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;
- local build_args=();
- if python_is_python3 && [[ ${EPYTHON} != python3.4 ]]; then
- if [[ ${EAPI} != [56] || ${EPYTHON} != python3.[56] ]]; then
- local jobs=$(makeopts_jobs "${MAKEOPTS}" INF);
- if [[ ${jobs} == INF ]]; then
- local nproc=$(get_nproc);
- jobs=$(( nproc + 1 ));
- fi;
- build_args+=(-j "${jobs}");
- fi;
- fi;
- esetup.py build "${build_args[@]}" "${@}"
- }
- 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;
- [[ ${EAPI} == [56] ]] && 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 [[ ${#files[@]} -eq 0 ]]; then
- die "eapply: no files specified";
- fi;
- local f;
- for f in "${files[@]}";
- do
- if [[ -d ${f} ]]; then
- function _eapply_get_files ()
- {
- local LC_ALL=POSIX;
- local prev_shopt=$(shopt -p nullglob);
- shopt -s nullglob;
- local f;
- for f in "${1}"/*;
- do
- if [[ ${f} == *.diff || ${f} == *.patch ]]; then
- files+=("${f}");
- fi;
- done;
- ${prev_shopt}
- };
- local files=();
- _eapply_get_files "${f}";
- [[ ${#files[@]} -eq 0 ]] && die "No *.{patch,diff} files in directory ${f}";
- einfo "Applying patches from ${f} ...";
- local f2;
- for f2 in "${files[@]}";
- do
- _eapply_patch "${f2}" ' ';
- [[ ${failed} -ne 0 ]] && return "${failed}";
- done;
- else
- _eapply_patch "${f}";
- [[ ${failed} -ne 0 ]] && return "${failed}";
- fi;
- done;
- return 0
- }
- eapply_user ()
- {
- [[ ${EBUILD_PHASE} == prepare ]] || die "eapply_user() called during invalid phase: ${EBUILD_PHASE}";
- local tagfile=${T}/.portage_user_patches_applied;
- [[ -f ${tagfile} ]] && return;
- >> "${tagfile}";
- local basedir=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
- local applied d f;
- local -A _eapply_user_patches;
- local prev_shopt=$(shopt -p nullglob);
- shopt -s nullglob;
- for d in "${basedir}"/${CATEGORY}/{${P}-${PR},${P},${PN}}{:${SLOT%/*},};
- do
- for f in "${d}"/*;
- do
- if [[ ( ${f} == *.diff || ${f} == *.patch ) && -z ${_eapply_user_patches[${f##*/}]} ]]; then
- _eapply_user_patches[${f##*/}]=${f};
- fi;
- done;
- done;
- if [[ ${#_eapply_user_patches[@]} -gt 0 ]]; then
- while read -r -d '' f; do
- f=${_eapply_user_patches[${f}]};
- if [[ -s ${f} ]]; then
- eapply "${f}";
- applied=1;
- fi;
- done < <(printf -- '%s\0' "${!_eapply_user_patches[@]}" |
- LC_ALL=C sort -z);
- fi;
- ${prev_shopt};
- [[ -n ${applied} ]] && ewarn "User patches applied."
- }
- ebeep ()
- {
- ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
- }
- econf_build ()
- {
- local CBUILD=${CBUILD:-${CHOST}};
- tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
- }
- edos2unix ()
- {
- [[ $# -eq 0 ]] && return 0;
- sed -i 's/\r$//' -- "$@" || die
- }
- einstalldocs ()
- {
- ( if ! declare -p DOCS &> /dev/null; then
- local d;
- for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
- do
- [[ -f ${d} && -s ${d} ]] && docinto / && dodoc "${d}";
- done;
- else
- if [[ $(declare -p DOCS) == "declare -a"* ]]; then
- [[ ${#DOCS[@]} -gt 0 ]] && docinto / && dodoc -r "${DOCS[@]}";
- else
- [[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS};
- fi;
- fi );
- ( if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
- [[ ${#HTML_DOCS[@]} -gt 0 ]] && docinto html && dodoc -r "${HTML_DOCS[@]}";
- else
- [[ -n ${HTML_DOCS} ]] && docinto html && dodoc -r ${HTML_DOCS};
- fi )
- }
- emktemp ()
- {
- local exe="touch";
- [[ $1 == -d ]] && exe="mkdir" && shift;
- local topdir=$1;
- if [[ -z ${topdir} ]]; then
- [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
- fi;
- if ! type -P mktemp > /dev/null; then
- local tmp=/;
- while [[ -e ${tmp} ]]; do
- tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
- done;
- ${exe} "${tmp}" || ${exe} -p "${tmp}";
- echo "${tmp}";
- else
- if [[ ${exe} == "touch" ]]; then
- TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
- else
- TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
- fi;
- fi
- }
- epause ()
- {
- ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
- }
- esetup.py ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local die_args=();
- [[ ${EAPI} != [45] ]] && die_args+=(-n);
- [[ -n ${BUILD_DIR} ]] && _distutils-r1_create_setup_cfg;
- set -- "${EPYTHON:-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} ]]
- }
- make_wrapper ()
- {
- local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
- local tmpwrapper=$(emktemp);
- has "${EAPI:-0}" 0 1 2 && local EPREFIX="";
- ( echo '#!/bin/sh';
- if [[ -n ${libdir} ]]; then
- local var;
- if [[ ${CHOST} == *-darwin* ]]; then
- var=DYLD_LIBRARY_PATH;
- else
- var=LD_LIBRARY_PATH;
- fi;
- cat <<-EOF
- if [ "\${${var}+set}" = "set" ] ; then
- export ${var}="\${${var}}:${EPREFIX}${libdir}"
- else
- export ${var}="${EPREFIX}${libdir}"
- fi
- EOF
-
- fi
- [[ -n ${chdir} ]] && printf 'cd "%s" &&\n' "${EPREFIX}${chdir}";
- printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
- chmod go+rx "${tmpwrapper}";
- if [[ -n ${path} ]]; then
- ( exeopts -m 0755;
- exeinto "${path}";
- newexe "${tmpwrapper}" "${wrapper}" ) || die;
- else
- newbin "${tmpwrapper}" "${wrapper}" || die;
- fi
- }
- makeopts_jobs ()
- {
- [[ $# -eq 0 ]] && set -- "${MAKEOPTS}";
- local jobs=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' -e "s:.*[[:space:]](-[a-z]*j|--jobs)[[:space:]].*:${2:-999}:p");
- echo ${jobs:-1}
- }
- makeopts_loadavg ()
- {
- [[ $# -eq 0 ]] && set -- "${MAKEOPTS}";
- local lavg=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load)[=[:space:]])[[:space:]]*([0-9]+(\.[0-9]+)?)[[:space:]].*:\3:p' -e "s:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:${2:-999}:p");
- echo ${lavg:-${2:-999}}
- }
- multibuild_copy_sources ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local _MULTIBUILD_INITIAL_BUILD_DIR=${BUILD_DIR:-${S}};
- einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}";
- local cp_args=();
- if cp --reflink=auto --version &> /dev/null; then
- cp_args+=(--reflink=auto);
- fi;
- function _multibuild_create_source_copy ()
- {
- einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}";
- cp -p -R "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die
- };
- multibuild_foreach_variant _multibuild_create_source_copy
- }
- multibuild_for_best_variant ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
- local MULTIBUILD_VARIANTS=("${MULTIBUILD_VARIANTS[$(( ${#MULTIBUILD_VARIANTS[@]} - 1 ))]}");
- multibuild_foreach_variant "${@}"
- }
- multibuild_foreach_variant ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
- local bdir=${BUILD_DIR:-${S}};
- [[ ${bdir%%/} == ${WORKDIR%%/} ]] && bdir=${WORKDIR}/build;
- local prev_id=${MULTIBUILD_ID:+${MULTIBUILD_ID}-};
- local ret=0 lret=0 v;
- debug-print "${FUNCNAME}: initial build_dir = ${bdir}";
- for v in "${MULTIBUILD_VARIANTS[@]}";
- do
- local MULTIBUILD_VARIANT=${v};
- local MULTIBUILD_ID=${prev_id}${v};
- local BUILD_DIR=${bdir%%/}-${v};
- function _multibuild_run ()
- {
- local i=1;
- while [[ ${!i} == _* ]]; do
- (( i += 1 ));
- done;
- [[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}";
- "${@}"
- };
- _multibuild_run "${@}" > >(exec tee -a "${T}/build-${MULTIBUILD_ID}.log") 2>&1;
- lret=${?};
- done;
- [[ ${ret} -eq 0 && ${lret} -ne 0 ]] && ret=${lret};
- return ${ret}
- }
- multibuild_merge_root ()
- {
- local src=${1};
- local dest=${2};
- local ret;
- if use userland_BSD; then
- tar -C "${src}" -f - -c . | tar -x -f - -C "${dest}";
- [[ ${PIPESTATUS[*]} == '0 0' ]];
- ret=${?};
- else
- local cp_args=();
- if cp -a --version &> /dev/null; then
- cp_args+=(-a);
- else
- cp_args+=(-P -R -p);
- fi;
- if cp --reflink=auto --version &> /dev/null; then
- cp_args+=(--reflink=auto);
- fi;
- cp "${cp_args[@]}" "${src}"/. "${dest}"/;
- ret=${?};
- fi;
- if [[ ${ret} -ne 0 ]]; then
- die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed.";
- fi;
- rm -rf "${src}"
- }
- multibuild_parallel_foreach_variant ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}";
- multibuild_foreach_variant "${@}"
- }
- multilib_env ()
- {
- local CTARGET=${1:-${CTARGET}};
- local cpu=${CTARGET%%*-};
- case ${cpu} in
- aarch64*)
- export CFLAGS_arm=${CFLAGS_arm-};
- case ${cpu} in
- aarch64*be)
- export CHOST_arm="armv8b-${CTARGET#*-}"
- ;;
- *)
- export CHOST_arm="armv8l-${CTARGET#*-}"
- ;;
- esac;
- CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
- export CTARGET_arm=${CHOST_arm};
- export LIBDIR_arm="lib";
- export CFLAGS_arm64=${CFLAGS_arm64-};
- export CHOST_arm64=${CTARGET};
- export CTARGET_arm64=${CHOST_arm64};
- export LIBDIR_arm64="lib64";
- : ${MULTILIB_ABIS=arm64};
- : ${DEFAULT_ABI=arm64}
- ;;
- x86_64*)
- export CFLAGS_x86=${CFLAGS_x86--m32};
- export CHOST_x86=${CTARGET/x86_64/i686};
- CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
- export CTARGET_x86=${CHOST_x86};
- if [[ ${SYMLINK_LIB} == "yes" ]]; then
- export LIBDIR_x86="lib32";
- else
- export LIBDIR_x86="lib";
- fi;
- export CFLAGS_amd64=${CFLAGS_amd64--m64};
- export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
- export CTARGET_amd64=${CHOST_amd64};
- export LIBDIR_amd64="lib64";
- export CFLAGS_x32=${CFLAGS_x32--mx32};
- export CHOST_x32=${CTARGET/%-gnu/-gnux32};
- export CTARGET_x32=${CHOST_x32};
- export LIBDIR_x32="libx32";
- case ${CTARGET} in
- *-gnux32)
- : ${MULTILIB_ABIS=x32 amd64 x86};
- : ${DEFAULT_ABI=x32}
- ;;
- *)
- : ${MULTILIB_ABIS=amd64 x86};
- : ${DEFAULT_ABI=amd64}
- ;;
- esac
- ;;
- mips64* | mipsisa64*)
- export CFLAGS_o32=${CFLAGS_o32--mabi=32};
- export CHOST_o32=${CTARGET/mips64/mips};
- export CHOST_o32=${CHOST_o32/mipsisa64/mipsisa32};
- export CTARGET_o32=${CHOST_o32};
- export LIBDIR_o32="lib";
- export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
- export CHOST_n32=${CTARGET};
- export CTARGET_n32=${CHOST_n32};
- export LIBDIR_n32="lib32";
- export CFLAGS_n64=${CFLAGS_n64--mabi=64};
- export CHOST_n64=${CTARGET};
- export CTARGET_n64=${CHOST_n64};
- export LIBDIR_n64="lib64";
- : ${MULTILIB_ABIS=n64 n32 o32};
- : ${DEFAULT_ABI=n32}
- ;;
- powerpc64*)
- export CFLAGS_ppc=${CFLAGS_ppc--m32};
- export CHOST_ppc=${CTARGET/powerpc64/powerpc};
- export CTARGET_ppc=${CHOST_ppc};
- export LIBDIR_ppc="lib";
- export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
- export CHOST_ppc64=${CTARGET};
- export CTARGET_ppc64=${CHOST_ppc64};
- export LIBDIR_ppc64="lib64";
- : ${MULTILIB_ABIS=ppc64 ppc};
- : ${DEFAULT_ABI=ppc64}
- ;;
- s390x*)
- export CFLAGS_s390=${CFLAGS_s390--m31};
- export CHOST_s390=${CTARGET/s390x/s390};
- export CTARGET_s390=${CHOST_s390};
- export LIBDIR_s390="lib";
- export CFLAGS_s390x=${CFLAGS_s390x--m64};
- export CHOST_s390x=${CTARGET};
- export CTARGET_s390x=${CHOST_s390x};
- export LIBDIR_s390x="lib64";
- : ${MULTILIB_ABIS=s390x s390};
- : ${DEFAULT_ABI=s390x}
- ;;
- sparc64*)
- export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
- export CHOST_sparc32=${CTARGET/sparc64/sparc};
- export CTARGET_sparc32=${CHOST_sparc32};
- export LIBDIR_sparc32="lib";
- export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
- export CHOST_sparc64=${CTARGET};
- export CTARGET_sparc64=${CHOST_sparc64};
- export LIBDIR_sparc64="lib64";
- : ${MULTILIB_ABIS=sparc64 sparc32};
- : ${DEFAULT_ABI=sparc64}
- ;;
- *)
- : ${MULTILIB_ABIS=default};
- : ${DEFAULT_ABI=default}
- ;;
- esac;
- export MULTILIB_ABIS DEFAULT_ABI
- }
- multilib_toolchain_setup ()
- {
- local v vv;
- export ABI=$1;
- if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
- for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
- do
- vv="_abi_saved_${v}";
- [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
- unset ${vv};
- done;
- unset _DEFAULT_ABI_SAVED;
- fi;
- if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
- for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
- do
- vv="_abi_saved_${v}";
- [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
- done;
- export _DEFAULT_ABI_SAVED="true";
- if [[ ${CBUILD} == "${CHOST}" ]]; then
- export CBUILD=$(get_abi_CHOST $1);
- fi;
- export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
- export CC="$(tc-getCC) $(get_abi_CFLAGS)";
- export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
- export F77="$(tc-getF77) $(get_abi_CFLAGS)";
- export FC="$(tc-getFC) $(get_abi_CFLAGS)";
- export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
- export CHOST=$(get_abi_CHOST $1);
- export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
- export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
- fi
- }
- number_abis ()
- {
- set -- `get_install_abis`;
- echo $#
- }
- optfeature ()
- {
- debug-print-function ${FUNCNAME} "$@";
- local i j msg;
- local desc=$1;
- local flag=0;
- shift;
- for i in "$@";
- do
- for j in ${i};
- do
- if has_version "${j}"; then
- flag=1;
- else
- flag=0;
- break;
- fi;
- done;
- if [[ ${flag} -eq 1 ]]; then
- break;
- fi;
- done;
- if [[ ${flag} -eq 0 ]]; then
- for i in "$@";
- do
- msg=" ";
- for j in ${i};
- do
- msg+=" ${j} and";
- done;
- msg="${msg:0: -4} for ${desc}";
- elog "${msg}";
- done;
- fi
- }
- path_exists ()
- {
- eerror "path_exists has been removed. Please see the following post";
- eerror "for a replacement snippet:";
- eerror "https://blogs.gentoo.org/mgorny/2018/08/09/inlining-path_exists/";
- die "path_exists is banned"
- }
- 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_compile_all ()
- {
- use doc && emake doc
- }
- python_convert_shebangs ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_convert_shebangs"
- }
- python_copy_sources ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local MULTIBUILD_VARIANTS;
- _python_obtain_impls;
- multibuild_copy_sources
- }
- python_disable_pyc ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_doexe ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local f;
- for f in "$@";
- do
- python_newexe "${f}" "${f##*/}";
- done
- }
- python_doheader ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- if [[ ${EAPI:-0} == [0123] ]]; then
- die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
- fi;
- local d PYTHON_INCLUDEDIR=${PYTHON_INCLUDEDIR};
- [[ -n ${PYTHON_INCLUDEDIR} ]] || python_export PYTHON_INCLUDEDIR;
- d=${PYTHON_INCLUDEDIR#${EPREFIX}};
- ( insopts -m 0644;
- insinto "${d}";
- doins -r "${@}" || return ${?} )
- }
- python_domodule ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- if [[ ${EAPI:-0} == [0123] ]]; then
- die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
- fi;
- local d;
- if [[ ${python_moduleroot} == /* ]]; then
- d=${python_moduleroot};
- else
- local PYTHON_SITEDIR=${PYTHON_SITEDIR};
- [[ -n ${PYTHON_SITEDIR} ]] || python_export PYTHON_SITEDIR;
- d=${PYTHON_SITEDIR#${EPREFIX}}/${python_moduleroot//.//};
- fi;
- ( insopts -m 0644;
- insinto "${d}";
- doins -r "${@}" || return ${?} );
- python_optimize "${ED%/}/${d}"
- }
- python_doscript ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local _PYTHON_REWRITE_SHEBANG=1;
- python_doexe "${@}"
- }
- python_enable_pyc ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_execute_function ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_execute_function"
- }
- python_execute_nosetests ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_execute_py.test ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_execute_trial ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_export ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl var;
- case "${1}" in
- python* | jython*)
- impl=${1/_/.};
- shift
- ;;
- pypy | pypy3)
- impl=${1};
- shift
- ;;
- *)
- impl=${EPYTHON};
- if [[ -z ${impl} ]]; then
- die "python_export called without a python implementation and EPYTHON is unset";
- fi
- ;;
- esac;
- debug-print "${FUNCNAME}: implementation: ${impl}";
- for var in "$@";
- do
- case "${var}" in
- EPYTHON)
- export EPYTHON=${impl};
- debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
- ;;
- PYTHON)
- export PYTHON=${EPREFIX}/usr/bin/${impl};
- debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
- ;;
- PYTHON_SITEDIR)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- PYTHON_SITEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_lib())') || die;
- export PYTHON_SITEDIR;
- debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
- ;;
- PYTHON_INCLUDEDIR)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- PYTHON_INCLUDEDIR=$("${PYTHON}" -c 'import distutils.sysconfig; print(distutils.sysconfig.get_python_inc())') || die;
- export PYTHON_INCLUDEDIR;
- debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}";
- if [[ ! -d ${PYTHON_INCLUDEDIR} ]]; then
- die "${impl} does not install any header files!";
- fi
- ;;
- PYTHON_LIBPATH)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- PYTHON_LIBPATH=$("${PYTHON}" -c 'import os.path, sysconfig; print(os.path.join(sysconfig.get_config_var("LIBDIR"), sysconfig.get_config_var("LDLIBRARY")) if sysconfig.get_config_var("LDLIBRARY") else "")') || die;
- export PYTHON_LIBPATH;
- debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}";
- if [[ ! -n ${PYTHON_LIBPATH} ]]; then
- die "${impl} lacks a (usable) dynamic library";
- fi
- ;;
- PYTHON_CFLAGS)
- local val;
- case "${impl}" in
- python*)
- val=$($(tc-getPKG_CONFIG) --cflags ${impl/n/n-}) || die
- ;;
- *)
- die "${impl}: obtaining ${var} not supported"
- ;;
- esac;
- export PYTHON_CFLAGS=${val};
- debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}"
- ;;
- PYTHON_LIBS)
- local val;
- case "${impl}" in
- python*)
- val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}) || die
- ;;
- *)
- die "${impl}: obtaining ${var} not supported"
- ;;
- esac;
- export PYTHON_LIBS=${val};
- debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}"
- ;;
- PYTHON_CONFIG)
- local flags val;
- case "${impl}" in
- python*)
- [[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
- flags=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_config_var("ABIFLAGS") or "")') || die;
- val=${PYTHON}${flags}-config
- ;;
- *)
- die "${impl}: obtaining ${var} not supported"
- ;;
- esac;
- export PYTHON_CONFIG=${val};
- debug-print "${FUNCNAME}: PYTHON_CONFIG = ${PYTHON_CONFIG}"
- ;;
- PYTHON_PKG_DEP)
- local d;
- case ${impl} in
- python2.7)
- PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7'
- ;;
- python3.3)
- PYTHON_PKG_DEP='>=dev-lang/python-3.3.2-r2:3.3'
- ;;
- python*)
- PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
- ;;
- pypy)
- PYTHON_PKG_DEP='>=virtual/pypy-5:0='
- ;;
- pypy3)
- PYTHON_PKG_DEP='>=virtual/pypy3-5:0='
- ;;
- jython2.7)
- PYTHON_PKG_DEP='dev-java/jython:2.7'
- ;;
- *)
- die "Invalid implementation: ${impl}"
- ;;
- esac;
- if [[ -n ${PYTHON_REQ_USE} ]]; then
- PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}];
- fi;
- export PYTHON_PKG_DEP;
- debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}"
- ;;
- PYTHON_SCRIPTDIR)
- local dir;
- export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl};
- debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}"
- ;;
- *)
- die "python_export: unknown variable ${var}"
- ;;
- esac;
- done
- }
- python_export_best ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}";
- eqawarn "python_export_best() is deprecated. Please use python_setup instead,";
- eqawarn "combined with python_export if necessary.";
- [[ ${#} -gt 0 ]] || set -- EPYTHON PYTHON;
- local best MULTIBUILD_VARIANTS;
- _python_obtain_impls;
- function _python_set_best ()
- {
- best=${MULTIBUILD_VARIANT}
- };
- multibuild_for_best_variant _python_set_best;
- unset -f _python_set_best;
- debug-print "${FUNCNAME}: Best implementation is: ${best}";
- python_export "${best}" "${@}";
- python_wrapper_setup
- }
- python_export_utf8_locale ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- type locale > /dev/null || return 0;
- if [[ $(locale charmap) != UTF-8 ]]; then
- local lang locales="C.UTF-8 en_US.UTF-8 en_GB.UTF-8 $(locale -a)";
- for lang in ${locales};
- do
- if [[ $(LC_ALL=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then
- if _python_check_locale_sanity "${lang}"; then
- export LC_CTYPE=${lang};
- if [[ -n ${LC_ALL} ]]; then
- export LC_NUMERIC=${LC_ALL};
- export LC_TIME=${LC_ALL};
- export LC_COLLATE=${LC_ALL};
- export LC_MONETARY=${LC_ALL};
- export LC_MESSAGES=${LC_ALL};
- export LC_PAPER=${LC_ALL};
- export LC_NAME=${LC_ALL};
- export LC_ADDRESS=${LC_ALL};
- export LC_TELEPHONE=${LC_ALL};
- export LC_MEASUREMENT=${LC_ALL};
- export LC_IDENTIFICATION=${LC_ALL};
- export LC_ALL=;
- fi;
- return 0;
- fi;
- fi;
- done;
- ewarn "Could not find a UTF-8 locale. This may trigger build failures in";
- ewarn "some python packages. Please ensure that a UTF-8 locale is listed in";
- ewarn "/etc/locale.gen and run locale-gen.";
- return 1;
- fi;
- return 0
- }
- python_fix_shebang ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)";
- local force quiet;
- while [[ -n ${@} ]]; do
- case "${1}" in
- -f | --force)
- force=1;
- shift
- ;;
- -q | --quiet)
- quiet=1;
- shift
- ;;
- --)
- shift;
- break
- ;;
- *)
- break
- ;;
- esac;
- done;
- [[ -n ${1} ]] || die "${FUNCNAME}: no paths given";
- local path f;
- for path in "$@";
- do
- local any_correct any_fixed is_recursive;
- [[ -d ${path} ]] && is_recursive=1;
- while IFS= read -r -d '' f; do
- local shebang i;
- local error= from=;
- IFS= read -r shebang < "${f}";
- if [[ ${shebang} == '#!'* ]]; then
- local split_shebang=();
- read -r -a split_shebang <<< ${shebang} || die;
- for i in "${split_shebang[@]}";
- do
- case "${i}" in
- *"${EPYTHON}")
- debug-print "${FUNCNAME}: in file ${f#${D%/}}";
- debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}";
- any_correct=1;
- from=${EPYTHON};
- break
- ;;
- *python | *python[23])
- debug-print "${FUNCNAME}: in file ${f#${D%/}}";
- debug-print "${FUNCNAME}: rewriting shebang: ${shebang}";
- if [[ ${i} == *python2 ]]; then
- from=python2;
- if [[ ! -n ${force} ]]; then
- python_is_python3 "${EPYTHON}" && error=1;
- fi;
- else
- if [[ ${i} == *python3 ]]; then
- from=python3;
- if [[ ! -n ${force} ]]; then
- python_is_python3 "${EPYTHON}" || error=1;
- fi;
- else
- from=python;
- fi;
- fi;
- break
- ;;
- *python[23].[0123456789] | *pypy | *pypy3 | *jython[23].[0123456789])
- if [[ ! -n ${force} ]]; then
- error=1;
- else
- case "${i}" in
- *python[23].[0123456789])
- from="python[23].[0123456789]"
- ;;
- *pypy)
- from="pypy"
- ;;
- *pypy3)
- from="pypy3"
- ;;
- *jython[23].[0123456789])
- from="jython[23].[0123456789]"
- ;;
- *)
- die "${FUNCNAME}: internal error in 2nd pattern match"
- ;;
- esac;
- fi;
- break
- ;;
- esac;
- done;
- fi;
- if [[ ! -n ${error} && ! -n ${from} ]]; then
- [[ -n ${is_recursive} ]] && continue;
- error=1;
- fi;
- if [[ ! -n ${quiet} ]]; then
- einfo "Fixing shebang in ${f#${D%/}}.";
- fi;
- if [[ ! -n ${error} ]]; then
- if [[ ${shebang} == *${from}" "* ]]; then
- sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die;
- else
- sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die;
- fi;
- any_fixed=1;
- else
- eerror "The file has incompatible shebang:";
- eerror " file: ${f#${D%/}}";
- eerror " current shebang: ${shebang}";
- eerror " requested impl: ${EPYTHON}";
- die "${FUNCNAME}: conversion of incompatible shebang requested";
- fi;
- done < <(find -H "${path}" -type f -print0 || die);
- if [[ ! -n ${any_fixed} ]]; then
- local cmd=eerror;
- [[ ${EAPI:-0} == [012345] ]] && cmd=eqawarn;
- "${cmd}" "QA warning: ${FUNCNAME}, ${path#${D%/}} did not match any fixable files.";
- if [[ -n ${any_correct} ]]; then
- "${cmd}" "All files have ${EPYTHON} shebang already.";
- else
- "${cmd}" "There are no Python files in specified directory.";
- fi;
- [[ ${cmd} == eerror ]] && die "${FUNCNAME} did not match any fixable files (QA warning fatal in EAPI ${EAPI})";
- fi;
- done
- }
- python_foreach_impl ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local MULTIBUILD_VARIANTS;
- _python_obtain_impls;
- multibuild_foreach_variant _python_multibuild_wrapper "${@}"
- }
- python_gen_any_dep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local depstr=${1};
- [[ -n ${depstr} ]] || die "No dependency string provided";
- shift;
- local i PYTHON_PKG_DEP out=;
- for i in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${i}" "${@-*}"; then
- local PYTHON_USEDEP="python_targets_${i}(-),python_single_target_${i}(+)";
- python_export "${i}" PYTHON_PKG_DEP;
- local i_depstr=${depstr//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}};
- out="( ${PYTHON_PKG_DEP%=} ${i_depstr} ) ${out}";
- fi;
- done;
- echo "|| ( ${out})"
- }
- python_gen_cond_dep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- local dep=${1};
- shift;
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${@}"; then
- if [[ ${dep} == *'${PYTHON_USEDEP}'* ]]; then
- local usedep=$(python_gen_usedep "${@}");
- dep=${dep//\$\{PYTHON_USEDEP\}/${usedep}};
- fi;
- matches+=("python_targets_${impl}? ( ${dep} )");
- fi;
- done;
- echo "${matches[@]}"
- }
- python_gen_impl_dep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- local PYTHON_REQ_USE=${1};
- shift;
- local patterns=("${@-*}");
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${patterns[@]}"; then
- local PYTHON_PKG_DEP;
- python_export "${impl}" PYTHON_PKG_DEP;
- matches+=("python_targets_${impl}? ( ${PYTHON_PKG_DEP} )");
- fi;
- done;
- echo "${matches[@]}"
- }
- python_gen_usedep ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${@}"; then
- matches+=("python_targets_${impl}(-)?" "-python_single_target_${impl}(-)");
- fi;
- done;
- [[ -n ${matches[@]} ]] || die "No supported implementations match python_gen_usedep patterns: ${@}";
- local out=${matches[@]};
- echo "${out// /,}"
- }
- python_gen_useflags ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local impl matches=();
- for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
- do
- if _python_impl_matches "${impl}" "${@}"; then
- matches+=("python_targets_${impl}");
- fi;
- done;
- echo "${matches[@]}"
- }
- python_generate_cffi_modules ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_generate_wrapper_scripts ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_CFLAGS ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_CFLAGS;
- echo "${PYTHON_CFLAGS}"
- }
- python_get_LIBS ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_LIBS;
- echo "${PYTHON_LIBS}"
- }
- python_get_PYTHON_CONFIG ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_CONFIG;
- echo "${PYTHON_CONFIG}"
- }
- python_get_extension_module_suffix ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_implementation ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_implementation_and_version ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_implementational_package ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_includedir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_INCLUDEDIR;
- echo "${PYTHON_INCLUDEDIR}"
- }
- python_get_libdir ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_library ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_get_library_path ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_LIBPATH;
- echo "${PYTHON_LIBPATH}"
- }
- python_get_scriptdir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_SCRIPTDIR;
- echo "${PYTHON_SCRIPTDIR}"
- }
- python_get_sitedir ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_export "${@}" PYTHON_SITEDIR;
- echo "${PYTHON_SITEDIR}"
- }
- python_get_version ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_install_all ()
- {
- use doc && local HTML_DOCS=(doc/html/.);
- distutils-r1_python_install_all
- }
- python_install_executables ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_is_installed ()
- {
- local impl=${1:-${EPYTHON}};
- [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON";
- local hasv_args=();
- case ${EAPI:-0} in
- 0 | 1 | 2 | 3 | 4)
- local -x ROOT=/
- ;;
- 5 | 6)
- hasv_args+=(--host-root)
- ;;
- *)
- hasv_args+=(-b)
- ;;
- esac;
- case "${impl}" in
- pypy | pypy3)
- local append=;
- if [[ -n ${PYTHON_REQ_USE} ]]; then
- append=[${PYTHON_REQ_USE}];
- fi;
- has_version "${hasv_args[@]}" "dev-python/${impl}${append}" || has_version "${hasv_args[@]}" "dev-python/${impl}-bin${append}"
- ;;
- *)
- local PYTHON_PKG_DEP;
- python_export "${impl}" PYTHON_PKG_DEP;
- has_version "${hasv_args[@]}" "${PYTHON_PKG_DEP}"
- ;;
- esac
- }
- python_is_python3 ()
- {
- local impl=${1:-${EPYTHON}};
- [[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON";
- [[ ${impl} == python3* || ${impl} == pypy3 ]]
- }
- python_merge_intermediate_installation_images ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_mod_cleanup ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
- }
- python_mod_optimize ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
- }
- python_moduleinto ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_moduleroot=${1}
- }
- python_need_rebuild ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite"
- }
- python_newexe ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- [[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} <path> <new-name>";
- if [[ ${EAPI:-0} == [0123] ]]; then
- die "python_do* and python_new* helpers are banned in EAPIs older than 4.";
- fi;
- local wrapd=${python_scriptroot:-/usr/bin};
- local f=${1};
- local newfn=${2};
- local PYTHON_SCRIPTDIR d;
- python_export PYTHON_SCRIPTDIR;
- d=${PYTHON_SCRIPTDIR#${EPREFIX}};
- ( dodir "${wrapd}";
- exeopts -m 0755;
- exeinto "${d}";
- newexe "${f}" "${newfn}" || return ${?} );
- _python_ln_rel "${ED%/}"/usr/lib/python-exec/python-exec2 "${ED%/}/${wrapd}/${newfn}" || die;
- if [[ -n ${_PYTHON_REWRITE_SHEBANG} ]]; then
- python_fix_shebang -q "${ED%/}/${d}/${newfn}";
- fi
- }
- python_newscript ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- local _PYTHON_REWRITE_SHEBANG=1;
- python_newexe "${@}"
- }
- python_optimize ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then
- eerror "The new Python eclasses expect the compiled Python files to";
- eerror "be controlled by the Package Manager. For this reason,";
- eerror "the python_optimize function can be used only during src_* phases";
- eerror "(src_install most commonly) and not during pkg_* phases.";
- echo;
- die "python_optimize is not to be used in pre/post* phases";
- fi;
- [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
- local PYTHON=${PYTHON};
- [[ -n ${PYTHON} ]] || python_export PYTHON;
- if [[ ${#} -eq 0 ]]; then
- local f;
- while IFS= read -r -d '' f; do
- if [[ ${f} == /* && -d ${D%/}${f} ]]; then
- set -- "${D%/}${f}" "${@}";
- fi;
- done < <("${PYTHON}" -c 'import sys; print("\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 ()
- {
- sed -i -e 's:, "-Werror"::' setup.py || die;
- sed -e "s:html_theme = 'default':html_theme = 'classic':" -i doc/conf.py || die;
- 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;
- ( exeopts -m 0755;
- exeinto "${PYTHON_SCRIPTDIR#${EPREFIX}}";
- doexe "${files[@]}" );
- python_fix_shebang -q "${files[@]/*\//${D%/}/${PYTHON_SCRIPTDIR}/}"
- };
- local files=("${@}");
- python_foreach_impl _python_replicate_script;
- unset -f _python_replicate_script;
- local f;
- for f in "$@";
- do
- _python_ln_rel "${ED%/}/usr/lib/python-exec/python-exec2" "${f}" || die;
- done
- }
- python_scriptinto ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- python_scriptroot=${1}
- }
- python_set_active_version ()
- {
- die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
- }
- python_setup ()
- {
- debug-print-function ${FUNCNAME} "${@}";
- _python_validate_useflags;
- local pycompat=("${PYTHON_COMPAT[@]}");
- if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
- pycompat=(${PYTHON_COMPAT_OVERRIDE});
- fi;
- local has_check_deps;
- declare -f python_check_deps > /dev/null && has_check_deps=1;
- local found;
- for ((i = ${#_PYTHON_SUPPORTED_IMPLS[@]} - 1; i >= 0; i-- ))
- do
- local impl=${_PYTHON_SUPPORTED_IMPLS[i]};
- has "${impl}" "${pycompat[@]}" || continue;
- if [[ ! -n ${PYTHON_COMPAT_OVERRIDE} && ! -n ${has_check_deps} ]]; then
- use "python_targets_${impl}" || continue;
- fi;
- _python_impl_matches "${impl}" "${@-*}" || continue;
- python_export "${impl}" EPYTHON PYTHON;
- if [[ -n ${has_check_deps} ]]; then
- python_is_installed "${impl}" || continue;
- local PYTHON_USEDEP="python_targets_${impl}(-),python_single_target_${impl}(+)";
- python_check_deps || continue;
- fi;
- found=1;
- break;
- done;
- if [[ ! -n ${found} ]]; then
- eerror "${FUNCNAME}: none of the enabled implementation matched the patterns.";
- eerror " patterns: ${@-'(*)'}";
- eerror "Likely a REQUIRED_USE constraint (possibly USE-conditional) is missing.";
- eerror " suggested: || ( \$(python_gen_useflags ${@}) )";
- eerror "(remember to quote all the patterns with '')";
- die "${FUNCNAME}: no enabled implementation satisfy requirements";
- fi;
- python_wrapper_setup
- }
- python_test ()
- {
- nosetests -v || die "Tests fail with ${EPYTHON}"
- }
- 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
- }
- 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 ()
- {
- local -x TEST_DIR="${TEST_DIR:-/var/tmp}";
- local -x TEST_IGNORE_XATTRS="${TEST_IGNORE_XATTRS:-security.selinux}";
- einfo "Please note that the tests fail if xattrs are not supported";
- einfo "by the filesystem used for ${TEST_DIR}.";
- einfo;
- einfo "The location for tests can be overriden using TEST_DIR variable:";
- einfo " $ export TEST_DIR=/my/test/place";
- einfo;
- einfo "Additionally, TEST_IGNORE_XATTRS can be set to control which";
- einfo "external attributes are ignored by the tests.";
- einfo "See https://bugs.gentoo.org/503946 for details.";
- einfo;
- distutils-r1_src_test
- }
- src_unpack ()
- {
- default
- }
- strip-linguas ()
- {
- local ls newls nols;
- if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
- local op=$1;
- shift;
- ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
- shift;
- local d f;
- for d in "$@";
- do
- if [[ ${op} == "-u" ]]; then
- newls=${ls};
- else
- newls="";
- fi;
- for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
- do
- if [[ ${op} == "-i" ]]; then
- has ${f} ${ls} && newls="${newls} ${f}";
- else
- has ${f} ${ls} || newls="${newls} ${f}";
- fi;
- done;
- ls=${newls};
- done;
- else
- ls="$@";
- fi;
- nols="";
- newls="";
- for f in ${LINGUAS};
- do
- if has ${f} ${ls}; then
- newls="${newls} ${f}";
- else
- nols="${nols} ${f}";
- fi;
- done;
- [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
- export LINGUAS=${newls:1}
- }
- tc-arch ()
- {
- tc-ninja_magic_to_arch portage "$@"
- }
- tc-arch-kernel ()
- {
- tc-ninja_magic_to_arch kern "$@"
- }
- tc-check-openmp ()
- {
- if ! tc-has-openmp; then
- eerror "Your current compiler does not support OpenMP!";
- if tc-is-gcc; then
- eerror "Enable OpenMP support by building sys-devel/gcc with USE=\"openmp\".";
- else
- if tc-is-clang; then
- eerror "OpenMP support in sys-devel/clang is provided by sys-libs/libomp.";
- fi;
- fi;
- die "Active compiler does not have required support for OpenMP";
- fi
- }
- tc-cpp-is-true ()
- {
- local CONDITION=${1};
- shift;
- local RESULT=$($(tc-getTARGET_CPP) "${@}" -P - <<-EOF 2>/dev/null
- #if ${CONDITION}
- true
- #endif
- EOF
- );
- [[ ${RESULT} == true ]]
- }
- tc-detect-is-softfloat ()
- {
- [[ $(tc-getTARGET_CPP) == "gcc -E" ]] && return 1;
- case ${CTARGET:-${CHOST}} in
- *-newlib | *-elf | *-eabi)
- return 1
- ;;
- arm*)
- if tc-cpp-is-true "defined(__ARM_PCS_VFP)"; then
- echo "no";
- else
- if tc-cpp-is-true "defined(__SOFTFP__)"; then
- echo "yes";
- else
- echo "softfp";
- fi;
- fi;
- return 0
- ;;
- *)
- return 1
- ;;
- esac
- }
- tc-enables-pie ()
- {
- tc-cpp-is-true "defined(__PIE__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-enables-ssp ()
- {
- tc-cpp-is-true "defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-enables-ssp-all ()
- {
- tc-cpp-is-true "defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-enables-ssp-strong ()
- {
- tc-cpp-is-true "defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS}
- }
- tc-endian ()
- {
- local host=$1;
- [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
- host=${host%%-*};
- case ${host} in
- aarch64*be)
- echo big
- ;;
- aarch64)
- echo little
- ;;
- alpha*)
- echo little
- ;;
- arm*b*)
- echo big
- ;;
- arm*)
- echo little
- ;;
- cris*)
- echo little
- ;;
- hppa*)
- echo big
- ;;
- i?86*)
- echo little
- ;;
- ia64*)
- echo little
- ;;
- m68*)
- echo big
- ;;
- mips*l*)
- echo little
- ;;
- mips*)
- echo big
- ;;
- powerpc*le)
- echo little
- ;;
- powerpc*)
- echo big
- ;;
- s390*)
- echo big
- ;;
- sh*b*)
- echo big
- ;;
- sh*)
- echo little
- ;;
- sparc*)
- echo big
- ;;
- x86_64*)
- echo little
- ;;
- *)
- echo wtf
- ;;
- esac
- }
- tc-env_build ()
- {
- tc-export_build_env;
- CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
- }
- tc-export ()
- {
- local var;
- for var in "$@";
- do
- [[ $(type -t "tc-get${var}") != "function" ]] && die "tc-export: invalid export variable '${var}'";
- "tc-get${var}" > /dev/null;
- done
- }
- tc-export_build_env ()
- {
- tc-export "$@";
- if tc-is-cross-compiler; then
- : ${BUILD_CFLAGS:=-O1 -pipe};
- : ${BUILD_CXXFLAGS:=-O1 -pipe};
- : ${BUILD_CPPFLAGS:= };
- : ${BUILD_LDFLAGS:= };
- else
- : ${BUILD_CFLAGS:=${CFLAGS}};
- : ${BUILD_CXXFLAGS:=${CXXFLAGS}};
- : ${BUILD_CPPFLAGS:=${CPPFLAGS}};
- : ${BUILD_LDFLAGS:=${LDFLAGS}};
- fi;
- export BUILD_{C,CXX,CPP,LD}FLAGS;
- local v;
- for v in BUILD_{C,CXX,CPP,LD}FLAGS;
- do
- export ${v#BUILD_}_FOR_BUILD="${!v}";
- done
- }
- tc-get-compiler-type ()
- {
- local code='
- #if defined(__PATHSCALE__)
- HAVE_PATHCC
- #elif defined(__clang__)
- HAVE_CLANG
- #elif defined(__GNUC__)
- HAVE_GCC
- #endif
- ';
- local res=$($(tc-getCPP "$@") -E -P - <<<"${code}");
- case ${res} in
- *HAVE_PATHCC*)
- echo pathcc
- ;;
- *HAVE_CLANG*)
- echo clang
- ;;
- *HAVE_GCC*)
- echo gcc
- ;;
- *)
- echo unknown
- ;;
- esac
- }
- tc-getAR ()
- {
- tc-getPROG AR ar "$@"
- }
- tc-getAS ()
- {
- tc-getPROG AS as "$@"
- }
- tc-getBUILD_AR ()
- {
- tc-getBUILD_PROG AR ar "$@"
- }
- tc-getBUILD_AS ()
- {
- tc-getBUILD_PROG AS as "$@"
- }
- tc-getBUILD_CC ()
- {
- tc-getBUILD_PROG CC gcc "$@"
- }
- tc-getBUILD_CPP ()
- {
- tc-getBUILD_PROG CPP "$(tc-getBUILD_CC) -E" "$@"
- }
- tc-getBUILD_CXX ()
- {
- tc-getBUILD_PROG CXX g++ "$@"
- }
- tc-getBUILD_LD ()
- {
- tc-getBUILD_PROG LD ld "$@"
- }
- tc-getBUILD_NM ()
- {
- tc-getBUILD_PROG NM nm "$@"
- }
- tc-getBUILD_OBJCOPY ()
- {
- tc-getBUILD_PROG OBJCOPY objcopy "$@"
- }
- tc-getBUILD_PKG_CONFIG ()
- {
- tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
- }
- tc-getBUILD_PROG ()
- {
- local vars="BUILD_$1 $1_FOR_BUILD HOST$1";
- tc-is-cross-compiler || vars+=" $1";
- _tc-getPROG CBUILD "${vars}" "${@:2}"
- }
- tc-getBUILD_RANLIB ()
- {
- tc-getBUILD_PROG RANLIB ranlib "$@"
- }
- tc-getBUILD_STRIP ()
- {
- tc-getBUILD_PROG STRIP strip "$@"
- }
- tc-getCC ()
- {
- tc-getPROG CC gcc "$@"
- }
- tc-getCPP ()
- {
- tc-getPROG CPP "${CC:-gcc} -E" "$@"
- }
- tc-getCXX ()
- {
- tc-getPROG CXX g++ "$@"
- }
- tc-getDLLWRAP ()
- {
- tc-getPROG DLLWRAP dllwrap "$@"
- }
- tc-getF77 ()
- {
- tc-getPROG F77 gfortran "$@"
- }
- tc-getFC ()
- {
- tc-getPROG FC gfortran "$@"
- }
- tc-getGCJ ()
- {
- tc-getPROG GCJ gcj "$@"
- }
- tc-getGO ()
- {
- tc-getPROG GO gccgo "$@"
- }
- tc-getLD ()
- {
- tc-getPROG LD ld "$@"
- }
- tc-getNM ()
- {
- tc-getPROG NM nm "$@"
- }
- tc-getOBJCOPY ()
- {
- tc-getPROG OBJCOPY objcopy "$@"
- }
- tc-getOBJDUMP ()
- {
- tc-getPROG OBJDUMP objdump "$@"
- }
- tc-getPKG_CONFIG ()
- {
- tc-getPROG PKG_CONFIG pkg-config "$@"
- }
- tc-getPROG ()
- {
- _tc-getPROG CHOST "$@"
- }
- tc-getRANLIB ()
- {
- tc-getPROG RANLIB ranlib "$@"
- }
- tc-getRC ()
- {
- tc-getPROG RC windres "$@"
- }
- tc-getSTRIP ()
- {
- tc-getPROG STRIP strip "$@"
- }
- tc-getTARGET_CPP ()
- {
- if [[ -n ${CTARGET} ]]; then
- _tc-getPROG CTARGET TARGET_CPP "gcc -E" "$@";
- else
- tc-getCPP "$@";
- fi
- }
- tc-has-openmp ()
- {
- local base="${T}/test-tc-openmp";
- cat > "${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 ()
- {
- tc-detect-is-softfloat || tc-tuple-is-softfloat
- }
- tc-is-static-only ()
- {
- local host=${CTARGET:-${CHOST}};
- [[ ${host} == *-mint* ]]
- }
- tc-ld-disable-gold ()
- {
- if ! tc-ld-is-gold "$@"; then
- return;
- fi;
- ewarn "Forcing usage of the BFD linker instead of GOLD";
- local ld=$(tc-getLD "$@");
- local bfd_ld="${ld%% *}.bfd";
- local path_ld=$(which "${bfd_ld}" 2>/dev/null);
- [[ -e ${path_ld} ]] && export LD=${bfd_ld};
- local fallback="true";
- if tc-is-gcc; then
- local major=$(gcc-major-version "$@");
- local minor=$(gcc-minor-version "$@");
- if [[ ${major} -gt 4 ]] || [[ ${major} -eq 4 && ${minor} -ge 8 ]]; then
- export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
- fallback="false";
- fi;
- else
- if tc-is-clang; then
- local major=$(clang-major-version "$@");
- local minor=$(clang-minor-version "$@");
- if [[ ${major} -gt 3 ]] || [[ ${major} -eq 3 && ${minor} -ge 5 ]]; then
- export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
- fallback="false";
- fi;
- fi;
- fi;
- if [[ ${fallback} == "true" ]]; then
- if [[ -e ${path_ld} ]]; then
- local d="${T}/bfd-linker";
- mkdir -p "${d}";
- ln -sf "${path_ld}" "${d}"/ld;
- export LDFLAGS="${LDFLAGS} -B${d}";
- else
- die "unable to locate a BFD linker to bypass gold";
- fi;
- fi
- }
- tc-ld-is-gold ()
- {
- local out;
- out=$($(tc-getLD "$@") --version 2>&1);
- if [[ ${out} == *"GNU gold"* ]]; then
- return 0;
- fi;
- local base="${T}/test-tc-gold";
- cat > "${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
- }
- tc-tuple-is-softfloat ()
- {
- local CTARGET=${CTARGET:-${CHOST}};
- case ${CTARGET//_/-} in
- bfin* | h8300*)
- echo "only"
- ;;
- *-softfloat-*)
- echo "yes"
- ;;
- *-softfp-*)
- echo "softfp"
- ;;
- arm*-hardfloat-* | arm*eabihf)
- echo "no"
- ;;
- *-newlib | *-elf | *-eabi)
- echo "no"
- ;;
- arm*)
- echo "yes"
- ;;
- *)
- echo "no"
- ;;
- esac
- }
- use_if_iuse ()
- {
- in_iuse $1 || return 1;
- use $1
- }
- ver_cut ()
- {
- local range=${1};
- local v=${2:-${PV}};
- local start end;
- local -a comp;
- __eapi7_ver_split "${v}";
- local max=$((${#comp[@]}/2));
- __eapi7_ver_parse_range "${range}" "${max}";
- local IFS=;
- if [[ ${start} -gt 0 ]]; then
- start=$(( start*2 - 1 ));
- fi;
- echo "${comp[*]:start:end*2-start}"
- }
- ver_rs ()
- {
- local v;
- (( ${#} & 1 )) && v=${@: -1} || v=${PV};
- local start end i;
- local -a comp;
- __eapi7_ver_split "${v}";
- local max=$((${#comp[@]}/2 - 1));
- while [[ ${#} -ge 2 ]]; do
- __eapi7_ver_parse_range "${1}" "${max}";
- for ((i = start*2; i <= end*2; i+=2 ))
- do
- [[ ${i} -eq 0 && -z ${comp[i]} ]] && continue;
- comp[i]=${2};
- done;
- shift 2;
- done;
- local IFS=;
- echo "${comp[*]}"
- }
- ver_test ()
- {
- local va op vb;
- if [[ $# -eq 3 ]]; then
- va=${1};
- shift;
- else
- va=${PVR};
- fi;
- [[ $# -eq 2 ]] || die "${FUNCNAME}: bad number of arguments";
- op=${1};
- vb=${2};
- case ${op} in
- -eq | -ne | -lt | -le | -gt | -ge)
-
- ;;
- *)
- die "${FUNCNAME}: invalid operator: ${op}"
- ;;
- esac;
- __eapi7_ver_compare "${va}" "${vb}";
- test $? "${op}" 2
- }
-