public inbox for gentoo-user@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-user] bus error during compilation of gcc
@ 2013-04-20 17:29 the guard
  2013-04-20 17:54 ` Nilesh Govindrajan
  2013-04-20 19:56 ` [gentoo-user] " Grant Edwards
  0 siblings, 2 replies; 14+ messages in thread
From: the guard @ 2013-04-20 17:29 UTC (permalink / raw
  To: gentoo-user


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

 Hello, gentlemen

The package i decided to install required a gcc rebuild so I started rebuilding it and got a bus error. I've googled and found suggestions to lower makeopts, but it didn't help. 

-- 
the guard

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

[-- Attachment #2: environment --]
[-- Type: application/octet-stream, Size: 168262 bytes --]

declare -x ABI_X86="32"
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 APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
declare -x ARCH="x86"
declare -- BINPATH="/usr/i686-pc-linux-gnu/gcc-bin/4.6.3"
declare -x BOOTSTRAP_USE="cxx unicode python_targets_python3_2 python_targets_python2_7"
declare -- BRANCH_UPDATE=""
declare -x BRANDING_GCC_PKGVERSION="Gentoo 4.6.3 p1.11, pie-0.5.2"
declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump"
declare -x CAMERAS="ptp2"
declare -x CBUILD="i686-pc-linux-gnu"
declare -x CFLAGS="-O2 -march=native -pipe"
declare -x CFLAGS_default
declare -x CHOST="i686-pc-linux-gnu"
declare -x CHOST_default="i686-pc-linux-gnu"
declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
declare -x CONSOLE="/dev/console"
declare -x CTARGET="i686-pc-linux-gnu"
declare -x CTARGET_default="i686-pc-linux-gnu"
declare -x CXXFLAGS="-O2 -march=native -pipe"
declare -- DATAPATH="/usr/share/gcc-data/i686-pc-linux-gnu/4.6.3"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-T8kqWLhs0V,guid=4814da52eb1b2ff26c697a975172c8d3"
declare -x DEBUGBUILD="1"
declare -x DEFAULT_ABI="default"
declare -x DEFINED_PHASES=" compile install postinst postrm setup test unpack"
declare DEPEND="
	elibc_glibc? ( >=sys-libs/glibc-2.8 )
	>=sys-devel/binutils-2.18 sys-devel/gnuconfig >=sys-apps/sed-4 sys-libs/zlib
	nls? ( sys-devel/gettext ) virtual/libiconv >=dev-libs/gmp-4.3.2 >=dev-libs/mpfr-2.4.2 >=dev-libs/mpc-0.8.1
			graphite? (
				>=dev-libs/cloog-ppl-0.15.10
				>=dev-libs/ppl-0.11
			)
	>=sys-devel/bison-1.875
	>=sys-devel/flex-2.5.4
	test? (
		>=dev-util/dejagnu-1.4.4
		>=sys-devel/autogen-5.5.4
	) gcj? ( gtk? ( 
		x11-libs/libXt
		x11-libs/libX11
		x11-libs/libXtst
		x11-proto/xproto
		x11-proto/xextproto
		=x11-libs/gtk+-2*
		virtual/pkgconfig
		amd64? ( multilib? (
			app-emulation/emul-linux-x86-gtklibs
			app-emulation/emul-linux-x86-xlibs
		) )
	 x11-libs/pango ) >=media-libs/libart_lgpl-2.1 app-arch/zip app-arch/unzip )"
declare DESCRIPTION="The GNU Compiler Collection"
declare -x DESKTOP_SESSION="LXDE"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -x EAPI="0"
declare -- EBUILD_DEATH_HOOKS=" toolchain_death_notice"
declare -- ECLASSDIR_LOCAL="/usr/portage/eclass"
declare -x EINFO_LOG="/etc/init.d/xdm"
declare -x ELIBC="glibc"
declare -x ELT_APPLIED_PATCHES=" portage/2.2 sed/1.5.6 as-needed/2.2.6"
declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
declare -- EPATCH_EXCLUDE=""
declare -- EPATCH_FORCE="no"
declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
declare -- EPATCH_OPTS=""
declare -- EPATCH_SINGLE_MSG=""
declare -- EPATCH_SOURCE="/var/tmp/portage/sys-devel/gcc-4.6.3/work/patch"
declare -- EPATCH_SUFFIX="patch"
declare -x EXEOPTIONS="-m0755"
declare -x FCFLAGS="-O2 -march=i686 -pipe"
declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
declare -x FFLAGS="-O2 -march=i686 -pipe"
declare -- GCCMAJOR="4"
declare -- GCCMICRO="3"
declare -- GCCMINOR="6"
declare -- GCC_BRANCH_VER="4.6"
declare -- GCC_CONFIG_VER="4.6.3"
declare -x GCC_FILESDIR="/usr/portage/sys-devel/gcc/files"
declare -- GCC_PV="4.6.3"
declare -- GCC_PVR="4.6.3"
declare -- GCC_RELEASE_VER="4.6.3"
declare -- GCJ_DEPS=">=media-libs/libart_lgpl-2.1 app-arch/zip app-arch/unzip"
declare -- GCJ_GTK_DEPS="
		x11-libs/libXt
		x11-libs/libX11
		x11-libs/libXtst
		x11-proto/xproto
		x11-proto/xextproto
		=x11-libs/gtk+-2*
		virtual/pkgconfig
		amd64? ( multilib? (
			app-emulation/emul-linux-x86-gtklibs
			app-emulation/emul-linux-x86-xlibs
		) )
	 x11-libs/pango"
declare -x GDK_USE_XFT="1"
declare -- GMP_MPFR_DEPS=">=dev-libs/gmp-4.3.2 >=dev-libs/mpfr-2.4.2"
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 HDEPEND=""
declare HOMEPAGE="http://gcc.gnu.org/"
declare -x HTB_GCC_VER="4.6.3"
declare -- INCLUDEPATH="/usr/lib/gcc/i686-pc-linux-gnu/4.6.3/include"
declare -x INHERITED=" multilib toolchain-funcs user eutils versionator libtool flag-o-matic gnuconfig fixheadtails pax-utils toolchain"
declare -x INPUT_DEVICES="evdev keyboard mouse synaptics"
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare IUSE="multislot nls nptl test vanilla altivec cxx fortran nopie nossp doc gcj gtk hardened multilib objc objc-gc mudflap libssp objc++ openmp fixed-point graphite"
declare -x IUSE_IMPLICIT="prefix"
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 ~amd64-fbsd ~x86-fbsd"
declare -x KV="3.7.10-gentoo"
declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed"
declare -x LDFLAGS_default
declare -x LIBDIR_default="lib"
declare -x LIBOPTIONS="-m0644"
declare -- LIBPATH="/usr/lib/gcc/i686-pc-linux-gnu/4.6.3"
declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
declare -x LICENSE="GPL-3+ LGPL-3+ || ( GPL-3+ libgcc libstdc++ gcc-runtime-library-exception-3.1 ) FDL-1.3+"
declare -x MAKEOPTS="-j3"
declare -x MULTILIB_ABIS="default"
declare -x MULTIOSDIRS="../lib"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OFFICE_IMPLEMENTATION="libreoffice"
declare -x OPENGL_PROFILE="xorg-x11"
declare -x PATCH_GCC_VER="4.6.3"
declare -- PATCH_VER="1.11"
declare -x PATH="/usr/lib/portage/bin/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.6.3"
declare -- PAX_MARKINGS="PT"
declare PDEPEND=" elibc_glibc? ( >=sys-libs/glibc-2.8 ) >=sys-devel/gcc-config-1.7"
declare -x PHP_TARGETS=""
declare -x PIE_GCC_VER="4.6.3"
declare -- PIE_GLIBC_STABLE="x86 amd64 mips ppc ppc64 arm ia64"
declare -- PIE_UCLIBC_STABLE="x86 arm amd64 ppc ppc64"
declare -- PIE_VER="0.5.2"
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/gcc-4.6.3/html")'
declare -- PREFIX="/usr"
declare -x PRELINK_PATH_MASK="/usr/lib/libfreebl3.so:/usr/lib/libnssdbm3.so:/usr/lib/libsoftokn3.so"
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND"
declare -x PROPERTIES=""
declare -x PROVIDE=""
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -x PYTHONPATH="/usr/lib/portage/pym"
declare -x PYTHON_SINGLE_TARGET=""
declare -x PYTHON_TARGETS=""
declare -x QT_GRAPHICSSYSTEM="raster"
declare -x RC_SERVICE="/etc/init.d/xdm"
declare -x RC_SVCNAME="xdm"
declare -x RDEPEND="sys-libs/zlib
	nls? ( sys-devel/gettext ) virtual/libiconv >=dev-libs/gmp-4.3.2 >=dev-libs/mpfr-2.4.2 >=dev-libs/mpc-0.8.1
			graphite? (
				>=dev-libs/cloog-ppl-0.15.10
				>=dev-libs/ppl-0.11
			)"
declare REPOSITORY
declare REQUIRED_USE=""
declare -x RESTRICT="strip"
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 S="/var/tmp/portage/sys-devel/gcc-4.6.3/work/gcc-4.6.3"
declare -x SAL_USE_VCLPLUGIN="gtk"
declare -x SANDBOX_DEBUG="0"
declare -x SANDBOX_DENY=""
declare -x SANDBOX_PID="3189"
declare -x SANDBOX_PREDICT="/var/tmp/portage/sys-devel/gcc-4.6.3/homedir:/dev/crypto:/var/cache/fontconfig"
declare -x SANDBOX_READ="/:/var/tmp"
declare -x SANDBOX_VERBOSE="1"
declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/sys-devel/gcc-4.6.3/homedir/.bash_history"
declare -x SLOT="4.6"
declare -x SPECS_GCC_VER="4.4.3"
declare -- SPECS_VER="0.2.0"
declare SRC_URI="mirror://gnu/gcc/gcc-4.6.3/gcc-4.6.3.tar.bz2 mirror://gentoo/gcc-4.6.3-uclibc-patches-1.0.tar.bz2 http://dev.gentoo.org/~vapier/dist/gcc-4.6.3-uclibc-patches-1.0.tar.bz2 http://dev.gentoo.org/~dirtyepic/dist/gcc-4.6.3-uclibc-patches-1.0.tar.bz2 http://dev.gentoo.org/~halcy0n/patches/gcc-4.6.3-uclibc-patches-1.0.tar.bz2 http://dev.gentoo.org/~zorry/patches/gcc/gcc-4.6.3-uclibc-patches-1.0.tar.bz2 mirror://gentoo/gcc-4.6.3-patches-1.11.tar.bz2 http://dev.gentoo.org/~vapier/dist/gcc-4.6.3-patches-1.11.tar.bz2 http://dev.gentoo.org/~dirtyepic/dist/gcc-4.6.3-patches-1.11.tar.bz2 http://dev.gentoo.org/~halcy0n/patches/gcc-4.6.3-patches-1.11.tar.bz2 http://dev.gentoo.org/~zorry/patches/gcc/gcc-4.6.3-patches-1.11.tar.bz2 mirror://gentoo/gcc-4.6.3-piepatches-v0.5.2.tar.bz2 http://dev.gentoo.org/~vapier/dist/gcc-4.6.3-piepatches-v0.5.2.tar.bz2 http://dev.gentoo.org/~dirtyepic/dist/gcc-4.6.3-piepatches-v0.5.2.tar.bz2 http://dev.gentoo.org/~halcy0n/patches/gcc-4.6.3-piepatches-v0.5.2.tar.bz2 http://dev.gentoo.org/~zorry/patches/gcc/gcc-4.6.3-piepatches-v0.5.2.tar.bz2 mirror://gentoo/gcc-4.4.3-specs-0.2.0.tar.bz2 http://dev.gentoo.org/~vapier/dist/gcc-4.4.3-specs-0.2.0.tar.bz2 http://dev.gentoo.org/~dirtyepic/dist/gcc-4.4.3-specs-0.2.0.tar.bz2 http://dev.gentoo.org/~halcy0n/patches/gcc-4.4.3-specs-0.2.0.tar.bz2 http://dev.gentoo.org/~zorry/patches/gcc/gcc-4.4.3-specs-0.2.0.tar.bz2 gcj? ( ftp://sourceware.org/pub/java/ecj-4.5.jar )"
declare -- SSP_STABLE="amd64 x86 mips ppc ppc64 arm"
declare -- SSP_UCLIBC_STABLE="x86 amd64 ppc ppc64 arm"
declare -- STDCXX_INCDIR="/usr/lib/gcc/i686-pc-linux-gnu/4.6.3/include/g++-v4"
declare -x STEAM_FRAME_FORCE_CLOSE="1"
declare -x SVCNAME="xdm"
declare -- TARGET_ABI=""
declare -- TARGET_DEFAULT_ABI="default"
declare -- TARGET_MULTILIB_ABIS="default"
declare -x UCLIBC_GCC_VER="4.6.3"
declare -- UCLIBC_VER="1.0"
declare -x USE="abi_x86_32 cxx elibc_glibc fortran gtk kernel_linux mudflap nls nptl openmp userland_GNU x86"
declare -x USERLAND="GNU"
declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
declare -x USE_EXPAND_UNPREFIXED="ARCH"
declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
declare -x USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin FreeBSD glibc HPUX Interix mintlib NetBSD OpenBSD SunOS uclibc Winnt"
declare -x USE_EXPAND_VALUES_KERNEL="AIX Cygwin Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt"
declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
declare -x VIDEO_CARDS=""
declare -x XDG_CONFIG_DIRS="/etc/xdg"
declare -x XDG_CONFIG_HOME="/home/ragim/.config"
declare -x XDG_CURRENT_DESKTOP="LXDE"
declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share"
declare -x XDG_MENU_PREFIX="lxde-"
declare -x XDG_SESSION_COOKIE="e5c4f2f5ac21ed98bff13352515f2e5a-1366477011.429093-691660839"
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 -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -x _LXSESSION_PID="2064"
declare -- __ELT_NOTED_TMP="true"
declare -a __ESTACK_eshopts__='()'
declare -- ___ECLASS_ONCE_EUTILS="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_FLAG_O_MATIC="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_LIBTOOL="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_MULTILIB="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_PAX_UTILS="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_TOOLCHAIN_FUNCS="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_USER="recur -_+^+_- spank"
declare -- ___ECLASS_ONCE_VERSIONATOR="recur -_+^+_- spank"
declare -- phase_func
ELT_libtool_version () 
{ 
    ( unset VERSION;
    eval $(grep -e '^[[:space:]]*VERSION=' "$1");
    echo "${VERSION:-0}" )
}
ELT_try_and_apply_patch () 
{ 
    local ret=0;
    local file=$1;
    local patch=$2;
    local src=$3;
    local disp="${src} patch";
    local log="${T}/elibtool.log";
    if [[ -z ${__ELT_NOTED_TMP} ]]; then
        __ELT_NOTED_TMP=true;
        printf 'temp patch: %s\n' "${patch}" > "${log}";
    fi;
    printf '\nTrying %s\n' "${disp}" >> "${log}";
    if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1; then
        einfo "  Applying ${disp} ...";
        patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1;
        ret=$?;
        export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}";
    else
        ret=1;
    fi;
    return "${ret}"
}
ELT_walk_patches () 
{ 
    local patch tmp;
    local ret=1;
    local file=$1;
    local patch_set=$2;
    local patch_dir="$(elt_patch_dir)/${patch_set}";
    local rem_int_dep=$3;
    [[ -z ${patch_set} ]] && return 1;
    [[ ! -d ${patch_dir} ]] && return 1;
    local sed_args=(-e "s:@GENTOO_LIBDIR@:$(get_libdir):g");
    if [[ -n ${rem_int_dep} ]]; then
        sed_args+=(-e "s|@REM_INT_DEP@|${rem_int_dep}|g");
    fi;
    pushd "$(elt_patch_dir)" > /dev/null || die;
    for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r);
    do
        tmp="${T}/libtool-elt.patch";
        sed "${sed_args[@]}" "${patch}" > "${tmp}" || die;
        if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}"; then
            ret=0;
            break;
        fi;
    done;
    popd > /dev/null;
    return ${ret}
}
VER_major () 
{ 
    [[ -z $1 ]] && return 1;
    local VER=$@;
    echo "${VER%%[^[:digit:]]*}"
}
VER_micro () 
{ 
    [[ -z $1 ]] && return 1;
    local VER=$@;
    VER=${VER#*.*.};
    echo "${VER%%[^[:digit:]]*}"
}
VER_minor () 
{ 
    [[ -z $1 ]] && return 1;
    local VER=$@;
    VER=${VER#*.};
    echo "${VER%%[^[:digit:]]*}"
}
VER_to_int () 
{ 
    [[ -z $1 ]] && return 1;
    local VER_MAJOR=$(VER_major "$1");
    local VER_MINOR=$(VER_minor "$1");
    local VER_MICRO=$(VER_micro "$1");
    local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
    if [[ ${VER_int} -ge 65536 ]]; then
        echo "${VER_int}";
        return 0;
    fi;
    echo 1;
    return 1
}
XGCC () 
{ 
    get_make_var GCC_FOR_TARGET
}
__do_sed_fix () 
{ 
    einfo " - fixed $1";
    sed -i -e 's/head \+-\([0-9]\)/head -n \1/g' -e 's/tail \+\([-+][0-9]\+\)c/tail -c \1/g' -e 's/tail \+\([-+][0-9]\)/tail -n \1/g' ${1} || die "sed ${1} failed"
}
_assert_pkg_ebuild_phase () 
{ 
    case ${EBUILD_PHASE} in 
        setup | preinst | postinst)

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

                    ;;
                    *)
                        eerror "${size} is an unsupported icon size!";
                        exit 1
                    ;;
                esac;
                shift 2
            ;;
            -t | --theme)
                theme=${2};
                shift 2
            ;;
            -c | --context)
                context=${2};
                shift 2
            ;;
            *)
                if [[ -z ${size} ]]; then
                    insinto /usr/share/pixmaps;
                else
                    insinto /usr/share/icons/${theme}/${size}/${context};
                fi;
                if [[ ${funcname} == doicon ]]; then
                    if [[ -f $1 ]]; then
                        doins "${1}";
                    else
                        if [[ -d $1 ]]; then
                            shopt -s nullglob;
                            doins "${1}"/*.{png,svg};
                            shopt -u nullglob;
                        else
                            eerror "${1} is not a valid file/directory!";
                            exit 1;
                        fi;
                    fi;
                else
                    break;
                fi;
                shift 1
            ;;
        esac;
    done;
    if [[ ${funcname} == newicon ]]; then
        newins "$@";
    fi ) || die
}
_is_flagq () 
{ 
    local x var;
    eval var=\""\${$1[*]}"\";
    for x in ${var};
    do
        [[ ${x} == $2 ]] && return 0;
    done;
    return 1
}
_pax_list_files () 
{ 
    local f cmd;
    cmd=$1;
    shift;
    for f in "$@";
    do
        ${cmd} "     ${f}";
    done
}
_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}"
}
all-flag-vars () 
{ 
    echo {C,CPP,CXX,CCAS,F,FC,LD}FLAGS
}
append-cflags () 
{ 
    [[ $# -eq 0 ]] && return 0;
    export CFLAGS=$(test-flags-CC ${CFLAGS} "$@");
    return 0
}
append-cppflags () 
{ 
    [[ $# -eq 0 ]] && return 0;
    export CPPFLAGS="${CPPFLAGS} $*";
    return 0
}
append-cxxflags () 
{ 
    [[ $# -eq 0 ]] && return 0;
    export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS} "$@");
    return 0
}
append-fflags () 
{ 
    [[ $# -eq 0 ]] && return 0;
    export FFLAGS=$(test-flags-F77 ${FFLAGS} "$@");
    export FCFLAGS=$(test-flags-FC ${FCFLAGS} "$@");
    return 0
}
append-flags () 
{ 
    [[ $# -eq 0 ]] && return 0;
    case " $* " in 
        *' '-[DIU]*)
            eqawarn 'please use append-cppflags for preprocessor flags'
        ;;
        *' '-L* | *' '-Wl,*)
            eqawarn 'please use append-ldflags for linker flags'
        ;;
    esac;
    append-cflags "$@";
    append-cxxflags "$@";
    append-fflags "$@";
    return 0
}
append-ldflags () 
{ 
    [[ $# -eq 0 ]] && return 0;
    local flag;
    for flag in "$@";
    do
        [[ ${flag} == -l* ]] && eqawarn "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 () 
{ 
    [[ $# -eq 0 ]] && 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" ]]
}
check_license () 
{ 
    die "you no longer need this as portage supports ACCEPT_LICENSE itself"
}
copy_minispecs_gcc_specs () 
{ 
    if hardened_gcc_works; then
        create_gcc_env_entry hardenednopiessp;
    fi;
    if hardened_gcc_works pie; then
        create_gcc_env_entry hardenednopie;
    fi;
    if hardened_gcc_works ssp; then
        create_gcc_env_entry hardenednossp;
    fi;
    create_gcc_env_entry vanilla;
    insinto ${LIBPATH};
    doins "${WORKDIR}"/specs/*.specs || die "failed to install specs";
    if ! tc_version_is_at_least 4.4; then
        $(XGCC) -dumpspecs > "${WORKDIR}"/specs/specs;
        cat "${WORKDIR}"/build.specs >> "${WORKDIR}"/specs/specs;
        doins "${WORKDIR}"/specs/specs || die "failed to install the specs file";
    fi
}
create_gcc_env_entry () 
{ 
    dodir /etc/env.d/gcc;
    local gcc_envd_base="/etc/env.d/gcc/${CTARGET}-${GCC_CONFIG_VER}";
    local gcc_specs_file;
    local gcc_envd_file="${D}${gcc_envd_base}";
    if [[ -z $1 ]]; then
        gcc_specs_file="";
    else
        gcc_envd_file+="-$1";
        gcc_specs_file="${LIBPATH}/$1.specs";
    fi;
    local ldpaths mosdirs;
    if tc_version_is_at_least 3.2; then
        local mdir mosdir abi ldpath;
        for abi in $(get_all_abis TARGET);
        do
            mdir=$($(XGCC) $(get_abi_CFLAGS ${abi}) --print-multi-directory);
            ldpath=${LIBPATH};
            [[ ${mdir} != "." ]] && ldpath+="/${mdir}";
            ldpaths="${ldpath}${ldpaths:+:${ldpaths}}";
            mosdir=$($(XGCC) $(get_abi_CFLAGS ${abi}) -print-multi-os-directory);
            mosdirs="${mosdir}${mosdirs:+:${mosdirs}}";
        done;
    else
        ldpaths=${LIBPATH};
    fi;
    cat > ${gcc_envd_file}  <<-EOF
PATH="${BINPATH}"
ROOTPATH="${BINPATH}"
GCC_PATH="${BINPATH}"
LDPATH="${ldpaths}"
MANPATH="${DATAPATH}/man"
INFOPATH="${DATAPATH}/info"
STDCXX_INCDIR="${STDCXX_INCDIR##*/}"
CTARGET="${CTARGET}"
GCC_SPECS="${gcc_specs_file}"
MULTIOSDIRS="${mosdirs}"
EOF

}
darwintoolize () 
{ 
    die "Use elibtoolize"
}
delete_all_version_separators () 
{ 
    replace_all_version_separators "" "${1}"
}
delete_version_separator () 
{ 
    replace_version_separator "${1}" "" "${2}"
}
do_gcc_HTB_patches () 
{ 
    use_if_iuse boundschecking || return 0;
    epatch "${WORKDIR}/bounds-checking-gcc-${HTB_GCC_VER}-${HTB_VER}.patch";
    BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION}, HTB-${HTB_GCC_VER}-${HTB_VER}"
}
do_gcc_PIE_patches () 
{ 
    want_pie || return 0;
    use vanilla && return 0;
    if tc_version_is_at_least 4.3.2; then
        guess_patch_type_in_dir "${WORKDIR}"/piepatch/;
        EPATCH_MULTI_MSG="Applying pie patches ..." epatch "${WORKDIR}"/piepatch/;
    else
        guess_patch_type_in_dir "${WORKDIR}"/piepatch/upstream;
        EPATCH_MULTI_MSG="Applying upstream pie patches ..." epatch "${WORKDIR}"/piepatch/upstream;
        EPATCH_MULTI_MSG="Applying non-default pie patches ..." epatch "${WORKDIR}"/piepatch/nondef;
        EPATCH_MULTI_MSG="Applying default pie patches ..." epatch "${WORKDIR}"/piepatch/def;
    fi;
    sed -e '/^ALL_CFLAGS/iHARD_CFLAGS = ' -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |' -i "${S}"/gcc/Makefile.in;
    if tc_version_is_at_least 4.7.0; then
        sed -e '/^ALL_CXXFLAGS/iHARD_CFLAGS = ' -e 's|^ALL_CXXFLAGS = |ALL_CXXFLAGS = $(HARD_CFLAGS) |' -i "${S}"/gcc/Makefile.in;
    fi;
    BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION}, pie-${PIE_VER}"
}
do_gcc_config () 
{ 
    if ! should_we_gcc_config; then
        env -i ROOT="${ROOT}" gcc-config --use-old --force;
        return 0;
    fi;
    local current_gcc_config="" current_specs="" use_specs="";
    current_gcc_config=$(env -i ROOT="${ROOT}" gcc-config -c ${CTARGET} 2>/dev/null);
    if [[ -n ${current_gcc_config} ]]; then
        current_specs=$(gcc-config -S ${current_gcc_config} | awk '{print $3}');
        [[ -n ${current_specs} ]] && use_specs=-${current_specs};
    fi;
    if [[ -n ${use_specs} ]] && [[ ! -e ${ROOT}/etc/env.d/gcc/${CTARGET}-${GCC_CONFIG_VER}${use_specs} ]]; then
        ewarn "The currently selected specs-specific gcc config,";
        ewarn "${current_specs}, doesn't exist anymore. This is usually";
        ewarn "due to enabling/disabling hardened or switching to a version";
        ewarn "of gcc that doesnt create multiple specs files. The default";
        ewarn "config will be used, and the previous preference forgotten.";
        ebeep;
        epause;
        use_specs="";
    fi;
    gcc-config ${CTARGET}-${GCC_CONFIG_VER}${use_specs}
}
do_gcc_rename_java_bins () 
{ 
    einfo "Renaming jdk executables rmic and rmiregistry to grmic and grmiregistry.";
    for manfile in rmic rmiregistry;
    do
        [[ -f ${S}/gcc/doc/${manfile}.1 ]] || continue;
        mv "${S}"/gcc/doc/${manfile}.1 "${S}"/gcc/doc/g${manfile}.1;
    done;
    for jfile in gcc/doc/gcj.info gcc/doc/grmic.1 gcc/doc/grmiregistry.1 gcc/java/gcj.texi;
    do
        [[ -f ${S}/${jfile} ]] || continue;
        sed -i -e 's:rmiregistry:grmiregistry:g' "${S}"/${jfile} || die "Failed to fixup file ${jfile} for rename to grmiregistry";
        sed -i -e 's:rmic:grmic:g' "${S}"/${jfile} || die "Failed to fixup file ${jfile} for rename to grmic";
    done;
    for jfile in libjava/Makefile.am libjava/Makefile.in gcc/java/Make-lang.in;
    do
        sed -i -e 's:rmiregistry:grmiregistry:g' "${S}"/${jfile} || die "Failed to fixup file ${jfile} for rename to grmiregistry";
        sed -i -e 's:rmic\([$_ ]\):grmic\1:g' "${S}"/${jfile} || die "Failed to fixup file ${jfile} for rename to grmic";
    done
}
doicon () 
{ 
    _iconins ${FUNCNAME} "$@"
}
domenu () 
{ 
    ( local i j ret=0;
    insinto /usr/share/applications;
    for i in "$@";
    do
        if [[ -f ${i} ]]; then
            doins "${i}";
            ((ret+=$?));
        else
            if [[ -d ${i} ]]; then
                for j in "${i}"/*.desktop;
                do
                    doins "${j}";
                    ((ret+=$?));
                done;
            else
                ((++ret));
            fi;
        fi;
    done;
    exit ${ret} )
}
ebeep () 
{ 
    local n;
    if [[ -z ${EBEEP_IGNORE} ]]; then
        for ((n=1 ; n <= ${1:-5} ; n++))
        do
            echo -ne "\a";
            sleep 0.1 &>/dev/null;
            sleep 0,1 &>/dev/null;
            echo -ne "\a";
            sleep 1;
        done;
    fi
}
econf_build () 
{ 
    tc-env_build econf --build=${CBUILD:-${CHOST}} "$@"
}
ecvs_clean () 
{ 
    [[ -z $* ]] && set -- .;
    find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
    find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
}
edos2unix () 
{ 
    [[ $# -eq 0 ]] && return 0;
    sed -i 's/\r$//' -- "$@" || die
}
egetent () 
{ 
    local db=$1 key=$2;
    [[ $# -ge 3 ]] && die "usage: egetent <database> <key>";
    case ${db} in 
        passwd | group)

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

                ;;
            esac;
            local opts;
            if [[ ${key} == [[:digit:]]* ]]; then
                [[ ${db} == "user" ]] && opts="-u" || opts="-g";
            fi;
            pw show ${db} ${opts} "${key}" -q
        ;;
        *-netbsd* | *-openbsd*)
            grep "${key}:\*:" /etc/${db}
        ;;
        *)
            nscd -i "${db}" 2> /dev/null;
            getent "${db}" "${key}"
        ;;
    esac
}
egethome () 
{ 
    local pos;
    [[ $# -eq 1 ]] || die "usage: egethome <user>";
    case ${CHOST} in 
        *-darwin* | *-freebsd* | *-dragonfly*)
            pos=9
        ;;
        *)
            pos=6
        ;;
    esac;
    egetent passwd "$1" | cut -d: -f${pos}
}
egetshell () 
{ 
    local pos;
    [[ $# -eq 1 ]] || die "usage: egetshell <user>";
    case ${CHOST} in 
        *-darwin* | *-freebsd* | *-dragonfly*)
            pos=10
        ;;
        *)
            pos=7
        ;;
    esac;
    egetent passwd "$1" | cut -d: -f${pos}
}
elibtoolize () 
{ 
    local x;
    local do_portage="no";
    local do_reversedeps="no";
    local do_only_patches="no";
    local do_uclibc="yes";
    local deptoremove=;
    local do_shallow="no";
    local force="false";
    local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed";
    for x in "$@";
    do
        case ${x} in 
            --portage)
                do_portage="yes"
            ;;
            --reverse-deps)
                do_reversedeps="yes";
                elt_patches+=" fix-relink"
            ;;
            --patch-only)
                do_only_patches="yes"
            ;;
            --remove-internal-dep=*)
                deptoremove=${x#--remove-internal-dep=};
                [[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep"
            ;;
            --shallow)
                do_shallow="yes"
            ;;
            --no-uclibc)
                do_uclibc="no"
            ;;
            --force)
                force="true"
            ;;
            *)
                eerror "Invalid elibtoolize option: ${x}";
                die "elibtoolize called with ${x} ??"
            ;;
        esac;
    done;
    [[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf";
    case ${CHOST} in 
        *-aix*)
            elt_patches+=" hardcode aixrtl aix-noundef"
        ;;
        *-darwin*)
            elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf"
        ;;
        *-solaris*)
            elt_patches+=" sol2-conf sol2-ltmain"
        ;;
        *-freebsd*)
            elt_patches+=" fbsd-conf fbsd-ltconf"
        ;;
        *-hpux*)
            elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc"
        ;;
        *-irix*)
            elt_patches+=" irix-ltmain"
        ;;
        *-mint*)
            elt_patches+=" mint-conf"
        ;;
    esac;
    if $(tc-getLD) --version 2>&1 | grep -qs 'GNU gold'; then
        elt_patches+=" gold-conf";
    fi;
    set --;
    if [[ ${do_shallow} == "yes" ]]; then
        [[ -f ${S}/ltmain.sh ]] && set -- "${S}";
    else
        set -- $(find "${S}" -name ltmain.sh -printf '%h ');
    fi;
    local d p;
    for d in "$@";
    do
        export ELT_APPLIED_PATCHES=;
        if [[ -f ${d}/.elibtoolized ]]; then
            ${force} || continue;
        fi;
        local outfunc="einfo";
        [[ -f ${d}/.elibtoolized ]] && outfunc="ewarn";
        ${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/";
        if [[ ${outfunc} == "ewarn" ]]; then
            ewarn "  We've already been run in this tree; you should";
            ewarn "  avoid this if possible (perhaps by filing a bug)";
        fi;
        for p in ${elt_patches};
        do
            local ret=0;
            case ${p} in 
                portage)
                    if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
                        ELT_walk_patches "${d}/ltmain.sh" "${p}";
                        ret=$?;
                    fi
                ;;
                rem-int-dep)
                    ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}";
                    ret=$?
                ;;
                fix-relink)
                    if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh"; then
                        ELT_walk_patches "${d}/ltmain.sh" "${p}";
                        ret=$?;
                    fi
                ;;
                max_cmd_len)
                    if grep -qs 'max_cmd_len' "${d}/ltmain.sh"; then
                        ELT_walk_patches "${d}/ltmain.sh" "${p}";
                        ret=$?;
                    fi
                ;;
                as-needed)
                    ELT_walk_patches "${d}/ltmain.sh" "${p}";
                    ret=$?
                ;;
                uclibc-conf)
                    if grep -qs 'Transform linux' "${d}/configure"; then
                        ELT_walk_patches "${d}/configure" "${p}";
                        ret=$?;
                    else
                        if [[ ! -e ${d}/configure ]] && grep -qs 'Transform linux' "${d}/../configure"; then
                            ELT_walk_patches "${d}/../configure" "${p}";
                            ret=$?;
                        fi;
                    fi
                ;;
                uclibc-ltconf)
                    if [[ -s ${d}/ltconfig ]]; then
                        ELT_walk_patches "${d}/ltconfig" "${p}";
                        ret=$?;
                    fi
                ;;
                fbsd-conf)
                    if grep -qs 'version_type=freebsd-' "${d}/configure"; then
                        ELT_walk_patches "${d}/configure" "${p}";
                        ret=$?;
                    else
                        if [[ ! -e ${d}/configure ]] && grep -qs 'version_type=freebsd-' "${d}/../configure"; then
                            ELT_walk_patches "${d}/../configure" "${p}";
                            ret=$?;
                        fi;
                    fi
                ;;
                fbsd-ltconf)
                    if [[ -s ${d}/ltconfig ]]; then
                        ELT_walk_patches "${d}/ltconfig" "${p}";
                        ret=$?;
                    fi
                ;;
                darwin-conf)
                    if grep -qs '&& echo \.so ||' "${d}/configure"; then
                        ELT_walk_patches "${d}/configure" "${p}";
                        ret=$?;
                    else
                        if [[ ! -e ${d}/configure ]] && grep -qs '&& echo \.so ||' "${d}/../configure"; then
                            ELT_walk_patches "${d}/../configure" "${p}";
                            ret=$?;
                        fi;
                    fi
                ;;
                darwin-ltconf)
                    if [[ -s ${d}/ltconfig ]]; then
                        ELT_walk_patches "${d}/ltconfig" "${p}";
                        ret=$?;
                    fi
                ;;
                darwin-ltmain)
                    if [[ -e ${d}/ltmain.sh ]] && ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh"; then
                        ELT_walk_patches "${d}/ltmain.sh" "${p}";
                        ret=$?;
                    fi
                ;;
                aixrtl | hpux-conf)
                    ret=1;
                    local subret=0;
                    while [[ $subret -eq 0 ]]; do
                        subret=1;
                        if [[ -e ${d}/configure ]]; then
                            ELT_walk_patches "${d}/configure" "${p}";
                            subret=$?;
                        else
                            if [[ ! -e ${d}/configure && -e ${d}/../configure ]]; then
                                ELT_walk_patches "${d}/../configure" "${p}";
                                subret=$?;
                            fi;
                        fi;
                        if [[ $subret -eq 0 ]]; then
                            ret=0;
                        fi;
                    done
                ;;
                mint-conf | gold-conf | sol2-conf)
                    ret=1;
                    local subret=1;
                    if [[ -e ${d}/configure ]]; then
                        ELT_walk_patches "${d}/configure" "${p}";
                        subret=$?;
                    else
                        if [[ -e ${d}/../configure ]]; then
                            ELT_walk_patches "${d}/../configure" "${p}";
                            subret=$?;
                        else
                            if [[ -e ${d}/../../configure ]]; then
                                ELT_walk_patches "${d}/../../configure" "${p}";
                                subret=$?;
                            fi;
                        fi;
                    fi;
                    if [[ $subret -eq 0 ]]; then
                        ret=0;
                    fi
                ;;
                install-sh)
                    ELT_walk_patches "${d}/install-sh" "${p}";
                    ret=$?
                ;;
                cross)
                    if tc-is-cross-compiler; then
                        ELT_walk_patches "${d}/ltmain.sh" "${p}";
                        ret=$?;
                    fi
                ;;
                *)
                    ELT_walk_patches "${d}/ltmain.sh" "${p}";
                    ret=$?
                ;;
            esac;
            if [[ ${ret} -ne 0 ]]; then
                case ${p} in 
                    relink)
                        local version=$(ELT_libtool_version "${d}/ltmain.sh");
                        if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
                            ewarn "  Could not apply relink.patch!";
                        fi
                    ;;
                    portage)
                        if [[ ${do_portage} == "yes" ]]; then
                            if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
                                echo;
                                eerror "Portage patch requested, but failed to apply!";
                                eerror "Please file a bug report to add a proper patch.";
                                die "Portage patch requested, but failed to apply!";
                            fi;
                        else
                            if grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
                                :;
                            else
                                local version=$(ELT_libtool_version "${d}"/ltmain.sh);
                                echo;
                                eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
                                eerror "Please file a bug report to add a proper patch.";
                                die "Portage patch failed to apply!";
                            fi;
                            ELT_APPLIED_PATCHES="portage";
                        fi
                    ;;
                    uclibc-*)
                        [[ ${CHOST} == *-uclibc ]] && ewarn "  uClibc patch set '${p}' failed to apply!"
                    ;;
                    fbsd-*)
                        if [[ ${CHOST} == *-freebsd* ]]; then
                            if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' 								"${d}/configure" "${d}/../configure" 2>/dev/null) ]]; then
                                eerror "  FreeBSD patch set '${p}' failed to apply!";
                                die "FreeBSD patch set '${p}' failed to apply!";
                            fi;
                        fi
                    ;;
                    darwin-*)
                        [[ ${CHOST} == *"-darwin"* ]] && ewarn "  Darwin patch set '${p}' failed to apply!"
                    ;;
                esac;
            fi;
        done;
        if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
            if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
                ewarn "Cannot apply any patches, please file a bug about this";
                die;
            fi;
        fi;
        rm -f "${d}/libtool";
         > "${d}/.elibtoolized";
    done
}
elt_patch_dir () 
{ 
    local d="${ECLASSDIR}/ELT-patches";
    if [[ ! -d ${d} ]]; then
        d="${ECLASSDIR_LOCAL}/ELT-patches";
    fi;
    echo "${d}"
}
emktemp () 
{ 
    local exe="touch";
    [[ $1 == -d ]] && exe="mkdir" && shift;
    local topdir=$1;
    if [[ -z ${topdir} ]]; then
        [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
    fi;
    if ! type -P mktemp > /dev/null; then
        local tmp=/;
        while [[ -e ${tmp} ]]; do
            tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
        done;
        ${exe} "${tmp}" || ${exe} -p "${tmp}";
        echo "${tmp}";
    else
        if [[ ${exe} == "touch" ]]; then
            TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
        else
            TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
        fi;
    fi
}
enewgroup () 
{ 
    _assert_pkg_ebuild_phase ${FUNCNAME};
    local egroup=$1;
    shift;
    if [[ -z ${egroup} ]]; then
        eerror "No group specified !";
        die "Cannot call enewgroup without a group";
    fi;
    if [[ -n $(egetent group "${egroup}") ]]; then
        return 0;
    fi;
    einfo "Adding group '${egroup}' to your system ...";
    local egid=$1;
    shift;
    if [[ ! -z ${egid} ]]; then
        if [[ ${egid} -gt 0 ]]; then
            if [[ -n $(egetent group ${egid}) ]]; then
                egid="next available; requested gid taken";
            fi;
        else
            eerror "Groupid given but is not greater than 0 !";
            die "${egid} is not a valid GID";
        fi;
    else
        egid="next available";
    fi;
    einfo " - Groupid: ${egid}";
    if [[ $# -gt 0 ]]; then
        die "extra arguments no longer supported; please file a bug";
    fi;
    function _enewgroup_next_gid () 
    { 
        if [[ ${egid} == *[!0-9]* ]]; then
            for ((egid = 101; egid <= 999; egid++))
            do
                [[ -z $(egetent group ${egid}) ]] && break;
            done;
        fi
    };
    case ${CHOST} in 
        *-darwin*)
            _enewgroup_next_gid;
            dscl . create "/groups/${egroup}" gid ${egid};
            dscl . create "/groups/${egroup}" passwd '*'
        ;;
        *-freebsd* | *-dragonfly*)
            _enewgroup_next_gid;
            pw groupadd "${egroup}" -g ${egid} || die
        ;;
        *-netbsd*)
            _enewgroup_next_gid;
            groupadd -g ${egid} "${egroup}" || die
        ;;
        *)
            local opts;
            if [[ ${egid} == *[!0-9]* ]]; then
                opts="";
            else
                opts="-g ${egid}";
            fi;
            groupadd -r ${opts} "${egroup}" || die
        ;;
    esac
}
enewuser () 
{ 
    _assert_pkg_ebuild_phase ${FUNCNAME};
    local euser=$1;
    shift;
    if [[ -z ${euser} ]]; then
        eerror "No username specified !";
        die "Cannot call enewuser without a username";
    fi;
    if [[ -n $(egetent passwd "${euser}") ]]; then
        return 0;
    fi;
    einfo "Adding user '${euser}' to your system ...";
    local opts=();
    local euid=$1;
    shift;
    if [[ -n ${euid} && ${euid} != -1 ]]; then
        if [[ ${euid} -gt 0 ]]; then
            if [[ -n $(egetent passwd ${euid}) ]]; then
                euid="next";
            fi;
        else
            eerror "Userid given but is not greater than 0 !";
            die "${euid} is not a valid UID";
        fi;
    else
        euid="next";
    fi;
    if [[ ${euid} == "next" ]]; then
        for ((euid = 101; euid <= 999; euid++))
        do
            [[ -z $(egetent passwd ${euid}) ]] && break;
        done;
    fi;
    opts+=(-u ${euid});
    einfo " - Userid: ${euid}";
    local eshell=$1;
    shift;
    if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then
        if [[ ! -e ${ROOT}${eshell} ]]; then
            eerror "A shell was specified but it does not exist !";
            die "${eshell} does not exist in ${ROOT}";
        fi;
        if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then
            eerror "Do not specify ${eshell} yourself, use -1";
            die "Pass '-1' as the shell parameter";
        fi;
    else
        for eshell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null;
        do
            [[ -x ${ROOT}${eshell} ]] && break;
        done;
        if [[ ${eshell} == "/dev/null" ]]; then
            eerror "Unable to identify the shell to use, proceeding with userland default.";
            case ${USERLAND} in 
                GNU)
                    eshell="/bin/false"
                ;;
                BSD)
                    eshell="/sbin/nologin"
                ;;
                Darwin)
                    eshell="/usr/sbin/nologin"
                ;;
                *)
                    die "Unable to identify the default shell for userland ${USERLAND}"
                ;;
            esac;
        fi;
    fi;
    einfo " - Shell: ${eshell}";
    opts+=(-s "${eshell}");
    local ehome=$1;
    shift;
    if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then
        ehome="/dev/null";
    fi;
    einfo " - Home: ${ehome}";
    opts+=(-d "${ehome}");
    local egroups=$1;
    shift;
    local g egroups_arr;
    IFS="," read -r -a egroups_arr <<< "${egroups}";
    shift;
    if [[ ${#egroups_arr[@]} -gt 0 ]]; then
        local defgroup exgroups;
        for g in "${egroups_arr[@]}";
        do
            if [[ -z $(egetent group "${g}") ]]; then
                eerror "You must add group ${g} to the system first";
                die "${g} is not a valid GID";
            fi;
            if [[ -z ${defgroup} ]]; then
                defgroup=${g};
            else
                exgroups+=",${g}";
            fi;
        done;
        opts+=(-g "${defgroup}");
        if [[ ! -z ${exgroups} ]]; then
            opts+=(-G "${exgroups:1}");
        fi;
    fi;
    einfo " - Groups: ${egroups:-(none)}";
    if [[ $# -gt 0 ]]; then
        die "extra arguments no longer supported; please file a bug";
    else
        local comment="added by portage for ${PN}";
        opts+=(-c "${comment}");
        einfo " - GECOS: ${comment}";
    fi;
    case ${CHOST} in 
        *-darwin*)
            dscl . create "/users/${euser}" uid ${euid};
            dscl . create "/users/${euser}" shell "${eshell}";
            dscl . create "/users/${euser}" home "${ehome}";
            dscl . create "/users/${euser}" realname "added by portage for ${PN}";
            for g in "${egroups_arr[@]}";
            do
                dscl . merge "/groups/${g}" users "${euser}";
            done
        ;;
        *-freebsd* | *-dragonfly*)
            pw useradd "${euser}" "${opts[@]}" || die
        ;;
        *-netbsd*)
            useradd "${opts[@]}" "${euser}" || die
        ;;
        *-openbsd*)
            useradd -u ${euid} -s "${eshell}" -d "${ehome}" -g "${egroups}" "${euser}" || die
        ;;
        *)
            useradd -r "${opts[@]}" "${euser}" || die
        ;;
    esac;
    if [[ ! -e ${ROOT}/${ehome} ]]; then
        einfo " - Creating ${ehome} in ${ROOT}";
        mkdir -p "${ROOT}/${ehome}";
        chown "${euser}" "${ROOT}/${ehome}";
        chmod 755 "${ROOT}/${ehome}";
    fi
}
epatch () 
{ 
    function _epatch_draw_line () 
    { 
        [[ -z $1 ]] && set "$(printf "%65s" '')";
        echo "${1//?/=}"
    };
    unset P4CONFIG P4PORT P4USER;
    local EPATCH_OPTS=(${EPATCH_OPTS[*]});
    while [[ $# -gt 0 ]]; do
        case $1 in 
            -*)
                EPATCH_OPTS+=("$1")
            ;;
            *)
                break
            ;;
        esac;
        shift;
    done;
    if [[ $# -gt 1 ]]; then
        local m;
        for m in "$@";
        do
            epatch "${m}";
        done;
        return 0;
    fi;
    local SINGLE_PATCH="no";
    [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}";
    if [[ -f $1 ]]; then
        SINGLE_PATCH="yes";
        set -- "$1";
        local EPATCH_SUFFIX=$1;
    else
        if [[ -d $1 ]]; then
            set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
        else
            if [[ -f ${EPATCH_SOURCE}/$1 ]]; then
                epatch "${EPATCH_SOURCE}/$1";
                return $?;
            else
                [[ $# -ne 0 ]] && EPATCH_SOURCE=$1;
                echo;
                eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:";
                eerror;
                eerror "  ${EPATCH_SOURCE}";
                eerror "  ( ${EPATCH_SOURCE##*/} )";
                echo;
                die "Cannot find \$EPATCH_SOURCE!";
            fi;
        fi;
    fi;
    EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
    local PIPE_CMD;
    case ${EPATCH_SUFFIX##*\.} in 
        xz)
            PIPE_CMD="xz -dc"
        ;;
        lzma)
            PIPE_CMD="lzma -dc"
        ;;
        bz2)
            PIPE_CMD="bzip2 -dc"
        ;;
        gz | Z | z)
            PIPE_CMD="gzip -dc"
        ;;
        ZIP | zip)
            PIPE_CMD="unzip -p"
        ;;
        *)

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

EOF

        eend 0;
    done;
    [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
    :
}
epatch_user () 
{ 
    [[ $# -ne 0 ]] && die "epatch_user takes no options";
    local applied="${T}/epatch_user.log";
    [[ -e ${applied} ]] && return 2;
    local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
    for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT}};
    do
        EPATCH_SOURCE=${base}/${CTARGET}/${check};
        [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check};
        [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check};
        if [[ -d ${EPATCH_SOURCE} ]]; then
            EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch;
            echo "${EPATCH_SOURCE}" > "${applied}";
            return 0;
        fi;
    done;
    echo "none" > "${applied}";
    return 1
}
epause () 
{ 
    [[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5}
}
epunt_cxx () 
{ 
    local dir=$1;
    [[ -z ${dir} ]] && dir=${S};
    ebegin "Removing useless C++ checks";
    local f p any_found;
    while IFS= read -r -d '' f; do
        for p in "${PORTDIR}"/eclass/ELT-patches/nocxx/*.patch;
        do
            if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
                any_found=1;
                break;
            fi;
        done;
    done < <(find "${dir}" -name configure -print0);
    if [[ -z ${any_found} ]]; then
        eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
    fi;
    eend 0
}
esethome () 
{ 
    _assert_pkg_ebuild_phase ${FUNCNAME};
    local euser=$1;
    shift;
    if [[ -z ${euser} ]]; then
        eerror "No username specified !";
        die "Cannot call esethome without a username";
    fi;
    if [[ -z $(egetent passwd "${euser}") ]]; then
        ewarn "User does not exist, cannot set home dir -- skipping.";
        return 1;
    fi;
    local ehome=$1;
    shift;
    if [[ -z ${ehome} ]]; then
        eerror "No home directory specified !";
        die "Cannot call esethome without a home directory or '-1'";
    fi;
    if [[ ${ehome} == "-1" ]]; then
        ehome="/dev/null";
    fi;
    if [[ $(egethome "${euser}") == ${ehome} ]]; then
        return 0;
    fi;
    einfo "Updating home for user '${euser}' ...";
    einfo " - Home: ${ehome}";
    if [[ ! -e ${ROOT}/${ehome} ]]; then
        einfo " - Creating ${ehome} in ${ROOT}";
        mkdir -p "${ROOT}/${ehome}";
        chown "${euser}" "${ROOT}/${ehome}";
        chmod 755 "${ROOT}/${ehome}";
    fi;
    case ${CHOST} in 
        *-darwin*)
            dscl . change "/users/${euser}" home "${ehome}"
        ;;
        *-freebsd* | *-dragonfly*)
            pw usermod "${euser}" -d "${ehome}" && return 0;
            [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home";
            eerror "There was an error when attempting to update the home directory for ${euser}";
            eerror "Please update it manually on your system:";
            eerror "\t pw usermod \"${euser}\" -d \"${ehome}\""
        ;;
        *)
            usermod -d "${ehome}" "${euser}" && return 0;
            [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home";
            eerror "There was an error when attempting to update the home directory for ${euser}";
            eerror "Please update it manually on your system (as root):";
            eerror "\t usermod -d \"${ehome}\" \"${euser}\""
        ;;
    esac
}
eshopts_pop () 
{ 
    local s;
    estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
    if [[ ${s} == "shopt -"* ]]; then
        eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
    else
        set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
        set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
    fi
}
eshopts_push () 
{ 
    if [[ $1 == -[su] ]]; then
        estack_push eshopts "$(shopt -p)";
        [[ $# -eq 0 ]] && return 0;
        shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
    else
        estack_push eshopts $-;
        [[ $# -eq 0 ]] && return 0;
        set "$@" || die "${FUNCNAME}: bad options to set: $*";
    fi
}
estack_pop () 
{ 
    [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
    local __estack_name="__ESTACK_$1__";
    shift;
    local __estack_retvar=$1;
    shift;
    eval local __estack_i=\${#${__estack_name}\[@\]};
    [[ $(( --__estack_i )) -eq -1 ]] && return 1;
    if [[ -n ${__estack_retvar} ]]; then
        eval ${__estack_retvar}=\"\${${__estack_name}\[${__estack_i}\]}\";
    fi;
    eval unset ${__estack_name}\[${__estack_i}\]
}
estack_push () 
{ 
    [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments";
    local stack_name="__ESTACK_$1__";
    shift;
    eval ${stack_name}+=\( \"\$@\" \)
}
esvn_clean () 
{ 
    [[ -z $* ]] && set -- .;
    find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
}
eumask_pop () 
{ 
    [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options";
    local s;
    estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
    umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
}
eumask_push () 
{ 
    estack_push eumask "$(umask)";
    umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
}
filter-flags () 
{ 
    _filter-hardened "$@";
    local v;
    for v in $(all-flag-vars);
    do
        _filter-var ${v} "$@";
    done;
    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
}
fix_libtool_libdir_paths () 
{ 
    pushd "${D}" > /dev/null;
    pushd "./${1}" > /dev/null;
    local dir="${PWD#${D%/}}";
    local allarchives=$(echo *.la);
    allarchives="\(${allarchives// /\\|}\)";
    popd > /dev/null;
    sed -i -e "/^libdir=/s:=.*:='${dir}':" ./${dir}/*.la;
    sed -i -e "/^dependency_libs=/s:/[^ ]*/${allarchives}:${LIBPATH}/\1:g" $(find ./${PREFIX}/lib* -maxdepth 3 -name '*.la') ./${dir}/*.la;
    popd > /dev/null
}
gcc-abi-map () 
{ 
    local map=();
    case ${CTARGET} in 
        mips*)
            map=("o32 32" "n32 n32" "n64 64")
        ;;
        x86_64*)
            map=("amd64 m64" "x86 m32" "x32 mx32")
        ;;
    esac;
    local m;
    for m in "${map[@]}";
    do
        l=(${m});
        [[ $1 == ${l[0]} ]] && echo ${l[1]} && break;
    done
}
gcc-compiler-configure () 
{ 
    gcc-multilib-configure;
    if tc_version_is_at_least "4.0"; then
        if in_iuse mudflap; then
            confgcc+=" $(use_enable mudflap libmudflap)";
        else
            confgcc+=" --disable-libmudflap";
        fi;
        if use_if_iuse libssp; then
            confgcc+=" --enable-libssp";
        else
            export gcc_cv_libc_provides_ssp=yes;
            confgcc+=" --disable-libssp";
        fi;
        if tc_version_is_at_least 4.4 && want_minispecs; then
            confgcc+=" $(use_enable hardened esp)";
        fi;
        if tc_version_is_at_least "4.2"; then
            if in_iuse openmp; then
                if ! is_crosscompile || $(tc-getCPP ${CTARGET}) -E - <<< "#include <pthread.h>" &>/dev/null; then
                    confgcc+=" $(use_enable openmp libgomp)";
                else
                    confgcc+=" --disable-libgomp";
                fi;
            else
                confgcc+=" --disable-libgomp";
            fi;
        fi;
        if tc_version_is_at_least "4.4"; then
            confgcc+=" --with-python-dir=${DATAPATH/$PREFIX/}/python";
        fi;
    fi;
    is_crosscompile && confgcc+=" --enable-poison-system-directories";
    if tc_version_is_at_least 4 || [[ -n ${GCC_CHECKS_LIST} ]]; then
        confgcc+=" --enable-checking=${GCC_CHECKS_LIST:-release}";
    else
        confgcc+=" --disable-checking";
    fi;
    if ! is_gcj; then
        confgcc+=" --disable-libgcj";
    else
        if use gtk; then
            confgcc+=" --enable-java-awt=gtk";
        fi;
    fi;
    if tc_version_is_at_least 4.4 && is_cxx; then
        confgcc+=" --enable-libstdcxx-time";
    fi;
    if tc_version_is_at_least 4.7 && ! is_cxx; then
        confgcc+=" --disable-build-with-cxx --disable-build-poststage1-with-cxx";
    fi;
    if tc_version_is_at_least 4.6 && ! is_fortran; then
        confgcc+=" --disable-libquadmath";
    fi;
    local with_abi_map=();
    case $(tc-arch) in 
        arm)
            local a arm_arch=${CTARGET%%-*};
            for a in e{b,l} {b,l}e b l;
            do
                if [[ ${arm_arch} == *${a} ]]; then
                    arm_arch=${arm_arch%${a}};
                    break;
                fi;
            done;
            [[ ${arm_arch} == armv7? ]] && arm_arch=${arm_arch/7/7-};
            if ( srcdir=${S}/gcc target=${CTARGET} with_arch=${arm_arch};
            . "${srcdir}"/config.gcc ) &>/dev/null; then
                confgcc+=" --with-arch=${arm_arch}";
            fi;
            if [[ $(tc-is-softfloat) == "no" ]] && [[ ${CTARGET} == armv[67]* ]] && tc_version_is_at_least "4.5"; then
                confgcc+=" --with-float=hard";
                case ${CTARGET} in 
                    armv6*)
                        confgcc+=" --with-fpu=vfp"
                    ;;
                    armv7*)
                        confgcc+=" --with-fpu=vfpv3-d16"
                    ;;
                esac;
            fi
        ;;
        mips)
            confgcc+=" --with-abi=$(gcc-abi-map ${TARGET_DEFAULT_ABI})"
        ;;
        amd64)
            if tc_version_is_at_least 4.7 && has x32 $(get_all_abis TARGET); then
                confgcc+=" --with-abi=$(gcc-abi-map ${TARGET_DEFAULT_ABI})";
            fi
        ;;
        x86)
            confgcc+=" --with-arch=${CTARGET%%-*}"
        ;;
        hppa)
            [[ ${GCCMAJOR} == "3" ]] && confgcc+=" --enable-sjlj-exceptions"
        ;;
        ppc)
            is-flagq -mfloat-gprs=double && confgcc+=" --enable-e500-double";
            [[ ${CTARGET//_/-} == *-e500v2-* ]] && confgcc+=" --enable-e500-double"
        ;;
    esac;
    local GCC_LANG="c";
    is_cxx && GCC_LANG+=",c++";
    is_d && GCC_LANG+=",d";
    is_gcj && GCC_LANG+=",java";
    is_go && GCC_LANG+=",go";
    if is_objc || is_objcxx; then
        GCC_LANG+=",objc";
        if tc_version_is_at_least "4.0"; then
            use objc-gc && confgcc+=" --enable-objc-gc";
        fi;
        is_objcxx && GCC_LANG+=",obj-c++";
    fi;
    is_treelang && GCC_LANG+=",treelang";
    is_fortran && GCC_LANG+=",fortran";
    is_f77 && GCC_LANG+=",f77";
    is_f95 && GCC_LANG+=",f95";
    einfo "configuring for GCC_LANG: ${GCC_LANG}";
    confgcc+=" --enable-languages=${GCC_LANG}"
}
gcc-fullversion () 
{ 
    _gcc_fullversion '$1.$2.$3' "$@"
}
gcc-lang-supported () 
{ 
    grep ^language=\"${1}\" "${S}"/gcc/*/config-lang.in > /dev/null || return 1;
    [[ -z ${TOOLCHAIN_ALLOWED_LANGS} ]] && return 0;
    has $1 ${TOOLCHAIN_ALLOWED_LANGS}
}
gcc-major-version () 
{ 
    _gcc_fullversion '$1' "$@"
}
gcc-micro-version () 
{ 
    _gcc_fullversion '$3' "$@"
}
gcc-minor-version () 
{ 
    _gcc_fullversion '$2' "$@"
}
gcc-multilib-configure () 
{ 
    if ! is_multilib; then
        confgcc+=" --disable-multilib";
    else
        confgcc+=" --enable-multilib";
    fi;
    local abi list;
    for abi in $(get_all_abis TARGET);
    do
        local l=$(gcc-abi-map ${abi});
        [[ -n ${l} ]] && list+=",${l}";
    done;
    if [[ -n ${list} ]]; then
        case ${CTARGET} in 
            x86_64*)
                tc_version_is_at_least 4.7 && confgcc+=" --with-multilib-list=${list:1}"
            ;;
        esac;
    fi
}
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' "$@"
}
gcc_do_configure () 
{ 
    local confgcc;
    confgcc+=" 		--prefix=${PREFIX} 		--bindir=${BINPATH} 		--includedir=${INCLUDEPATH} 		--datadir=${DATAPATH} 		--mandir=${DATAPATH}/man 		--infodir=${DATAPATH}/info 		--with-gxx-include-dir=${STDCXX_INCDIR}";
    [[ ${CTARGET} == *-darwin* ]] && confgcc+=" --enable-version-specific-runtime-libs";
    confgcc+=" --host=${CHOST}";
    if is_crosscompile || tc-is-cross-compiler; then
        confgcc+=" --target=${CTARGET}";
    fi;
    [[ -n ${CBUILD} ]] && confgcc+=" --build=${CBUILD}";
    confgcc+=" $(use_enable altivec)";
    tc_version_is_at_least "4.3" && confgcc+=" $(use_enable fixed-point)";
    if tc_version_is_at_least "4.4"; then
        confgcc+=" $(use_with graphite ppl)";
        confgcc+=" $(use_with graphite cloog)";
        if use graphite; then
            if tc_version_is_at_least "4.8"; then
                confgcc+=" --disable-isl-version-check";
                confgcc+=" --with-cloog";
            else
                confgcc+=" --disable-ppl-version-check";
                confgcc+=" --with-cloog-include=/usr/include/cloog-ppl";
            fi;
        fi;
    fi;
    if tc_version_is_at_least "4.6"; then
        confgcc+=" --enable-lto";
    else
        if tc_version_is_at_least "4.5"; then
            confgcc+=" $(use_enable lto)";
        fi;
    fi;
    case $(tc-is-softfloat) in 
        yes)
            confgcc+=" --with-float=soft"
        ;;
        softfp)
            confgcc+=" --with-float=softfp"
        ;;
        *)
            [[ ${CTARGET//_/-} == *-hardfloat-* ]] && confgcc+=" --with-float=hard"
        ;;
    esac;
    if use nls; then
        confgcc+=" --enable-nls --without-included-gettext";
    else
        confgcc+=" --disable-nls";
    fi;
    confgcc+=" 		--with-system-zlib 		--enable-obsolete 		--disable-werror 		--enable-secureplt";
    gcc-compiler-configure || die;
    if is_crosscompile; then
        local needed_libc="";
        case ${CTARGET} in 
            *-linux)
                needed_libc=no-fucking-clue
            ;;
            *-dietlibc)
                needed_libc=dietlibc
            ;;
            *-elf | *-eabi)
                needed_libc=newlib
            ;;
            *-freebsd*)
                needed_libc=freebsd-lib
            ;;
            *-gnu*)
                needed_libc=glibc
            ;;
            *-klibc)
                needed_libc=klibc
            ;;
            *-uclibc*)
                if ! echo '#include <features.h>' | $(tc-getCPP ${CTARGET}) -E -dD - 2> /dev/null | grep -q __HAVE_SHARED__; then
                    confgcc+=" --disable-shared";
                fi;
                needed_libc=uclibc
            ;;
            *-cygwin)
                needed_libc=cygwin
            ;;
            x86_64-*-mingw* | *-w64-mingw*)
                needed_libc=mingw64-runtime
            ;;
            mingw* | *-mingw*)
                needed_libc=mingw-runtime
            ;;
            avr)
                confgcc+=" --enable-shared --disable-threads"
            ;;
        esac;
        if [[ -n ${needed_libc} ]]; then
            if ! has_version ${CATEGORY}/${needed_libc}; then
                confgcc+=" --disable-shared --disable-threads --without-headers";
            else
                if built_with_use --hidden --missing false ${CATEGORY}/${needed_libc} crosscompile_opts_headers-only; then
                    confgcc+=" --disable-shared --with-sysroot=${PREFIX}/${CTARGET}";
                else
                    confgcc+=" --with-sysroot=${PREFIX}/${CTARGET}";
                fi;
            fi;
        fi;
        tc_version_is_at_least 4.2 && confgcc+=" --disable-bootstrap";
    else
        if tc-is-static-only; then
            confgcc+=" --disable-shared";
        else
            confgcc+=" --enable-shared";
        fi;
        case ${CHOST} in 
            mingw* | *-mingw* | *-cygwin)
                confgcc+=" --enable-threads=win32"
            ;;
            *)
                confgcc+=" --enable-threads=posix"
            ;;
        esac;
    fi;
    case ${CTARGET} in 
        *-uclibc*)
            confgcc+=" --disable-__cxa_atexit $(use_enable nptl tls)";
            [[ ${GCCMAJOR}.${GCCMINOR} == 3.3 ]] && confgcc+=" --enable-sjlj-exceptions";
            if tc_version_is_at_least 3.4 && ! tc_version_is_at_least 4.3; then
                confgcc+=" --enable-clocale=uclibc";
            fi
        ;;
        *-elf | *-eabi)
            confgcc+=" --with-newlib"
        ;;
        *-gnu*)
            confgcc+=" --enable-__cxa_atexit";
            confgcc+=" --enable-clocale=gnu"
        ;;
        *-freebsd*)
            confgcc+=" --enable-__cxa_atexit"
        ;;
        *-solaris*)
            confgcc+=" --enable-__cxa_atexit"
        ;;
    esac;
    tc_version_is_at_least 3.4 || confgcc+=" --disable-libunwind-exceptions";
    case $(tc-arch) in 
        ppc | ppc64)
            tc_version_is_at_least 3.4 && confgcc+=" --enable-targets=all"
        ;;
        sparc)
            tc_version_is_at_least 4.4 && confgcc+=" --enable-targets=all"
        ;;
        amd64 | x86)
            tc_version_is_at_least 4.3 && confgcc+=" --enable-targets=all"
        ;;
    esac;
    tc_version_is_at_least 4.3 && set -- "$@" --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion="${BRANDING_GCC_PKGVERSION}";
    set -- ${confgcc} "$@" ${EXTRA_ECONF};
    export gcc_cv_prog_makeinfo_modern=no;
    export ac_cv_have_x='have_x=yes ac_x_includes= ac_x_libraries=';
    echo;
    einfo "PREFIX:			${PREFIX}";
    einfo "BINPATH:			${BINPATH}";
    einfo "LIBPATH:			${LIBPATH}";
    einfo "DATAPATH:		${DATAPATH}";
    einfo "STDCXX_INCDIR:	${STDCXX_INCDIR}";
    echo;
    einfo "Configuring GCC with: ${@//--/\n\t--}";
    echo;
    mkdir -p "${WORKDIR}"/build;
    pushd "${WORKDIR}"/build > /dev/null;
    addwrite /dev/zero;
    echo "${S}"/configure "$@";
    "${S}"/configure "$@" || die "failed to run configure";
    popd > /dev/null
}
gcc_do_filter_flags () 
{ 
    strip-flags;
    replace-flags -O? -O2;
    strip-unsupported-flags;
    filter-flags '-mabi*' -m31 -m32 -m64;
    case ${GCC_BRANCH_VER} in 
        3.2 | 3.3)
            replace-cpu-flags k8 athlon64 opteron i686 x86-64;
            replace-cpu-flags pentium-m pentium3m pentium3;
            case $(tc-arch) in 
                amd64 | x86)
                    filter-flags '-mtune=*'
                ;;
                ppc64)
                    filter-flags "-mcpu=*"
                ;;
            esac;
            case $(tc-arch) in 
                amd64)
                    replace-cpu-flags core2 nocona
                ;;
                x86)
                    replace-cpu-flags core2 prescott
                ;;
            esac;
            replace-cpu-flags G3 750;
            replace-cpu-flags G4 7400;
            replace-cpu-flags G5 7400;
            filter-flags -f{no-,}unit-at-a-time -f{no-,}web -mno-tls-direct-seg-refs;
            filter-flags -f{no-,}stack-protector{,-all};
            filter-flags -fvisibility-inlines-hidden -fvisibility=hidden
        ;;
        3.4 | 4.*)
            case $(tc-arch) in 
                x86 | amd64)
                    filter-flags '-mcpu=*'
                ;;
                *-macos)
                    [[ ${GCC_BRANCH_VER} == 4.0 || ${GCC_BRANCH_VER} == 4.1 ]] && filter-flags '-mcpu=*' '-march=*' '-mtune=*'
                ;;
            esac
        ;;
    esac;
    case ${GCC_BRANCH_VER} in 
        4.6)
            replace-cpu-flags c3-2 pentium2 pentium3 pentium3m pentium-m i686
        ;;
    esac;
    if is_crosscompile; then
        CFLAGS="-O2 -pipe";
        FFLAGS=${CFLAGS};
        FCFLAGS=${CFLAGS};
        local VAR="CFLAGS_"${CTARGET//-/_};
        CXXFLAGS=${!VAR};
    fi;
    export GCJFLAGS=${GCJFLAGS:-${CFLAGS}}
}
gcc_do_make () 
{ 
    [[ -n $1 ]] && GCC_MAKE_TARGET=$1;
    if is_crosscompile || tc-is-cross-compiler; then
        GCC_MAKE_TARGET=${GCC_MAKE_TARGET-all};
    else
        GCC_MAKE_TARGET=${GCC_MAKE_TARGET-bootstrap-lean};
    fi;
    if [[ ${GCC_MAKE_TARGET} == "profiledbootstrap" ]] || use_if_iuse boundschecking; then
        export MAKEOPTS="${MAKEOPTS} -j1";
    fi;
    if [[ ${GCC_MAKE_TARGET} == "all" ]]; then
        STAGE1_CFLAGS=${STAGE1_CFLAGS-"${CFLAGS}"};
    else
        if [[ $(gcc-version) == "3.4" && ${GCC_BRANCH_VER} == "3.4" ]] && gcc-specs-ssp; then
            STAGE1_CFLAGS=${STAGE1_CFLAGS-"-O2"};
        fi;
    fi;
    if is_crosscompile; then
        BOOT_CFLAGS=${BOOT_CFLAGS-"-O2"};
    else
        BOOT_CFLAGS=${BOOT_CFLAGS-"$(get_abi_CFLAGS ${TARGET_DEFAULT_ABI}) ${CFLAGS}"};
    fi;
    pushd "${WORKDIR}"/build > /dev/null;
    emake LDFLAGS="${LDFLAGS}" STAGE1_CFLAGS="${STAGE1_CFLAGS}" LIBPATH="${LIBPATH}" BOOT_CFLAGS="${BOOT_CFLAGS}" ${GCC_MAKE_TARGET} || die "emake failed with ${GCC_MAKE_TARGET}";
    if ! is_crosscompile && use cxx && use_if_iuse doc; then
        if type -p doxygen > /dev/null; then
            if tc_version_is_at_least 4.3; then
                cd "${CTARGET}"/libstdc++-v3/doc;
                emake doc-man-doxygen || ewarn "failed to make docs";
            else
                if tc_version_is_at_least 3.0; then
                    cd "${CTARGET}"/libstdc++-v3;
                    emake doxygen-man || ewarn "failed to make docs";
                fi;
            fi;
        else
            ewarn "Skipping libstdc++ manpage generation since you don't have doxygen installed";
        fi;
    fi;
    popd > /dev/null
}
gcc_movelibs () 
{ 
    tc_version_is_at_least 3.2 || return 0;
    local x multiarg removedirs="";
    for multiarg in $($(XGCC) -print-multi-lib);
    do
        multiarg=${multiarg#*;};
        multiarg=${multiarg//@/ -};
        local OS_MULTIDIR=$($(XGCC) ${multiarg} --print-multi-os-directory);
        local MULTIDIR=$($(XGCC) ${multiarg} --print-multi-directory);
        local TODIR=${D}${LIBPATH}/${MULTIDIR};
        local FROMDIR=;
        [[ -d ${TODIR} ]] || mkdir -p ${TODIR};
        for FROMDIR in ${LIBPATH}/${OS_MULTIDIR} ${LIBPATH}/../${MULTIDIR} ${PREFIX}/lib/${OS_MULTIDIR} ${PREFIX}/${CTARGET}/lib/${OS_MULTIDIR};
        do
            removedirs="${removedirs} ${FROMDIR}";
            FROMDIR=${D}${FROMDIR};
            if [[ ${FROMDIR} != "${TODIR}" && -d ${FROMDIR} ]]; then
                local files=$(find "${FROMDIR}" -maxdepth 1 ! -type d 2>/dev/null);
                if [[ -n ${files} ]]; then
                    mv ${files} "${TODIR}";
                fi;
            fi;
        done;
        fix_libtool_libdir_paths "${LIBPATH}/${MULTIDIR}";
        FROMDIR="${PREFIX}/lib/${OS_MULTIDIR}";
        for x in "${D}${FROMDIR}"/pkgconfig/libgcj*.pc;
        do
            [[ -f ${x} ]] || continue;
            sed -i "/^libdir=/s:=.*:=${LIBPATH}/${MULTIDIR}:" "${x}";
            mv "${x}" "${D}${FROMDIR}"/pkgconfig/libgcj-${GCC_PV}.pc || die;
        done;
    done;
    for FROMDIR in ${removedirs};
    do
        rmdir "${D}"${FROMDIR} &>/dev/null;
    done;
    find "${D}" -type d | xargs rmdir &>/dev/null
}
gcc_pkg_setup () 
{ 
    toolchain_pkg_setup
}
gcc_quick_unpack () 
{ 
    pushd "${WORKDIR}" > /dev/null;
    export PATCH_GCC_VER=${PATCH_GCC_VER:-${GCC_RELEASE_VER}};
    export UCLIBC_GCC_VER=${UCLIBC_GCC_VER:-${PATCH_GCC_VER}};
    export PIE_GCC_VER=${PIE_GCC_VER:-${GCC_RELEASE_VER}};
    export HTB_GCC_VER=${HTB_GCC_VER:-${GCC_RELEASE_VER}};
    export SPECS_GCC_VER=${SPECS_GCC_VER:-${GCC_RELEASE_VER}};
    if [[ -n ${GCC_A_FAKEIT} ]]; then
        unpack ${GCC_A_FAKEIT};
    else
        if [[ -n ${PRERELEASE} ]]; then
            unpack gcc-${PRERELEASE}.tar.bz2;
        else
            if [[ -n ${SNAPSHOT} ]]; then
                unpack gcc-${SNAPSHOT}.tar.bz2;
            else
                if [[ ${PV} != *9999* ]]; then
                    unpack gcc-${GCC_RELEASE_VER}.tar.bz2;
                    if [[ -n ${BRANCH_UPDATE} ]]; then
                        pushd "${S}" > /dev/null;
                        epatch "${DISTDIR}"/gcc-${GCC_RELEASE_VER}-branch-update-${BRANCH_UPDATE}.patch.bz2;
                        popd > /dev/null;
                    fi;
                fi;
            fi;
        fi;
    fi;
    if [[ -n ${D_VER} ]] && use d; then
        pushd "${S}"/gcc > /dev/null;
        unpack gdc-${D_VER}-src.tar.bz2;
        cd ..;
        ebegin "Adding support for the D language";
        ./gcc/d/setup-gcc.sh &>"${T}"/dgcc.log;
        if ! eend $?; then
            eerror "The D gcc package failed to apply";
            eerror "Please include this log file when posting a bug report:";
            eerror "  ${T}/dgcc.log";
            die "failed to include the D language";
        fi;
        popd > /dev/null;
    fi;
    [[ -n ${PATCH_VER} ]] && unpack gcc-${PATCH_GCC_VER}-patches-${PATCH_VER}.tar.bz2;
    [[ -n ${UCLIBC_VER} ]] && unpack gcc-${UCLIBC_GCC_VER}-uclibc-patches-${UCLIBC_VER}.tar.bz2;
    if want_pie; then
        if [[ -n ${PIE_CORE} ]]; then
            unpack ${PIE_CORE};
        else
            unpack gcc-${PIE_GCC_VER}-piepatches-v${PIE_VER}.tar.bz2;
        fi;
        [[ -n ${SPECS_VER} ]] && unpack gcc-${SPECS_GCC_VER}-specs-${SPECS_VER}.tar.bz2;
    fi;
    use_if_iuse boundschecking && unpack "bounds-checking-gcc-${HTB_GCC_VER}-${HTB_VER}.patch.bz2";
    popd > /dev/null
}
gcc_slot_java () 
{ 
    local x;
    for x in "${D}"${PREFIX}/include/gc*.h "${D}"${PREFIX}/include/j*.h;
    do
        [[ -f ${x} ]] && mv -f "${x}" "${D}"${LIBPATH}/include/;
    done;
    for x in gcj gnu java javax org;
    do
        if [[ -d ${D}${PREFIX}/include/${x} ]]; then
            dodir /${LIBPATH}/include/${x};
            mv -f "${D}"${PREFIX}/include/${x}/* "${D}"${LIBPATH}/include/${x}/;
            rm -rf "${D}"${PREFIX}/include/${x};
        fi;
    done;
    if [[ -d ${D}${PREFIX}/lib/security ]] || [[ -d ${D}${PREFIX}/$(get_libdir)/security ]]; then
        dodir /${LIBPATH}/security;
        mv -f "${D}"${PREFIX}/lib*/security/* "${D}"${LIBPATH}/security;
        rm -rf "${D}"${PREFIX}/lib*/security;
    fi;
    for x in libgcj.spec logging.properties;
    do
        x="${D}${PREFIX}/lib/${x}";
        [[ -f ${x} ]] && mv -f "${x}" "${D}"${LIBPATH}/;
    done;
    cd "${D}"${BINPATH};
    [[ -f jar ]] && mv -f jar gcj-jar
}
gcc_src_compile () 
{ 
    toolchain_src_compile
}
gcc_src_test () 
{ 
    toolchain_src_test
}
gcc_src_unpack () 
{ 
    toolchain_src_unpack
}
gcc_version_patch () 
{ 
    tc_version_is_at_least 4.3 && return 0;
    local version_string=${GCC_CONFIG_VER};
    [[ -n ${BRANCH_UPDATE} ]] && version_string+=" ${BRANCH_UPDATE}";
    einfo "patching gcc version: ${version_string} (${BRANDING_GCC_PKGVERSION})";
    local gcc_sed=(-e 's:gcc\.gnu\.org/bugs\.html:bugs\.gentoo\.org/:');
    if grep -qs VERSUFFIX "${S}"/gcc/version.c; then
        gcc_sed+=(-e "/VERSUFFIX \"\"/s:\"\":\" (${BRANDING_GCC_PKGVERSION})\":");
    else
        version_string="${version_string} (${BRANDING_GCC_PKGVERSION})";
        gcc_sed+=(-e "/const char version_string\[\] = /s:= \".*\":= \"${version_string}\":");
    fi;
    sed -i "${gcc_sed[@]}" "${S}"/gcc/version.c || die
}
gen_usr_ldscript () 
{ 
    local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
    [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
    tc-is-static-only && return;
    case ${CTARGET:-${CHOST}} in 
        *-darwin*)

        ;;
        *linux* | *-freebsd* | *-openbsd* | *-netbsd*)
            use prefix && return 0
        ;;
        *)
            return 0
        ;;
    esac;
    dodir /usr/${libdir};
    if [[ $1 == "-a" ]]; then
        auto=true;
        shift;
        dodir /${libdir};
    fi;
    output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
    [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
    for lib in "$@";
    do
        local tlib;
        if ${auto}; then
            lib="lib${lib}${suffix}";
        else
            [[ -r ${ED}/${libdir}/${lib} ]] || continue;
        fi;
        case ${CTARGET:-${CHOST}} in 
            *-darwin*)
                if ${auto}; then
                    tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
                else
                    tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
                fi;
                [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
                tlib=${tlib##*/};
                if ${auto}; then
                    mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
                    if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
                        mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
                    fi;
                    rm -f "${ED}"/${libdir}/${lib};
                fi;
                if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
                    chmod u+w "${ED}${libdir}/${tlib}";
                    local nowrite=yes;
                fi;
                install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
                [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
                pushd "${ED}/usr/${libdir}" > /dev/null;
                ln -snf "../../${libdir}/${tlib}" "${lib}";
                popd > /dev/null
            ;;
            *)
                if ${auto}; then
                    tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
                    [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
                    mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
                    if [[ ${tlib} != ${lib}* ]]; then
                        mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
                    fi;
                    rm -f "${ED}"/${libdir}/${lib};
                else
                    tlib=${lib};
                fi;
                cat > "${ED}/usr/${libdir}/${lib}"  <<-END_LDSCRIPT
/* GNU ld script
   Since Gentoo has critical dynamic libraries in /lib, and the static versions
   in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
   run into linking problems.  This "fake" dynamic lib is a linker script that
   redirects the linker to the real lib.  And yes, this works in the cross-
   compiling scenario as the sysroot-ed linker will prepend the real path.

   See bug http://bugs.gentoo.org/4411 for more info.
 */
${output_format}
GROUP ( ${EPREFIX}/${libdir}/${tlib} )
END_LDSCRIPT

            ;;
        esac
        fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
    done
}
gentoo_urls () 
{ 
    local devspace="HTTP~vapier/dist/URI HTTP~dirtyepic/dist/URI
	HTTP~halcy0n/patches/URI HTTP~zorry/patches/gcc/URI";
    devspace=${devspace//HTTP/http:\/\/dev.gentoo.org\/};
    echo mirror://gentoo/$1 ${devspace//URI/$1}
}
get-flag () 
{ 
    local f var findflag="$1";
    for var in $(all-flag-vars);
    do
        for f in ${!var};
        do
            if [ "${f/${findflag}}" != "${f}" ]; then
                printf "%s\n" "${f/-${findflag}=}";
                return 0;
            fi;
        done;
    done;
    return 1
}
get_abi_CFLAGS () 
{ 
    get_abi_var CFLAGS "$@"
}
get_abi_CHOST () 
{ 
    get_abi_var CHOST "$@"
}
get_abi_CTARGET () 
{ 
    get_abi_var CTARGET "$@"
}
get_abi_FAKE_TARGETS () 
{ 
    get_abi_var FAKE_TARGETS "$@"
}
get_abi_LDFLAGS () 
{ 
    get_abi_var LDFLAGS "$@"
}
get_abi_LIBDIR () 
{ 
    get_abi_var LIBDIR "$@"
}
get_abi_var () 
{ 
    local flag=$1;
    local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
    local var="${flag}_${abi}";
    echo ${!var}
}
get_after_major_version () 
{ 
    echo $(get_version_component_range 2- "${1:-${PV}}")
}
get_all_abis () 
{ 
    local x order="" mvar dvar;
    mvar="MULTILIB_ABIS";
    dvar="DEFAULT_ABI";
    if [[ -n $1 ]]; then
        mvar="$1_${mvar}";
        dvar="$1_${dvar}";
    fi;
    if [[ -z ${!mvar} ]]; then
        echo "default";
        return 0;
    fi;
    for x in ${!mvar};
    do
        if [[ ${x} != ${!dvar} ]]; then
            order="${order:+${order} }${x}";
        fi;
    done;
    order="${order:+${order} }${!dvar}";
    echo ${order};
    return 0
}
get_all_libdirs () 
{ 
    local libdirs abi;
    for abi in ${MULTILIB_ABIS};
    do
        libdirs+=" $(get_abi_LIBDIR ${abi})";
    done;
    [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
    echo "${libdirs}"
}
get_all_version_components () 
{ 
    eshopts_push -s extglob;
    local ver_str=${1:-${PV}} result;
    result=();
    if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]]; then
        echo ${VERSIONATOR_CACHE_RESULT};
        eshopts_pop;
        return;
    fi;
    export VERSIONATOR_CACHE_VER_STR=${ver_str};
    while [[ -n $ver_str ]]; do
        case "${ver_str::1}" in 
            [[:digit:]])
                result+=("${ver_str%%[^[:digit:]]*}");
                ver_str=${ver_str##+([[:digit:]])}
            ;;
            [-_.])
                result+=("${ver_str::1}");
                ver_str=${ver_str:1}
            ;;
            [[:alpha:]])
                local not_match=${ver_str##+([[:alpha:]])*([[:digit:]])};
                result+=("${ver_str::${#ver_str} - ${#not_match}}");
                ver_str=${not_match}
            ;;
            *)
                result+=("${ver_str::1}");
                ver_str=${ver_str:1}
            ;;
        esac;
    done;
    export VERSIONATOR_CACHE_RESULT=${result[*]};
    echo ${result[@]};
    eshopts_pop
}
get_gcc_src_uri () 
{ 
    export PATCH_GCC_VER=${PATCH_GCC_VER:-${GCC_RELEASE_VER}};
    export UCLIBC_GCC_VER=${UCLIBC_GCC_VER:-${PATCH_GCC_VER}};
    export PIE_GCC_VER=${PIE_GCC_VER:-${GCC_RELEASE_VER}};
    export HTB_GCC_VER=${HTB_GCC_VER:-${GCC_RELEASE_VER}};
    export SPECS_GCC_VER=${SPECS_GCC_VER:-${GCC_RELEASE_VER}};
    if [[ -n ${PRERELEASE} ]]; then
        GCC_SRC_URI="ftp://gcc.gnu.org/pub/gcc/prerelease-${PRERELEASE}/gcc-${PRERELEASE}.tar.bz2";
    else
        if [[ -n ${SNAPSHOT} ]]; then
            GCC_SRC_URI="ftp://gcc.gnu.org/pub/gcc/snapshots/${SNAPSHOT}/gcc-${SNAPSHOT}.tar.bz2";
        else
            if [[ ${PV} != *9999* ]]; then
                GCC_SRC_URI="mirror://gnu/gcc/gcc-${GCC_PV}/gcc-${GCC_RELEASE_VER}.tar.bz2";
                [[ -n ${BRANCH_UPDATE} ]] && GCC_SRC_URI+=" $(gentoo_urls gcc-${GCC_RELEASE_VER}-branch-update-${BRANCH_UPDATE}.patch.bz2)";
            fi;
        fi;
    fi;
    [[ -n ${UCLIBC_VER} ]] && GCC_SRC_URI+=" $(gentoo_urls gcc-${UCLIBC_GCC_VER}-uclibc-patches-${UCLIBC_VER}.tar.bz2)";
    [[ -n ${PATCH_VER} ]] && GCC_SRC_URI+=" $(gentoo_urls gcc-${PATCH_GCC_VER}-patches-${PATCH_VER}.tar.bz2)";
    [[ -n ${PIE_VER} ]] && PIE_CORE=${PIE_CORE:-gcc-${PIE_GCC_VER}-piepatches-v${PIE_VER}.tar.bz2} && GCC_SRC_URI+=" $(gentoo_urls ${PIE_CORE})";
    [[ -n ${SPECS_VER} ]] && GCC_SRC_URI+=" $(gentoo_urls gcc-${SPECS_GCC_VER}-specs-${SPECS_VER}.tar.bz2)";
    if [[ -n ${HTB_VER} ]]; then
        local HTBFILE="bounds-checking-gcc-${HTB_GCC_VER}-${HTB_VER}.patch.bz2";
        GCC_SRC_URI+="
			boundschecking? (
				mirror://sourceforge/boundschecking/${HTBFILE}
				$(gentoo_urls ${HTBFILE})
			)";
    fi;
    [[ -n ${D_VER} ]] && GCC_SRC_URI+=" d? ( mirror://sourceforge/dgcc/gdc-${D_VER}-src.tar.bz2 )";
    if [[ ${PN} != "kgcc64" && ${PN} != gcc-* ]]; then
        if tc_version_is_at_least "4.5"; then
            GCC_SRC_URI+=" gcj? ( ftp://sourceware.org/pub/java/ecj-4.5.jar )";
        else
            if tc_version_is_at_least "4.3"; then
                GCC_SRC_URI+=" gcj? ( ftp://sourceware.org/pub/java/ecj-4.3.jar )";
            fi;
        fi;
    fi;
    echo "${GCC_SRC_URI}"
}
get_install_abis () 
{ 
    local x order="";
    if [[ -z ${MULTILIB_ABIS} ]]; then
        echo "default";
        return 0;
    fi;
    if [[ ${EMULTILIB_PKG} == "true" ]]; then
        for x in ${MULTILIB_ABIS};
        do
            if [[ ${x} != "${DEFAULT_ABI}" ]]; then
                has ${x} ${ABI_DENY} || order="${order} ${x}";
            fi;
        done;
        has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
        if [[ -n ${ABI_ALLOW} ]]; then
            local ordera="";
            for x in ${order};
            do
                if has ${x} ${ABI_ALLOW}; then
                    ordera="${ordera} ${x}";
                fi;
            done;
            order=${ordera};
        fi;
    else
        order=${DEFAULT_ABI};
    fi;
    if [[ -z ${order} ]]; then
        die "The ABI list is empty.  Are you using a proper multilib profile?  Perhaps your USE flags or MULTILIB_ABIS are too restrictive for this package.";
    fi;
    echo ${order};
    return 0
}
get_last_version_component_index () 
{ 
    echo $(($(get_version_component_count "${1:-${PV}}" ) - 1))
}
get_libdir () 
{ 
    local CONF_LIBDIR;
    if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
        echo ${CONF_LIBDIR_OVERRIDE};
    else
        get_abi_LIBDIR;
    fi
}
get_libname () 
{ 
    local libname;
    local ver=$1;
    case ${CHOST} in 
        *-cygwin | mingw* | *-mingw*)
            libname="dll"
        ;;
        *-darwin*)
            libname="dylib"
        ;;
        *-mint*)
            libname="irrelevant"
        ;;
        hppa*-hpux*)
            libname="sl"
        ;;
        *)
            libname="so"
        ;;
    esac;
    if [[ -z $* ]]; then
        echo ".${libname}";
    else
        for ver in "$@";
        do
            case ${CHOST} in 
                *-darwin*)
                    echo ".${ver}.${libname}"
                ;;
                *-mint*)
                    echo ".${libname}"
                ;;
                *)
                    echo ".${libname}.${ver}"
                ;;
            esac;
        done;
    fi
}
get_major_version () 
{ 
    local c=($(get_all_version_components "${1:-${PV}}"));
    echo ${c[0]}
}
get_make_var () 
{ 
    local var=$1 makefile=${2:-${WORKDIR}/build/Makefile};
    echo -e "e:\\n\\t@echo \$(${var})\\ninclude ${makefile}" | r=${makefile%/*} emake --no-print-directory -s -f - 2> /dev/null
}
get_modname () 
{ 
    local modname;
    local ver=$1;
    case ${CHOST} in 
        *-darwin*)
            modname="bundle"
        ;;
        *)
            modname="so"
        ;;
    esac;
    echo ".${modname}"
}
get_version_component_count () 
{ 
    local a=($(get_version_components "${1:-${PV}}"));
    echo ${#a[@]}
}
get_version_component_range () 
{ 
    eshopts_push -s extglob;
    local c v="${2:-${PV}}" range="${1}" range_start range_end;
    local -i i=-1 j=0;
    c=($(get_all_version_components "${v}"));
    range_start=${range%-*};
    range_start=${range_start:-1};
    range_end=${range#*-};
    range_end=${range_end:-${#c[@]}};
    while ((j < range_start)); do
        i+=1;
        ((i > ${#c[@]})) && eshopts_pop && return;
        [[ -n "${c[i]//[-._]}" ]] && j+=1;
    done;
    while ((j <= range_end)); do
        echo -n ${c[i]};
        ((i > ${#c[@]})) && eshopts_pop && return;
        [[ -n "${c[i]//[-._]}" ]] && j+=1;
        i+=1;
    done;
    eshopts_pop
}
get_version_components () 
{ 
    local c=$(get_all_version_components "${1:-${PV}}");
    echo ${c//[-._]/ }
}
gnuconfig_do_update () 
{ 
    local configsubs_dir target targetlist file;
    [[ $# -eq 0 ]] && die "do not call gnuconfig_do_update; use gnuconfig_update";
    configsubs_dir=$(gnuconfig_findnewest);
    einfo "Using GNU config files from ${configsubs_dir}";
    for file in "$@";
    do
        if [[ ! -r ${configsubs_dir}/${file} ]]; then
            eerror "Can't read ${configsubs_dir}/${file}, skipping..";
            continue;
        fi;
        targetlist=$(find "${startdir}" -name "${file}");
        if [[ -n ${targetlist} ]]; then
            for target in ${targetlist};
            do
                [[ -L ${target} ]] && rm -f "${target}";
                einfo "  Updating ${target/$startdir\//}";
                cp -f "${configsubs_dir}/${file}" "${target}";
                eend $?;
            done;
        else
            ewarn "  No ${file} found in ${startdir}, skipping ...";
        fi;
    done;
    return 0
}
gnuconfig_findnewest () 
{ 
    local locations="
		/usr/share/gnuconfig/config.sub
		/usr/share/automake-1.9/config.sub
		/usr/share/automake-1.8/config.sub
		/usr/share/automake-1.7/config.sub
		/usr/share/automake-1.6/config.sub
		/usr/share/automake-1.5/config.sub
		/usr/share/automake-1.4/config.sub
		/usr/share/libtool/config.sub
	";
    grep -s '^timestamp' ${locations} | sort -n -t\' -k2 | tail -n 1 | sed 's,/config.sub:.*$,,'
}
gnuconfig_update () 
{ 
    local startdir;
    if [[ $1 == /* ]]; then
        startdir=$1;
        shift;
    else
        startdir=${S};
    fi;
    if [[ $# -gt 0 ]]; then
        gnuconfig_do_update "$@";
    else
        gnuconfig_do_update config.sub config.guess;
    fi;
    return $?
}
guess_patch_type_in_dir () 
{ 
    [[ -n $(ls "$1"/*.bz2 2>/dev/null) ]] && EPATCH_SUFFIX="patch.bz2" || EPATCH_SUFFIX="patch"
}
hardened_gcc_is_stable () 
{ 
    local tocheck;
    if [[ $1 == "pie" ]]; then
        if [[ ${CTARGET} == *-uclibc* ]]; then
            tocheck=${PIE_UCLIBC_STABLE};
        else
            tocheck=${PIE_GLIBC_STABLE};
        fi;
    else
        if [[ $1 == "ssp" ]]; then
            if [[ ${CTARGET} == *-uclibc* ]]; then
                tocheck=${SSP_UCLIBC_STABLE};
            else
                tocheck=${SSP_STABLE};
            fi;
        else
            die "hardened_gcc_stable needs to be called with pie or ssp";
        fi;
    fi;
    has $(tc-arch) ${tocheck} && return 0;
    return 1
}
hardened_gcc_works () 
{ 
    if [[ $1 == "pie" ]]; then
        [[ ${CTARGET} == *-freebsd* ]] && return 1;
        want_pie || return 1;
        use_if_iuse nopie && return 1;
        hardened_gcc_is_stable pie;
        return $?;
    else
        if [[ $1 == "ssp" ]]; then
            [[ -n ${SPECS_VER} ]] || return 1;
            use_if_iuse nossp && return 1;
            hardened_gcc_is_stable ssp;
            return $?;
        else
            hardened_gcc_works pie || return 1;
            hardened_gcc_works ssp || return 1;
            return 0;
        fi;
    fi
}
has_m32 () 
{ 
    die "${FUNCNAME}: don't use this anymore"
}
has_m64 () 
{ 
    eqawarn "${FUNCNAME}: don't use this anymore";
    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/ /}" ]
}
host-is-pax () 
{ 
    grep -qs ^PaX: /proc/self/status
}
ht_fix_all () 
{ 
    local MATCHES;
    MATCHES=$(grep -l -s -i -R -e "head -[ 0-9]" -e "tail [+-][ 0-9]" * | sort -u);
    [[ -n ${MATCHES} ]] && ht_fix_file ${MATCHES} || einfo "No need for ht_fix_all anymore !"
}
ht_fix_file () 
{ 
    local i;
    einfo "Replacing obsolete head/tail with POSIX compliant ones";
    for i in "$@";
    do
        __do_sed_fix "$i";
    done
}
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>";
    local var;
    for var in $(all-flag-vars);
    do
        _is_flagq ${var} "$1" && return 0;
    done;
    return 1
}
is-ldflag () 
{ 
    is-ldflagq "$@" && echo true
}
is-ldflagq () 
{ 
    [[ -n $2 ]] && die "Usage: is-ldflag <flag>";
    _is_flagq LDFLAGS $1
}
is_ada () 
{ 
    gcc-lang-supported ada || return 1;
    use ada
}
is_crosscompile () 
{ 
    [[ ${CHOST} != ${CTARGET} ]]
}
is_cxx () 
{ 
    gcc-lang-supported 'c++' || return 1;
    use cxx
}
is_d () 
{ 
    gcc-lang-supported d || return 1;
    use_if_iuse d
}
is_f77 () 
{ 
    gcc-lang-supported f77 || return 1;
    use fortran
}
is_f95 () 
{ 
    gcc-lang-supported f95 || return 1;
    use fortran
}
is_final_abi () 
{ 
    has_multilib_profile || return 0;
    set -- $(get_install_abis);
    local LAST_ABI=$#;
    [[ ${!LAST_ABI} == ${ABI} ]]
}
is_fortran () 
{ 
    gcc-lang-supported fortran || return 1;
    use fortran
}
is_gcj () 
{ 
    gcc-lang-supported java || return 1;
    use cxx && use_if_iuse gcj
}
is_go () 
{ 
    gcc-lang-supported go || return 1;
    use cxx && use_if_iuse go
}
is_multilib () 
{ 
    tc_version_is_at_least 3 || return 1;
    use multilib
}
is_objc () 
{ 
    gcc-lang-supported objc || return 1;
    use_if_iuse objc
}
is_objcxx () 
{ 
    gcc-lang-supported 'obj-c++' || return 1;
    use cxx && use_if_iuse objc++
}
is_treelang () 
{ 
    use_if_iuse boundschecking && return 1;
    is_crosscompile && return 1;
    gcc-lang-supported treelang || return 1;
    return 0
}
list-paxables () 
{ 
    file "$@" 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//'
}
make_desktop_entry () 
{ 
    [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable";
    local exec=${1};
    local name=${2:-${PN}};
    local icon=${3:-${PN}};
    local type=${4};
    local fields=${5};
    if [[ -z ${type} ]]; then
        local catmaj=${CATEGORY%%-*};
        local catmin=${CATEGORY##*-};
        case ${catmaj} in 
            app)
                case ${catmin} in 
                    accessibility)
                        type="Utility;Accessibility"
                    ;;
                    admin)
                        type=System
                    ;;
                    antivirus)
                        type=System
                    ;;
                    arch)
                        type="Utility;Archiving"
                    ;;
                    backup)
                        type="Utility;Archiving"
                    ;;
                    cdr)
                        type="AudioVideo;DiscBurning"
                    ;;
                    dicts)
                        type="Office;Dictionary"
                    ;;
                    doc)
                        type=Documentation
                    ;;
                    editors)
                        type="Utility;TextEditor"
                    ;;
                    emacs)
                        type="Development;TextEditor"
                    ;;
                    emulation)
                        type="System;Emulator"
                    ;;
                    laptop)
                        type="Settings;HardwareSettings"
                    ;;
                    office)
                        type=Office
                    ;;
                    pda)
                        type="Office;PDA"
                    ;;
                    vim)
                        type="Development;TextEditor"
                    ;;
                    xemacs)
                        type="Development;TextEditor"
                    ;;
                esac
            ;;
            dev)
                type="Development"
            ;;
            games)
                case ${catmin} in 
                    action | fps)
                        type=ActionGame
                    ;;
                    arcade)
                        type=ArcadeGame
                    ;;
                    board)
                        type=BoardGame
                    ;;
                    emulation)
                        type=Emulator
                    ;;
                    kids)
                        type=KidsGame
                    ;;
                    puzzle)
                        type=LogicGame
                    ;;
                    roguelike)
                        type=RolePlaying
                    ;;
                    rpg)
                        type=RolePlaying
                    ;;
                    simulation)
                        type=Simulation
                    ;;
                    sports)
                        type=SportsGame
                    ;;
                    strategy)
                        type=StrategyGame
                    ;;
                esac;
                type="Game;${type}"
            ;;
            gnome)
                type="Gnome;GTK"
            ;;
            kde)
                type="KDE;Qt"
            ;;
            mail)
                type="Network;Email"
            ;;
            media)
                case ${catmin} in 
                    gfx)
                        type=Graphics
                    ;;
                    *)
                        case ${catmin} in 
                            radio)
                                type=Tuner
                            ;;
                            sound)
                                type=Audio
                            ;;
                            tv)
                                type=TV
                            ;;
                            video)
                                type=Video
                            ;;
                        esac;
                        type="AudioVideo;${type}"
                    ;;
                esac
            ;;
            net)
                case ${catmin} in 
                    dialup)
                        type=Dialup
                    ;;
                    ftp)
                        type=FileTransfer
                    ;;
                    im)
                        type=InstantMessaging
                    ;;
                    irc)
                        type=IRCClient
                    ;;
                    mail)
                        type=Email
                    ;;
                    news)
                        type=News
                    ;;
                    nntp)
                        type=News
                    ;;
                    p2p)
                        type=FileTransfer
                    ;;
                    voip)
                        type=Telephony
                    ;;
                esac;
                type="Network;${type}"
            ;;
            sci)
                case ${catmin} in 
                    astro*)
                        type=Astronomy
                    ;;
                    bio*)
                        type=Biology
                    ;;
                    calc*)
                        type=Calculator
                    ;;
                    chem*)
                        type=Chemistry
                    ;;
                    elec*)
                        type=Electronics
                    ;;
                    geo*)
                        type=Geology
                    ;;
                    math*)
                        type=Math
                    ;;
                    physics)
                        type=Physics
                    ;;
                    visual*)
                        type=DataVisualization
                    ;;
                esac;
                type="Education;Science;${type}"
            ;;
            sys)
                type="System"
            ;;
            www)
                case ${catmin} in 
                    client)
                        type=WebBrowser
                    ;;
                esac;
                type="Network;${type}"
            ;;
            *)
                type=
            ;;
        esac;
    fi;
    if [ "${SLOT}" == "0" ]; then
        local desktop_name="${PN}";
    else
        local desktop_name="${PN}-${SLOT}";
    fi;
    local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
    type=${type%;}${type:+;};
    eshopts_push -s extglob;
    if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
        ewarn "As described in the Icon Theme Specification, icon file extensions are not";
        ewarn "allowed in .desktop files if the value is not an absolute path.";
        icon=${icon%.@(xpm|png|svg)};
    fi;
    eshopts_pop;
    cat > "${desktop}"  <<-EOF
[Desktop Entry]
Name=${name}
Type=Application
Comment=${DESCRIPTION}
Exec=${exec}
TryExec=${exec%% *}
Icon=${icon}
Categories=${type}
EOF

    if [[ ${fields:-=} != *=* ]]; then
        ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
        fields="Path=${fields}";
    fi;
    [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
    ( insinto /usr/share/applications;
    doins "${desktop}" ) || die "installing desktop file failed"
}
make_gcc_hard () 
{ 
    local gcc_hard_flags="-DEFAULT_RELRO -DEFAULT_BIND_NOW";
    if hardened_gcc_works; then
        einfo "Updating gcc to use automatic PIE + SSP building ...";
        gcc_hard_flags+=" -DEFAULT_PIE_SSP";
    else
        if hardened_gcc_works pie; then
            einfo "Updating gcc to use automatic PIE building ...";
            ewarn "SSP has not been enabled by default";
            gcc_hard_flags+=" -DEFAULT_PIE";
        else
            if hardened_gcc_works ssp; then
                einfo "Updating gcc to use automatic SSP building ...";
                ewarn "PIE has not been enabled by default";
                gcc_hard_flags+=" -DEFAULT_SSP";
            else
                ewarn "hardened is not supported for this arch in this gcc version";
                ebeep;
                return 0;
            fi;
        fi;
    fi;
    sed -i -e "/^HARD_CFLAGS = /s|=|= ${gcc_hard_flags} |" "${S}"/gcc/Makefile.in || die;
    BRANDING_GCC_PKGVERSION=${BRANDING_GCC_PKGVERSION/Gentoo/Gentoo Hardened}
}
make_session_desktop () 
{ 
    [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
    [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
    local title=$1;
    local command=$2;
    local desktop=${T}/${wm:-${PN}}.desktop;
    shift 2;
    cat > "${desktop}"  <<-EOF
[Desktop Entry]
Name=${title}
Comment=This session logs you into ${title}
Exec=${command} $*
TryExec=${command}
Type=XSession
EOF

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

    fi
    printf 'exec %s "$@"\n' "${bin}" ) > "${tmpwrapper}";
    chmod go+rx "${tmpwrapper}";
    if [[ -n ${path} ]]; then
        ( exeinto "${path}";
        newexe "${tmpwrapper}" "${wrapper}" ) || die;
    else
        newbin "${tmpwrapper}" "${wrapper}" || die;
    fi
}
multilib_env () 
{ 
    local CTARGET=${1:-${CTARGET}};
    case ${CTARGET} in 
        x86_64*)
            export CFLAGS_x86=${CFLAGS_x86--m32};
            export CHOST_x86=${CTARGET/x86_64/i686};
            CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
            export CTARGET_x86=${CHOST_x86};
            if [[ ${SYMLINK_LIB} == "yes" ]]; then
                export LIBDIR_x86="lib32";
            else
                export LIBDIR_x86="lib";
            fi;
            export CFLAGS_amd64=${CFLAGS_amd64--m64};
            export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
            export CTARGET_amd64=${CHOST_amd64};
            export LIBDIR_amd64="lib64";
            export CFLAGS_x32=${CFLAGS_x32--mx32};
            export CHOST_x32=${CTARGET/%-gnu/-gnux32};
            export CTARGET_x32=${CHOST_x32};
            export LIBDIR_x32="libx32";
            case ${CTARGET} in 
                *-gnux32)
                    : ${MULTILIB_ABIS=x32 amd64 x86};
                    : ${DEFAULT_ABI=x32}
                ;;
                *)
                    : ${MULTILIB_ABIS=amd64 x86};
                    : ${DEFAULT_ABI=amd64}
                ;;
            esac
        ;;
        mips64*)
            export CFLAGS_o32=${CFLAGS_o32--mabi=32};
            export CHOST_o32=${CTARGET/mips64/mips};
            export CTARGET_o32=${CHOST_o32};
            export LIBDIR_o32="lib";
            export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
            export CHOST_n32=${CTARGET};
            export CTARGET_n32=${CHOST_n32};
            export LIBDIR_n32="lib32";
            export CFLAGS_n64=${CFLAGS_n64--mabi=64};
            export CHOST_n64=${CTARGET};
            export CTARGET_n64=${CHOST_n64};
            export LIBDIR_n64="lib64";
            : ${MULTILIB_ABIS=n64 n32 o32};
            : ${DEFAULT_ABI=n32}
        ;;
        powerpc64*)
            export CFLAGS_ppc=${CFLAGS_ppc--m32};
            export CHOST_ppc=${CTARGET/powerpc64/powerpc};
            export CTARGET_ppc=${CHOST_ppc};
            export LIBDIR_ppc="lib";
            export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
            export CHOST_ppc64=${CTARGET};
            export CTARGET_ppc64=${CHOST_ppc64};
            export LIBDIR_ppc64="lib64";
            : ${MULTILIB_ABIS=ppc64 ppc};
            : ${DEFAULT_ABI=ppc64}
        ;;
        s390x*)
            export CFLAGS_s390=${CFLAGS_s390--m31};
            export CHOST_s390=${CTARGET/s390x/s390};
            export CTARGET_s390=${CHOST_s390};
            export LIBDIR_s390="lib";
            export CFLAGS_s390x=${CFLAGS_s390x--m64};
            export CHOST_s390x=${CTARGET};
            export CTARGET_s390x=${CHOST_s390x};
            export LIBDIR_s390x="lib64";
            : ${MULTILIB_ABIS=s390x s390};
            : ${DEFAULT_ABI=s390x}
        ;;
        sparc64*)
            export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
            export CHOST_sparc32=${CTARGET/sparc64/sparc};
            export CTARGET_sparc32=${CHOST_sparc32};
            export LIBDIR_sparc32="lib";
            export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
            export CHOST_sparc64=${CTARGET};
            export CTARGET_sparc64=${CHOST_sparc64};
            export LIBDIR_sparc64="lib64";
            : ${MULTILIB_ABIS=sparc64 sparc32};
            : ${DEFAULT_ABI=sparc64}
        ;;
        *)
            : ${MULTILIB_ABIS=default};
            : ${DEFAULT_ABI=default}
        ;;
    esac;
    export MULTILIB_ABIS DEFAULT_ABI
}
multilib_toolchain_setup () 
{ 
    local v vv;
    export ABI=$1;
    if [[ ${__DEFAULT_ABI_SAVED} == "true" ]]; then
        for v in CHOST CBUILD AS CC CXX LD PKG_CONFIG_{LIBDIR,PATH};
        do
            vv="__abi_saved_${v}";
            export ${v}="${!vv}";
            unset ${vv};
        done;
        unset __DEFAULT_ABI_SAVED;
    fi;
    if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
        for v in CHOST CBUILD AS CC CXX LD PKG_CONFIG_{LIBDIR,PATH};
        do
            export __abi_saved_${v}="${!v}";
        done;
        export __DEFAULT_ABI_SAVED="true";
        export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
        export CC="$(tc-getCC) $(get_abi_CFLAGS)";
        export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
        export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
        export CHOST=$(get_abi_CHOST $1);
        export CBUILD=$(get_abi_CHOST $1);
        export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
        export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
    fi
}
newicon () 
{ 
    _iconins ${FUNCNAME} "$@"
}
newmenu () 
{ 
    ( insinto /usr/share/applications;
    newins "$@" )
}
no-as-needed () 
{ 
    case $($(tc-getLD) -v 2>&1 </dev/null) in 
        *GNU*)
            echo "-Wl,--no-as-needed"
        ;;
    esac
}
number_abis () 
{ 
    set -- `get_install_abis`;
    echo $#
}
path_exists () 
{ 
    local opt=$1;
    [[ ${opt} == -[ao] ]] && shift || opt="-a";
    [[ $# -eq 0 ]] && return 1;
    local p r=0;
    for p in "$@";
    do
        [[ -e ${p} ]];
        : $(( r += $? ));
    done;
    case ${opt} in 
        -a)
            return $(( r != 0 ))
        ;;
        -o)
            return $(( r == $# ))
        ;;
    esac
}
pax-mark () 
{ 
    local f;
    local flags;
    local pt_fail=0 pt_failures="";
    local xt_fail=0 xt_failures="";
    local ret=0;
    flags="${1//[!zPpEeMmRrSs]}";
    [[ -n "${flags}" ]] || return 0;
    shift;
    local dodefault="";
    [[ -n "${flags//[!z]}" ]] && dodefault="yes";
    if has PT ${PAX_MARKINGS}; then
        if type -p paxctl > /dev/null; then
            einfo "PT PaX marking -${flags} with paxctl";
            _pax_list_files einfo "$@";
            for f in "$@";
            do
                paxctl -q${flags} "${f}" && continue;
                paxctl -qC${flags} "${f}" && continue;
                paxctl -qc${flags} "${f}" && continue;
                pt_fail=1;
                pt_failures="${pt_failures} ${f}";
            done;
        else
            if type -p paxctl-ng > /dev/null && paxctl-ng -L; then
                einfo "PT PaX marking -${flags} with paxctl-ng";
                flags="${flags//z}";
                _pax_list_files einfo "$@";
                for f in "$@";
                do
                    [[ ${dodefault} == "yes" ]] && paxctl-ng -L -z "${f}";
                    [[ -n "${flags}" ]] || continue;
                    paxctl-ng -L -${flags} "${f}" && continue;
                    pt_fail=1;
                    pt_failures="${pt_failures} ${f}";
                done;
            else
                if type -p scanelf > /dev/null && [[ ${PAX_MARKINGS} != "none" ]]; then
                    einfo "Fallback PaX marking -${flags} with scanelf";
                    _pax_list_files einfo "$@";
                    scanelf -Xxz ${flags} "$@";
                else
                    if [[ ${PAX_MARKINGS} != "none" ]]; then
                        pt_failures="$*";
                        pt_fail=1;
                    fi;
                fi;
            fi;
        fi;
        if [[ ${pt_fail} == 1 ]]; then
            elog "Failed to set PT_PAX markings -${flags} for:";
            _pax_list_files elog ${pt_failures};
            ret=1;
        fi;
    fi;
    if has XT ${PAX_MARKINGS}; then
        flags="${flags//z}";
        if type -p paxctl-ng > /dev/null && paxctl-ng -l; then
            einfo "XT PaX marking -${flags} with paxctl-ng";
            _pax_list_files einfo "$@";
            for f in "$@";
            do
                [[ ${dodefault} == "yes" ]] && paxctl-ng -d "${f}";
                [[ -n "${flags}" ]] || continue;
                paxctl-ng -l -${flags} "${f}" && continue;
                xt_fail=1;
                xt_failures="${tx_failures} ${f}";
            done;
        else
            if type -p setfattr > /dev/null; then
                [[ -n "${flags//[!Ee]}" ]] || flags+="e";
                einfo "XT PaX marking -${flags} with setfattr";
                _pax_list_files einfo "$@";
                for f in "$@";
                do
                    [[ ${dodefault} == "yes" ]] && setfattr -x "user.pax.flags" "${f}";
                    setfattr -n "user.pax.flags" -v "${flags}" "${f}" && continue;
                    xt_fail=1;
                    xt_failures="${tx_failures} ${f}";
                done;
            else
                if [[ ${PAX_MARKINGS} != "none" ]]; then
                    xt_failures="$*";
                    xt_fail=1;
                fi;
            fi;
        fi;
        if [[ ${xt_fail} == 1 ]]; then
            elog "Failed to set XATTR_PAX markings -${flags} for:";
            _pax_list_files elog ${xt_failures};
            ret=1;
        fi;
    fi;
    return ${ret}
}
pkg_nofetch () 
{ 
    __eapi0_pkg_nofetch "$@"
}
pkg_postinst () 
{ 
    toolchain_pkg_postinst "$@"
}
pkg_postrm () 
{ 
    toolchain_pkg_postrm "$@"
}
pkg_setup () 
{ 
    toolchain_pkg_setup;
    ewarn;
    ewarn "LTO support is still experimental and unstable.";
    ewarn "Any bugs resulting from the use of LTO will not be fixed.";
    ewarn
}
preserve_old_lib () 
{ 
    if [[ ${EBUILD_PHASE} != "preinst" ]]; then
        eerror "preserve_old_lib() must be called from pkg_preinst() only";
        die "Invalid preserve_old_lib() usage";
    fi;
    [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
    has preserve-libs ${FEATURES} && return 0;
    local lib dir;
    for lib in "$@";
    do
        [[ -e ${ROOT}/${lib} ]] || continue;
        dir=${lib%/*};
        dodir ${dir} || die "dodir ${dir} failed";
        cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed";
        touch "${D}"/${lib};
    done
}
preserve_old_lib_notify () 
{ 
    if [[ ${EBUILD_PHASE} != "postinst" ]]; then
        eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
        die "Invalid preserve_old_lib_notify() usage";
    fi;
    has preserve-libs ${FEATURES} && return 0;
    local lib notice=0;
    for lib in "$@";
    do
        [[ -e ${ROOT}/${lib} ]] || continue;
        if [[ ${notice} -eq 0 ]]; then
            notice=1;
            ewarn "Old versions of installed libraries were detected on your system.";
            ewarn "In order to avoid breaking packages that depend on these old libs,";
            ewarn "the libraries are not being removed.  You need to run revdep-rebuild";
            ewarn "in order to remove these old dependencies.  If you do not have this";
            ewarn "helper program, simply emerge the 'gentoolkit' package.";
            ewarn;
        fi;
        ewarn "  # revdep-rebuild --library '${lib}' && rm '${lib}'";
    done
}
prune_libtool_files () 
{ 
    debug-print-function ${FUNCNAME} "$@";
    local removing_all removing_modules opt;
    for opt in "$@";
    do
        case "${opt}" in 
            --all)
                removing_all=1;
                removing_modules=1
            ;;
            --modules)
                removing_modules=1
            ;;
            *)
                die "Invalid argument to ${FUNCNAME}(): ${opt}"
            ;;
        esac;
    done;
    local f;
    local queue=();
    while IFS= read -r -d '' f; do
        local archivefile=${f/%.la/.a};
        [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
        local reason pkgconfig_scanned;
        if grep -q '^shouldnotlink=yes$' "${f}"; then
            if [[ -f ${archivefile} ]]; then
                einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
                queue+=("${archivefile}");
            fi;
            if [[ -n ${removing_modules} ]]; then
                reason='module';
            fi;
        else
            if [[ -n ${removing_all} ]]; then
                reason='requested';
            else
                if [[ ! -f ${archivefile} ]]; then
                    reason='no static archive';
                else
                    if [[ ! -n $(sed -nre 				"s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" 				"${f}") ]]; then
                        reason='no libs & flags';
                    else
                        if [[ ! -n ${pkgconfig_scanned} ]]; then
                            local pc_libs=();
                            if [[ ! -n ${removing_all} ]]; then
                                local pc;
                                local tf=${T}/prune-lt-files.pc;
                                local pkgconf=$(tc-getPKG_CONFIG);
                                while IFS= read -r -d '' pc; do
                                    local arg libs;
                                    if ${pkgconf} --exists "${pc}" &>/dev/null; then
                                        sed -e '/^Requires:/d' "${pc}" > "${tf}";
                                        libs=$(${pkgconf} --libs "${tf}");
                                    else
                                        libs=$(sed -ne 's/^Libs://p' "${pc}");
                                    fi;
                                    for arg in ${libs};
                                    do
                                        if [[ ${arg} == -l* ]]; then
                                            if [[ ${arg} == '*$*' ]]; then
                                                eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
                                                eqawarn "(arg: ${arg})";
                                                eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
                                            fi;
                                            pc_libs+=(lib${arg#-l}.la);
                                        fi;
                                    done;
                                done < <(find "${D}" -type f -name '*.pc' -print0);
                                rm -f "${tf}";
                            fi;
                            pkgconfig_scanned=1;
                        fi;
                        has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
                    fi;
                fi;
            fi;
        fi;
        if [[ -n ${reason} ]]; then
            einfo "Removing unnecessary ${f#${D%/}} (${reason})";
            queue+=("${f}");
        fi;
    done < <(find "${D}" -xtype f -name '*.la' -print0);
    if [[ -n ${queue[@]} ]]; then
        rm -f "${queue[@]}";
    fi
}
raw-ldflags () 
{ 
    local x input="$@";
    [[ -z ${input} ]] && input=${LDFLAGS};
    set --;
    for x in ${input};
    do
        case ${x} in 
            -Wl,*)
                x=${x#-Wl,};
                set -- "$@" ${x//,/ }
            ;;
            *)

            ;;
        esac;
    done;
    echo "$@"
}
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 ]] && die "Usage: replace-flags <old flag> <new flag>";
    local f var new;
    for var in $(all-flag-vars);
    do
        new=();
        for f in ${!var};
        do
            [[ ${f} == ${1} ]] && f=${2};
            new+=("${f}");
        done;
        eval export ${var}=\""${new[*]}"\";
    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
}
replace_all_version_separators () 
{ 
    local c=($(get_all_version_components "${2:-${PV}}"));
    c=${c[@]//[-._]/$1};
    echo ${c// }
}
replace_version_separator () 
{ 
    eshopts_push -s extglob;
    local w c v="${3:-${PV}}";
    declare -i i found=0;
    w=${1:-1};
    c=($(get_all_version_components ${v}));
    if [[ ${w} != *[[:digit:]]* ]]; then
        for ((i = 0; i < ${#c[@]}; i++))
        do
            if [[ ${c[i]} == ${w} ]]; then
                c[i]=${2};
                break;
            fi;
        done;
    else
        for ((i = 0; i < ${#c[@]}; i++))
        do
            if [[ -n "${c[i]//[^-._]}" ]]; then
                found+=1;
                if ((found == w)); then
                    c[i]=${2};
                    break;
                fi;
            fi;
        done;
    fi;
    c=${c[*]};
    echo ${c// };
    eshopts_pop
}
setup-allowed-flags () 
{ 
    ALLOWED_FLAGS="-pipe";
    ALLOWED_FLAGS+=" -O -O1 -O2 -Os -mcpu -march -mtune";
    ALLOWED_FLAGS+=" -fstack-protector -fstack-protector-all";
    ALLOWED_FLAGS+=" -fbounds-checking -fno-strict-overflow";
    ALLOWED_FLAGS+=" -fno-PIE -fno-pie -fno-unit-at-a-time";
    ALLOWED_FLAGS+=" -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+";
    ALLOWED_FLAGS+=" -fno-ident -fpermissive";
    ALLOWED_FLAGS+=" -W* -w";
    ALLOWED_FLAGS+=" -fno-stack-protector -fno-stack-protector-all 		-fno-strict-aliasing -fno-bounds-checking -fstrict-overflow 		-fno-omit-frame-pointer";
    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 -mx32 -mabi 		-mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel 		-mstack-bias -mno-stack-bias -msecure-plt -m*-toc -mfloat-abi 		-D* -U*";
    ALLOWED_FLAGS+=" -mno-fma4 -mno-movbe -mno-xop -mno-lwp";
    ALLOWED_FLAGS+=" -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm";
    ALLOWED_FLAGS+=" -mno-avx2 -mno-bmi2 -mno-fma -mno-lzcnt";
    ALLOWED_FLAGS+=" -I* -L* -R* -Wl,*";
    export ALLOWED_FLAGS;
    return 0
}
setup_minispecs_gcc_build_specs () 
{ 
    if hardened_gcc_works pie; then
        cat "${WORKDIR}"/specs/pie.specs >> "${WORKDIR}"/build.specs;
    fi;
    if hardened_gcc_works ssp; then
        for s in ssp sspall;
        do
            cat "${WORKDIR}"/specs/${s}.specs >> "${WORKDIR}"/build.specs;
        done;
    fi;
    for s in nostrict znow;
    do
        cat "${WORKDIR}"/specs/${s}.specs >> "${WORKDIR}"/build.specs;
    done;
    export GCC_SPECS="${WORKDIR}"/build.specs
}
setup_multilib_osdirnames () 
{ 
    is_multilib || return 0;
    local config;
    local libdirs="../lib64 ../lib32";
    case ${CTARGET} in 
        x86_64*-linux*)
            config="i386"
        ;;
        powerpc64*-linux*)
            config="rs6000"
        ;;
        sparc64*-linux*)
            config="sparc"
        ;;
        s390x*-linux*)
            config="s390"
        ;;
        *)
            return 0
        ;;
    esac;
    config+="/t-linux64";
    local sed_args=();
    if tc_version_is_at_least 4.6; then
        sed_args+=(-e 's:$[(]call if_multiarch[^)]*[)]::g');
    fi;
    if [[ ${SYMLINK_LIB} == "yes" ]]; then
        einfo "updating multilib directories to be: ${libdirs}";
        if tc_version_is_at_least 4.6.4 || tc_version_is_at_least 4.7; then
            sed_args+=(-e '/^MULTILIB_OSDIRNAMES.*lib32/s:[$][(]if.*):../lib32:');
        else
            sed_args+=(-e "/^MULTILIB_OSDIRNAMES/s:=.*:= ${libdirs}:");
        fi;
    else
        einfo "using upstream multilib; disabling lib32 autodetection";
        sed_args+=(-r -e 's:[$][(]if.*,(.*)[)]:\1:');
    fi;
    sed -i "${sed_args[@]}" "${S}"/gcc/config/${config} || die
}
should_we_gcc_config () 
{ 
    local curr_config;
    curr_config=$(env -i ROOT="${ROOT}" gcc-config -c ${CTARGET} 2>&1) || return 0;
    local curr_config_ver=$(env -i ROOT="${ROOT}" gcc-config -S ${curr_config} | awk '{print $2}');
    local curr_branch_ver=$(get_version_component_range 1-2 ${curr_config_ver});
    use multislot && return $([[ ${curr_config_ver} == ${GCC_CONFIG_VER} ]]);
    if [[ ${curr_branch_ver} == ${GCC_BRANCH_VER} ]]; then
        return 0;
    else
        if [[ ${EBUILD_PHASE} == *"inst" ]]; then
            einfo "The current gcc config appears valid, so it will not be";
            einfo "automatically switched for you.  If you would like to";
            einfo "switch to the newly installed gcc version, do the";
            einfo "following:";
            echo;
            einfo "gcc-config ${CTARGET}-${GCC_CONFIG_VER}";
            einfo "source /etc/profile";
            echo;
        fi;
        return 1;
    fi
}
src_compile () 
{ 
    toolchain_src_compile "$@"
}
src_install () 
{ 
    toolchain_src_install "$@"
}
src_test () 
{ 
    toolchain_src_test "$@"
}
src_unpack () 
{ 
    if has_version '<sys-libs/glibc-2.12'; then
        ewarn "Your host glibc is too old; disabling automatic fortify.";
        ewarn "Please rebuild gcc after upgrading to >=glibc-2.12 #362315";
        EPATCH_EXCLUDE+=" 10_all_default-fortify-source.patch";
    fi;
    toolchain_src_unpack;
    use vanilla && return 0;
    [[ ${CHOST} == ${CTARGET} ]] && epatch "${FILESDIR}"/gcc-spec-env.patch
}
strip-flags () 
{ 
    local x y var;
    setup-allowed-flags;
    set -f;
    for var in $(all-flag-vars);
    do
        local new=();
        for x in ${!var};
        do
            local flag=${x%%=*};
            for y in ${ALLOWED_FLAGS};
            do
                if [[ -z ${flag%%${y}} ]]; then
                    new+=("${x}");
                    break;
                fi;
            done;
        done;
        if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then
            new+=(-O2);
        fi;
        eval export ${var}=\""${new[*]}"\";
    done;
    set +f;
    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} ]] && einfo "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 
        aarch64*be)
            echo big
        ;;
        aarch64)
            echo little
        ;;
        alpha*)
            echo big
        ;;
        arm*b*)
            echo big
        ;;
        arm*)
            echo little
        ;;
        cris*)
            echo little
        ;;
        hppa*)
            echo big
        ;;
        i?86*)
            echo little
        ;;
        ia64*)
            echo little
        ;;
        m68*)
            echo big
        ;;
        mips*l*)
            echo little
        ;;
        mips*)
            echo big
        ;;
        powerpc*)
            echo big
        ;;
        s390*)
            echo big
        ;;
        sh*b*)
            echo big
        ;;
        sh*)
            echo little
        ;;
        sparc*)
            echo big
        ;;
        x86_64*)
            echo little
        ;;
        *)
            echo wtf
        ;;
    esac
}
tc-env_build () 
{ 
    tc-export_build_env;
    CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
}
tc-export () 
{ 
    local var;
    for var in "$@";
    do
        [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
        eval tc-get${var} > /dev/null;
    done
}
tc-export_build_env () 
{ 
    tc-export "$@";
    : ${BUILD_CFLAGS:=-O1 -pipe};
    : ${BUILD_CXXFLAGS:=-O1 -pipe};
    : ${BUILD_CPPFLAGS:=};
    : ${BUILD_LDFLAGS:=};
    export BUILD_{C,CXX,CPP,LD}FLAGS
}
tc-getAR () 
{ 
    tc-getPROG AR ar "$@"
}
tc-getAS () 
{ 
    tc-getPROG AS as "$@"
}
tc-getBUILD_AR () 
{ 
    tc-getBUILD_PROG AR ar "$@"
}
tc-getBUILD_AS () 
{ 
    tc-getBUILD_PROG AS as "$@"
}
tc-getBUILD_CC () 
{ 
    tc-getBUILD_PROG CC gcc "$@"
}
tc-getBUILD_CPP () 
{ 
    tc-getBUILD_PROG CPP cpp "$@"
}
tc-getBUILD_CXX () 
{ 
    tc-getBUILD_PROG CXX g++ "$@"
}
tc-getBUILD_LD () 
{ 
    tc-getBUILD_PROG LD ld "$@"
}
tc-getBUILD_NM () 
{ 
    tc-getBUILD_PROG NM nm "$@"
}
tc-getBUILD_OBJCOPY () 
{ 
    tc-getBUILD_PROG OBJCOPY objcopy "$@"
}
tc-getBUILD_PKG_CONFIG () 
{ 
    tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
}
tc-getBUILD_PROG () 
{ 
    _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
}
tc-getBUILD_RANLIB () 
{ 
    tc-getBUILD_PROG RANLIB ranlib "$@"
}
tc-getBUILD_STRIP () 
{ 
    tc-getBUILD_PROG STRIP strip "$@"
}
tc-getCC () 
{ 
    tc-getPROG CC gcc "$@"
}
tc-getCPP () 
{ 
    tc-getPROG CPP cpp "$@"
}
tc-getCXX () 
{ 
    tc-getPROG CXX g++ "$@"
}
tc-getDLLWRAP () 
{ 
    tc-getPROG DLLWRAP dllwrap "$@"
}
tc-getF77 () 
{ 
    tc-getPROG F77 gfortran "$@"
}
tc-getFC () 
{ 
    tc-getPROG FC gfortran "$@"
}
tc-getGCJ () 
{ 
    tc-getPROG GCJ gcj "$@"
}
tc-getLD () 
{ 
    tc-getPROG LD ld "$@"
}
tc-getNM () 
{ 
    tc-getPROG NM nm "$@"
}
tc-getOBJCOPY () 
{ 
    tc-getPROG OBJCOPY objcopy "$@"
}
tc-getPKG_CONFIG () 
{ 
    tc-getPROG PKG_CONFIG pkg-config "$@"
}
tc-getPROG () 
{ 
    _tc-getPROG CHOST "$@"
}
tc-getRANLIB () 
{ 
    tc-getPROG RANLIB ranlib "$@"
}
tc-getRC () 
{ 
    tc-getPROG RC windres "$@"
}
tc-getSTRIP () 
{ 
    tc-getPROG STRIP strip "$@"
}
tc-has-openmp () 
{ 
    local base="${T}/test-tc-openmp";
    cat > "${base}.c"  <<-EOF
#include <omp.h>
int main() {
int nthreads, tid, ret = 0;
#pragma omp parallel private(nthreads, tid)
{
tid = omp_get_thread_num();
nthreads = omp_get_num_threads(); ret += tid + nthreads;
}
return ret;
}
EOF

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

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

        ;;
        -*)
            die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
        ;;
    esac;
    : ${flags:=-fPIC -shared -Wl,-z,defs};
    [[ $1 == -* ]] && shift;
    $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &>/dev/null;
    local ret=$?;
    rm -f "${base}"*;
    return ${ret}
}
tc-is-cross-compiler () 
{ 
    return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
}
tc-is-softfloat () 
{ 
    local CTARGET=${CTARGET:-${CHOST}};
    case ${CTARGET} in 
        bfin* | h8300*)
            echo "only"
        ;;
        *)
            if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then
                echo "yes";
            else
                if [[ ${CTARGET//_/-} == *-softfp-* ]]; then
                    echo "softfp";
                else
                    echo "no";
                fi;
            fi
        ;;
    esac
}
tc-is-static-only () 
{ 
    local host=${CTARGET:-${CHOST}};
    return $([[ ${host} == *-mint* ]])
}
tc-ninja_magic_to_arch () 
{ 
    function ninj () 
    { 
        [[ ${type} == "kern" ]] && echo $1 || echo $2
    };
    local type=$1;
    local host=$2;
    [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
    local KV=${KV:-${KV_FULL}};
    [[ ${type} == "kern" ]] && [[ -z ${KV} ]] && ewarn "QA: Kernel version could not be determined, please inherit kernel-2 or linux-info";
    case ${host} in 
        aarch64*)
            ninj arm64 arm
        ;;
        alpha*)
            echo alpha
        ;;
        arm*)
            echo arm
        ;;
        avr*)
            ninj avr32 avr
        ;;
        bfin*)
            ninj blackfin bfin
        ;;
        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
}
tc_version_is_at_least () 
{ 
    version_is_at_least "$1" "${2:-${GCC_RELEASE_VER}}"
}
test-flag-CC () 
{ 
    test-flag-PROG "CC" c "$1"
}
test-flag-CXX () 
{ 
    test-flag-PROG "CXX" c++ "$1"
}
test-flag-F77 () 
{ 
    test-flag-PROG "F77" f77 "$1"
}
test-flag-FC () 
{ 
    test-flag-PROG "FC" f95 "$1"
}
test-flag-PROG () 
{ 
    local comp=$1;
    local lang=$2;
    local flag=$3;
    [[ -z ${comp} || -z ${flag} ]] && return 1;
    local PROG=$(tc-get${comp});
    if ${PROG} -c -o /dev/null -x${lang} - < /dev/null > /dev/null 2>&1; then
        ${PROG} "${flag}" -c -o /dev/null -x${lang} - < /dev/null > /dev/null 2>&1;
    else
        ${PROG} "${flag}" -c -o /dev/null /dev/null > /dev/null 2>&1;
    fi
}
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;
    for x in "$@";
    do
        test-flag-${comp} "${x}" && flags+=("${x}");
    done;
    echo "${flags[*]}";
    [[ ${#flags[@]} -gt 0 ]]
}
test_version_info () 
{ 
    if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
        return 0;
    else
        return 1;
    fi
}
toolchain_death_notice () 
{ 
    pushd "${WORKDIR}"/build > /dev/null;
    tar jcf gcc-build-logs.tar.bz2 $(find -name config.log);
    eerror;
    eerror "Please include ${PWD}/gcc-build-logs.tar.bz2 in your bug report";
    eerror;
    popd > /dev/null
}
toolchain_pkg_postinst () 
{ 
    do_gcc_config;
    if ! is_crosscompile; then
        echo;
        ewarn "If you have issues with packages unable to locate libstdc++.la,";
        ewarn "then try running 'fix_libtool_files.sh' on the old gcc versions.";
        echo;
        ewarn "You might want to review the GCC upgrade guide when moving between";
        ewarn "major versions (like 4.2 to 4.3):";
        ewarn "http://www.gentoo.org/doc/en/gcc-upgrading.xml";
        echo;
    fi;
    if ! is_crosscompile; then
        rm -f "${ROOT}"/*/rcscripts/awk/fixlafiles.awk "${ROOT}"/sbin/fix_libtool_files.sh;
        rmdir "${ROOT}"/*/rcscripts{/awk,} 2> /dev/null;
        mkdir -p "${ROOT}"/usr/{share/gcc-data,sbin,bin};
        cp "${ROOT}/${DATAPATH}"/fixlafiles.awk "${ROOT}"/usr/share/gcc-data/ || die;
        cp "${ROOT}/${DATAPATH}"/fix_libtool_files.sh "${ROOT}"/usr/sbin/ || die;
        cp "${ROOT}/${DATAPATH}"/c{89,99} "${ROOT}"/usr/bin/ 2> /dev/null;
    fi
}
toolchain_pkg_postrm () 
{ 
    if is_crosscompile; then
        if [[ -z $(ls "${ROOT}"/etc/env.d/gcc/${CTARGET}* 2>/dev/null) ]]; then
            rm -f "${ROOT}"/etc/env.d/gcc/config-${CTARGET};
            rm -f "${ROOT}"/etc/env.d/??gcc-${CTARGET};
            rm -f "${ROOT}"/usr/bin/${CTARGET}-{gcc,{g,c}++}{,32,64};
        fi;
        return 0;
    fi;
    [[ ${ROOT} != "/" ]] && return 0;
    if [[ ! -e ${LIBPATH}/libstdc++.so ]]; then
        do_gcc_config;
        einfo "Running 'fix_libtool_files.sh ${GCC_RELEASE_VER}'";
        /usr/sbin/fix_libtool_files.sh ${GCC_RELEASE_VER};
        if [[ -n ${BRANCH_UPDATE} ]]; then
            einfo "Running 'fix_libtool_files.sh ${GCC_RELEASE_VER}-${BRANCH_UPDATE}'";
            /usr/sbin/fix_libtool_files.sh ${GCC_RELEASE_VER}-${BRANCH_UPDATE};
        fi;
    fi;
    return 0
}
toolchain_pkg_setup () 
{ 
    if [[ -n ${PRERELEASE}${SNAPSHOT} || ${PV} == *9999* ]] && [[ -z ${I_PROMISE_TO_SUPPLY_PATCHES_WITH_BUGS} ]]; then
        die "Please \`export I_PROMISE_TO_SUPPLY_PATCHES_WITH_BUGS=1\` or define it in your make.conf if you want to use this version." "This is to try and cut down on people filing bugs for a compiler we do not currently support.";
    fi;
    unset GCC_SPECS;
    if ! use_if_iuse cxx; then
        use_if_iuse go && ewarn 'Go requires a C++ compiler, disabled due to USE="-cxx"';
        use_if_iuse objc++ && ewarn 'Obj-C++ requires a C++ compiler, disabled due to USE="-cxx"';
        use_if_iuse gcj && ewarn 'GCJ requires a C++ compiler, disabled due to USE="-cxx"';
    fi;
    want_minispecs;
    unset LANGUAGES
}
toolchain_src_compile () 
{ 
    gcc_do_filter_flags;
    einfo "CFLAGS=\"${CFLAGS}\"";
    einfo "CXXFLAGS=\"${CXXFLAGS}\"";
    export JAR=no;
    if ! tc_version_is_at_least 4.4 && want_minispecs; then
        setup_minispecs_gcc_build_specs;
    fi;
    mkdir -p "${WORKDIR}"/build;
    pushd "${WORKDIR}"/build > /dev/null;
    einfo "Configuring ${PN} ...";
    gcc_do_configure;
    touch "${S}"/gcc/c-gperf.h;
    [[ ! -x /usr/bin/perl ]] && find "${WORKDIR}"/build -name '*.[17]' | xargs touch;
    einfo "Compiling ${PN} ...";
    gcc_do_make ${GCC_MAKE_TARGET};
    popd > /dev/null
}
toolchain_src_install () 
{ 
    local x=;
    cd "${WORKDIR}"/build;
    find gcc/include*/ -type l -delete;
    mkdir -p gcc/doc;
    cp "${S}"/gcc/doc/*.info* gcc/doc/ || die;
    while read x; do
        grep -q 'It has been auto-edited by fixincludes from' "${x}" && rm -f "${x}";
    done < <(find gcc/include*/ -name '*.h');
    S=${WORKDIR}/build emake -j1 DESTDIR="${D}" install || die;
    find "${D}" -name install-tools -prune -type d -exec rm -rf "{}" \;;
    find "${D}" -name libiberty.a -delete;
    gcc_movelibs;
    if ! is_crosscompile; then
        local EXEEXT;
        eval $(grep ^EXEEXT= "${WORKDIR}"/build/gcc/config.log);
        [[ -r ${D}${BINPATH}/gcc${EXEEXT} ]] || die "gcc not found in ${D}";
    fi;
    dodir /etc/env.d/gcc;
    create_gcc_env_entry;
    if want_minispecs; then
        copy_minispecs_gcc_specs;
    fi;
    gcc_slot_java;
    dodir /usr/bin;
    cd "${D}"${BINPATH};
    for x in cpp gcc g++ c++ gcov g77 gcj gcjh gfortran gccgo;
    do
        [[ -f ${x} ]] && mv ${x} ${CTARGET}-${x};
        if [[ -f ${CTARGET}-${x} ]]; then
            if ! is_crosscompile; then
                ln -sf ${CTARGET}-${x} ${x};
                dosym ${BINPATH}/${CTARGET}-${x} /usr/bin/${x}-${GCC_CONFIG_VER};
            fi;
            dosym ${BINPATH}/${CTARGET}-${x} /usr/bin/${CTARGET}-${x}-${GCC_CONFIG_VER};
        fi;
        if [[ -f ${CTARGET}-${x}-${GCC_CONFIG_VER} ]]; then
            rm -f ${CTARGET}-${x}-${GCC_CONFIG_VER};
            ln -sf ${CTARGET}-${x} ${CTARGET}-${x}-${GCC_CONFIG_VER};
        fi;
    done;
    env RESTRICT="" CHOST=${CHOST} prepstrip "${D}${BINPATH}";
    env RESTRICT="" CHOST=${CTARGET} prepstrip "${D}${LIBPATH}";
    [[ -d ${D}${PREFIX}/libexec/gcc ]] && env RESTRICT="" CHOST=${CHOST} prepstrip "${D}${PREFIX}/libexec/gcc/${CTARGET}/${GCC_CONFIG_VER}";
    cd "${S}";
    if is_crosscompile; then
        rm -rf "${D}"/usr/share/{man,info};
        rm -rf "${D}"${DATAPATH}/{man,info};
    else
        if tc_version_is_at_least 3.0; then
            local cxx_mandir=$(find "${WORKDIR}/build/${CTARGET}/libstdc++-v3" -name man);
            if [[ -d ${cxx_mandir} ]]; then
                find "${cxx_mandir}" -name '*_build_*' -exec rm {} \;;
                cp -r "${cxx_mandir}"/man? "${D}/${DATAPATH}"/man/;
            fi;
        fi;
        has noinfo ${FEATURES} && rm -r "${D}/${DATAPATH}"/info || prepinfo "${DATAPATH}";
        has noman ${FEATURES} && rm -r "${D}/${DATAPATH}"/man || prepman "${DATAPATH}";
    fi;
    find "${D}" -depth -type d -delete 2> /dev/null;
    if use test; then
        docinto testsuite;
        find "${WORKDIR}"/build -type f -name "*.sum" -print0 | xargs -0 dodoc;
        find "${WORKDIR}"/build -type f -path "*/testsuite/*.log" -print0 | xargs -0 dodoc;
    fi;
    if ! is_crosscompile; then
        insinto "${DATAPATH}";
        if tc_version_is_at_least 4.0; then
            newins "${GCC_FILESDIR}"/awk/fixlafiles.awk-no_gcc_la fixlafiles.awk || die;
            find "${D}/${LIBPATH}" -name libstdc++.la -type f -exec rm "{}" \;;
        else
            doins "${GCC_FILESDIR}"/awk/fixlafiles.awk || die;
        fi;
        exeinto "${DATAPATH}";
        doexe "${GCC_FILESDIR}"/fix_libtool_files.sh || die;
        doexe "${GCC_FILESDIR}"/c{89,99} || die;
    fi;
    chown -R root:0 "${D}"${LIBPATH} 2> /dev/null;
    local py gdbdir=/usr/share/gdb/auto-load${LIBPATH/\/lib\//\/$(get_libdir)\/};
    pushd "${D}"${LIBPATH} > /dev/null;
    for py in $(find . -name '*-gdb.py');
    do
        local multidir=${py%/*};
        insinto "${gdbdir}/${multidir}";
        sed -i "/^libdir =/s:=.*:= '${LIBPATH}/${multidir}':" "${py}" || die;
        doins "${py}" || die;
        rm "${py}" || die;
    done;
    popd > /dev/null;
    export QA_EXECSTACK="usr/lib*/go/*/*.gox";
    export QA_WX_LOAD="usr/lib*/go/*/*.gox";
    if tc_version_is_at_least 4.3; then
        pax-mark -r "${D}${PREFIX}/libexec/gcc/${CTARGET}/${GCC_CONFIG_VER}/cc1";
        pax-mark -r "${D}${PREFIX}/libexec/gcc/${CTARGET}/${GCC_CONFIG_VER}/cc1plus";
    fi
}
toolchain_src_test () 
{ 
    cd "${WORKDIR}"/build;
    emake -k check || ewarn "check failed and that sucks :("
}
toolchain_src_unpack () 
{ 
    [[ -z ${UCLIBC_VER} ]] && [[ ${CTARGET} == *-uclibc* ]] && die "Sorry, this version does not support uClibc";
    if [[ ${PV} == *9999* ]]; then
        git-2_src_unpack;
    else
        gcc_quick_unpack;
    fi;
    export BRANDING_GCC_PKGVERSION="Gentoo ${GCC_PVR}";
    cd "${S}";
    if ! use vanilla; then
        if [[ -n ${PATCH_VER} ]]; then
            guess_patch_type_in_dir "${WORKDIR}"/patch;
            EPATCH_MULTI_MSG="Applying Gentoo patches ..." epatch "${WORKDIR}"/patch;
            BRANDING_GCC_PKGVERSION="${BRANDING_GCC_PKGVERSION} p${PATCH_VER}";
        fi;
        if [[ -n ${UCLIBC_VER} ]]; then
            guess_patch_type_in_dir "${WORKDIR}"/uclibc;
            EPATCH_MULTI_MSG="Applying uClibc patches ..." epatch "${WORKDIR}"/uclibc;
        fi;
    fi;
    do_gcc_HTB_patches;
    do_gcc_PIE_patches;
    epatch_user;
    use hardened && make_gcc_hard;
    if tc_version_is_at_least 4.5 && ! tc_version_is_at_least 4.7; then
        sed -i '/^pythondir =/s:=.*:= $(datadir)/python:' "${S}"/libstdc++-v3/python/Makefile.in || die;
    fi;
    find "${S}" -name Makefile.in -exec sed -i '/^pkgconfigdir/s:=.*:=$(toolexeclibdir)/pkgconfig:' {} +;
    if ! tc_version_is_at_least 4.3; then
        fix_files="";
        for x in contrib/test_summary libstdc++-v3/scripts/check_survey.in;
        do
            [[ -e ${x} ]] && fix_files="${fix_files} ${x}";
        done;
        ht_fix_file ${fix_files} */configure *.sh */Makefile.in;
    fi;
    setup_multilib_osdirnames;
    gcc_version_patch;
    if tc_version_is_at_least 4.1; then
        if [[ -n ${SNAPSHOT} || -n ${PRERELEASE} ]]; then
            echo ${PV/_/-} > "${S}"/gcc/BASE-VER;
        fi;
    fi;
    if tc_version_is_at_least 4.3 && use gcj; then
        if tc_version_is_at_least "4.5"; then
            einfo "Copying ecj-4.5.jar";
            cp -pPR "${DISTDIR}/ecj-4.5.jar" "${S}/ecj.jar" || die;
        else
            if tc_version_is_at_least "4.3"; then
                einfo "Copying ecj-4.3.jar";
                cp -pPR "${DISTDIR}/ecj-4.3.jar" "${S}/ecj.jar" || die;
            fi;
        fi;
    fi;
    if ! tc_version_is_at_least 3.4.4; then
        sed -i -e s/HAVE_LD_AS_NEEDED/USE_LD_AS_NEEDED/g "${S}"/gcc/config.in;
    fi;
    if tc_version_is_at_least 3.3 && ! tc_version_is_at_least 4.0; then
        do_gcc_rename_java_bins;
    fi;
    if tc_version_is_at_least 3.0; then
        sed -i -e 's/\(install.*:\) install-.*recursive/\1/' "${S}"/libffi/Makefile.in || die;
        sed -i -e 's/\(install-data-am:\).*/\1/' "${S}"/libffi/include/Makefile.in || die;
    fi;
    cd "${S}";
    elibtoolize --portage --shallow --no-uclibc;
    gnuconfig_update;
    local f;
    einfo "Fixing misc issues in configure files";
    tc_version_is_at_least 4.1 && epatch "${GCC_FILESDIR}"/gcc-configure-texinfo.patch;
    for f in $(grep -l 'autoconf version 2.13' $(find "${S}" -name configure));
    do
        ebegin "  Updating ${f/${S}\/} [LANG]";
        patch "${f}" "${GCC_FILESDIR}"/gcc-configure-LANG.patch &>"${T}"/configure-patch.log || eerror "Please file a bug about this";
        eend $?;
    done;
    sed -i 's|A-Za-z0-9|[:alnum:]|g' "${S}"/gcc/*.awk;
    if [[ -x contrib/gcc_update ]]; then
        einfo "Touching generated files";
        ./contrib/gcc_update --touch | while read f; do
            einfo "  ${f%%...}";
        done;
    fi
}
uclibctoolize () 
{ 
    die "Use elibtoolize"
}
use_if_iuse () 
{ 
    in_iuse $1 || return 1;
    use $1
}
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
}
version_compare () 
{ 
    eshopts_push -s extglob;
    local ver_a=${1} ver_b=${2} parts_a parts_b;
    local cur_tok_a cur_tok_b num_part_a num_part_b;
    local -i cur_idx_a=0 cur_idx_b=0 prev_idx_a prev_idx_b;
    parts_a=($(get_all_version_components "${ver_a}" ));
    parts_b=($(get_all_version_components "${ver_b}" ));
    local -i inf_loop=0;
    while true; do
        inf_loop+=1;
        ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
        prev_idx_a=cur_idx_a;
        prev_idx_b=cur_idx_b;
        cur_tok_a=${parts_a[cur_idx_a]};
        cur_tok_b=${parts_b[cur_idx_b]};
        if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
            cur_idx_a+=1;
            [[ ${parts_a[cur_idx_a]} == . ]] && cur_idx_a+=1;
        else
            cur_tok_a=;
        fi;
        if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
            cur_idx_b+=1;
            [[ ${parts_b[cur_idx_b]} == . ]] && cur_idx_b+=1;
        else
            cur_tok_b=;
        fi;
        [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]] && break;
        [[ -z ${cur_tok_a} ]] && eshopts_pop && return 1;
        [[ -z ${cur_tok_b} ]] && eshopts_pop && return 3;
        if (( prev_idx_a != 0 && prev_idx_b != 0 )) && [[ ${cur_tok_a} == 0* || ${cur_tok_b} == 0* ]]; then
            cur_tok_a=${cur_tok_a%%+(0)};
            cur_tok_b=${cur_tok_b%%+(0)};
            [[ ${cur_tok_a} < ${cur_tok_b} ]] && eshopts_pop && return 1;
            [[ ${cur_tok_a} > ${cur_tok_b} ]] && eshopts_pop && return 3;
        else
            cur_tok_a=${cur_tok_a##+(0)};
            cur_tok_b=${cur_tok_b##+(0)};
            : ${cur_tok_a:=0};
            : ${cur_tok_b:=0};
            ((cur_tok_a < cur_tok_b)) && eshopts_pop && return 1;
            ((cur_tok_a > cur_tok_b)) && eshopts_pop && return 3;
        fi;
    done;
    local letter_a=;
    letter_a=${parts_a[cur_idx_a]};
    if [[ ${#letter_a} -eq 1 && -z ${letter_a/[a-z]} ]]; then
        cur_idx_a+=1;
    else
        letter_a=@;
    fi;
    local letter_b=;
    letter_b=${parts_b[cur_idx_b]};
    if [[ ${#letter_b} -eq 1 && -z ${letter_b/[a-z]} ]]; then
        cur_idx_b+=1;
    else
        letter_b=@;
    fi;
    [[ ${letter_a} < ${letter_b} ]] && eshopts_pop && return 1;
    [[ ${letter_a} > ${letter_b} ]] && eshopts_pop && return 3;
    inf_loop=0;
    while true; do
        inf_loop+=1;
        ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
        [[ ${parts_a[cur_idx_a]} == _ ]] && ((cur_idx_a++));
        [[ ${parts_b[cur_idx_b]} == _ ]] && ((cur_idx_b++));
        cur_tok_a=${parts_a[cur_idx_a]};
        cur_tok_b=${parts_b[cur_idx_b]};
        num_part_a=0;
        num_part_b=0;
        if has ${cur_tok_a%%+([0-9])} "alpha" "beta" "pre" "rc" "p"; then
            cur_idx_a+=1;
            num_part_a=${cur_tok_a##+([a-z])};
            num_part_a=${num_part_a##+(0)};
            : ${num_part_a:=0};
            cur_tok_a=${cur_tok_a%%+([0-9])};
        else
            cur_tok_a=;
        fi;
        if has ${cur_tok_b%%+([0-9])} alpha beta pre rc p; then
            cur_idx_b+=1;
            num_part_b=${cur_tok_b##+([a-z])};
            num_part_b=${num_part_b##+(0)};
            : ${num_part_b:=0};
            cur_tok_b=${cur_tok_b%%+([0-9])};
        else
            cur_tok_b=;
        fi;
        if [[ ${cur_tok_a} != ${cur_tok_b} ]]; then
            local suffix;
            for suffix in alpha beta pre rc "" p;
            do
                [[ ${cur_tok_a} == ${suffix} ]] && eshopts_pop && return 1;
                [[ ${cur_tok_b} == ${suffix} ]] && eshopts_pop && return 3;
            done;
        else
            if [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]]; then
                break;
            else
                ((num_part_a < num_part_b)) && eshopts_pop && return 1;
                ((num_part_a > num_part_b)) && eshopts_pop && return 3;
            fi;
        fi;
    done;
    [[ ${parts_a[cur_idx_a]} == - ]] && ((cur_idx_a++));
    [[ ${parts_b[cur_idx_b]} == - ]] && ((cur_idx_b++));
    if [[ -n ${parts_a[cur_idx_a]/r+([0-9])} || -n ${parts_b[cur_idx_b]/r+([0-9])} ]]; then
        die "versionator compare bug [revisions, ${ver_a}, ${ver_b}]";
    fi;
    num_part_a=${parts_a[cur_idx_a]#r};
    num_part_a=${num_part_a##+(0)};
    : ${num_part_a:=0};
    num_part_b=${parts_b[cur_idx_b]#r};
    num_part_b=${num_part_b##+(0)};
    : ${num_part_b:=0};
    ((num_part_a < num_part_b)) && eshopts_pop && return 1;
    ((num_part_a > num_part_b)) && eshopts_pop && return 3;
    eshopts_pop;
    return 2
}
version_format_string () 
{ 
    local fstr=$1;
    shift;
    set -- $(get_version_components "$@");
    eval echo "${fstr}"
}
version_is_at_least () 
{ 
    local want_s="$1" have_s="${2:-${PVR}}" r;
    version_compare "${want_s}" "${have_s}";
    r=$?;
    case $r in 
        1 | 2)
            return 0
        ;;
        3)
            return 1
        ;;
        *)
            die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
        ;;
    esac
}
version_sort () 
{ 
    eshopts_push -s extglob;
    local items=;
    local -i left=0;
    items=("$@");
    while ((left < ${#items[@]})); do
        local -i lowest_idx=left;
        local -i idx=lowest_idx+1;
        while ((idx < ${#items[@]})); do
            version_compare "${items[lowest_idx]}" "${items[idx]}";
            [[ $? -eq 3 ]] && lowest_idx=idx;
            idx+=1;
        done;
        local tmp=${items[lowest_idx]};
        items[lowest_idx]=${items[left]};
        items[left]=${tmp};
        left+=1;
    done;
    echo ${items[@]};
    eshopts_pop
}
want_minispecs () 
{ 
    if tc_version_is_at_least 4.3.2 && use hardened; then
        if ! want_pie; then
            ewarn "PIE_VER or SPECS_VER is not defiend in the GCC ebuild.";
        else
            if use vanilla; then
                ewarn "You will not get hardened features if you have the vanilla USE-flag.";
            else
                if use nopie && use nossp; then
                    ewarn "You will not get hardened features if you have the nopie and nossp USE-flag.";
                else
                    if ! hardened_gcc_works; then
                        ewarn "Your $(tc-arch) arch is not supported.";
                    else
                        return 0;
                    fi;
                fi;
            fi;
        fi;
        ewarn "Hope you know what you are doing. Hardened will not work.";
        return 0;
    fi;
    return 1
}
want_pie () 
{ 
    ! use hardened && [[ -n ${PIE_VER} ]] && use nopie && return 1;
    [[ -n ${PIE_VER} ]] && [[ -n ${SPECS_VER} ]] && return 0;
    tc_version_is_at_least 4.3.2 && return 1;
    [[ -z ${PIE_VER} ]] && return 1;
    use !nopie && return 0;
    return 1
}

[-- Attachment #3: build.log --]
[-- Type: application/octet-stream, Size: 260862 bytes --]

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

* Re: [gentoo-user] bus error during compilation of gcc
  2013-04-20 17:29 [gentoo-user] bus error during compilation of gcc the guard
@ 2013-04-20 17:54 ` Nilesh Govindrajan
  2013-04-20 17:58   ` [gentoo-user] Re[2]: " the guard
  2013-04-20 19:56 ` [gentoo-user] " Grant Edwards
  1 sibling, 1 reply; 14+ messages in thread
From: Nilesh Govindrajan @ 2013-04-20 17:54 UTC (permalink / raw
  To: gentoo-user

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

On Saturday 20 April 2013 10:59:09 PM IST, the guard wrote:
> Hello, gentlemen
>
> The package i decided to install required a gcc rebuild so I started
> rebuilding it and got a bus error. I've googled and found suggestions
> to lower makeopts, but it didn't help.
>

Quite interestingly, I had the *exactly* same problem few days ago and 
I ended up reinstalling it totally.


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4210 bytes --]

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

* [gentoo-user] Re[2]: [gentoo-user] bus error during compilation of gcc
  2013-04-20 17:54 ` Nilesh Govindrajan
@ 2013-04-20 17:58   ` the guard
  2013-04-20 17:59     ` Nilesh Govindrajan
  0 siblings, 1 reply; 14+ messages in thread
From: the guard @ 2013-04-20 17:58 UTC (permalink / raw
  To: gentoo-user




Суббота, 20 апреля 2013, 23:24 +05:30 от Nilesh Govindrajan <me@nileshgr.com>:
> On Saturday 20 April 2013 10:59:09 PM IST, the guard wrote:
> > Hello, gentlemen
> >
> > The package i decided to install required a gcc rebuild so I started
> > rebuilding it and got a bus error. I've googled and found suggestions
> > to lower makeopts, but it didn't help.
> >
> 
> Quite interestingly, I had the *exactly* same problem few days ago and 
> I ended up reinstalling it totally.
> 
> 
> 
Excuse me, but reinstalling what?

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

* Re: [gentoo-user] Re[2]: [gentoo-user] bus error during compilation of gcc
  2013-04-20 17:58   ` [gentoo-user] Re[2]: " the guard
@ 2013-04-20 17:59     ` Nilesh Govindrajan
  2013-04-20 19:25       ` Forrest Schultz
  0 siblings, 1 reply; 14+ messages in thread
From: Nilesh Govindrajan @ 2013-04-20 17:59 UTC (permalink / raw
  To: gentoo-user

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

On Saturday 20 April 2013 11:28:06 PM IST, the guard wrote:
>
>
>
> Суббота, 20 апреля 2013, 23:24 +05:30 от Nilesh Govindrajan <me@nileshgr.com>:
>> On Saturday 20 April 2013 10:59:09 PM IST, the guard wrote:
>>> Hello, gentlemen
>>>
>>> The package i decided to install required a gcc rebuild so I started
>>> rebuilding it and got a bus error. I've googled and found suggestions
>>> to lower makeopts, but it didn't help.
>>>
>>
>> Quite interestingly, I had the *exactly* same problem few days ago and
>> I ended up reinstalling it totally.
>>
>>
>>
> Excuse me, but reinstalling what?

Gentoo


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4210 bytes --]

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

* Re: [gentoo-user] Re[2]: [gentoo-user] bus error during compilation of gcc
  2013-04-20 17:59     ` Nilesh Govindrajan
@ 2013-04-20 19:25       ` Forrest Schultz
  2013-04-20 19:29         ` [gentoo-user] " the guard
  0 siblings, 1 reply; 14+ messages in thread
From: Forrest Schultz @ 2013-04-20 19:25 UTC (permalink / raw
  To: gentoo-user

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

Doesn't lowering makeopts just reduce the number of parallel compilations?



On Sat, Apr 20, 2013 at 1:59 PM, Nilesh Govindrajan <me@nileshgr.com> wrote:

> On Saturday 20 April 2013 11:28:06 PM IST, the guard wrote:
>
>>
>>
>>
>> Суббота, 20 апреля 2013, 23:24 +05:30 от Nilesh Govindrajan <
>> me@nileshgr.com>:
>>
>>> On Saturday 20 April 2013 10:59:09 PM IST, the guard wrote:
>>>
>>>> Hello, gentlemen
>>>>
>>>> The package i decided to install required a gcc rebuild so I started
>>>> rebuilding it and got a bus error. I've googled and found suggestions
>>>> to lower makeopts, but it didn't help.
>>>>
>>>>
>>> Quite interestingly, I had the *exactly* same problem few days ago and
>>> I ended up reinstalling it totally.
>>>
>>>
>>>
>>>  Excuse me, but reinstalling what?
>>
>
> Gentoo
>
>

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

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

* [gentoo-user] Re: [gentoo-user] bus error during compilation of gcc
  2013-04-20 19:25       ` Forrest Schultz
@ 2013-04-20 19:29         ` the guard
  2013-04-21 12:27           ` Mick
  0 siblings, 1 reply; 14+ messages in thread
From: the guard @ 2013-04-20 19:29 UTC (permalink / raw
  To: gentoo-user




Суббота, 20 апреля 2013, 15:25 -04:00 от Forrest Schultz <f.schultz0@gmail.com>:
> 
> Doesn't lowering makeopts just reduce the number of parallel compilations?
> 

yes, it does. I heard somewhere that bus error is caused by lack of sufficient amount of memory during compilations.I also tried to remove cflags.

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

* [gentoo-user] Re: bus error during compilation of gcc
  2013-04-20 17:29 [gentoo-user] bus error during compilation of gcc the guard
  2013-04-20 17:54 ` Nilesh Govindrajan
@ 2013-04-20 19:56 ` Grant Edwards
  2013-04-20 20:44   ` [gentoo-user] " the guard
  1 sibling, 1 reply; 14+ messages in thread
From: Grant Edwards @ 2013-04-20 19:56 UTC (permalink / raw
  To: gentoo-user

On 2013-04-20, the guard <the.guard@mail.ru> wrote:

> The package i decided to install required a gcc rebuild so I started
> rebuilding it and got a bus error. I've googled and found suggestions
> to lower makeopts, but it didn't help. 

Every time I've gotten bus errors when building things it turned out
to be a hardware problem.

Bad RAM, failing CPU, failing motherboard power supply capacitors, bad
disk controller card (obviously, that was a _long_ time ago).

If I were you, I'd start by running memtest86+ overnight.

-- 
Grant





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

* [gentoo-user] Re: [gentoo-user] Re: bus error during compilation of gcc
  2013-04-20 19:56 ` [gentoo-user] " Grant Edwards
@ 2013-04-20 20:44   ` the guard
  2013-04-21 19:42     ` Nuno J. Silva (aka njsg)
  2013-04-22 11:35     ` [gentoo-user] " David Relson
  0 siblings, 2 replies; 14+ messages in thread
From: the guard @ 2013-04-20 20:44 UTC (permalink / raw
  To: gentoo-user




Суббота, 20 апреля 2013, 19:56 UTC от Grant Edwards <grant.b.edwards@gmail.com>:
> On 2013-04-20, the guard <the.guard@mail.ru> wrote:
> 
> > The package i decided to install required a gcc rebuild so I started
> > rebuilding it and got a bus error. I've googled and found suggestions
> > to lower makeopts, but it didn't help. 
> 
> Every time I've gotten bus errors when building things it turned out
> to be a hardware problem.
> 
> Bad RAM, failing CPU, failing motherboard power supply capacitors, bad
> disk controller card (obviously, that was a _long_ time ago).
> 
> If I were you, I'd start by running memtest86+ overnight.
> 
> -- 
> Grant
> 
> 
> 
> 
> 
memtest revealed nothing

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

* Re: [gentoo-user] Re: [gentoo-user] bus error during compilation of gcc
  2013-04-20 19:29         ` [gentoo-user] " the guard
@ 2013-04-21 12:27           ` Mick
  2013-04-25 16:36             ` [gentoo-user] Re[2]: " the guard
  0 siblings, 1 reply; 14+ messages in thread
From: Mick @ 2013-04-21 12:27 UTC (permalink / raw
  To: gentoo-user

[-- Attachment #1: Type: Text/Plain, Size: 701 bytes --]

On Saturday 20 Apr 2013 20:29:31 the guard wrote:
> Суббота, 20 апреля 2013, 15:25 -04:00 от Forrest Schultz 
<f.schultz0@gmail.com>:
> > Doesn't lowering makeopts just reduce the number of parallel
> > compilations?
> 
> yes, it does. I heard somewhere that bus error is caused by lack of
> sufficient amount of memory during compilations.I also tried to remove
> cflags.

Simplifying cflags to something like: 

  CFLAGS="-march=native -O2 -pipe"

may help and also setting makeopts to 1:

  MAKEOPTS="-j1"


but none of the above will help if the problem is due to a bug.  Have you done 
the basics like revdep-rebuild and python-updater?

-- 
Regards,
Mick

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

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

* Re: [gentoo-user] Re: bus error during compilation of gcc
  2013-04-20 20:44   ` [gentoo-user] " the guard
@ 2013-04-21 19:42     ` Nuno J. Silva (aka njsg)
  2013-04-22  6:16       ` [gentoo-user] Re[2]: " the guard
  2013-04-22 11:35     ` [gentoo-user] " David Relson
  1 sibling, 1 reply; 14+ messages in thread
From: Nuno J. Silva (aka njsg) @ 2013-04-21 19:42 UTC (permalink / raw
  To: gentoo-user

On 2013-04-20, the guard <the.guard@mail.ru> wrote:
>
>
>
> Суббота, 20 апреля 2013, 19:56 UTC от Grant Edwards <grant.b.edwards@gmail.com>:
>> On 2013-04-20, the guard <the.guard@mail.ru> wrote:
>> 
>> > The package i decided to install required a gcc rebuild so I started
>> > rebuilding it and got a bus error. I've googled and found suggestions
>> > to lower makeopts, but it didn't help. 
>> 
>> Every time I've gotten bus errors when building things it turned out
>> to be a hardware problem.
>> 
>> Bad RAM, failing CPU, failing motherboard power supply capacitors, bad
>> disk controller card (obviously, that was a _long_ time ago).
>> 
>> If I were you, I'd start by running memtest86+ overnight.
>> 
> 
> memtest revealed nothing

Which does not mean there's nothing there ;-)

-- 
Nuno Silva (aka njsg)
http://njsg.sdf-eu.org/



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

* [gentoo-user] Re[2]: [gentoo-user] Re: bus error during compilation of gcc
  2013-04-21 19:42     ` Nuno J. Silva (aka njsg)
@ 2013-04-22  6:16       ` the guard
  0 siblings, 0 replies; 14+ messages in thread
From: the guard @ 2013-04-22  6:16 UTC (permalink / raw
  To: gentoo-user




Воскресенье, 21 апреля 2013, 19:42 UTC от "Nuno J. Silva (aka njsg)" <nunojsilva@ist.utl.pt>:
> On 2013-04-20, the guard <the.guard@mail.ru> wrote:
> >
> >
> >
> > Суббота, 20 апреля 2013, 19:56 UTC от Grant Edwards <grant.b.edwards@gmail.com>:
> >> On 2013-04-20, the guard <the.guard@mail.ru> wrote:
> >> 
> >> > The package i decided to install required a gcc rebuild so I started
> >> > rebuilding it and got a bus error. I've googled and found suggestions
> >> > to lower makeopts, but it didn't help. 
> >> 
> >> Every time I've gotten bus errors when building things it turned out
> >> to be a hardware problem.
> >> 
> >> Bad RAM, failing CPU, failing motherboard power supply capacitors, bad
> >> disk controller card (obviously, that was a _long_ time ago).
> >> 
> >> If I were you, I'd start by running memtest86+ overnight.
> >> 
> > 
> > memtest revealed nothing
> 
> Which does not mean there's nothing there ;-)
> 
No, this isn't funny. Everything else compiles fine. My hardware is fine! It's a software problem. How do I fix it?
Should I file a bugreport?

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

* Re: [gentoo-user] Re: [gentoo-user] Re: bus error during compilation of gcc
  2013-04-20 20:44   ` [gentoo-user] " the guard
  2013-04-21 19:42     ` Nuno J. Silva (aka njsg)
@ 2013-04-22 11:35     ` David Relson
  2013-04-22 16:21       ` Nuno J. Silva (aka njsg)
  1 sibling, 1 reply; 14+ messages in thread
From: David Relson @ 2013-04-22 11:35 UTC (permalink / raw
  To: gentoo-user

On Sun, 21 Apr 2013 00:44:46 +0400
the guard wrote:

> 
> 
> 
> Суббота, 20 апреля 2013, 19:56 UTC от Grant Edwards
> <grant.b.edwards@gmail.com>:
> > On 2013-04-20, the guard <the.guard@mail.ru> wrote:
> > 
> > > The package i decided to install required a gcc rebuild so I
> > > started rebuilding it and got a bus error. I've googled and found
> > > suggestions to lower makeopts, but it didn't help. 
> > 
> > Every time I've gotten bus errors when building things it turned out
> > to be a hardware problem.
> > 
> > Bad RAM, failing CPU, failing motherboard power supply capacitors,
> > bad disk controller card (obviously, that was a _long_ time ago).
> > 
> > If I were you, I'd start by running memtest86+ overnight.
> > 
> > -- 
> > Grant
> > 
> > 
> > 
> > 
> > 
> memtest revealed nothing

We had an old QNX machine start giving bus errors during compilation of
a large application.  Running memtest (for approx 40 hrs) showed
nothing, but a close visual examination of the motherboard showed
bulging capacitors, i.e. failing capacitors.


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

* Re: [gentoo-user] Re: bus error during compilation of gcc
  2013-04-22 11:35     ` [gentoo-user] " David Relson
@ 2013-04-22 16:21       ` Nuno J. Silva (aka njsg)
  0 siblings, 0 replies; 14+ messages in thread
From: Nuno J. Silva (aka njsg) @ 2013-04-22 16:21 UTC (permalink / raw
  To: gentoo-user

On 2013-04-22, David Relson <relson@osagesoftware.com> wrote:
> On Sun, 21 Apr 2013 00:44:46 +0400
> the guard wrote:
>
>> 
>> 
>> 
>> Суббота, 20 апреля 2013, 19:56 UTC от Grant Edwards
>> <grant.b.edwards@gmail.com>:
>> > On 2013-04-20, the guard <the.guard@mail.ru> wrote:
>> > 
>> > > The package i decided to install required a gcc rebuild so I
>> > > started rebuilding it and got a bus error. I've googled and found
>> > > suggestions to lower makeopts, but it didn't help. 
>> > 
>> > Every time I've gotten bus errors when building things it turned out
>> > to be a hardware problem.
>> > 
>> > Bad RAM, failing CPU, failing motherboard power supply capacitors,
>> > bad disk controller card (obviously, that was a _long_ time ago).
>> > 
>> > If I were you, I'd start by running memtest86+ overnight.
>> 
>> 
>> memtest revealed nothing
>
> We had an old QNX machine start giving bus errors during compilation of
> a large application.  Running memtest (for approx 40 hrs) showed
> nothing, but a close visual examination of the motherboard showed
> bulging capacitors, i.e. failing capacitors.


"Bad caps"? Those can really give all the kinds of problems, and look
really random.

I've also seen occasions where a certain northbridge was less tolerant
regarding voltages and would render the whole system unstable with a
specific brand of memories (the memories were OK, but the system would
still become unstable).

There was also a more serious case where I started getting random
segfaults with a computer, as I started leaving it on for longer and
compiling larger programs. Apparently, the memory modules were seated in
a less than optimal configuration, leading the motherboard to believe
there was *another* memory module. Thing is, for several months the
system was OK, because apparently it never needed more than the first
half of the memory, or if it did, it did not try to use the result of
addressing the second half. That was a lot of luck, I guess. (The less
lucky part are the emerge -e systems anf emerge -e worlds which
followed.)


-- 
Nuno Silva (aka njsg)
http://njsg.sdf-eu.org/



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

* [gentoo-user] Re[2]: [gentoo-user] Re: [gentoo-user] bus error during compilation of gcc
  2013-04-21 12:27           ` Mick
@ 2013-04-25 16:36             ` the guard
  0 siblings, 0 replies; 14+ messages in thread
From: the guard @ 2013-04-25 16:36 UTC (permalink / raw
  To: gentoo-user




Воскресенье, 21 апреля 2013, 13:27 +01:00 от Mick <michaelkintzios@gmail.com>:
> On Saturday 20 Apr 2013 20:29:31 the guard wrote:
> > Суббота, 20 апреля 2013, 15:25 -04:00 от Forrest Schultz 
> <f.schultz0@gmail.com>:
> > > Doesn't lowering makeopts just reduce the number of parallel
> > > compilations?
> > 
> > yes, it does. I heard somewhere that bus error is caused by lack of
> > sufficient amount of memory during compilations.I also tried to remove
> > cflags.
> 
> Simplifying cflags to something like: 
> 
>   CFLAGS="-march=native -O2 -pipe"
> 
> may help and also setting makeopts to 1:
> 
>   MAKEOPTS="-j1"
> 
> 
> but none of the above will help if the problem is due to a bug.  Have you done 
> the basics like revdep-rebuild and python-updater?
> 
> -- 
> Regards,
> Mick
> 
> 
didn't help, Mick((((

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

end of thread, other threads:[~2013-04-25 16:36 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-20 17:29 [gentoo-user] bus error during compilation of gcc the guard
2013-04-20 17:54 ` Nilesh Govindrajan
2013-04-20 17:58   ` [gentoo-user] Re[2]: " the guard
2013-04-20 17:59     ` Nilesh Govindrajan
2013-04-20 19:25       ` Forrest Schultz
2013-04-20 19:29         ` [gentoo-user] " the guard
2013-04-21 12:27           ` Mick
2013-04-25 16:36             ` [gentoo-user] Re[2]: " the guard
2013-04-20 19:56 ` [gentoo-user] " Grant Edwards
2013-04-20 20:44   ` [gentoo-user] " the guard
2013-04-21 19:42     ` Nuno J. Silva (aka njsg)
2013-04-22  6:16       ` [gentoo-user] Re[2]: " the guard
2013-04-22 11:35     ` [gentoo-user] " David Relson
2013-04-22 16:21       ` Nuno J. Silva (aka njsg)

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