SHARE
TWEET

automake environment

mcraoul Jul 18th, 2016 90 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. declare -x ABI="amd64"
  2. declare -x ABI_X86="64"
  3. declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci"
  4. 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"
  5. declare -x ARCH="amd64"
  6. declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_4 python_targets_python2_7 multilib"
  7. declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author"
  8. declare -x CAMERAS="ptp2"
  9. declare -x CBUILD="x86_64-pc-linux-gnu"
  10. declare -x CFLAGS="-O2 -march=bdver1 -mprefer-avx128 -mvzeroupper -pipe"
  11. declare -x CFLAGS_amd64="-m64"
  12. declare -x CFLAGS_default
  13. declare -x CFLAGS_x32="-mx32"
  14. declare -x CFLAGS_x86="-m32"
  15. declare -x CHOST="x86_64-pc-linux-gnu"
  16. declare -x CHOST_amd64="x86_64-pc-linux-gnu"
  17. declare -x CHOST_default="x86_64-pc-linux-gnu"
  18. declare -x CHOST_x32="x86_64-pc-linux-gnux32"
  19. declare -x CHOST_x86="i686-pc-linux-gnu"
  20. declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
  21. declare -x CONF_PREFIX="/usr"
  22. declare -x CPU_FLAGS_X86="aes avx fma3 fma4 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 xop"
  23. declare -x CTARGET_default="x86_64-pc-linux-gnu"
  24. declare -x CXXFLAGS="-O2 -march=bdver1 -mprefer-avx128 -mvzeroupper -pipe"
  25. declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-xHAkG2ONaX,guid=2162e6d6ab11ed3811100a14578c0e31"
  26. declare -x DEFAULT_ABI="amd64"
  27. declare -x DEFINED_PHASES=" compile configure install prepare"
  28. declare DEPEND="dev-lang/perl
  29.     >=sys-devel/automake-wrapper-10
  30.     >=sys-devel/autoconf-2.69
  31.     sys-devel/gnuconfig
  32.     sys-apps/help2man "
  33. declare DESCRIPTION="Used to generate Makefile.in from Makefile.am"
  34. declare -x DESKTOP_SESSION="xfce"
  35. declare -x DESTTREE="/usr"
  36. declare -x DIROPTIONS="-m0755"
  37. declare -x EAPI="5"
  38. declare -- ECONF_SOURCE="."
  39. declare -x ELIBC="glibc"
  40. declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
  41. declare -- EPATCH_EXCLUDE=""
  42. declare -- EPATCH_FORCE="no"
  43. declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
  44. declare -- EPATCH_OPTS=""
  45. declare -- EPATCH_SINGLE_MSG=""
  46. declare -- EPATCH_SOURCE="/var/tmp/portage/sys-devel/automake-1.11.6-r2/work/patch"
  47. declare -- EPATCH_SUFFIX="patch.bz2"
  48. declare -- EPATCH_USER_SOURCE="/etc/portage/patches"
  49. declare -x EXEOPTIONS="-m0755"
  50. declare -x FCFLAGS="-O2 -pipe"
  51. 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} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
  52. declare -x FFLAGS="-O2 -pipe"
  53. declare -x GCC_SPECS=""
  54. declare -x GLADE_CATALOG_PATH=":"
  55. declare -x GLADE_MODULE_PATH=":"
  56. declare -x GLADE_PIXMAP_PATH=":"
  57. 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 ublox ubx"
  58. declare -x GRUB_PLATFORMS=""
  59. declare -x GSETTINGS_BACKEND="dconf"
  60. declare -x GUILE_LOAD_PATH="/usr/share/guile/1.8"
  61. declare HDEPEND=""
  62. declare -x HELP2MAN="true"
  63. declare HOMEPAGE="https://www.gnu.org/software/automake/"
  64. declare -x HUSHLOGIN="FALSE"
  65. declare -x INHERITED=" multilib toolchain-funcs eutils"
  66. declare -x INPUT_DEVICES="evdev mouse"
  67. declare -x INSDESTTREE=""
  68. declare -x INSOPTIONS="-m0644"
  69. declare IUSE=""
  70. declare -x IUSE_EFFECTIVE="abi_x86_64 alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc hppa hppa-hpux ia64 ia64-hpux ia64-linux kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_Interix kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k m68k-mint mips nios2 ppc ppc-aix ppc-macos ppc-openbsd ppc64 ppc64-linux prefix prefix-guest riscv s390 sh sparc sparc-fbsd sparc-solaris sparc64-freebsd sparc64-solaris userland_BSD userland_GNU x64-cygwin 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"
  71. declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-guest"
  72. declare -x KERNEL="linux"
  73. declare -x KERNEL_ABI="amd64"
  74. declare -x KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
  75. declare -x L10N="en_AU"
  76. declare -x LADSPA_PATH="/usr/lib64/ladspa"
  77. declare -x LANG="en_AU"
  78. declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
  79. declare -x LC_MESSAGES="C"
  80. declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed"
  81. declare -x LDFLAGS_amd64="-m elf_x86_64"
  82. declare -x LDFLAGS_default
  83. declare -x LDFLAGS_x32="-m elf32_x86_64"
  84. declare -x LDFLAGS_x86="-m elf_i386"
  85. declare -x LIBDIR_amd64="lib64"
  86. declare -x LIBDIR_amd64_fbsd="lib64"
  87. declare -x LIBDIR_arm="lib"
  88. declare -x LIBDIR_arm64="lib64"
  89. declare -x LIBDIR_default="lib"
  90. declare -x LIBDIR_n32="lib32"
  91. declare -x LIBDIR_n64="lib64"
  92. declare -x LIBDIR_o32="lib"
  93. declare -x LIBDIR_ppc="lib32"
  94. declare -x LIBDIR_ppc64="lib64"
  95. declare -x LIBDIR_s390="lib32"
  96. declare -x LIBDIR_s390x="lib64"
  97. declare -x LIBDIR_sparc32="lib32"
  98. declare -x LIBDIR_sparc64="lib64"
  99. declare -x LIBDIR_x32="libx32"
  100. declare -x LIBDIR_x86="lib32"
  101. declare -x LIBDIR_x86_fbsd="lib32"
  102. declare -x LIBOPTIONS="-m0644"
  103. declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
  104. declare -x LICENSE="GPL-2"
  105. declare -x LINGUAS="en_GB en_AU"
  106. declare -x MAIL="/var/mail/rap"
  107. declare -x MAKEOPTS="-j9"
  108. declare -x MANPAGER="manpager"
  109. declare -x MULTILIB_ABIS="amd64 x86"
  110. declare -x MULTILIB_STRICT_DENY="64-bit.*shared object"
  111. declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib"
  112. declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec)"
  113. declare -x MULTIOSDIRS="../lib64:../lib32"
  114. declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
  115. declare -x OFFICE_IMPLEMENTATION="libreoffice"
  116. declare -x OPENCL_PROFILE="nvidia"
  117. declare -x OPENGL_PROFILE="xorg-x11"
  118. declare -x PATH="/usr/lib/portage/python3.4/ebuild-helpers/xattr:/usr/lib/portage/python3.4/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.9.3"
  119. declare PDEPEND=""
  120. declare -x PHP_TARGETS="php5-5"
  121. declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig"
  122. declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")'
  123. declare -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
  124. declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/automake-1.11.6-r2/html")'
  125. 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"
  126. declare -x PROPERTIES=""
  127. declare -x PROVIDE=""
  128. declare -x PYTHONDONTWRITEBYTECODE="1"
  129. declare -x PYTHON_SINGLE_TARGET="python2_7"
  130. declare -x PYTHON_TARGETS="python2_7 python3_4"
  131. declare -x QT_GRAPHICSSYSTEM="raster"
  132. declare RDEPEND="dev-lang/perl
  133.     >=sys-devel/automake-wrapper-10
  134.     >=sys-devel/autoconf-2.69
  135.     sys-devel/gnuconfig "
  136. declare REPOSITORY
  137. declare REQUIRED_USE=""
  138. declare -x RESTRICT=""
  139. 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} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
  140. declare -x RUBY_TARGETS="ruby20 ruby21"
  141. declare -x S="/var/tmp/portage/sys-devel/automake-1.11.6-r2/work/automake-1.11.6"
  142. declare -x SANDBOX_DEBUG="0"
  143. declare -x SANDBOX_DENY=""
  144. declare -x SANDBOX_PREDICT="/var/tmp/portage/sys-devel/automake-1.11.6-r2/homedir:/dev/crypto:/var/cache/fontconfig"
  145. declare -x SANDBOX_READ="/:/var/tmp"
  146. declare -x SANDBOX_VERBOSE="1"
  147. declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/ptmx:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/lib/cf:/usr/lib/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/sys-devel/automake-1.11.6-r2/homedir/.bash_history"
  148. declare -x SESSION_MANAGER="local/localhost:@/tmp/.ICE-unix/1449,unix/localhost:/tmp/.ICE-unix/1449"
  149. declare -x SHELL="/bin/bash"
  150. declare -x SLOT="1.11"
  151. declare SRC_URI="mirror://gnu/automake/automake-1.11.6.tar.xz"
  152. declare -x SYMLINK_LIB="yes"
  153. declare -x USE="abi_x86_64 amd64 elibc_glibc kernel_linux userland_GNU"
  154. declare -x USERLAND="GNU"
  155. declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
  156. declare -x USE_EXPAND_UNPREFIXED="ARCH"
  157. declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips nios2 ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd riscv s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-cygwin 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"
  158. declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
  159. declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt"
  160. declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
  161. declare -x VBOX_APP_HOME="/usr/lib64/virtualbox"
  162. declare -x VIDEO_CARDS="nvidia"
  163. declare -x WANT_AUTOCONF="2.5"
  164. declare -x WINDOWID="46137348"
  165. declare -x WINDOWPATH="7"
  166. declare -x XDG_CONFIG_DIRS="/etc/xdg:/etc/xdg"
  167. declare -x XDG_CURRENT_DESKTOP="XFCE"
  168. declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share:/usr/share"
  169. declare -x XDG_MENU_PREFIX="xfce-"
  170. declare -x XDG_RUNTIME_DIR="/var/run/user/1000"
  171. declare -x XDG_SESSION_COOKIE="localhost-1468796463.261691-250378102"
  172. declare -x XSESSION="Xfce4"
  173. 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"
  174. declare -- _EUTILS_ECLASS="1"
  175. declare -- _EUTILS_ECLASSDIR_LOCAL="/usr/portage/eclass"
  176. declare -x _E_DOCDESTTREE_=""
  177. declare -x _E_EXEDESTTREE_=""
  178. declare -- _MULTILIB_ECLASS="1"
  179. declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
  180. declare -- phase_func
  181. __eapi6_src_install ()
  182. {
  183.     if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
  184.         emake DESTDIR="${D}" install;
  185.     fi;
  186.     einstalldocs
  187. }
  188. __eapi6_src_prepare ()
  189. {
  190.     if [[ $(declare -p PATCHES 2>/dev/null) == "declare -a"* ]]; then
  191.         eapply "${PATCHES[@]}";
  192.     else
  193.         if [[ -n ${PATCHES} ]]; then
  194.             eapply ${PATCHES};
  195.         fi;
  196.     fi;
  197.     eapply_user
  198. }
  199. _clang_fullversion ()
  200. {
  201.     local ver="$1";
  202.     shift;
  203.     set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__");
  204.     eval echo "$ver"
  205. }
  206. _epatch_draw_line ()
  207. {
  208.     [[ -z $1 ]] && set "$(printf "%65s" '')";
  209.     echo "${1//?/=}"
  210. }
  211. _eutils_eprefix_init ()
  212. {
  213.     has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}}
  214. }
  215. _gcc-install-dir ()
  216. {
  217.     echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null |      awk '$1=="install:" {print $2}')"
  218. }
  219. _gcc-specs-directive_raw ()
  220. {
  221.     local cc=$(tc-getCC);
  222.     local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
  223.     ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
  224. $1=="*"directive":"  { pspec=spec; spec=""; outside=0; next }
  225.     outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
  226.     spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
  227.     { spec=spec $0 }
  228. END { print spec }';
  229.     return 0
  230. }
  231. _gcc-specs-exists ()
  232. {
  233.     [[ -f $(_gcc-install-dir)/$1 ]]
  234. }
  235. _gcc_fullversion ()
  236. {
  237.     local ver="$1";
  238.     shift;
  239.     set -- $($(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__");
  240.     eval echo "$ver"
  241. }
  242. _iconins ()
  243. {
  244.     ( local funcname=$1;
  245.     shift;
  246.     local size dir;
  247.     local context=apps;
  248.     local theme=hicolor;
  249.     while [[ $# -gt 0 ]]; do
  250.         case $1 in
  251.             -s | --size)
  252.                 if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then
  253.                     size=${2%%x*};
  254.                 else
  255.                     size=${2};
  256.                 fi;
  257.                 case ${size} in
  258.                     16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256 | 512)
  259.                         size=${size}x${size}
  260.                     ;;
  261.                     scalable)
  262.  
  263.                     ;;
  264.                     *)
  265.                         eerror "${size} is an unsupported icon size!";
  266.                         exit 1
  267.                     ;;
  268.                 esac;
  269.                 shift 2
  270.             ;;
  271.             -t | --theme)
  272.                 theme=${2};
  273.                 shift 2
  274.             ;;
  275.             -c | --context)
  276.                 context=${2};
  277.                 shift 2
  278.             ;;
  279.             *)
  280.                 if [[ -z ${size} ]]; then
  281.                     insinto /usr/share/pixmaps;
  282.                 else
  283.                     insinto /usr/share/icons/${theme}/${size}/${context};
  284.                 fi;
  285.                 if [[ ${funcname} == doicon ]]; then
  286.                     if [[ -f $1 ]]; then
  287.                         doins "${1}";
  288.                     else
  289.                         if [[ -d $1 ]]; then
  290.                             shopt -s nullglob;
  291.                             doins "${1}"/*.{png,svg};
  292.                             shopt -u nullglob;
  293.                         else
  294.                             eerror "${1} is not a valid file/directory!";
  295.                             exit 1;
  296.                         fi;
  297.                     fi;
  298.                 else
  299.                     break;
  300.                 fi;
  301.                 shift 1
  302.             ;;
  303.         esac;
  304.     done;
  305.     if [[ ${funcname} == newicon ]]; then
  306.         newins "$@";
  307.     fi ) || die
  308. }
  309. _tc-getPROG ()
  310. {
  311.     local tuple=$1;
  312.     local v var vars=$2;
  313.     local prog=($3);
  314.     var=${vars%% *};
  315.     for v in ${vars};
  316.     do
  317.         if [[ -n ${!v} ]]; then
  318.             export ${var}="${!v}";
  319.             echo "${!v}";
  320.             return 0;
  321.         fi;
  322.     done;
  323.     local search=;
  324.     [[ -n $4 ]] && search=$(type -p $4-${prog[0]});
  325.     [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p ${!tuple}-${prog[0]});
  326.     [[ -n ${search} ]] && prog[0]=${search##*/};
  327.     export ${var}="${prog[*]}";
  328.     echo "${!var}"
  329. }
  330. built_with_use ()
  331. {
  332.     _eutils_eprefix_init;
  333.     local hidden="no";
  334.     if [[ $1 == "--hidden" ]]; then
  335.         hidden="yes";
  336.         shift;
  337.     fi;
  338.     local missing_action="die";
  339.     if [[ $1 == "--missing" ]]; then
  340.         missing_action=$2;
  341.         shift;
  342.         shift;
  343.         case ${missing_action} in
  344.             true | false | die)
  345.  
  346.             ;;
  347.             *)
  348.                 die "unknown action '${missing_action}'"
  349.             ;;
  350.         esac;
  351.     fi;
  352.     local opt=$1;
  353.     [[ ${opt:0:1} = "-" ]] && shift || opt="-a";
  354.     local PKG=$(best_version $1);
  355.     [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
  356.     shift;
  357.     local USEFILE=${EROOT}/var/db/pkg/${PKG}/USE;
  358.     local IUSEFILE=${EROOT}/var/db/pkg/${PKG}/IUSE;
  359.     if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
  360.         case ${missing_action} in
  361.             true)
  362.                 return 0
  363.             ;;
  364.             false)
  365.                 return 1
  366.             ;;
  367.             die)
  368.                 die "Unable to determine what USE flags $PKG was built with"
  369.             ;;
  370.         esac;
  371.     fi;
  372.     if [[ ${hidden} == "no" ]]; then
  373.         local IUSE_BUILT=($(<"${IUSEFILE}"));
  374.         local expand;
  375.         for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
  376.         do
  377.             if [[ $1 == ${expand}_* ]]; then
  378.                 expand="";
  379.                 break;
  380.             fi;
  381.         done;
  382.         if [[ -n ${expand} ]]; then
  383.             if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
  384.                 case ${missing_action} in
  385.                     true)
  386.                         return 0
  387.                     ;;
  388.                     false)
  389.                         return 1
  390.                     ;;
  391.                     die)
  392.                         die "$PKG does not actually support the $1 USE flag!"
  393.                     ;;
  394.                 esac;
  395.             fi;
  396.         fi;
  397.     fi;
  398.     local USE_BUILT=$(<${USEFILE});
  399.     while [[ $# -gt 0 ]]; do
  400.         if [[ ${opt} = "-o" ]]; then
  401.             has $1 ${USE_BUILT} && return 0;
  402.         else
  403.             has $1 ${USE_BUILT} || return 1;
  404.         fi;
  405.         shift;
  406.     done;
  407.     [[ ${opt} = "-a" ]]
  408. }
  409. check_license ()
  410. {
  411.     die "you no longer need this as portage supports ACCEPT_LICENSE itself"
  412. }
  413. clang-fullversion ()
  414. {
  415.     _clang_fullversion '$1.$2.$3' "$@"
  416. }
  417. clang-major-version ()
  418. {
  419.     _clang_fullversion '$1' "$@"
  420. }
  421. clang-micro-version ()
  422. {
  423.     _clang_fullversion '$3' "$@"
  424. }
  425. clang-minor-version ()
  426. {
  427.     _clang_fullversion '$2' "$@"
  428. }
  429. clang-version ()
  430. {
  431.     _clang_fullversion '$1.$2' "$@"
  432. }
  433. doicon ()
  434. {
  435.     _iconins ${FUNCNAME} "$@"
  436. }
  437. domenu ()
  438. {
  439.     ( local i j ret=0;
  440.     insinto /usr/share/applications;
  441.     for i in "$@";
  442.     do
  443.         if [[ -f ${i} ]]; then
  444.             doins "${i}";
  445.             ((ret+=$?));
  446.         else
  447.             if [[ -d ${i} ]]; then
  448.                 for j in "${i}"/*.desktop;
  449.                 do
  450.                     doins "${j}";
  451.                     ((ret+=$?));
  452.                 done;
  453.             else
  454.                 ((++ret));
  455.             fi;
  456.         fi;
  457.     done;
  458.     exit ${ret} )
  459. }
  460. ebeep ()
  461. {
  462.     ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
  463. }
  464. econf_build ()
  465. {
  466.     local CBUILD=${CBUILD:-${CHOST}};
  467.     tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
  468. }
  469. ecvs_clean ()
  470. {
  471.     [[ $# -eq 0 ]] && set -- .;
  472.     find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
  473.     find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
  474. }
  475. edos2unix ()
  476. {
  477.     [[ $# -eq 0 ]] && return 0;
  478.     sed -i 's/\r$//' -- "$@" || die
  479. }
  480. egit_clean ()
  481. {
  482.     [[ $# -eq 0 ]] && set -- .;
  483.     find "$@" -type d -name '.git*' -prune -print0 | xargs -0 rm -rf
  484. }
  485. einstalldocs ()
  486. {
  487.     debug-print-function ${FUNCNAME} "${@}";
  488.     local dodoc_opts=-r;
  489.     has ${EAPI} 0 1 2 3 && dodoc_opts=;
  490.     if ! declare -p DOCS &> /dev/null; then
  491.         local d;
  492.         for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
  493.         do
  494.             if [[ -s ${d} ]]; then
  495.                 dodoc "${d}" || die;
  496.             fi;
  497.         done;
  498.     else
  499.         if [[ $(declare -p DOCS) == "declare -a"* ]]; then
  500.             if [[ -n ${DOCS[@]} ]]; then
  501.                 dodoc ${dodoc_opts} "${DOCS[@]}" || die;
  502.             fi;
  503.         else
  504.             if [[ -n ${DOCS} ]]; then
  505.                 dodoc ${dodoc_opts} ${DOCS} || die;
  506.             fi;
  507.         fi;
  508.     fi;
  509.     if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
  510.         if [[ -n ${HTML_DOCS[@]} ]]; then
  511.             dohtml -r "${HTML_DOCS[@]}" || die;
  512.         fi;
  513.     else
  514.         if [[ -n ${HTML_DOCS} ]]; then
  515.             dohtml -r ${HTML_DOCS} || die;
  516.         fi;
  517.     fi;
  518.     return 0
  519. }
  520. emktemp ()
  521. {
  522.     local exe="touch";
  523.     [[ $1 == -d ]] && exe="mkdir" && shift;
  524.     local topdir=$1;
  525.     if [[ -z ${topdir} ]]; then
  526.         [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
  527.     fi;
  528.     if ! type -P mktemp > /dev/null; then
  529.         local tmp=/;
  530.         while [[ -e ${tmp} ]]; do
  531.             tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
  532.         done;
  533.         ${exe} "${tmp}" || ${exe} -p "${tmp}";
  534.         echo "${tmp}";
  535.     else
  536.         if [[ ${exe} == "touch" ]]; then
  537.             TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
  538.         else
  539.             TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
  540.         fi;
  541.     fi
  542. }
  543. epatch ()
  544. {
  545.     function _epatch_draw_line ()
  546.     {
  547.         [[ -z $1 ]] && set "$(printf "%65s" '')";
  548.         echo "${1//?/=}"
  549.     };
  550.     unset P4CONFIG P4PORT P4USER;
  551.     local EPATCH_OPTS=(${EPATCH_OPTS[*]});
  552.     while [[ $# -gt 0 ]]; do
  553.         case $1 in
  554.             -*)
  555.                 EPATCH_OPTS+=("$1")
  556.             ;;
  557.             *)
  558.                 break
  559.             ;;
  560.         esac;
  561.         shift;
  562.     done;
  563.     if [[ $# -gt 1 ]]; then
  564.         local m;
  565.         for m in "$@";
  566.         do
  567.             epatch "${m}";
  568.         done;
  569.         return 0;
  570.     fi;
  571.     local SINGLE_PATCH="no";
  572.     [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}";
  573.     if [[ -f $1 ]]; then
  574.         SINGLE_PATCH="yes";
  575.         set -- "$1";
  576.         local EPATCH_SUFFIX=$1;
  577.     else
  578.         if [[ -d $1 ]]; then
  579.             evar_push_set LC_COLLATE C;
  580.             set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
  581.             evar_pop;
  582.         else
  583.             if [[ -f ${EPATCH_SOURCE}/$1 ]]; then
  584.                 epatch "${EPATCH_SOURCE}/$1";
  585.                 return $?;
  586.             else
  587.                 [[ $# -ne 0 ]] && EPATCH_SOURCE=$1;
  588.                 echo;
  589.                 eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:";
  590.                 eerror;
  591.                 eerror "  ${EPATCH_SOURCE}";
  592.                 eerror "  ( ${EPATCH_SOURCE##*/} )";
  593.                 echo;
  594.                 die "Cannot find \$EPATCH_SOURCE!";
  595.             fi;
  596.         fi;
  597.     fi;
  598.     EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
  599.     local PIPE_CMD;
  600.     case ${EPATCH_SUFFIX##*\.} in
  601.         xz)
  602.             PIPE_CMD="xz -dc"
  603.         ;;
  604.         lzma)
  605.             PIPE_CMD="lzma -dc"
  606.         ;;
  607.         bz2)
  608.             PIPE_CMD="bzip2 -dc"
  609.         ;;
  610.         gz | Z | z)
  611.             PIPE_CMD="gzip -dc"
  612.         ;;
  613.         ZIP | zip)
  614.             PIPE_CMD="unzip -p"
  615.         ;;
  616.         *)
  617.  
  618.         ;;
  619.     esac;
  620.     [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}";
  621.     local x;
  622.     for x in "$@";
  623.     do
  624.         [[ ! -f ${x} ]] && continue;
  625.         local patchname=${x##*/};
  626.         local a=${patchname#*_};
  627.         a=${a%%_*};
  628.         if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then
  629.             continue;
  630.         fi;
  631.         if [[ -n ${EPATCH_EXCLUDE}${EPATCH_USER_EXCLUDE} ]]; then
  632.             eshopts_push -o noglob;
  633.             local ex;
  634.             for ex in ${EPATCH_EXCLUDE};
  635.             do
  636.                 if [[ ${patchname} == ${ex} ]]; then
  637.                     einfo "  Skipping ${patchname} due to EPATCH_EXCLUDE ...";
  638.                     eshopts_pop;
  639.                     continue 2;
  640.                 fi;
  641.             done;
  642.             for ex in ${EPATCH_USER_EXCLUDE};
  643.             do
  644.                 if [[ ${patchname} == ${ex} ]]; then
  645.                     einfo "  Skipping ${patchname} due to EPATCH_USER_EXCLUDE ...";
  646.                     eshopts_pop;
  647.                     continue 2;
  648.                 fi;
  649.             done;
  650.             eshopts_pop;
  651.         fi;
  652.         if [[ ${SINGLE_PATCH} == "yes" ]]; then
  653.             if [[ -n ${EPATCH_SINGLE_MSG} ]]; then
  654.                 einfo "${EPATCH_SINGLE_MSG}";
  655.             else
  656.                 einfo "Applying ${patchname} ...";
  657.             fi;
  658.         else
  659.             einfo "  ${patchname} ...";
  660.         fi;
  661.         local patch="patch";
  662.         eval $(alias patch 2>/dev/null | sed 's:^alias ::');
  663.         local STDERR_TARGET="${T}/${patchname}.out";
  664.         if [[ -e ${STDERR_TARGET} ]]; then
  665.             STDERR_TARGET="${T}/${patchname}-$$.out";
  666.         fi;
  667.         printf "***** %s *****\nPWD: %s\nPATCH TOOL: %s -> %s\nVERSION INFO:\n%s\n\n" "${patchname}" "${PWD}" "${patch}" "$(type -P "${patch}")" "$(${patch} --version)" > "${STDERR_TARGET}";
  668.         local count=0;
  669.         local PATCH_TARGET;
  670.         if [[ -n ${PIPE_CMD} ]]; then
  671.             PATCH_TARGET="${T}/$$.patch";
  672.             echo "PIPE_COMMAND:  ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}";
  673.             if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then
  674.                 echo;
  675.                 eerror "Could not extract patch!";
  676.                 count=5;
  677.                 break;
  678.             fi;
  679.         else
  680.             PATCH_TARGET=${x};
  681.         fi;
  682.         local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
  683.         if [[ -n ${abs_paths} ]]; then
  684.             count=1;
  685.             printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}";
  686.         fi;
  687.         local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}");
  688.         if [[ -n ${rel_paths} ]]; then
  689.             echo;
  690.             eerror "Rejected Patch: ${patchname} !";
  691.             eerror " ( ${PATCH_TARGET} )";
  692.             eerror;
  693.             eerror "Your patch uses relative paths '../':";
  694.             eerror "${rel_paths}";
  695.             echo;
  696.             die "you need to fix the relative paths in patch";
  697.         fi;
  698.         local patch_cmd;
  699.         while [[ ${count} -lt 5 ]]; do
  700.             patch_cmd="${patch} -p${count} ${EPATCH_OPTS}";
  701.             ( _epatch_draw_line "***** ${patchname} *****";
  702.             echo;
  703.             echo "PATCH COMMAND:  ${patch_cmd} --dry-run -f < '${PATCH_TARGET}'";
  704.             echo;
  705.             _epatch_draw_line "***** ${patchname} *****";
  706.             ${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1;
  707.             ret=$?;
  708.             echo;
  709.             echo "patch program exited with status ${ret}";
  710.             exit ${ret} ) >> "${STDERR_TARGET}";
  711.             if [ $? -eq 0 ]; then
  712.                 ( _epatch_draw_line "***** ${patchname} *****";
  713.                 echo;
  714.                 echo "ACTUALLY APPLYING ${patchname} ...";
  715.                 echo "PATCH COMMAND:  ${patch_cmd} < '${PATCH_TARGET}'";
  716.                 echo;
  717.                 _epatch_draw_line "***** ${patchname} *****";
  718.                 ${patch_cmd} < "${PATCH_TARGET}" 2>&1;
  719.                 ret=$?;
  720.                 echo;
  721.                 echo "patch program exited with status ${ret}";
  722.                 exit ${ret} ) >> "${STDERR_TARGET}";
  723.                 if [ $? -ne 0 ]; then
  724.                     echo;
  725.                     eerror "A dry-run of patch command succeeded, but actually";
  726.                     eerror "applying the patch failed!";
  727.                     count=5;
  728.                 fi;
  729.                 break;
  730.             fi;
  731.             : $(( count++ ));
  732.         done;
  733.         if [[ -n ${PIPE_CMD} ]]; then
  734.             rm -f "${PATCH_TARGET}";
  735.         fi;
  736.         if [[ ${count} -ge 5 ]]; then
  737.             echo;
  738.             eerror "Failed Patch: ${patchname} !";
  739.             eerror " ( ${PATCH_TARGET} )";
  740.             eerror;
  741.             eerror "Include in your bugreport the contents of:";
  742.             eerror;
  743.             eerror "  ${STDERR_TARGET}";
  744.             echo;
  745.             die "Failed Patch: ${patchname}!";
  746.         fi;
  747.         rm -f "${STDERR_TARGET}";
  748.         cat >> "${T}/epatch.log"  <<-EOF
  749. PATCH: ${x}
  750. CMD: ${patch_cmd}
  751. PWD: ${PWD}
  752.  
  753. EOF
  754.  
  755.         eend 0;
  756.     done;
  757.     [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
  758.     :
  759. }
  760. epatch_user ()
  761. {
  762.     [[ $# -ne 0 ]] && die "epatch_user takes no options";
  763.     local applied="${T}/epatch_user.log";
  764.     [[ -e ${applied} ]] && return 2;
  765.     local EPATCH_SOURCE check;
  766.     for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT%/*}};
  767.     do
  768.         EPATCH_SOURCE=${EPATCH_USER_SOURCE}/${CTARGET}/${check};
  769.         [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${EPATCH_USER_SOURCE}/${CHOST}/${check};
  770.         [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${EPATCH_USER_SOURCE}/${check};
  771.         if [[ -d ${EPATCH_SOURCE} ]]; then
  772.             EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch;
  773.             echo "${EPATCH_SOURCE}" > "${applied}";
  774.             has epatch_user_death_notice ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" epatch_user_death_notice";
  775.             return 0;
  776.         fi;
  777.     done;
  778.     echo "none" > "${applied}";
  779.     return 1
  780. }
  781. epatch_user_death_notice ()
  782. {
  783.     ewarn "!!! User patches were applied to this build!"
  784. }
  785. epause ()
  786. {
  787.     ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
  788. }
  789. epunt_cxx ()
  790. {
  791.     local dir=$1;
  792.     [[ -z ${dir} ]] && dir=${S};
  793.     ebegin "Removing useless C++ checks";
  794.     local f p any_found;
  795.     while IFS= read -r -d '' f; do
  796.         for p in "$(eutils_elt_patch_dir)"/nocxx/*.patch;
  797.         do
  798.             if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
  799.                 any_found=1;
  800.                 break;
  801.             fi;
  802.         done;
  803.     done < <(find "${dir}" -name configure -print0);
  804.     if [[ -z ${any_found} ]]; then
  805.         eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
  806.     fi;
  807.     eend 0
  808. }
  809. eshopts_pop ()
  810. {
  811.     local s;
  812.     estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
  813.     if [[ ${s} == "shopt -"* ]]; then
  814.         eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
  815.     else
  816.         set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
  817.         set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
  818.     fi
  819. }
  820. eshopts_push ()
  821. {
  822.     if [[ $1 == -[su] ]]; then
  823.         estack_push eshopts "$(shopt -p)";
  824.         [[ $# -eq 0 ]] && return 0;
  825.         shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
  826.     else
  827.         estack_push eshopts $-;
  828.         [[ $# -eq 0 ]] && return 0;
  829.         set "$@" || die "${FUNCNAME}: bad options to set: $*";
  830.     fi
  831. }
  832. estack_pop ()
  833. {
  834.     [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
  835.     local _estack_name="_ESTACK_$1_";
  836.     shift;
  837.     local _estack_retvar=$1;
  838.     shift;
  839.     eval local _estack_i=\${#${_estack_name}\[@\]};
  840.     [[ $(( --_estack_i )) -eq -1 ]] && return 1;
  841.     if [[ -n ${_estack_retvar} ]]; then
  842.         eval ${_estack_retvar}=\"\${${_estack_name}\[${_estack_i}\]}\";
  843.     fi;
  844.     eval unset \"${_estack_name}\[${_estack_i}\]\"
  845. }
  846. estack_push ()
  847. {
  848.     [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments";
  849.     local stack_name="_ESTACK_$1_";
  850.     shift;
  851.     eval ${stack_name}+=\( \"\$@\" \)
  852. }
  853. esvn_clean ()
  854. {
  855.     [[ $# -eq 0 ]] && set -- .;
  856.     find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
  857. }
  858. eumask_pop ()
  859. {
  860.     [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options";
  861.     local s;
  862.     estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
  863.     umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
  864. }
  865. eumask_push ()
  866. {
  867.     estack_push eumask "$(umask)";
  868.     umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
  869. }
  870. eutils_elt_patch_dir ()
  871. {
  872.     local d="${ECLASSDIR}/ELT-patches";
  873.     if [[ ! -d ${d} ]]; then
  874.         d="${_EUTILS_ECLASSDIR_LOCAL}/ELT-patches";
  875.     fi;
  876.     echo "${d}"
  877. }
  878. evar_pop ()
  879. {
  880.     local cnt=${1:-bad};
  881.     case $# in
  882.         0)
  883.             cnt=1
  884.         ;;
  885.         1)
  886.             isdigit "${cnt}" || die "${FUNCNAME}: first arg must be a number: $*"
  887.         ;;
  888.         *)
  889.             die "${FUNCNAME}: only accepts one arg: $*"
  890.         ;;
  891.     esac;
  892.     local var val;
  893.     while (( cnt-- )); do
  894.         estack_pop evar val || die "${FUNCNAME}: unbalanced push";
  895.         estack_pop evar var || die "${FUNCNAME}: unbalanced push";
  896.         [[ ${val} == "unset_76fc3c462065bb4ca959f939e6793f94" ]] && unset ${var} || printf -v "${var}" '%s' "${val}";
  897.     done
  898. }
  899. evar_push ()
  900. {
  901.     local var val;
  902.     for var in "$@";
  903.     do
  904.         [[ ${!var+set} == "set" ]] && val=${!var} || val="unset_76fc3c462065bb4ca959f939e6793f94";
  905.         estack_push evar "${var}" "${val}";
  906.     done
  907. }
  908. evar_push_set ()
  909. {
  910.     local var=$1;
  911.     evar_push ${var};
  912.     case $# in
  913.         1)
  914.             unset ${var}
  915.         ;;
  916.         2)
  917.             printf -v "${var}" '%s' "$2"
  918.         ;;
  919.         *)
  920.             die "${FUNCNAME}: incorrect # of args: $*"
  921.         ;;
  922.     esac
  923. }
  924. gcc-fullversion ()
  925. {
  926.     _gcc_fullversion '$1.$2.$3' "$@"
  927. }
  928. gcc-major-version ()
  929. {
  930.     _gcc_fullversion '$1' "$@"
  931. }
  932. gcc-micro-version ()
  933. {
  934.     _gcc_fullversion '$3' "$@"
  935. }
  936. gcc-minor-version ()
  937. {
  938.     _gcc_fullversion '$2' "$@"
  939. }
  940. gcc-specs-directive ()
  941. {
  942.     local directive subdname subdirective;
  943.     directive="$(_gcc-specs-directive_raw $1)";
  944.     while [[ ${directive} == *%\(*\)* ]]; do
  945.         subdname=${directive/*%\(};
  946.         subdname=${subdname/\)*};
  947.         subdirective="$(_gcc-specs-directive_raw ${subdname})";
  948.         directive="${directive//\%(${subdname})/${subdirective}}";
  949.     done;
  950.     echo "${directive}";
  951.     return 0
  952. }
  953. gcc-specs-nostrict ()
  954. {
  955.     local directive;
  956.     directive=$(gcc-specs-directive cc1);
  957.     [[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]
  958. }
  959. gcc-specs-now ()
  960. {
  961.     local directive;
  962.     directive=$(gcc-specs-directive link_command);
  963.     [[ "${directive/\{!nonow:}" != "${directive}" ]]
  964. }
  965. gcc-specs-pie ()
  966. {
  967.     local directive;
  968.     directive=$(gcc-specs-directive cc1);
  969.     [[ "${directive/\{!nopie:}" != "${directive}" ]]
  970. }
  971. gcc-specs-relro ()
  972. {
  973.     local directive;
  974.     directive=$(gcc-specs-directive link_command);
  975.     [[ "${directive/\{!norelro:}" != "${directive}" ]]
  976. }
  977. gcc-specs-ssp ()
  978. {
  979.     local directive;
  980.     directive=$(gcc-specs-directive cc1);
  981.     [[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]
  982. }
  983. gcc-specs-ssp-to-all ()
  984. {
  985.     local directive;
  986.     directive=$(gcc-specs-directive cc1);
  987.     [[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]
  988. }
  989. gcc-specs-stack-check ()
  990. {
  991.     local directive;
  992.     directive=$(gcc-specs-directive cc1);
  993.     [[ "${directive/\{!fno-stack-check:}" != "${directive}" ]]
  994. }
  995. gcc-version ()
  996. {
  997.     _gcc_fullversion '$1.$2' "$@"
  998. }
  999. gen_usr_ldscript ()
  1000. {
  1001.     local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
  1002.     [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
  1003.     tc-is-static-only && return;
  1004.     if [[ $(type -t multilib_is_native_abi) == "function" ]]; then
  1005.         multilib_is_native_abi || return 0;
  1006.     fi;
  1007.     case ${CTARGET:-${CHOST}} in
  1008.         *-darwin*)
  1009.  
  1010.         ;;
  1011.         *-android*)
  1012.             return 0
  1013.         ;;
  1014.         *linux* | *-freebsd* | *-openbsd* | *-netbsd*)
  1015.             use prefix && return 0
  1016.         ;;
  1017.         *)
  1018.             return 0
  1019.         ;;
  1020.     esac;
  1021.     dodir /usr/${libdir};
  1022.     if [[ $1 == "-a" ]]; then
  1023.         auto=true;
  1024.         shift;
  1025.         dodir /${libdir};
  1026.     fi;
  1027.     local flags=(${CFLAGS} ${LDFLAGS} -Wl,--verbose);
  1028.     if $(tc-getLD) --version | grep -q 'GNU gold'; then
  1029.         local d="${T}/bfd-linker";
  1030.         mkdir -p "${d}";
  1031.         ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld;
  1032.         flags+=(-B"${d}");
  1033.     fi;
  1034.     output_format=$($(tc-getCC) "${flags[@]}" 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
  1035.     [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
  1036.     for lib in "$@";
  1037.     do
  1038.         local tlib;
  1039.         if ${auto}; then
  1040.             lib="lib${lib}${suffix}";
  1041.         else
  1042.             [[ -r ${ED}/${libdir}/${lib} ]] || continue;
  1043.         fi;
  1044.         case ${CTARGET:-${CHOST}} in
  1045.             *-darwin*)
  1046.                 if ${auto}; then
  1047.                     tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1048.                 else
  1049.                     tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
  1050.                 fi;
  1051.                 [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
  1052.                 tlib=${tlib##*/};
  1053.                 if ${auto}; then
  1054.                     mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1055.                     if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
  1056.                         mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1057.                     fi;
  1058.                     rm -f "${ED}"/${libdir}/${lib};
  1059.                 fi;
  1060.                 if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
  1061.                     chmod u+w "${ED}${libdir}/${tlib}";
  1062.                     local nowrite=yes;
  1063.                 fi;
  1064.                 install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
  1065.                 [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
  1066.                 pushd "${ED}/usr/${libdir}" > /dev/null;
  1067.                 ln -snf "../../${libdir}/${tlib}" "${lib}";
  1068.                 popd > /dev/null
  1069.             ;;
  1070.             *)
  1071.                 if ${auto}; then
  1072.                     tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1073.                     [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
  1074.                     mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
  1075.                     if [[ ${tlib} != ${lib}* ]]; then
  1076.                         mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
  1077.                     fi;
  1078.                     rm -f "${ED}"/${libdir}/${lib};
  1079.                 else
  1080.                     tlib=${lib};
  1081.                 fi;
  1082.                 cat > "${ED}/usr/${libdir}/${lib}"  <<-END_LDSCRIPT
  1083. /* GNU ld script
  1084.    Since Gentoo has critical dynamic libraries in /lib, and the static versions
  1085.    in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
  1086.    run into linking problems.  This "fake" dynamic lib is a linker script that
  1087.    redirects the linker to the real lib.  And yes, this works in the cross-
  1088.    compiling scenario as the sysroot-ed linker will prepend the real path.
  1089.  
  1090.    See bug https://bugs.gentoo.org/4411 for more info.
  1091.  */
  1092. ${output_format}
  1093. GROUP ( ${EPREFIX}/${libdir}/${tlib} )
  1094. END_LDSCRIPT
  1095.  
  1096.             ;;
  1097.         esac
  1098.         fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
  1099.     done
  1100. }
  1101. get_abi_CFLAGS ()
  1102. {
  1103.     get_abi_var CFLAGS "$@"
  1104. }
  1105. get_abi_CHOST ()
  1106. {
  1107.     get_abi_var CHOST "$@"
  1108. }
  1109. get_abi_CTARGET ()
  1110. {
  1111.     get_abi_var CTARGET "$@"
  1112. }
  1113. get_abi_FAKE_TARGETS ()
  1114. {
  1115.     get_abi_var FAKE_TARGETS "$@"
  1116. }
  1117. get_abi_LDFLAGS ()
  1118. {
  1119.     get_abi_var LDFLAGS "$@"
  1120. }
  1121. get_abi_LIBDIR ()
  1122. {
  1123.     get_abi_var LIBDIR "$@"
  1124. }
  1125. get_abi_var ()
  1126. {
  1127.     local flag=$1;
  1128.     local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
  1129.     local var="${flag}_${abi}";
  1130.     echo ${!var}
  1131. }
  1132. get_all_abis ()
  1133. {
  1134.     local x order="" mvar dvar;
  1135.     mvar="MULTILIB_ABIS";
  1136.     dvar="DEFAULT_ABI";
  1137.     if [[ -n $1 ]]; then
  1138.         mvar="$1_${mvar}";
  1139.         dvar="$1_${dvar}";
  1140.     fi;
  1141.     if [[ -z ${!mvar} ]]; then
  1142.         echo "default";
  1143.         return 0;
  1144.     fi;
  1145.     for x in ${!mvar};
  1146.     do
  1147.         if [[ ${x} != ${!dvar} ]]; then
  1148.             order="${order:+${order} }${x}";
  1149.         fi;
  1150.     done;
  1151.     order="${order:+${order} }${!dvar}";
  1152.     echo ${order};
  1153.     return 0
  1154. }
  1155. get_all_libdirs ()
  1156. {
  1157.     local libdirs abi;
  1158.     for abi in ${MULTILIB_ABIS};
  1159.     do
  1160.         libdirs+=" $(get_abi_LIBDIR ${abi})";
  1161.     done;
  1162.     [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
  1163.     echo "${libdirs}"
  1164. }
  1165. get_install_abis ()
  1166. {
  1167.     local x order="";
  1168.     if [[ -z ${MULTILIB_ABIS} ]]; then
  1169.         echo "default";
  1170.         return 0;
  1171.     fi;
  1172.     if [[ ${EMULTILIB_PKG} == "true" ]]; then
  1173.         for x in ${MULTILIB_ABIS};
  1174.         do
  1175.             if [[ ${x} != "${DEFAULT_ABI}" ]]; then
  1176.                 has ${x} ${ABI_DENY} || order="${order} ${x}";
  1177.             fi;
  1178.         done;
  1179.         has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
  1180.         if [[ -n ${ABI_ALLOW} ]]; then
  1181.             local ordera="";
  1182.             for x in ${order};
  1183.             do
  1184.                 if has ${x} ${ABI_ALLOW}; then
  1185.                     ordera="${ordera} ${x}";
  1186.                 fi;
  1187.             done;
  1188.             order=${ordera};
  1189.         fi;
  1190.     else
  1191.         order=${DEFAULT_ABI};
  1192.     fi;
  1193.     if [[ -z ${order} ]]; then
  1194.         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.";
  1195.     fi;
  1196.     echo ${order};
  1197.     return 0
  1198. }
  1199. get_libdir ()
  1200. {
  1201.     local CONF_LIBDIR;
  1202.     if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
  1203.         echo ${CONF_LIBDIR_OVERRIDE};
  1204.     else
  1205.         get_abi_LIBDIR;
  1206.     fi
  1207. }
  1208. get_libname ()
  1209. {
  1210.     local libname;
  1211.     local ver=$1;
  1212.     case ${CHOST} in
  1213.         *-cygwin*)
  1214.             libname="dll.a"
  1215.         ;;
  1216.         mingw* | *-mingw*)
  1217.             libname="dll"
  1218.         ;;
  1219.         *-darwin*)
  1220.             libname="dylib"
  1221.         ;;
  1222.         *-mint*)
  1223.             libname="irrelevant"
  1224.         ;;
  1225.         hppa*-hpux*)
  1226.             libname="sl"
  1227.         ;;
  1228.         *)
  1229.             libname="so"
  1230.         ;;
  1231.     esac;
  1232.     if [[ -z $* ]]; then
  1233.         echo ".${libname}";
  1234.     else
  1235.         for ver in "$@";
  1236.         do
  1237.             case ${CHOST} in
  1238.                 *-cygwin*)
  1239.                     echo ".${ver}.${libname}"
  1240.                 ;;
  1241.                 *-darwin*)
  1242.                     echo ".${ver}.${libname}"
  1243.                 ;;
  1244.                 *-mint*)
  1245.                     echo ".${libname}"
  1246.                 ;;
  1247.                 *)
  1248.                     echo ".${libname}.${ver}"
  1249.                 ;;
  1250.             esac;
  1251.         done;
  1252.     fi
  1253. }
  1254. get_modname ()
  1255. {
  1256.     local modname;
  1257.     local ver=$1;
  1258.     case ${CHOST} in
  1259.         *-darwin*)
  1260.             modname="bundle"
  1261.         ;;
  1262.         *)
  1263.             modname="so"
  1264.         ;;
  1265.     esac;
  1266.     echo ".${modname}"
  1267. }
  1268. has_multilib_profile ()
  1269. {
  1270.     [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
  1271. }
  1272. in_iuse ()
  1273. {
  1274.     debug-print-function ${FUNCNAME} "${@}";
  1275.     [[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()";
  1276.     local flag=${1};
  1277.     local liuse=(${IUSE});
  1278.     has "${flag}" "${liuse[@]#[+-]}"
  1279. }
  1280. is_final_abi ()
  1281. {
  1282.     has_multilib_profile || return 0;
  1283.     set -- $(get_install_abis);
  1284.     local LAST_ABI=$#;
  1285.     [[ ${!LAST_ABI} == ${ABI} ]]
  1286. }
  1287. isdigit ()
  1288. {
  1289.     local d;
  1290.     for d in "$@";
  1291.     do
  1292.         [[ ${d:-bad} == *[!0-9]* ]] && return 1;
  1293.     done;
  1294.     return 0
  1295. }
  1296. make_desktop_entry ()
  1297. {
  1298.     [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable";
  1299.     local exec=${1};
  1300.     local name=${2:-${PN}};
  1301.     local icon=${3:-${PN}};
  1302.     local type=${4};
  1303.     local fields=${5};
  1304.     if [[ -z ${type} ]]; then
  1305.         local catmaj=${CATEGORY%%-*};
  1306.         local catmin=${CATEGORY##*-};
  1307.         case ${catmaj} in
  1308.             app)
  1309.                 case ${catmin} in
  1310.                     accessibility)
  1311.                         type="Utility;Accessibility"
  1312.                     ;;
  1313.                     admin)
  1314.                         type=System
  1315.                     ;;
  1316.                     antivirus)
  1317.                         type=System
  1318.                     ;;
  1319.                     arch)
  1320.                         type="Utility;Archiving"
  1321.                     ;;
  1322.                     backup)
  1323.                         type="Utility;Archiving"
  1324.                     ;;
  1325.                     cdr)
  1326.                         type="AudioVideo;DiscBurning"
  1327.                     ;;
  1328.                     dicts)
  1329.                         type="Office;Dictionary"
  1330.                     ;;
  1331.                     doc)
  1332.                         type=Documentation
  1333.                     ;;
  1334.                     editors)
  1335.                         type="Utility;TextEditor"
  1336.                     ;;
  1337.                     emacs)
  1338.                         type="Development;TextEditor"
  1339.                     ;;
  1340.                     emulation)
  1341.                         type="System;Emulator"
  1342.                     ;;
  1343.                     laptop)
  1344.                         type="Settings;HardwareSettings"
  1345.                     ;;
  1346.                     office)
  1347.                         type=Office
  1348.                     ;;
  1349.                     pda)
  1350.                         type="Office;PDA"
  1351.                     ;;
  1352.                     vim)
  1353.                         type="Development;TextEditor"
  1354.                     ;;
  1355.                     xemacs)
  1356.                         type="Development;TextEditor"
  1357.                     ;;
  1358.                 esac
  1359.             ;;
  1360.             dev)
  1361.                 type="Development"
  1362.             ;;
  1363.             games)
  1364.                 case ${catmin} in
  1365.                     action | fps)
  1366.                         type=ActionGame
  1367.                     ;;
  1368.                     arcade)
  1369.                         type=ArcadeGame
  1370.                     ;;
  1371.                     board)
  1372.                         type=BoardGame
  1373.                     ;;
  1374.                     emulation)
  1375.                         type=Emulator
  1376.                     ;;
  1377.                     kids)
  1378.                         type=KidsGame
  1379.                     ;;
  1380.                     puzzle)
  1381.                         type=LogicGame
  1382.                     ;;
  1383.                     roguelike)
  1384.                         type=RolePlaying
  1385.                     ;;
  1386.                     rpg)
  1387.                         type=RolePlaying
  1388.                     ;;
  1389.                     simulation)
  1390.                         type=Simulation
  1391.                     ;;
  1392.                     sports)
  1393.                         type=SportsGame
  1394.                     ;;
  1395.                     strategy)
  1396.                         type=StrategyGame
  1397.                     ;;
  1398.                 esac;
  1399.                 type="Game;${type}"
  1400.             ;;
  1401.             gnome)
  1402.                 type="Gnome;GTK"
  1403.             ;;
  1404.             kde)
  1405.                 type="KDE;Qt"
  1406.             ;;
  1407.             mail)
  1408.                 type="Network;Email"
  1409.             ;;
  1410.             media)
  1411.                 case ${catmin} in
  1412.                     gfx)
  1413.                         type=Graphics
  1414.                     ;;
  1415.                     *)
  1416.                         case ${catmin} in
  1417.                             radio)
  1418.                                 type=Tuner
  1419.                             ;;
  1420.                             sound)
  1421.                                 type=Audio
  1422.                             ;;
  1423.                             tv)
  1424.                                 type=TV
  1425.                             ;;
  1426.                             video)
  1427.                                 type=Video
  1428.                             ;;
  1429.                         esac;
  1430.                         type="AudioVideo;${type}"
  1431.                     ;;
  1432.                 esac
  1433.             ;;
  1434.             net)
  1435.                 case ${catmin} in
  1436.                     dialup)
  1437.                         type=Dialup
  1438.                     ;;
  1439.                     ftp)
  1440.                         type=FileTransfer
  1441.                     ;;
  1442.                     im)
  1443.                         type=InstantMessaging
  1444.                     ;;
  1445.                     irc)
  1446.                         type=IRCClient
  1447.                     ;;
  1448.                     mail)
  1449.                         type=Email
  1450.                     ;;
  1451.                     news)
  1452.                         type=News
  1453.                     ;;
  1454.                     nntp)
  1455.                         type=News
  1456.                     ;;
  1457.                     p2p)
  1458.                         type=FileTransfer
  1459.                     ;;
  1460.                     voip)
  1461.                         type=Telephony
  1462.                     ;;
  1463.                 esac;
  1464.                 type="Network;${type}"
  1465.             ;;
  1466.             sci)
  1467.                 case ${catmin} in
  1468.                     astro*)
  1469.                         type=Astronomy
  1470.                     ;;
  1471.                     bio*)
  1472.                         type=Biology
  1473.                     ;;
  1474.                     calc*)
  1475.                         type=Calculator
  1476.                     ;;
  1477.                     chem*)
  1478.                         type=Chemistry
  1479.                     ;;
  1480.                     elec*)
  1481.                         type=Electronics
  1482.                     ;;
  1483.                     geo*)
  1484.                         type=Geology
  1485.                     ;;
  1486.                     math*)
  1487.                         type=Math
  1488.                     ;;
  1489.                     physics)
  1490.                         type=Physics
  1491.                     ;;
  1492.                     visual*)
  1493.                         type=DataVisualization
  1494.                     ;;
  1495.                 esac;
  1496.                 type="Education;Science;${type}"
  1497.             ;;
  1498.             sys)
  1499.                 type="System"
  1500.             ;;
  1501.             www)
  1502.                 case ${catmin} in
  1503.                     client)
  1504.                         type=WebBrowser
  1505.                     ;;
  1506.                 esac;
  1507.                 type="Network;${type}"
  1508.             ;;
  1509.             *)
  1510.                 type=
  1511.             ;;
  1512.         esac;
  1513.     fi;
  1514.     local slot=${SLOT%/*};
  1515.     if [[ ${slot} == "0" ]]; then
  1516.         local desktop_name="${PN}";
  1517.     else
  1518.         local desktop_name="${PN}-${slot}";
  1519.     fi;
  1520.     local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
  1521.     type=${type%;}${type:+;};
  1522.     eshopts_push -s extglob;
  1523.     if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
  1524.         ewarn "As described in the Icon Theme Specification, icon file extensions are not";
  1525.         ewarn "allowed in .desktop files if the value is not an absolute path.";
  1526.         icon=${icon%.@(xpm|png|svg)};
  1527.     fi;
  1528.     eshopts_pop;
  1529.     cat > "${desktop}"  <<-EOF
  1530. [Desktop Entry]
  1531. Name=${name}
  1532. Type=Application
  1533. Comment=${DESCRIPTION}
  1534. Exec=${exec}
  1535. TryExec=${exec%% *}
  1536. Icon=${icon}
  1537. Categories=${type}
  1538. EOF
  1539.  
  1540.     if [[ ${fields:-=} != *=* ]]; then
  1541.         ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
  1542.         fields="Path=${fields}";
  1543.     fi;
  1544.     [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
  1545.     ( insinto /usr/share/applications;
  1546.     doins "${desktop}" ) || die "installing desktop file failed"
  1547. }
  1548. make_session_desktop ()
  1549. {
  1550.     [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
  1551.     [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
  1552.     local title=$1;
  1553.     local command=$2;
  1554.     local desktop=${T}/${wm:-${PN}}.desktop;
  1555.     shift 2;
  1556.     cat > "${desktop}"  <<-EOF
  1557. [Desktop Entry]
  1558. Name=${title}
  1559. Comment=This session logs you into ${title}
  1560. Exec=${command} $*
  1561. TryExec=${command}
  1562. Type=XSession
  1563. EOF
  1564.  
  1565.     ( insinto /usr/share/xsessions;
  1566.     doins "${desktop}" )
  1567. }
  1568. make_wrapper ()
  1569. {
  1570.     _eutils_eprefix_init;
  1571.     local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
  1572.     local tmpwrapper=$(emktemp);
  1573.     ( echo '#!/bin/sh';
  1574.     [[ -n ${chdir} ]] && printf 'cd "%s"\n' "${EPREFIX}${chdir}";
  1575.     if [[ -n ${libdir} ]]; then
  1576.         local var;
  1577.         if [[ ${CHOST} == *-darwin* ]]; then
  1578.             var=DYLD_LIBRARY_PATH;
  1579.         else
  1580.             var=LD_LIBRARY_PATH;
  1581.         fi;
  1582.         cat  <<-EOF
  1583. if [ "\${${var}+set}" = "set" ] ; then
  1584. export ${var}="\${${var}}:${EPREFIX}${libdir}"
  1585. else
  1586. export ${var}="${EPREFIX}${libdir}"
  1587. fi
  1588. EOF
  1589.  
  1590.     fi
  1591.     printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
  1592.     chmod go+rx "${tmpwrapper}";
  1593.     if [[ -n ${path} ]]; then
  1594.         ( exeinto "${path}";
  1595.         newexe "${tmpwrapper}" "${wrapper}" ) || die;
  1596.     else
  1597.         newbin "${tmpwrapper}" "${wrapper}" || die;
  1598.     fi
  1599. }
  1600. multilib_env ()
  1601. {
  1602.     local CTARGET=${1:-${CTARGET}};
  1603.     local cpu=${CTARGET%%*-};
  1604.     case ${cpu} in
  1605.         aarch64*)
  1606.             export CFLAGS_arm=${CFLAGS_arm-};
  1607.             case ${cpu} in
  1608.                 aarch64*be)
  1609.                     export CHOST_arm="armv8b-${CTARGET#*-}"
  1610.                 ;;
  1611.                 *)
  1612.                     export CHOST_arm="armv8l-${CTARGET#*-}"
  1613.                 ;;
  1614.             esac;
  1615.             CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
  1616.             export CTARGET_arm=${CHOST_arm};
  1617.             export LIBDIR_arm="lib";
  1618.             export CFLAGS_arm64=${CFLAGS_arm64-};
  1619.             export CHOST_arm64=${CTARGET};
  1620.             export CTARGET_arm64=${CHOST_arm64};
  1621.             export LIBDIR_arm64="lib64";
  1622.             : ${MULTILIB_ABIS=arm64};
  1623.             : ${DEFAULT_ABI=arm64}
  1624.         ;;
  1625.         x86_64*)
  1626.             export CFLAGS_x86=${CFLAGS_x86--m32};
  1627.             export CHOST_x86=${CTARGET/x86_64/i686};
  1628.             CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
  1629.             export CTARGET_x86=${CHOST_x86};
  1630.             if [[ ${SYMLINK_LIB} == "yes" ]]; then
  1631.                 export LIBDIR_x86="lib32";
  1632.             else
  1633.                 export LIBDIR_x86="lib";
  1634.             fi;
  1635.             export CFLAGS_amd64=${CFLAGS_amd64--m64};
  1636.             export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
  1637.             export CTARGET_amd64=${CHOST_amd64};
  1638.             export LIBDIR_amd64="lib64";
  1639.             export CFLAGS_x32=${CFLAGS_x32--mx32};
  1640.             export CHOST_x32=${CTARGET/%-gnu/-gnux32};
  1641.             export CTARGET_x32=${CHOST_x32};
  1642.             export LIBDIR_x32="libx32";
  1643.             case ${CTARGET} in
  1644.                 *-gnux32)
  1645.                     : ${MULTILIB_ABIS=x32 amd64 x86};
  1646.                     : ${DEFAULT_ABI=x32}
  1647.                 ;;
  1648.                 *)
  1649.                     : ${MULTILIB_ABIS=amd64 x86};
  1650.                     : ${DEFAULT_ABI=amd64}
  1651.                 ;;
  1652.             esac
  1653.         ;;
  1654.         mips64*)
  1655.             export CFLAGS_o32=${CFLAGS_o32--mabi=32};
  1656.             export CHOST_o32=${CTARGET/mips64/mips};
  1657.             export CTARGET_o32=${CHOST_o32};
  1658.             export LIBDIR_o32="lib";
  1659.             export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
  1660.             export CHOST_n32=${CTARGET};
  1661.             export CTARGET_n32=${CHOST_n32};
  1662.             export LIBDIR_n32="lib32";
  1663.             export CFLAGS_n64=${CFLAGS_n64--mabi=64};
  1664.             export CHOST_n64=${CTARGET};
  1665.             export CTARGET_n64=${CHOST_n64};
  1666.             export LIBDIR_n64="lib64";
  1667.             : ${MULTILIB_ABIS=n64 n32 o32};
  1668.             : ${DEFAULT_ABI=n32}
  1669.         ;;
  1670.         powerpc64*)
  1671.             export CFLAGS_ppc=${CFLAGS_ppc--m32};
  1672.             export CHOST_ppc=${CTARGET/powerpc64/powerpc};
  1673.             export CTARGET_ppc=${CHOST_ppc};
  1674.             export LIBDIR_ppc="lib";
  1675.             export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
  1676.             export CHOST_ppc64=${CTARGET};
  1677.             export CTARGET_ppc64=${CHOST_ppc64};
  1678.             export LIBDIR_ppc64="lib64";
  1679.             : ${MULTILIB_ABIS=ppc64 ppc};
  1680.             : ${DEFAULT_ABI=ppc64}
  1681.         ;;
  1682.         s390x*)
  1683.             export CFLAGS_s390=${CFLAGS_s390--m31};
  1684.             export CHOST_s390=${CTARGET/s390x/s390};
  1685.             export CTARGET_s390=${CHOST_s390};
  1686.             export LIBDIR_s390="lib";
  1687.             export CFLAGS_s390x=${CFLAGS_s390x--m64};
  1688.             export CHOST_s390x=${CTARGET};
  1689.             export CTARGET_s390x=${CHOST_s390x};
  1690.             export LIBDIR_s390x="lib64";
  1691.             : ${MULTILIB_ABIS=s390x s390};
  1692.             : ${DEFAULT_ABI=s390x}
  1693.         ;;
  1694.         sparc64*)
  1695.             export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
  1696.             export CHOST_sparc32=${CTARGET/sparc64/sparc};
  1697.             export CTARGET_sparc32=${CHOST_sparc32};
  1698.             export LIBDIR_sparc32="lib";
  1699.             export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
  1700.             export CHOST_sparc64=${CTARGET};
  1701.             export CTARGET_sparc64=${CHOST_sparc64};
  1702.             export LIBDIR_sparc64="lib64";
  1703.             : ${MULTILIB_ABIS=sparc64 sparc32};
  1704.             : ${DEFAULT_ABI=sparc64}
  1705.         ;;
  1706.         *)
  1707.             : ${MULTILIB_ABIS=default};
  1708.             : ${DEFAULT_ABI=default}
  1709.         ;;
  1710.     esac;
  1711.     export MULTILIB_ABIS DEFAULT_ABI
  1712. }
  1713. multilib_toolchain_setup ()
  1714. {
  1715.     local v vv;
  1716.     export ABI=$1;
  1717.     if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
  1718.         for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  1719.         do
  1720.             vv="_abi_saved_${v}";
  1721.             [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
  1722.             unset ${vv};
  1723.         done;
  1724.         unset _DEFAULT_ABI_SAVED;
  1725.     fi;
  1726.     if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
  1727.         for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  1728.         do
  1729.             vv="_abi_saved_${v}";
  1730.             [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
  1731.         done;
  1732.         export _DEFAULT_ABI_SAVED="true";
  1733.         export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
  1734.         export CC="$(tc-getCC) $(get_abi_CFLAGS)";
  1735.         export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
  1736.         export F77="$(tc-getF77) $(get_abi_CFLAGS)";
  1737.         export FC="$(tc-getFC) $(get_abi_CFLAGS)";
  1738.         export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
  1739.         export CHOST=$(get_abi_CHOST $1);
  1740.         export CBUILD=$(get_abi_CHOST $1);
  1741.         export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
  1742.         export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
  1743.     fi
  1744. }
  1745. newicon ()
  1746. {
  1747.     _iconins ${FUNCNAME} "$@"
  1748. }
  1749. newmenu ()
  1750. {
  1751.     ( insinto /usr/share/applications;
  1752.     newins "$@" )
  1753. }
  1754. number_abis ()
  1755. {
  1756.     set -- `get_install_abis`;
  1757.     echo $#
  1758. }
  1759. optfeature ()
  1760. {
  1761.     debug-print-function ${FUNCNAME} "$@";
  1762.     local i j msg;
  1763.     local desc=$1;
  1764.     local flag=0;
  1765.     shift;
  1766.     for i in "$@";
  1767.     do
  1768.         for j in ${i};
  1769.         do
  1770.             if has_version "${j}"; then
  1771.                 flag=1;
  1772.             else
  1773.                 flag=0;
  1774.                 break;
  1775.             fi;
  1776.         done;
  1777.         if [[ ${flag} -eq 1 ]]; then
  1778.             break;
  1779.         fi;
  1780.     done;
  1781.     if [[ ${flag} -eq 0 ]]; then
  1782.         for i in "$@";
  1783.         do
  1784.             msg=" ";
  1785.             for j in ${i};
  1786.             do
  1787.                 msg+=" ${j} and";
  1788.             done;
  1789.             msg="${msg:0: -4} for ${desc}";
  1790.             elog "${msg}";
  1791.         done;
  1792.     fi
  1793. }
  1794. path_exists ()
  1795. {
  1796.     local opt=$1;
  1797.     [[ ${opt} == -[ao] ]] && shift || opt="-a";
  1798.     [[ $# -eq 0 ]] && return 1;
  1799.     local p r=0;
  1800.     for p in "$@";
  1801.     do
  1802.         [[ -e ${p} ]];
  1803.         : $(( r += $? ));
  1804.     done;
  1805.     case ${opt} in
  1806.         -a)
  1807.             return $(( r != 0 ))
  1808.         ;;
  1809.         -o)
  1810.             return $(( r == $# ))
  1811.         ;;
  1812.     esac
  1813. }
  1814. pkg_nofetch ()
  1815. {
  1816.     default
  1817. }
  1818. pre_pkg_setup ()
  1819. {
  1820.     [[ $ROOT = / ]] && cfg-update --index
  1821. }
  1822. preserve_old_lib ()
  1823. {
  1824.     _eutils_eprefix_init;
  1825.     if [[ ${EBUILD_PHASE} != "preinst" ]]; then
  1826.         eerror "preserve_old_lib() must be called from pkg_preinst() only";
  1827.         die "Invalid preserve_old_lib() usage";
  1828.     fi;
  1829.     [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
  1830.     has preserve-libs ${FEATURES} && return 0;
  1831.     local lib dir;
  1832.     for lib in "$@";
  1833.     do
  1834.         [[ -e ${EROOT}/${lib} ]] || continue;
  1835.         dir=${lib%/*};
  1836.         dodir ${dir} || die "dodir ${dir} failed";
  1837.         cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp ${lib} failed";
  1838.         touch "${ED}"/${lib};
  1839.     done
  1840. }
  1841. preserve_old_lib_notify ()
  1842. {
  1843.     if [[ ${EBUILD_PHASE} != "postinst" ]]; then
  1844.         eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
  1845.         die "Invalid preserve_old_lib_notify() usage";
  1846.     fi;
  1847.     has preserve-libs ${FEATURES} && return 0;
  1848.     _eutils_eprefix_init;
  1849.     local lib notice=0;
  1850.     for lib in "$@";
  1851.     do
  1852.         [[ -e ${EROOT}/${lib} ]] || continue;
  1853.         if [[ ${notice} -eq 0 ]]; then
  1854.             notice=1;
  1855.             ewarn "Old versions of installed libraries were detected on your system.";
  1856.             ewarn "In order to avoid breaking packages that depend on these old libs,";
  1857.             ewarn "the libraries are not being removed.  You need to run revdep-rebuild";
  1858.             ewarn "in order to remove these old dependencies.  If you do not have this";
  1859.             ewarn "helper program, simply emerge the 'gentoolkit' package.";
  1860.             ewarn;
  1861.         fi;
  1862.         ewarn "  # revdep-rebuild --library '${lib}' && rm '${lib}'";
  1863.     done
  1864. }
  1865. prune_libtool_files ()
  1866. {
  1867.     debug-print-function ${FUNCNAME} "$@";
  1868.     local removing_all removing_modules opt;
  1869.     _eutils_eprefix_init;
  1870.     for opt in "$@";
  1871.     do
  1872.         case "${opt}" in
  1873.             --all)
  1874.                 removing_all=1;
  1875.                 removing_modules=1
  1876.             ;;
  1877.             --modules)
  1878.                 removing_modules=1
  1879.             ;;
  1880.             *)
  1881.                 die "Invalid argument to ${FUNCNAME}(): ${opt}"
  1882.             ;;
  1883.         esac;
  1884.     done;
  1885.     local f;
  1886.     local queue=();
  1887.     while IFS= read -r -d '' f; do
  1888.         local archivefile=${f/%.la/.a};
  1889.         if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then
  1890.             continue;
  1891.         fi;
  1892.         [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
  1893.         local reason= pkgconfig_scanned=;
  1894.         local snotlink=$(sed -n -e 's:^shouldnotlink=::p' "${f}");
  1895.         if [[ ${snotlink} == yes ]]; then
  1896.             if [[ -f ${archivefile} ]]; then
  1897.                 einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
  1898.                 queue+=("${archivefile}");
  1899.             fi;
  1900.             if [[ -n ${removing_modules} ]]; then
  1901.                 reason='module';
  1902.             fi;
  1903.         else
  1904.             if [[ -n ${removing_all} ]]; then
  1905.                 reason='requested';
  1906.             else
  1907.                 if [[ ! -f ${archivefile} ]]; then
  1908.                     reason='no static archive';
  1909.                 else
  1910.                     if [[ ! -n $(sed -nre                   "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p"                  "${f}") ]]; then
  1911.                         reason='no libs & flags';
  1912.                     else
  1913.                         if [[ ! -n ${pkgconfig_scanned} ]]; then
  1914.                             local pc_libs=();
  1915.                             if [[ ! -n ${removing_all} ]]; then
  1916.                                 local pc;
  1917.                                 local tf=${T}/prune-lt-files.pc;
  1918.                                 local pkgconf=$(tc-getPKG_CONFIG);
  1919.                                 while IFS= read -r -d '' pc; do
  1920.                                     local arg libs;
  1921.                                     if ${pkgconf} --exists "${pc}" &> /dev/null; then
  1922.                                         sed -e '/^Requires:/d' "${pc}" > "${tf}";
  1923.                                         libs=$(${pkgconf} --libs "${tf}");
  1924.                                     else
  1925.                                         libs=$(sed -ne 's/^Libs://p' "${pc}");
  1926.                                     fi;
  1927.                                     for arg in ${libs};
  1928.                                     do
  1929.                                         if [[ ${arg} == -l* ]]; then
  1930.                                             if [[ ${arg} == '*$*' ]]; then
  1931.                                                 eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
  1932.                                                 eqawarn "(arg: ${arg})";
  1933.                                                 eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
  1934.                                             fi;
  1935.                                             pc_libs+=(lib${arg#-l}.la);
  1936.                                         fi;
  1937.                                     done;
  1938.                                 done < <(find "${D}" -type f -name '*.pc' -print0);
  1939.                                 rm -f "${tf}";
  1940.                             fi;
  1941.                             pkgconfig_scanned=1;
  1942.                         fi;
  1943.                         has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
  1944.                     fi;
  1945.                 fi;
  1946.             fi;
  1947.         fi;
  1948.         if [[ -n ${reason} ]]; then
  1949.             einfo "Removing unnecessary ${f#${D%/}} (${reason})";
  1950.             queue+=("${f}");
  1951.         fi;
  1952.     done < <(find "${ED}" -xtype f -name '*.la' -print0);
  1953.     if [[ -n ${queue[@]} ]]; then
  1954.         rm -f "${queue[@]}";
  1955.     fi
  1956. }
  1957. slot_info_pages ()
  1958. {
  1959.     pushd "${ED}"/usr/share/info > /dev/null;
  1960.     rm -f dir;
  1961.     local p pages=(*.info) args=();
  1962.     for p in "${pages[@]/%.info}";
  1963.     do
  1964.         args+=(-e "/START-INFO-DIR-ENTRY/,/END-INFO-DIR-ENTRY/s|: (${p})| v${SLOT}&|" -e "s:(${p}):(${p}-${SLOT}):g");
  1965.     done;
  1966.     sed -i "${args[@]}" * || die;
  1967.     local f d;
  1968.     for f in *;
  1969.     do
  1970.         d=${f/.info/-${SLOT}.info};
  1971.         mv "${f}" "${d}" || die;
  1972.         sed -i -e "s:${f}:${d}:g" * || die;
  1973.     done;
  1974.     popd > /dev/null
  1975. }
  1976. src_compile ()
  1977. {
  1978.     default;
  1979.     local x;
  1980.     for x in aclocal automake;
  1981.     do
  1982.         help2man "perl -Ilib ${x}" > doc/${x}-${SLOT}.1;
  1983.     done
  1984. }
  1985. src_configure ()
  1986. {
  1987.     econf --docdir="\$(datarootdir)/doc/${PF}"
  1988. }
  1989. src_install ()
  1990. {
  1991.     default;
  1992.     slot_info_pages;
  1993.     rm "${ED}"/usr/bin/{aclocal,automake} "${ED}"/usr/share/man/man1/{aclocal,automake}.1 || die;
  1994.     local x;
  1995.     for x in guess sub;
  1996.     do
  1997.         dosym ../gnuconfig/config.${x} /usr/share/${PN}-${SLOT}/config.${x};
  1998.     done
  1999. }
  2000. src_prepare ()
  2001. {
  2002.     export WANT_AUTOCONF=2.5;
  2003.     epatch "${FILESDIR}"/${PN}-1.10-perl-5.16.patch;
  2004.     epatch "${FILESDIR}"/${PN}-1.13-perl-escape-curly-bracket.patch;
  2005.     chmod a+rx tests/*.test;
  2006.     export HELP2MAN=true;
  2007.     sed -i -e "/APIVERSION=/s:=.*:=${SLOT}:" configure || die
  2008. }
  2009. src_test ()
  2010. {
  2011.     default
  2012. }
  2013. src_unpack ()
  2014. {
  2015.     default
  2016. }
  2017. strip-linguas ()
  2018. {
  2019.     local ls newls nols;
  2020.     if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
  2021.         local op=$1;
  2022.         shift;
  2023.         ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
  2024.         shift;
  2025.         local d f;
  2026.         for d in "$@";
  2027.         do
  2028.             if [[ ${op} == "-u" ]]; then
  2029.                 newls=${ls};
  2030.             else
  2031.                 newls="";
  2032.             fi;
  2033.             for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
  2034.             do
  2035.                 if [[ ${op} == "-i" ]]; then
  2036.                     has ${f} ${ls} && newls="${newls} ${f}";
  2037.                 else
  2038.                     has ${f} ${ls} || newls="${newls} ${f}";
  2039.                 fi;
  2040.             done;
  2041.             ls=${newls};
  2042.         done;
  2043.     else
  2044.         ls="$@";
  2045.     fi;
  2046.     nols="";
  2047.     newls="";
  2048.     for f in ${LINGUAS};
  2049.     do
  2050.         if has ${f} ${ls}; then
  2051.             newls="${newls} ${f}";
  2052.         else
  2053.             nols="${nols} ${f}";
  2054.         fi;
  2055.     done;
  2056.     [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
  2057.     export LINGUAS=${newls:1}
  2058. }
  2059. tc-arch ()
  2060. {
  2061.     tc-ninja_magic_to_arch portage "$@"
  2062. }
  2063. tc-arch-kernel ()
  2064. {
  2065.     tc-ninja_magic_to_arch kern "$@"
  2066. }
  2067. tc-endian ()
  2068. {
  2069.     local host=$1;
  2070.     [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  2071.     host=${host%%-*};
  2072.     case ${host} in
  2073.         aarch64*be)
  2074.             echo big
  2075.         ;;
  2076.         aarch64)
  2077.             echo little
  2078.         ;;
  2079.         alpha*)
  2080.             echo big
  2081.         ;;
  2082.         arm*b*)
  2083.             echo big
  2084.         ;;
  2085.         arm*)
  2086.             echo little
  2087.         ;;
  2088.         cris*)
  2089.             echo little
  2090.         ;;
  2091.         hppa*)
  2092.             echo big
  2093.         ;;
  2094.         i?86*)
  2095.             echo little
  2096.         ;;
  2097.         ia64*)
  2098.             echo little
  2099.         ;;
  2100.         m68*)
  2101.             echo big
  2102.         ;;
  2103.         mips*l*)
  2104.             echo little
  2105.         ;;
  2106.         mips*)
  2107.             echo big
  2108.         ;;
  2109.         powerpc*le)
  2110.             echo little
  2111.         ;;
  2112.         powerpc*)
  2113.             echo big
  2114.         ;;
  2115.         s390*)
  2116.             echo big
  2117.         ;;
  2118.         sh*b*)
  2119.             echo big
  2120.         ;;
  2121.         sh*)
  2122.             echo little
  2123.         ;;
  2124.         sparc*)
  2125.             echo big
  2126.         ;;
  2127.         x86_64*)
  2128.             echo little
  2129.         ;;
  2130.         *)
  2131.             echo wtf
  2132.         ;;
  2133.     esac
  2134. }
  2135. tc-env_build ()
  2136. {
  2137.     tc-export_build_env;
  2138.     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) "$@"
  2139. }
  2140. tc-export ()
  2141. {
  2142.     local var;
  2143.     for var in "$@";
  2144.     do
  2145.         [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
  2146.         eval tc-get${var} > /dev/null;
  2147.     done
  2148. }
  2149. tc-export_build_env ()
  2150. {
  2151.     tc-export "$@";
  2152.     : ${BUILD_CFLAGS:=-O1 -pipe};
  2153.     : ${BUILD_CXXFLAGS:=-O1 -pipe};
  2154.     : ${BUILD_CPPFLAGS:= };
  2155.     : ${BUILD_LDFLAGS:= };
  2156.     export BUILD_{C,CXX,CPP,LD}FLAGS;
  2157.     local v;
  2158.     for v in BUILD_{C,CXX,CPP,LD}FLAGS;
  2159.     do
  2160.         export ${v#BUILD_}_FOR_BUILD="${!v}";
  2161.     done
  2162. }
  2163. tc-get-compiler-type ()
  2164. {
  2165.     local code='
  2166. #if defined(__PATHSCALE__)
  2167.     HAVE_PATHCC
  2168. #elif defined(__clang__)
  2169.     HAVE_CLANG
  2170. #elif defined(__GNUC__)
  2171.     HAVE_GCC
  2172. #endif
  2173. ';
  2174.     local res=$($(tc-getCPP "$@") -E -P - <<<"${code}");
  2175.     case ${res} in
  2176.         *HAVE_PATHCC*)
  2177.             echo pathcc
  2178.         ;;
  2179.         *HAVE_CLANG*)
  2180.             echo clang
  2181.         ;;
  2182.         *HAVE_GCC*)
  2183.             echo gcc
  2184.         ;;
  2185.         *)
  2186.             echo unknown
  2187.         ;;
  2188.     esac
  2189. }
  2190. tc-getAR ()
  2191. {
  2192.     tc-getPROG AR ar "$@"
  2193. }
  2194. tc-getAS ()
  2195. {
  2196.     tc-getPROG AS as "$@"
  2197. }
  2198. tc-getBUILD_AR ()
  2199. {
  2200.     tc-getBUILD_PROG AR ar "$@"
  2201. }
  2202. tc-getBUILD_AS ()
  2203. {
  2204.     tc-getBUILD_PROG AS as "$@"
  2205. }
  2206. tc-getBUILD_CC ()
  2207. {
  2208.     tc-getBUILD_PROG CC gcc "$@"
  2209. }
  2210. tc-getBUILD_CPP ()
  2211. {
  2212.     tc-getBUILD_PROG CPP "$(tc-getBUILD_CC) -E" "$@"
  2213. }
  2214. tc-getBUILD_CXX ()
  2215. {
  2216.     tc-getBUILD_PROG CXX g++ "$@"
  2217. }
  2218. tc-getBUILD_LD ()
  2219. {
  2220.     tc-getBUILD_PROG LD ld "$@"
  2221. }
  2222. tc-getBUILD_NM ()
  2223. {
  2224.     tc-getBUILD_PROG NM nm "$@"
  2225. }
  2226. tc-getBUILD_OBJCOPY ()
  2227. {
  2228.     tc-getBUILD_PROG OBJCOPY objcopy "$@"
  2229. }
  2230. tc-getBUILD_PKG_CONFIG ()
  2231. {
  2232.     tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
  2233. }
  2234. tc-getBUILD_PROG ()
  2235. {
  2236.     _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
  2237. }
  2238. tc-getBUILD_RANLIB ()
  2239. {
  2240.     tc-getBUILD_PROG RANLIB ranlib "$@"
  2241. }
  2242. tc-getBUILD_STRIP ()
  2243. {
  2244.     tc-getBUILD_PROG STRIP strip "$@"
  2245. }
  2246. tc-getCC ()
  2247. {
  2248.     tc-getPROG CC gcc "$@"
  2249. }
  2250. tc-getCPP ()
  2251. {
  2252.     tc-getPROG CPP "${CC:-gcc} -E" "$@"
  2253. }
  2254. tc-getCXX ()
  2255. {
  2256.     tc-getPROG CXX g++ "$@"
  2257. }
  2258. tc-getDLLWRAP ()
  2259. {
  2260.     tc-getPROG DLLWRAP dllwrap "$@"
  2261. }
  2262. tc-getF77 ()
  2263. {
  2264.     tc-getPROG F77 gfortran "$@"
  2265. }
  2266. tc-getFC ()
  2267. {
  2268.     tc-getPROG FC gfortran "$@"
  2269. }
  2270. tc-getGCJ ()
  2271. {
  2272.     tc-getPROG GCJ gcj "$@"
  2273. }
  2274. tc-getGO ()
  2275. {
  2276.     tc-getPROG GO gccgo "$@"
  2277. }
  2278. tc-getLD ()
  2279. {
  2280.     tc-getPROG LD ld "$@"
  2281. }
  2282. tc-getNM ()
  2283. {
  2284.     tc-getPROG NM nm "$@"
  2285. }
  2286. tc-getOBJCOPY ()
  2287. {
  2288.     tc-getPROG OBJCOPY objcopy "$@"
  2289. }
  2290. tc-getOBJDUMP ()
  2291. {
  2292.     tc-getPROG OBJDUMP objdump "$@"
  2293. }
  2294. tc-getPKG_CONFIG ()
  2295. {
  2296.     tc-getPROG PKG_CONFIG pkg-config "$@"
  2297. }
  2298. tc-getPROG ()
  2299. {
  2300.     _tc-getPROG CHOST "$@"
  2301. }
  2302. tc-getRANLIB ()
  2303. {
  2304.     tc-getPROG RANLIB ranlib "$@"
  2305. }
  2306. tc-getRC ()
  2307. {
  2308.     tc-getPROG RC windres "$@"
  2309. }
  2310. tc-getSTRIP ()
  2311. {
  2312.     tc-getPROG STRIP strip "$@"
  2313. }
  2314. tc-has-openmp ()
  2315. {
  2316.     local base="${T}/test-tc-openmp";
  2317.     cat > "${base}.c"  <<-EOF
  2318. #include <omp.h>
  2319. int main() {
  2320. int nthreads, tid, ret = 0;
  2321. #pragma omp parallel private(nthreads, tid)
  2322. {
  2323. tid = omp_get_thread_num();
  2324. nthreads = omp_get_num_threads(); ret += tid + nthreads;
  2325. }
  2326. return ret;
  2327. }
  2328. EOF
  2329.  
  2330.     $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &> /dev/null;
  2331.     local ret=$?;
  2332.     rm -f "${base}"*;
  2333.     return ${ret}
  2334. }
  2335. tc-has-tls ()
  2336. {
  2337.     local base="${T}/test-tc-tls";
  2338.     cat > "${base}.c"  <<-EOF
  2339. int foo(int *i) {
  2340. static __thread int j = 0;
  2341. return *i ? j : *i;
  2342. }
  2343. EOF
  2344.  
  2345.     local flags;
  2346.     case $1 in
  2347.         -s)
  2348.             flags="-S"
  2349.         ;;
  2350.         -c)
  2351.             flags="-c"
  2352.         ;;
  2353.         -l)
  2354.  
  2355.         ;;
  2356.         -*)
  2357.             die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
  2358.         ;;
  2359.     esac;
  2360.     : ${flags:=-fPIC -shared -Wl,-z,defs};
  2361.     [[ $1 == -* ]] && shift;
  2362.     $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &> /dev/null;
  2363.     local ret=$?;
  2364.     rm -f "${base}"*;
  2365.     return ${ret}
  2366. }
  2367. tc-is-clang ()
  2368. {
  2369.     [[ $(tc-get-compiler-type) == clang ]]
  2370. }
  2371. tc-is-cross-compiler ()
  2372. {
  2373.     [[ ${CBUILD:-${CHOST}} != ${CHOST} ]]
  2374. }
  2375. tc-is-gcc ()
  2376. {
  2377.     [[ $(tc-get-compiler-type) == gcc ]]
  2378. }
  2379. tc-is-softfloat ()
  2380. {
  2381.     local CTARGET=${CTARGET:-${CHOST}};
  2382.     case ${CTARGET} in
  2383.         bfin* | h8300*)
  2384.             echo "only"
  2385.         ;;
  2386.         *)
  2387.             if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then
  2388.                 echo "yes";
  2389.             else
  2390.                 if [[ ${CTARGET//_/-} == *-softfp-* ]]; then
  2391.                     echo "softfp";
  2392.                 else
  2393.                     echo "no";
  2394.                 fi;
  2395.             fi
  2396.         ;;
  2397.     esac
  2398. }
  2399. tc-is-static-only ()
  2400. {
  2401.     local host=${CTARGET:-${CHOST}};
  2402.     [[ ${host} == *-mint* ]]
  2403. }
  2404. tc-ld-disable-gold ()
  2405. {
  2406.     if ! tc-ld-is-gold "$@"; then
  2407.         return;
  2408.     fi;
  2409.     ewarn "Forcing usage of the BFD linker instead of GOLD";
  2410.     local ld=$(tc-getLD "$@");
  2411.     local bfd_ld="${ld%% *}.bfd";
  2412.     local path_ld=$(which "${bfd_ld}" 2>/dev/null);
  2413.     [[ -e ${path_ld} ]] && export LD=${bfd_ld};
  2414.     local major=$(gcc-major-version "$@");
  2415.     local minor=$(gcc-minor-version "$@");
  2416.     if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]]; then
  2417.         if [[ -e ${path_ld} ]]; then
  2418.             local d="${T}/bfd-linker";
  2419.             mkdir -p "${d}";
  2420.             ln -sf "${path_ld}" "${d}"/ld;
  2421.             export LDFLAGS="${LDFLAGS} -B${d}";
  2422.         else
  2423.             die "unable to locate a BFD linker to bypass gold";
  2424.         fi;
  2425.     else
  2426.         export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
  2427.     fi
  2428. }
  2429. tc-ld-is-gold ()
  2430. {
  2431.     local out;
  2432.     out=$($(tc-getLD "$@") --version 2>&1);
  2433.     if [[ ${out} == *"GNU gold"* ]]; then
  2434.         return 0;
  2435.     fi;
  2436.     local base="${T}/test-tc-gold";
  2437.     cat > "${base}.c"  <<-EOF
  2438. int main() { return 0; }
  2439. EOF
  2440.  
  2441.     out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1);
  2442.     rm -f "${base}"*;
  2443.     if [[ ${out} == *"GNU gold"* ]]; then
  2444.         return 0;
  2445.     fi;
  2446.     return 1
  2447. }
  2448. tc-ninja_magic_to_arch ()
  2449. {
  2450.     function ninj ()
  2451.     {
  2452.         [[ ${type} == "kern" ]] && echo $1 || echo $2
  2453.     };
  2454.     local type=$1;
  2455.     local host=$2;
  2456.     [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  2457.     case ${host} in
  2458.         aarch64*)
  2459.             echo arm64
  2460.         ;;
  2461.         alpha*)
  2462.             echo alpha
  2463.         ;;
  2464.         arm*)
  2465.             echo arm
  2466.         ;;
  2467.         avr*)
  2468.             ninj avr32 avr
  2469.         ;;
  2470.         bfin*)
  2471.             ninj blackfin bfin
  2472.         ;;
  2473.         c6x*)
  2474.             echo c6x
  2475.         ;;
  2476.         cris*)
  2477.             echo cris
  2478.         ;;
  2479.         frv*)
  2480.             echo frv
  2481.         ;;
  2482.         hexagon*)
  2483.             echo hexagon
  2484.         ;;
  2485.         hppa*)
  2486.             ninj parisc hppa
  2487.         ;;
  2488.         i?86*)
  2489.             if [[ ${type} == "kern" && ${host} == *freebsd* ]]; then
  2490.                 echo i386;
  2491.             else
  2492.                 echo x86;
  2493.             fi
  2494.         ;;
  2495.         ia64*)
  2496.             echo ia64
  2497.         ;;
  2498.         m68*)
  2499.             echo m68k
  2500.         ;;
  2501.         metag*)
  2502.             echo metag
  2503.         ;;
  2504.         microblaze*)
  2505.             echo microblaze
  2506.         ;;
  2507.         mips*)
  2508.             echo mips
  2509.         ;;
  2510.         nios2*)
  2511.             echo nios2
  2512.         ;;
  2513.         nios*)
  2514.             echo nios
  2515.         ;;
  2516.         or32*)
  2517.             echo openrisc
  2518.         ;;
  2519.         powerpc*)
  2520.             if [[ ${type} == "kern" ]]; then
  2521.                 echo powerpc;
  2522.             else
  2523.                 if [[ ${host} == powerpc64* ]]; then
  2524.                     echo ppc64;
  2525.                 else
  2526.                     echo ppc;
  2527.                 fi;
  2528.             fi
  2529.         ;;
  2530.         riscv*)
  2531.             echo riscv
  2532.         ;;
  2533.         s390*)
  2534.             echo s390
  2535.         ;;
  2536.         score*)
  2537.             echo score
  2538.         ;;
  2539.         sh64*)
  2540.             ninj sh64 sh
  2541.         ;;
  2542.         sh*)
  2543.             echo sh
  2544.         ;;
  2545.         sparc64*)
  2546.             ninj sparc64 sparc
  2547.         ;;
  2548.         sparc*)
  2549.             [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
  2550.         ;;
  2551.         tile*)
  2552.             echo tile
  2553.         ;;
  2554.         vax*)
  2555.             echo vax
  2556.         ;;
  2557.         x86_64*freebsd*)
  2558.             echo amd64
  2559.         ;;
  2560.         x86_64*)
  2561.             if [[ ${type} == "kern" ]]; then
  2562.                 echo x86;
  2563.             else
  2564.                 echo amd64;
  2565.             fi
  2566.         ;;
  2567.         xtensa*)
  2568.             echo xtensa
  2569.         ;;
  2570.         *)
  2571.             echo unknown
  2572.         ;;
  2573.     esac
  2574. }
  2575. tc-stack-grows-down ()
  2576. {
  2577.     case ${ARCH} in
  2578.         hppa | metag)
  2579.             return 1
  2580.         ;;
  2581.     esac;
  2582.     return 0
  2583. }
  2584. use_if_iuse ()
  2585. {
  2586.     in_iuse $1 || return 1;
  2587.     use $1
  2588. }
  2589. validate_desktop_entries ()
  2590. {
  2591.     _eutils_eprefix_init;
  2592.     if [[ -x "${EPREFIX}"/usr/bin/desktop-file-validate ]]; then
  2593.         einfo "Checking desktop entry validity";
  2594.         local directories="";
  2595.         for d in /usr/share/applications $@;
  2596.         do
  2597.             [[ -d ${ED}${d} ]] && directories="${directories} ${ED}${d}";
  2598.         done;
  2599.         if [[ -n ${directories} ]]; then
  2600.             for FILE in $(find ${directories} -name "*\.desktop"                            -not -path '*.hidden*' | sort -u 2>/dev/null);
  2601.             do
  2602.                 local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" |                               sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
  2603.                 [[ -n $temp ]] && elog ${temp/--/${FILE/${ED}/}:};
  2604.             done;
  2605.         fi;
  2606.         echo "";
  2607.     else
  2608.         einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
  2609.     fi
  2610. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top