public inbox for gentoo-user@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-user] How to cross compile Perl for ARM?
@ 2011-10-14 11:14 czernitko
  2011-10-14 13:34 ` Raffaele BELARDI
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: czernitko @ 2011-10-14 11:14 UTC (permalink / raw
  To: gentoo-user


[-- Attachment #1.1: Type: text/plain, Size: 1181 bytes --]

Hello!
I started playing a little bit with cross compilation for ARM architecture.
Using crossdev I created a toolchain for arm-none-linux-gnueabi tuple.
Now I'd like to emerge some more packages, but perl constantly refuses to
emerge and it is needed by many packages.
For example when running

# arm-none-linux-gnueabi-emerge -av1 perl

[ebuild  N     ] dev-lang/perl-5.12.4-r1 to /usr/arm-none-linux-gnueabi/
USE="berkdb gdbm -build -debug -doc -ithreads" 0 kB
[ebuild  N     ] app-admin/perl-cleaner-2.10 to /usr/arm-none-linux-gnueabi/
0 kB

it fails right in configure phase.
Relevant logs are attached, except for configure log which I couldn't find.

When I've read through
/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work/perl-5.12.4/Cross/README
which is aimed to give more instructions for cross compiling,
I've found out that I should run "make patch && make" from Cross directory.
Unfortunately, I've got no clue how to combine that with the whole emerge
process? I know I could compile it by hand, but then portage would not know
that perl is already installed and it would try to install it anyway...

Any help would be highly appreciated!
Peter

[-- Attachment #1.2: Type: text/html, Size: 1295 bytes --]

[-- Attachment #2: build.log --]
[-- Type: text/plain, Size: 8356 bytes --]

^[[32;01m * ^[[39;49;00mPackage:    dev-lang/perl-5.12.4-r1
^[[32;01m * ^[[39;49;00mRepository: gentoo
^[[32;01m * ^[[39;49;00mMaintainer: perl@gentoo.org
^[[32;01m * ^[[39;49;00mUSE:        arm berkdb elibc_glibc gdbm kernel_linux userland_GNU
^[[32;01m * ^[[39;49;00mFEATURES:   sandbox
>>> Unpacking source...
>>> Unpacking perl-5.12.4.tar.bz2 to /usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work
>>> Unpacking perl-5.12.4-1.tar.bz2 to /usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work
>>> Source unpacked in /usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work
>>> Preparing source in /usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work/perl-5.12.4 ...
 ^[[32;01m*^[[0m Applying various patches (bugfixes/updates) ...
 ^[[32;01m*^[[0m   0001-gentoo_MakeMaker-RUNPATH.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0002-gentoo_config__over.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0003-gentoo_cpan__definstalldirs.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0004-gentoo_cpanplus__definstalldirs.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0005-gentoo_create-libperl-soname.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0006-gentoo_MakeMaker-delete__packlist.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0007-fixes_8d66b3f9__h2hp__fix.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0008-fixes_f178b03b__h2ph__using__deprecated__goto.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0009-gentoo_mod-paths.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0010-gentoo_enc2xs.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0011-gentoo_IO-Compress__AutoLoader__dropped__from__Compress-Zlib.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m   0012-gentoo_drop-fstack-protector.diff ...
^[[A^[[184C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
 ^[[32;01m*^[[0m Done with patching
>>> Source prepared.
>>> Configuring source in /usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work/perl-5.12.4 ...
First let's make sure your kit is complete.  Checking...
Locating common programs...
Checking compatibility between /bin/echo and builtin echo (if any)...
Symbolic links are supported.
Checking how to test for symbolic links...
You can test for symbolic links with 'test -h'.
Good, your tr supports [:lower:] and [:upper:] to convert case.
Using [:upper:] and [:lower:] to convert case.
3b1   	      dos_djgpp       irix_6          openbsd       sunos_4_1   
aix   	      dragonfly       irix_6_0        opus   	    super-ux   
aix_3         dynix   	      irix_6_1        os2   	    svr4   
aix_4         dynixptx        isc   	      os390   	    svr5   
altos486      epix   	      isc_2   	      os400   	    ti1500   
amigaos       esix4   	      linux   	      posix-bc      titanos   
apollo        fps   	      lynxos          powerux       ultrix_4   
atheos        freebsd         midnightbsd     qnx   	    umips   
aux_3         genix   	      mips   	      rhapsody      unicos   
beos          gnu   	      mirbsd          riscos        unicosmk   
bsdos         gnukfreebsd     mpc   	      sco   	    unisysdynix   
catamount     gnuknetbsd      mpeix   	      sco_2_3_0     utekv   
convexos      greenhills      ncr_tower       sco_2_3_1     uts   
cxux          haiku   	      netbsd          sco_2_3_2     uwin   
cygwin        hpux   	      newsos4         sco_2_3_3     vmesa   
darwin        i386   	      next_3          sco_2_3_4     vos   
dcosx         interix         next_3_0        solaris_2   
dec_osf       irix_4          next_4          stellar   
dgux          irix_5          nonstopux       sunos_4_0   
Which of these apply, if any? [linux]  
./hints/linux.sh: line 194: ./a.out: cannot execute binary file

You don't have an ELF gcc.  I will use dld if possible.  If you are
using a version of DLD earlier than 3.2.6, or don't have it at all, you
should probably upgrade. If you are forced to use 3.2.4, you should
uncomment a couple of lines in hints/linux.sh and restart Configure so
that shared libraries will be disallowed.


Disabling ndbm.  This will generate a Whoa There message in Configure.
Read hints/linux.sh for further information.
nm: /usr/lib/libdb.so: no symbols
nm: /usr/lib64/libdb.so: no symbols
Operating system name? [linux]  
Operating system version? [3.0.4-hardened-r1]  
Installation prefix to use? (~name ok) [/usr]  
AFS does not seem to be running...
What installation prefix should I use for installing files? (~name ok)
[/usr]  
Build Perl for SOCKS? [n]  
Use the PerlIO abstraction layer? [y]  
Getting the current patchlevel...
Build a threading Perl? [n]  
Build Perl for multiplicity? [n]  
Use which C compiler? [arm-none-linux-gnueabi-gcc]  
Checking for GNU cc in disguise and/or its version number...
Configure: line 4519: ./try: cannot execute binary file
Now, how can we feed standard input to your C preprocessor...
Directories to use for library searches?
[/usr/local/lib /lib/../lib64 /usr/lib/../lib64 /lib /usr/lib /lib64 /usr/lib64 /usr/local/lib64]  
What is the file extension used for shared libraries? [sa]  
Try to use long doubles if available? [n]  
Checking for optional libraries...
What libraries to use?
[-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat]  
What optimizer/debugger flag should be used?
[-O2 -pipe -fomit-frame-pointer -I/usr/arm-none-linux-gnueabi/usr/include/ -I/usr/arm-none-linux-gnueabi/include/]  
Any additional cc flags? [-DOVR_DBL_DIG=14]  
Let me guess what the preprocessor flags are...
Any additional ld flags (NOT including libraries)?
[-L/usr/arm-none-linux-gnueabi/lib -L/usr/arm-none-linux-gnueabi/usr/lib -L/usr/local/lib]  
Checking your choice of C compiler and flags for coherency...
I've tried to compile and run the following simple program:

#include <stdio.h>
int main() { printf("Ok\n"); return(0); }

I used the command:

	arm-none-linux-gnueabi-gcc -o try -O2 -pipe -fomit-frame-pointer -I/usr/arm-none-linux-gnueabi/usr/include/ -I/usr/arm-none-linux-gnueabi/include/ -DOVR_DBL_DIG=14 -L/usr/arm-none-linux-gnueabi/lib -L/usr/arm-none-linux-gnueabi/usr/lib -L/usr/local/lib try.c -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
	 ./try

and I got the following output:

/bin/sh: ./try: cannot execute binary file
The program compiled OK, but exited with status 126.
You have a problem.  Shall I abort Configure [y]  
Ok.  Stopping Configure.
 ^[[31;01m*^[[0m ERROR: dev-lang/perl-5.12.4-r1 failed (configure phase):
 ^[[31;01m*^[[0m   Unable to configure
 ^[[31;01m*^[[0m 
 ^[[31;01m*^[[0m Call stack:
 ^[[31;01m*^[[0m     ebuild.sh, line  56:  Called src_configure
 ^[[31;01m*^[[0m   environment, line 2844:  Called die
 ^[[31;01m*^[[0m The specific snippet of code:
 ^[[31;01m*^[[0m       sh Configure -des -Duseshrplib -Darchname="${myarch}" -Dcc="$(tc-getCC)" -Doptimize="${CFLAGS}" -Dldflags="${LDFLAGS}" -Dprefix='/usr' -Dsiteprefix='/usr' -Dvendorprefix='/usr' -Dscriptdir='/usr/bin' -Dprivlib="${PRIV_LIB}" -Darchlib="${ARCH_LIB}" -Dsitelib="${SITE_LIB}" -Dsitearch="${SITE_ARCH}" -Dvendorlib="${VENDOR_LIB}" -Dvendorarch="${VENDOR_ARCH}" -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/share/man/man1 -Dsiteman3dir=/usr/share/man/man3 -Dvendorman1dir=/usr/share/man/man1 -Dvendorman3dir=/usr/share/man/man3 -Dman1ext='1' -Dman3ext='3pm' -Dlibperl="${LIBPERL}" -Dlocincpth=' ' -Duselargefiles -Dd_semctl_semun -Dcf_by='Gentoo' -Dmyhostname='localhost' -Dperladmin='root@localhost' -Dinstallusrbinperl='n' -Ud_csh -Uusenm "${myconf[@]}" || die "Unable to configure"
 ^[[31;01m*^[[0m 
 ^[[31;01m*^[[0m If you need support, post the output of 'emerge --info =dev-lang/perl-5.12.4-r1',
 ^[[31;01m*^[[0m the complete build log and the output of 'emerge -pqv =dev-lang/perl-5.12.4-r1'.
 ^[[31;01m*^[[0m The complete build log is located at '/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/temp/build.log'.
 ^[[31;01m*^[[0m The ebuild environment file is located at '/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/temp/environment'.
 ^[[31;01m*^[[0m S: '/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work/perl-5.12.4'

[-- Attachment #3: environment --]
[-- Type: application/octet-stream, Size: 118374 bytes --]

declare -x ALSA_CARDS=""
declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"
declare -x ANT_HOME="/usr/share/ant"
declare -x APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
declare -x ARCH="arm"
declare -- ARCH_LIB="/usr/lib/perl5/5.12.4/arm-linux"
declare -x BUILD_CFLAGS="-O2 -pipe -march=core2"
declare -x BUILD_CPPFLAGS=""
declare -x BUILD_CXXFLAGS="-O2 -pipe -march=core2"
declare -x CALLIGRA_FEATURES="kexi words flow plan stage tables krita karbon braindump"
declare -x CAMERAS="ptp2"
declare -x CBUILD="x86_64-pc-linux-gnu"
declare -x CFLAGS="-Os -pipe  -fomit-frame-pointer -I/usr/arm-none-linux-gnueabi/usr/include/ -I/usr/arm-none-linux-gnueabi/include/"
declare -x CFLAGS_default
declare -x CHOST="arm-none-linux-gnueabi"
declare -x CHOST_default="arm-none-linux-gnueabi"
declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
declare -x COLORFGBG="15;0"
declare -- COMMON_DEPEND="berkdb? ( sys-libs/db )
	gdbm? ( >=sys-libs/gdbm-1.8.3 )
	>=sys-devel/libperl-5.10.1
	!!<sys-devel/libperl-5.10.1
	app-arch/bzip2
	sys-libs/zlib"
declare -x CROSSCOMPILE_OPTS=""
declare -x CTARGET_default="arm-none-linux-gnueabi"
declare -x CXXFLAGS="-Os -pipe  -fomit-frame-pointer -I/usr/arm-none-linux-gnueabi/usr/include/ -I/usr/arm-none-linux-gnueabi/include/"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-tFQKypx0y0,guid=6b9a772ab67c696b835d790600000090"
declare -x DEFAULT_ABI="default"
declare -x DEFINED_PHASES=" compile configure install postinst postrm prepare setup test"
declare DEPEND="berkdb? ( sys-libs/db )
	gdbm? ( >=sys-libs/gdbm-1.8.3 )
	>=sys-devel/libperl-5.10.1
	!!<sys-devel/libperl-5.10.1
	app-arch/bzip2
	sys-libs/zlib
	elibc_FreeBSD? ( sys-freebsd/freebsd-mk-defs ) "
declare DESCRIPTION="Larry Wall's Practical Extraction and Report Language"
declare -x DESKTOP_SESSION="KDE-4"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -x DM_CONTROL="/var/run/xdmctl"
declare -x EAPI="4"
declare -x ELIBC="glibc"
declare -- EPATCH_EXCLUDE=""
declare -- EPATCH_FORCE="no"
declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
declare -- EPATCH_OPTS="-g0 -E --no-backup-if-mismatch"
declare -- EPATCH_SINGLE_MSG=""
declare -- EPATCH_SOURCE="/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work/patch"
declare -- EPATCH_SUFFIX="patch.bz2"
declare -x EXEOPTIONS="-m0755"
declare -x E_MACHINE="EM_ARM"
declare -x FCFLAGS=""
declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
declare -x FFLAGS=""
declare -x GCC_SPECS=""
declare -x GDK_USE_XFT="1"
declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx"
declare -x GRUB_PLATFORMS=""
declare -x GSETTINGS_BACKEND="gconf"
declare -x GS_LIB="/home/peta/.fonts"
declare -x GTK2_RC_FILES="/etc/gtk-2.0/gtkrc:/home/peta/.gtkrc-2.0::/home/peta/.kde4/share/config/gtkrc-2.0"
declare -x GTK_RC_FILES="/etc/gtk/gtkrc:/home/peta/.gtkrc::/home/peta/.kde4/share/config/gtkrc"
declare -x HG="/usr/bin/hg"
declare HOMEPAGE="http://www.perl.org/"
declare -x HOSTCC="x86_64-pc-linux-gnu-gcc"
declare -x INHERITED=" toolchain-funcs multilib portability eutils alternatives flag-o-matic"
declare -x INPUT_DEVICES=""
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare IUSE="berkdb build debug doc gdbm ithreads "
declare -x JAVAC="/home/peta/.gentoo/java-config-2/current-user-vm/bin/javac"
declare -x JAVACC_HOME="/usr/share/javacc/"
declare -x JAVA_HOME="/home/peta/.gentoo/java-config-2/current-user-vm"
declare -x JDK_HOME="/home/peta/.gentoo/java-config-2/current-user-vm"
declare -x KDE_FULL_SESSION="true"
declare -x KDE_MULTIHEAD="false"
declare -x KDE_SESSION_UID="1000"
declare -x KDE_SESSION_VERSION="4"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="default"
declare -x KEYWORDS="~alpha amd64 arm hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc x86 ~x86-fbsd"
declare -x KONSOLE_DBUS_SERVICE=":1.80"
declare -x KONSOLE_DBUS_SESSION="/Sessions/1"
declare -x LANG="cs_CZ.UTF-8"
declare -x LANGUAGE=""
declare -x LCD_DEVICES=""
declare -x LC_COLLATE="C"
declare -x LC_CTYPE="cs_CZ.UTF-8"
declare -x LDFLAGS="-L/usr/arm-none-linux-gnueabi/lib -L/usr/arm-none-linux-gnueabi/usr/lib"
declare -x LDFLAGS_default
declare -x LIBDIR_amd64="/usr/arm-none-linux-gnueabi/lib64"
declare -x LIBDIR_arm="/usr/arm-none-linux-gnueabi/lib"
declare -x LIBDIR_default="lib"
declare -x LIBGL_DRIVERS_PATH="/usr/lib64/dri:/usr/lib32/dri"
declare -x LIBOPTIONS="-m0644"
declare -- LIBPERL="libperl.so.5.12.4"
declare -x LICENSE="|| ( Artistic GPL-1 GPL-2 GPL-3 )"
declare -x MAKEOPTS="-j9"
declare -x MULTILIB_ABIS="default"
declare -- MY_P="perl-5.12.4"
declare -- MY_PV="5.12.4"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OPENGL_PROFILE="ati"
declare -- PATCH_VER="1"
declare -x PATH="/usr/lib64/portage/bin/ebuild-helpers/4:/usr/lib64/portage/bin/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare PDEPEND=">=app-admin/perl-cleaner-2.5 "
declare -- PERL_OLDVERSEN="5.12.3 5.12.2 5.12.1 5.12.0"
declare -x PHP_TARGETS=""
declare -x PKG_CONFIG_PATH="/usr/arm-none-linux-gnueabi/usr/lib/pkgconfig/"
declare -x PORTAGE_COMPRESS_EXCLUDE_SUFFIXES="css gif htm[l]? jp[e]?g js pdf png"
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/perl-5.12.4-r1/html")'
declare -x PRELINK_PATH_MASK="/opt:/usr/lib64/libfreebl3.so:/usr/lib64/libnssdbm3.so:/usr/lib64/libsoftokn3.so"
declare -- PRIV_LIB="/usr/lib/perl5/5.12.4"
declare -x PROFILEHOME=""
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC KERNEL USERLAND"
declare -x PROPERTIES=""
declare -x PROVIDE=""
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins:/home/peta/.kde4/lib64/kde4/plugins/:/usr/lib64/kde4/plugins/"
declare RDEPEND="berkdb? ( sys-libs/db )
	gdbm? ( >=sys-libs/gdbm-1.8.3 )
	>=sys-devel/libperl-5.10.1
	!!<sys-devel/libperl-5.10.1
	app-arch/bzip2
	sys-libs/zlib "
declare REQUIRED_USE=" "
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=""
declare -x R_HOME="/usr/lib64/R"
declare -x S="/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work/perl-5.12.4"
declare -x SANDBOX_DEBUG="0"
declare -x SANDBOX_DENY=""
declare -x SANDBOX_PID="4211"
declare -x SANDBOX_PREDICT="/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/homedir:/dev/crypto:/var/cache/fontconfig"
declare -x SANDBOX_READ="/:/dev/stdin:/usr/arm-none-linux-gnueabi/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/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/arm-none-linux-gnueabi/tmp:/usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/homedir/.bash_history:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp/"
declare -x SANE_BACKENDS=""
declare -x SESSION_MANAGER="local/gethexis:@/tmp/.ICE-unix/3108,unix/gethexis:/tmp/.ICE-unix/3108"
declare -x SHELL_SESSION_ID="cf0d373054d648979d4382b52bf90a28"
declare -- SHORT_PV="5.12"
declare -- SITE_ARCH="/usr/lib/perl5/site_perl/5.12.4/arm-linux"
declare -- SITE_LIB="/usr/lib/perl5/site_perl/5.12.4"
declare -x SLOT="0"
declare SRC_URI="
	mirror://cpan/src/perl-5.12.4.tar.bz2
	mirror://cpan/authors/id/L/LB/LBROCARD/perl-5.12.4.tar.bz2
	mirror://gentoo/perl-5.12.4-1.tar.bz2
	http://dev.gentoo.org/~tove/distfiles/dev-lang/perl/perl-5.12.4-1.tar.bz2"
declare -x SYSROOT="/usr/arm-none-linux-gnueabi"
declare -x USE="arm berkdb elibc_glibc gdbm kernel_linux userland_GNU"
declare -x USERLAND="GNU"
declare -- VENDOR_ARCH="/usr/lib/perl5/vendor_perl/5.12.4/arm-linux"
declare -- VENDOR_LIB="/usr/lib/perl5/vendor_perl/5.12.4"
declare -x VIDEO_CARDS=""
declare -x WINDOWID="27263013"
declare -x WINDOWPATH="7"
declare -x XCURSOR_THEME="Oxygen_Black"
declare -x XDG_CONFIG_DIRS="/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share"
declare -x XDG_MENU_PREFIX="kde-4-"
declare -x XDG_SESSION_COOKIE="b108067fff2a40b4bf361e2d0000000e-1318587964.537424-2070392424"
declare -x XDM_MANAGED="method=classic"
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 -- _="PKG_INSTALL_MASK"
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -- ___ECLASS_RECUR_MULTILIB="yes"
declare -- ___ECLASS_RECUR_TOOLCHAIN_FUNCS="yes"
declare -- level=""
declare -- myarch="arm-linux"
declare -- osname="linux"
declare -- patch=""
_cdrom_locate_file_on_cd () 
{ 
    local mline="";
    local showedmsg=0 showjolietmsg=0;
    while [[ -z ${CDROM_ROOT} ]]; do
        local i=0;
        local -a cdset=(${*//:/ });
        if [[ -n ${CDROM_SET} ]]; then
            cdset=(${cdset[${CDROM_SET}]});
        fi;
        while [[ -n ${cdset[${i}]} ]]; do
            local dir=$(dirname ${cdset[${i}]});
            local file=$(basename ${cdset[${i}]});
            local point= node= fs= foo=;
            while read point node fs foo; do
                [[ " cd9660 iso9660 udf " != *" ${fs} "* ]] && ! [[ ${fs} == "subfs" && ",${opts}," == *",fs=cdfss,"* ]] && continue;
                point=${point//\040/ };
                [[ ! -d ${point}/${dir} ]] && continue;
                [[ -z $(find "${point}/${dir}" -maxdepth 1 -iname "${file}") ]] && continue;
                export CDROM_ROOT=${point};
                export CDROM_SET=${i};
                export CDROM_MATCH=${cdset[${i}]};
                return;
            done <<< "$(get_mounts)";
            ((++i));
        done;
        echo;
        if [[ ${showedmsg} -eq 0 ]]; then
            if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
                if [[ -z ${CDROM_NAME} ]]; then
                    einfo "Please insert+mount the cdrom for ${PN} now !";
                else
                    einfo "Please insert+mount the ${CDROM_NAME} cdrom now !";
                fi;
            else
                if [[ -z ${CDROM_NAME_1} ]]; then
                    einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !";
                else
                    local var="CDROM_NAME_${CDROM_CURRENT_CD}";
                    einfo "Please insert+mount the ${!var} cdrom now !";
                fi;
            fi;
            showedmsg=1;
        fi;
        einfo "Press return to scan for the cd again";
        einfo "or hit CTRL+C to abort the emerge.";
        echo;
        if [[ ${showjolietmsg} -eq 0 ]]; then
            showjolietmsg=1;
        else
            ewarn "If you are having trouble with the detection";
            ewarn "of your CD, it is possible that you do not have";
            ewarn "Joliet support enabled in your kernel.  Please";
            ewarn "check that CONFIG_JOLIET is enabled in your kernel.";
            ebeep 5;
        fi;
        read || die "something is screwed with your system";
    done
}
_epatch_draw_line () 
{ 
    [[ -z $1 ]] && set "$(printf "%65s" '')";
    echo "${1//?/=}"
}
_filter-hardened () 
{ 
    local f;
    for f in "$@";
    do
        case "${f}" in 
            -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie)
                gcc-specs-pie || continue;
                is-flagq -nopie || append-flags -nopie
            ;;
            -fstack-protector)
                gcc-specs-ssp || continue;
                is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector)
            ;;
            -fstack-protector-all)
                gcc-specs-ssp-to-all || continue;
                is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all)
            ;;
            -fno-strict-overflow)
                gcc-specs-nostrict || continue;
                is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow)
            ;;
        esac;
    done
}
_filter-var () 
{ 
    local f x VAR VAL;
    declare -a new;
    VAR=$1;
    shift;
    eval VAL=\${${VAR}};
    for f in ${VAL};
    do
        for x in "$@";
        do
            [[ ${f} == ${x} ]] && continue 2;
        done;
        eval new\[\${\#new\[@]}]=\${f};
    done;
    eval export ${VAR}=\${new\[*]}
}
_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"
}
_is_flagq () 
{ 
    local x;
    for x in ${!1};
    do
        [[ ${x} == $2 ]] && return 0;
    done;
    return 1
}
_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}"
}
_unpack_tar () 
{ 
    if [ "${y}" == "tar" ]; then
        $1 -c -- "$srcdir$x" | tar xof -;
        assert_sigpipe_ok "$myfail";
    else
        local cwd_dest=${x##*/};
        cwd_dest=${cwd_dest%.*};
        $1 -c -- "${srcdir}${x}" > "${cwd_dest}" || die "$myfail";
    fi
}
alternatives_auto_makesym () 
{ 
    local SYMLINK REGEX ALT myregex;
    SYMLINK=$1;
    REGEX=$2;
    if [ "${REGEX:0:1}" != "/" ]; then
        myregex="${SYMLINK%/*}/${REGEX}";
    else
        myregex=${REGEX};
    fi;
    ALT="$(for i in $(echo ${ROOT}${myregex}); do echo ${i#${ROOT}}; done | sort -r)";
    alternatives_makesym ${SYMLINK} ${ALT}
}
alternatives_makesym () 
{ 
    local ALTERNATIVES="";
    local SYMLINK="";
    local alt pref;
    SYMLINK=$1;
    pref=$(echo ${ROOT} | sed 's:/$::');
    shift;
    ALTERNATIVES=$@;
    for alt in ${ALTERNATIVES};
    do
        if [ -f "${pref}${alt}" ]; then
            if [ "${alt%/*}" = "${SYMLINK%/*}" ]; then
                einfo "Linking ${alt} to ${pref}${SYMLINK} (relative)";
                ln -sf ${alt##*/} ${pref}${SYMLINK};
            else
                einfo "Linking ${alt} to ${pref}${SYMLINK} (absolute)";
                ln -sf ${pref}${alt} ${pref}${SYMLINK};
            fi;
            break;
        fi;
    done;
    if [ ! -L ${pref}${SYMLINK} ]; then
        ewarn "Unable to establish ${pref}${SYMLINK} symlink";
    else
        if [ ! -f "`dirname ${pref}${SYMLINK}`/`readlink ${pref}${SYMLINK}`" -a ! -f "`readlink ${pref}${SYMLINK}`" ]; then
            ewarn "Removing dead symlink ${pref}${SYMLINK}";
            rm -f ${pref}${SYMLINK};
        fi;
    fi
}
alternatives_pkg_postinst () 
{ 
    if [ -n "${ALTERNATIVES}" -a -n "${SOURCE}" ]; then
        alternatives_makesym ${SOURCE} ${ALTERNATIVES};
    fi
}
alternatives_pkg_postrm () 
{ 
    if [ -n "${ALTERNATIVES}" -a -n "${SOURCE}" ]; then
        alternatives_makesym ${SOURCE} ${ALTERNATIVES};
    fi
}
append-cflags () 
{ 
    [[ -z $* ]] && return 0;
    export CFLAGS="${CFLAGS} $*";
    return 0
}
append-cppflags () 
{ 
    [[ -z $* ]] && return 0;
    export CPPFLAGS="${CPPFLAGS} $*";
    return 0
}
append-cxxflags () 
{ 
    [[ -z $* ]] && return 0;
    export CXXFLAGS="${CXXFLAGS} $*";
    return 0
}
append-fflags () 
{ 
    [[ -z $* ]] && return 0;
    export FFLAGS="${FFLAGS} $*";
    export FCFLAGS="${FCFLAGS} $*";
    return 0
}
append-flags () 
{ 
    [[ -z $* ]] && return 0;
    append-cflags "$@";
    append-cxxflags "$@";
    append-fflags "$@";
    return 0
}
append-ldflags () 
{ 
    [[ -z $* ]] && return 0;
    local flag;
    for flag in "$@";
    do
        [[ ${flag} == -l* ]] && ewarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS";
    done;
    export LDFLAGS="${LDFLAGS} $*";
    return 0
}
append-lfs-flags () 
{ 
    [[ $# -ne 0 ]] && die "append-lfs-flags takes no arguments";
    append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
}
append-libs () 
{ 
    [[ -z $* ]] && return 0;
    local flag;
    for flag in "$@";
    do
        [[ ${flag} == -l* ]] && flag=${flag#-l};
        export LIBS="${LIBS} -l${flag}";
    done;
    return 0
}
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" ]]
}
cdrom_get_cds () 
{ 
    local cdcnt=0;
    local f=;
    for f in "$@";
    do
        ((++cdcnt));
        export CDROM_CHECK_${cdcnt}="$f";
    done;
    export CDROM_TOTAL_CDS=${cdcnt};
    export CDROM_CURRENT_CD=1;
    if [[ -n ${CD_ROOT}${CD_ROOT_1} ]]; then
        local var=;
        cdcnt=0;
        while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
            ((++cdcnt));
            var="CD_ROOT_${cdcnt}";
            [[ -z ${!var} ]] && var="CD_ROOT";
            if [[ -z ${!var} ]]; then
                eerror "You must either use just the CD_ROOT";
                eerror "or specify ALL the CD_ROOT_X variables.";
                eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables.";
                die "could not locate CD_ROOT_${cdcnt}";
            fi;
        done;
        export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}};
        einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}";
        export CDROM_SET=-1;
        for f in ${CDROM_CHECK_1//:/ };
        do
            ((++CDROM_SET));
            [[ -e ${CDROM_ROOT}/${f} ]] && break;
        done;
        export CDROM_MATCH=${f};
        return;
    fi;
    if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
        einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}";
        echo;
        einfo "If you do not have the CD, but have the data files";
        einfo "mounted somewhere on your filesystem, just export";
        einfo "the variable CD_ROOT so that it points to the";
        einfo "directory containing the files.";
        echo;
        einfo "For example:";
        einfo "export CD_ROOT=/mnt/cdrom";
        echo;
    else
        if [[ -n ${CDROM_NAME_SET} ]]; then
            cdcnt=0;
            while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
                ((++cdcnt));
                export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}";
            done;
        fi;
        einfo "This package will need access to ${CDROM_TOTAL_CDS} cds.";
        cdcnt=0;
        while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
            ((++cdcnt));
            var="CDROM_NAME_${cdcnt}";
            [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}";
        done;
        echo;
        einfo "If you do not have the CDs, but have the data files";
        einfo "mounted somewhere on your filesystem, just export";
        einfo "the following variables so they point to the right place:";
        einfon "";
        cdcnt=0;
        while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
            ((++cdcnt));
            echo -n " CD_ROOT_${cdcnt}";
        done;
        echo;
        einfo "Or, if you have all the files in the same place, or";
        einfo "you only have one cdrom, you can export CD_ROOT";
        einfo "and that place will be used as the same data source";
        einfo "for all the CDs.";
        echo;
        einfo "For example:";
        einfo "export CD_ROOT_1=/mnt/cdrom";
        echo;
    fi;
    export CDROM_SET="";
    export CDROM_CURRENT_CD=0;
    cdrom_load_next_cd
}
cdrom_load_next_cd () 
{ 
    local var;
    ((++CDROM_CURRENT_CD));
    unset CDROM_ROOT;
    var=CD_ROOT_${CDROM_CURRENT_CD};
    [[ -z ${!var} ]] && var="CD_ROOT";
    if [[ -z ${!var} ]]; then
        var="CDROM_CHECK_${CDROM_CURRENT_CD}";
        _cdrom_locate_file_on_cd ${!var};
    else
        export CDROM_ROOT=${!var};
    fi;
    einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
}
check_license () 
{ 
    local lic=$1;
    if [ -z "${lic}" ]; then
        lic="${PORTDIR}/licenses/${LICENSE}";
    else
        if [ -e "${PORTDIR}/licenses/${lic}" ]; then
            lic="${PORTDIR}/licenses/${lic}";
        else
            if [ -e "${PWD}/${lic}" ]; then
                lic="${PWD}/${lic}";
            else
                if [ -e "${lic}" ]; then
                    lic="${lic}";
                fi;
            fi;
        fi;
    fi;
    local l="`basename ${lic}`";
    local alic;
    eshopts_push -o noglob;
    for alic in ${ACCEPT_LICENSE};
    do
        if [[ ${alic} == ${l} ]]; then
            eshopts_pop;
            return 0;
        fi;
    done;
    eshopts_pop;
    [ ! -f "${lic}" ] && die "Could not find requested license ${lic}";
    local licmsg=$(emktemp);
    cat > ${licmsg}  <<-EOF
**********************************************************
The following license outlines the terms of use of this
package.  You MUST accept this license for installation to
continue.  When you are done viewing, hit 'q'.	If you
CTRL+C out of this, the install will not run!
**********************************************************

EOF

    cat ${lic} >> ${licmsg};
    ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}";
    einfon "Do you accept the terms of this license (${l})? [yes/no] ";
    read alic;
    case ${alic} in 
        yes | Yes | y | Y)
            return 0
        ;;
        *)
            echo;
            echo;
            echo;
            eerror "You MUST accept the license to continue!  Exiting!";
            die "Failed to accept license"
        ;;
    esac
}
cleaner_msg () 
{ 
    eerror "You have had multiple versions of perl. It is recommended";
    eerror "that you run perl-cleaner now. perl-cleaner will";
    eerror "assist with this transition. This script is capable";
    eerror "of cleaning out old .ph files, rebuilding modules for ";
    eerror "your new version of perl, as well as re-emerging";
    eerror "applications that compiled against your old libperl$(get_libname)";
    eerror;
    eerror "PLEASE DO NOT INTERRUPT THE RUNNING OF THIS SCRIPT.";
    eerror "Part of the rebuilding of applications compiled against ";
    eerror "your old libperl involves temporarily unmerging";
    eerror "them - interruptions could leave you with unmerged";
    eerror "packages before they can be remerged.";
    eerror "";
    eerror "If you have run perl-cleaner and a package still gives";
    eerror "you trouble, and re-emerging it fails to correct";
    eerror "the problem, please check http://bugs.gentoo.org/";
    eerror "for more information or to report a bug.";
    eerror ""
}
dlopen_lib () 
{ 
    case "${CHOST}" in 
        *-linux-gnu* | *-linux-uclibc | *-interix*)
            echo "-ldl"
        ;;
    esac
}
doicon () 
{ 
    ( local i j ret;
    insinto /usr/share/pixmaps;
    for i in "$@";
    do
        if [[ -f ${i} ]]; then
            doins "${i}";
            ((ret+=$?));
        else
            if [[ -d ${i} ]]; then
                for j in "${i}"/*.png;
                do
                    doins "${j}";
                    ((ret+=$?));
                done;
            else
                ((++ret));
            fi;
        fi;
    done;
    exit ${ret} )
}
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} )
}
dual_scripts () 
{ 
    src_remove_dual_scripts perl-core/Archive-Tar 1.54 ptar ptardiff;
    src_remove_dual_scripts perl-core/Digest-SHA 5.47 shasum;
    src_remove_dual_scripts perl-core/CPAN 1.945.600 cpan;
    src_remove_dual_scripts perl-core/CPANPLUS 0.900.0 cpanp cpan2dist cpanp-run-perl;
    src_remove_dual_scripts perl-core/Encode 2.39 enc2xs piconv;
    src_remove_dual_scripts perl-core/ExtUtils-MakeMaker 6.56 instmodsh;
    src_remove_dual_scripts perl-core/ExtUtils-ParseXS 2.210.0 xsubpp;
    src_remove_dual_scripts perl-core/Module-Build 0.3603 config_data;
    src_remove_dual_scripts perl-core/Module-CoreList 2.500.0 corelist;
    src_remove_dual_scripts perl-core/PodParser 1.370.0 pod2usage podchecker podselect;
    src_remove_dual_scripts perl-core/Test-Harness 3.17 prove;
    src_remove_dual_scripts perl-core/podlators 2.3.1 pod2man pod2text
}
dyn_pretend () 
{ 
    if [[ -e $PORTAGE_BUILDDIR/.pretended ]]; then
        vecho ">>> It appears that '$PF' is already pretended; skipping.";
        vecho ">>> Remove '$PORTAGE_BUILDDIR/.pretended' to force pretend.";
        return 0;
    fi;
    ebuild_phase pre_pkg_pretend;
    ebuild_phase pkg_pretend;
     >> "$PORTAGE_BUILDDIR/.pretended" || die "Failed to create $PORTAGE_BUILDDIR/.pretended";
    ebuild_phase post_pkg_pretend
}
ebeep () 
{ 
    ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org"
}
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 () 
{ 
    case ${CHOST} in 
        *-darwin[678])
            case "$2" in 
                *[!0-9]*)
                    nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2\$/) {print \$0;exit;} }"
                ;;
                *)
                    nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
                ;;
            esac
        ;;
        *-darwin*)
            local mytype=$1;
            [[ "passwd" == $mytype ]] && mytype="Users";
            [[ "group" == $mytype ]] && mytype="Groups";
            case "$2" in 
                *[!0-9]*)
                    dscl . -read /$mytype/$2 2> /dev/null | grep RecordName
                ;;
                *)
                    local mykey="UniqueID";
                    [[ $mytype == "Groups" ]] && mykey="PrimaryGroupID";
                    dscl . -search /$mytype $mykey $2 2> /dev/null
                ;;
            esac
        ;;
        *-freebsd* | *-dragonfly*)
            local opts action="user";
            [[ $1 == "passwd" ]] || action="group";
            if [[ $2 == [[:digit:]]* ]]; then
                [[ ${action} == "user" ]] && opts="-u" || opts="-g";
            fi;
            pw show ${action} ${opts} "$2" -q
        ;;
        *-netbsd* | *-openbsd*)
            grep "$2:\*:" /etc/$1
        ;;
        *)
            type -p nscd &>/dev/null && nscd -i "$1";
            getent "$1" "$2"
        ;;
    esac
}
egethome () 
{ 
    ent=$(egetent passwd $1);
    case ${CHOST} in 
        *-darwin* | *-freebsd* | *-dragonfly*)
            echo ${ent} | cut -d: -f9
        ;;
        *)
            echo ${ent} | cut -d: -f6
        ;;
    esac
}
egetshell () 
{ 
    ent=$(egetent passwd "$1");
    case ${CHOST} in 
        *-darwin* | *-freebsd* | *-dragonfly*)
            echo ${ent} | cut -d: -f10
        ;;
        *)
            echo ${ent} cut -d: -f7
        ;;
    esac
}
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 () 
{ 
    case ${EBUILD_PHASE} in 
        unpack | compile | test | install)
            eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
            eerror "Package fails at QA and at life.  Please file a bug.";
            die "Bad package!  enewgroup is only for use in pkg_* functions!"
        ;;
    esac;
    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 opts=;
    local egid="$1";
    shift;
    if [ ! -z "${egid}" ]; then
        if [ "${egid}" -gt 0 ]; then
            if [ -z "`egetent group ${egid}`" ]; then
                if [[ "${CHOST}" == *-darwin* ]]; then
                    opts="${opts} ${egid}";
                else
                    opts="${opts} -g ${egid}";
                fi;
            else
                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}";
    local eextra="$@";
    opts="${opts} ${eextra}";
    local oldsandbox="${SANDBOX_ON}";
    export SANDBOX_ON="0";
    case ${CHOST} in 
        *-darwin*)
            if [ ! -z "${eextra}" ]; then
                einfo "Extra options are not supported on Darwin/OS X yet";
                einfo "Please report the ebuild along with the info below";
                einfo "eextra: ${eextra}";
                die "Required function missing";
            fi;
            case ${egid} in 
                *[!0-9]*)
                    for ((egid = 101; egid <= 999; egid++))
                    do
                        [[ -z $(egetent group ${egid}) ]] && break;
                    done
                ;;
            esac;
            dscl . create /groups/${egroup} gid ${egid};
            dscl . create /groups/${egroup} passwd '*'
        ;;
        *-freebsd* | *-dragonfly*)
            case ${egid} in 
                *[!0-9]*)
                    for ((egid = 101; egid <= 999; egid++))
                    do
                        [[ -z $(egetent group ${egid}) ]] && break;
                    done
                ;;
            esac;
            pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
        ;;
        *-netbsd*)
            case ${egid} in 
                *[!0-9]*)
                    for ((egid = 101; egid <= 999; egid++))
                    do
                        [[ -z $(egetent group ${egid}) ]] && break;
                    done
                ;;
            esac;
            groupadd -g ${egid} ${egroup} || die "enewgroup failed"
        ;;
        *)
            groupadd -r ${opts} ${egroup} || die "enewgroup failed"
        ;;
    esac;
    export SANDBOX_ON="${oldsandbox}"
}
enewuser () 
{ 
    case ${EBUILD_PHASE} in 
        unpack | compile | test | install)
            eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
            eerror "Package fails at QA and at life.  Please file a bug.";
            die "Bad package!  enewuser is only for use in pkg_* functions!"
        ;;
    esac;
    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="${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 shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null;
        do
            [[ -x ${ROOT}${shell} ]] && break;
        done;
        if [[ ${shell} == "/dev/null" ]]; then
            eerror "Unable to identify the shell to use, proceeding with userland default.";
            case ${USERLAND} in 
                GNU)
                    shell="/bin/false"
                ;;
                BSD)
                    shell="/sbin/nologin"
                ;;
                Darwin)
                    shell="/usr/sbin/nologin"
                ;;
                *)
                    die "Unable to identify the default shell for userland ${USERLAND}"
                ;;
            esac;
        fi;
        eshell=${shell};
    fi;
    einfo " - Shell: ${eshell}";
    opts="${opts} -s ${eshell}";
    local ehome=$1;
    shift;
    if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then
        ehome="/dev/null";
    fi;
    einfo " - Home: ${ehome}";
    opts="${opts} -d ${ehome}";
    local egroups=$1;
    shift;
    if [[ ! -z ${egroups} ]]; then
        local oldifs=${IFS};
        local defgroup="" exgroups="";
        export IFS=",";
        for g in ${egroups};
        do
            export IFS=${oldifs};
            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="${exgroups},${g}";
            fi;
            export IFS=",";
        done;
        export IFS=${oldifs};
        opts="${opts} -g ${defgroup}";
        if [[ ! -z ${exgroups} ]]; then
            opts="${opts} -G ${exgroups:1}";
        fi;
    else
        egroups="(none)";
    fi;
    einfo " - Groups: ${egroups}";
    local oldsandbox=${SANDBOX_ON};
    export SANDBOX_ON="0";
    case ${CHOST} in 
        *-darwin*)
            if [[ -z $@ ]]; then
                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}";
                local oldifs=${IFS};
                export IFS=",";
                for g in ${egroups};
                do
                    dscl . merge /groups/${g} users ${euser};
                done;
                export IFS=${oldifs};
            else
                einfo "Extra options are not supported on Darwin yet";
                einfo "Please report the ebuild along with the info below";
                einfo "eextra: $@";
                die "Required function missing";
            fi
        ;;
        *-freebsd* | *-dragonfly*)
            if [[ -z $@ ]]; then
                pw useradd ${euser} ${opts} -c "added by portage for ${PN}" die "enewuser failed";
            else
                einfo " - Extra: $@";
                pw useradd ${euser} ${opts} "$@" || die "enewuser failed";
            fi
        ;;
        *-netbsd*)
            if [[ -z $@ ]]; then
                useradd ${opts} ${euser} || die "enewuser failed";
            else
                einfo " - Extra: $@";
                useradd ${opts} ${euser} "$@" || die "enewuser failed";
            fi
        ;;
        *-openbsd*)
            if [[ -z $@ ]]; then
                useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} || die "enewuser failed";
            else
                einfo " - Extra: $@";
                useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} "$@" || die "enewuser failed";
            fi
        ;;
        *)
            if [[ -z $@ ]]; then
                useradd -r ${opts} -c "added by portage for ${PN}" ${euser} || die "enewuser failed";
            else
                einfo " - Extra: $@";
                useradd -r ${opts} "$@" ${euser} || die "enewuser failed";
            fi
        ;;
    esac;
    if [[ ! -e ${ROOT}/${ehome} ]]; then
        einfo " - Creating ${ehome} in ${ROOT}";
        mkdir -p "${ROOT}/${ehome}";
        chown ${euser} "${ROOT}/${ehome}";
        chmod 755 "${ROOT}/${ehome}";
    fi;
    export SANDBOX_ON=${oldsandbox}
}
epatch () 
{ 
    function _epatch_draw_line () 
    { 
        [[ -z $1 ]] && set "$(printf "%65s" '')";
        echo "${1//?/=}"
    };
    unset P4CONFIG P4PORT P4USER;
    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;
    local PIPE_CMD;
    case ${EPATCH_SUFFIX##*\.} in 
        xz)
            PIPE_CMD="xz -dc"
        ;;
        lzma)
            PIPE_CMD="lzma -dc"
        ;;
        bz2)
            PIPE_CMD="bzip2 -dc"
        ;;
        gz | Z | z)
            PIPE_CMD="gzip -dc"
        ;;
        ZIP | zip)
            PIPE_CMD="unzip -p"
        ;;
        *)

        ;;
    esac;
    [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}";
    local x;
    for x in "$@";
    do
        [[ ! -f ${x} ]] && continue;
        local patchname=${x##*/};
        local a=${patchname#*_};
        a=${a%%_*};
        if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then
            continue;
        fi;
        if [[ -n ${EPATCH_EXCLUDE} ]]; then
            eshopts_push -o noglob;
            local ex;
            for ex in ${EPATCH_EXCLUDE};
            do
                if [[ ${patchname} == ${ex} ]]; then
                    eshopts_pop;
                    continue 2;
                fi;
            done;
            eshopts_pop;
        fi;
        if [[ ${SINGLE_PATCH} == "yes" ]]; then
            if [[ -n ${EPATCH_SINGLE_MSG} ]]; then
                einfo "${EPATCH_SINGLE_MSG}";
            else
                einfo "Applying ${patchname} ...";
            fi;
        else
            einfo "  ${patchname} ...";
        fi;
        local STDERR_TARGET="${T}/${patchname}.out";
        if [[ -e ${STDERR_TARGET} ]]; then
            STDERR_TARGET="${T}/${patchname}-$$.out";
        fi;
        printf "***** %s *****\n\n" "${patchname}" > "${STDERR_TARGET}";
        local count=0;
        local PATCH_TARGET;
        if [[ -n ${PIPE_CMD} ]]; then
            PATCH_TARGET="${T}/$$.patch";
            echo "PIPE_COMMAND:  ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}";
            if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then
                echo;
                eerror "Could not extract patch!";
                count=5;
                break;
            fi;
        else
            PATCH_TARGET=${x};
        fi;
        local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
        if [[ -n ${abs_paths} ]]; then
            count=1;
            printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}";
        fi;
        local rel_paths=$(egrep -n '^[-+]{3} [^	]*[.][.]/' "${PATCH_TARGET}");
        if [[ -n ${rel_paths} ]]; then
            eqawarn "QA Notice: Your patch uses relative paths '../'.";
            eqawarn " In the future this will cause a failure.";
            eqawarn "${rel_paths}";
        fi;
        while [[ ${count} -lt 5 ]]; do
            ( _epatch_draw_line "***** ${patchname} *****";
            echo;
            echo "PATCH COMMAND:  patch -p${count} ${EPATCH_OPTS} < '${PATCH_TARGET}'";
            echo;
            _epatch_draw_line "***** ${patchname} *****";
            patch -p${count} ${EPATCH_OPTS} --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 -p${count} ${EPATCH_OPTS} < "${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}";
        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.applied";
    [[ -e ${applied} ]] && return 2;
    local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
    for check in {${CATEGORY}/${PF},${CATEGORY}/${P},${CATEGORY}/${PN}};
    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;
    find "${dir}" -name configure | while read f; do
        patch --no-backup-if-mismatch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null;
    done;
    eend 0
}
eshopts_pop () 
{ 
    [[ $# -ne 0 ]] && die "eshopts_pop takes no arguments";
    local i=$(( ${#__ESHOPTS_SAVE__[@]} - 1 ));
    [[ ${i} -eq -1 ]] && die "eshopts_{push,pop}: unbalanced pair";
    local s=${__ESHOPTS_SAVE__[$i]};
    unset __ESHOPTS_SAVE__[$i];
    if [[ ${s} == "shopt -"* ]]; then
        eval "${s}" || die "eshopts_pop: sanity: invalid shopt options: ${s}";
    else
        set +$- || die "eshopts_pop: sanity: invalid shell settings: $-";
        set -${s} || die "eshopts_pop: sanity: unable to restore saved shell settings: ${s}";
    fi
}
eshopts_push () 
{ 
    local i=${#__ESHOPTS_SAVE__[@]};
    if [[ $1 == -[su] ]]; then
        __ESHOPTS_SAVE__[$i]=$(shopt -p);
        [[ $# -eq 0 ]] && return 0;
        shopt "$@" || die "eshopts_push: bad options to shopt: $*";
    else
        __ESHOPTS_SAVE__[$i]=$-;
        [[ $# -eq 0 ]] && return 0;
        set "$@" || die "eshopts_push: bad options to set: $*";
    fi
}
esvn_clean () 
{ 
    [[ -z $* ]] && set -- .;
    find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
}
filter-flags () 
{ 
    _filter-hardened "$@";
    _filter-var CFLAGS "$@";
    _filter-var CPPFLAGS "$@";
    _filter-var CXXFLAGS "$@";
    _filter-var FFLAGS "$@";
    _filter-var FCFLAGS "$@";
    return 0
}
filter-ldflags () 
{ 
    _filter-var LDFLAGS "$@";
    return 0
}
filter-lfs-flags () 
{ 
    [[ $# -ne 0 ]] && die "filter-lfs-flags takes no arguments";
    filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
}
filter-mfpmath () 
{ 
    local orig_mfpmath new_math prune_math;
    orig_mfpmath=$(get-flag -mfpmath);
    new_math=$(get-flag mfpmath);
    new_math=" ${new_math//,/ } ";
    prune_math="";
    for prune_math in "$@";
    do
        new_math=${new_math/ ${prune_math} / };
    done;
    new_math=$(echo ${new_math});
    new_math=${new_math// /,};
    if [[ -z ${new_math} ]]; then
        filter-flags ${orig_mfpmath};
    else
        replace-flags ${orig_mfpmath} -mfpmath=${new_math};
    fi;
    return 0
}
find_unpackable_file () 
{ 
    local src=$1;
    if [[ -z ${src} ]]; then
        src=${DISTDIR}/${A};
    else
        if [[ -e ${DISTDIR}/${src} ]]; then
            src=${DISTDIR}/${src};
        else
            if [[ -e ${PWD}/${src} ]]; then
                src=${PWD}/${src};
            else
                if [[ -e ${src} ]]; then
                    src=${src};
                fi;
            fi;
        fi;
    fi;
    [[ ! -e ${src} ]] && return 1;
    echo "${src}"
}
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;
    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
            ;;
            *-aix* | *-irix* | *64*-hpux* | *-interix* | *-winnt*)
                if ${auto}; then
                    mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
                    tlib=$(readlink "${ED}"/${libdir}/${lib});
                    tlib=${tlib##*/};
                    if [[ -z ${tlib} ]]; then
                        tlib=${lib};
                    else
                        rm -f "${ED}"/${libdir}/${lib};
                    fi;
                else
                    tlib=${lib};
                fi;
                pushd "${ED}/usr/${libdir}" > /dev/null;
                ln -snf "../../${libdir}/${tlib}" "${lib}";
                popd > /dev/null
            ;;
            hppa*-hpux*)
                if ${auto}; then
                    tlib=$(chatr "${ED}"/usr/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}');
                    [[ -z ${tlib} ]] && tlib=${lib};
                    tlib=${tlib##*/};
                    mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
                    if [[ ${tlib} != ${lib}* ]]; then
                        mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
                    fi;
                    [[ ${tlib} != ${lib} ]] && rm -f "${ED}"/${libdir}/${lib};
                else
                    tlib=$(chatr "${ED}"/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}');
                    [[ -z ${tlib} ]] && tlib=${lib};
                    tlib=${tlib##*/};
                fi;
                pushd "${ED}"/usr/${libdir} > /dev/null;
                ln -snf "../../${libdir}/${tlib}" "${lib}";
                [[ ${tlib} != ${lib} ]] && ln -snf "../../${libdir}/${tlib}" "${tlib}";
                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-flag () 
{ 
    local f findflag="$1";
    for f in ${CFLAGS} ${CXXFLAGS} ${FFLAGS} ${FCFLAGS};
    do
        if [ "${f/${findflag}}" != "${f}" ]; then
            printf "%s\n" "${f/-${findflag}=}";
            return 0;
        fi;
    done;
    return 1
}
get_abi_ASFLAGS () 
{ 
    get_abi_var ASFLAGS "$@"
}
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;
    if [ $# -gt 1 ]; then
        abi=${2};
    else
        if [ -n "${ABI}" ]; then
            abi=${ABI};
        else
            if [ -n "${DEFAULT_ABI}" ]; then
                abi=${DEFAULT_ABI};
            else
                abi="default";
            fi;
        fi;
    fi;
    local var="${flag}_${abi}";
    echo ${!var}
}
get_all_abis () 
{ 
    local order="";
    if [[ -z ${MULTILIB_ABIS} ]]; then
        echo "default";
        return 0;
    fi;
    for x in ${MULTILIB_ABIS};
    do
        if [[ ${x} != ${DEFAULT_ABI} ]]; then
            order="${order:+${order} }${x}";
        fi;
    done;
    order="${order:+${order} }${DEFAULT_ABI}";
    echo ${order};
    return 0
}
get_all_libdirs () 
{ 
    local libdirs;
    local abi;
    local dir;
    for abi in ${MULTILIB_ABIS};
    do
        libdirs+=" $(get_abi_LIBDIR ${abi})";
    done;
    [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
    echo "${libdirs}"
}
get_bmake () 
{ 
    if [[ ${USERLAND} == *BSD ]]; then
        echo make;
    else
        if [[ ${USERLAND} == "Darwin" ]]; then
            echo bsdmake;
        else
            echo pmake;
        fi;
    fi
}
get_install_abis () 
{ 
    local 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_libdir_override () 
{ 
    if has_multilib_profile; then
        eerror "get_libdir_override called, but it shouldn't be needed with the new multilib approach.  Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org";
        exit 1;
    fi;
    CONF_LIBDIR="$1";
    CONF_LIBDIR_OVERRIDE="$1";
    LIBDIR_default="$1"
}
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}"
}
get_mounts () 
{ 
    local point= node= fs= opts= foo=;
    if [[ $(uname -s) == "Linux" ]]; then
        while read node point fs opts foo; do
            echo "${point} ${node} ${fs} ${opts}";
        done < /proc/mounts;
        return;
    fi;
    local IFS='	';
    LC_ALL=C mount -p | while read node point fs foo; do
        opts=${fs#* };
        fs=${fs%% *};
        echo "${point// /\040} ${node// /\040} ${fs%% *} ${opts// /\040}";
    done
}
get_multilibdir () 
{ 
    if has_multilib_profile; then
        eerror "get_multilibdir called, but it shouldn't be needed with the new multilib approach.  Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org";
        exit 1;
    fi;
    echo ${CONF_MULTILIBDIR:=lib32}
}
has_hardened () 
{ 
    die "$0: deprecated, please use gcc-specs-{relro,now}()!"
}
has_m32 () 
{ 
    [ "$(tc-arch)" = "amd64" ] && has_multilib_profile && return 0;
    local temp=$(emktemp);
    echo "int main() { return(0); }" > "${temp}".c;
    MY_CC=$(tc-getCC);
    ${MY_CC/ .*/} -m32 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
    local ret=$?;
    rm -f "${temp}".c;
    [[ ${ret} != 1 ]] && return 0;
    return 1
}
has_m64 () 
{ 
    local temp="$(emktemp)";
    echo "int main() { return(0); }" > "${temp}".c;
    MY_CC=$(tc-getCC);
    ${MY_CC/ .*/} -m64 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
    local ret=$?;
    rm -f "${temp}".c;
    [[ ${ret} != 1 ]] && return 0;
    return 1
}
has_multilib_profile () 
{ 
    [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
}
has_pic () 
{ 
    die "$0: deprecated, please use gcc-specs-pie()!"
}
has_pie () 
{ 
    die "$0: deprecated, please use gcc-specs-pie()!"
}
has_ssp () 
{ 
    die "$0: deprecated, please use gcc-specs-ssp()!"
}
has_ssp_all () 
{ 
    die "$0: deprecated, please use gcc-specs-ssp()!"
}
helpers_die () 
{ 
    case "${EAPI:-0}" in 
        0 | 1 | 2 | 3)
            echo -e "$@" 1>&2
        ;;
        *)
            die "$@"
        ;;
    esac
}
in_iuse () 
{ 
    debug-print-function ${FUNCNAME} "${@}";
    [[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()";
    local flag=${1};
    local liuse=(${IUSE});
    has "${flag}" "${liuse[@]#[+-]}"
}
is-flag () 
{ 
    is-flagq "$@" && echo true
}
is-flagq () 
{ 
    [[ -n $2 ]] && die "Usage: is-flag <flag>";
    _is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 || _is_flagq FFLAGS $1 || _is_flagq FCFLAGS $1
}
is-ldflag () 
{ 
    is-ldflagq "$@" && echo true
}
is-ldflagq () 
{ 
    [[ -n $2 ]] && die "Usage: is-ldflag <flag>";
    _is_flagq LDFLAGS $1
}
is-login-disabled () 
{ 
    shell=$(egetshell "$1");
    case ${shell} in 
        /bin/false | /usr/bin/false | /sbin/nologin | /usr/sbin/nologin)
            return 0
        ;;
        *)
            return 1
        ;;
    esac
}
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=Accessibility
                    ;;
                    admin)
                        type=System
                    ;;
                    antivirus)
                        type=System
                    ;;
                    arch)
                        type=Archiving
                    ;;
                    backup)
                        type=Archiving
                    ;;
                    cdr)
                        type=DiscBurning
                    ;;
                    dicts)
                        type=Dictionary
                    ;;
                    doc)
                        type=Documentation
                    ;;
                    editors)
                        type=TextEditor
                    ;;
                    emacs)
                        type=TextEditor
                    ;;
                    emulation)
                        type=Emulator
                    ;;
                    laptop)
                        type=HardwareSettings
                    ;;
                    office)
                        type=Office
                    ;;
                    pda)
                        type=PDA
                    ;;
                    vim)
                        type=TextEditor
                    ;;
                    xemacs)
                        type=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);
    cat > "${tmpwrapper}"  <<EOF
#!/bin/sh
cd "${chdir:-.}"
if [ -n "${libdir}" ] ; then
	if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
		export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
	else
		export LD_LIBRARY_PATH="${libdir}"
	fi
fi
exec ${bin} "\$@"
EOF

    chmod go+rx "${tmpwrapper}";
    if [[ -n ${path} ]]; then
        ( exeinto "${path}";
        newexe "${tmpwrapper}" "${wrapper}" ) || die;
    else
        newbin "${tmpwrapper}" "${wrapper}" || die;
    fi
}
multilib_env () 
{ 
    local CTARGET=${1:-${CTARGET}};
    case ${CTARGET} in 
        x86_64*)
            export CFLAGS_x86=${CFLAGS_x86--m32};
            export CHOST_x86=${CTARGET/x86_64/i686};
            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};
            export CTARGET_amd64=${CHOST_amd64};
            export LIBDIR_amd64="lib64";
            export CFLAGS_x32=${CFLAGS_x32--mx32};
            export CHOST_x32=${CTARGET};
            export CTARGET_x32=${CHOST_x32};
            export LIBDIR_x32="libx32";
            : ${MULTILIB_ABIS=amd64 x86};
            : ${DEFAULT_ABI=amd64}
        ;;
        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}
        ;;
        sparc*)
            export CFLAGS_sparc32=${CFLAGS_sparc32};
            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;
        do
            vv="__abi_saved_${v}";
            export ${v}="${!vv}";
            unset ${vv};
        done;
        unset __DEFAULT_ABI_SAVED;
    fi;
    if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
        for v in CHOST CBUILD AS CC CXX LD;
        do
            export __abi_saved_${v}="${!v}";
        done;
        export __DEFAULT_ABI_SAVED="true";
        export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
        export AS="$(tc-getAS) $(get_abi_ASFLAGS)";
        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);
    fi
}
myconf () 
{ 
    myconf=("${myconf[@]}" "$@")
}
newicon () 
{ 
    ( insinto /usr/share/pixmaps;
    newins "$@" )
}
newmenu () 
{ 
    ( insinto /usr/share/applications;
    newins "$@" )
}
no-as-needed () 
{ 
    case $($(tc-getLD) -v 2>&1 </dev/null) in 
        *GNU*)
            echo "-Wl,--no-as-needed"
        ;;
    esac
}
nonfatal () 
{ 
    if has "${EAPI:-0}" 0 1 2 3 3_pre2; then
        die "$FUNCNAME() not supported in this EAPI";
    fi;
    if [[ $# -lt 1 ]]; then
        die "$FUNCNAME(): Missing argument";
    fi;
    PORTAGE_NONFATAL=1 "$@"
}
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 "$@"
}
pkg_postinst () 
{ 
    dual_scripts;
    if [[ "${ROOT}" = "/" ]]; then
        local INC DIR file;
        INC=$(perl -e 'for $line (@INC) { next if $line eq "."; next if $line =~ m/'${MY_PV}'|etc|local|perl$/; print "$line\n" }');
        einfo "Removing old .ph files";
        for DIR in ${INC};
        do
            if [[ -d "${DIR}" ]]; then
                for file in $(find "${DIR}" -name "*.ph" -type f );
                do
                    rm -f "${file}";
                    einfo "<< ${file}";
                done;
            fi;
        done;
        for DIR in ${INC};
        do
            if [[ -d "${DIR}" ]]; then
                find "${DIR}" -depth -type d -print0 | xargs -0 -r rmdir &>/dev/null;
            fi;
        done;
        if ! use build; then
            ebegin "Generating ConfigLocal.pm (ignore any error)";
            enc2xs -C;
        fi;
        einfo "Converting C header files to the corresponding Perl format (ignore any error)";
        pushd /usr/include > /dev/null;
        h2ph -Q -a -d ${ARCH_LIB} asm/termios.h syscall.h syslimits.h syslog.h sys/ioctl.h sys/socket.h sys/time.h wait.h sysexits.h;
        popd > /dev/null;
    fi
}
pkg_postrm () 
{ 
    dual_scripts
}
pkg_setup () 
{ 
    case ${CHOST} in 
        *-freebsd*)
            osname="freebsd"
        ;;
        *-dragonfly*)
            osname="dragonfly"
        ;;
        *-netbsd*)
            osname="netbsd"
        ;;
        *-openbsd*)
            osname="openbsd"
        ;;
        *-darwin*)
            osname="darwin"
        ;;
        *)
            osname="linux"
        ;;
    esac;
    if use ithreads; then
        mythreading="-multi";
        myarch="${CHOST%%-*}-${osname}-thread";
    else
        myarch="${CHOST%%-*}-${osname}";
    fi;
    if use debug; then
        myarch="${myarch}-debug";
    fi;
    LIBPERL="libperl$(get_libname ${MY_PV} )";
    PRIV_LIB="/usr/$(get_libdir)/perl5/${MY_PV}";
    ARCH_LIB="/usr/$(get_libdir)/perl5/${MY_PV}/${myarch}${mythreading}";
    SITE_LIB="/usr/$(get_libdir)/perl5/site_perl/${MY_PV}";
    SITE_ARCH="/usr/$(get_libdir)/perl5/site_perl/${MY_PV}/${myarch}${mythreading}";
    VENDOR_LIB="/usr/$(get_libdir)/perl5/vendor_perl/${MY_PV}";
    VENDOR_ARCH="/usr/$(get_libdir)/perl5/vendor_perl/${MY_PV}/${myarch}${mythreading}";
    if use ithreads; then
        echo "";
        ewarn "THREADS WARNING:";
        ewarn "PLEASE NOTE: You are compiling ${MY_P} with";
        ewarn "interpreter-level threading enabled.";
        ewarn "Threading is not supported by all applications ";
        ewarn "that compile against perl. You use threading at ";
        ewarn "your own discretion. ";
    fi;
    if has_version "<dev-lang/perl-${SHORT_PV}"; then
        echo "";
        ewarn "UPDATE THE PERL MODULES:";
        ewarn "After updating dev-lang/perl you must reinstall";
        ewarn "the installed perl modules.";
        ewarn "Use: perl-cleaner --all";
    else
        if has_version dev-lang/perl; then
            if ( use ithreads && ! has_version dev-lang/perl[ithreads] ) || ( ! use ithreads && has_version dev-lang/perl[ithreads] ) || ( use debug && ! has_version dev-lang/perl[debug] ) || ( ! use debug && has_version dev-lang/perl[debug] ); then
                echo "";
                ewarn "TOGGLED USE-FLAGS WARNING:";
                ewarn "You changed one of the use-flags ithreads or debug.";
                ewarn "You must rebuild all perl-modules installed.";
                ewarn "Use: perl-cleaner --modules ; perl-cleaner --force --libperl";
            fi;
        fi;
    fi;
    dual_scripts
}
post_src_install () 
{ 
    [[ -d ${D} ]] || return 0;
    [[ ${E_MACHINE} == "" ]] && return 0;
    cmdline="";
    for EM in $E_MACHINE;
    do
        cmdline+=" -e ^${EM}[[:space:]]";
    done;
    output="$( cd ${D} && scanelf -RmyBF%a . | grep -v ${cmdline} )";
    [[ $output != "" ]] && { 
        echo;
        echo "* Wrong EM_TYPE. Expected ${E_MACHINE}";
        echo -e "${output}";
        echo;
        exit 1
    }
}
preserve_old_lib () 
{ 
    if [[ ${EBUILD_PHASE} != "preinst" ]]; then
        eerror "preserve_old_lib() must be called from pkg_preinst() only";
        die "Invalid preserve_old_lib() usage";
    fi;
    [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
    has preserve-libs ${FEATURES} && return 0;
    local lib dir;
    for lib in "$@";
    do
        [[ -e ${ROOT}/${lib} ]] || continue;
        dir=${lib%/*};
        dodir ${dir} || die "dodir ${dir} failed";
        cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed";
        touch "${D}"/${lib};
    done
}
preserve_old_lib_notify () 
{ 
    if [[ ${EBUILD_PHASE} != "postinst" ]]; then
        eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
        die "Invalid preserve_old_lib_notify() usage";
    fi;
    has preserve-libs ${FEATURES} && return 0;
    local lib notice=0;
    for lib in "$@";
    do
        [[ -e ${ROOT}/${lib} ]] || continue;
        if [[ ${notice} -eq 0 ]]; then
            notice=1;
            ewarn "Old versions of installed libraries were detected on your system.";
            ewarn "In order to avoid breaking packages that depend on these old libs,";
            ewarn "the libraries are not being removed.  You need to run revdep-rebuild";
            ewarn "in order to remove these old dependencies.  If you do not have this";
            ewarn "helper program, simply emerge the 'gentoolkit' package.";
            ewarn;
        fi;
        [[ ${PN} == "mpfr" ]] && lib=${lib##*/};
        ewarn "  # revdep-rebuild --library '${lib}'";
    done;
    if [[ ${notice} -eq 1 ]]; then
        ewarn;
        ewarn "Once you've finished running revdep-rebuild, it should be safe to";
        ewarn "delete the old libraries.  Here is a copy & paste for the lazy:";
        for lib in "$@";
        do
            ewarn "  # rm '${lib}'";
        done;
    fi
}
raw-ldflags () 
{ 
    local x input="$@";
    [[ -z ${input} ]] && input=${LDFLAGS};
    set --;
    for x in ${input};
    do
        x=${x#-Wl,};
        set -- "$@" ${x//,/ };
    done;
    echo "$@"
}
register_success_hook () 
{ 
    local x;
    for x in $*;
    do
        has $x $EBUILD_SUCCESS_HOOKS || export EBUILD_SUCCESS_HOOKS="$EBUILD_SUCCESS_HOOKS $x";
    done
}
replace-cpu-flags () 
{ 
    local newcpu="$#";
    newcpu="${!newcpu}";
    while [ $# -gt 1 ]; do
        replace-flags "-march=${1}" "-march=${newcpu}";
        replace-flags "-mcpu=${1}" "-mcpu=${newcpu}";
        replace-flags "-mtune=${1}" "-mtune=${newcpu}";
        shift;
    done;
    return 0
}
replace-flags () 
{ 
    [[ $# != 2 ]] && echo && eerror "Usage: replace-flags <old flag> <new flag>" && die "replace-flags takes 2 arguments, not $#";
    local f fset;
    declare -a new_CFLAGS new_CXXFLAGS new_FFLAGS new_FCFLAGS;
    for fset in CFLAGS CXXFLAGS FFLAGS FCFLAGS;
    do
        for f in ${!fset};
        do
            [[ ${f} == ${1} ]] && f=${2};
            eval new_${fset}\[\${\#new_${fset}\[@]}]=\${f};
        done;
        eval export ${fset}=\${new_${fset}\[*]};
    done;
    return 0
}
replace-sparc64-flags () 
{ 
    local SPARC64_CPUS="ultrasparc3 ultrasparc v9";
    if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then
        for x in ${SPARC64_CPUS};
        do
            CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}";
        done;
    else
        for x in ${SPARC64_CPUS};
        do
            CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
        done;
    fi;
    if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then
        for x in ${SPARC64_CPUS};
        do
            CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}";
        done;
    else
        for x in ${SPARC64_CPUS};
        do
            CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
        done;
    fi;
    export CFLAGS CXXFLAGS
}
seq () 
{ 
    local p=$(type -P seq);
    if [[ -n ${p} ]]; then
        "${p}" "$@";
        return $?;
    fi;
    case $# in 
        1)
            min=1 max=$1 step=1
        ;;
        2)
            min=$1 max=$2 step=1
        ;;
        3)
            min=$1 max=$3 step=$2
        ;;
        *)
            die "seq called with wrong number of arguments"
        ;;
    esac;
    p=$(type -P jot);
    if [[ -n ${p} ]]; then
        local reps;
        if [[ ${step} != 0 ]]; then
            reps=$(( (max - min) / step + 1 ));
        else
            reps=0;
        fi;
        jot $reps $min $max $step;
        return $?;
    fi;
    while :; do
        [[ $max < $min && $step > 0 ]] && break;
        [[ $min < $max && $step < 0 ]] && break;
        echo $min;
        : $(( min += step ));
    done;
    return 0
}
setup-allowed-flags () 
{ 
    if [[ -z ${ALLOWED_FLAGS} ]]; then
        export ALLOWED_FLAGS="-pipe";
        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -O -O0 -O1 -O2 -mcpu -march -mtune";
        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fstack-protector -fstack-protector-all";
        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fbounds-checking -fno-strict-overflow";
        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-PIE -fno-pie -fno-unit-at-a-time";
        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+";
        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident -fpermissive";
        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w";
    fi;
    ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all 		-fno-strict-aliasing -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer";
    ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs 		-mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 		-mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow 		-mno-popcnt -mno-abm 		-mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt 		-msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu 		-mieee -mieee-with-inexact -mschedule -mfloat-gprs -mspe -mno-spe 		-mtls-direct-seg-refs -mno-tls-direct-seg-refs 		-mflat -mno-flat -mno-faster-structs -mfaster-structs 		-m32 -m64 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC 		-mlive-g0 -mcmodel -mstack-bias -mno-stack-bias 		-msecure-plt -m*-toc -D* -U*";
    ALLOWED_FLAGS="${ALLOWED_FLAGS} -mno-fma4 -mno-movbe -mno-xop -mno-lwp";
    ALLOWED_FLAGS="${ALLOWED_FLAGS} -mno-fsgsbase -mno-rdrnd -mno-f16c 		-mno-bmi -mno-tbm";
    export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks";
    return 0
}
src_compile () 
{ 
    emake -j1 || die "emake failed"
}
src_configure () 
{ 
    declare -a myconf;
    export LC_ALL="C";
    use ppc && replace-flags -O? -O1;
    use elibc_uclibc || replace-flags "-Os" "-O2";
    filter-flags "-malign-double";
    use ppc && filter-flags "-mpowerpc-gpopt";
    filter-flags "-fsched2-use-superblocks";
    use mips && myconf -Dd_u32align;
    use sparc && myconf -Ud_longdbl;
    export BUILD_BZIP2=0;
    export BZIP2_INCLUDE=/usr/include;
    export BZIP2_LIB=/usr/$(get_libdir);
    cat > "${S}/cpan/Compress-Raw-Zlib/config.in"  <<-EOF
BUILD_ZLIB = False
INCLUDE = /usr/include
LIB = /usr/$(get_libdir)

OLD_ZLIB = False
GZIP_OS_CODE = AUTO_DETECT
EOF

    myndbm='U';
    mygdbm='U';
    mydb='U';
    if use gdbm; then
        mygdbm='D';
        myndbm='D';
    fi;
    if use berkdb; then
        mydb='D';
        has_version '=sys-libs/db-1*' && myndbm='D';
    fi;
    myconf "-${myndbm}i_ndbm" "-${mygdbm}i_gdbm" "-${mydb}i_db";
    if use alpha && [[ "$(tc-getCC)" = "ccc" ]]; then
        ewarn "Perl will not be built with berkdb support, use gcc if you needed it...";
        myconf -Ui_db -Ui_ndbm;
    fi;
    use ithreads && myconf -Dusethreads;
    if use debug; then
        append-cflags "-g";
        myconf -DDEBUGGING;
    else
        if [[ ${CFLAGS} == *-g* ]]; then
            myconf -DDEBUGGING=-g;
        else
            myconf -DDEBUGGING=none;
        fi;
    fi;
    if [[ -n ${PERL_OLDVERSEN} ]]; then
        local inclist=$(for v in ${PERL_OLDVERSEN}; do echo -n "${v}/${myarch}${mythreading} ${v} "; done );
        myconf -Dinc_version_list="$inclist";
    fi;
    [[ ${ELIBC} == "FreeBSD" ]] && myconf "-Dlibc=/usr/$(get_libdir)/libc.a";
    if [[ $(get_libdir) != "lib" ]]; then
        myconf "-Dlibpth=/usr/local/$(get_libdir) /$(get_libdir) /usr/$(get_libdir)";
    fi;
    sh Configure -des -Duseshrplib -Darchname="${myarch}" -Dcc="$(tc-getCC)" -Doptimize="${CFLAGS}" -Dldflags="${LDFLAGS}" -Dprefix='/usr' -Dsiteprefix='/usr' -Dvendorprefix='/usr' -Dscriptdir='/usr/bin' -Dprivlib="${PRIV_LIB}" -Darchlib="${ARCH_LIB}" -Dsitelib="${SITE_LIB}" -Dsitearch="${SITE_ARCH}" -Dvendorlib="${VENDOR_LIB}" -Dvendorarch="${VENDOR_ARCH}" -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/share/man/man1 -Dsiteman3dir=/usr/share/man/man3 -Dvendorman1dir=/usr/share/man/man1 -Dvendorman3dir=/usr/share/man/man3 -Dman1ext='1' -Dman3ext='3pm' -Dlibperl="${LIBPERL}" -Dlocincpth=' ' -Duselargefiles -Dd_semctl_semun -Dcf_by='Gentoo' -Dmyhostname='localhost' -Dperladmin='root@localhost' -Dinstallusrbinperl='n' -Ud_csh -Uusenm "${myconf[@]}" || die "Unable to configure"
}
src_install () 
{ 
    local i;
    local coredir="${ARCH_LIB}/CORE";
    local installtarget=install;
    if use build; then
        installtarget=install.perl;
    fi;
    make DESTDIR="${D}" ${installtarget} || die "Unable to make ${installtarget}";
    rm -f "${D}"/usr/bin/perl;
    ln -s perl${MY_PV} "${D}"/usr/bin/perl;
    dolib.so "${D}"/${coredir}/${LIBPERL} || die;
    dosym ${LIBPERL} /usr/$(get_libdir)/libperl$(get_libname ${SHORT_PV}) || die;
    dosym ${LIBPERL} /usr/$(get_libdir)/libperl$(get_libname) || die;
    rm -f "${D}"/${coredir}/${LIBPERL};
    dosym ../../../../../$(get_libdir)/${LIBPERL} ${coredir}/${LIBPERL};
    dosym ../../../../../$(get_libdir)/${LIBPERL} ${coredir}/libperl$(get_libname ${SHORT_PV});
    dosym ../../../../../$(get_libdir)/${LIBPERL} ${coredir}/libperl$(get_libname);
    rm -rf "${D}"/usr/share/man/man3 || die "Unable to remove module man pages";
    for i in $(find "${D}" -iname "Config.pm" );
    do
        einfo "Removing ${D} from ${i}...";
        sed -i -e "s:${D}::" "${i}" || die "Sed failed";
    done;
    find "${D}" -type f -name .packlist -delete || die;
    dodoc Changes* README AUTHORS || die;
    if use doc; then
        dodir /usr/share/doc/${PF}/html;
        LD_LIBRARY_PATH=. ./perl installhtml --podroot='.' --podpath='lib:ext:pod:vms' --recurse --htmldir="${D}/usr/share/doc/${PF}/html" --libpods='perlfunc:perlguts:perlvar:perlrun:perlop';
    fi;
    if use build; then
        src_remove_extra_files;
    fi;
    dual_scripts
}
src_prepare () 
{ 
    EPATCH_SOURCE="${WORKDIR}/perl-patch" EPATCH_SUFFIX="diff" EPATCH_FORCE="yes" EPATCH_OPTS="-p1" epatch;
    src_prepare_update_patchlevel_h;
    ln -s ${LIBPERL} libperl$(get_libname ${SHORT_PV});
    ln -s ${LIBPERL} libperl$(get_libname )
}
src_prepare_update_patchlevel_h () 
{ 
    [[ -f ${WORKDIR}/perl-patch/series ]] || return 0;
    while read patch level; do
        sed -i -e "s/^\t,NULL$/	,\"${patch//__/_}\"\n&/" "${S}"/patchlevel.h || die;
    done < "${WORKDIR}"/perl-patch/series
}
src_remove_dual_scripts () 
{ 
    local i pkg ver ff;
    pkg="$1";
    ver="$2";
    shift 2;
    if has "${EBUILD_PHASE:-none}" "postinst" "postrm"; then
        for i in "$@";
        do
            alternatives_auto_makesym "/usr/bin/${i}" "/usr/bin/${i}-[0-9]*";
            if [[ ${i} != cpanp-run-perl ]]; then
                ff=`echo ${ROOT}/usr/share/man/man1/${i}-${ver}-${P}.1*`;
                ff=${ff##*.1};
                alternatives_auto_makesym "/usr/share/man/man1/${i}.1${ff}" "/usr/share/man/man1/${i}-[0-9]*";
            fi;
        done;
    else
        if has "${EBUILD_PHASE:-none}" "setup"; then
            for i in "$@";
            do
                if [[ -f ${ROOT}/usr/bin/${i} && ! -h ${ROOT}/usr/bin/${i} ]]; then
                    has_version ${pkg} && ewarn "You must reinstall $pkg !";
                    break;
                fi;
            done;
        else
            for i in "$@";
            do
                if ! [[ -f "${D}"/usr/bin/${i} ]]; then
                    use build || ewarn "/usr/bin/${i} does not exist!";
                    continue;
                fi;
                mv "${D}"/usr/bin/${i}{,-${ver}-${P}} || die;
                if [[ -f ${D}/usr/share/man/man1/${i}.1 ]]; then
                    mv "${D}"/usr/share/man/man1/${i}{.1,-${ver}-${P}.1} || die;
                else
                    echo "/usr/share/man/man1/${i}.1 does not exist!";
                fi;
            done;
        fi;
    fi
}
src_remove_extra_files () 
{ 
    local prefix="./usr";
    local bindir="${prefix}/bin";
    local libdir="${prefix}/$(get_libdir)";
    local MINIMAL_PERL_INSTALL="
	${bindir}/h2ph
	${bindir}/perl
	${bindir}/perl${MY_PV}
	${bindir}/pod2man
	${libdir}/${LIBPERL}
	${libdir}/libperl$(get_libname)
	${libdir}/libperl$(get_libname ${SHORT_PV})
	.${PRIV_LIB}/AutoLoader.pm
	.${PRIV_LIB}/B/Deparse.pm
	.${PRIV_LIB}/Carp.pm
	.${PRIV_LIB}/Carp/Heavy.pm
	.${PRIV_LIB}/Class/Struct.pm
	.${PRIV_LIB}/DirHandle.pm
	.${PRIV_LIB}/Exporter.pm
	.${PRIV_LIB}/Exporter/Heavy.pm
	.${PRIV_LIB}/ExtUtils/Command.pm
	.${PRIV_LIB}/ExtUtils/Command/MM.pm
	.${PRIV_LIB}/ExtUtils/Constant.pm
	.${PRIV_LIB}/ExtUtils/Constant/Base.pm
	.${PRIV_LIB}/ExtUtils/Constant/Utils.pm
	.${PRIV_LIB}/ExtUtils/Constant/XS.pm
	.${PRIV_LIB}/ExtUtils/Embed.pm
	.${PRIV_LIB}/ExtUtils/Install.pm
	.${PRIV_LIB}/ExtUtils/Installed.pm
	.${PRIV_LIB}/ExtUtils/Liblist.pm
	.${PRIV_LIB}/ExtUtils/Liblist/Kid.pm
	.${PRIV_LIB}/ExtUtils/MM.pm
	.${PRIV_LIB}/ExtUtils/MM_Any.pm
	.${PRIV_LIB}/ExtUtils/MM_MacOS.pm
	.${PRIV_LIB}/ExtUtils/MM_Unix.pm
	.${PRIV_LIB}/ExtUtils/MY.pm
	.${PRIV_LIB}/ExtUtils/MakeMaker.pm
	.${PRIV_LIB}/ExtUtils/Manifest.pm
	.${PRIV_LIB}/ExtUtils/Miniperl.pm
	.${PRIV_LIB}/ExtUtils/Mkbootstrap.pm
	.${PRIV_LIB}/ExtUtils/Mksymlists.pm
	.${PRIV_LIB}/ExtUtils/Packlist.pm
	.${PRIV_LIB}/ExtUtils/testlib.pm
	.${PRIV_LIB}/File/Basename.pm
	.${PRIV_LIB}/File/Compare.pm
	.${PRIV_LIB}/File/Copy.pm
	.${PRIV_LIB}/File/Find.pm
	.${PRIV_LIB}/File/Path.pm
	.${PRIV_LIB}/File/stat.pm
	.${PRIV_LIB}/FileHandle.pm
	.${PRIV_LIB}/Getopt/Long.pm
	.${PRIV_LIB}/Getopt/Std.pm
	.${PRIV_LIB}/IPC/Open2.pm
	.${PRIV_LIB}/IPC/Open3.pm
	.${PRIV_LIB}/PerlIO.pm
	.${PRIV_LIB}/Pod/InputObjects.pm
	.${PRIV_LIB}/Pod/Man.pm
	.${PRIV_LIB}/Pod/ParseLink.pm
	.${PRIV_LIB}/Pod/Parser.pm
	.${PRIV_LIB}/Pod/Select.pm
	.${PRIV_LIB}/Pod/Text.pm
	.${PRIV_LIB}/Pod/Usage.pm
	.${PRIV_LIB}/SelectSaver.pm
	.${PRIV_LIB}/Symbol.pm
	.${PRIV_LIB}/Text/ParseWords.pm
	.${PRIV_LIB}/Text/Tabs.pm
	.${PRIV_LIB}/Text/Wrap.pm
	.${PRIV_LIB}/Tie/Hash.pm
	.${PRIV_LIB}/Time/Local.pm
	.${PRIV_LIB}/XSLoader.pm
	.${PRIV_LIB}/autouse.pm
	.${PRIV_LIB}/base.pm
	.${PRIV_LIB}/bigint.pm
	.${PRIV_LIB}/bignum.pm
	.${PRIV_LIB}/bigrat.pm
	.${PRIV_LIB}/blib.pm
	.${PRIV_LIB}/bytes.pm
	.${PRIV_LIB}/bytes_heavy.pl
	.${PRIV_LIB}/charnames.pm
	.${PRIV_LIB}/constant.pm
	.${PRIV_LIB}/diagnostics.pm
	.${PRIV_LIB}/fields.pm
	.${PRIV_LIB}/filetest.pm
	.${PRIV_LIB}/if.pm
	.${PRIV_LIB}/integer.pm
	.${PRIV_LIB}/less.pm
	.${PRIV_LIB}/locale.pm
	.${PRIV_LIB}/open.pm
	.${PRIV_LIB}/overload.pm
	.${PRIV_LIB}/sigtrap.pm
	.${PRIV_LIB}/sort.pm
	.${PRIV_LIB}/stat.pl
	.${PRIV_LIB}/strict.pm
	.${PRIV_LIB}/subs.pm
	.${PRIV_LIB}/unicore/To/Fold.pl
	.${PRIV_LIB}/unicore/To/Lower.pl
	.${PRIV_LIB}/unicore/To/Upper.pl
	.${PRIV_LIB}/utf8.pm
	.${PRIV_LIB}/utf8_heavy.pl
	.${PRIV_LIB}/vars.pm
	.${PRIV_LIB}/vmsish.pm
	.${PRIV_LIB}/warnings
	.${PRIV_LIB}/warnings.pm
	.${PRIV_LIB}/warnings/register.pm
	.${ARCH_LIB}/B.pm
	.${ARCH_LIB}/CORE/libperl$(get_libname)
	.${ARCH_LIB}/Config.pm
	.${ARCH_LIB}/Config_heavy.pl
	.${ARCH_LIB}/Cwd.pm
	.${ARCH_LIB}/Data/Dumper.pm
	.${ARCH_LIB}/DynaLoader.pm
	.${ARCH_LIB}/Errno.pm
	.${ARCH_LIB}/Fcntl.pm
	.${ARCH_LIB}/File/Glob.pm
	.${ARCH_LIB}/File/Spec.pm
	.${ARCH_LIB}/File/Spec/Unix.pm
	.${ARCH_LIB}/IO.pm
	.${ARCH_LIB}/IO/File.pm
	.${ARCH_LIB}/IO/Handle.pm
	.${ARCH_LIB}/IO/Pipe.pm
	.${ARCH_LIB}/IO/Seekable.pm
	.${ARCH_LIB}/IO/Select.pm
	.${ARCH_LIB}/IO/Socket.pm
	.${ARCH_LIB}/IO/Socket/INET.pm
	.${ARCH_LIB}/IO/Socket/UNIX.pm
	.${ARCH_LIB}/List/Util.pm
	.${ARCH_LIB}/NDBM_File.pm
	.${ARCH_LIB}/POSIX.pm
	.${ARCH_LIB}/Scalar/Util.pm
	.${ARCH_LIB}/Socket.pm
	.${ARCH_LIB}/Storable.pm
	.${ARCH_LIB}/attributes.pm
	.${ARCH_LIB}/auto/Cwd/Cwd$(get_libname)
	.${ARCH_LIB}/auto/Data/Dumper/Dumper$(get_libname)
	.${ARCH_LIB}/auto/DynaLoader/dl_findfile.al
	.${ARCH_LIB}/auto/Fcntl/Fcntl$(get_libname)
	.${ARCH_LIB}/auto/File/Glob/Glob$(get_libname)
	.${ARCH_LIB}/auto/IO/IO$(get_libname)
	.${ARCH_LIB}/auto/POSIX/POSIX$(get_libname)
	.${ARCH_LIB}/auto/POSIX/autosplit.ix
	.${ARCH_LIB}/auto/POSIX/fstat.al
	.${ARCH_LIB}/auto/POSIX/load_imports.al
	.${ARCH_LIB}/auto/POSIX/stat.al
	.${ARCH_LIB}/auto/POSIX/tmpfile.al
	.${ARCH_LIB}/auto/Socket/Socket$(get_libname)
	.${ARCH_LIB}/auto/Storable/Storable$(get_libname)
	.${ARCH_LIB}/auto/Storable/_retrieve.al
	.${ARCH_LIB}/auto/Storable/_store.al
	.${ARCH_LIB}/auto/Storable/autosplit.ix
	.${ARCH_LIB}/auto/Storable/retrieve.al
	.${ARCH_LIB}/auto/Storable/store.al
	.${ARCH_LIB}/auto/re/re$(get_libname)
	.${ARCH_LIB}/encoding.pm
	.${ARCH_LIB}/lib.pm
	.${ARCH_LIB}/ops.pm
	.${ARCH_LIB}/re.pm
	.${ARCH_LIB}/threads.pm
";
    pushd "${D}" > /dev/null;
    einfo "Removing files that are not in the minimal install";
    echo "${MINIMAL_PERL_INSTALL}";
    for f in $(find . -type f );
    do
        has "${f}" ${MINIMAL_PERL_INSTALL} || rm -f "${f}";
    done;
    find . -depth -type d -print0 | xargs -0 -r rmdir &>/dev/null;
    popd > /dev/null
}
src_test () 
{ 
    if [[ ${EUID} == 0 ]]; then
        ewarn "Test fails with a sandbox error (#328793) if run as root. Skipping tests...";
        return 0;
    fi;
    use elibc_uclibc && export MAKEOPTS+=" -j1";
    TEST_JOBS=$(echo -j1 ${MAKEOPTS} | sed -r 's/.*(-j[[:space:]]*|--jobs=)([[:digit:]]+).*/\2/' ) make test_harness || die "test failed"
}
src_unpack () 
{ 
    _eapi0_src_unpack "$@"
}
strip-flags () 
{ 
    local x y flag NEW_CFLAGS NEW_CXXFLAGS NEW_FFLAGS NEW_FCFLAGS;
    setup-allowed-flags;
    local NEW_CFLAGS="";
    local NEW_CXXFLAGS="";
    local NEW_FFLAGS="";
    local NEW_FCFLAGS="";
    if has "~$(tc-arch)" ${ACCEPT_KEYWORDS}; then
        ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}";
    fi;
    set -f;
    for x in ${CFLAGS};
    do
        for y in ${ALLOWED_FLAGS};
        do
            flag=${x%%=*};
            if [ "${flag%%${y}}" = "" ]; then
                NEW_CFLAGS="${NEW_CFLAGS} ${x}";
                break;
            fi;
        done;
    done;
    for x in ${CXXFLAGS};
    do
        for y in ${ALLOWED_FLAGS};
        do
            flag=${x%%=*};
            if [ "${flag%%${y}}" = "" ]; then
                NEW_CXXFLAGS="${NEW_CXXFLAGS} ${x}";
                break;
            fi;
        done;
    done;
    for x in ${FFLAGS};
    do
        for y in ${ALLOWED_FLAGS};
        do
            flag=${x%%=*};
            if [ "${flag%%${y}}" = "" ]; then
                NEW_FFLAGS="${NEW_FFLAGS} ${x}";
                break;
            fi;
        done;
    done;
    for x in ${FCFLAGS};
    do
        for y in ${ALLOWED_FLAGS};
        do
            flag=${x%%=*};
            if [ "${flag%%${y}}" = "" ]; then
                NEW_FCFLAGS="${NEW_FCFLAGS} ${x}";
                break;
            fi;
        done;
    done;
    if [ "${CFLAGS/-O}" != "${CFLAGS}" -a "${NEW_CFLAGS/-O}" = "${NEW_CFLAGS}" ]; then
        NEW_CFLAGS="${NEW_CFLAGS} -O2";
    fi;
    if [ "${CXXFLAGS/-O}" != "${CXXFLAGS}" -a "${NEW_CXXFLAGS/-O}" = "${NEW_CXXFLAGS}" ]; then
        NEW_CXXFLAGS="${NEW_CXXFLAGS} -O2";
    fi;
    if [ "${FFLAGS/-O}" != "${FFLAGS}" -a "${NEW_FFLAGS/-O}" = "${NEW_FFLAGS}" ]; then
        NEW_FFLAGS="${NEW_FFLAGS} -O2";
    fi;
    if [ "${FCFLAGS/-O}" != "${FCFLAGS}" -a "${NEW_FCFLAGS/-O}" = "${NEW_FCFLAGS}" ]; then
        NEW_FCFLAGS="${NEW_FCFLAGS} -O2";
    fi;
    set +f;
    export CFLAGS="${NEW_CFLAGS}";
    export CXXFLAGS="${NEW_CXXFLAGS}";
    export FFLAGS="${NEW_FFLAGS}";
    export FCFLAGS="${NEW_FCFLAGS}";
    return 0
}
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} ]] && ewarn "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
    export LINGUAS=${newls:1}
}
strip-unsupported-flags () 
{ 
    export CFLAGS=$(test-flags-CC ${CFLAGS});
    export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS});
    export FFLAGS=$(test-flags-F77 ${FFLAGS});
    export FCFLAGS=$(test-flags-FC ${FCFLAGS})
}
tc-arch () 
{ 
    tc-ninja_magic_to_arch portage "$@"
}
tc-arch-kernel () 
{ 
    tc-ninja_magic_to_arch kern "$@"
}
tc-endian () 
{ 
    local host=$1;
    [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
    host=${host%%-*};
    case ${host} in 
        alpha*)
            echo big
        ;;
        arm*b*)
            echo big
        ;;
        arm*)
            echo little
        ;;
        cris*)
            echo little
        ;;
        hppa*)
            echo big
        ;;
        i?86*)
            echo little
        ;;
        ia64*)
            echo little
        ;;
        m68*)
            echo big
        ;;
        mips*l*)
            echo little
        ;;
        mips*)
            echo big
        ;;
        powerpc*)
            echo big
        ;;
        s390*)
            echo big
        ;;
        sh*b*)
            echo big
        ;;
        sh*)
            echo little
        ;;
        sparc*)
            echo big
        ;;
        x86_64*)
            echo little
        ;;
        *)
            echo wtf
        ;;
    esac
}
tc-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-getAR () 
{ 
    tc-getPROG AR ar "$@"
}
tc-getAS () 
{ 
    tc-getPROG AS as "$@"
}
tc-getBUILD_AR () 
{ 
    tc-getBUILD_PROG AR ar "$@"
}
tc-getBUILD_AS () 
{ 
    tc-getBUILD_PROG AS as "$@"
}
tc-getBUILD_CC () 
{ 
    tc-getBUILD_PROG CC gcc "$@"
}
tc-getBUILD_CPP () 
{ 
    tc-getBUILD_PROG CPP cpp "$@"
}
tc-getBUILD_CXX () 
{ 
    tc-getBUILD_PROG CXX g++ "$@"
}
tc-getBUILD_LD () 
{ 
    tc-getBUILD_PROG LD ld "$@"
}
tc-getBUILD_NM () 
{ 
    tc-getBUILD_PROG NM nm "$@"
}
tc-getBUILD_OBJCOPY () 
{ 
    tc-getBUILD_PROG OBJCOPY objcopy "$@"
}
tc-getBUILD_PKG_CONFIG () 
{ 
    tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
}
tc-getBUILD_PROG () 
{ 
    _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
}
tc-getBUILD_RANLIB () 
{ 
    tc-getBUILD_PROG RANLIB ranlib "$@"
}
tc-getBUILD_STRIP () 
{ 
    tc-getBUILD_PROG STRIP strip "$@"
}
tc-getCC () 
{ 
    tc-getPROG CC gcc "$@"
}
tc-getCPP () 
{ 
    tc-getPROG CPP cpp "$@"
}
tc-getCXX () 
{ 
    tc-getPROG CXX g++ "$@"
}
tc-getDLLWRAP () 
{ 
    tc-getPROG DLLWRAP dllwrap "$@"
}
tc-getF77 () 
{ 
    tc-getPROG F77 gfortran "$@"
}
tc-getFC () 
{ 
    tc-getPROG FC gfortran "$@"
}
tc-getGCJ () 
{ 
    tc-getPROG GCJ gcj "$@"
}
tc-getLD () 
{ 
    tc-getPROG LD ld "$@"
}
tc-getNM () 
{ 
    tc-getPROG NM nm "$@"
}
tc-getOBJCOPY () 
{ 
    tc-getPROG OBJCOPY objcopy "$@"
}
tc-getPKG_CONFIG () 
{ 
    tc-getPROG PKG_CONFIG pkg-config "$@"
}
tc-getPROG () 
{ 
    _tc-getPROG CHOST "$@"
}
tc-getRANLIB () 
{ 
    tc-getPROG RANLIB ranlib "$@"
}
tc-getRC () 
{ 
    tc-getPROG RC windres "$@"
}
tc-getSTRIP () 
{ 
    tc-getPROG STRIP strip "$@"
}
tc-has-openmp () 
{ 
    local base="${T}/test-tc-openmp";
    cat > "${base}.c"  <<-EOF
#include <omp.h>
int main() {
int nthreads, tid, ret = 0;
#pragma omp parallel private(nthreads, tid)
{
tid = omp_get_thread_num();
nthreads = omp_get_num_threads(); ret += tid + nthreads;
}
return ret;
}
EOF

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

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

        ;;
        -*)
            die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
        ;;
    esac;
    : ${flags:=-fPIC -shared -Wl,-z,defs};
    [[ $1 == -* ]] && shift;
    $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &>/dev/null;
    local ret=$?;
    rm -f "${base}"*;
    return ${ret}
}
tc-is-cross-compiler () 
{ 
    return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
}
tc-is-hardfloat () 
{ 
    [[ ${CTARGET//_/-} == *-hardfloat-* ]] && echo "yes" || echo "no"
}
tc-is-softfloat () 
{ 
    case ${CTARGET} in 
        bfin* | h8300*)
            echo "only"
        ;;
        *)
            [[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no"
        ;;
    esac
}
tc-is-static-only () 
{ 
    local host=${CTARGET:-${CHOST}};
    return $([[ ${host} == *-mint* ]])
}
tc-ninja_magic_to_arch () 
{ 
    function ninj () 
    { 
        [[ ${type} == "kern" ]] && echo $1 || echo $2
    };
    local type=$1;
    local host=$2;
    [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
    case ${host} in 
        alpha*)
            echo alpha
        ;;
        arm*)
            echo arm
        ;;
        avr*)
            ninj avr32 avr
        ;;
        bfin*)
            ninj blackfin bfin
        ;;
        cris*)
            echo cris
        ;;
        hppa*)
            ninj parisc hppa
        ;;
        i?86*)
            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
                echo i386;
            else
                echo x86;
            fi
        ;;
        ia64*)
            echo ia64
        ;;
        m68*)
            echo m68k
        ;;
        mips*)
            echo mips
        ;;
        nios2*)
            echo nios2
        ;;
        nios*)
            echo nios
        ;;
        powerpc*)
            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
                echo powerpc;
            else
                if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]]; then
                    if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
                        echo powerpc;
                    else
                        echo ppc;
                    fi;
                else
                    if [[ ${host} == powerpc64* ]]; then
                        echo ppc64;
                    else
                        if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
                            ninj ppc64 ppc;
                        else
                            echo ppc;
                        fi;
                    fi;
                fi;
            fi
        ;;
        s390*)
            echo s390
        ;;
        sh64*)
            ninj sh64 sh
        ;;
        sh*)
            echo sh
        ;;
        sparc64*)
            ninj sparc64 sparc
        ;;
        sparc*)
            [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
        ;;
        vax*)
            echo vax
        ;;
        x86_64*freebsd*)
            echo amd64
        ;;
        x86_64*)
            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
                echo x86;
            else
                ninj x86_64 amd64;
            fi
        ;;
        *)
            echo unknown
        ;;
    esac
}
test-flag-CC () 
{ 
    test-flag-PROG "CC" "$1"
}
test-flag-CXX () 
{ 
    test-flag-PROG "CXX" "$1"
}
test-flag-F77 () 
{ 
    test-flag-PROG "F77" "$1"
}
test-flag-FC () 
{ 
    test-flag-PROG "FC" "$1"
}
test-flag-PROG () 
{ 
    local comp=$1;
    local flags="$2";
    [[ -z ${comp} || -z ${flags} ]] && return 1;
    local PROG=$(tc-get${comp});
    ${PROG} ${flags} -c -o /dev/null -xc /dev/null > /dev/null 2>&1
}
test-flags () 
{ 
    test-flags-CC "$@"
}
test-flags-CC () 
{ 
    test-flags-PROG "CC" "$@"
}
test-flags-CXX () 
{ 
    test-flags-PROG "CXX" "$@"
}
test-flags-F77 () 
{ 
    test-flags-PROG "F77" "$@"
}
test-flags-FC () 
{ 
    test-flags-PROG "FC" "$@"
}
test-flags-PROG () 
{ 
    local comp=$1;
    local flags;
    local x;
    shift;
    [[ -z ${comp} ]] && return 1;
    x="";
    for x in "$@";
    do
        test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}";
    done;
    echo "${flags}";
    [[ -n ${flags} ]]
}
test_flag () 
{ 
    die "$0: deprecated, please use test-flags()!"
}
test_version_info () 
{ 
    if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
        return 0;
    else
        return 1;
    fi
}
treecopy () 
{ 
    dest=${!#};
    files_count=$#;
    while (( $# > 1 )); do
        dirstruct=$(dirname "$1");
        mkdir -p "${dest}/${dirstruct}";
        cp -pPR "$1" "${dest}/${dirstruct}";
        shift;
    done
}
unpack_makeself () 
{ 
    local src_input=${1:-${A}};
    local src=$(find_unpackable_file "${src_input}");
    local skip=$2;
    local exe=$3;
    [[ -z ${src} ]] && die "Could not locate source for '${src_input}'";
    local shrtsrc=$(basename "${src}");
    echo ">>> Unpacking ${shrtsrc} to ${PWD}";
    if [[ -z ${skip} ]]; then
        local ver=$(grep -m1 -a '#.*Makeself' "${src}" | awk '{print $NF}');
        local skip=0;
        exe=tail;
        case ${ver} in 
            1.5.* | 1.6.0-nv)
                skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
            ;;
            2.0 | 2.0.1)
                skip=$(grep -a ^'	'tail "${src}" | awk '{print $2}' | cut -b2-)
            ;;
            2.1.1)
                skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-);
                (( skip++ ))
            ;;
            2.1.2)
                skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1);
                (( skip++ ))
            ;;
            2.1.3)
                skip=`grep -a ^offset= "${src}" | awk '{print $3}'`;
                (( skip++ ))
            ;;
            2.1.4 | 2.1.5)
                skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1);
                skip=$(head -n ${skip} "${src}" | wc -c);
                exe="dd"
            ;;
            *)
                eerror "I'm sorry, but I was unable to support the Makeself file.";
                eerror "The version I detected was '${ver}'.";
                eerror "Please file a bug about the file ${shrtsrc} at";
                eerror "http://bugs.gentoo.org/ so that support can be added.";
                die "makeself version '${ver}' not supported"
            ;;
        esac;
        debug-print "Detected Makeself version ${ver} ... using ${skip} as offset";
    fi;
    case ${exe} in 
        tail)
            exe="tail -n +${skip} '${src}'"
        ;;
        dd)
            exe="dd ibs=${skip} skip=1 if='${src}'"
        ;;
        *)
            die "makeself cant handle exe '${exe}'"
        ;;
    esac;
    local filetype tmpfile=$(emktemp);
    eval ${exe} 2> /dev/null | head -c 512 > "${tmpfile}";
    filetype=$(file -b "${tmpfile}") || die;
    case ${filetype} in 
        *tar\ archive*)
            eval ${exe} | tar --no-same-owner -xf -
        ;;
        bzip2*)
            eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
        ;;
        gzip*)
            eval ${exe} | tar --no-same-owner -xzf -
        ;;
        compress*)
            eval ${exe} | gunzip | tar --no-same-owner -xf -
        ;;
        *)
            eerror "Unknown filetype \"${filetype}\" ?";
            false
        ;;
    esac;
    assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
}
unpack_pdv () 
{ 
    local src=$(find_unpackable_file "$1");
    local sizeoff_t=$2;
    [[ -z ${src} ]] && die "Could not locate source for '$1'";
    [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(";
    local shrtsrc=$(basename "${src}");
    echo ">>> Unpacking ${shrtsrc} to ${PWD}";
    local metaskip=$(tail -c ${sizeoff_t} "${src}" | hexdump -e \"%i\");
    local tailskip=$(tail -c $((${sizeoff_t}*2)) "${src}" | head -c ${sizeoff_t} | hexdump -e \"%i\");
    local metafile=$(emktemp);
    tail -c +$((${metaskip}+1)) "${src}" > "${metafile}";
    local datafile=$(tail -c +$((${metaskip}+1)) "${src}" | strings | head -n 1);
    datafile=$(basename "${datafile}");
    local tmpfile=$(emktemp);
    tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c 512 > ${tmpfile};
    local iscompressed=$(file -b "${tmpfile}");
    if [[ ${iscompressed:0:8} == "compress" ]]; then
        iscompressed=1;
        mv ${tmpfile}{,.Z};
        gunzip ${tmpfile};
    else
        iscompressed=0;
    fi;
    local istar=$(file -b "${tmpfile}");
    if [[ ${istar:0:9} == "POSIX tar" ]]; then
        istar=1;
    else
        istar=0;
    fi;
    if [ ${iscompressed} -eq 1 ]; then
        if [ ${istar} -eq 1 ]; then
            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar -xzf -;
        else
            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | gzip -dc > ${datafile};
        fi;
    else
        if [ ${istar} -eq 1 ]; then
            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar --no-same-owner -xf -;
        else
            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) > ${datafile};
        fi;
    fi;
    true
}
usex () 
{ 
    use "$1" && echo "${2-yes}$4" || echo "${3-no}$5"
}
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
}

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [gentoo-user] How to cross compile Perl for ARM?
  2011-10-14 11:14 [gentoo-user] How to cross compile Perl for ARM? czernitko
@ 2011-10-14 13:34 ` Raffaele BELARDI
  2011-10-14 15:15   ` czernitko
  2011-10-15 14:25   ` czernitko
  2011-10-14 14:04 ` Jonas de Buhr
  2011-10-16 21:20 ` [gentoo-user] " James
  2 siblings, 2 replies; 9+ messages in thread
From: Raffaele BELARDI @ 2011-10-14 13:34 UTC (permalink / raw
  To: gentoo-user@lists.gentoo.org

On 10/14/2011 01:14 PM, czernitko wrote:
> Hello!
> I started playing a little bit with cross compilation for ARM
> architecture. Using crossdev I created a toolchain for
> arm-none-linux-gnueabi tuple.
> Now I'd like to emerge some more packages, but perl constantly refuses
> to emerge and it is needed by many packages.

Not a direct answer to your question, but I managed to cross-build a
functional linux rootfs (including X11/Xfbdev and QTEmbedded) for ARM
using buildroot. I found buildroot much easier to use than trying to
follow the now-deprecated "Gentoo Cross Development Guide".
Also, I used CodeSourcery's toolchain instead of building my own.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [gentoo-user] How to cross compile Perl for ARM?
  2011-10-14 11:14 [gentoo-user] How to cross compile Perl for ARM? czernitko
  2011-10-14 13:34 ` Raffaele BELARDI
@ 2011-10-14 14:04 ` Jonas de Buhr
  2011-10-14 14:53   ` czernitko
  2011-10-16 21:20 ` [gentoo-user] " James
  2 siblings, 1 reply; 9+ messages in thread
From: Jonas de Buhr @ 2011-10-14 14:04 UTC (permalink / raw
  To: gentoo-user

hi peter!

Am Fri, 14 Oct 2011 13:14:51 +0200
schrieb czernitko <czernitko@gmail.com>:

> Hello!
> I started playing a little bit with cross compilation for ARM
> architecture. Using crossdev I created a toolchain for
> arm-none-linux-gnueabi tuple. Now I'd like to emerge some more
> packages, but perl constantly refuses to emerge and it is needed by
> many packages. For example when running
> 
> # arm-none-linux-gnueabi-emerge -av1 perl
> 
> [ebuild  N     ] dev-lang/perl-5.12.4-r1
> to /usr/arm-none-linux-gnueabi/ USE="berkdb gdbm -build -debug -doc
> -ithreads" 0 kB [ebuild  N     ] app-admin/perl-cleaner-2.10
> to /usr/arm-none-linux-gnueabi/ 0 kB
> 
> it fails right in configure phase.
> Relevant logs are attached, except for configure log which I couldn't
> find.
> 
> When I've read through
> /usr/arm-none-linux-gnueabi/tmp/portage/dev-lang/perl-5.12.4-r1/work/perl-5.12.4/Cross/README
> which is aimed to give more instructions for cross compiling,
> I've found out that I should run "make patch && make" from Cross
> directory. Unfortunately, I've got no clue how to combine that with
> the whole emerge process? 

there is probably a better way to do this, but it should be possible to
make a local overlay and modify the ebuild's src_compile to do emake in
the Cross directory.

http://devmanual.gentoo.org/ebuild-writing/index.html

> I know I could compile it by hand, but then
> portage would not know that perl is already installed and it would
> try to install it anyway...

there are some ways around that, but its still ugly.

a lot of the things you are finding out now might be *very* interesting
to me in a few months, i am also planning a small project that might
include cross compiling to arm.
are you documenting your progress somewhere? can you please point me to
the documents that helped you put together the cross compilation
toolchain?


from looking at build.log:

> Checking your choice of C compiler and flags for coherency...
> I've tried to compile and run the following simple program:
> 
> #include <stdio.h>
> int main() { printf("Ok\n"); return(0); }
> 
> I used the command:
> 
> 	arm-none-linux-gnueabi-gcc -o try -O2 -pipe
> -fomit-frame-pointer -I/usr/arm-none-linux-gnueabi/usr/include/
> -I/usr/arm-none-linux-gnueabi/include/ -DOVR_DBL_DIG=14
> -L/usr/arm-none-linux-gnueabi/lib
> -L/usr/arm-none-linux-gnueabi/usr/lib -L/usr/local/lib try.c -lnsl
> -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat ./try
> 
> and I got the following output:
> 
> /bin/sh: ./try: cannot execute binary file
> The program compiled OK, but exited with status 126.

that actually sounds like it successfully cross-compiled try.c, but
*of course* it does not run on your host platform! that check is
probably omitted in Cross/Makefile which might why they are telling you
to run that one.

> 
> Any help would be highly appreciated!
> Peter



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [gentoo-user] How to cross compile Perl for ARM?
  2011-10-14 14:04 ` Jonas de Buhr
@ 2011-10-14 14:53   ` czernitko
  0 siblings, 0 replies; 9+ messages in thread
From: czernitko @ 2011-10-14 14:53 UTC (permalink / raw
  To: gentoo-user

[-- Attachment #1: Type: text/plain, Size: 1644 bytes --]

Hello Jonas!


there is probably a better way to do this, but it should be possible to
> make a local overlay and modify the ebuild's src_compile to do emake in
> the Cross directory.
>
> http://devmanual.gentoo.org/ebuild-writing/index.html
>
>
So far this seems to me to be the most reasonable way. I would like to stick
to the gentoo way of doing cross compilation, even if it encounters some
minor hacks. I'll try it, thanks for pointing me there.


> are you documenting your progress somewhere?


Nope, but for quite a while I'm considering to put up some blog (or
something on google sites)...


> can you please point me to
> the documents that helped you put together the cross compilation
> toolchain?
>

In fact only embedded gentoo
documentation<http://www.gentoo.org/proj/en/base/embedded/>and trial
and error method. I succeeded with

crossdev --b 2.21.1 --g 4.5.3 --l 2.11.3 --k 2.6.36 -t
arm-none-linux-gnueabi

which compiled succesfully and created toolchain that can create binaries
compatible with my Netgear Stora. So far I haven't tried emerged packages as
I am not sure if they will run unless built statically, but sample C program
compiled with cross compiler runs ok.


> that actually sounds like it successfully cross-compiled try.c, but
> *of course* it does not run on your host platform! that check is
> probably omitted in Cross/Makefile which might why they are telling you
> to run that one.
>

I agree, I hope I can make some workaround in a short time for that. Using
my own overlay seems to be the most appropriate way, I'll write back as soon
as I have working ebuild limited to arm architecture...

Peter

[-- Attachment #2: Type: text/html, Size: 2524 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [gentoo-user] How to cross compile Perl for ARM?
  2011-10-14 13:34 ` Raffaele BELARDI
@ 2011-10-14 15:15   ` czernitko
  2011-10-17  6:30     ` Raffaele BELARDI
  2011-10-15 14:25   ` czernitko
  1 sibling, 1 reply; 9+ messages in thread
From: czernitko @ 2011-10-14 15:15 UTC (permalink / raw
  To: gentoo-user

[-- Attachment #1: Type: text/plain, Size: 1534 bytes --]

Hi Raffaele,
"Gentoo Cross Development Guide" is deprecated in favour of Gentoo Embedded
project, which so far seems to suit my needs. I had a quick look on
CodeSourcery's products a few days ago, but in freely available version they
don't seem to offer me more than toolchain compiled with crossdev. Maybe I'm
wrong and if I'll get stuck I'll give them a go. AFAIK the biggest
disadvantage of crossdev-created toolchain, compared to other cross
compilation tools, is that without usage of emulator (like qemu-user) it is
not possible to compile things that use in their configure scipts checks
that need to be run on the target architecture (like Perl).
Sticking to arm-none-linux-gnueabi-emerge offers quite a lot of comfort so
far, so I'll see where I can get.
Thanks for your tips!

Peter

2011/10/14 Raffaele BELARDI <raffaele.belardi@st.com>

> On 10/14/2011 01:14 PM, czernitko wrote:
> > Hello!
> > I started playing a little bit with cross compilation for ARM
> > architecture. Using crossdev I created a toolchain for
> > arm-none-linux-gnueabi tuple.
> > Now I'd like to emerge some more packages, but perl constantly refuses
> > to emerge and it is needed by many packages.
>
> Not a direct answer to your question, but I managed to cross-build a
> functional linux rootfs (including X11/Xfbdev and QTEmbedded) for ARM
> using buildroot. I found buildroot much easier to use than trying to
> follow the now-deprecated "Gentoo Cross Development Guide".
> Also, I used CodeSourcery's toolchain instead of building my own.
>

[-- Attachment #2: Type: text/html, Size: 1919 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [gentoo-user] How to cross compile Perl for ARM?
  2011-10-14 13:34 ` Raffaele BELARDI
  2011-10-14 15:15   ` czernitko
@ 2011-10-15 14:25   ` czernitko
  1 sibling, 0 replies; 9+ messages in thread
From: czernitko @ 2011-10-15 14:25 UTC (permalink / raw
  To: gentoo-user

[-- Attachment #1: Type: text/plain, Size: 1592 bytes --]

Hi Raffaele,
how far did you get with compiling rootfs? Do you have complete gentoo
installation including kernel compiled for ARM? Would it be possible to make
vmdk/any other image for Qemu in which it could be run? I guess it would
ease quite many things...

As for my progress: I found out that patches from Cross directory does not
work, but configure script has some options for cross compilation so I wrote
ebuild with different parameters for perl Configure script. It assumes that
you have ARM machine ready on network and with ssh daemon running - it uses
ssh to transfer cross compiled binaries, run them remotely and uses the
output to continue compiling on host pc. I had no problem with establishing
that, but configure script still tries to run few binaries compiled for ARM
on my x64 host machine. Fight continues!

Stay tuned :)
Peter

2011/10/14 Raffaele BELARDI <raffaele.belardi@st.com>

> On 10/14/2011 01:14 PM, czernitko wrote:
> > Hello!
> > I started playing a little bit with cross compilation for ARM
> > architecture. Using crossdev I created a toolchain for
> > arm-none-linux-gnueabi tuple.
> > Now I'd like to emerge some more packages, but perl constantly refuses
> > to emerge and it is needed by many packages.
>
> Not a direct answer to your question, but I managed to cross-build a
> functional linux rootfs (including X11/Xfbdev and QTEmbedded) for ARM
> using buildroot. I found buildroot much easier to use than trying to
> follow the now-deprecated "Gentoo Cross Development Guide".
> Also, I used CodeSourcery's toolchain instead of building my own.
>

[-- Attachment #2: Type: text/html, Size: 1947 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [gentoo-user] Re: How to cross compile Perl for ARM?
  2011-10-14 11:14 [gentoo-user] How to cross compile Perl for ARM? czernitko
  2011-10-14 13:34 ` Raffaele BELARDI
  2011-10-14 14:04 ` Jonas de Buhr
@ 2011-10-16 21:20 ` James
  2011-10-17  7:30   ` czernitko
  2 siblings, 1 reply; 9+ messages in thread
From: James @ 2011-10-16 21:20 UTC (permalink / raw
  To: gentoo-user

czernitko <czernitko <at> gmail.com> writes:


> Hello!I started playing a little bit with cross compilation 
> for ARM architecture. Using crossdev I created a toolchain 
> for arm-none-linux-gnueabi tuple.Now I'd like to emerge 
> some more packages, but perl constantly refuses to emerge 
> and it is needed by many packages.

You have the right idea using the gentoo embedded handbook as your guide.

http://www.gentoo.org/proj/en/base/embedded/handbook/

You may want to join/post to the gentoo-embedded list where
you'll find much more expertise on ARM and cross-compiling
issues.

hth,
James






^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [gentoo-user] How to cross compile Perl for ARM?
  2011-10-14 15:15   ` czernitko
@ 2011-10-17  6:30     ` Raffaele BELARDI
  0 siblings, 0 replies; 9+ messages in thread
From: Raffaele BELARDI @ 2011-10-17  6:30 UTC (permalink / raw
  To: gentoo-user@lists.gentoo.org

On 10/14/2011 05:15 PM, czernitko wrote:
> AFAIK the biggest disadvantage of crossdev-created toolchain, compared
> to other cross compilation tools, is that without usage of emulator
> (like qemu-user) it is not possible to compile things that use in their
> configure scipts checks that need to be run on the target architecture
> (like Perl).

I don't know how the CodeSourcery toolchain was generated so I'm
probably missing your point, but  with buildroot I easily build the
whole rootfs on Gentoo x86 PC. No target emulation at all.

buildroot takes off of you the burden of patching the configure scripts
to properly cross-compile. But, the version of buildroot I used does not
include Perl, only 'microperl' (which I did not need so I never compiled).


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [gentoo-user] Re: How to cross compile Perl for ARM?
  2011-10-16 21:20 ` [gentoo-user] " James
@ 2011-10-17  7:30   ` czernitko
  0 siblings, 0 replies; 9+ messages in thread
From: czernitko @ 2011-10-17  7:30 UTC (permalink / raw
  To: gentoo-user

[-- Attachment #1: Type: text/plain, Size: 788 bytes --]

Thank you James! I totally missed the existence of gentoo-embedded list, I
I'll post my questions there.

2011/10/16 James <wireless@tampabay.rr.com>

> czernitko <czernitko <at> gmail.com> writes:
>
>
> > Hello!I started playing a little bit with cross compilation
> > for ARM architecture. Using crossdev I created a toolchain
> > for arm-none-linux-gnueabi tuple.Now I'd like to emerge
> > some more packages, but perl constantly refuses to emerge
> > and it is needed by many packages.
>
> You have the right idea using the gentoo embedded handbook as your guide.
>
> http://www.gentoo.org/proj/en/base/embedded/handbook/
>
> You may want to join/post to the gentoo-embedded list where
> you'll find much more expertise on ARM and cross-compiling
> issues.
>
> hth,
> James
>
>
>
>
>

[-- Attachment #2: Type: text/html, Size: 1346 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-10-17  7:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-14 11:14 [gentoo-user] How to cross compile Perl for ARM? czernitko
2011-10-14 13:34 ` Raffaele BELARDI
2011-10-14 15:15   ` czernitko
2011-10-17  6:30     ` Raffaele BELARDI
2011-10-15 14:25   ` czernitko
2011-10-14 14:04 ` Jonas de Buhr
2011-10-14 14:53   ` czernitko
2011-10-16 21:20 ` [gentoo-user] " James
2011-10-17  7:30   ` czernitko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox