Command: emerge --info '=dev-python/numexpr-2.1' Output: Portage 2.1.11.62 (default/linux/amd64/13.0/desktop/kde, gcc-4.6.3, glibc-2.15-r3, 3.7.10-gentoo-r1 x86_64) ================================================================= System Settings ================================================================= System uname: Linux-3.7.10-gentoo-r1-x86_64-Intel-R-_Core-TM-_i5-2557M_CPU_@_1.70GHz-with-gentoo-2.2 KiB Mem: 3951076 total, 291456 free KiB Swap: 8388604 total, 8282404 free Timestamp of tree: Tue, 28 May 2013 19:45:01 +0000 ld GNU ld (GNU Binutils) 2.22 app-shells/bash: 4.2_p45 dev-java/java-config: 2.1.12-r1 dev-lang/python: 2.7.3-r3, 3.2.3-r2 dev-util/cmake: 2.8.10.2-r2 dev-util/pkgconfig: 0.28 sys-apps/baselayout: 2.2 sys-apps/openrc: 0.11.8 sys-apps/sandbox: 2.5 sys-devel/autoconf: 2.13, 2.69 sys-devel/automake: 1.10.3, 1.11.6, 1.12.6 sys-devel/binutils: 2.22-r1 sys-devel/gcc: 4.6.3 sys-devel/gcc-config: 1.7.3 sys-devel/libtool: 2.4-r1 sys-devel/make: 3.82-r4 sys-kernel/linux-headers: 3.7 (virtual/os-headers) sys-libs/glibc: 2.15-r3 Repositories: gentoo x-portage ACCEPT_KEYWORDS="amd64" ACCEPT_LICENSE="* -@EULA" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-march=corei7 -O2 -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /usr/share/polkit-1/actions" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.4/ext-active/ /etc/php/cgi-php5.4/ext-active/ /etc/php/cli-php5.4/ext-active/ /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" CXXFLAGS="-march=corei7 -O2 -pipe" DISTDIR="/usr/portage/distfiles" FCFLAGS="-O2 -pipe" FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch" FFLAGS="-O2 -pipe" GENTOO_MIRRORS="ftp://mirror.iawnet.sandia.gov/pub/gentoo/ http://mirror.iawnet.sandia.gov/gentoo/ http://ftp.ucsb.edu/pub/mirrors/linux/gentoo/ ftp://ftp.ucsb.edu/pub/mirrors/linux/gentoo/ http://mirror.usu.edu/mirrors/gentoo/" LANG="en_US" LDFLAGS="-Wl,-O1 -Wl,--as-needed" MAKEOPTS="-j5" PKGDIR="/usr/portage/packages" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/usr/local/portage" SYNC="rsync://rsync3.us.gentoo.org/gentoo-portage" USE="X a52 aac acl acpi alsa amd64 apache2 bash-completion berkdb bluetooth branding bzip2 cairo cdda cdr cli consolekit cracklib crypt cups cxx dbus declarative dri dts dvd dvdr emacs emboss encode exif fam ffmpeg firefox flac fortran gd gdbm gif gimp gpm gtk hdf5 iconv icu inotify ipv6 jpeg jpeg2k kde kerberos kipi latex lcms ldap libnotify mad mmx mng modules mp3 mp4 mpeg mpi mplayer mtp mudflap multilib ncurses nls nptl ogg openexr opengl openmp pam pango pcre pdf phonon plasma png policykit ppds python qt3support qt4 raw readline samba scanner sdl semantic-desktop session smp spell sqlite3 sse sse2 sse4 ssl startup-notification subversion svg tcpd theora tiff truetype udev udisks unicode upower usb v4l vorbis wifi wxwidgets x264 xcb xcomposite xft xinerama xml xscreensaver xv xvid 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="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" 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 mouse keyboard synaptics" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-3" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_2" RUBY_TARGETS="ruby18 ruby19" USERLAND="GNU" VIDEO_CARDS="fbdev glint intel mach64 mga nouveau nv r128 radeon savage sis tdfx trident vesa via vmware dummy v4l" 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, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON Command: emerge -pqv '=dev-python/numexpr-2.1' Output: [ebuild N ] dev-python/numexpr-2.1 USE="-mkl" PYTHON_TARGETS="python2_7 python3_2 -python2_6 -python3_3" Command: cat /var/tmp/portage/dev-python/numexpr-2.1/temp/build.log Output:  * Package: dev-python/numexpr-2.1  * Repository: gentoo  * Maintainer: timcera@earthlink.net python@gentoo.org,proxy-maint@gentoo.org,sci@gentoo.org  * USE: amd64 elibc_glibc kernel_linux python_targets_python2_7 python_targets_python3_2 userland_GNU  * FEATURES: preserve-libs sandbox >>> Unpacking source... >>> Unpacking numexpr-2.1.tar.gz to /var/tmp/portage/dev-python/numexpr-2.1/work >>> Source unpacked in /var/tmp/portage/dev-python/numexpr-2.1/work >>> Preparing source in /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1 ... >>> Source prepared. >>> Configuring source in /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1 ... >>> Source configured. >>> Compiling source in /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1 ... * python3_2: running distutils-r1_run_phase distutils-r1_python_compile * python2_7: running distutils-r1_run_phase distutils-r1_python_compile /usr/bin/python2.7 setup.py build --build-base /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7 --build-platlib /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib --build-purelib /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib --build-scripts /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/scripts egg_info --egg-base /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7 /usr/bin/python3.2 setup.py build --build-base /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2 --build-platlib /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib --build-purelib /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib --build-scripts /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/scripts egg_info --egg-base /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2 Warning: Assuming default configuration (numexpr/tests/{setup_tests,setup}.py was not found)Appending numexpr.tests configuration to numexpr Ignoring attempt to set 'name' (from 'numexpr' to 'numexpr.tests') running build running config_cc unifing config_cc, config, build_clib, build_ext, build commands --compiler options running config_fc unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options running build_src build_src building py_modules sources creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7 creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/src.linux-x86_64-2.7 creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/src.linux-x86_64-2.7/numexpr building extension "numexpr.interpreter" sources build_src: building npy-pkg config files running build_py creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr copying numexpr/cpuinfo.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr copying numexpr/expressions.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr copying numexpr/version.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr copying numexpr/necompiler.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr copying numexpr/utils.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr copying numexpr/__init__.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr copying /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/src.linux-x86_64-2.7/numexpr/__config__.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr/tests copying ./numexpr/tests/test_numexpr.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr/tests copying ./numexpr/tests/__init__.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/lib/numexpr/tests warning: build_py: byte-compiling is disabled, skipping. running build_ext customize UnixCCompiler customize UnixCCompiler using build_ext customize UnixCCompiler customize UnixCCompiler using build_ext building 'numexpr.interpreter' extension compiling C++ sources C compiler: x86_64-pc-linux-gnu-g++ -pthread -march=corei7 -O2 -pipe -fPIC creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/temp.linux-x86_64-2.7 creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python2_7/temp.linux-x86_64-2.7/numexpr compile options: '-I/usr/lib64/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c' extra options: '-funroll-all-loops' x86_64-pc-linux-gnu-g++: numexpr/module.cpp Appending numexpr.tests configuration to numexpr Ignoring attempt to set 'name' (from 'numexpr' to 'numexpr.tests') running build running config_cc unifing config_cc, config, build_clib, build_ext, build commands --compiler options running config_fc unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options running build_src build_src building py_modules sources creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2 creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/src.linux-x86_64-3.2 creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/src.linux-x86_64-3.2/numexpr building extension "numexpr.interpreter" sources build_src: building npy-pkg config files running build_py creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr copying numexpr/cpuinfo.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr copying numexpr/expressions.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr copying numexpr/version.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr copying numexpr/necompiler.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr copying numexpr/utils.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr copying numexpr/__init__.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr copying /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/src.linux-x86_64-3.2/numexpr/__config__.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr/tests copying ./numexpr/tests/test_numexpr.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr/tests copying ./numexpr/tests/__init__.py -> /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/lib/numexpr/tests Skipping implicit fixer: buffer Skipping implicit fixer: idioms Skipping implicit fixer: set_literal Skipping implicit fixer: ws_comma x86_64-pc-linux-gnu-g++: numexpr/numexpr_object.cpp numexpr/numexpr_object.cpp: In function 'int NumExpr_init(NumExprObject*, PyObject*, PyObject*)': numexpr/numexpr_object.cpp:99:49: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:99:49: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:99:49: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:99:49: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:99:49: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp: At global scope: numexpr/numexpr_object.cpp:370:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:370:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:370:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:370:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:370:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:370:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] numexpr/numexpr_object.cpp:370:1: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] x86_64-pc-linux-gnu-g++: numexpr/interpreter.cpp numexpr/interpreter.cpp: In function 'int run_interpreter(NumExprObject*, NpyIter*, NpyIter*, bool, bool, int*)': numexpr/interpreter.cpp:789:22: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] warning: build_py: byte-compiling is disabled, skipping. running build_ext customize UnixCCompiler customize UnixCCompiler using build_ext customize UnixCCompiler customize UnixCCompiler using build_ext building 'numexpr.interpreter' extension compiling C++ sources C compiler: x86_64-pc-linux-gnu-g++ -pthread -march=corei7 -O2 -pipe -fPIC creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/temp.linux-x86_64-3.2 creating /var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1-python3_2/temp.linux-x86_64-3.2/numexpr compile options: '-I/usr/lib64/python3.2/site-packages/numpy/core/include -I/usr/include/python3.2 -c' extra options: '-funroll-all-loops' x86_64-pc-linux-gnu-g++: numexpr/numexpr_object.cpp Warning: Assuming default configuration (numexpr/tests/{setup_tests,setup}.py was not found)Traceback (most recent call last): File "setup.py", line 209, in setup_package() File "setup.py", line 194, in setup_package **extra_setup_opts File "/usr/lib64/python3.2/site-packages/numpy/distutils/core.py", line 186, in setup return old_setup(**new_attr) File "/usr/lib64/python3.2/distutils/core.py", line 148, in setup dist.run_commands() File "/usr/lib64/python3.2/distutils/dist.py", line 917, in run_commands self.run_command(cmd) File "/usr/lib64/python3.2/distutils/dist.py", line 936, in run_command cmd_obj.run() File "/usr/lib64/python3.2/site-packages/numpy/distutils/command/build.py", line 37, in run old_build.run(self) File "/usr/lib64/python3.2/distutils/command/build.py", line 126, in run self.run_command(cmd_name) File "/usr/lib64/python3.2/distutils/cmd.py", line 313, in run_command self.distribution.run_command(command) File "/usr/lib64/python3.2/distutils/dist.py", line 936, in run_command cmd_obj.run() File "/usr/lib64/python3.2/site-packages/numpy/distutils/command/build_ext.py", line 232, in run self.build_extensions() File "/usr/lib64/python3.2/distutils/command/build_ext.py", line 453, in build_extensions self.build_extension(ext) File "setup.py", line 206, in build_extension numpy_build_ext.build_extension(self, ext) File "/usr/lib64/python3.2/site-packages/numpy/distutils/command/build_ext.py", line 345, in build_extension **kws) File "/usr/lib64/python3.2/site-packages/numpy/distutils/ccompiler.py", line 26, in m = lambda self, *args, **kw: func(self, *args, **kw) File "/usr/lib64/python3.2/site-packages/numpy/distutils/ccompiler.py", line 203, in CCompiler_compile self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts) File "/usr/lib64/python3.2/site-packages/numpy/distutils/ccompiler.py", line 26, in m = lambda self, *args, **kw: func(self, *args, **kw) File "/usr/lib64/python3.2/site-packages/numpy/distutils/unixccompiler.py", line 35, in UnixCCompiler__compile extra_postargs, display = display) File "/usr/lib64/python3.2/site-packages/numpy/distutils/ccompiler.py", line 26, in m = lambda self, *args, **kw: func(self, *args, **kw) File "/usr/lib64/python3.2/site-packages/numpy/distutils/ccompiler.py", line 57, in CCompiler_spawn s,o = exec_command(cmd) File "/usr/lib64/python3.2/site-packages/numpy/distutils/exec_command.py", line 197, in exec_command if _with_python and (0 or sys.__stdout__.fileno()==-1): ValueError: underlying buffer has been detached * ERROR: dev-python/numexpr-2.1 failed (compile phase): * (no error message) * * Call stack: * ebuild.sh, line 93: Called src_compile * environment, line 3316: Called distutils-r1_src_compile * environment, line 896: Called _distutils-r1_run_foreach_impl 'distutils-r1_python_compile' * environment, line 224: Called python_parallel_foreach_impl 'distutils-r1_run_phase' 'distutils-r1_python_compile' * environment, line 3188: Called multibuild_parallel_foreach_variant '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'distutils-r1_python_compile' * environment, line 2455: Called multibuild_foreach_variant '_multibuild_parallel' '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'distutils-r1_python_compile' * environment, line 2403: Called _multibuild_run '_multibuild_parallel' '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'distutils-r1_python_compile' * environment, line 2401: Called _multibuild_parallel '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'distutils-r1_python_compile' * environment, line 2446: Called _python_multibuild_wrapper 'distutils-r1_run_phase' 'distutils-r1_python_compile' * environment, line 567: Called distutils-r1_run_phase 'distutils-r1_python_compile' * environment, line 885: Called distutils-r1_python_compile * environment, line 789: Called esetup.py * environment, line 1658: Called die * The specific snippet of code: * "${@}" || die * * If you need support, post the output of `emerge --info '=dev-python/numexpr-2.1'`, * the complete build log and the output of `emerge -pqv '=dev-python/numexpr-2.1'`. * The complete build log is located at '/var/tmp/portage/dev-python/numexpr-2.1/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/dev-python/numexpr-2.1/temp/environment'. * Working directory: '/var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1' * S: '/var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1'  * The ebuild phase 'compile' with pid 11930 appears to have left an orphan  * process running in the background. Command: cat /var/tmp/portage/dev-python/numexpr-2.1/temp/environment Output: declare -x ABI="amd64" declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" declare -x 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 APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" declare -x ARCH="amd64" declare -x BOOTSTRAP_USE="cxx unicode python_targets_python3_2 python_targets_python2_7 multilib" declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" declare -x CAMERAS="ptp2" declare -x CBUILD="x86_64-pc-linux-gnu" declare -x CFLAGS="-march=corei7 -O2 -pipe" declare -x CFLAGS_amd64="-m64" declare -x CFLAGS_default declare -x CFLAGS_x32="-mx32" declare -x CFLAGS_x86="-m32" declare -x CHOST="x86_64-pc-linux-gnu" declare -x CHOST_amd64="x86_64-pc-linux-gnu" declare -x CHOST_default="x86_64-pc-linux-gnu" declare -x CHOST_x32="x86_64-pc-linux-gnux32" declare -x CHOST_x86="i686-pc-linux-gnu" declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" declare -x CTARGET_default="x86_64-pc-linux-gnu" declare -x CXXFLAGS="-march=corei7 -O2 -pipe" declare -x DEFAULT_ABI="amd64" declare -x DEFINED_PHASES=" compile configure install prepare test" declare DEPEND="dev-python/numpy[python_targets_python2_6(-)?,python_targets_python2_7(-)?,python_targets_python3_2(-)?,python_targets_python3_3(-)?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)] mkl? ( sci-libs/mkl ) dev-python/setuptools[python_targets_python2_6(-)?,python_targets_python2_7(-)?,python_targets_python3_2(-)?,python_targets_python3_3(-)?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)] python_targets_python2_6? ( dev-lang/python:2.6 ) python_targets_python2_7? ( dev-lang/python:2.7 ) python_targets_python3_2? ( dev-lang/python:3.2 ) python_targets_python3_3? ( dev-lang/python:3.3 ) dev-python/python-exec[python_targets_python2_6(-)?,python_targets_python2_7(-)?,python_targets_python3_2(-)?,python_targets_python3_3(-)?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)]" declare DESCRIPTION="Fast numerical array expression evaluator for Python and NumPy." declare -x DESTTREE="/usr" declare -x DIROPTIONS="-m0755" declare -a DOCS='([0]="ANNOUNCE.txt" [1]="AUTHORS.txt" [2]="README.txt" [3]="RELEASE_NOTES.txt")' declare -x EAPI="5" 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/dev-python/numexpr-2.1/work/patch" declare -- EPATCH_SUFFIX="patch.bz2" declare -x EXEOPTIONS="-m0755" declare -x FCFLAGS="-O2 -pipe" declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\"" declare -x FFLAGS="-O2 -pipe" declare -x GCC_SPECS="" 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 HDEPEND="" declare HOMEPAGE="http://code.google.com/p/numexpr/ http://pypi.python.org/pypi/numexpr" declare -x INHERITED=" multilib toolchain-funcs user eutils multiprocessing multibuild python-utils-r1 python-r1 distutils-r1" declare -x INPUT_DEVICES="evdev mouse keyboard synaptics" declare -x INSDESTTREE="" declare -x INSOPTIONS="-m0644" declare IUSE="mkl python_targets_python2_6 python_targets_python2_7 python_targets_python3_2 python_targets_python3_3" declare -x IUSE_EFFECTIVE="alpha amd64 amd64-fbsd amd64-linux arm arm-linux elibc_AIX elibc_Cygwin elibc_Darwin elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_glibc elibc_mintlib elibc_uclibc hppa hppa-hpux ia64 ia64-hpux ia64-linux kernel_AIX kernel_Cygwin kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_Interix kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k m68k-mint mips mkl ppc ppc-aix ppc-macos ppc-openbsd ppc64 ppc64-linux prefix python_targets_python2_6 python_targets_python2_7 python_targets_python3_2 python_targets_python3_3 s390 sh sparc sparc-fbsd sparc-solaris sparc64-freebsd sparc64-solaris userland_BSD userland_GNU 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 IUSE_IMPLICIT="prefix" declare -x KERNEL="linux" declare -x KERNEL_ABI="amd64" declare -x KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" declare -x LANG="en_US" declare -x LANGUAGE="" declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" declare -x LC_COLLATE="C" declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed" declare -x LDFLAGS_amd64="-m elf_x86_64" declare -x LDFLAGS_default declare -x LDFLAGS_x32="-m elf32_x86_64" declare -x LDFLAGS_x86="-m elf_i386" declare -x LIBDIR_amd64="lib64" declare -x LIBDIR_amd64_fbsd="lib64" declare -x LIBDIR_default="lib" declare -x LIBDIR_n32="lib32" declare -x LIBDIR_n64="lib64" declare -x LIBDIR_o32="lib" declare -x LIBDIR_ppc="lib32" declare -x LIBDIR_ppc64="lib64" declare -x LIBDIR_s390="lib32" declare -x LIBDIR_s390x="lib64" declare -x LIBDIR_sparc32="lib32" declare -x LIBDIR_sparc64="lib64" declare -x LIBDIR_x32="libx32" declare -x LIBDIR_x86="lib32" declare -x LIBDIR_x86_fbsd="lib32" declare -x LIBOPTIONS="-m0644" declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" declare -x LICENSE="MIT" declare -x MAIL="/var/mail/root" declare -x MAKEOPTS="-j5" declare -x MULTILIB_ABIS="amd64 x86" declare -x MULTILIB_STRICT_DENY="64-bit.*shared object" declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib" declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev)" declare -x MULTIOSDIRS="../lib64:../lib32" declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml" declare -x OFFICE_IMPLEMENTATION="libreoffice" declare -x OPENGL_PROFILE="xorg-x11" declare -x PATH="/usr/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/gcc-bin/4.6.3:/usr/x86_64-pc-linux-gnu/mingw32/gcc-bin/4.7.2" declare PDEPEND="" declare -x PHP_TARGETS="php5-3" 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/numexpr-2.1/html")' 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/lib64/paraview-3.98:/usr/lib64/paraview-3.98/site-packages" declare -a PYTHON_COMPAT='([0]="python2_6" [1]="python2_7" [2]="python3_2" [3]="python3_3")' declare -- PYTHON_DEPS="python_targets_python2_6? ( dev-lang/python:2.6 ) python_targets_python2_7? ( dev-lang/python:2.7 ) python_targets_python3_2? ( dev-lang/python:3.2 ) python_targets_python3_3? ( dev-lang/python:3.3 ) dev-python/python-exec[python_targets_python2_6(-)?,python_targets_python2_7(-)?,python_targets_python3_2(-)?,python_targets_python3_3(-)?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)]" declare -- PYTHON_REQUIRED_USE="|| ( python_targets_python2_6 python_targets_python2_7 python_targets_python3_2 python_targets_python3_3 )" declare -x PYTHON_SINGLE_TARGET="python2_7" declare -x PYTHON_TARGETS="python2_7 python3_2" declare -- PYTHON_USEDEP="python_targets_python2_6(-)?,python_targets_python2_7(-)?,python_targets_python3_2(-)?,python_targets_python3_3(-)?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)" declare -x QT_GRAPHICSSYSTEM="raster" declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins" declare RDEPEND="dev-python/numpy[python_targets_python2_6(-)?,python_targets_python2_7(-)?,python_targets_python3_2(-)?,python_targets_python3_3(-)?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)] mkl? ( sci-libs/mkl ) python_targets_python2_6? ( dev-lang/python:2.6 ) python_targets_python2_7? ( dev-lang/python:2.7 ) python_targets_python3_2? ( dev-lang/python:3.2 ) python_targets_python3_3? ( dev-lang/python:3.3 ) dev-python/python-exec[python_targets_python2_6(-)?,python_targets_python2_7(-)?,python_targets_python3_2(-)?,python_targets_python3_3(-)?,-python_single_target_python2_6(-),-python_single_target_python2_7(-),-python_single_target_python3_2(-),-python_single_target_python3_3(-)]" declare REPOSITORY declare REQUIRED_USE="|| ( python_targets_python2_6 python_targets_python2_7 python_targets_python3_2 python_targets_python3_3 )" declare -x RESTRICT="" 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 RUBY_TARGETS="ruby18 ruby19" declare -x R_HOME="/usr/lib64/R" declare -x S="/var/tmp/portage/dev-python/numexpr-2.1/work/numexpr-2.1" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_PID="11813" declare -x SANDBOX_PREDICT="/var/tmp/portage/dev-python/numexpr-2.1/homedir:/dev/crypto:/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/tmp:/var/tmp/:/var/tmp/portage/dev-python/numexpr-2.1/homedir/.bash_history" declare -x SLOT="0" declare SRC_URI="http://numexpr.googlecode.com/files/numexpr-2.1.tar.gz" declare -x SUDO_COMMAND="/usr/bin/emerge -NavuD pandas" declare -x SUDO_GID="1000" declare -x SUDO_UID="1000" declare -x SUDO_USER="crayzeewulf" declare -x SYMLINK_LIB="yes" declare -x USE="amd64 elibc_glibc kernel_linux python_targets_python2_7 python_targets_python3_2 userland_GNU" declare -x USERLAND="GNU" declare -x USERNAME="root" declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND" declare -x USE_EXPAND_UNPREFIXED="ARCH" declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux 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="fbdev glint intel mach64 mga nouveau nv r128 radeon savage sis tdfx trident vesa via vmware voodoo" declare -x VTKHOME="/usr" declare -x VTK_DATA_ROOT="/usr/share/vtk/data" declare -x VTK_DIR="/usr/lib64/vtk-5.10" declare -x XDG_CONFIG_DIRS="/etc/xdg" declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share" declare -x XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" declare -- _DISTUTILS_R1="1" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_="" declare -- _MULTIBUILD="1" declare -a _PYTHON_ALL_IMPLS='([0]="jython2_5" [1]="jython2_7" [2]="pypy1_9" [3]="pypy2_0" [4]="python3_1" [5]="python3_2" [6]="python3_3" [7]="python2_5" [8]="python2_6" [9]="python2_7")' declare -- _PYTHON_R1="1" declare -- _PYTHON_UTILS_R1="1" declare -- ___ECLASS_ONCE_EUTILS="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_MULTILIB="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_MULTIPROCESSING="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_TOOLCHAIN_FUNCS="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_USER="recur -_+^+_- spank" declare -- phase_func _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 } _distutils-r1_rename_scripts () { debug-print-function ${FUNCNAME} "${@}"; local path=${1}; [[ -n ${path} ]] || die "${FUNCNAME}: no path given"; local f; while IFS= read -r -d '' f; do debug-print "${FUNCNAME}: found executable at ${f#${D}/}"; local shebang; read -r shebang < "${f}"; if [[ ${shebang} == '#!'*${EPYTHON}* ]]; then debug-print "${FUNCNAME}: matching shebang: ${shebang}"; local newf=${f}-${EPYTHON}; debug-print "${FUNCNAME}: renaming to ${newf#${D}/}"; mv "${f}" "${newf}" || die; debug-print "${FUNCNAME}: installing wrapper at ${f#${D}/}"; _python_ln_rel "${path}${EPREFIX}"/usr/bin/python-exec "${f}" || die; fi; done < <(find "${path}" -type f -executable -print0) } _distutils-r1_run_common_phase () { local DISTUTILS_ORIG_BUILD_DIR=${BUILD_DIR}; if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then local MULTIBUILD_VARIANTS; _python_obtain_impls; multibuild_for_best_variant _python_multibuild_wrapper distutils-r1_run_phase "${@}"; else _distutils-r1_run_foreach_impl "${@}"; fi } _distutils-r1_run_foreach_impl () { debug-print-function ${FUNCNAME} "${@}"; set -- distutils-r1_run_phase "${@}"; if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then if [[ -n ${DISTUTILS_NO_PARALLEL_BUILD} || -n ${DISTUTILS_SINGLE_IMPL} ]]; then python_foreach_impl "${@}"; else python_parallel_foreach_impl "${@}"; fi; else if [[ ! -n ${EPYTHON} ]]; then die "EPYTHON unset, python-single-r1_pkg_setup not called?!"; fi; local BUILD_DIR=${BUILD_DIR:-${S}}; BUILD_DIR=${BUILD_DIR%%/}_${EPYTHON}; "${@}"; fi } _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 } _multijob_fork () { [[ $# -eq 1 ]] || die "incorrect number of arguments"; local ret=0; [[ $1 == "post" ]] && : $(( ++mj_num_jobs )); if [[ ${mj_num_jobs} -ge ${mj_max_jobs} ]]; then multijob_finish_one; ret=$?; fi; [[ $1 == "pre" ]] && : $(( ++mj_num_jobs )); return ${ret} } _python_check_USE_PYTHON () { debug-print-function ${FUNCNAME} "${@}"; if [[ ! -n ${_PYTHON_USE_PYTHON_CHECKED} ]]; then _PYTHON_USE_PYTHON_CHECKED=1; if [[ ${CATEGORY}/${PN} == dev-python/python-exec ]]; then return; fi; function _try_eselect () { local impl py2 py3 dis_py2 dis_py3; for impl in "${PYTHON_COMPAT[@]}"; do _python_impl_supported "${impl}" || continue; if use "python_targets_${impl}"; then case "${impl}" in python2_*) if [[ -n ${py2+1} ]]; then debug-print "${FUNCNAME}: -> more than one py2: ${py2} ${impl}"; return 1; fi; py2=${impl/_/.} ;; python3_*) if [[ -n ${py3+1} ]]; then debug-print "${FUNCNAME}: -> more than one py3: ${py3} ${impl}"; return 1; fi; py3=${impl/_/.} ;; *) return 1 ;; esac; else case "${impl}" in python2_*) dis_py2=1 ;; python3_*) dis_py3=1 ;; esac; fi; done; if [[ ! -n ${py2+1} && -n ${dis_py2} ]]; then debug-print "${FUNCNAME}: -> all py2 versions disabled"; if ! has python2_7 "${PYTHON_COMPAT[@]}"; then debug-print "${FUNCNAME}: ---> package does not support 2.7"; return 0; fi; if has_version '=dev-lang/python-2*'; then debug-print "${FUNCNAME}: ---> but =python-2* installed!"; return 1; fi; fi; if [[ ! -n ${py3+1} && -n ${dis_py3} ]]; then debug-print "${FUNCNAME}: -> all py3 versions disabled"; if ! has python3_2 "${PYTHON_COMPAT[@]}"; then debug-print "${FUNCNAME}: ---> package does not support 3.2"; return 0; fi; if has_version '=dev-lang/python-3*'; then debug-print "${FUNCNAME}: ---> but =python-3* installed!"; return 1; fi; fi; local warned; if [[ -n ${py2+1} ]]; then local sel_py2=$(eselect python show --python2); debug-print "${FUNCNAME}: -> py2 built: ${py2}, active: ${sel_py2}"; if [[ ${py2} != ${sel_py2} ]]; then ewarn "Building package for ${py2} only while ${sel_py2} is active."; ewarn "Please consider switching the active Python 2 interpreter:"; ewarn; ewarn " eselect python set --python2 ${py2}"; warned=1; fi; fi; if [[ -n ${py3+1} ]]; then local sel_py3=$(eselect python show --python3); debug-print "${FUNCNAME}: -> py3 built: ${py3}, active: ${sel_py3}"; if [[ ${py3} != ${sel_py3} ]]; then [[ -n ${warned} ]] && ewarn; ewarn "Building package for ${py3} only while ${sel_py3} is active."; ewarn "Please consider switching the active Python 3 interpreter:"; ewarn; ewarn " eselect python set --python3 ${py3}"; warned=1; fi; fi; if [[ -n ${warned} ]]; then ewarn; ewarn "Please note that after switching the active Python interpreter,"; ewarn "you may need to run 'python-updater' to rebuild affected packages."; ewarn; ewarn "For more information on python.eclass compatibility, please see"; ewarn "the appropriate python-r1 User's Guide chapter [1]."; ewarn; ewarn "[1] http://www.gentoo.org/proj/en/Python/python-r1/user-guide.xml#doc_chap2"; fi }; if [[ ! -n ${USE_PYTHON} ]]; then debug-print "${FUNCNAME}: trying eselect solution ..."; _try_eselect && return; fi; debug-print "${FUNCNAME}: trying USE_PYTHON solution ..."; debug-print "${FUNCNAME}: -> USE_PYTHON=${USE_PYTHON}"; local impl old=${USE_PYTHON} new=() removed=(); for impl in "${PYTHON_COMPAT[@]}"; do _python_impl_supported "${impl}" || continue; local abi; case "${impl}" in python*) abi=${impl#python} ;; jython*) abi=${impl#jython}-jython ;; pypy*) abi=2.7-pypy-${impl#pypy} ;; *) die "Unexpected Python implementation: ${impl}" ;; esac; abi=${abi/_/.}; has "${abi}" ${USE_PYTHON}; local has_abi=${?}; use "python_targets_${impl}"; local has_impl=${?}; if [[ ${has_abi} == 0 && ${has_impl} == 1 ]]; then debug-print "${FUNCNAME}: ---> remove ${abi}"; old=${old/${abi}/}; removed+=(${abi}); else if [[ ${has_abi} == 1 && ${has_impl} == 0 ]]; then debug-print "${FUNCNAME}: ---> add ${abi}"; new+=(${abi}); fi; fi; done; if [[ -n ${removed[@]} || -n ${new[@]} ]]; then old=(${old}); debug-print "${FUNCNAME}: -> old: ${old[@]}"; debug-print "${FUNCNAME}: -> new: ${new[@]}"; debug-print "${FUNCNAME}: -> removed: ${removed[@]}"; if [[ -n ${USE_PYTHON} ]]; then ewarn "It seems that your USE_PYTHON setting lists different Python"; ewarn "implementations than your PYTHON_TARGETS variable. Please consider"; ewarn "using the following value instead:"; ewarn; ewarn " USE_PYTHON='\033[35m${old[@]}${new[@]+ \033[1m${new[@]}}\033[0m'"; if [[ -n ${removed[@]} ]]; then ewarn; ewarn "(removed \033[31m${removed[@]}\033[0m)"; fi; else ewarn "It seems that you need to set USE_PYTHON to make sure that legacy"; ewarn "packages will be built with respect to PYTHON_TARGETS correctly:"; ewarn; ewarn " USE_PYTHON='\033[35;1m${new[@]}\033[0m'"; fi; ewarn; ewarn "Please note that after changing the USE_PYTHON variable, you may need"; ewarn "to run 'python-updater' to rebuild affected packages."; ewarn; ewarn "For more information on python.eclass compatibility, please see"; ewarn "the appropriate python-r1 User's Guide chapter [1]."; ewarn; ewarn "[1] http://www.gentoo.org/proj/en/Python/python-r1/user-guide.xml#doc_chap2"; fi; fi } _python_impl_supported () { debug-print-function ${FUNCNAME} "${@}"; [[ ${#} -eq 1 ]] || die "${FUNCNAME}: takes exactly 1 argument (impl)."; local impl=${1}; case "${impl}" in python2_[567] | python3_[123] | pypy1_9 | pypy2_0 | jython2_[57]) return 0 ;; pypy1_8) return 1 ;; *) die "Invalid implementation in PYTHON_COMPAT: ${impl}" ;; esac } _python_ln_rel () { debug-print-function ${FUNCNAME} "${@}"; local from=${1}; local to=${2}; local frpath=${from%/*}/; local topath=${to%/*}/; local rel_path=; while [[ -n ${topath} ]]; do local frseg= toseg=; while [[ ! -n ${frseg} && -n ${frpath} ]]; do frseg=${frpath%%/*}; frpath=${frpath#${frseg}/}; done; while [[ ! -n ${toseg} && -n ${topath} ]]; do toseg=${topath%%/*}; topath=${topath#${toseg}/}; done; if [[ ${frseg} != ${toseg} ]]; then rel_path=../${rel_path}${frseg:+${frseg}/}; fi; done; rel_path+=${frpath}${1##*/}; debug-print "${FUNCNAME}: ${from} -> ${to}"; debug-print "${FUNCNAME}: rel_path = ${rel_path}"; ln -fs "${rel_path}" "${to}" } _python_multibuild_wrapper () { debug-print-function ${FUNCNAME} "${@}"; local -x EPYTHON PYTHON; local -x PATH=${PATH} PKG_CONFIG_PATH=${PKG_CONFIG_PATH}; python_export "${MULTIBUILD_VARIANT}" EPYTHON PYTHON; python_wrapper_setup; "${@}" } _python_obtain_impls () { if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then if [[ ! -n ${_PYTHON_COMPAT_OVERRIDE_WARNED} ]]; then ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python"; ewarn "implementations will be enabled:"; ewarn; ewarn " ${PYTHON_COMPAT_OVERRIDE}"; ewarn; ewarn "Dependencies won't be satisfied, and PYTHON_TARGETS will be ignored."; _PYTHON_COMPAT_OVERRIDE_WARNED=1; fi; MULTIBUILD_VARIANTS=(${PYTHON_COMPAT_OVERRIDE}); return; fi; _python_validate_useflags; _python_check_USE_PYTHON; MULTIBUILD_VARIANTS=(); for impl in "${_PYTHON_ALL_IMPLS[@]}"; do if has "${impl}" "${PYTHON_COMPAT[@]}" && use "python_targets_${impl}"; then MULTIBUILD_VARIANTS+=("${impl}"); fi; done } _python_rewrite_shebang () { debug-print-function ${FUNCNAME} "${@}"; local impl; case "${1}" in python* | jython* | pypy-c*) impl=${1}; shift ;; *) impl=${EPYTHON}; [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON" ;; esac; debug-print "${FUNCNAME}: implementation: ${impl}"; local f; for f in "$@"; do local from shebang; read -r shebang < "${f}"; shebang=${shebang%' '}; debug-print "${FUNCNAME}: path = ${f}"; debug-print "${FUNCNAME}: shebang = ${shebang}"; if [[ "${shebang} " == *'python '* ]]; then from=python; else if [[ "${shebang} " == *'python2 '* ]]; then from=python2; else if [[ "${shebang} " == *'python3 '* ]]; then from=python3; else eerror "A file does not seem to have a supported shebang:"; eerror " file: ${f}"; eerror " shebang: ${shebang}"; die "${FUNCNAME}: ${f} does not seem to have a valid shebang"; fi; fi; fi; if [[ ${from} == python2 && ${impl} == python3* || ${from} == python3 && ${impl} != python3* ]]; then eerror "A file does have shebang not supporting requested impl:"; eerror " file: ${f}"; eerror " shebang: ${shebang}"; eerror " impl: ${impl}"; die "${FUNCNAME}: ${f} does have shebang not supporting ${EPYTHON}"; fi; sed -i -e "1s:${from}:${impl}:" "${f}" || die; done } _python_set_globals () { local impls=(); PYTHON_DEPS=; local i PYTHON_PKG_DEP; for i in "${PYTHON_COMPAT[@]}"; do _python_impl_supported "${i}" || continue; python_export "${i}" PYTHON_PKG_DEP; PYTHON_DEPS+="python_targets_${i}? ( ${PYTHON_PKG_DEP} ) "; impls+=("${i}"); done; if [[ ${#impls[@]} -eq 0 ]]; then die "No supported implementation in PYTHON_COMPAT."; fi; local flags=("${impls[@]/#/python_targets_}"); local optflags=${flags[@]/%/(-)?}; local flags_st=("${impls[@]/#/-python_single_target_}"); optflags+=,${flags_st[@]/%/(-)}; IUSE=${flags[*]}; PYTHON_REQUIRED_USE="|| ( ${flags[*]} )"; PYTHON_USEDEP=${optflags// /,}; PYTHON_DEPS+="dev-python/python-exec[${PYTHON_USEDEP}]" } _python_validate_useflags () { debug-print-function ${FUNCNAME} "${@}"; local i; for i in "${PYTHON_COMPAT[@]}"; do _python_impl_supported "${i}" || continue; use "python_targets_${i}" && return 0; done; eerror "No Python implementation selected for the build. Please add one"; eerror "of the following values to your PYTHON_TARGETS (in make.conf):"; eerror; eerror "${PYTHON_COMPAT[@]}"; echo; die "No supported Python implementation in PYTHON_TARGETS." } _tc-getPROG () { local tuple=$1; local v var vars=$2; local prog=$3; var=${vars%% *}; for v in ${vars}; do if [[ -n ${!v} ]]; then export ${var}="${!v}"; echo "${!v}"; return 0; fi; done; local search=; [[ -n $4 ]] && search=$(type -p "$4-${prog}"); [[ -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" } distutils-r1_python_compile () { debug-print-function ${FUNCNAME} "${@}"; esetup.py "${@}" } distutils-r1_python_configure () { debug-print-function ${FUNCNAME} "${@}"; : } distutils-r1_python_install () { debug-print-function ${FUNCNAME} "${@}"; local flags; case "${EPYTHON}" in jython*) flags=(--compile) ;; *) flags=(--compile -O2) ;; esac; debug-print "${FUNCNAME}: [${EPYTHON}] flags: ${flags}"; local PYTHONDONTWRITEBYTECODE; export PYTHONDONTWRITEBYTECODE; addpredict "$(python_get_sitedir)"; addpredict /usr/lib/portage/pym; local root=${D}/_${EPYTHON}; [[ -n ${DISTUTILS_SINGLE_IMPL} ]] && root=${D}; esetup.py install "${flags[@]}" --root="${root}" "${@}"; if [[ -d ${root}$(python_get_sitedir)/tests ]]; then die "Package installs 'tests' package, file collisions likely."; fi; if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then _distutils-r1_rename_scripts "${root}"; multibuild_merge_root "${root}" "${D}"; fi } distutils-r1_python_install_all () { debug-print-function ${FUNCNAME} "${@}"; if declare -p DOCS &>/dev/null; then if [[ -n ${DOCS[@]} ]]; then dodoc -r "${DOCS[@]}"; fi; else local f; for f in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG; do if [[ -s ${f} ]]; then dodoc "${f}"; fi; done; fi; if declare -p HTML_DOCS &>/dev/null; then dohtml -r "${HTML_DOCS[@]}"; fi; if declare -p EXAMPLES &>/dev/null; then local INSDESTTREE=/usr/share/doc/${PF}/examples; doins -r "${EXAMPLES[@]}"; docompress -x "${INSDESTTREE}"; fi } distutils-r1_python_prepare () { debug-print-function ${FUNCNAME} "${@}"; : } distutils-r1_python_prepare_all () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${PATCHES} ]] && epatch "${PATCHES[@]}"; epatch_user; if [[ ! -n ${DISTUTILS_IN_SOURCE_BUILD+1} ]]; then if declare -f python_prepare > /dev/null; then DISTUTILS_IN_SOURCE_BUILD=1; fi; fi; if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} && ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then python_copy_sources; fi } distutils-r1_python_test () { debug-print-function ${FUNCNAME} "${@}"; : } distutils-r1_run_phase () { debug-print-function ${FUNCNAME} "${@}"; if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} ]]; then if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then pushd "${BUILD_DIR}" > /dev/null || die; fi; local BUILD_DIR=${BUILD_DIR}/build; fi; local -x PYTHONPATH="${BUILD_DIR}/lib:${PYTHONPATH}"; local TMPDIR=${T}/${EPYTHON}; mkdir -p "${TMPDIR}" || die; "${@}"; if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} && ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then popd > /dev/null || die; fi } distutils-r1_src_compile () { debug-print-function ${FUNCNAME} "${@}"; if declare -f python_compile > /dev/null; then _distutils-r1_run_foreach_impl python_compile; else _distutils-r1_run_foreach_impl distutils-r1_python_compile; fi; if declare -f python_compile_all > /dev/null; then _distutils-r1_run_common_phase python_compile_all; fi } distutils-r1_src_configure () { if declare -f python_configure > /dev/null; then _distutils-r1_run_foreach_impl python_configure; fi; if declare -f python_configure_all > /dev/null; then _distutils-r1_run_common_phase python_configure_all; fi } distutils-r1_src_install () { debug-print-function ${FUNCNAME} "${@}"; if declare -f python_install > /dev/null; then _distutils-r1_run_foreach_impl python_install; else _distutils-r1_run_foreach_impl distutils-r1_python_install; fi; if declare -f python_install_all > /dev/null; then _distutils-r1_run_common_phase python_install_all; else _distutils-r1_run_common_phase distutils-r1_python_install_all; fi } distutils-r1_src_prepare () { debug-print-function ${FUNCNAME} "${@}"; if declare -f python_prepare_all > /dev/null; then python_prepare_all; else distutils-r1_python_prepare_all; fi; if declare -f python_prepare > /dev/null; then _distutils-r1_run_foreach_impl python_prepare; fi } distutils-r1_src_test () { debug-print-function ${FUNCNAME} "${@}"; if declare -f python_test > /dev/null; then _distutils-r1_run_foreach_impl python_test; fi; if declare -f python_test_all > /dev/null; then _distutils-r1_run_common_phase python_test_all; fi } distutils_install_for_testing () { debug-print-function ${FUNCNAME} "${@}"; TEST_DIR=${BUILD_DIR}/test; local bindir=${TEST_DIR}/scripts; local libdir=${TEST_DIR}/lib; PYTHONPATH=${libdir}:${PYTHONPATH}; local add_args=(install --home="${TEST_DIR}" --install-lib="${libdir}" --install-scripts="${bindir}"); if "${PYTHON:-python}" setup.py --help bdist_egg &>/dev/null; then add_args+=(bdist_egg --dist-dir="${TEST_DIR}"); fi; mkdir -p "${libdir}" || die; esetup.py "${add_args[@]}" } 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 "; 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 "; 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 "; 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 einfo " Skipping ${patchname} due to EPATCH_EXCLUDE ..."; eshopts_pop; continue 2; fi; done; for ex in ${EPATCH_USER_EXCLUDE}; do if [[ ${patchname} == ${ex} ]]; then einfo " Skipping ${patchname} due to EPATCH_USER_EXCLUDE ..."; 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 echo; eerror "Rejected Patch: ${patchname} !"; eerror " ( ${PATCH_TARGET} )"; eerror; eerror "Your patch uses relative paths '../':"; eerror "${rel_paths}"; echo; die "you need to fix the relative paths in patch"; fi; local patch_cmd; local patch="patch"; eval $(alias patch 2>/dev/null | sed 's:^alias ::'); while [[ ${count} -lt 5 ]]; do patch_cmd="${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 } esetup.py () { debug-print-function ${FUNCNAME} "${@}"; local add_args=(); if [[ -n ${BUILD_DIR} ]]; then add_args+=(build --build-base "${BUILD_DIR}" --build-platlib "${BUILD_DIR}/lib" --build-purelib "${BUILD_DIR}/lib" --build-scripts "${BUILD_DIR}/scripts"); if "${PYTHON:-python}" setup.py --help egg_info &>/dev/null; then add_args+=(egg_info --egg-base "${BUILD_DIR}"); fi; else if [[ ! -n ${DISTUTILS_IN_SOURCE_BUILD} ]]; then die 'Out-of-source build requested, yet BUILD_DIR unset.'; fi; fi; set -- "${PYTHON:-python}" setup.py "${mydistutilsargs[@]}" "${add_args[@]}" "${@}"; echo "${@}" 1>&2; "${@}" || die } 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/ /}" ] } 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} ]] } 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 } makeopts_jobs () { [[ $# -eq 0 ]] && set -- ${MAKEOPTS}; local jobs=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' -e 's:.*[[:space:]](-j|--jobs)[[:space:]].*:999:p'); echo ${jobs:-1} } multibuild_copy_sources () { debug-print-function ${FUNCNAME} "${@}"; local _MULTIBUILD_INITIAL_BUILD_DIR=${BUILD_DIR:-${S}}; einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}"; function _multibuild_create_source_copy () { einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}"; cp -pr "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die }; multibuild_foreach_variant _multibuild_create_source_copy } multibuild_for_best_variant () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set"; local MULTIBUILD_VARIANTS=("${MULTIBUILD_VARIANTS[$(( ${#MULTIBUILD_VARIANTS[@]} - 1 ))]}"); multibuild_foreach_variant "${@}" } multibuild_foreach_variant () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set"; local bdir=${BUILD_DIR:-${S}}; [[ ${bdir%%/} == ${WORKDIR%%/} ]] && bdir=${WORKDIR}/build; local prev_id=${MULTIBUILD_ID:+${MULTIBUILD_ID}-}; local ret=0 lret=0 v; debug-print "${FUNCNAME}: initial build_dir = ${bdir}"; for v in "${MULTIBUILD_VARIANTS[@]}"; do local MULTIBUILD_VARIANT=${v}; local MULTIBUILD_ID=${prev_id}${v}; local BUILD_DIR=${bdir%%/}-${v}; function _multibuild_run () { local i=1; while [[ ${!i} == _* ]]; do (( i += 1 )); done; [[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}"; "${@}" }; _multibuild_run "${@}" > >(exec tee -a "${T}/build-${MULTIBUILD_ID}.log") 2>&1; lret=${?}; done; [[ ${ret} -eq 0 && ${lret} -ne 0 ]] && ret=${lret}; return ${ret} } multibuild_merge_root () { local src=${1}; local dest=${2}; local lockfile=${T}/.multibuild_merge_lock; local lockfile_l=${lockfile}.${BASHPID}; local ret; touch "${lockfile_l}" || die; until ln "${lockfile_l}" "${lockfile}" &>/dev/null; do sleep 1; done; rm "${lockfile_l}" || die; if use userland_BSD; then tar -C "${src}" -f - -c . | tar -x -f - -C "${dest}"; [[ ${PIPESTATUS[*]} == '0 0' ]]; ret=${?}; else if use userland_GNU; then cp -a -l -n "${src}"/. "${dest}"/; ret=${?}; else die "Unsupported userland (${USERLAND}), please report."; fi; fi; rm "${lockfile}" || die; if [[ ${ret} -ne 0 ]]; then die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed."; fi; rm -rf "${src}" } multibuild_parallel_foreach_variant () { debug-print-function ${FUNCNAME} "${@}"; local ret lret; function _multibuild_parallel () { ( multijob_child_init; "${@}" ) & multijob_post_fork }; local opts; if [[ -n ${MULTIBUILD_JOBS} ]]; then opts=-j${MULTIBUILD_JOBS}; else opts=${MAKEOPTS}; fi; multijob_init "${opts}"; multibuild_foreach_variant _multibuild_parallel "${@}"; ret=${?}; multijob_finish; lret=${?}; [[ ${ret} -eq 0 ]] && ret=${lret}; return ${ret} } multijob_child_init () { local mode="pre"; case $1 in --pre) mode="pre"; shift ;; --post) mode="post"; shift ;; esac; if [[ $# -eq 0 ]]; then trap 'echo ${BASHPID} $? >&'${mj_control_fd} EXIT; trap 'exit 1' INT TERM; else local ret; [[ ${mode} == "pre" ]] && { multijob_pre_fork; ret=$? }; ( multijob_child_init; "$@" ) & [[ ${mode} == "post" ]] && { multijob_post_fork; ret=$? }; return ${ret}; fi } multijob_finish () { local ret=0; while [[ ${mj_num_jobs} -gt 0 ]]; do multijob_finish_one; : $(( ret |= $? )); done; wait; [[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments"; EBUILD_DEATH_HOOKS=${EBUILD_DEATH_HOOKS/ wait / }; return ${ret} } multijob_finish_one () { [[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments"; local pid ret; read -r -u ${mj_control_fd} pid ret || die; : $(( --mj_num_jobs )); return ${ret} } multijob_init () { has wait ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" wait "; local pipe="${T}/multijob.pipe"; mkfifo "${pipe}"; redirect_alloc_fd mj_control_fd "${pipe}"; rm -f "${pipe}"; mj_max_jobs=$(makeopts_jobs "$@"); mj_num_jobs=0 } multijob_post_fork () { _multijob_fork post "$@" } multijob_pre_fork () { _multijob_fork pre "$@" } multilib_env () { local CTARGET=${1:-${CTARGET}}; 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}"; [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v}; unset ${vv}; done; unset __DEFAULT_ABI_SAVED; fi; if [[ ${ABI} != ${DEFAULT_ABI} ]]; then for v in CHOST CBUILD AS CC CXX LD PKG_CONFIG_{LIBDIR,PATH}; do vv="__abi_saved_${v}"; [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv}; 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 } pkg_nofetch () { __eapi0_pkg_nofetch "$@" } 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 [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}; if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then continue; fi; [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed'; local reason pkgconfig_scanned; local snotlink=$(sed -n -e 's:^shouldnotlink=::p' "${f}"); if [[ ${snotlink} == yes ]]; 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_copy_sources () { debug-print-function ${FUNCNAME} "${@}"; local MULTIBUILD_VARIANTS; _python_obtain_impls; multibuild_copy_sources } python_doheader () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; local d PYTHON_INCLUDEDIR=${PYTHON_INCLUDEDIR}; [[ -n ${PYTHON_INCLUDEDIR} ]] || python_export PYTHON_INCLUDEDIR; d=${PYTHON_INCLUDEDIR#${EPREFIX}}; local INSDESTTREE; insinto "${d}"; doins -r "${@}" || die } python_domodule () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; local d; if [[ ${python_moduleroot} == /* ]]; then d=${python_moduleroot}; else local PYTHON_SITEDIR=${PYTHON_SITEDIR}; [[ -n ${PYTHON_SITEDIR} ]] || python_export PYTHON_SITEDIR; d=${PYTHON_SITEDIR#${EPREFIX}}/${python_moduleroot}; fi; local INSDESTTREE; insinto "${d}"; doins -r "${@}" || die; python_optimize "${ED}/${d}" } python_doscript () { debug-print-function ${FUNCNAME} "${@}"; local f; for f in "$@"; do python_newscript "${f}" "${f##*/}"; done } python_export () { debug-print-function ${FUNCNAME} "${@}"; local impl var; case "${1}" in python* | jython*) impl=${1/_/.}; shift ;; pypy-c*) impl=${1}; shift ;; pypy*) local v=${1#pypy}; impl=pypy-c${v/_/.}; shift ;; *) impl=${EPYTHON}; [[ -n ${impl} ]] || die "python_export: no impl nor EPYTHON" ;; esac; debug-print "${FUNCNAME}: implementation: ${impl}"; for var in "$@"; do case "${var}" in EPYTHON) export EPYTHON=${impl}; debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}" ;; PYTHON) export PYTHON=${EPREFIX}/usr/bin/${impl}; debug-print "${FUNCNAME}: PYTHON = ${PYTHON}" ;; PYTHON_SITEDIR) local dir; case "${impl}" in python*) dir=/usr/$(get_libdir)/${impl} ;; jython*) dir=/usr/share/${impl}/Lib ;; pypy*) dir=/usr/$(get_libdir)/${impl/-c/} ;; esac; export PYTHON_SITEDIR=${EPREFIX}${dir}/site-packages; debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}" ;; PYTHON_INCLUDEDIR) local dir; case "${impl}" in python*) dir=/usr/include/${impl} ;; jython*) dir=/usr/share/${impl}/Include ;; pypy*) dir=/usr/$(get_libdir)/${impl/-c/}/include ;; esac; export PYTHON_INCLUDEDIR=${EPREFIX}${dir}; debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}" ;; PYTHON_LIBPATH) local libname; case "${impl}" in python*) libname=lib${impl} ;; *) die "${impl} lacks a dynamic library" ;; esac; local path=${EPREFIX}/usr/$(get_libdir); export PYTHON_LIBPATH=${path}/${libname}$(get_libname); debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}" ;; PYTHON_CFLAGS) local val; case "${impl}" in python2.5 | python2.6) val=$("${impl}-config" --includes) ;; python*) val=$($(tc-getPKG_CONFIG) --cflags ${impl/n/n-}) ;; *) die "${impl}: obtaining ${var} not supported" ;; esac; export PYTHON_CFLAGS=${val}; debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}" ;; PYTHON_LIBS) local val; case "${impl}" in python2.5 | python2.6) val=$("${impl}-config" --libs) ;; python*) val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}) ;; *) die "${impl}: obtaining ${var} not supported" ;; esac; export PYTHON_LIBS=${val}; debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}" ;; PYTHON_PKG_DEP) local d; case ${impl} in python*) PYTHON_PKG_DEP='dev-lang/python' ;; jython*) PYTHON_PKG_DEP='dev-java/jython' ;; pypy*) PYTHON_PKG_DEP='dev-python/pypy' ;; *) die "Invalid implementation: ${impl}" ;; esac; PYTHON_PKG_DEP+=:${impl##*[a-z-]}; if [[ -n ${PYTHON_REQ_USE} ]]; then PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}]; fi; export PYTHON_PKG_DEP; debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}" ;; *) die "python_export: unknown variable ${var}" ;; esac; done } python_export_best () { debug-print-function ${FUNCNAME} "${@}"; [[ ${#} -gt 0 ]] || set -- EPYTHON PYTHON; local best MULTIBUILD_VARIANTS; _python_obtain_impls; function _python_set_best () { best=${MULTIBUILD_VARIANT} }; multibuild_for_best_variant _python_set_best; debug-print "${FUNCNAME}: Best implementation is: ${best}"; python_export "${best}" "${@}"; python_wrapper_setup } python_foreach_impl () { debug-print-function ${FUNCNAME} "${@}"; local MULTIBUILD_VARIANTS; _python_obtain_impls; multibuild_foreach_variant _python_multibuild_wrapper "${@}" } python_gen_cond_dep () { debug-print-function ${FUNCNAME} "${@}"; local impl pattern; local matches=(); local dep=${1}; shift; for impl in "${PYTHON_COMPAT[@]}"; do _python_impl_supported "${impl}" || continue; for pattern in "$@"; do if [[ ${impl} == ${pattern} ]]; then matches+=("python_targets_${impl}? ( ${dep} )"); break; fi; done; done; echo ${matches[@]} } python_gen_usedep () { debug-print-function ${FUNCNAME} "${@}"; local impl pattern; local matches=(); for impl in "${PYTHON_COMPAT[@]}"; do _python_impl_supported "${impl}" || continue; for pattern in "$@"; do if [[ ${impl} == ${pattern} ]]; then matches+=("python_targets_${impl}(-)?" "-python_single_target_${impl}(-)"); break; fi; done; done; local out=${matches[@]}; echo ${out// /,} } python_gen_useflags () { debug-print-function ${FUNCNAME} "${@}"; local impl pattern; local matches=(); for impl in "${PYTHON_COMPAT[@]}"; do _python_impl_supported "${impl}" || continue; for pattern in "$@"; do if [[ ${impl} == ${pattern} ]]; then matches+=("python_targets_${impl}"); break; fi; done; done; echo ${matches[@]} } python_get_CFLAGS () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_CFLAGS; echo "${PYTHON_CFLAGS}" } python_get_EPYTHON () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" EPYTHON; echo "${EPYTHON}" } python_get_LIBS () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_LIBS; echo "${PYTHON_LIBS}" } python_get_PYTHON () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON; echo "${PYTHON}" } python_get_includedir () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_INCLUDEDIR; echo "${PYTHON_INCLUDEDIR}" } python_get_library_path () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_LIBPATH; echo "${PYTHON_LIBPATH}" } python_get_sitedir () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_SITEDIR; echo "${PYTHON_SITEDIR}" } python_moduleinto () { debug-print-function ${FUNCNAME} "${@}"; python_moduleroot=${1} } python_newscript () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; [[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} "; local d=${python_scriptroot:-${DESTTREE}/bin}; local INSDESTTREE INSOPTIONS; insinto "${d}"; insopts -m755; local f=${1}; local barefn=${2}; local newfn=${barefn}-${EPYTHON}; debug-print "${FUNCNAME}: ${f} -> ${d}/${newfn}"; newins "${f}" "${newfn}" || die; _python_rewrite_shebang "${ED}/${d}/${newfn}"; _python_ln_rel "${ED}"/usr/bin/python-exec "${ED}/${d}/${barefn}" || die } python_optimize () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; local PYTHON=${PYTHON}; [[ -n ${PYTHON} ]] || python_export PYTHON; if [[ ${#} -eq 0 ]]; then local f; while IFS= read -r -d '' f; do if [[ ${f} == /* && -d ${D}${f} ]]; then set -- "${D}${f}" "${@}"; fi; done < <("${PYTHON}" -c 'import sys; print("\0".join(sys.path))'); debug-print "${FUNCNAME}: using sys.path: ${*/%/;}"; fi; local d; for d in "$@"; do local instpath=${d#${D}}; instpath=/${instpath##/}; case "${EPYTHON}" in python*) "${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"; "${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}" ;; *) "${PYTHON}" -m compileall -q -f -d "${instpath}" "${@}" ;; esac; done } python_parallel_foreach_impl () { debug-print-function ${FUNCNAME} "${@}"; local MULTIBUILD_JOBS=${MULTIBUILD_JOBS:-${DISTUTILS_JOBS}}; local MULTIBUILD_VARIANTS; _python_obtain_impls; multibuild_parallel_foreach_variant _python_multibuild_wrapper "${@}" } python_replicate_script () { debug-print-function ${FUNCNAME} "${@}"; local suffixes=(); function _add_suffix () { suffixes+=("${EPYTHON}") }; python_foreach_impl _add_suffix; debug-print "${FUNCNAME}: suffixes = ( ${suffixes[@]} )"; local f suffix; for suffix in "${suffixes[@]}"; do for f in "$@"; do local newf=${f}-${suffix}; debug-print "${FUNCNAME}: ${f} -> ${newf}"; cp "${f}" "${newf}" || die; done; _python_rewrite_shebang "${suffix}" "${@/%/-${suffix}}"; done; for f in "$@"; do _python_ln_rel "${ED}"/usr/bin/python-exec "${f}" || die; done } python_scriptinto () { debug-print-function ${FUNCNAME} "${@}"; python_scriptroot=${1} } python_test () { cd "${BUILD_DIR}"/lib* || die; "${PYTHON}" -c "import numexpr; numexpr.test()" || die } python_wrapper_setup () { debug-print-function ${FUNCNAME} "${@}"; local workdir=${1:-${T}/${EPYTHON}}; local impl=${2:-${EPYTHON}}; [[ -n ${workdir} ]] || die "${FUNCNAME}: no workdir specified."; [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified."; if [[ ! -x ${workdir}/bin/python ]]; then mkdir -p "${workdir}"/{bin,pkgconfig} || die; rm -f "${workdir}"/bin/python{,2,3,-config}; rm -f "${workdir}"/bin/2to3; rm -f "${workdir}"/pkgconfig/python{,2,3}.pc; local EPYTHON PYTHON; python_export "${impl}" EPYTHON PYTHON; local pyver; if [[ ${EPYTHON} == python3* ]]; then pyver=3; else pyver=2; fi; ln -s "${PYTHON}" "${workdir}"/bin/python || die; ln -s python "${workdir}"/bin/python${pyver} || die; local nonsupp=(); if [[ ${EPYTHON} == python* ]]; then ln -s "${PYTHON}-config" "${workdir}"/bin/python-config || die; if [[ ${EPYTHON} != python2.5 ]]; then ln -s "${PYTHON/python/2to3-}" "${workdir}"/bin/2to3 || die; else nonsupp+=(2to3); fi; if [[ ${EPYTHON} != python2.[56] ]]; then ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}.pc "${workdir}"/pkgconfig/python.pc || die; else ln -s /dev/null "${workdir}"/pkgconfig/python.pc || die; fi; ln -s python.pc "${workdir}"/pkgconfig/python${pyver}.pc || die; else nonsupp+=(2to3 python-config); fi; local x; for x in "${nonsupp[@]}"; do echo > "${workdir}"/bin/${x} <<__EOF__ || #!/bin/sh echo "${x} is not supported by ${EPYTHON}" >&2 exit 1 __EOF__ die chmod +x "${workdir}"/bin/${x} || die; done; if [[ ${PATH##:*} != ${workdir}/bin ]]; then PATH=${workdir}/bin${PATH:+:${PATH}}; fi; if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}; fi; export PATH PKG_CONFIG_PATH; fi } redirect_alloc_fd () { local var=$1 file=$2 redir=${3:-"<>"}; if [[ $(( (BASH_VERSINFO[0] << 8) + BASH_VERSINFO[1] )) -ge $(( (4 << 8) + 1 )) ]]; then eval "exec {${var}}${redir}'${file}'"; else local fd=10; while :; do if [[ ! -e /dev/fd/${fd} ]] && [[ ! -L /dev/fd/${fd} ]]; then eval "exec ${fd}${redir}'${file}'" && break; fi; [[ ${fd} -gt 1024 ]] && die 'could not locate a free temp fd !?'; : $(( ++fd )); done; : $(( ${var} = fd )); fi } run_in_build_dir () { debug-print-function ${FUNCNAME} "${@}"; local ret; [[ ${#} -ne 0 ]] || die "${FUNCNAME}: no command specified."; [[ -n ${BUILD_DIR} ]] || die "${FUNCNAME}: BUILD_DIR not set."; pushd "${BUILD_DIR}" > /dev/null || die; "${@}"; ret=${?}; popd > /dev/null || die; return ${ret} } src_compile () { distutils-r1_src_compile "$@" } src_configure () { distutils-r1_src_configure "$@" } src_install () { distutils-r1_src_install "$@" } src_prepare () { if use mkl; then local ext; use amd64 && ext=_lp64; cat > "${S}"/site.cfg <<-EOF [mkl] library_dirs = ${MKLROOT}/lib/em64t include_dirs = ${MKLROOT}/include mkl_libs = mkl_solver${ext}, mkl_intel${ext}, mkl_intel_thread, mkl_core, iomp5 EOF fi } src_test () { distutils-r1_src_test "$@" } 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 aarch64*be) echo big ;; aarch64) echo little ;; 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 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}}; local KV=${KV:-${KV_FULL}}; [[ ${type} == "kern" ]] && [[ -z ${KV} ]] && ewarn "QA: Kernel version could not be determined, please inherit kernel-2 or linux-info"; case ${host} in aarch64*) ninj arm64 arm ;; alpha*) echo alpha ;; arm*) echo arm ;; avr*) ninj avr32 avr ;; bfin*) ninj blackfin bfin ;; c6x) echo c6x ;; cris*) echo cris ;; frv) echo frv ;; hexagon) echo hexagon ;; hppa*) ninj parisc hppa ;; i?86*) if [[ ${type} == "kern" ]] && [[ $(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 ;; metag) echo metag ;; mips*) echo mips ;; nios2*) echo nios2 ;; nios*) echo nios ;; or32) echo openrisc ;; 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 ;; score) echo score ;; sh64*) ninj sh64 sh ;; sh*) echo sh ;; sparc64*) ninj sparc64 sparc ;; sparc*) [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc ;; tile*) echo tile ;; vax*) echo vax ;; x86_64*freebsd*) echo amd64 ;; x86_64*) if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then echo x86; else ninj x86_64 amd64; fi ;; xtensa*) echo xtensa ;; *) 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 }