You are not logged in.

#1 2013-03-30 17:33:20

mateuo
Member
Registered: 2011-06-10
Posts: 25

nodejs error compiling

Hi I'm trying to update my system and I'm stacked updating nodejs. Thank you for your help

This is the info:

emerge --info '=net-libs/nodejs-0.8.0'
Portage 2.3.5-r7 (funtoo/1.0/linux-gnu/arch/x86-64bit, gcc-4.6.3, glibc-2.15-r3, 3.5.0-gentoo x86_64)
=================================================================
                        System Settings
=================================================================
System uname: Linux-3.5.0-gentoo-x86_64-Intel-R-_Core-TM-_i5-2410M_CPU_@_2.30GHz-with-gentoo-2.2.0
KiB Mem:     8158616 total,   2719996 free
KiB Swap:    1953120 total,   1953120 free
Timestamp of tree: Fri, 29 Mar 2013 05:45:01 +0000
ld GNU ld (GNU Binutils) 2.22
app-shells/bash:          4.2_p37
dev-java/java-config:     2.1.12-r1000
dev-lang/python:          2.7.3-r1000, 3.2.3-r1000
dev-util/cmake:           2.8.10.2-r1
dev-util/pkgconfig:       0.28
sys-apps/baselayout:      2.2.0-r4
sys-apps/openrc:          0.10.2-r7
sys-apps/sandbox:         2.6
sys-devel/autoconf:       2.13, 2.69
sys-devel/automake:       1.9.6-r3, 1.10.3, 1.11.6
sys-devel/binutils:       2.22-r1
sys-devel/gcc:            4.6.3
sys-devel/gcc-config:     1.5-r1
sys-devel/libtool:        2.4.2
sys-devel/make:           3.82-r4
sys-kernel/linux-headers: 3.4-r2 (virtual/os-headers)
sys-libs/glibc:           2.15-r3
Repositories: gentoo
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE=""
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=core2 -mtune=generic -O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /usr/share/maven-bin-3.0/conf /usr/share/polkit-1/actions /var/lib/hsqldb"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c /etc/udev/rules.d"
CXXFLAGS="-mtune=generic -O2 -pipe"
DISTDIR="/usr/portage/distfiles"
EMERGE_DEFAULT_OPTS="--autounmask=n"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync mini-manifest news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch"
FFLAGS=""
GENTOO_MIRRORS="http://distfiles.gentoo.org"
LANG="es_ES.UTF-8"
LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed"
LINGUAS="es"
MAKEOPTS="-j3"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY=""
SYNC="git://github.com/funtoo/ports-2012.git"
SYNC_USER="root"
USE="(wide-unicode) 3dnow X a52 aac acl acpi admin aim alsa amd64 apm apng atm audiofile bash-completion berkdb bluetooth bzip2 cairo cdda cddb cdr cgi consolekit cracklib crypt css ctype cups curl curlwrappers cvs cxx dbm dbus dbx dconf device-mapper dga dhcpd dri dv dvb dvd dvdr dvdread eds enscript exif external extras fastcgi ffmpeg flac fltk fontconfig fortran ftp gcj gd gdbm gdu gif gimp gles2 glut gnome gnome-keyring gphoto2 gpm gstreamer gtk gtk3 gtkhtml gudev gzip hpcups hpijs hwdb iconv icu ieee1394 innodb introspection ipc ipv6 jack java java6 javascript jpeg jpeg2k kdrive kerberos lame latex libkms libnotify libwww lm_sensors lzma lzo mad methodjit mime minizip mmx mng modules mp3 mp4 mpeg msql mssql mudflap multilib mysql nas ncurses nls nptl nsplugin nss ogg opengl openmp pam pce pcmcia pcre pda pdf perl png policykit postgres ppds pppd pulseaudio python qt3support qt4 readline resolvconf rss ruby sage samba sasl soap sockets socks5 source spell sqlite sqlite3 sse sse2 ssl szip tcpd theora threads tiff truetype udev unicode usb vala vnc vorbis vorbisxine wavpack webdav-serf webm wxwidgets x264 xineram xinetd xml zlib" ABI_X86="64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias authn_core authz_core socache_shmcb unixd" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CURL_SSL="nss" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="evdev synaptics" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="nlpsolver pdfimport" LINGUAS="es" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-3" PYTHON_ABIS="2.7 3.2" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_2" QEMU_SOFTMMU_TARGETS="i386 x86_64" QEMU_USER_TARGETS="i386 x86_64" RUBY_TARGETS="ruby18 ruby19" USERLAND="GNU" VIDEO_CARDS="vesa fglrx radeon" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, SYNC_UMASK

emerge -pqv '=net-libs/nodejs-0.8.0'

emerge -pqv '=net-libs/nodejs-0.8.0'
[ebuild  N    ] net-libs/nodejs-0.8.0 

  IMPORTANT: 5 news items need reading for repository 'gentoo'.
  Use eselect news to read news items.

/var/tmp/portage/net-libs/nodejs-0.8.0/temp/environment'

declare -x ABI="amd64"
declare -x ABI_X86="64"
declare -x ALSA_CARDS=""
declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"
declare -x ANDROID_SWT="/usr/share/swt-4.2/lib"
declare -x ANT_HOME="/usr/share/ant"
declare -x APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
declare -x ARCH="amd64"
declare -x ASFLAGS_x86="--32"
declare -x BOOTSTRAP_USE="cxx unicode"
declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump"
declare -x CAMERAS="ptp2"
declare -x CBUILD="x86_64-pc-linux-gnu"
declare -x CDEFINE_amd64="__x86_64__"
declare -x CDEFINE_x86="__i386__"
declare -x CFLAGS="-march=core2 -mtune=generic -O2 -pipe"
declare -x CFLAGS_default
declare -x CFLAGS_x86="-m32"
declare -x CHOST="x86_64-pc-linux-gnu"
declare -x CHOST_amd64="x86_64-pc-linux-gnu"
declare -x CHOST_default="x86_64-pc-linux-gnu"
declare -x CHOST_x86="i686-pc-linux-gnu"
declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
declare -x CROSSCOMPILE_OPTS=""
declare -x CTARGET_default="x86_64-pc-linux-gnu"
declare -x CXXFLAGS="-mtune=generic -O2 -pipe"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-OS7RHfS4M3,guid=0696003ec565b714ccbf33cc5156b39c"
declare -x DEFAULT_ABI="amd64"
declare -x DEFINED_PHASES=" compile configure install prepare setup test"
declare DEPEND=">=dev-lang/v8-3.11.10
	dev-libs/openssl =dev-lang/python-2*"
declare DESCRIPTION="Evented IO for V8 Javascript"
declare -x DESKTOP_SESSION="gnome"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -x EAPI="4-python"
declare -x ELIBC="glibc"
declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
declare -- EPATCH_EXCLUDE=""
declare -- EPATCH_FORCE="no"
declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
declare -- EPATCH_OPTS=""
declare -- EPATCH_SINGLE_MSG=""
declare -- EPATCH_SOURCE="/var/tmp/portage/net-libs/nodejs-0.8.0/work/patch"
declare -- EPATCH_SUFFIX="patch.bz2"
declare -x EPYTHON="python2.7"
declare -x EXEOPTIONS="-m0755"
declare -x FCFLAGS=""
declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
declare -x FFLAGS=""
declare -x FLTK_DOCDIR="/usr/share/doc/fltk-1.3.2/html"
declare -x GCC_SPECS=""
declare -x GDMSESSION="gnome"
declare -x GIO_LAUNCHED_DESKTOP_FILE="/usr/share/applications/guake.desktop"
declare -x GIO_LAUNCHED_DESKTOP_FILE_PID="8527"
declare -x GJS_DEBUG_OUTPUT="stderr"
declare -x GJS_DEBUG_TOPICS="JS ERROR;JS LOG"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_KEYRING_CONTROL="/home/mateu/.cache/keyring-JC8dT1"
declare -x GNOME_KEYRING_PID="8042"
declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx"
declare -x GRUB_PLATFORMS=""
declare -x GSETTINGS_BACKEND="dconf"
declare -x GUILE_LOAD_PATH="/usr/share/guile/1.8"
declare HDEPEND=""
declare -x HG="/usr/bin/hg"
declare HOMEPAGE="http://nodejs.org/"
declare -x INHERITED=" python multilib toolchain-funcs user eutils pax-utils"
declare -x INPUT_DEVICES="evdev synaptics"
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare IUSE=""
declare -x IUSE_IMPLICIT="prefix"
declare -x JAVAC="/home/mateu/.gentoo/java-config-2/current-user-vm/bin/javac"
declare -x JAVACC_HOME="/usr/share/javacc/"
declare -x JAVA_HOME="/home/mateu/.gentoo/java-config-2/current-user-vm"
declare -x JDK_HOME="/home/mateu/.gentoo/java-config-2/current-user-vm"
declare -x JYTHON_SYSTEM_CACHEDIR="1"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="amd64"
declare -x KEYWORDS="~*"
declare -x LANG="es_ES.UTF-8"
declare -x LANGUAGE="es_ES.UTF-8"
declare -x LCD_DEVICES=""
declare -x LC_COLLATE="POSIX"
declare -x LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed"
declare -x LDFLAGS_default
declare -x LDFLAGS_x86="-m elf_i386"
declare -x LIBDIR_amd64="lib64"
declare -x LIBDIR_amd64_fbsd="lib64"
declare -x LIBDIR_default="lib"
declare -x LIBDIR_ppc="lib32"
declare -x LIBDIR_ppc64="lib64"
declare -x LIBDIR_sparc32="lib32"
declare -x LIBDIR_sparc64="lib64"
declare -x LIBDIR_x86="lib32"
declare -x LIBDIR_x86_fbsd="lib32"
declare -x LIBGL_DRIVERS_PATH="/usr/lib64/dri:/usr/lib32/dri"
declare -x LIBOPTIONS="-m0644"
declare -x LIBREOFFICE_EXTENSIONS="nlpsolver pdfimport"
declare -x LICENSE="GPL-2"
declare -x LINGUAS="es"
declare -x MAIL="/var/mail/mateu"
declare -x MAKEOPTS="-j2"
declare -x MULTILIB_ABIS="amd64 x86"
declare -x MULTILIB_STRICT_DENY="64-bit.*shared object"
declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib"
declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage)"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OFFICE_IMPLEMENTATION="libreoffice"
declare -x OPENCL_PROFILE="amd"
declare -x OPENGL_PROFILE="xorg-x11"
declare -x PATH="/usr/lib64/portage/bin/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/avr/gcc-bin/4.4.5:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3:/opt/vmware/bin"
declare -- PAX_MARKINGS="PT"
declare PDEPEND=""
declare -x PHP_TARGETS=""
declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig"
declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")'
declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/nodejs-0.8.0/html")'
declare -x PORTAGE_SYNC_STALE="30"
declare -x PRELINK_PATH_MASK="/usr/lib64/libfreebl3.so:/usr/lib64/libnssdbm3.so:/usr/lib64/libsoftokn3.so:/opt/bin/skype"
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND"
declare -x PROPERTIES=""
declare -x PROVIDE=""
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -x PYTHONPATH="/usr/lib/portage/pym"
declare -- PYTHON_ABI="2.7"
declare -x PYTHON_ABIS=""
declare -- PYTHON_COLORS="1"
declare -- PYTHON_DEPEND="<<2>>"
declare -- PYTHON_ECLASS_API="0"
declare -- PYTHON_PKG_SETUP_EXECUTED="1"
declare -- PYTHON_REQUESTED_ACTIVE_VERSION="2"
declare -- PYTHON_SANITY_CHECKS_EXECUTED="1"
declare -x PYTHON_SINGLE_TARGET=""
declare -x PYTHON_TARGETS=""
declare -- PYTHON_TEST_VERBOSITY="1"
declare -x QEMU_SOFTMMU_TARGETS="i386 x86_64"
declare -x QEMU_USER_TARGETS="i386 x86_64"
declare -x QT_GRAPHICSSYSTEM="raster"
declare -x QT_IM_MODULE="ibus"
declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins"
declare RDEPEND=">=dev-lang/v8-3.11.10
	dev-libs/openssl =dev-lang/python-2*"
declare -x REPOSITORY="gentoo"
declare REQUIRED_USE=""
declare -x RESTRICT="test"
declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
declare -x RUBYOPT="-rauto_gem"
declare -x RUBY_TARGETS=""
declare -x S="/var/tmp/portage/net-libs/nodejs-0.8.0/work/node-v0.8.0"
declare -x SANDBOX_DEBUG="0"
declare -x SANDBOX_DENY=""
declare -x SANDBOX_PID="13463"
declare -x SANDBOX_PREDICT="/var/tmp/portage/net-libs/nodejs-0.8.0/homedir:/dev/crypto:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig"
declare -x SANDBOX_READ="/:/var/tmp"
declare -x SANDBOX_VERBOSE="1"
declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/cache/jython:/var/tmp:/var/tmp/:/var/tmp/portage/net-libs/nodejs-0.8.0/homedir/.bash_history"
declare -x SESSION_MANAGER="local/Boromir:@/tmp/.ICE-unix/8058,unix/Boromir:/tmp/.ICE-unix/8058"
declare -x SLOT="0"
declare SRC_URI="http://nodejs.org/dist/v0.8.0/node-v0.8.0.tar.gz"
declare -x STAGE1_USE="multilib nptl nptlonly unicode"
declare -x SYMLINK_LIB="yes"
declare -x SYNC_USER="root"
declare -x USE="abi_x86_64 amd64 elibc_glibc kernel_linux multilib userland_GNU"
declare -x USERLAND="GNU"
declare -x USERNAME="mateu"
declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
declare -x USE_EXPAND_UNPREFIXED="ARCH"
declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
declare -x USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin FreeBSD glibc HPUX Interix mintlib NetBSD OpenBSD SunOS uclibc Winnt"
declare -x USE_EXPAND_VALUES_KERNEL="AIX Cygwin Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt"
declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
declare -x VBOX_APP_HOME="/usr/lib64/virtualbox"
declare -x VIDEO_CARDS=""
declare -x WINDOWPATH="7"
declare -x XDG_CONFIG_DIRS="/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/gnome:/usr/local/share:/usr/share:/usr/share/gdm"
declare -x XDG_MENU_PREFIX="gnome-"
declare -x XDG_SESSION_COOKIE="9b707ed18102bbda67219dc000000e02-1364636571.752700-1945762621"
declare -x XMODIFIERS="@im=ibus"
declare -x XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
declare -a _CPYTHON2_GLOBALLY_SUPPORTED_ABIS='([0]="2.5" [1]="2.6" [2]="2.7")'
declare -a _CPYTHON3_GLOBALLY_SUPPORTED_ABIS='([0]="3.1" [1]="3.2" [2]="3.3" [3]="3.4")'
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -a _JYTHON_GLOBALLY_SUPPORTED_ABIS='([0]="2.5-jython" [1]="2.7-jython")'
declare -a _PYPY_GLOBALLY_SUPPORTED_ABIS='([0]="2.7-pypy-1.9" [1]="2.7-pypy-2.0")'
declare -- _PYTHON_ABI_EXTRACTION_COMMAND="import platform
import sys
sys.stdout.write(\".\".join(str(x) for x in sys.version_info[:2]))
if platform.system()[:4] == \"Java\":
	sys.stdout.write(\"-jython\")
elif hasattr(platform, \"python_implementation\") and platform.python_implementation() == \"PyPy\":
	sys.stdout.write(\"-pypy-\" + \".\".join(str(x) for x in sys.pypy_version_info[:2]))"
declare -- _PYTHON_ABI_PATTERN_REGEX="([[:alnum:]]|\\.|-|\\*|\\[|\\])+"
declare -- _PYTHON_DEPEND_CHECKS_CODE="return 0"
declare -- _PYTHON_ECLASS_INHERITED="1"
declare -a _PYTHON_ECLASS_SUPPORTED_APIS='([0]="0")'
declare -a _PYTHON_GLOBALLY_SUPPORTED_ABIS='([0]="2.5" [1]="2.6" [2]="2.7" [3]="3.1" [4]="3.2" [5]="3.3" [6]="3.4" [7]="2.5-jython" [8]="2.7-jython" [9]="2.7-pypy-1.9" [10]="2.7-pypy-2.0")'
declare -- _PYTHON_MULTILIB_LIBDIR="lib64"
declare -- _PYTHON_MULTILIB_LIBNAME=".so"
declare -- _PYTHON_SHEBANG_BASE_PART_REGEX="^#![[:space:]]*([^[:space:]]*/usr/bin/env[[:space:]]+)?([^[:space:]]*/)?(jython|pypy-c|python)"
declare -- _PYTHON_TOOLCHAIN_FUNCS_CC="x86_64-pc-linux-gnu-gcc"
declare -- _PYTHON_TOOLCHAIN_FUNCS_CPP="x86_64-pc-linux-gnu-cpp"
declare -- _PYTHON_TOOLCHAIN_FUNCS_CXX="x86_64-pc-linux-gnu-g++"
declare -- _PYTHON_USE_FLAGS_CHECKS_CODE=":"
declare -- ___ECLASS_ONCE_EUTILS="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_MULTILIB="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_PAX_UTILS="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_TOOLCHAIN_FUNCS="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_USER="recur -_+^+_- spank"
declare -- conf="nodejs-0.8.0-r0"
declare -- phase_func
declare -- version_components_group_regex="(2|3|\\*)(:([[:digit:]]+\\.[[:digit:]]+)?(:([[:digit:]]+\\.[[:digit:]]+)?)?)?"
PYTHON () 
{ 
    _python_check_python_pkg_setup_execution;
    local ABI_output="0" absolute_path_output="0" final_ABI="0" PYTHON_ABI="${PYTHON_ABI}" python_interpreter python2="0" python3="0";
    while (($#)); do
        case "$1" in 
            -2)
                python2="1"
            ;;
            -3)
                python3="1"
            ;;
            --ABI)
                ABI_output="1"
            ;;
            -a | --absolute-path)
                absolute_path_output="1"
            ;;
            -f | --final-ABI)
                final_ABI="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "${ABI_output}" == "1" && "${absolute_path_output}" == "1" ]]; then
        die "${FUNCNAME}(): '--ABI' and '--absolute-path' options cannot be specified simultaneously";
    fi;
    if [[ "$((${python2} + ${python3} + ${final_ABI}))" -gt 1 ]]; then
        die "${FUNCNAME}(): '-2', '-3' or '--final-ABI' options cannot be specified simultaneously";
    fi;
    if [[ "$#" -eq 0 ]]; then
        if [[ "${final_ABI}" == "1" ]]; then
            if ! _python_package_supporting_installation_for_multiple_python_abis; then
                die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
            fi;
            _python_calculate_PYTHON_ABIS;
            PYTHON_ABI="${PYTHON_ABIS##* }";
        else
            if [[ "${python2}" == "1" ]]; then
                PYTHON_ABI="$(ROOT="/" eselect python show --python2 --ABI)";
                if [[ -z "${PYTHON_ABI}" ]]; then
                    die "${FUNCNAME}(): Active version of CPython 2 not set";
                else
                    if [[ "${PYTHON_ABI}" != "2."* ]]; then
                        die "${FUNCNAME}(): Internal error in \`eselect python show --python2\`";
                    fi;
                fi;
            else
                if [[ "${python3}" == "1" ]]; then
                    PYTHON_ABI="$(ROOT="/" eselect python show --python3 --ABI)";
                    if [[ -z "${PYTHON_ABI}" ]]; then
                        die "${FUNCNAME}(): Active version of CPython 3 not set";
                    else
                        if [[ "${PYTHON_ABI}" != "3."* ]]; then
                            die "${FUNCNAME}(): Internal error in \`eselect python show --python3\`";
                        fi;
                    fi;
                else
                    if _python_package_supporting_installation_for_multiple_python_abis; then
                        if ! _python_abi-specific_local_scope; then
                            die "${FUNCNAME}() should be used in ABI-specific local scope";
                        fi;
                    else
                        PYTHON_ABI="$("${EPREFIX}/usr/bin/python" -c "${_PYTHON_ABI_EXTRACTION_COMMAND}")";
                        if [[ -z "${PYTHON_ABI}" ]]; then
                            die "${FUNCNAME}(): Failure of extraction of locally active version of Python";
                        fi;
                    fi;
                fi;
            fi;
        fi;
    else
        if [[ "$#" -eq 1 ]]; then
            if [[ "${final_ABI}" == "1" ]]; then
                die "${FUNCNAME}(): '--final-ABI' option and Python ABI cannot be specified simultaneously";
            fi;
            if [[ "${python2}" == "1" ]]; then
                die "${FUNCNAME}(): '-2' option and Python ABI cannot be specified simultaneously";
            fi;
            if [[ "${python3}" == "1" ]]; then
                die "${FUNCNAME}(): '-3' option and Python ABI cannot be specified simultaneously";
            fi;
            PYTHON_ABI="$1";
        else
            die "${FUNCNAME}(): Invalid usage";
        fi;
    fi;
    if [[ "${ABI_output}" == "1" ]]; then
        echo -n "${PYTHON_ABI}";
        return;
    else
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
            python_interpreter="python${PYTHON_ABI}";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
                python_interpreter="jython${PYTHON_ABI%-jython}";
            else
                if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                    python_interpreter="pypy-c${PYTHON_ABI#*-pypy-}";
                fi;
            fi;
        fi;
        if [[ "${absolute_path_output}" == "1" ]]; then
            echo -n "${EPREFIX}/usr/bin/${python_interpreter}";
        else
            echo -n "${python_interpreter}";
        fi;
    fi;
    if [[ -n "${ABI}" && "${ABI}" != "${DEFAULT_ABI}" && "${DEFAULT_ABI}" != "default" ]]; then
        echo -n "-${ABI}";
    fi
}
_assert_pkg_ebuild_phase () 
{ 
    case ${EBUILD_PHASE} in 
        setup | preinst | postinst)

        ;;
        *)
            eerror "'$1()' called from '${EBUILD_PHASE}' phase which is not OK:";
            eerror "You may only call from pkg_{setup,preinst,postinst} functions.";
            eerror "Package fails at QA and at life.  Please file a bug.";
            die "Bad package!  $1 is only for use in some pkg_* functions!"
        ;;
    esac
}
_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"
}
_iconins () 
{ 
    ( local funcname=$1;
    shift;
    local size dir;
    local context=apps;
    local theme=hicolor;
    while [[ $# -gt 0 ]]; do
        case $1 in 
            -s | --size)
                if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then
                    size=${2%%x*};
                else
                    size=${2};
                fi;
                case ${size} in 
                    16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256)
                        size=${size}x${size}
                    ;;
                    scalable)

                    ;;
                    *)
                        eerror "${size} is an unsupported icon size!";
                        exit 1
                    ;;
                esac;
                shift 2
            ;;
            -t | --theme)
                theme=${2};
                shift 2
            ;;
            -c | --context)
                context=${2};
                shift 2
            ;;
            *)
                if [[ -z ${size} ]]; then
                    insinto /usr/share/pixmaps;
                else
                    insinto /usr/share/icons/${theme}/${size}/${context};
                fi;
                if [[ ${funcname} == doicon ]]; then
                    if [[ -f $1 ]]; then
                        doins "${1}";
                    else
                        if [[ -d $1 ]]; then
                            shopt -s nullglob;
                            doins "${1}"/*.{png,svg};
                            shopt -u nullglob;
                        else
                            eerror "${1} is not a valid file/directory!";
                            exit 1;
                        fi;
                    fi;
                else
                    break;
                fi;
                shift 1
            ;;
        esac;
    done;
    if [[ ${funcname} == newicon ]]; then
        newins "$@";
    fi ) || die
}
_pax_list_files () 
{ 
    local f cmd;
    cmd=$1;
    shift;
    for f in "$@";
    do
        ${cmd} "     ${f}";
    done
}
_python_abi-specific_local_scope () 
{ 
    [[ " ${FUNCNAME[@]:2} " =~ " "(_python_final_sanity_checks|python_execute_function|python_mod_optimize|python_mod_cleanup)" " ]]
}
_python_calculate_PYTHON_ABIS () 
{ 
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_initial_sanity_checks;
    if has "${EAPI:-0}" 0 1 2 3 || { 
        has "${EAPI:-0}" 4 5 && has "${PYTHON_ECLASS_API}" 0
    }; then
        if [[ -z "${PYTHON_RESTRICTED_ABIS}" && -n "${RESTRICT_PYTHON_ABIS}" ]]; then
            PYTHON_RESTRICTED_ABIS="${RESTRICT_PYTHON_ABIS}";
        fi;
    else
        if [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then
            eerror "Use PYTHON_MULTIPLE_ABIS variable instead of SUPPORT_PYTHON_ABIS variable.";
            die "SUPPORT_PYTHON_ABIS variable is banned";
        fi;
        if [[ -n "${RESTRICT_PYTHON_ABIS}" ]]; then
            eerror "Use PYTHON_RESTRICTED_ABIS variable instead of RESTRICT_PYTHON_ABIS variable.";
            die "RESTRICT_PYTHON_ABIS variable is banned";
        fi;
    fi;
    if has "${EAPI:-0}" 0 1 2 3 4 5 && [[ "$(declare -p PYTHON_ABIS 2> /dev/null)" != "declare -x PYTHON_ABIS="* ]]; then
        local PYTHON_ABI;
        if [[ "$(declare -p USE_PYTHON 2> /dev/null)" == "declare -x USE_PYTHON="* ]]; then
            local cpython_enabled="0";
            if [[ -z "${USE_PYTHON}" ]]; then
                die "USE_PYTHON variable is empty";
            fi;
            for PYTHON_ABI in ${USE_PYTHON};
            do
                if ! has "${PYTHON_ABI}" "${_PYTHON_GLOBALLY_SUPPORTED_ABIS[@]}"; then
                    die "USE_PYTHON variable contains invalid value '${PYTHON_ABI}'";
                fi;
                if has "${PYTHON_ABI}" "${_CPYTHON2_GLOBALLY_SUPPORTED_ABIS[@]}" "${_CPYTHON3_GLOBALLY_SUPPORTED_ABIS[@]}"; then
                    cpython_enabled="1";
                fi;
                if ! _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${PYTHON_RESTRICTED_ABIS}"; then
                    export PYTHON_ABIS+="${PYTHON_ABIS:+ }${PYTHON_ABI}";
                fi;
            done;
            if [[ -z "${PYTHON_ABIS//[${IFS}]/}" ]]; then
                die "USE_PYTHON variable does not enable any Python ABI supported by ${CATEGORY}/${PF}";
            fi;
            if [[ "${cpython_enabled}" == "0" ]]; then
                die "USE_PYTHON variable does not enable any CPython ABI";
            fi;
        else
            local python_version python2_version python3_version support_python_major_version;
            if ! ROOT="/" has_version "dev-lang/python"; then
                die "${FUNCNAME}(): 'dev-lang/python' is not installed";
            fi;
            python_version="$("${EPREFIX}/usr/bin/python" -c 'from sys import version_info; print(".".join(str(x) for x in version_info[:2]))')";
            if ROOT="/" has_version "=dev-lang/python-2*"; then
                if [[ "$(readlink "${EPREFIX}/usr/bin/python2")" != "python2."* ]]; then
                    die "'${EPREFIX}/usr/bin/python2' is not valid symlink";
                fi;
                python2_version="$("${EPREFIX}/usr/bin/python2" -c 'from sys import version_info; print(".".join(str(x) for x in version_info[:2]))')";
                support_python_major_version="0";
                for PYTHON_ABI in "${_CPYTHON2_GLOBALLY_SUPPORTED_ABIS[@]}";
                do
                    if ! _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${PYTHON_RESTRICTED_ABIS}"; then
                        support_python_major_version="1";
                        break;
                    fi;
                done;
                if [[ "${support_python_major_version}" == "1" ]]; then
                    if _python_check_python_abi_matching --patterns-list "${python2_version}" "${PYTHON_RESTRICTED_ABIS}"; then
                        die "Active version of CPython 2 is not supported by ${CATEGORY}/${PF}";
                    fi;
                else
                    python2_version="";
                fi;
            fi;
            if ROOT="/" has_version "=dev-lang/python-3*"; then
                if [[ "$(readlink "${EPREFIX}/usr/bin/python3")" != "python3."* ]]; then
                    die "'${EPREFIX}/usr/bin/python3' is not valid symlink";
                fi;
                python3_version="$("${EPREFIX}/usr/bin/python3" -c 'from sys import version_info; print(".".join(str(x) for x in version_info[:2]))')";
                support_python_major_version="0";
                for PYTHON_ABI in "${_CPYTHON3_GLOBALLY_SUPPORTED_ABIS[@]}";
                do
                    if ! _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${PYTHON_RESTRICTED_ABIS}"; then
                        support_python_major_version="1";
                        break;
                    fi;
                done;
                if [[ "${support_python_major_version}" == "1" ]]; then
                    if _python_check_python_abi_matching --patterns-list "${python3_version}" "${PYTHON_RESTRICTED_ABIS}"; then
                        die "Active version of CPython 3 is not supported by ${CATEGORY}/${PF}";
                    fi;
                else
                    python3_version="";
                fi;
            fi;
            if [[ -z "${python2_version}" && -z "${python3_version}" ]]; then
                eerror "${CATEGORY}/${PF} requires at least one of the following packages:";
                for PYTHON_ABI in "${_CPYTHON2_GLOBALLY_SUPPORTED_ABIS[@]}" "${_CPYTHON3_GLOBALLY_SUPPORTED_ABIS[@]}";
                do
                    if ! _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${PYTHON_RESTRICTED_ABIS}"; then
                        eerror "    dev-lang/python:${PYTHON_ABI}";
                    fi;
                done;
                die "No supported version of CPython installed";
            fi;
            if [[ -n "${python2_version}" && "${python_version}" == "2."* && "${python_version}" != "${python2_version}" ]]; then
                eerror "Python wrapper is configured incorrectly or '${EPREFIX}/usr/bin/python2' symlink";
                eerror "is set incorrectly. Use \`eselect python\` to fix configuration.";
                die "Incorrect configuration of Python";
            fi;
            if [[ -n "${python3_version}" && "${python_version}" == "3."* && "${python_version}" != "${python3_version}" ]]; then
                eerror "Python wrapper is configured incorrectly or '${EPREFIX}/usr/bin/python3' symlink";
                eerror "is set incorrectly. Use \`eselect python\` to fix configuration.";
                die "Incorrect configuration of Python";
            fi;
            PYTHON_ABIS="${python2_version} ${python3_version}";
            PYTHON_ABIS="${PYTHON_ABIS# }";
            export PYTHON_ABIS="${PYTHON_ABIS% }";
        fi;
    fi;
    _python_final_sanity_checks
}
_python_check_python_abi_matching () 
{ 
    local pattern patterns patterns_list="0" PYTHON_ABI;
    while (($#)); do
        case "$1" in 
            --patterns-list)
                patterns_list="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "$#" -ne 2 ]]; then
        die "${FUNCNAME}() requires 2 arguments";
    fi;
    PYTHON_ABI="$1";
    if [[ "${patterns_list}" == "0" ]]; then
        pattern="$2";
        if [[ "${pattern}" == *"-cpython" ]]; then
            [[ "${PYTHON_ABI}" =~ ^[[:digit:]]+\.[[:digit:]]+$ && "${PYTHON_ABI}" == ${pattern%-cpython} ]];
        else
            if [[ "${pattern}" == *"-jython" ]]; then
                [[ "${PYTHON_ABI}" == ${pattern} ]];
            else
                if [[ "${pattern}" == *"-pypy-"* ]]; then
                    [[ "${PYTHON_ABI}" == ${pattern} ]];
                else
                    if [[ "${PYTHON_ABI}" =~ ^[[:digit:]]+\.[[:digit:]]+$ ]]; then
                        [[ "${PYTHON_ABI}" == ${pattern} ]];
                    else
                        if [[ "${PYTHON_ABI}" =~ ^[[:digit:]]+\.[[:digit:]]+-jython$ ]]; then
                            [[ "${PYTHON_ABI%-jython}" == ${pattern} ]];
                        else
                            if [[ "${PYTHON_ABI}" =~ ^[[:digit:]]+\.[[:digit:]]+-pypy-[[:digit:]]+\.[[:digit:]]+$ ]]; then
                                [[ "${PYTHON_ABI%-pypy-*}" == ${pattern} ]];
                            else
                                die "${FUNCNAME}(): Unrecognized Python ABI '${PYTHON_ABI}'";
                            fi;
                        fi;
                    fi;
                fi;
            fi;
        fi;
    else
        patterns="${2// /
}";
        while read pattern; do
            if _python_check_python_abi_matching "${PYTHON_ABI}" "${pattern}"; then
                return 0;
            fi;
        done <<< "${patterns}";
        return 1;
    fi
}
_python_check_python_pkg_setup_execution () 
{ 
    [[ " ${FUNCNAME[@]:1} " =~ " "(python_set_active_version|python_pkg_setup)" " ]] && return;
    if ! has "${EAPI:-0}" 0 1 2 3 && [[ -z "${PYTHON_PKG_SETUP_EXECUTED}" ]]; then
        die "python_pkg_setup() not called";
    fi
}
_python_check_run-time_dependency () 
{ 
    if has "${EAPI:-0}" 0 1 2 3 || { 
        has "${EAPI:-0}" 4 5 && has "${PYTHON_ECLASS_API}" 0
    }; then
        return 0;
    else
        if ! has "${EAPI:-0}" 4 5 && _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME} called illegally";
        fi;
        eval "${_PYTHON_DEPEND_CHECKS_CODE}";
        return 1;
    fi
}
_python_clean_compiled_modules () 
{ 
    _python_initialize_prefix_variables;
    _python_set_color_variables;
    [[ "${FUNCNAME[1]}" =~ ^(python_mod_optimize|python_mod_cleanup)$ ]] || die "${FUNCNAME}(): Invalid usage";
    local base_module_name compiled_file compiled_files=() dir path py_file root;
    root="${EROOT%/}";
    for path in "$@";
    do
        compiled_files=();
        if [[ -d "${path}" ]]; then
            while read -d '' -r compiled_file; do
                compiled_files+=("${compiled_file}");
            done < <(find "${path}" "(" -name "*.py[co]" -o -name "*\$py.class" ")" -print0);
            if [[ "${EBUILD_PHASE}" == "postrm" ]]; then
                find "${path}" -type d | sort -r | while read -r dir; do
                    if rmdir "${dir}" 2> /dev/null; then
                        echo "${_CYAN}<<< ${dir}${_NORMAL}";
                    fi;
                done;
            fi;
        else
            if [[ "${path}" == *.py ]]; then
                base_module_name="${path##*/}";
                base_module_name="${base_module_name%.py}";
                if [[ -d "${path%/*}/__pycache__" ]]; then
                    while read -d '' -r compiled_file; do
                        compiled_files+=("${compiled_file}");
                    done < <(find "${path%/*}/__pycache__" "(" -name "${base_module_name}.*.py[co]" -o -name "${base_module_name}\$py.class" ")" -print0);
                fi;
                compiled_files+=("${path}c" "${path}o" "${path%.py}\$py.class");
            fi;
        fi;
        for compiled_file in "${compiled_files[@]}";
        do
            [[ ! -f "${compiled_file}" ]] && continue;
            dir="${compiled_file%/*}";
            dir="${dir##*/}";
            if [[ "${compiled_file}" == *.py[co] ]]; then
                if [[ "${dir}" == "__pycache__" ]]; then
                    base_module_name="${compiled_file##*/}";
                    base_module_name="${base_module_name%.*py[co]}";
                    base_module_name="${base_module_name%.*}";
                    py_file="${compiled_file%__pycache__/*}${base_module_name}.py";
                else
                    py_file="${compiled_file%[co]}";
                fi;
                if [[ "${EBUILD_PHASE}" == "postinst" ]]; then
                    [[ -f "${py_file}" && "${compiled_file}" -nt "${py_file}" ]] && continue;
                else
                    [[ -f "${py_file}" ]] && continue;
                fi;
                echo "${_BLUE}<<< ${compiled_file%[co]}[co]${_NORMAL}";
                rm -f "${compiled_file%[co]}"[co];
            else
                if [[ "${compiled_file}" == *\$py.class ]]; then
                    if [[ "${dir}" == "__pycache__" ]]; then
                        base_module_name="${compiled_file##*/}";
                        base_module_name="${base_module_name%\$py.class}";
                        py_file="${compiled_file%__pycache__/*}${base_module_name}.py";
                    else
                        py_file="${compiled_file%\$py.class}.py";
                    fi;
                    if [[ "${EBUILD_PHASE}" == "postinst" ]]; then
                        [[ -f "${py_file}" && "${compiled_file}" -nt "${py_file}" ]] && continue;
                    else
                        [[ -f "${py_file}" ]] && continue;
                    fi;
                    echo "${_BLUE}<<< ${compiled_file}${_NORMAL}";
                    rm -f "${compiled_file}";
                else
                    die "${FUNCNAME}(): Unrecognized file type: '${compiled_file}'";
                fi;
            fi;
            dir="${compiled_file%/*}";
            while [[ "${dir}" != "${root}" ]]; do
                if rmdir "${dir}" 2> /dev/null; then
                    echo "${_CYAN}<<< ${dir}${_NORMAL}";
                else
                    break;
                fi;
                dir="${dir%/*}";
            done;
        done;
    done
}
_python_final_sanity_checks () 
{ 
    if ! _python_implementation && [[ "$(declare -p PYTHON_SANITY_CHECKS_EXECUTED 2> /dev/null)" != "declare -- PYTHON_SANITY_CHECKS_EXECUTED="* || " ${FUNCNAME[@]:1} " =~ " "(python_set_active_version|python_pkg_setup)" " && -z "${PYTHON_SKIP_SANITY_CHECKS}" ]]; then
        local iterated_PYTHON_ABIS PYTHON_ABI="${PYTHON_ABI}";
        if _python_package_supporting_installation_for_multiple_python_abis; then
            iterated_PYTHON_ABIS="${PYTHON_ABIS}";
        else
            iterated_PYTHON_ABIS="${PYTHON_ABI}";
        fi;
        for PYTHON_ABI in ${iterated_PYTHON_ABIS};
        do
            if has "${EAPI:-0}" 0 1 2 3 4 5 || { 
                ! has "${EAPI:-0}" 0 1 2 3 4 5 && ! _python_package_supporting_installation_for_multiple_python_abis
            }; then
                if ! ROOT="/" has_version "$(python_get_implementational_package)"; then
                    die "$(python_get_implementational_package) not installed in ROOT=\"/\"";
                fi;
                if [[ "${ROOT}" != "/" ]] && _python_check_run-time_dependency; then
                    if ! has_version "$(python_get_implementational_package)"; then
                        die "$(python_get_implementational_package) not installed in ROOT=\"${ROOT}\"";
                    fi;
                fi;
            else
                if ! type -p "${EPREFIX}$(PYTHON -a)" > /dev/null && ! ROOT="/" has_version "$(python_get_implementational_package)"; then
                    die "$(python_get_implementational_package) not installed in ROOT=\"/\"";
                fi;
            fi;
            if [[ "$(EPYTHON="$(PYTHON)" python -c "${_PYTHON_ABI_EXTRACTION_COMMAND}")" != "${PYTHON_ABI}" ]]; then
                eerror "Path to 'python':                 '$(type -p python)'";
                eerror "ABI:                              '${ABI}'";
                eerror "DEFAULT_ABI:                      '${DEFAULT_ABI}'";
                eerror "EPYTHON:                          '$(PYTHON)'";
                eerror "PYTHON_ABI:                       '${PYTHON_ABI}'";
                eerror "Locally active version of Python: '$(EPYTHON="$(PYTHON)" python -c "${_PYTHON_ABI_EXTRACTION_COMMAND}")'";
                die "'python' does not respect EPYTHON variable";
            fi;
        done;
    fi;
    PYTHON_SANITY_CHECKS_EXECUTED="1"
}
_python_get_implementation () 
{ 
    local ignore_invalid="0";
    while (($#)); do
        case "$1" in 
            --ignore-invalid)
                ignore_invalid="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "$#" -ne 1 ]]; then
        die "${FUNCNAME}() requires 1 argument";
    fi;
    if [[ "$1" =~ ^[[:digit:]]+\.[[:digit:]]+$ ]]; then
        echo "CPython";
    else
        if [[ "$1" =~ ^[[:digit:]]+\.[[:digit:]]+-jython$ ]]; then
            echo "Jython";
        else
            if [[ "$1" =~ ^[[:digit:]]+\.[[:digit:]]+-pypy-[[:digit:]]+\.[[:digit:]]+$ ]]; then
                echo "PyPy";
            else
                if [[ "${ignore_invalid}" == "0" ]]; then
                    die "${FUNCNAME}(): Unrecognized Python ABI '$1'";
                fi;
            fi;
        fi;
    fi
}
_python_implementation () 
{ 
    if [[ "${CATEGORY}/${PN}" == "dev-lang/python" ]]; then
        return 0;
    else
        if [[ "${CATEGORY}/${PN}" == "dev-lang/jython" ]]; then
            return 0;
        else
            if [[ "${CATEGORY}/${PN}" == "dev-python/pypy" ]]; then
                return 0;
            else
                return 1;
            fi;
        fi;
    fi
}
_python_initial_sanity_checks () 
{ 
    if [[ "$(declare -p PYTHON_SANITY_CHECKS_EXECUTED 2> /dev/null)" != "declare -- PYTHON_SANITY_CHECKS_EXECUTED="* || " ${FUNCNAME[@]:1} " =~ " "(python_set_active_version|python_pkg_setup)" " && -z "${PYTHON_SKIP_SANITY_CHECKS}" ]]; then
        if [[ "$(readlink "${EPREFIX}/usr/bin/python")" != "python-wrapper" ]]; then
            eerror "'${EPREFIX}/usr/bin/python' is not valid symlink.";
            eerror "Use \`eselect python set \${python_interpreter}\` to fix this problem.";
            die "'${EPREFIX}/usr/bin/python' is not valid symlink";
        fi;
        if [[ "$(<"${EPREFIX}/usr/bin/python-config")" != *"Gentoo python-config wrapper script"* ]]; then
            eerror "'${EPREFIX}/usr/bin/python-config' is not valid script";
            eerror "Use \`eselect python set \${python_interpreter}\` to fix this problem.";
            die "'${EPREFIX}/usr/bin/python-config' is not valid script";
        fi;
    fi
}
_python_initialize_prefix_variables () 
{ 
    if has "${EAPI:-0}" 0 1 2; then
        if [[ -n "${ROOT}" && -z "${EROOT}" ]]; then
            EROOT="${ROOT%/}${EPREFIX}/";
        fi;
        if [[ -n "${D}" && -z "${ED}" ]]; then
            ED="${D%/}${EPREFIX}/";
        fi;
    fi
}
_python_package_supporting_installation_for_multiple_python_abis () 
{ 
    if has "${EAPI:-0}" 0 1 2 3 || { 
        has "${EAPI:-0}" 4 5 && has "${PYTHON_ECLASS_API}" 0
    }; then
        if [[ -n "${PYTHON_MULTIPLE_ABIS}" || -n "${SUPPORT_PYTHON_ABIS}" ]]; then
            return 0;
        else
            return 1;
        fi;
    else
        if [[ -n "${PYTHON_MULTIPLE_ABIS}" ]]; then
            return 0;
        else
            return 1;
        fi;
    fi
}
_python_prepare_flags () 
{ 
    local array=() deleted_flag element flags new_value old_flag old_value operator pattern prefix variable;
    for variable in CPPFLAGS CFLAGS CXXFLAGS LDFLAGS;
    do
        eval "_PYTHON_SAVED_${variable}=\"\${!variable}\"";
        for prefix in PYTHON_USER_ PYTHON_;
        do
            if [[ "$(declare -p ${prefix}${variable} 2> /dev/null)" == "declare -a ${prefix}${variable}="* ]]; then
                eval "array=(\"\${${prefix}${variable}[@]}\")";
                for element in "${array[@]}";
                do
                    if [[ "${element}" =~ ^${_PYTHON_ABI_PATTERN_REGEX}\ (\+|-)\ .+ ]]; then
                        pattern="${element%% *}";
                        element="${element#* }";
                        operator="${element%% *}";
                        flags="${element#* }";
                        if _python_check_python_abi_matching "${PYTHON_ABI}" "${pattern}"; then
                            if [[ "${operator}" == "+" ]]; then
                                eval "export ${variable}+=\"\${variable:+ }${flags}\"";
                            else
                                if [[ "${operator}" == "-" ]]; then
                                    flags="${flags// /
}";
                                    old_value="${!variable// /
}";
                                    new_value="";
                                    while read old_flag; do
                                        while read deleted_flag; do
                                            if [[ "${old_flag}" == ${deleted_flag} ]]; then
                                                continue 2;
                                            fi;
                                        done <<< "${flags}";
                                        new_value+="${new_value:+ }${old_flag}";
                                    done <<< "${old_value}";
                                    eval "export ${variable}=\"\${new_value}\"";
                                fi;
                            fi;
                        fi;
                    else
                        die "Element '${element}' of ${prefix}${variable} array has invalid syntax";
                    fi;
                done;
            else
                if [[ -n "$(declare -p ${prefix}${variable} 2> /dev/null)" ]]; then
                    die "${prefix}${variable} should be indexed array";
                fi;
            fi;
        done;
    done
}
_python_prepare_jython () 
{ 
    local build_group build_user current_group current_user iterated_PYTHON_ABIS jython_version PYTHON_ABI="${PYTHON_ABI}";
    export JYTHON_SYSTEM_CACHEDIR="1";
    addwrite "${EPREFIX}/var/cache/jython";
    current_user="$(id -un)" || die "${FUNCNAME}(): Extraction of current user failed";
    current_group="$(id -gn)" || die "${FUNCNAME}(): Extraction of current group failed";
    if has "${EAPI:-0}" 5-progress && declare -f package_manager_build_user > /dev/null; then
        build_user="$(package_manager_build_user)" || die "${FUNCNAME}(): Extraction of build user failed";
        build_group="$(package_manager_build_group)" || die "${FUNCNAME}(): Extraction of build group failed";
    fi;
    if _python_package_supporting_installation_for_multiple_python_abis; then
        iterated_PYTHON_ABIS="${PYTHON_ABIS}";
    else
        iterated_PYTHON_ABIS="${PYTHON_ABI}";
    fi;
    for PYTHON_ABI in ${iterated_PYTHON_ABIS};
    do
        if has "${PYTHON_ABI}" "${_JYTHON_GLOBALLY_SUPPORTED_ABIS[@]}"; then
            jython_version="${PYTHON_ABI%-jython}";
            mkdir -p "${EPREFIX}/var/cache/jython/${jython_version}-${current_user}" || die "${FUNCNAME}(): Creation of '${EPREFIX}/var/cache/jython/${jython_version}-${current_user}' directory failed";
            chown -R "${current_user}:${current_group}" "${EPREFIX}/var/cache/jython/${jython_version}-${current_user}" || die "${FUNCNAME}(): Changing of owner and group of '${EPREFIX}/var/cache/jython/${jython_version}-${current_user}' directory to ${current_user}:${current_group} failed";
            if has "${EAPI:-0}" 5-progress && declare -f package_manager_build_user > /dev/null && [[ "${current_user}" != "${build_user}" ]]; then
                mkdir -p "${EPREFIX}/var/cache/jython/${jython_version}-${build_user}" || die "${FUNCNAME}(): Creation of '${EPREFIX}/var/cache/jython/${jython_version}-${build_user}' directory failed";
                chown -R "${build_user}:${build_group}" "${EPREFIX}/var/cache/jython/${jython_version}-${build_user}" || die "${FUNCNAME}(): Changing of owner and group of '${EPREFIX}/var/cache/jython/${jython_version}-${build_user}' directory to ${build_user}:${build_group} failed";
            fi;
        fi;
    done
}
_python_restore_flags () 
{ 
    local variable;
    for variable in CPPFLAGS CFLAGS CXXFLAGS LDFLAGS;
    do
        eval "${variable}=\"\${_PYTHON_SAVED_${variable}}\"";
        unset _PYTHON_SAVED_${variable};
    done
}
_python_set_color_variables () 
{ 
    if [[ "${PYTHON_COLORS}" != "0" && "${NOCOLOR:-false}" =~ ^(false|no)$ ]]; then
        _BOLD='[1m';
        _RED='[1;31m';
        _GREEN='[1;32m';
        _BLUE='[1;34m';
        _CYAN='[1;36m';
        _NORMAL='[0m';
    else
        _BOLD=;
        _RED=;
        _GREEN=;
        _BLUE=;
        _CYAN=;
        _NORMAL=;
    fi
}
_python_test_hook () 
{ 
    if [[ "$#" -ne 1 ]]; then
        die "${FUNCNAME}() requires 1 argument";
    fi;
    if _python_package_supporting_installation_for_multiple_python_abis && [[ "$(type -t "${_PYTHON_TEST_FUNCTION}_$1_hook")" == "function" ]]; then
        "${_PYTHON_TEST_FUNCTION}_$1_hook";
    fi
}
_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}");
    [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p "${!tuple}-${prog}");
    [[ -n ${search} ]] && prog=${search##*/};
    export ${var}=${prog};
    echo "${!var}"
}
built_with_use () 
{ 
    local hidden="no";
    if [[ $1 == "--hidden" ]]; then
        hidden="yes";
        shift;
    fi;
    local missing_action="die";
    if [[ $1 == "--missing" ]]; then
        missing_action=$2;
        shift;
        shift;
        case ${missing_action} in 
            true | false | die)

            ;;
            *)
                die "unknown action '${missing_action}'"
            ;;
        esac;
    fi;
    local opt=$1;
    [[ ${opt:0:1} = "-" ]] && shift || opt="-a";
    local PKG=$(best_version $1);
    [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
    shift;
    local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE;
    local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE;
    if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
        case ${missing_action} in 
            true)
                return 0
            ;;
            false)
                return 1
            ;;
            die)
                die "Unable to determine what USE flags $PKG was built with"
            ;;
        esac;
    fi;
    if [[ ${hidden} == "no" ]]; then
        local IUSE_BUILT=($(<"${IUSEFILE}"));
        local expand;
        for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
        do
            if [[ $1 == ${expand}_* ]]; then
                expand="";
                break;
            fi;
        done;
        if [[ -n ${expand} ]]; then
            if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
                case ${missing_action} in 
                    true)
                        return 0
                    ;;
                    false)
                        return 1
                    ;;
                    die)
                        die "$PKG does not actually support the $1 USE flag!"
                    ;;
                esac;
            fi;
        fi;
    fi;
    local USE_BUILT=$(<${USEFILE});
    while [[ $# -gt 0 ]]; do
        if [[ ${opt} = "-o" ]]; then
            has $1 ${USE_BUILT} && return 0;
        else
            has $1 ${USE_BUILT} || return 1;
        fi;
        shift;
    done;
    [[ ${opt} = "-a" ]]
}
check_license () 
{ 
    die "you no longer need this as portage supports ACCEPT_LICENSE itself"
}
doicon () 
{ 
    _iconins ${FUNCNAME} "$@"
}
domenu () 
{ 
    ( local i j ret=0;
    insinto /usr/share/applications;
    for i in "$@";
    do
        if [[ -f ${i} ]]; then
            doins "${i}";
            ((ret+=$?));
        else
            if [[ -d ${i} ]]; then
                for j in "${i}"/*.desktop;
                do
                    doins "${j}";
                    ((ret+=$?));
                done;
            else
                ((++ret));
            fi;
        fi;
    done;
    exit ${ret} )
}
ebeep () 
{ 
    ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org"
}
econf_build () 
{ 
    tc-env_build econf --build=${CBUILD:-${CHOST}} "$@"
}
ecvs_clean () 
{ 
    [[ -z $* ]] && set -- .;
    find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
    find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
}
edos2unix () 
{ 
    [[ $# -eq 0 ]] && return 0;
    sed -i 's/\r$//' -- "$@" || die
}
egetent () 
{ 
    local db=$1 key=$2;
    [[ $# -ge 3 ]] && die "usage: egetent <database> <key>";
    case ${db} in 
        passwd | group)

        ;;
        *)
            die "sorry, database '${db}' not yet supported; file a bug"
        ;;
    esac;
    case ${CHOST} in 
        *-darwin[678])
            case ${key} in 
                *[!0-9]*)
                    nidump ${db} . | awk -F: "(\$1 ~ /^${key}\$/) {print;exit;}"
                ;;
                *)
                    nidump ${db} . | awk -F: "(\$3 == ${key}) {print;exit;}"
                ;;
            esac
        ;;
        *-darwin*)
            local mykey;
            case ${db} in 
                passwd)
                    db="Users" mykey="UniqueID"
                ;;
                group)
                    db="Groups" mykey="PrimaryGroupID"
                ;;
            esac;
            case ${key} in 
                *[!0-9]*)
                    dscl . -read /${db}/${key} 2> /dev/null | grep RecordName
                ;;
                *)
                    dscl . -search /${db} ${mykey} ${key} 2> /dev/null
                ;;
            esac
        ;;
        *-freebsd* | *-dragonfly*)
            case ${db} in 
                passwd)
                    db="user"
                ;;
                *)

                ;;
            esac;
            local opts;
            if [[ ${key} == [[:digit:]]* ]]; then
                [[ ${db} == "user" ]] && opts="-u" || opts="-g";
            fi;
            pw show ${db} ${opts} "${key}" -q
        ;;
        *-netbsd* | *-openbsd*)
            grep "${key}:\*:" /etc/${db}
        ;;
        *)
            nscd -i "${db}" 2> /dev/null;
            getent "${db}" "${key}"
        ;;
    esac
}
egethome () 
{ 
    local pos;
    [[ $# -eq 1 ]] || die "usage: egethome <user>";
    case ${CHOST} in 
        *-darwin* | *-freebsd* | *-dragonfly*)
            pos=9
        ;;
        *)
            pos=6
        ;;
    esac;
    egetent passwd "$1" | cut -d: -f${pos}
}
egetshell () 
{ 
    local pos;
    [[ $# -eq 1 ]] || die "usage: egetshell <user>";
    case ${CHOST} in 
        *-darwin* | *-freebsd* | *-dragonfly*)
            pos=10
        ;;
        *)
            pos=7
        ;;
    esac;
    egetent passwd "$1" | cut -d: -f${pos}
}
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
}
enewgroup () 
{ 
    _assert_pkg_ebuild_phase ${FUNCNAME};
    local egroup=$1;
    shift;
    if [[ -z ${egroup} ]]; then
        eerror "No group specified !";
        die "Cannot call enewgroup without a group";
    fi;
    if [[ -n $(egetent group "${egroup}") ]]; then
        return 0;
    fi;
    einfo "Adding group '${egroup}' to your system ...";
    local egid=$1;
    shift;
    if [[ ! -z ${egid} ]]; then
        if [[ ${egid} -gt 0 ]]; then
            if [[ -n $(egetent group ${egid}) ]]; then
                egid="next available; requested gid taken";
            fi;
        else
            eerror "Groupid given but is not greater than 0 !";
            die "${egid} is not a valid GID";
        fi;
    else
        egid="next available";
    fi;
    einfo " - Groupid: ${egid}";
    if [[ $# -gt 0 ]]; then
        die "extra arguments no longer supported; please file a bug";
    fi;
    function _enewgroup_next_gid () 
    { 
        if [[ ${egid} == *[!0-9]* ]]; then
            for ((egid = 101; egid <= 999; egid++))
            do
                [[ -z $(egetent group ${egid}) ]] && break;
            done;
        fi
    };
    case ${CHOST} in 
        *-darwin*)
            _enewgroup_next_gid;
            dscl . create "/groups/${egroup}" gid ${egid};
            dscl . create "/groups/${egroup}" passwd '*'
        ;;
        *-freebsd* | *-dragonfly*)
            _enewgroup_next_gid;
            pw groupadd "${egroup}" -g ${egid} || die
        ;;
        *-netbsd*)
            _enewgroup_next_gid;
            groupadd -g ${egid} "${egroup}" || die
        ;;
        *)
            local opts;
            if [[ ${egid} == *[!0-9]* ]]; then
                opts="";
            else
                opts="-g ${egid}";
            fi;
            groupadd -r ${opts} "${egroup}" || die
        ;;
    esac
}
enewuser () 
{ 
    _assert_pkg_ebuild_phase ${FUNCNAME};
    local euser=$1;
    shift;
    if [[ -z ${euser} ]]; then
        eerror "No username specified !";
        die "Cannot call enewuser without a username";
    fi;
    if [[ -n $(egetent passwd "${euser}") ]]; then
        return 0;
    fi;
    einfo "Adding user '${euser}' to your system ...";
    local opts=();
    local euid=$1;
    shift;
    if [[ -n ${euid} && ${euid} != -1 ]]; then
        if [[ ${euid} -gt 0 ]]; then
            if [[ -n $(egetent passwd ${euid}) ]]; then
                euid="next";
            fi;
        else
            eerror "Userid given but is not greater than 0 !";
            die "${euid} is not a valid UID";
        fi;
    else
        euid="next";
    fi;
    if [[ ${euid} == "next" ]]; then
        for ((euid = 101; euid <= 999; euid++))
        do
            [[ -z $(egetent passwd ${euid}) ]] && break;
        done;
    fi;
    opts+=(-u ${euid});
    einfo " - Userid: ${euid}";
    local eshell=$1;
    shift;
    if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then
        if [[ ! -e ${ROOT}${eshell} ]]; then
            eerror "A shell was specified but it does not exist !";
            die "${eshell} does not exist in ${ROOT}";
        fi;
        if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then
            eerror "Do not specify ${eshell} yourself, use -1";
            die "Pass '-1' as the shell parameter";
        fi;
    else
        for eshell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null;
        do
            [[ -x ${ROOT}${eshell} ]] && break;
        done;
        if [[ ${eshell} == "/dev/null" ]]; then
            eerror "Unable to identify the shell to use, proceeding with userland default.";
            case ${USERLAND} in 
                GNU)
                    eshell="/bin/false"
                ;;
                BSD)
                    eshell="/sbin/nologin"
                ;;
                Darwin)
                    eshell="/usr/sbin/nologin"
                ;;
                *)
                    die "Unable to identify the default shell for userland ${USERLAND}"
                ;;
            esac;
        fi;
    fi;
    einfo " - Shell: ${eshell}";
    opts+=(-s "${eshell}");
    local ehome=$1;
    shift;
    if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then
        ehome="/dev/null";
    fi;
    einfo " - Home: ${ehome}";
    opts+=(-d "${ehome}");
    local egroups=$1;
    shift;
    local g egroups_arr;
    IFS="," read -r -a egroups_arr <<< "${egroups}";
    shift;
    if [[ ${#egroups_arr[@]} -gt 0 ]]; then
        local defgroup exgroups;
        for g in "${egroups_arr[@]}";
        do
            if [[ -z $(egetent group "${g}") ]]; then
                eerror "You must add group ${g} to the system first";
                die "${g} is not a valid GID";
            fi;
            if [[ -z ${defgroup} ]]; then
                defgroup=${g};
            else
                exgroups+=",${g}";
            fi;
        done;
        opts+=(-g "${defgroup}");
        if [[ ! -z ${exgroups} ]]; then
            opts+=(-G "${exgroups:1}");
        fi;
    fi;
    einfo " - Groups: ${egroups:-(none)}";
    if [[ $# -gt 0 ]]; then
        die "extra arguments no longer supported; please file a bug";
    else
        local comment="added by portage for ${PN}";
        opts+=(-c "${comment}");
        einfo " - GECOS: ${comment}";
    fi;
    case ${CHOST} in 
        *-darwin*)
            dscl . create "/users/${euser}" uid ${euid};
            dscl . create "/users/${euser}" shell "${eshell}";
            dscl . create "/users/${euser}" home "${ehome}";
            dscl . create "/users/${euser}" realname "added by portage for ${PN}";
            for g in "${egroups_arr[@]}";
            do
                dscl . merge "/groups/${g}" users "${euser}";
            done
        ;;
        *-freebsd* | *-dragonfly*)
            pw useradd "${euser}" "${opts[@]}" || die
        ;;
        *-netbsd*)
            useradd "${opts[@]}" "${euser}" || die
        ;;
        *-openbsd*)
            useradd -u ${euid} -s "${eshell}" -d "${ehome}" -g "${egroups}" "${euser}" || die
        ;;
        *)
            useradd -r "${opts[@]}" "${euser}" || die
        ;;
    esac;
    if [[ ! -e ${ROOT}/${ehome} ]]; then
        einfo " - Creating ${ehome} in ${ROOT}";
        mkdir -p "${ROOT}/${ehome}";
        chown "${euser}" "${ROOT}/${ehome}";
        chmod 755 "${ROOT}/${ehome}";
    fi
}
epatch () 
{ 
    function _epatch_draw_line () 
    { 
        [[ -z $1 ]] && set "$(printf "%65s" '')";
        echo "${1//?/=}"
    };
    unset P4CONFIG P4PORT P4USER;
    local EPATCH_OPTS=(${EPATCH_OPTS[*]});
    while [[ $# -gt 0 ]]; do
        case $1 in 
            -*)
                EPATCH_OPTS+=("$1")
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ $# -gt 1 ]]; then
        local m;
        for m in "$@";
        do
            epatch "${m}";
        done;
        return 0;
    fi;
    local SINGLE_PATCH="no";
    [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}";
    if [[ -f $1 ]]; then
        SINGLE_PATCH="yes";
        set -- "$1";
        local EPATCH_SUFFIX=$1;
    else
        if [[ -d $1 ]]; then
            set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
        else
            if [[ -f ${EPATCH_SOURCE}/$1 ]]; then
                epatch "${EPATCH_SOURCE}/$1";
                return $?;
            else
                [[ $# -ne 0 ]] && EPATCH_SOURCE=$1;
                echo;
                eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:";
                eerror;
                eerror "  ${EPATCH_SOURCE}";
                eerror "  ( ${EPATCH_SOURCE##*/} )";
                echo;
                die "Cannot find \$EPATCH_SOURCE!";
            fi;
        fi;
    fi;
    EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
    local PIPE_CMD;
    case ${EPATCH_SUFFIX##*\.} in 
        xz)
            PIPE_CMD="xz -dc"
        ;;
        lzma)
            PIPE_CMD="lzma -dc"
        ;;
        bz2)
            PIPE_CMD="bzip2 -dc"
        ;;
        gz | Z | z)
            PIPE_CMD="gzip -dc"
        ;;
        ZIP | zip)
            PIPE_CMD="unzip -p"
        ;;
        *)

        ;;
    esac;
    [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}";
    local x;
    for x in "$@";
    do
        [[ ! -f ${x} ]] && continue;
        local patchname=${x##*/};
        local a=${patchname#*_};
        a=${a%%_*};
        if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then
            continue;
        fi;
        if [[ -n ${EPATCH_EXCLUDE} ]]; then
            eshopts_push -o noglob;
            local ex;
            for ex in ${EPATCH_EXCLUDE};
            do
                if [[ ${patchname} == ${ex} ]]; then
                    eshopts_pop;
                    continue 2;
                fi;
            done;
            eshopts_pop;
        fi;
        if [[ ${SINGLE_PATCH} == "yes" ]]; then
            if [[ -n ${EPATCH_SINGLE_MSG} ]]; then
                einfo "${EPATCH_SINGLE_MSG}";
            else
                einfo "Applying ${patchname} ...";
            fi;
        else
            einfo "  ${patchname} ...";
        fi;
        local STDERR_TARGET="${T}/${patchname}.out";
        if [[ -e ${STDERR_TARGET} ]]; then
            STDERR_TARGET="${T}/${patchname}-$$.out";
        fi;
        printf "***** %s *****\nPWD: %s\n\n" "${patchname}" "${PWD}" > "${STDERR_TARGET}";
        local count=0;
        local PATCH_TARGET;
        if [[ -n ${PIPE_CMD} ]]; then
            PATCH_TARGET="${T}/$$.patch";
            echo "PIPE_COMMAND:  ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}";
            if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then
                echo;
                eerror "Could not extract patch!";
                count=5;
                break;
            fi;
        else
            PATCH_TARGET=${x};
        fi;
        local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
        if [[ -n ${abs_paths} ]]; then
            count=1;
            printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}";
        fi;
        local rel_paths=$(egrep -n '^[-+]{3} [^	]*[.][.]/' "${PATCH_TARGET}");
        if [[ -n ${rel_paths} ]]; then
            eqawarn "QA Notice: Your patch uses relative paths '../'.";
            eqawarn " In the future this will cause a failure.";
            eqawarn "${rel_paths}";
        fi;
        local patch_cmd;
        while [[ ${count} -lt 5 ]]; do
            patch_cmd="${BASH_ALIASES[patch]:-patch} -p${count} ${EPATCH_OPTS}";
            ( _epatch_draw_line "***** ${patchname} *****";
            echo;
            echo "PATCH COMMAND:  ${patch_cmd} < '${PATCH_TARGET}'";
            echo;
            _epatch_draw_line "***** ${patchname} *****";
            ${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1;
            ret=$?;
            echo;
            echo "patch program exited with status ${ret}";
            exit ${ret} ) >> "${STDERR_TARGET}";
            if [ $? -eq 0 ]; then
                ( _epatch_draw_line "***** ${patchname} *****";
                echo;
                echo "ACTUALLY APPLYING ${patchname} ...";
                echo;
                _epatch_draw_line "***** ${patchname} *****";
                ${patch_cmd} < "${PATCH_TARGET}" 2>&1;
                ret=$?;
                echo;
                echo "patch program exited with status ${ret}";
                exit ${ret} ) >> "${STDERR_TARGET}";
                if [ $? -ne 0 ]; then
                    echo;
                    eerror "A dry-run of patch command succeeded, but actually";
                    eerror "applying the patch failed!";
                    count=5;
                fi;
                break;
            fi;
            : $(( count++ ));
        done;
        if [[ -n ${PIPE_CMD} ]]; then
            rm -f "${PATCH_TARGET}";
        fi;
        if [[ ${count} -ge 5 ]]; then
            echo;
            eerror "Failed Patch: ${patchname} !";
            eerror " ( ${PATCH_TARGET} )";
            eerror;
            eerror "Include in your bugreport the contents of:";
            eerror;
            eerror "  ${STDERR_TARGET}";
            echo;
            die "Failed Patch: ${patchname}!";
        fi;
        rm -f "${STDERR_TARGET}";
        cat >> "${T}/epatch.log"  <<-EOF
PATCH: ${x}
CMD: ${patch_cmd}
PWD: ${PWD}

EOF

        eend 0;
    done;
    [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
    :
}
epatch_user () 
{ 
    [[ $# -ne 0 ]] && die "epatch_user takes no options";
    local applied="${T}/epatch_user.log";
    [[ -e ${applied} ]] && return 2;
    local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
    for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT}};
    do
        EPATCH_SOURCE=${base}/${CTARGET}/${check};
        [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check};
        [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check};
        if [[ -d ${EPATCH_SOURCE} ]]; then
            EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch;
            echo "${EPATCH_SOURCE}" > "${applied}";
            return 0;
        fi;
    done;
    echo "none" > "${applied}";
    return 1
}
epause () 
{ 
    ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org"
}
epunt_cxx () 
{ 
    local dir=$1;
    [[ -z ${dir} ]] && dir=${S};
    ebegin "Removing useless C++ checks";
    local f p any_found;
    while IFS= read -r -d '' f; do
        for p in "${PORTDIR}"/eclass/ELT-patches/nocxx/*.patch;
        do
            if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
                any_found=1;
                break;
            fi;
        done;
    done < <(find "${dir}" -name configure -print0);
    if [[ -z ${any_found} ]]; then
        eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
    fi;
    eend 0
}
esethome () 
{ 
    _assert_pkg_ebuild_phase ${FUNCNAME};
    local euser=$1;
    shift;
    if [[ -z ${euser} ]]; then
        eerror "No username specified !";
        die "Cannot call esethome without a username";
    fi;
    if [[ -z $(egetent passwd "${euser}") ]]; then
        ewarn "User does not exist, cannot set home dir -- skipping.";
        return 1;
    fi;
    local ehome=$1;
    shift;
    if [[ -z ${ehome} ]]; then
        eerror "No home directory specified !";
        die "Cannot call esethome without a home directory or '-1'";
    fi;
    if [[ ${ehome} == "-1" ]]; then
        ehome="/dev/null";
    fi;
    if [[ $(egethome "${euser}") == ${ehome} ]]; then
        return 0;
    fi;
    einfo "Updating home for user '${euser}' ...";
    einfo " - Home: ${ehome}";
    if [[ ! -e ${ROOT}/${ehome} ]]; then
        einfo " - Creating ${ehome} in ${ROOT}";
        mkdir -p "${ROOT}/${ehome}";
        chown "${euser}" "${ROOT}/${ehome}";
        chmod 755 "${ROOT}/${ehome}";
    fi;
    case ${CHOST} in 
        *-darwin*)
            dscl . change "/users/${euser}" home "${ehome}"
        ;;
        *-freebsd* | *-dragonfly*)
            pw usermod "${euser}" -d "${ehome}" && return 0;
            [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home";
            eerror "There was an error when attempting to update the home directory for ${euser}";
            eerror "Please update it manually on your system:";
            eerror "\t pw usermod \"${euser}\" -d \"${ehome}\""
        ;;
        *)
            usermod -d "${ehome}" "${euser}" && return 0;
            [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home";
            eerror "There was an error when attempting to update the home directory for ${euser}";
            eerror "Please update it manually on your system (as root):";
            eerror "\t usermod -d \"${ehome}\" \"${euser}\""
        ;;
    esac
}
eshopts_pop () 
{ 
    local s;
    estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
    if [[ ${s} == "shopt -"* ]]; then
        eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
    else
        set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
        set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
    fi
}
eshopts_push () 
{ 
    if [[ $1 == -[su] ]]; then
        estack_push eshopts "$(shopt -p)";
        [[ $# -eq 0 ]] && return 0;
        shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
    else
        estack_push eshopts $-;
        [[ $# -eq 0 ]] && return 0;
        set "$@" || die "${FUNCNAME}: bad options to set: $*";
    fi
}
estack_pop () 
{ 
    [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
    local __estack_name="__ESTACK_$1__";
    shift;
    local __estack_retvar=$1;
    shift;
    eval local __estack_i=\${#${__estack_name}\[@\]};
    [[ $(( --__estack_i )) -eq -1 ]] && return 1;
    if [[ -n ${__estack_retvar} ]]; then
        eval ${__estack_retvar}=\"\${${__estack_name}\[${__estack_i}\]}\";
    fi;
    eval unset ${__estack_name}\[${__estack_i}\]
}
estack_push () 
{ 
    [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments";
    local stack_name="__ESTACK_$1__";
    shift;
    eval ${stack_name}+=\( \"\$@\" \)
}
esvn_clean () 
{ 
    [[ -z $* ]] && set -- .;
    find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
}
eumask_pop () 
{ 
    [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options";
    local s;
    estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
    umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
}
eumask_push () 
{ 
    estack_push eumask "$(umask)";
    umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
}
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);
    return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]])
}
gcc-specs-now () 
{ 
    local directive;
    directive=$(gcc-specs-directive link_command);
    return $([[ "${directive/\{!nonow:}" != "${directive}" ]])
}
gcc-specs-pie () 
{ 
    local directive;
    directive=$(gcc-specs-directive cc1);
    return $([[ "${directive/\{!nopie:}" != "${directive}" ]])
}
gcc-specs-relro () 
{ 
    local directive;
    directive=$(gcc-specs-directive link_command);
    return $([[ "${directive/\{!norelro:}" != "${directive}" ]])
}
gcc-specs-ssp () 
{ 
    local directive;
    directive=$(gcc-specs-directive cc1);
    return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]])
}
gcc-specs-ssp-to-all () 
{ 
    local directive;
    directive=$(gcc-specs-directive cc1);
    return $([[ "${directive/\{!fno-stack-protector-all:}" != "${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;
    case ${CTARGET:-${CHOST}} in 
        *-darwin*)

        ;;
        *linux* | *-freebsd* | *-openbsd* | *-netbsd*)
            use prefix && return 0
        ;;
        *)
            return 0
        ;;
    esac;
    dodir /usr/${libdir};
    if [[ $1 == "-a" ]]; then
        auto=true;
        shift;
        dodir /${libdir};
    fi;
    output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 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 http://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_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 CONF_LIBDIR;
    if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
        echo ${CONF_LIBDIR_OVERRIDE};
    else
        get_abi_LIBDIR;
    fi
}
get_libname () 
{ 
    local libname;
    local ver=$1;
    case ${CHOST} in 
        *-cygwin | 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 
                *-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}"
}
has_multilib_profile () 
{ 
    [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
}
host-is-pax () 
{ 
    grep -qs ^PaX: /proc/self/status
}
in_iuse () 
{ 
    debug-print-function ${FUNCNAME} "${@}";
    [[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()";
    local flag=${1};
    local liuse=(${IUSE});
    has "${flag}" "${liuse[@]#[+-]}"
}
is_final_abi () 
{ 
    has_multilib_profile || return 0;
    set -- $(get_install_abis);
    local LAST_ABI=$#;
    [[ ${!LAST_ABI} == ${ABI} ]]
}
list-paxables () 
{ 
    file "$@" 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//'
}
make_desktop_entry () 
{ 
    [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable";
    local exec=${1};
    local name=${2:-${PN}};
    local icon=${3:-${PN}};
    local type=${4};
    local fields=${5};
    if [[ -z ${type} ]]; then
        local catmaj=${CATEGORY%%-*};
        local catmin=${CATEGORY##*-};
        case ${catmaj} in 
            app)
                case ${catmin} in 
                    accessibility)
                        type="Utility;Accessibility"
                    ;;
                    admin)
                        type=System
                    ;;
                    antivirus)
                        type=System
                    ;;
                    arch)
                        type="Utility;Archiving"
                    ;;
                    backup)
                        type="Utility;Archiving"
                    ;;
                    cdr)
                        type="AudioVideo;DiscBurning"
                    ;;
                    dicts)
                        type="Office;Dictionary"
                    ;;
                    doc)
                        type=Documentation
                    ;;
                    editors)
                        type="Utility;TextEditor"
                    ;;
                    emacs)
                        type="Development;TextEditor"
                    ;;
                    emulation)
                        type="System;Emulator"
                    ;;
                    laptop)
                        type="Settings;HardwareSettings"
                    ;;
                    office)
                        type=Office
                    ;;
                    pda)
                        type="Office;PDA"
                    ;;
                    vim)
                        type="Development;TextEditor"
                    ;;
                    xemacs)
                        type="Development;TextEditor"
                    ;;
                esac
            ;;
            dev)
                type="Development"
            ;;
            games)
                case ${catmin} in 
                    action | fps)
                        type=ActionGame
                    ;;
                    arcade)
                        type=ArcadeGame
                    ;;
                    board)
                        type=BoardGame
                    ;;
                    emulation)
                        type=Emulator
                    ;;
                    kids)
                        type=KidsGame
                    ;;
                    puzzle)
                        type=LogicGame
                    ;;
                    roguelike)
                        type=RolePlaying
                    ;;
                    rpg)
                        type=RolePlaying
                    ;;
                    simulation)
                        type=Simulation
                    ;;
                    sports)
                        type=SportsGame
                    ;;
                    strategy)
                        type=StrategyGame
                    ;;
                esac;
                type="Game;${type}"
            ;;
            gnome)
                type="Gnome;GTK"
            ;;
            kde)
                type="KDE;Qt"
            ;;
            mail)
                type="Network;Email"
            ;;
            media)
                case ${catmin} in 
                    gfx)
                        type=Graphics
                    ;;
                    *)
                        case ${catmin} in 
                            radio)
                                type=Tuner
                            ;;
                            sound)
                                type=Audio
                            ;;
                            tv)
                                type=TV
                            ;;
                            video)
                                type=Video
                            ;;
                        esac;
                        type="AudioVideo;${type}"
                    ;;
                esac
            ;;
            net)
                case ${catmin} in 
                    dialup)
                        type=Dialup
                    ;;
                    ftp)
                        type=FileTransfer
                    ;;
                    im)
                        type=InstantMessaging
                    ;;
                    irc)
                        type=IRCClient
                    ;;
                    mail)
                        type=Email
                    ;;
                    news)
                        type=News
                    ;;
                    nntp)
                        type=News
                    ;;
                    p2p)
                        type=FileTransfer
                    ;;
                    voip)
                        type=Telephony
                    ;;
                esac;
                type="Network;${type}"
            ;;
            sci)
                case ${catmin} in 
                    astro*)
                        type=Astronomy
                    ;;
                    bio*)
                        type=Biology
                    ;;
                    calc*)
                        type=Calculator
                    ;;
                    chem*)
                        type=Chemistry
                    ;;
                    elec*)
                        type=Electronics
                    ;;
                    geo*)
                        type=Geology
                    ;;
                    math*)
                        type=Math
                    ;;
                    physics)
                        type=Physics
                    ;;
                    visual*)
                        type=DataVisualization
                    ;;
                esac;
                type="Education;Science;${type}"
            ;;
            sys)
                type="System"
            ;;
            www)
                case ${catmin} in 
                    client)
                        type=WebBrowser
                    ;;
                esac;
                type="Network;${type}"
            ;;
            *)
                type=
            ;;
        esac;
    fi;
    if [ "${SLOT}" == "0" ]; then
        local desktop_name="${PN}";
    else
        local desktop_name="${PN}-${SLOT}";
    fi;
    local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
    type=${type%;}${type:+;};
    eshopts_push -s extglob;
    if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
        ewarn "As described in the Icon Theme Specification, icon file extensions are not";
        ewarn "allowed in .desktop files if the value is not an absolute path.";
        icon=${icon%.@(xpm|png|svg)};
    fi;
    eshopts_pop;
    cat > "${desktop}"  <<-EOF
[Desktop Entry]
Name=${name}
Type=Application
Comment=${DESCRIPTION}
Exec=${exec}
TryExec=${exec%% *}
Icon=${icon}
Categories=${type}
EOF

    if [[ ${fields:-=} != *=* ]]; then
        ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
        fields="Path=${fields}";
    fi;
    [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
    ( insinto /usr/share/applications;
    doins "${desktop}" ) || die "installing desktop file failed"
}
make_session_desktop () 
{ 
    [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
    [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
    local title=$1;
    local command=$2;
    local desktop=${T}/${wm:-${PN}}.desktop;
    shift 2;
    cat > "${desktop}"  <<-EOF
[Desktop Entry]
Name=${title}
Comment=This session logs you into ${title}
Exec=${command} $*
TryExec=${command}
Type=XSession
EOF

    ( insinto /usr/share/xsessions;
    doins "${desktop}" )
}
make_wrapper () 
{ 
    local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
    local tmpwrapper=$(emktemp);
    ( echo '#!/bin/sh';
    [[ -n ${chdir} ]] && printf 'cd "%s"\n' "${chdir}";
    if [[ -n ${libdir} ]]; then
        cat  <<-EOF
if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
else
export LD_LIBRARY_PATH="${libdir}"
fi
EOF

    fi
    printf 'exec %s "$@"\n' "${bin}" ) > "${tmpwrapper}";
    chmod go+rx "${tmpwrapper}";
    if [[ -n ${path} ]]; then
        ( exeinto "${path}";
        newexe "${tmpwrapper}" "${wrapper}" ) || die;
    else
        newbin "${tmpwrapper}" "${wrapper}" || die;
    fi
}
multilib_env () 
{ 
    local CTARGET=${1:-${CTARGET}};
    case ${CTARGET} in 
        x86_64*)
            export CFLAGS_x86=${CFLAGS_x86--m32};
            export CHOST_x86=${CTARGET/x86_64/i686};
            CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
            export CTARGET_x86=${CHOST_x86};
            if [[ ${SYMLINK_LIB} == "yes" ]]; then
                export LIBDIR_x86="lib32";
            else
                export LIBDIR_x86="lib";
            fi;
            export CFLAGS_amd64=${CFLAGS_amd64--m64};
            export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
            export CTARGET_amd64=${CHOST_amd64};
            export LIBDIR_amd64="lib64";
            export CFLAGS_x32=${CFLAGS_x32--mx32};
            export CHOST_x32=${CTARGET/%-gnu/-gnux32};
            export CTARGET_x32=${CHOST_x32};
            export LIBDIR_x32="libx32";
            case ${CTARGET} in 
                *-gnux32)
                    : ${MULTILIB_ABIS=x32 amd64 x86};
                    : ${DEFAULT_ABI=x32}
                ;;
                *)
                    : ${MULTILIB_ABIS=amd64 x86};
                    : ${DEFAULT_ABI=amd64}
                ;;
            esac
        ;;
        mips64*)
            export CFLAGS_o32=${CFLAGS_o32--mabi=32};
            export CHOST_o32=${CTARGET/mips64/mips};
            export CTARGET_o32=${CHOST_o32};
            export LIBDIR_o32="lib";
            export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
            export CHOST_n32=${CTARGET};
            export CTARGET_n32=${CHOST_n32};
            export LIBDIR_n32="lib32";
            export CFLAGS_n64=${CFLAGS_n64--mabi=64};
            export CHOST_n64=${CTARGET};
            export CTARGET_n64=${CHOST_n64};
            export LIBDIR_n64="lib64";
            : ${MULTILIB_ABIS=n64 n32 o32};
            : ${DEFAULT_ABI=n32}
        ;;
        powerpc64*)
            export CFLAGS_ppc=${CFLAGS_ppc--m32};
            export CHOST_ppc=${CTARGET/powerpc64/powerpc};
            export CTARGET_ppc=${CHOST_ppc};
            export LIBDIR_ppc="lib";
            export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
            export CHOST_ppc64=${CTARGET};
            export CTARGET_ppc64=${CHOST_ppc64};
            export LIBDIR_ppc64="lib64";
            : ${MULTILIB_ABIS=ppc64 ppc};
            : ${DEFAULT_ABI=ppc64}
        ;;
        s390x*)
            export CFLAGS_s390=${CFLAGS_s390--m31};
            export CHOST_s390=${CTARGET/s390x/s390};
            export CTARGET_s390=${CHOST_s390};
            export LIBDIR_s390="lib";
            export CFLAGS_s390x=${CFLAGS_s390x--m64};
            export CHOST_s390x=${CTARGET};
            export CTARGET_s390x=${CHOST_s390x};
            export LIBDIR_s390x="lib64";
            : ${MULTILIB_ABIS=s390x s390};
            : ${DEFAULT_ABI=s390x}
        ;;
        sparc64*)
            export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
            export CHOST_sparc32=${CTARGET/sparc64/sparc};
            export CTARGET_sparc32=${CHOST_sparc32};
            export LIBDIR_sparc32="lib";
            export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
            export CHOST_sparc64=${CTARGET};
            export CTARGET_sparc64=${CHOST_sparc64};
            export LIBDIR_sparc64="lib64";
            : ${MULTILIB_ABIS=sparc64 sparc32};
            : ${DEFAULT_ABI=sparc64}
        ;;
        *)
            : ${MULTILIB_ABIS=default};
            : ${DEFAULT_ABI=default}
        ;;
    esac;
    export MULTILIB_ABIS DEFAULT_ABI
}
multilib_toolchain_setup () 
{ 
    local v vv;
    export ABI=$1;
    if [[ ${__DEFAULT_ABI_SAVED} == "true" ]]; then
        for v in CHOST CBUILD AS CC CXX LD PKG_CONFIG_{LIBDIR,PATH};
        do
            vv="__abi_saved_${v}";
            export ${v}="${!vv}";
            unset ${vv};
        done;
        unset __DEFAULT_ABI_SAVED;
    fi;
    if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
        for v in CHOST CBUILD AS CC CXX LD PKG_CONFIG_{LIBDIR,PATH};
        do
            export __abi_saved_${v}="${!v}";
        done;
        export __DEFAULT_ABI_SAVED="true";
        export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
        export CC="$(tc-getCC) $(get_abi_CFLAGS)";
        export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
        export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
        export CHOST=$(get_abi_CHOST $1);
        export CBUILD=$(get_abi_CHOST $1);
        export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
        export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
    fi
}
newicon () 
{ 
    _iconins ${FUNCNAME} "$@"
}
newmenu () 
{ 
    ( insinto /usr/share/applications;
    newins "$@" )
}
number_abis () 
{ 
    set -- `get_install_abis`;
    echo $#
}
path_exists () 
{ 
    local opt=$1;
    [[ ${opt} == -[ao] ]] && shift || opt="-a";
    [[ $# -eq 0 ]] && return 1;
    local p r=0;
    for p in "$@";
    do
        [[ -e ${p} ]];
        : $(( r += $? ));
    done;
    case ${opt} in 
        -a)
            return $(( r != 0 ))
        ;;
        -o)
            return $(( r == $# ))
        ;;
    esac
}
pax-mark () 
{ 
    local f flags fail=0 failures="" zero_load_alignment;
    flags=${1//-};
    shift;
    if type -p paxctl > /dev/null && has PT ${PAX_MARKINGS}; then
        einfo "PT PaX marking -${flags}";
        _pax_list_files einfo "$@";
        for f in "$@";
        do
            paxctl -q${flags} "${f}" && continue;
            paxctl -qc${flags} "${f}" && continue;
            paxctl -qC${flags} "${f}" && continue;
            fail=1;
            failures="${failures} ${f}";
        done;
    else
        if type -p scanelf > /dev/null && [[ ${PAX_MARKINGS} != "none" ]]; then
            einfo "Fallback PaX marking -${flags}";
            _pax_list_files einfo "$@";
            scanelf -Xxz ${flags} "$@";
        else
            if [[ ${PAX_MARKINGS} != "none" ]]; then
                failures="$*";
                fail=1;
            fi;
        fi;
    fi;
    if [[ ${fail} == 1 ]]; then
        ewarn "Failed to set PaX markings -${flags} for:";
        _pax_list_files ewarn ${failures};
        ewarn "Executables may be killed by PaX kernels.";
    fi;
    return ${fail}
}
pkg_nofetch () 
{ 
    __eapi0_pkg_nofetch "$@"
}
pkg_setup () 
{ 
    python_set_active_version 2;
    python_pkg_setup
}
preserve_old_lib () 
{ 
    if [[ ${EBUILD_PHASE} != "preinst" ]]; then
        eerror "preserve_old_lib() must be called from pkg_preinst() only";
        die "Invalid preserve_old_lib() usage";
    fi;
    [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
    has preserve-libs ${FEATURES} && return 0;
    local lib dir;
    for lib in "$@";
    do
        [[ -e ${ROOT}/${lib} ]] || continue;
        dir=${lib%/*};
        dodir ${dir} || die "dodir ${dir} failed";
        cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed";
        touch "${D}"/${lib};
    done
}
preserve_old_lib_notify () 
{ 
    if [[ ${EBUILD_PHASE} != "postinst" ]]; then
        eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
        die "Invalid preserve_old_lib_notify() usage";
    fi;
    has preserve-libs ${FEATURES} && return 0;
    local lib notice=0;
    for lib in "$@";
    do
        [[ -e ${ROOT}/${lib} ]] || continue;
        if [[ ${notice} -eq 0 ]]; then
            notice=1;
            ewarn "Old versions of installed libraries were detected on your system.";
            ewarn "In order to avoid breaking packages that depend on these old libs,";
            ewarn "the libraries are not being removed.  You need to run revdep-rebuild";
            ewarn "in order to remove these old dependencies.  If you do not have this";
            ewarn "helper program, simply emerge the 'gentoolkit' package.";
            ewarn;
        fi;
        ewarn "  # revdep-rebuild --library '${lib}' && rm '${lib}'";
    done
}
prune_libtool_files () 
{ 
    debug-print-function ${FUNCNAME} "$@";
    local removing_all removing_modules opt;
    for opt in "$@";
    do
        case "${opt}" in 
            --all)
                removing_all=1;
                removing_modules=1
            ;;
            --modules)
                removing_modules=1
            ;;
            *)
                die "Invalid argument to ${FUNCNAME}(): ${opt}"
            ;;
        esac;
    done;
    local f;
    local queue=();
    while IFS= read -r -d '' f; do
        local archivefile=${f/%.la/.a};
        [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
        local reason pkgconfig_scanned;
        if grep -q '^shouldnotlink=yes$' "${f}"; then
            if [[ -f ${archivefile} ]]; then
                einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
                queue+=("${archivefile}");
            fi;
            if [[ -n ${removing_modules} ]]; then
                reason='module';
            fi;
        else
            if [[ -n ${removing_all} ]]; then
                reason='requested';
            else
                if [[ ! -f ${archivefile} ]]; then
                    reason='no static archive';
                else
                    if [[ ! -n $(sed -nre 				"s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" 				"${f}") ]]; then
                        reason='no libs & flags';
                    else
                        if [[ ! -n ${pkgconfig_scanned} ]]; then
                            local pc_libs=();
                            if [[ ! -n ${removing_all} ]]; then
                                local pc;
                                local tf=${T}/prune-lt-files.pc;
                                local pkgconf=$(tc-getPKG_CONFIG);
                                while IFS= read -r -d '' pc; do
                                    local arg libs;
                                    if ${pkgconf} --exists "${pc}" &>/dev/null; then
                                        sed -e '/^Requires:/d' "${pc}" > "${tf}";
                                        libs=$(${pkgconf} --libs "${tf}");
                                    else
                                        libs=$(sed -ne 's/^Libs://p' "${pc}");
                                    fi;
                                    for arg in ${libs};
                                    do
                                        if [[ ${arg} == -l* ]]; then
                                            if [[ ${arg} == '*$*' ]]; then
                                                eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
                                                eqawarn "(arg: ${arg})";
                                                eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
                                            fi;
                                            pc_libs+=(lib${arg#-l}.la);
                                        fi;
                                    done;
                                done < <(find "${D}" -type f -name '*.pc' -print0);
                                rm -f "${tf}";
                            fi;
                            pkgconfig_scanned=1;
                        fi;
                        has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
                    fi;
                fi;
            fi;
        fi;
        if [[ -n ${reason} ]]; then
            einfo "Removing unnecessary ${f#${D%/}} (${reason})";
            queue+=("${f}");
        fi;
    done < <(find "${D}" -xtype f -name '*.la' -print0);
    if [[ -n ${queue[@]} ]]; then
        rm -f "${queue[@]}";
    fi
}
python_abi_depend () 
{ 
    local atom atom_index atoms=() exclude_ABIs="0" excluded_ABIs include_ABIs="0" included_ABIs PYTHON_ABI USE_dependencies USE_flag USE_flag_index USE_flags=();
    if has "${EAPI:-0}" 0 1 2 3 4 5; then
        die "${FUNCNAME}() cannot be used in this EAPI";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    while (($#)); do
        case "$1" in 
            -e | --exclude-ABIs)
                exclude_ABIs="1";
                excluded_ABIs="$2";
                shift
            ;;
            -i | --include-ABIs)
                include_ABIs="1";
                included_ABIs="$2";
                shift
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "${exclude_ABIs}" == "1" && "${include_ABIs}" == "1" ]]; then
        die "${FUNCNAME}(): '--exclude-ABIs' and '--include-ABIs' options cannot be specified simultaneously";
    fi;
    if [[ "$#" -eq 0 ]]; then
        die "${FUNCNAME}(): Missing dependency atoms";
    fi;
    atoms=("$@");
    if [[ "${exclude_ABIs}" == "0" && "${include_ABIs}" == "0" ]]; then
        USE_dependencies="$(printf ",python_abis_%s?" "${_PYTHON_LOCALLY_SUPPORTED_ABIS[@]}")";
        USE_dependencies="${USE_dependencies#,}";
        for atom_index in "${!atoms[@]}";
        do
            atom="${atoms[${atom_index}]}";
            if [[ "${atom}" == *"["*"]" ]]; then
                echo -n "${atom%]},";
            else
                echo -n "${atom}[";
            fi;
            echo -n "${USE_dependencies}]";
            if [[ "${atom_index}" -ne $((${#atoms[@]} - 1)) ]]; then
                echo -n " ";
            fi;
        done;
    else
        if [[ "${exclude_ABIs}" == "1" ]]; then
            for PYTHON_ABI in "${_PYTHON_LOCALLY_SUPPORTED_ABIS[@]}";
            do
                if ! _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${excluded_ABIs}"; then
                    USE_flags+=("python_abis_${PYTHON_ABI}");
                fi;
            done;
            if [[ "${#USE_flags[@]}" -eq 0 ]]; then
                ewarn "'${EBUILD}':";
                ewarn "${FUNCNAME}(): Python ABIs patterns list '${excluded_ABIs}' excludes all locally supported Python ABIs";
            else
                if [[ "${#USE_flags[@]}" -eq "${#_PYTHON_LOCALLY_SUPPORTED_ABIS[@]}" ]]; then
                    ewarn "'${EBUILD}':";
                    ewarn "${FUNCNAME}(): Python ABIs patterns list '${excluded_ABIs}' excludes no locally supported Python ABIs";
                fi;
            fi;
        else
            if [[ "${include_ABIs}" == "1" ]]; then
                for PYTHON_ABI in "${_PYTHON_LOCALLY_SUPPORTED_ABIS[@]}";
                do
                    if _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${included_ABIs}"; then
                        USE_flags+=("python_abis_${PYTHON_ABI}");
                    fi;
                done;
                if [[ "${#USE_flags[@]}" -eq 0 ]]; then
                    ewarn "'${EBUILD}':";
                    ewarn "${FUNCNAME}(): Python ABIs patterns list '${included_ABIs}' includes no locally supported Python ABIs";
                else
                    if [[ "${#USE_flags[@]}" -eq "${#_PYTHON_LOCALLY_SUPPORTED_ABIS[@]}" ]]; then
                        ewarn "'${EBUILD}':";
                        ewarn "${FUNCNAME}(): Python ABIs patterns list '${included_ABIs}' includes all locally supported Python ABIs";
                    fi;
                fi;
            else
                die "${FUNCNAME}(): Internal error";
            fi;
        fi;
        if [[ "${#USE_flags[@]}" -gt 1 ]]; then
            echo -n "( ";
        fi;
        for USE_flag_index in "${!USE_flags[@]}";
        do
            USE_flag="${USE_flags[${USE_flag_index}]}";
            USE_dependencies="${USE_flag}";
            echo -n "${USE_flag}? ( ";
            for atom_index in "${!atoms[@]}";
            do
                atom="${atoms[${atom_index}]}";
                if [[ "${atom}" == *"["*"]" ]]; then
                    echo -n "${atom%]},";
                else
                    echo -n "${atom}[";
                fi;
                echo -n "${USE_dependencies}]";
                if [[ "${atom_index}" -ne $((${#atoms[@]} - 1)) ]]; then
                    echo -n " ";
                fi;
            done;
            echo -n " )";
            if [[ "${USE_flag_index}" -ne $((${#USE_flags[@]} - 1)) ]]; then
                echo -n " ";
            fi;
        done;
        if [[ "${#USE_flags[@]}" -gt 1 ]]; then
            echo -n " )";
        fi;
    fi
}
python_clean_installation_image () 
{ 
    if [[ "${EBUILD_PHASE}" != "install" ]]; then
        die "${FUNCNAME}() can be used only in src_install() phase";
    fi;
    _python_check_python_pkg_setup_execution;
    _python_initialize_prefix_variables;
    local file files=() quiet="0";
    while (($#)); do
        case "$1" in 
            -q | --quiet)
                quiet="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    while read -d '' -r file; do
        files+=("${file}");
    done < <(find "${ED}" "(" -name "*.py[co]" -o -name "*\$py.class" ")" -type f -print0);
    if [[ "${#files[@]}" -gt 0 ]]; then
        if [[ "${quiet}" == "0" ]]; then
            ewarn "Deleting byte-compiled Python modules needlessly generated by build system:";
        fi;
        for file in "${files[@]}";
        do
            if [[ "${quiet}" == "0" ]]; then
                ewarn " ${file}";
            fi;
            rm -f "${file}";
            if [[ "${file%/*}" == *"/__pycache__" ]]; then
                rmdir "${file%/*}" 2> /dev/null;
            fi;
        done;
    fi;
    function python_clean_sitedirs () 
    { 
        if [[ -d "${ED}$(python_get_sitedir)" ]]; then
            find "${ED}$(python_get_sitedir)" "(" -name "*.c" -o -name "*.h" -o -name "*.la" ")" -type f -print0 | xargs -0 rm -f;
        fi
    };
    if _python_package_supporting_installation_for_multiple_python_abis; then
        python_execute_function -q python_clean_sitedirs;
    else
        python_clean_sitedirs;
    fi;
    unset -f python_clean_sitedirs
}
python_clean_py-compile_files () 
{ 
    _python_check_python_pkg_setup_execution;
    local file files=() quiet="0";
    while (($#)); do
        case "$1" in 
            -q | --quiet)
                quiet="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    while read -d '' -r file; do
        files+=("${file#./}");
    done < <(find -name py-compile -type f -print0);
    for file in "${files[@]}";
    do
        if [[ "${quiet}" == "0" ]]; then
            einfo "Cleaning '${file}' file";
        fi;
        echo "#!/bin/sh" > "${file}";
    done
}
python_convert_shebangs () 
{ 
    _python_check_python_pkg_setup_execution;
    local argument file files=() only_executables="0" python_interpreter quiet="0" recursive="0" shebangs_converted="0";
    while (($#)); do
        case "$1" in 
            -r | --recursive)
                recursive="1"
            ;;
            -q | --quiet)
                quiet="1"
            ;;
            -x | --only-executables)
                only_executables="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "$#" -eq 0 ]]; then
        die "${FUNCNAME}(): Missing Python version and files or directories";
    else
        if [[ "$#" -eq 1 ]]; then
            die "${FUNCNAME}(): Missing files or directories";
        fi;
    fi;
    if [[ -n "$(_python_get_implementation --ignore-invalid "$1")" ]]; then
        python_interpreter="$(PYTHON "$1")";
    else
        python_interpreter="python$1";
    fi;
    shift;
    for argument in "$@";
    do
        if [[ ! -e "${argument}" ]]; then
            die "${FUNCNAME}(): '${argument}' does not exist";
        else
            if [[ -f "${argument}" ]]; then
                files+=("${argument}");
            else
                if [[ -d "${argument}" ]]; then
                    if [[ "${recursive}" == "1" ]]; then
                        while read -d '' -r file; do
                            files+=("${file}");
                        done < <(find "${argument}" $([[ "${only_executables}" == "1" ]] && echo -perm /111) -type f -print0);
                    else
                        die "${FUNCNAME}(): '${argument}' is not a regular file";
                    fi;
                else
                    die "${FUNCNAME}(): '${argument}' is not a regular file or a directory";
                fi;
            fi;
        fi;
    done;
    for file in "${files[@]}";
    do
        file="${file#./}";
        [[ "${only_executables}" == "1" && ! -x "${file}" ]] && continue;
        if [[ "$(head -n1 "${file}")" =~ ${_PYTHON_SHEBANG_BASE_PART_REGEX} ]]; then
            [[ "$(sed -ne "2p" "${file}")" =~ ^"# Gentoo '".*"' wrapper script generated by python_generate_wrapper_scripts()"$ ]] && continue;
            shebangs_converted="1";
            if [[ "${quiet}" == "0" ]]; then
                einfo "Converting shebang in '${file}'";
            fi;
            sed -e "1s:^#![[:space:]]*\([^[:space:]]*/usr/bin/env[[:space:]]\)\?[[:space:]]*\([^[:space:]]*/\)\?\(jython\|pypy-c\|python\)\([[:digit:]]\+\(\.[[:digit:]]\+\)\?\)\?\(\$\|[[:space:]].*\):#!\1\2${python_interpreter}\6:" -i "${file}" || die "Conversion of shebang in '${file}' failed";
        fi;
    done;
    if [[ "${shebangs_converted}" == "0" ]]; then
        die "${FUNCNAME}(): Python scripts not found";
    fi
}
python_copy_sources () 
{ 
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    local dir dirs=() PYTHON_ABI;
    if [[ "$#" -eq 0 ]]; then
        if [[ "${WORKDIR}" == "${S}" ]]; then
            die "${FUNCNAME}() cannot be used with current value of S variable";
        fi;
        dirs=("${S%/}");
    else
        dirs=("$@");
    fi;
    _python_calculate_PYTHON_ABIS;
    for PYTHON_ABI in ${PYTHON_ABIS};
    do
        for dir in "${dirs[@]}";
        do
            cp -pr "${dir}" "${dir}-${PYTHON_ABI}" > /dev/null || die "Copying of sources failed";
        done;
    done
}
python_disable_pyc () 
{ 
    _python_check_python_pkg_setup_execution;
    if [[ "$#" -ne 0 ]]; then
        die "${FUNCNAME}() does not accept arguments";
    fi;
    export PYTHONDONTWRITEBYTECODE="1"
}
python_enable_pyc () 
{ 
    _python_check_python_pkg_setup_execution;
    if [[ "$#" -ne 0 ]]; then
        die "${FUNCNAME}() does not accept arguments";
    fi;
    unset PYTHONDONTWRITEBYTECODE
}
python_execute () 
{ 
    _python_check_python_pkg_setup_execution;
    _python_set_color_variables;
    local argument letters printed_command=();
    letters="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    for argument in "$@";
    do
        if [[ "${argument}" =~ ^[${letters}_][${letters}0123456789_]*= ]]; then
            printed_command+=("${argument%%=*}=\"${argument#*=}\"");
        else
            if [[ -z "${argument}" || "${argument}" =~ [${IFS}] ]]; then
                printed_command+=("\"${argument}\"");
            else
                printed_command+=("${argument}");
            fi;
        fi;
    done;
    while (($#)); do
        if [[ "$1" =~ ^[${letters}_][${letters}0123456789_]*= ]]; then
            local "$1";
            export "$1";
        else
            break;
        fi;
        shift;
    done;
    if [[ "$#" -eq 0 ]]; then
        die "${FUNCNAME}(): Missing command";
    fi;
    echo "${_BOLD}""${printed_command[@]}""${_NORMAL}";
    "$@"
}
python_execute_function () 
{ 
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    _python_set_color_variables;
    local PYTHON_ABI;
    local -A _python=([action]= [action_message]= [action_message_template]= [default_function]="0" [exit_status]= [failure_message]= [failure_message_template]= [final_ABI]="0" [function]= [iterated_PYTHON_ABIS]= [nonfatal]="0" [previous_directory]= [previous_directory_stack]= [previous_directory_stack_length]= [quiet]="0" [separate_build_dirs]="0" [source_dir]=);
    while (($#)); do
        case "$1" in 
            --action-message)
                _python[action_message_template]="$2";
                shift
            ;;
            -d | --default-function)
                _python[default_function]="1"
            ;;
            --failure-message)
                _python[failure_message_template]="$2";
                shift
            ;;
            -f | --final-ABI)
                _python[final_ABI]="1"
            ;;
            --nonfatal)
                _python[nonfatal]="1"
            ;;
            -q | --quiet)
                _python[quiet]="1"
            ;;
            -s | --separate-build-dirs)
                _python[separate_build_dirs]="1"
            ;;
            --source-dir)
                _python[source_dir]="$2";
                shift
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ -n "${_python[source_dir]}" && "${_python[separate_build_dirs]}" == 0 ]]; then
        die "${FUNCNAME}(): '--source-dir' option can be specified only with '--separate-build-dirs' option";
    fi;
    if [[ "${_python[default_function]}" == "0" ]]; then
        if [[ "$#" -eq 0 ]]; then
            die "${FUNCNAME}(): Missing function name";
        fi;
        _python[function]="$1";
        shift;
        if [[ -z "$(type -t "${_python[function]}")" ]]; then
            die "${FUNCNAME}(): '${_python[function]}' function is not defined";
        fi;
    else
        if has "${EAPI:-0}" 0 1; then
            die "${FUNCNAME}(): '--default-function' option cannot be used in this EAPI";
        fi;
        if [[ "${EBUILD_PHASE}" == "configure" ]]; then
            if has "${EAPI}" 2 3; then
                function python_default_function () 
                { 
                    econf "$@"
                };
            else
                function python_default_function () 
                { 
                    nonfatal econf "$@"
                };
            fi;
        else
            if [[ "${EBUILD_PHASE}" == "compile" ]]; then
                function python_default_function () 
                { 
                    python_execute ${MAKE:-make} ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
                };
            else
                if [[ "${EBUILD_PHASE}" == "test" ]]; then
                    function python_default_function () 
                    { 
                        local options=();
                        if has "${EAPI}" 2 3 4 4-python; then
                            options+=("-j1");
                        fi;
                        if make -n check &>/dev/null; then
                            python_execute ${MAKE:-make} ${MAKEOPTS} ${EXTRA_EMAKE} "${options[@]}" check "$@";
                        else
                            if make -n test &>/dev/null; then
                                python_execute ${MAKE:-make} ${MAKEOPTS} ${EXTRA_EMAKE} "${options[@]}" test "$@";
                            fi;
                        fi
                    };
                else
                    if [[ "${EBUILD_PHASE}" == "install" ]]; then
                        function python_default_function () 
                        { 
                            python_execute ${MAKE:-make} ${MAKEOPTS} ${EXTRA_EMAKE} DESTDIR="${D}" install "$@"
                        };
                    else
                        die "${FUNCNAME}(): '--default-function' option cannot be used in this ebuild phase";
                    fi;
                fi;
            fi;
        fi;
        _python[function]="python_default_function";
    fi;
    if _python_abi-specific_local_scope; then
        die "${FUNCNAME}(): Invalid call stack";
    fi;
    [[ "${EBUILD_PHASE}" == "setup" ]] && _python[action]="Setting up";
    [[ "${EBUILD_PHASE}" == "unpack" ]] && _python[action]="Unpacking";
    [[ "${EBUILD_PHASE}" == "prepare" ]] && _python[action]="Preparation";
    [[ "${EBUILD_PHASE}" == "configure" ]] && _python[action]="Configuration";
    [[ "${EBUILD_PHASE}" == "compile" ]] && _python[action]="Building";
    [[ "${EBUILD_PHASE}" == "test" ]] && _python[action]="Testing";
    [[ "${EBUILD_PHASE}" == "install" ]] && _python[action]="Installation";
    [[ "${EBUILD_PHASE}" == "preinst" ]] && _python[action]="Preinstallation";
    [[ "${EBUILD_PHASE}" == "postinst" ]] && _python[action]="Postinstallation";
    [[ "${EBUILD_PHASE}" == "prerm" ]] && _python[action]="Preuninstallation";
    [[ "${EBUILD_PHASE}" == "postrm" ]] && _python[action]="Postuninstallation";
    _python_calculate_PYTHON_ABIS;
    if [[ "${_python[final_ABI]}" == "1" ]]; then
        _python[iterated_PYTHON_ABIS]="$(PYTHON -f --ABI)";
    else
        _python[iterated_PYTHON_ABIS]="${PYTHON_ABIS}";
    fi;
    for PYTHON_ABI in ${_python[iterated_PYTHON_ABIS]};
    do
        if [[ "${EBUILD_PHASE}" == "test" ]] && _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${PYTHON_TESTS_RESTRICTED_ABIS}"; then
            if [[ "${_python[quiet]}" == "0" ]]; then
                echo " ${_GREEN}*${_NORMAL} ${_BLUE}Testing of ${CATEGORY}/${PF} with $(python_get_implementation_and_version) skipped${_NORMAL}";
            fi;
            continue;
        fi;
        _python_prepare_flags;
        if [[ "${_python[quiet]}" == "0" ]]; then
            if [[ -n "${_python[action_message_template]}" ]]; then
                eval "_python[action_message]=\"${_python[action_message_template]}\"";
            else
                _python[action_message]="${_python[action]} of ${CATEGORY}/${PF} with $(python_get_implementation_and_version)...";
            fi;
            echo " ${_GREEN}*${_NORMAL} ${_BLUE}${_python[action_message]}${_NORMAL}";
        fi;
        if [[ "${_python[separate_build_dirs]}" == "1" ]]; then
            if [[ -n "${_python[source_dir]}" ]]; then
                export BUILDDIR="${S}/${_python[source_dir]}-${PYTHON_ABI}";
            else
                export BUILDDIR="${S}-${PYTHON_ABI}";
            fi;
            pushd "${BUILDDIR}" > /dev/null || die "pushd failed";
        else
            export BUILDDIR="${S}";
        fi;
        _python[previous_directory]="$(pwd)";
        _python[previous_directory_stack]="$(dirs -p)";
        _python[previous_directory_stack_length]="$(dirs -p | wc -l)";
        if [[ "${EBUILD_PHASE}" == "test" ]] && ! has "${EAPI}" 0 1 2 3 && _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${PYTHON_TESTS_FAILURES_TOLERANT_ABIS}"; then
            EPYTHON="$(PYTHON)" nonfatal "${_python[function]}" "$@";
        else
            EPYTHON="$(PYTHON)" "${_python[function]}" "$@";
        fi;
        _python[exit_status]="$?";
        _python_restore_flags;
        if [[ "${_python[exit_status]}" -ne 0 ]]; then
            if [[ -n "${_python[failure_message_template]}" ]]; then
                eval "_python[failure_message]=\"${_python[failure_message_template]}\"";
            else
                _python[failure_message]="${_python[action]} failed with $(python_get_implementation_and_version) in ${_python[function]}() function";
            fi;
            if [[ "${_python[nonfatal]}" == "1" ]]; then
                if [[ "${_python[quiet]}" == "0" ]]; then
                    ewarn "${_python[failure_message]}";
                fi;
            else
                if [[ "${_python[final_ABI]}" == "0" && "${EBUILD_PHASE}" == "test" ]] && _python_check_python_abi_matching --patterns-list "${PYTHON_ABI}" "${PYTHON_TESTS_FAILURES_TOLERANT_ABIS}"; then
                    if [[ "${_python[quiet]}" == "0" ]]; then
                        ewarn "${_python[failure_message]}";
                    fi;
                else
                    die "${_python[failure_message]}";
                fi;
            fi;
        fi;
        if [[ "$(dirs -p | wc -l)" -lt "${_python[previous_directory_stack_length]}" ]]; then
            die "Directory stack decreased illegally";
        fi;
        while [[ "$(dirs -p | wc -l)" -gt "${_python[previous_directory_stack_length]}" ]]; do
            popd > /dev/null || die "popd failed";
        done;
        cd "${_python[previous_directory]}";
        if [[ "$(dirs -p)" != "${_python[previous_directory_stack]}" ]]; then
            die "Directory stack changed illegally";
        fi;
        if [[ "${_python[separate_build_dirs]}" == "1" ]]; then
            popd > /dev/null || die "popd failed";
        fi;
        unset BUILDDIR;
    done;
    if [[ "${_python[default_function]}" == "1" ]]; then
        unset -f python_default_function;
    fi
}
python_execute_nosetests () 
{ 
    _python_check_python_pkg_setup_execution;
    _python_set_color_variables;
    local evaluate_arguments="0" PYTHONPATH_template separate_build_dirs;
    while (($#)); do
        case "$1" in 
            -e | --evaluate-arguments)
                evaluate_arguments="1"
            ;;
            -P | --PYTHONPATH)
                PYTHONPATH_template="$2";
                shift
            ;;
            -s | --separate-build-dirs)
                separate_build_dirs="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    function python_test_function () 
    { 
        local argument arguments=() evaluated_PYTHONPATH;
        if [[ "${evaluate_arguments}" == "1" ]]; then
            for argument in "$@";
            do
                eval "arguments+=(\"${argument}\")";
            done;
        else
            arguments=("$@");
        fi;
        eval "evaluated_PYTHONPATH=\"${PYTHONPATH_template}\"";
        _PYTHON_TEST_FUNCTION="python_execute_nosetests" _python_test_hook pre;
        if [[ -n "${evaluated_PYTHONPATH}" ]]; then
            python_execute PYTHONPATH="${evaluated_PYTHONPATH}" nosetests --verbosity="${PYTHON_TEST_VERBOSITY}" "${arguments[@]}" || return "$?";
        else
            python_execute nosetests --verbosity="${PYTHON_TEST_VERBOSITY}" "${arguments[@]}" || return "$?";
        fi;
        _PYTHON_TEST_FUNCTION="python_execute_nosetests" _python_test_hook post
    };
    if _python_package_supporting_installation_for_multiple_python_abis; then
        python_execute_function ${separate_build_dirs:+-s} python_test_function "$@";
    else
        if [[ -n "${separate_build_dirs}" ]]; then
            die "${FUNCNAME}(): Invalid usage";
        fi;
        python_test_function "$@" || die "Testing failed";
    fi;
    unset -f python_test_function
}
python_execute_py.test () 
{ 
    _python_check_python_pkg_setup_execution;
    _python_set_color_variables;
    local evaluate_arguments="0" PYTHONPATH_template separate_build_dirs;
    while (($#)); do
        case "$1" in 
            -e | --evaluate-arguments)
                evaluate_arguments="1"
            ;;
            -P | --PYTHONPATH)
                PYTHONPATH_template="$2";
                shift
            ;;
            -s | --separate-build-dirs)
                separate_build_dirs="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    function python_test_function () 
    { 
        local argument arguments=() evaluated_PYTHONPATH;
        if [[ "${evaluate_arguments}" == "1" ]]; then
            for argument in "$@";
            do
                eval "arguments+=(\"${argument}\")";
            done;
        else
            arguments=("$@");
        fi;
        eval "evaluated_PYTHONPATH=\"${PYTHONPATH_template}\"";
        _PYTHON_TEST_FUNCTION="python_execute_py.test" _python_test_hook pre;
        if [[ -n "${evaluated_PYTHONPATH}" ]]; then
            python_execute PYTHONPATH="${evaluated_PYTHONPATH}" py.test $([[ "${PYTHON_TEST_VERBOSITY}" -ge 2 ]] && echo -v) "${arguments[@]}" || return "$?";
        else
            python_execute py.test $([[ "${PYTHON_TEST_VERBOSITY}" -gt 1 ]] && echo -v) "${arguments[@]}" || return "$?";
        fi;
        _PYTHON_TEST_FUNCTION="python_execute_py.test" _python_test_hook post
    };
    if _python_package_supporting_installation_for_multiple_python_abis; then
        python_execute_function ${separate_build_dirs:+-s} python_test_function "$@";
    else
        if [[ -n "${separate_build_dirs}" ]]; then
            die "${FUNCNAME}(): Invalid usage";
        fi;
        python_test_function "$@" || die "Testing failed";
    fi;
    unset -f python_test_function
}
python_execute_trial () 
{ 
    _python_check_python_pkg_setup_execution;
    _python_set_color_variables;
    local evaluate_arguments="0" PYTHONPATH_template separate_build_dirs;
    while (($#)); do
        case "$1" in 
            -e | --evaluate-arguments)
                evaluate_arguments="1"
            ;;
            -P | --PYTHONPATH)
                PYTHONPATH_template="$2";
                shift
            ;;
            -s | --separate-build-dirs)
                separate_build_dirs="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    function python_test_function () 
    { 
        local argument arguments=() evaluated_PYTHONPATH;
        if [[ "${evaluate_arguments}" == "1" ]]; then
            for argument in "$@";
            do
                eval "arguments+=(\"${argument}\")";
            done;
        else
            arguments=("$@");
        fi;
        eval "evaluated_PYTHONPATH=\"${PYTHONPATH_template}\"";
        _PYTHON_TEST_FUNCTION="python_execute_trial" _python_test_hook pre;
        if [[ -n "${evaluated_PYTHONPATH}" ]]; then
            python_execute PYTHONPATH="${evaluated_PYTHONPATH}" trial $([[ "${PYTHON_TEST_VERBOSITY}" -ge 4 ]] && echo --spew) "${arguments[@]}" || return "$?";
        else
            python_execute trial $([[ "${PYTHON_TEST_VERBOSITY}" -ge 4 ]] && echo --spew) "${arguments[@]}" || return "$?";
        fi;
        _PYTHON_TEST_FUNCTION="python_execute_trial" _python_test_hook post
    };
    if _python_package_supporting_installation_for_multiple_python_abis; then
        python_execute_function ${separate_build_dirs:+-s} python_test_function "$@";
    else
        if [[ -n "${separate_build_dirs}" ]]; then
            die "${FUNCNAME}(): Invalid usage";
        fi;
        python_test_function "$@" || die "Testing failed";
    fi;
    unset -f python_test_function
}
python_generate_wrapper_scripts () 
{ 
    if [[ "${EBUILD_PHASE}" != "install" ]]; then
        die "${FUNCNAME}() can be used only in src_install() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    _python_initialize_prefix_variables;
    local eselect_python_option file force="0" quiet="0" PYTHON_ABI PYTHON_ABIS_list python2_enabled="0" python3_enabled="0" respect_EPYTHON="0";
    while (($#)); do
        case "$1" in 
            -E | --respect-EPYTHON)
                respect_EPYTHON="1"
            ;;
            -f | --force)
                force="1"
            ;;
            -q | --quiet)
                quiet="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "$#" -eq 0 ]]; then
        die "${FUNCNAME}(): Missing arguments";
    fi;
    _python_calculate_PYTHON_ABIS;
    for PYTHON_ABI in "${_CPYTHON2_GLOBALLY_SUPPORTED_ABIS[@]}";
    do
        if has "${PYTHON_ABI}" ${PYTHON_ABIS}; then
            python2_enabled="1";
        fi;
    done;
    for PYTHON_ABI in "${_CPYTHON3_GLOBALLY_SUPPORTED_ABIS[@]}";
    do
        if has "${PYTHON_ABI}" ${PYTHON_ABIS}; then
            python3_enabled="1";
        fi;
    done;
    if [[ "${python2_enabled}" == "1" && "${python3_enabled}" == "1" ]]; then
        eselect_python_option=;
    else
        if [[ "${python2_enabled}" == "1" && "${python3_enabled}" == "0" ]]; then
            eselect_python_option="--python2";
        else
            if [[ "${python2_enabled}" == "0" && "${python3_enabled}" == "1" ]]; then
                eselect_python_option="--python3";
            else
                die "${FUNCNAME}(): Unsupported environment";
            fi;
        fi;
    fi;
    PYTHON_ABIS_list="$("$(PYTHON -f)" -c "print(', '.join('\"%s\"' % x for x in reversed('${PYTHON_ABIS}'.split())))")";
    for file in "$@";
    do
        if [[ -f "${file}" && "${force}" == "0" ]]; then
            die "${FUNCNAME}(): '${file}' already exists";
        fi;
        if [[ "${quiet}" == "0" ]]; then
            einfo "Generating '${file#${ED%/}}' wrapper script";
        fi;
        cat > "${file}"  <<EOF
#!/usr/bin/env python
# Gentoo '${file##*/}' wrapper script generated by python_generate_wrapper_scripts()

import os
import re
import subprocess
import sys

cpython_ABI_re = re.compile(r"^(\d+\.\d+)$")
jython_ABI_re = re.compile(r"^(\d+\.\d+)-jython$")
pypy_ABI_re = re.compile(r"^\d+\.\d+-pypy-(\d+\.\d+)$")
cpython_interpreter_re = re.compile(r"^python(\d+\.\d+)$")
jython_interpreter_re = re.compile(r"^jython(\d+\.\d+)$")
pypy_interpreter_re = re.compile(r"^pypy-c(\d+\.\d+)$")
cpython_shebang_re = re.compile(r"^#![ \t]*(?:${EPREFIX}/usr/bin/python|(?:${EPREFIX})?/usr/bin/env[ \t]+(?:${EPREFIX}/usr/bin/)?python)")
python_shebang_options_re = re.compile(r"^#![ \t]*${EPREFIX}/usr/bin/(?:jython|pypy-c|python)(?:\d+(?:\.\d+)?)?[ \t]+(-\S)")
python_verification_output_re = re.compile("^GENTOO_PYTHON_TARGET_SCRIPT_PATH supported\n$")

pypy_versions_mapping = {
$(for ((i = 0; i < "${#_PYPY_GLOBALLY_SUPPORTED_ABIS[@]}"; i++)); do
	PYTHON_ABI="${_PYPY_GLOBALLY_SUPPORTED_ABIS[${i}]}"
	echo -en "\t\"${PYTHON_ABI#*-pypy-}\": \"${PYTHON_ABI%-pypy-*}\""
	if [[ "${i}" -lt "$((${#_PYPY_GLOBALLY_SUPPORTED_ABIS[@]} - 1))" ]]; then
		echo -n ","
	fi
	echo
done)
}

def get_PYTHON_ABI(python_interpreter):
	cpython_matched = cpython_interpreter_re.match(python_interpreter)
	jython_matched = jython_interpreter_re.match(python_interpreter)
	pypy_matched = pypy_interpreter_re.match(python_interpreter)
	if cpython_matched is not None:
		PYTHON_ABI = cpython_matched.group(1)
	elif jython_matched is not None:
		PYTHON_ABI = jython_matched.group(1) + "-jython"
	elif pypy_matched is not None:
		PYTHON_ABI = pypy_versions_mapping[pypy_matched.group(1)] + "-pypy-" + pypy_matched.group(1)
	else:
		PYTHON_ABI = None
	return PYTHON_ABI

def get_python_interpreter(PYTHON_ABI):
	cpython_matched = cpython_ABI_re.match(PYTHON_ABI)
	jython_matched = jython_ABI_re.match(PYTHON_ABI)
	pypy_matched = pypy_ABI_re.match(PYTHON_ABI)
	if cpython_matched is not None:
		python_interpreter = "python" + cpython_matched.group(1)
	elif jython_matched is not None:
		python_interpreter = "jython" + jython_matched.group(1)
	elif pypy_matched is not None:
		python_interpreter = "pypy-c" + pypy_matched.group(1)
	else:
		python_interpreter = None
	return python_interpreter

EOF

        if [[ "$?" != "0" ]]; then
            die "${FUNCNAME}(): Generation of '$1' failed";
        fi;
        if [[ "${respect_EPYTHON}" == "1" ]]; then
            cat >> "${file}"  <<EOF
python_interpreter = os.environ.get("EPYTHON")
if python_interpreter:
	PYTHON_ABI = get_PYTHON_ABI(python_interpreter)
	if PYTHON_ABI is None:
		sys.stderr.write("%s: EPYTHON variable has unrecognized value '%s'\n" % (sys.argv[0], python_interpreter))
		sys.exit(1)
else:
	try:
		environment = os.environ.copy()
		environment["ROOT"] = "/"
		eselect_process = subprocess.Popen(["${EPREFIX}/usr/bin/eselect", "python", "show"${eselect_python_option:+, $(echo "\"")}${eselect_python_option}${eselect_python_option:+$(echo "\"")}], env=environment, stdout=subprocess.PIPE)
		if eselect_process.wait() != 0:
			raise ValueError
	except (OSError, ValueError):
		sys.stderr.write("%s: Execution of 'eselect python show${eselect_python_option:+ }${eselect_python_option}' failed\n" % sys.argv[0])
		sys.exit(1)

	python_interpreter = eselect_process.stdout.read()
	if not isinstance(python_interpreter, str):
		# Python 3
		python_interpreter = python_interpreter.decode()
	python_interpreter = python_interpreter.rstrip("\n")

	PYTHON_ABI = get_PYTHON_ABI(python_interpreter)
	if PYTHON_ABI is None:
		sys.stderr.write("%s: 'eselect python show${eselect_python_option:+ }${eselect_python_option}' printed unrecognized value '%s'\n" % (sys.argv[0], python_interpreter))
		sys.exit(1)

wrapper_script_path = os.path.realpath(sys.argv[0])
target_executable_path = "%s-%s" % (wrapper_script_path, PYTHON_ABI)
if not os.path.exists(target_executable_path):
	sys.stderr.write("%s: '%s' does not exist\n" % (sys.argv[0], target_executable_path))
	sys.exit(1)
EOF

            if [[ "$?" != "0" ]]; then
                die "${FUNCNAME}(): Generation of '$1' failed";
            fi;
        else
            cat >> "${file}"  <<EOF
try:
	environment = os.environ.copy()
	environment["ROOT"] = "/"
	eselect_process = subprocess.Popen(["${EPREFIX}/usr/bin/eselect", "python", "show"${eselect_python_option:+, $(echo "\"")}${eselect_python_option}${eselect_python_option:+$(echo "\"")}], env=environment, stdout=subprocess.PIPE)
	if eselect_process.wait() != 0:
		raise ValueError
except (OSError, ValueError):
	sys.stderr.write("%s: Execution of 'eselect python show${eselect_python_option:+ }${eselect_python_option}' failed\n" % sys.argv[0])
	sys.exit(1)

python_interpreter = eselect_process.stdout.read()
if not isinstance(python_interpreter, str):
	# Python 3
	python_interpreter = python_interpreter.decode()
python_interpreter = python_interpreter.rstrip("\n")

PYTHON_ABI = get_PYTHON_ABI(python_interpreter)
if PYTHON_ABI is None:
	sys.stderr.write("%s: 'eselect python show${eselect_python_option:+ }${eselect_python_option}' printed unrecognized value '%s'\n" % (sys.argv[0], python_interpreter))
	sys.exit(1)

wrapper_script_path = os.path.realpath(sys.argv[0])
for PYTHON_ABI in [PYTHON_ABI, ${PYTHON_ABIS_list}]:
	target_executable_path = "%s-%s" % (wrapper_script_path, PYTHON_ABI)
	if os.path.exists(target_executable_path):
		break
else:
	sys.stderr.write("%s: No target script exists for '%s'\n" % (sys.argv[0], wrapper_script_path))
	sys.exit(1)

python_interpreter = get_python_interpreter(PYTHON_ABI)
if python_interpreter is None:
	sys.stderr.write("%s: Unrecognized Python ABI '%s'\n" % (sys.argv[0], PYTHON_ABI))
	sys.exit(1)
EOF

            if [[ "$?" != "0" ]]; then
                die "${FUNCNAME}(): Generation of '$1' failed";
            fi;
        fi
        cat >> "${file}"  <<EOF

target_executable = open(target_executable_path, "rb")
target_executable_first_line = target_executable.readline()
target_executable.close()
if not isinstance(target_executable_first_line, str):
	# Python 3
	target_executable_first_line = target_executable_first_line.decode("utf_8", "replace")

options = []
python_shebang_options_matched = python_shebang_options_re.match(target_executable_first_line)
if python_shebang_options_matched is not None:
	options = [python_shebang_options_matched.group(1)]

cpython_shebang_matched = cpython_shebang_re.match(target_executable_first_line)

if cpython_shebang_matched is not None:
	try:
		python_interpreter_path = "${EPREFIX}/usr/bin/%s" % python_interpreter
		os.environ["GENTOO_PYTHON_TARGET_SCRIPT_PATH_VERIFICATION"] = "1"
		python_verification_process = subprocess.Popen([python_interpreter_path, "-c", "pass"], stdout=subprocess.PIPE)
		del os.environ["GENTOO_PYTHON_TARGET_SCRIPT_PATH_VERIFICATION"]
		if python_verification_process.wait() != 0:
			raise ValueError

		python_verification_output = python_verification_process.stdout.read()
		if not isinstance(python_verification_output, str):
			# Python 3
			python_verification_output = python_verification_output.decode()

		if not python_verification_output_re.match(python_verification_output):
			raise ValueError

		if cpython_interpreter_re.match(python_interpreter) is not None:
			os.environ["GENTOO_PYTHON_PROCESS_NAME"] = os.path.basename(sys.argv[0])
			os.environ["GENTOO_PYTHON_WRAPPER_SCRIPT_PATH"] = sys.argv[0]
			os.environ["GENTOO_PYTHON_TARGET_SCRIPT_PATH"] = target_executable_path

		if hasattr(os, "execv"):
			os.execv(python_interpreter_path, [python_interpreter_path] + options + sys.argv)
		else:
			sys.exit(subprocess.Popen([python_interpreter_path] + options + sys.argv).wait())
	except (KeyboardInterrupt, SystemExit):
		raise
	except:
		pass
	for variable in ("GENTOO_PYTHON_PROCESS_NAME", "GENTOO_PYTHON_WRAPPER_SCRIPT_PATH", "GENTOO_PYTHON_TARGET_SCRIPT_PATH", "GENTOO_PYTHON_TARGET_SCRIPT_PATH_VERIFICATION"):
		if variable in os.environ:
			del os.environ[variable]

if hasattr(os, "execv"):
	os.execv(target_executable_path, sys.argv)
else:
	sys.exit(subprocess.Popen([target_executable_path] + sys.argv[1:]).wait())
EOF

        if [[ "$?" != "0" ]]; then
            die "${FUNCNAME}(): Generation of '$1' failed";
        fi;
        fperms +x "${file#${ED%/}}" || die "fperms '${file}' failed";
    done
}
python_get_extension_module_suffix () 
{ 
    _python_check_python_pkg_setup_execution;
    local final_ABI="0" PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
        if [[ "${PYTHON_ABI}" < "3.2" ]]; then
            echo ".so";
        else
            echo ".cpython-${PYTHON_ABI/./}.so";
        fi;
    else
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
            die "${FUNCNAME}(): Jython does not support extension modules";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                echo ".so";
            fi;
        fi;
    fi
}
python_get_implementation () 
{ 
    _python_check_python_pkg_setup_execution;
    local final_ABI="0" PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    echo "$(_python_get_implementation "${PYTHON_ABI}")"
}
python_get_implementation_and_version () 
{ 
    _python_check_python_pkg_setup_execution;
    local final_ABI="0" PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    if [[ "${PYTHON_ABI}" =~ ^[[:digit:]]+\.[[:digit:]]+-[[:alnum:]]+-[[:digit:]]+\.[[:digit:]]+$ ]]; then
        echo "$(_python_get_implementation "${PYTHON_ABI}") ${PYTHON_ABI##*-} (Python ${PYTHON_ABI%%-*})";
    else
        echo "$(_python_get_implementation "${PYTHON_ABI}") ${PYTHON_ABI%%-*}";
    fi
}
python_get_implementational_package () 
{ 
    _python_check_python_pkg_setup_execution;
    local final_ABI="0" PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    if [[ "${EAPI:-0}" == "0" ]]; then
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
            echo "=dev-lang/python-${PYTHON_ABI}*";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
                echo "=dev-lang/jython-${PYTHON_ABI%-jython}*";
            else
                if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                    echo "=dev-python/pypy-${PYTHON_ABI#*-pypy-}*";
                fi;
            fi;
        fi;
    else
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
            echo "dev-lang/python:${PYTHON_ABI}";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
                echo "dev-lang/jython:${PYTHON_ABI%-jython}";
            else
                if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                    echo "dev-python/pypy:${PYTHON_ABI#*-pypy-}";
                fi;
            fi;
        fi;
    fi
}
python_get_includedir () 
{ 
    _python_check_python_pkg_setup_execution;
    local base_path="0" final_ABI="0" prefix PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -b | --base-path)
                base_path="1"
            ;;
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${base_path}" == "0" ]]; then
        prefix="/";
    fi;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
        echo "${prefix}usr/include/python${PYTHON_ABI}";
    else
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
            echo "${prefix}usr/share/jython-${PYTHON_ABI%-jython}/Include";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                echo "${prefix}usr/${_PYTHON_MULTILIB_LIBDIR}/pypy${PYTHON_ABI#*-pypy-}/include";
            fi;
        fi;
    fi
}
python_get_libdir () 
{ 
    _python_check_python_pkg_setup_execution;
    local base_path="0" final_ABI="0" prefix PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -b | --base-path)
                base_path="1"
            ;;
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${base_path}" == "0" ]]; then
        prefix="/";
    fi;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
        echo "${prefix}usr/${_PYTHON_MULTILIB_LIBDIR}/python${PYTHON_ABI}";
    else
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
            echo "${prefix}usr/share/jython-${PYTHON_ABI%-jython}/Lib";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                if [[ "${PYTHON_ABI#*-pypy-}" < "1.9" ]]; then
                    die "${FUNCNAME}(): PyPy has multiple standard library directories";
                else
                    echo "${prefix}usr/${_PYTHON_MULTILIB_LIBDIR}/pypy${PYTHON_ABI#*-pypy-}/lib-python/${PYTHON_ABI%-pypy-*}";
                fi;
            fi;
        fi;
    fi
}
python_get_library () 
{ 
    _python_check_python_pkg_setup_execution;
    local base_path="0" final_ABI="0" linker_option="0" prefix PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -b | --base-path)
                base_path="1"
            ;;
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -l | --linker-option)
                linker_option="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${base_path}" == "0" ]]; then
        prefix="/";
    fi;
    if [[ "${base_path}" == "1" && "${linker_option}" == "1" ]]; then
        die "${FUNCNAME}(): '--base-path' and '--linker-option' options cannot be specified simultaneously";
    fi;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
        if [[ "${linker_option}" == "1" ]]; then
            echo "-lpython${PYTHON_ABI}";
        else
            echo "${prefix}usr/${_PYTHON_MULTILIB_LIBDIR}/libpython${PYTHON_ABI}${_PYTHON_MULTILIB_LIBNAME}";
        fi;
    else
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
            die "${FUNCNAME}(): Jython does not have shared library";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                die "${FUNCNAME}(): PyPy does not have shared library";
            fi;
        fi;
    fi
}
python_get_sitedir () 
{ 
    _python_check_python_pkg_setup_execution;
    local base_path="0" final_ABI="0" prefix PYTHON_ABI="${PYTHON_ABI}";
    while (($#)); do
        case "$1" in 
            -b | --base-path)
                base_path="1"
            ;;
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${base_path}" == "0" ]]; then
        prefix="/";
    fi;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        PYTHON_ABI="$(PYTHON -f --ABI)";
    else
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if ! _python_abi-specific_local_scope; then
                die "${FUNCNAME}() should be used in ABI-specific local scope";
            fi;
        else
            PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        fi;
    fi;
    if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
        echo "${prefix}usr/${_PYTHON_MULTILIB_LIBDIR}/python${PYTHON_ABI}/site-packages";
    else
        if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
            echo "${prefix}usr/share/jython-${PYTHON_ABI%-jython}/Lib/site-packages";
        else
            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                echo "${prefix}usr/${_PYTHON_MULTILIB_LIBDIR}/pypy${PYTHON_ABI#*-pypy-}/site-packages";
            fi;
        fi;
    fi
}
python_get_version () 
{ 
    _python_check_python_pkg_setup_execution;
    local final_ABI="0" language="0" language_version full="0" major="0" minor="0" micro="0" PYTHON_ABI="${PYTHON_ABI}" python_command;
    while (($#)); do
        case "$1" in 
            -f | --final-ABI)
                final_ABI="1"
            ;;
            -l | --language)
                language="1"
            ;;
            --full)
                full="1"
            ;;
            --major)
                major="1"
            ;;
            --minor)
                minor="1"
            ;;
            --micro)
                micro="1"
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                die "${FUNCNAME}(): Invalid usage"
            ;;
        esac;
        shift;
    done;
    if [[ "${final_ABI}" == "1" ]]; then
        if ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--final-ABI' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
    else
        if _python_package_supporting_installation_for_multiple_python_abis && ! _python_abi-specific_local_scope; then
            die "${FUNCNAME}() should be used in ABI-specific local scope";
        fi;
    fi;
    if [[ "$((${full} + ${major} + ${minor} + ${micro}))" -gt 1 ]]; then
        die "${FUNCNAME}(): '--full', '--major', '--minor' or '--micro' options cannot be specified simultaneously";
    fi;
    if [[ "${language}" == "1" ]]; then
        if [[ "${final_ABI}" == "1" ]]; then
            PYTHON_ABI="$(PYTHON -f --ABI)";
        else
            if [[ -z "${PYTHON_ABI}" ]]; then
                PYTHON_ABI="$(PYTHON --ABI)";
            fi;
        fi;
        language_version="${PYTHON_ABI%%-*}";
        if [[ "${full}" == "1" ]]; then
            die "${FUNCNAME}(): '--language' and '--full' options cannot be specified simultaneously";
        else
            if [[ "${major}" == "1" ]]; then
                echo "${language_version%.*}";
            else
                if [[ "${minor}" == "1" ]]; then
                    echo "${language_version#*.}";
                else
                    if [[ "${micro}" == "1" ]]; then
                        die "${FUNCNAME}(): '--language' and '--micro' options cannot be specified simultaneously";
                    else
                        echo "${language_version}";
                    fi;
                fi;
            fi;
        fi;
    else
        if [[ "${full}" == "1" ]]; then
            python_command="import sys; print('.'.join(str(x) for x in getattr(sys, 'pypy_version_info', sys.version_info)[:3]))";
        else
            if [[ "${major}" == "1" ]]; then
                python_command="import sys; print(getattr(sys, 'pypy_version_info', sys.version_info)[0])";
            else
                if [[ "${minor}" == "1" ]]; then
                    python_command="import sys; print(getattr(sys, 'pypy_version_info', sys.version_info)[1])";
                else
                    if [[ "${micro}" == "1" ]]; then
                        python_command="import sys; print(getattr(sys, 'pypy_version_info', sys.version_info)[2])";
                    else
                        if [[ -n "${PYTHON_ABI}" && "${final_ABI}" == "0" ]]; then
                            if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "CPython" ]]; then
                                echo "${PYTHON_ABI}";
                            else
                                if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" ]]; then
                                    echo "${PYTHON_ABI%-jython}";
                                else
                                    if [[ "$(_python_get_implementation "${PYTHON_ABI}")" == "PyPy" ]]; then
                                        echo "${PYTHON_ABI#*-pypy-}";
                                    fi;
                                fi;
                            fi;
                            return;
                        fi;
                        python_command="from sys import version_info; print('.'.join(str(x) for x in version_info[:2]))";
                    fi;
                fi;
            fi;
        fi;
        if [[ "${final_ABI}" == "1" ]]; then
            "$(PYTHON -f)" -c "${python_command}";
        else
            "$(PYTHON ${PYTHON_ABI})" -c "${python_command}";
        fi;
    fi
}
python_install_executables () 
{ 
    if [[ "${EBUILD_PHASE}" != "install" ]]; then
        die "${FUNCNAME}() can be used only in src_install() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    _python_initialize_prefix_variables;
    local file files=() intermediate_installation_images_directory PYTHON_VERSIONED_EXECUTABLES=() quiet="0";
    while (($#)); do
        case "$1" in 
            -q | --quiet)
                quiet="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    for file in "$@";
    do
        if [[ -f "${file}" ]]; then
            files+=("${file}");
        else
            if [[ -e "${file}" ]]; then
                die "${FUNCNAME}(): '${file}' is not a regular file";
            else
                die "${FUNCNAME}(): '${file}' does not exist";
            fi;
        fi;
    done;
    intermediate_installation_images_directory="$(mktemp -d "${T}/images.XXXXXXXXXXXX")" || die "${FUNCNAME}(): Creation of intermediate installation images directory failed";
    function python_install_files () 
    { 
        mkdir -p "${intermediate_installation_images_directory}/${PYTHON_ABI}${EPREFIX}/usr/bin";
        install -m 0755 "${files[@]}" "${intermediate_installation_images_directory}/${PYTHON_ABI}${EPREFIX}/usr/bin"
    };
    python_execute_function -q python_install_files;
    PYTHON_VERSIONED_EXECUTABLES=(".*");
    python_merge_intermediate_installation_images $([[ "${quiet}" == "1" ]] && echo --quiet) "${intermediate_installation_images_directory}"
}
python_merge_intermediate_installation_images () 
{ 
    if [[ "${EBUILD_PHASE}" != "install" ]]; then
        die "${FUNCNAME}() can be used only in src_install() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    _python_initialize_prefix_variables;
    local absolute_file b file files=() intermediate_installation_images_directory PYTHON_ABI quiet="0" regex shebang version_executable wrapper_scripts=() wrapper_scripts_set=();
    while (($#)); do
        case "$1" in 
            -q | --quiet)
                quiet="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "$#" -ne 1 ]]; then
        die "${FUNCNAME}() requires 1 argument";
    fi;
    intermediate_installation_images_directory="$1";
    if [[ ! -d "${intermediate_installation_images_directory}" ]]; then
        die "${FUNCNAME}(): Intermediate installation images directory '${intermediate_installation_images_directory}' does not exist";
    fi;
    _python_calculate_PYTHON_ABIS;
    if [[ "$(PYTHON -f --ABI)" == 3.* ]]; then
        b="b";
    fi;
    while read -d '' -r file; do
        files+=("${file}");
    done < <("$(PYTHON -f)" -c "import os
import sys

if hasattr(sys.stdout, 'buffer'):
	# Python 3
	stdout = sys.stdout.buffer
else:
	# Python 2
	stdout = sys.stdout

files_set = set()

os.chdir(${b}'${intermediate_installation_images_directory}')

for PYTHON_ABI in ${b}'${PYTHON_ABIS}'.split():
	for root, dirs, files in os.walk(PYTHON_ABI + ${b}'${EPREFIX}'):
		root = root[len(PYTHON_ABI + ${b}'${EPREFIX}')+1:]
		files_set.update(root + ${b}'/' + file for file in files)

for file in sorted(files_set):
	stdout.write(file)
	stdout.write(${b}'\x00')" || die "${FUNCNAME}(): Failure of extraction of files in intermediate installation images");
    for PYTHON_ABI in ${PYTHON_ABIS};
    do
        if [[ ! -d "${intermediate_installation_images_directory}/${PYTHON_ABI}" ]]; then
            die "${FUNCNAME}(): Intermediate installation image for Python ABI '${PYTHON_ABI}' does not exist";
        fi;
        pushd "${intermediate_installation_images_directory}/${PYTHON_ABI}${EPREFIX}" > /dev/null || die "pushd failed";
        for file in "${files[@]}";
        do
            version_executable="0";
            for regex in "/usr/bin/.*" "/usr/sbin/.*" "${PYTHON_VERSIONED_SCRIPTS[@]}";
            do
                if [[ "/${file}" =~ ^${regex}$ ]]; then
                    version_executable="1";
                    break;
                fi;
            done;
            for regex in "${PYTHON_VERSIONED_EXECUTABLES[@]}";
            do
                if [[ "/${file}" =~ ^${regex}$ ]]; then
                    version_executable="2";
                    break;
                fi;
            done;
            if [[ "${version_executable}" != "0" ]]; then
                for regex in "${PYTHON_NONVERSIONED_EXECUTABLES[@]}";
                do
                    if [[ "/${file}" =~ ^${regex}$ ]]; then
                        version_executable="0";
                        break;
                    fi;
                done;
            fi;
            [[ "${version_executable}" == "0" ]] && continue;
            if [[ -L "${file}" ]]; then
                absolute_file="$(readlink "${file}")";
                if [[ "${absolute_file}" == /* ]]; then
                    absolute_file="${intermediate_installation_images_directory}/${PYTHON_ABI}${EPREFIX}/${absolute_file##/}";
                else
                    if [[ "${file}" == */* ]]; then
                        absolute_file="${intermediate_installation_images_directory}/${PYTHON_ABI}${EPREFIX}/${file%/*}/${absolute_file}";
                    else
                        absolute_file="${intermediate_installation_images_directory}/${PYTHON_ABI}${EPREFIX}/${absolute_file}";
                    fi;
                fi;
            else
                absolute_file="${intermediate_installation_images_directory}/${PYTHON_ABI}${EPREFIX}/${file}";
            fi;
            [[ ! -x "${absolute_file}" ]] && continue;
            shebang="$(head -n1 "${absolute_file}")" || die "Extraction of shebang from '${absolute_file}' failed";
            if [[ "${version_executable}" == "2" ]]; then
                wrapper_scripts+=("${ED}${file}");
            else
                if [[ "${version_executable}" == "1" ]]; then
                    if [[ "${shebang}" =~ ${_PYTHON_SHEBANG_BASE_PART_REGEX}([[:digit:]]+(\.[[:digit:]]+)?)?($|[[:space:]]+) ]]; then
                        wrapper_scripts+=("${ED}${file}");
                    else
                        version_executable="0";
                    fi;
                fi;
            fi;
            [[ "${version_executable}" == "0" ]] && continue;
            if [[ -e "${file}-${PYTHON_ABI}" ]]; then
                die "${FUNCNAME}(): '${EPREFIX}/${file}-${PYTHON_ABI}' already exists";
            fi;
            mv "${file}" "${file}-${PYTHON_ABI}" || die "Renaming of '${file}' failed";
            if [[ "${shebang}" =~ ${_PYTHON_SHEBANG_BASE_PART_REGEX}[[:digit:]]*($|[[:space:]]+) ]]; then
                if [[ -L "${file}-${PYTHON_ABI}" ]]; then
                    python_convert_shebangs $([[ "${quiet}" == "1" ]] && echo --quiet) "${PYTHON_ABI}" "${absolute_file}";
                else
                    python_convert_shebangs $([[ "${quiet}" == "1" ]] && echo --quiet) "${PYTHON_ABI}" "${file}-${PYTHON_ABI}";
                fi;
            fi;
        done;
        popd > /dev/null || die "popd failed";
        if ROOT="/" has_version ">=sys-apps/coreutils-6.9.90"; then
            cp -fr --preserve=all --no-preserve=context "${intermediate_installation_images_directory}/${PYTHON_ABI}/"* "${D}" || die "Merging of intermediate installation image for Python ABI '${PYTHON_ABI} into installation image failed";
        else
            if ROOT="/" has_version sys-apps/coreutils; then
                cp -fr --preserve=all "${intermediate_installation_images_directory}/${PYTHON_ABI}/"* "${D}" || die "Merging of intermediate installation image for Python ABI '${PYTHON_ABI} into installation image failed";
            else
                cp -fpr "${intermediate_installation_images_directory}/${PYTHON_ABI}/"* "${D}" || die "Merging of intermediate installation image for Python ABI '${PYTHON_ABI} into installation image failed";
            fi;
        fi;
    done;
    rm -fr "${intermediate_installation_images_directory}";
    if [[ "${#wrapper_scripts[@]}" -ge 1 ]]; then
        rm -f "${T}/python_wrapper_scripts";
        for file in "${wrapper_scripts[@]}";
        do
            echo -n "${file}" >> "${T}/python_wrapper_scripts";
            echo -en "\x00" >> "${T}/python_wrapper_scripts";
        done;
        while read -d '' -r file; do
            wrapper_scripts_set+=("${file}");
        done < <("$(PYTHON -f)" -c "import sys

if hasattr(sys.stdout, 'buffer'):
	# Python 3
	stdout = sys.stdout.buffer
else:
	# Python 2
	stdout = sys.stdout

python_wrapper_scripts_file = open('${T}/python_wrapper_scripts', 'rb')
files = set(python_wrapper_scripts_file.read().rstrip(${b}'\x00').split(${b}'\x00'))
python_wrapper_scripts_file.close()

for file in sorted(files):
	stdout.write(file)
	stdout.write(${b}'\x00')" || die "${FUNCNAME}(): Failure of extraction of set of wrapper scripts");
        python_generate_wrapper_scripts $([[ "${quiet}" == "1" ]] && echo --quiet) "${wrapper_scripts_set[@]}";
    fi
}
python_mod_cleanup () 
{ 
    if [[ "${EBUILD_PHASE}" != "postrm" ]]; then
        die "${FUNCNAME}() can be used only in pkg_postrm() phase";
    fi;
    _python_check_python_pkg_setup_execution;
    _python_initialize_prefix_variables;
    local ABIs_patterns="*" allow_evaluated_non_sitedir_paths="0" dir enabled_PYTHON_ABI enabled_PYTHON_ABIS iterated_PYTHON_ABIS PYTHON_ABI="${PYTHON_ABI}" root search_paths=() sitedir;
    if _python_package_supporting_installation_for_multiple_python_abis; then
        if has "${EAPI:-0}" 0 1 2 3 && [[ -z "${PYTHON_ABIS}" ]]; then
            die "${FUNCNAME}(): python_pkg_setup() or python_execute_function() not called";
        fi;
        enabled_PYTHON_ABIS="${PYTHON_ABIS}";
    else
        if has "${EAPI:-0}" 0 1 2 3; then
            enabled_PYTHON_ABIS="${PYTHON_ABI:-$(PYTHON --ABI)}";
        else
            enabled_PYTHON_ABIS="${PYTHON_ABI}";
        fi;
    fi;
    root="${EROOT%/}";
    while (($#)); do
        case "$1" in 
            -A | --ABIs-patterns)
                ABIs_patterns="$2";
                shift
            ;;
            --allow-evaluated-non-sitedir-paths)
                allow_evaluated_non_sitedir_paths="1"
            ;;
            --)
                shift;
                break
            ;;
            -*)
                die "${FUNCNAME}(): Unrecognized option '$1'"
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ "${allow_evaluated_non_sitedir_paths}" == "1" ]] && ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}(): '--allow-evaluated-non-sitedir-paths' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    if [[ "$#" -eq 0 ]]; then
        die "${FUNCNAME}(): Missing files or directories";
    fi;
    for enabled_PYTHON_ABI in ${enabled_PYTHON_ABIS};
    do
        if _python_check_python_abi_matching --patterns-list "${enabled_PYTHON_ABI}" "${ABIs_patterns}"; then
            iterated_PYTHON_ABIS+="${iterated_PYTHON_ABIS:+ }${enabled_PYTHON_ABI}";
        fi;
    done;
    if ! has "${EAPI:-0}" 0 1 2 || _python_package_supporting_installation_for_multiple_python_abis || _python_implementation || [[ "${CATEGORY}/${PN}" == "sys-apps/portage" ]]; then
        while (($#)); do
            if [[ "$1" =~ ^($|(\.|\.\.|/)($|/)) ]]; then
                die "${FUNCNAME}(): Invalid argument '$1'";
            else
                if ! _python_implementation && [[ "$1" =~ ^/usr/lib(32|64)?/python[[:digit:]]+\.[[:digit:]]+ ]]; then
                    die "${FUNCNAME}(): Paths of directories / files in site-packages directories must be relative to site-packages directories";
                else
                    if [[ "$1" =~ ^/ ]]; then
                        if _python_package_supporting_installation_for_multiple_python_abis; then
                            if [[ "${allow_evaluated_non_sitedir_paths}" != "1" ]]; then
                                die "${FUNCNAME}(): Absolute paths cannot be used in ebuilds of packages supporting installation for multiple Python ABIs";
                            fi;
                            if [[ "$1" != *\$* ]]; then
                                die "${FUNCNAME}(): '$1' has invalid syntax";
                            fi;
                            for PYTHON_ABI in ${iterated_PYTHON_ABIS};
                            do
                                eval "search_paths+=(\"\${root}$1\")";
                            done;
                        else
                            if [[ -n "${iterated_PYTHON_ABIS}" ]]; then
                                search_paths+=("${root}$1");
                            fi;
                        fi;
                    else
                        for PYTHON_ABI in ${iterated_PYTHON_ABIS};
                        do
                            search_paths+=("${root}$(python_get_sitedir)/$1");
                        done;
                    fi;
                fi;
            fi;
            shift;
        done;
    else
        ewarn;
        ewarn "Deprecation Warning: Usage of ${FUNCNAME}() in packages not supporting installation";
        ewarn "for multiple Python ABIs in EAPI <=2 is deprecated and will be disallowed on 2011-08-01.";
        ewarn "Use EAPI >=3 and call ${FUNCNAME}() with paths having appropriate syntax.";
        ewarn "The ebuild needs to be fixed. Please report a bug, if it has not been already reported.";
        ewarn;
        search_paths=("${@#/}");
        search_paths=("${search_paths[@]/#/${root}/}");
    fi;
    _python_clean_compiled_modules "${search_paths[@]}"
}
python_mod_optimize () 
{ 
    if [[ "${EBUILD_PHASE}" != "postinst" ]]; then
        die "${FUNCNAME}() can be used only in pkg_postinst() phase";
    fi;
    _python_check_python_pkg_setup_execution;
    _python_initialize_prefix_variables;
    if ! has "${EAPI:-0}" 0 1 2 || _python_package_supporting_installation_for_multiple_python_abis || _python_implementation || [[ "${CATEGORY}/${PN}" == "sys-apps/portage" ]]; then
        local ABIs_patterns="*" allow_evaluated_non_sitedir_paths="0" dir dirs=() enabled_PYTHON_ABI enabled_PYTHON_ABIS evaluated_dirs=() evaluated_files=() exit_status file files=() iterated_PYTHON_ABIS options=() other_dirs=() other_files=() previous_PYTHON_ABI="${PYTHON_ABI}" root site_packages_dirs=() site_packages_files=() stderr stderr_line stderr_lines=();
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if has "${EAPI:-0}" 0 1 2 3 && [[ -z "${PYTHON_ABIS}" ]]; then
                die "${FUNCNAME}(): python_pkg_setup() or python_execute_function() not called";
            fi;
            enabled_PYTHON_ABIS="${PYTHON_ABIS}";
        else
            if has "${EAPI:-0}" 0 1 2 3; then
                enabled_PYTHON_ABIS="${PYTHON_ABI:=$(PYTHON --ABI)}";
            else
                enabled_PYTHON_ABIS="${PYTHON_ABI}";
            fi;
        fi;
        root="${EROOT%/}";
        while (($#)); do
            case "$1" in 
                -A | --ABIs-patterns)
                    ABIs_patterns="$2";
                    shift
                ;;
                --allow-evaluated-non-sitedir-paths)
                    allow_evaluated_non_sitedir_paths="1"
                ;;
                -l | -f | -q)
                    options+=("$1")
                ;;
                -d | -x)
                    options+=("$1" "$2");
                    shift
                ;;
                --)
                    shift;
                    break
                ;;
                -*)
                    die "${FUNCNAME}(): Unrecognized option '$1'"
                ;;
                *)
                    break
                ;;
            esac;
            shift;
        done;
        if [[ "${allow_evaluated_non_sitedir_paths}" == "1" ]] && ! _python_package_supporting_installation_for_multiple_python_abis; then
            die "${FUNCNAME}(): '--allow-evaluated-non-sitedir-paths' option cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
        fi;
        if [[ "$#" -eq 0 ]]; then
            die "${FUNCNAME}(): Missing files or directories";
        fi;
        for enabled_PYTHON_ABI in ${enabled_PYTHON_ABIS};
        do
            if _python_check_python_abi_matching --patterns-list "${enabled_PYTHON_ABI}" "${ABIs_patterns}"; then
                iterated_PYTHON_ABIS+="${iterated_PYTHON_ABIS:+ }${enabled_PYTHON_ABI}";
            fi;
        done;
        while (($#)); do
            if [[ "$1" =~ ^($|(\.|\.\.|/)($|/)) ]]; then
                die "${FUNCNAME}(): Invalid argument '$1'";
            else
                if ! _python_implementation && [[ "$1" =~ ^/usr/lib(32|64)?/python[[:digit:]]+\.[[:digit:]]+ ]]; then
                    die "${FUNCNAME}(): Paths of directories / files in site-packages directories must be relative to site-packages directories";
                else
                    if [[ "$1" =~ ^/ ]]; then
                        if _python_package_supporting_installation_for_multiple_python_abis; then
                            if [[ "${allow_evaluated_non_sitedir_paths}" != "1" ]]; then
                                die "${FUNCNAME}(): Absolute paths cannot be used in ebuilds of packages supporting installation for multiple Python ABIs";
                            fi;
                            if [[ "$1" != *\$* ]]; then
                                die "${FUNCNAME}(): '$1' has invalid syntax";
                            fi;
                            if [[ -n "${iterated_PYTHON_ABIS}" ]]; then
                                if [[ "$1" == *.py ]]; then
                                    evaluated_files+=("$1");
                                else
                                    evaluated_dirs+=("$1");
                                fi;
                            fi;
                        else
                            if [[ -n "${iterated_PYTHON_ABIS}" ]]; then
                                if [[ -d "${root}$1" ]]; then
                                    other_dirs+=("${root}$1");
                                else
                                    if [[ -f "${root}$1" ]]; then
                                        other_files+=("${root}$1");
                                    else
                                        if [[ -e "${root}$1" ]]; then
                                            eerror "${FUNCNAME}(): '${root}$1' is not a regular file or a directory";
                                        else
                                            eerror "${FUNCNAME}(): '${root}$1' does not exist";
                                        fi;
                                    fi;
                                fi;
                            fi;
                        fi;
                    else
                        for PYTHON_ABI in ${iterated_PYTHON_ABIS};
                        do
                            if [[ -d "${root}$(python_get_sitedir)/$1" ]]; then
                                site_packages_dirs+=("$1");
                                break;
                            else
                                if [[ -f "${root}$(python_get_sitedir)/$1" ]]; then
                                    site_packages_files+=("$1");
                                    break;
                                else
                                    if [[ -e "${root}$(python_get_sitedir)/$1" ]]; then
                                        eerror "${FUNCNAME}(): '$1' is not a regular file or a directory";
                                    else
                                        eerror "${FUNCNAME}(): '$1' does not exist";
                                    fi;
                                fi;
                            fi;
                        done;
                    fi;
                fi;
            fi;
            shift;
        done;
        options+=("-q");
        for PYTHON_ABI in ${iterated_PYTHON_ABIS};
        do
            if ((${#site_packages_dirs[@]})) || ((${#site_packages_files[@]})) || ((${#evaluated_dirs[@]})) || ((${#evaluated_files[@]})); then
                exit_status="0";
                stderr="";
                stderr_lines=();
                ebegin "Compilation and optimization of Python modules for $(python_get_implementation_and_version)";
                if ((${#site_packages_dirs[@]})) || ((${#evaluated_dirs[@]})); then
                    for dir in "${site_packages_dirs[@]}";
                    do
                        dirs+=("${root}$(python_get_sitedir)/${dir}");
                    done;
                    for dir in "${evaluated_dirs[@]}";
                    do
                        eval "dirs+=(\"\${root}${dir}\")";
                    done;
                    stderr+="${stderr:+
}$("$(PYTHON)" -m compileall "${options[@]}" "${dirs[@]}" 2>&1)" || exit_status="1";
                    if ! has "$(_python_get_implementation "${PYTHON_ABI}")" Jython PyPy; then
                        "$(PYTHON)" -O -m compileall "${options[@]}" "${dirs[@]}" &>/dev/null || exit_status="1";
                    fi;
                    _python_clean_compiled_modules "${dirs[@]}";
                fi;
                if ((${#site_packages_files[@]})) || ((${#evaluated_files[@]})); then
                    for file in "${site_packages_files[@]}";
                    do
                        files+=("${root}$(python_get_sitedir)/${file}");
                    done;
                    for file in "${evaluated_files[@]}";
                    do
                        eval "files+=(\"\${root}${file}\")";
                    done;
                    stderr+="${stderr:+
}$("$(PYTHON)" -m py_compile "${files[@]}" 2>&1)" || exit_status="1";
                    if ! has "$(_python_get_implementation "${PYTHON_ABI}")" Jython PyPy; then
                        "$(PYTHON)" -O -m py_compile "${files[@]}" &>/dev/null || exit_status="1";
                    fi;
                    _python_clean_compiled_modules "${files[@]}";
                fi;
                eend "${exit_status}";
                if [[ -n "${stderr}" ]]; then
                    while read stderr_line; do
                        if [[ ! ( "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" && "${stderr_line}" =~ ^"*sys-package-mgr*: processing "(new|modified)" jar" ) ]]; then
                            stderr_lines+=("${stderr_line}");
                        fi;
                    done <<< "${stderr}";
                    if [[ "${#stderr_lines[@]}" -ge 1 ]]; then
                        eerror "Syntax errors / warnings in Python modules for $(python_get_implementation_and_version):" &>/dev/null;
                        for stderr_line in "${stderr_lines[@]}";
                        do
                            eerror "    ${stderr_line}";
                        done;
                    fi;
                fi;
            fi;
            unset dirs files;
        done;
        if _python_package_supporting_installation_for_multiple_python_abis; then
            if [[ -n "${previous_PYTHON_ABI}" ]]; then
                PYTHON_ABI="${previous_PYTHON_ABI}";
            else
                unset PYTHON_ABI;
            fi;
        fi;
        if ((${#other_dirs[@]})) || ((${#other_files[@]})); then
            exit_status="0";
            stderr="";
            stderr_lines=();
            ebegin "Compilation and optimization of Python modules placed outside of site-packages directories for $(python_get_implementation_and_version)";
            if ((${#other_dirs[@]})); then
                stderr+="${stderr:+
}$("$(PYTHON ${PYTHON_ABI})" -m compileall "${options[@]}" "${other_dirs[@]}" 2>&1)" || exit_status="1";
                if ! has "$(_python_get_implementation "${PYTHON_ABI}")" Jython PyPy; then
                    "$(PYTHON ${PYTHON_ABI})" -O -m compileall "${options[@]}" "${other_dirs[@]}" &>/dev/null || exit_status="1";
                fi;
                _python_clean_compiled_modules "${other_dirs[@]}";
            fi;
            if ((${#other_files[@]})); then
                stderr+="${stderr:+
}$("$(PYTHON ${PYTHON_ABI})" -m py_compile "${other_files[@]}" 2>&1)" || exit_status="1";
                if ! has "$(_python_get_implementation "${PYTHON_ABI}")" Jython PyPy; then
                    "$(PYTHON ${PYTHON_ABI})" -O -m py_compile "${other_files[@]}" &>/dev/null || exit_status="1";
                fi;
                _python_clean_compiled_modules "${other_files[@]}";
            fi;
            eend "${exit_status}";
            if [[ -n "${stderr}" ]]; then
                while read stderr_line; do
                    if [[ ! ( "$(_python_get_implementation "${PYTHON_ABI}")" == "Jython" && "${stderr_line}" =~ ^"*sys-package-mgr*: processing "(new|modified)" jar" ) ]]; then
                        stderr_lines+=("${stderr_line}");
                    fi;
                done <<< "${stderr}";
                if [[ "${#stderr_lines[@]}" -ge 1 ]]; then
                    eerror "Syntax errors / warnings in Python modules placed outside of site-packages directories for $(python_get_implementation_and_version):" &>/dev/null;
                    for stderr_line in "${stderr_lines[@]}";
                    do
                        eerror "    ${stderr_line}";
                    done;
                fi;
            fi;
        fi;
    else
        ewarn;
        ewarn "Deprecation Warning: Usage of ${FUNCNAME}() in packages not supporting installation";
        ewarn "for multiple Python ABIs in EAPI <=2 is deprecated and will be disallowed on 2011-08-01.";
        ewarn "Use EAPI >=3 and call ${FUNCNAME}() with paths having appropriate syntax.";
        ewarn "The ebuild needs to be fixed. Please report a bug, if it has not been already reported.";
        ewarn;
        local myroot mydirs=() myfiles=() myopts=() return_code="0";
        myroot="${EROOT%/}";
        while (($#)); do
            case "$1" in 
                -l | -f | -q)
                    myopts+=("$1")
                ;;
                -d | -x)
                    myopts+=("$1" "$2");
                    shift
                ;;
                --)
                    shift;
                    break
                ;;
                -*)
                    die "${FUNCNAME}(): Unrecognized option '$1'"
                ;;
                *)
                    break
                ;;
            esac;
            shift;
        done;
        if [[ "$#" -eq 0 ]]; then
            die "${FUNCNAME}(): Missing files or directories";
        fi;
        while (($#)); do
            if [[ "$1" =~ ^($|(\.|\.\.|/)($|/)) ]]; then
                die "${FUNCNAME}(): Invalid argument '$1'";
            else
                if [[ -d "${myroot}/${1#/}" ]]; then
                    mydirs+=("${myroot}/${1#/}");
                else
                    if [[ -f "${myroot}/${1#/}" ]]; then
                        myfiles+=("${myroot}/${1#/}");
                    else
                        if [[ -e "${myroot}/${1#/}" ]]; then
                            eerror "${FUNCNAME}(): ${myroot}/${1#/} is not a regular file or directory";
                        else
                            eerror "${FUNCNAME}(): ${myroot}/${1#/} does not exist";
                        fi;
                    fi;
                fi;
            fi;
            shift;
        done;
        myopts+=(-q);
        PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
        ebegin "Compilation and optimization of Python modules for $(python_get_implementation) $(python_get_version)";
        if ((${#mydirs[@]})); then
            "$(PYTHON ${PYTHON_ABI})" "${myroot}$(python_get_libdir)/compileall.py" "${myopts[@]}" "${mydirs[@]}" || return_code="1";
            "$(PYTHON ${PYTHON_ABI})" -O "${myroot}$(python_get_libdir)/compileall.py" "${myopts[@]}" "${mydirs[@]}" &>/dev/null || return_code="1";
            _python_clean_compiled_modules "${mydirs[@]}";
        fi;
        if ((${#myfiles[@]})); then
            "$(PYTHON ${PYTHON_ABI})" "${myroot}$(python_get_libdir)/py_compile.py" "${myfiles[@]}" || return_code="1";
            "$(PYTHON ${PYTHON_ABI})" -O "${myroot}$(python_get_libdir)/py_compile.py" "${myfiles[@]}" &>/dev/null || return_code="1";
            _python_clean_compiled_modules "${myfiles[@]}";
        fi;
        eend "${return_code}";
    fi
}
python_need_rebuild () 
{ 
    if _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    if [[ "$#" -ne 0 ]]; then
        die "${FUNCNAME}() does not accept arguments";
    fi;
    export PYTHON_NEED_REBUILD="$(PYTHON --ABI)"
}
python_pkg_setup () 
{ 
    if [[ "${EBUILD_PHASE}" != "setup" ]]; then
        die "${FUNCNAME}() can be used only in pkg_setup() phase";
    fi;
    if [[ "$#" -ne 0 ]]; then
        die "${FUNCNAME}() does not accept arguments";
    fi;
    _python_prepare_jython;
    if _python_package_supporting_installation_for_multiple_python_abis; then
        _python_calculate_PYTHON_ABIS;
        export EPYTHON="$(PYTHON -f)";
    else
        PYTHON_ABI="${PYTHON_ABI:-$(PYTHON --ABI)}";
    fi;
    if { 
        has "${EAPI:-0}" 2 3 || { 
            has "${EAPI:-0}" 4 5 && has "${PYTHON_ECLASS_API}" 0
        }
    } && [[ -n "${PYTHON_USE_WITH}" || -n "${PYTHON_USE_WITH_OR}" ]]; then
        if [[ -n "${PYTHON_USE_WITH_OPT}" ]]; then
            if [[ "${PYTHON_USE_WITH_OPT}" == !* ]]; then
                use ${PYTHON_USE_WITH_OPT#!} && return;
            else
                use !${PYTHON_USE_WITH_OPT} && return;
            fi;
        fi;
        function python_pkg_setup_check_USE_flags () 
        { 
            local python_atom USE_flag;
            python_atom="$(python_get_implementational_package)";
            for USE_flag in ${PYTHON_USE_WITH};
            do
                if ! has_version "${python_atom}[${USE_flag}]"; then
                    eerror "Please rebuild ${python_atom} with the following USE flags enabled: ${PYTHON_USE_WITH}";
                    die "Please rebuild ${python_atom} with the following USE flags enabled: ${PYTHON_USE_WITH}";
                fi;
            done;
            for USE_flag in ${PYTHON_USE_WITH_OR};
            do
                if has_version "${python_atom}[${USE_flag}]"; then
                    return;
                fi;
            done;
            if [[ -n ${PYTHON_USE_WITH_OR} ]]; then
                eerror "Please rebuild ${python_atom} with at least one of the following USE flags enabled: ${PYTHON_USE_WITH_OR}";
                die "Please rebuild ${python_atom} with at least one of the following USE flags enabled: ${PYTHON_USE_WITH_OR}";
            fi
        };
        if _python_package_supporting_installation_for_multiple_python_abis; then
            PYTHON_SKIP_SANITY_CHECKS="1" python_execute_function -q python_pkg_setup_check_USE_flags;
        else
            python_pkg_setup_check_USE_flags;
        fi;
        unset -f python_pkg_setup_check_USE_flags;
    fi;
    if { 
        has "${EAPI:-0}" 4 5 && ! has "${PYTHON_ECLASS_API}" 0
    } || { 
        ! has "${EAPI:-0}" 0 1 2 3 4 5 && ! _python_package_supporting_installation_for_multiple_python_abis
    }; then
        function python_pkg_setup_check_USE_flags () 
        { 
            ROOT="/" eval "${_PYTHON_USE_FLAGS_CHECKS_CODE}";
            if [[ "${ROOT}" != "/" ]] && _python_check_run-time_dependency; then
                eval "${_PYTHON_USE_FLAGS_CHECKS_CODE}";
            fi
        };
        if _python_package_supporting_installation_for_multiple_python_abis; then
            PYTHON_SKIP_SANITY_CHECKS="1" python_execute_function -q python_pkg_setup_check_USE_flags;
        else
            python_pkg_setup_check_USE_flags;
        fi;
        unset -f python_pkg_setup_check_USE_flags;
    fi;
    PYTHON_PKG_SETUP_EXECUTED="1"
}
python_set_active_version () 
{ 
    if [[ "${EBUILD_PHASE}" != "setup" ]]; then
        die "${FUNCNAME}() can be used only in pkg_setup() phase";
    fi;
    if _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages supporting installation for multiple Python ABIs";
    fi;
    if [[ "$#" -ne 1 ]]; then
        die "${FUNCNAME}() requires 1 argument";
    fi;
    _python_initial_sanity_checks;
    if [[ -z "${PYTHON_ABI}" ]]; then
        if [[ -n "$(_python_get_implementation --ignore-invalid "$1")" ]]; then
            PYTHON_ABI="$1";
            if ! _python_implementation; then
                if ! ROOT="/" has_version "$(python_get_implementational_package)"; then
                    die "${FUNCNAME}(): '$(python_get_implementational_package)' not installed in ROOT=\"/\"";
                fi;
                if [[ "${ROOT}" != "/" ]] && _python_check_run-time_dependency; then
                    if ! has_version "$(python_get_implementational_package)"; then
                        die "${FUNCNAME}(): '$(python_get_implementational_package)' not installed in ROOT=\"${ROOT}\"";
                    fi;
                fi;
            fi;
            export EPYTHON="$(PYTHON "$1")";
        else
            if [[ "$1" == "2" ]]; then
                if ! _python_implementation; then
                    if ! ROOT="/" has_version "=dev-lang/python-2*"; then
                        die "${FUNCNAME}(): '=dev-lang/python-2*' not installed in ROOT=\"/\"";
                    fi;
                    if [[ "${ROOT}" != "/" ]] && _python_check_run-time_dependency; then
                        if ! has_version "=dev-lang/python-2*"; then
                            die "${FUNCNAME}(): '=dev-lang/python-2*' not installed in ROOT=\"${ROOT}\"";
                        fi;
                    fi;
                fi;
                export EPYTHON="$(PYTHON -2)";
                PYTHON_ABI="${EPYTHON#python}";
                PYTHON_ABI="${PYTHON_ABI%%-*}";
            else
                if [[ "$1" == "3" ]]; then
                    if ! _python_implementation; then
                        if ! ROOT="/" has_version "=dev-lang/python-3*"; then
                            die "${FUNCNAME}(): '=dev-lang/python-3*' not installed ROOT=\"/\"";
                        fi;
                        if [[ "${ROOT}" != "/" ]] && _python_check_run-time_dependency; then
                            if ! has_version "=dev-lang/python-3*"; then
                                die "${FUNCNAME}(): '=dev-lang/python-3*' not installed ROOT=\"${ROOT}\"";
                            fi;
                        fi;
                    fi;
                    export EPYTHON="$(PYTHON -3)";
                    PYTHON_ABI="${EPYTHON#python}";
                    PYTHON_ABI="${PYTHON_ABI%%-*}";
                else
                    die "${FUNCNAME}(): Unrecognized argument '$1'";
                fi;
            fi;
        fi;
    fi;
    _python_final_sanity_checks;
    PYTHON_REQUESTED_ACTIVE_VERSION="$1"
}
python_src_compile () 
{ 
    if [[ "${EBUILD_PHASE}" != "compile" ]]; then
        die "${FUNCNAME}() can be used only in src_compile() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    python_execute_function -d -s -- "$@"
}
python_src_configure () 
{ 
    if [[ "${EBUILD_PHASE}" != "configure" ]]; then
        die "${FUNCNAME}() can be used only in src_configure() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    python_execute_function -d -s -- "$@"
}
python_src_install () 
{ 
    if [[ "${EBUILD_PHASE}" != "install" ]]; then
        die "${FUNCNAME}() can be used only in src_install() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    if has "${EAPI:-0}" 0 1 2 3; then
        python_execute_function -d -s -- "$@";
    else
        function python_installation () 
        { 
            python_execute ${MAKE:-make} ${MAKEOPTS} ${EXTRA_EMAKE} DESTDIR="${T}/images/${PYTHON_ABI}" install "$@"
        };
        python_execute_function -s python_installation "$@";
        unset -f python_installation;
        python_merge_intermediate_installation_images "${T}/images";
    fi
}
python_src_prepare () 
{ 
    if [[ "${EBUILD_PHASE}" != "prepare" ]]; then
        die "${FUNCNAME}() can be used only in src_prepare() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    if [[ "$#" -ne 0 ]]; then
        die "${FUNCNAME}() does not accept arguments";
    fi;
    python_copy_sources
}
python_src_test () 
{ 
    if [[ "${EBUILD_PHASE}" != "test" ]]; then
        die "${FUNCNAME}() can be used only in src_test() phase";
    fi;
    if ! _python_package_supporting_installation_for_multiple_python_abis; then
        die "${FUNCNAME}() cannot be used in ebuilds of packages not supporting installation for multiple Python ABIs";
    fi;
    _python_check_python_pkg_setup_execution;
    python_execute_function -d -s -- "$@"
}
src_compile () 
{ 
    emake || die
}
src_configure () 
{ 
    ./configure --shared-v8 --prefix="${EPREFIX}"/usr --shared-v8-includes="${EPREFIX}"/usr/include --openssl-use-sys --shared-zlib || die
}
src_install () 
{ 
    mkdir -p "${ED}"/usr/include/node;
    mkdir -p "${ED}"/usr/bin;
    mkdir -p "${ED}"/lib/node_modules/npm;
    mkdir -p "${ED}"/lib/node;
    cp 'src/node.h' 'src/node_buffer.h' 'src/node_object_wrap.h' 'src/node_version.h' "${ED}"/usr/include/node || die "Failed to copy stuff";
    cp 'deps/uv/include/ares.h' 'deps/uv/include/ares_version.h' "${ED}"/usr/include/node || die "Failed to copy stuff";
    cp 'out/Release/node' "${ED}"/usr/bin/node || die "Failed to copy stuff";
    cp -R deps/npm/* "${ED}"/lib/node_modules/npm || die "Failed to copy stuff";
    cp -R tools/wafadmin "${ED}"/lib/node/ || die "Failed to copy stuff";
    cp 'tools/node-waf' "${ED}"/usr/bin/ || die "Failed to copy stuff";
    dosym /lib/node_modules/npm/bin/npm-cli.js /bin/npm
}
src_prepare () 
{ 
    sed -i -e "/append('-arch/d" tools/gyp/pylib/gyp/xcode_emulation.py || die;
    sed -i -e 's:wafdir = join(prefix, "lib", "node"):wafdir = "/lib/node/":' tools/node-waf || die;
    cd ${S};
    for x in $(grep -r "/usr/bin/env python" * | cut -f1 -d":" );
    do
        einfo "Tweaking $x for python2...";
        sed -e "s:/usr/bin/env python:/usr/bin/env python2:g" -i $x || die;
    done;
    sed -e "s/python/python2/g" -i Makefile || die
}
src_test () 
{ 
    emake test || die
}
src_unpack () 
{ 
    __eapi0_src_unpack "$@"
}
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-endian () 
{ 
    local host=$1;
    [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
    host=${host%%-*};
    case ${host} in 
        alpha*)
            echo big
        ;;
        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*)
            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}'";
        eval tc-get${var} > /dev/null;
    done
}
tc-export_build_env () 
{ 
    tc-export "$@";
    : ${BUILD_CFLAGS:=-O1 -pipe};
    : ${BUILD_CXXFLAGS:=-O1 -pipe};
    : ${BUILD_CPPFLAGS:=};
    : ${BUILD_LDFLAGS:=};
    export BUILD_{C,CXX,CPP,LD}FLAGS
}
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 cpp "$@"
}
tc-getBUILD_CXX () 
{ 
    tc-getBUILD_PROG CXX g++ "$@"
}
tc-getBUILD_LD () 
{ 
    tc-getBUILD_PROG LD ld "$@"
}
tc-getBUILD_NM () 
{ 
    tc-getBUILD_PROG NM nm "$@"
}
tc-getBUILD_OBJCOPY () 
{ 
    tc-getBUILD_PROG OBJCOPY objcopy "$@"
}
tc-getBUILD_PKG_CONFIG () 
{ 
    tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
}
tc-getBUILD_PROG () 
{ 
    _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
}
tc-getBUILD_RANLIB () 
{ 
    tc-getBUILD_PROG RANLIB ranlib "$@"
}
tc-getBUILD_STRIP () 
{ 
    tc-getBUILD_PROG STRIP strip "$@"
}
tc-getCC () 
{ 
    tc-getPROG CC gcc "$@"
}
tc-getCPP () 
{ 
    tc-getPROG CPP cpp "$@"
}
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-getLD () 
{ 
    tc-getPROG LD ld "$@"
}
tc-getNM () 
{ 
    tc-getPROG NM nm "$@"
}
tc-getOBJCOPY () 
{ 
    tc-getPROG OBJCOPY objcopy "$@"
}
tc-getPKG_CONFIG () 
{ 
    tc-getPROG PKG_CONFIG pkg-config "$@"
}
tc-getPROG () 
{ 
    _tc-getPROG CHOST "$@"
}
tc-getRANLIB () 
{ 
    tc-getPROG RANLIB ranlib "$@"
}
tc-getRC () 
{ 
    tc-getPROG RC windres "$@"
}
tc-getSTRIP () 
{ 
    tc-getPROG STRIP strip "$@"
}
tc-has-openmp () 
{ 
    local base="${T}/test-tc-openmp";
    cat > "${base}.c"  <<-EOF
#include <omp.h>
int main() {
int nthreads, tid, ret = 0;
#pragma omp parallel private(nthreads, tid)
{
tid = omp_get_thread_num();
nthreads = omp_get_num_threads(); ret += tid + nthreads;
}
return ret;
}
EOF

    $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &>/dev/null;
    local ret=$?;
    rm -f "${base}"*;
    return ${ret}
}
tc-has-tls () 
{ 
    local base="${T}/test-tc-tls";
    cat > "${base}.c"  <<-EOF
int foo(int *i) {
static __thread int j = 0;
return *i ? j : *i;
}
EOF

    local flags;
    case $1 in 
        -s)
            flags="-S"
        ;;
        -c)
            flags="-c"
        ;;
        -l)

        ;;
        -*)
            die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
        ;;
    esac;
    : ${flags:=-fPIC -shared -Wl,-z,defs};
    [[ $1 == -* ]] && shift;
    $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &>/dev/null;
    local ret=$?;
    rm -f "${base}"*;
    return ${ret}
}
tc-is-cross-compiler () 
{ 
    return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
}
tc-is-softfloat () 
{ 
    local CTARGET=${CTARGET:-${CHOST}};
    case ${CTARGET} in 
        bfin* | h8300*)
            echo "only"
        ;;
        *)
            if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then
                echo "yes";
            else
                if [[ ${CTARGET//_/-} == *-softfp-* ]]; then
                    echo "softfp";
                else
                    echo "no";
                fi;
            fi
        ;;
    esac
}
tc-is-static-only () 
{ 
    local host=${CTARGET:-${CHOST}};
    return $([[ ${host} == *-mint* ]])
}
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 
        alpha*)
            echo alpha
        ;;
        arm*)
            echo arm
        ;;
        avr*)
            ninj avr32 avr
        ;;
        bfin*)
            ninj blackfin bfin
        ;;
        cris*)
            echo cris
        ;;
        hppa*)
            ninj parisc hppa
        ;;
        i?86*)
            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
                echo i386;
            else
                echo x86;
            fi
        ;;
        ia64*)
            echo ia64
        ;;
        m68*)
            echo m68k
        ;;
        mips*)
            echo mips
        ;;
        nios2*)
            echo nios2
        ;;
        nios*)
            echo nios
        ;;
        powerpc*)
            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
                echo powerpc;
            else
                if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]]; then
                    if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
                        echo powerpc;
                    else
                        echo ppc;
                    fi;
                else
                    if [[ ${host} == powerpc64* ]]; then
                        echo ppc64;
                    else
                        if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
                            ninj ppc64 ppc;
                        else
                            echo ppc;
                        fi;
                    fi;
                fi;
            fi
        ;;
        s390*)
            echo s390
        ;;
        sh64*)
            ninj sh64 sh
        ;;
        sh*)
            echo sh
        ;;
        sparc64*)
            ninj sparc64 sparc
        ;;
        sparc*)
            [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
        ;;
        vax*)
            echo vax
        ;;
        x86_64*freebsd*)
            echo amd64
        ;;
        x86_64*)
            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
                echo x86;
            else
                ninj x86_64 amd64;
            fi
        ;;
        *)
            echo unknown
        ;;
    esac
}
use_if_iuse () 
{ 
    in_iuse $1 || return 1;
    use $1
}
validate_desktop_entries () 
{ 
    if [[ -x /usr/bin/desktop-file-validate ]]; then
        einfo "Checking desktop entry validity";
        local directories="";
        for d in /usr/share/applications $@;
        do
            [[ -d ${D}${d} ]] && directories="${directories} ${D}${d}";
        done;
        if [[ -n ${directories} ]]; then
            for FILE in $(find ${directories} -name "*\.desktop" 							-not -path '*.hidden*' | sort -u 2>/dev/null);
            do
                local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | 								sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
                [[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:};
            done;
        fi;
        echo "";
    else
        einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
    fi
}

Offline

#2 2013-03-31 06:29:49

stieizc
New member
Registered: 2013-03-25
Posts: 3

Re: nodejs error compiling

Hi! I'm also having trouble compiling nodejs-0.80, on a i5 machine.
Here's the complete build log.
http://bpaste.net/show/87901

It seems that there's a bug in the source code.

Offline

#3 2013-03-31 08:38:56

mateuo
Member
Registered: 2011-06-10
Posts: 25

Re: nodejs error compiling

yes, the same for me.

sad

Offline

#4 2013-04-06 22:03:44

mateuo
Member
Registered: 2011-06-10
Posts: 25

Re: nodejs error compiling

Solved.
I don't know why but this are my movements.
First emerge --sync

then change /etc/portage/package.accept_keywords and add:
>net-libs/nodejs-0.8.0
and then /etc/portage/package.unmask
>net-libs/nodejs-0.8.0

maybe this is not important but I did before (due to a restriction of other package) add to /etc/make.conf the flag opus

and then
emerge -uDN world

Good luck

Last edited by mateuo (2013-04-06 22:04:20)

Offline

Board footer

Powered by FluxBB