Guest User

Untitled

a guest
May 9th, 2012
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 115.33 KB | None | 0 0
  1. declare -x ABI="amd64"
  2. declare -x ALSA_CARDS=""
  3. declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"
  4. declare -x APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
  5. declare -x ARCH="amd64"
  6. declare -- AT_M4DIR=""
  7. declare -- AT_SYS_M4DIR=""
  8. declare -- AUTOTOOLS_AUTO_DEPEND="yes"
  9. declare -- AUTOTOOLS_DEPEND="|| ( >=sys-devel/automake-1.11.1:1.11  ) >=sys-devel/autoconf-2.68 sys-devel/libtool"
  10. declare -x BOOTSTRAP_USE="cxx unicode multilib"
  11. declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump"
  12. declare -x CAMERAS="ptp2"
  13. declare -x CBUILD="x86_64-pc-linux-gnu"
  14. declare -x CFLAGS="-O2 -march=amdfam10 -mfpmath=sse -msse4a -msse -msse2 -m3dnow -mmmx -fomit-frame-pointer -pipe"
  15. declare -x CFLAGS_amd64="-m64"
  16. declare -x CFLAGS_default
  17. declare -x CFLAGS_x32="-mx32"
  18. declare -x CFLAGS_x86="-m32"
  19. declare -x CHOST="x86_64-pc-linux-gnu"
  20. declare -x CHOST_amd64="x86_64-pc-linux-gnu"
  21. declare -x CHOST_default="x86_64-pc-linux-gnu"
  22. declare -x CHOST_x32="x86_64-pc-linux-gnu"
  23. declare -x CHOST_x86="i686-pc-linux-gnu"
  24. declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
  25. declare -x CONF_PREFIX="/usr"
  26. declare -x CROSSCOMPILE_OPTS=""
  27. declare -x CTARGET_default="x86_64-pc-linux-gnu"
  28. declare -x CXXFLAGS="-O2 -march=amdfam10 -mfpmath=sse -msse4a -msse -msse2 -m3dnow -mmmx -fomit-frame-pointer -pipe"
  29. declare -x DEFAULT_ABI="amd64"
  30. declare -x DEFINED_PHASES=" compile configure install postinst postrm preinst prepare setup unpack"
  31. declare DEPEND=">=dev-libs/glib-2.18:2
  32.     >=x11-libs/gtk+-2.12:2
  33.     >=dev-libs/dbus-glib-0.76
  34.     || ( gnome-base/gnome-panel[bonobo] <gnome-base/gnome-panel-2.32 )
  35.     >=gnome-base/gconf-2
  36.     >=dev-libs/libindicator-0.4
  37.     dev-util/pkgconfig
  38.     nls? ( >=dev-util/intltool-0.35 ) || ( >=sys-devel/automake-1.11.1:1.11  ) >=sys-devel/autoconf-2.68 sys-devel/libtool >=sys-apps/sed-4"
  39. declare DESCRIPTION="A small applet to display information from various applications consistently in the panel"
  40. declare -x DESTTREE="/usr"
  41. declare -x DIROPTIONS="-m0755"
  42. declare -- DOCS="AUTHORS"
  43. declare -x EAPI="2"
  44. declare -- ECLASSDIR_LOCAL="/usr/portage/eclass"
  45. declare -- ECONF_SOURCE="."
  46. declare -x ELIBC="glibc"
  47. declare -- ELTCONF=""
  48. declare -x ELT_APPLIED_PATCHES=" portage/1.2.0 sed/1.5.6"
  49. declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
  50. declare -- EPATCH_EXCLUDE=""
  51. declare -- EPATCH_FORCE="no"
  52. declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
  53. declare -- EPATCH_OPTS=""
  54. declare -- EPATCH_SINGLE_MSG=""
  55. declare -- EPATCH_SOURCE="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/work/patch"
  56. declare -- EPATCH_SUFFIX="patch.bz2"
  57. declare -x EXEOPTIONS="-m0755"
  58. declare -x FCFLAGS=""
  59. declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
  60. declare -x FFLAGS=""
  61. declare -- G2CONF="
  62.         --enable-nls
  63.         --disable-dependency-tracking"
  64. declare -x GCC_SPECS=""
  65. declare -- GCONFTOOL_BIN="/usr/bin/gconftool-2"
  66. declare -- GCONF_DEBUG="no"
  67. declare -x GDK_USE_XFT="1"
  68. declare -- GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas"
  69. declare -- GNOME2_LA_PUNT="no"
  70. declare -- GNOME_ORG_MODULE="indicator-applet"
  71. declare -- GNOME_ORG_PVP="0.4"
  72. declare -- GNOME_TARBALL_SUFFIX="bz2"
  73. declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx"
  74. declare -x GRUB_PLATFORMS=""
  75. declare -x GSETTINGS_BACKEND="dconf"
  76. declare -x GST_REGISTRY="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/temp/registry.xml"
  77. declare -- GTK_UPDATE_ICON_CACHE="/usr/bin/gtk-update-icon-cache"
  78. declare -x G_HOME="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/temp"
  79. declare HOMEPAGE="http://launchpad.net/indicator-applet/"
  80. declare -x INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH="10"
  81. declare -x INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="true"
  82. declare -x INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="100"
  83. declare -x INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH="25"
  84. declare -x INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE="0"
  85. declare -x INFINALITY_FT_BOLD_EMBOLDEN_Y_VALUE="0"
  86. declare -x INFINALITY_FT_BRIGHTNESS="0"
  87. declare -x INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH="0"
  88. declare -x INFINALITY_FT_CONTRAST="0"
  89. declare -x INFINALITY_FT_FILTER_PARAMS="11 22 38 22 11"
  90. declare -x INFINALITY_FT_FRINGE_FILTER_STRENGTH="0"
  91. declare -x INFINALITY_FT_GAMMA_CORRECTION="0 100"
  92. declare -x INFINALITY_FT_GLOBAL_EMBOLDEN_X_VALUE="0"
  93. declare -x INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE="0"
  94. declare -x INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH="0"
  95. declare -x INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="25"
  96. declare -x INFINALITY_FT_STEM_FITTING_STRENGTH="25"
  97. declare -x INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="40"
  98. declare -x INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="true"
  99. declare -x INFINALITY_FT_USE_VARIOUS_TWEAKS="true"
  100. declare -x INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="10"
  101. declare -x INHERITED=" multilib toolchain-funcs user eutils libtool autotools fdo-mime versionator gnome.org gnome2-utils gnome2"
  102. declare -x INPUT_DEVICES="evdev"
  103. declare -x INSDESTTREE=""
  104. declare -x INSOPTIONS="-m0644"
  105. declare IUSE="nls "
  106. declare -x KERNEL="linux"
  107. declare -x KERNEL_ABI="amd64"
  108. declare -x KEYWORDS="~x86 ~amd64"
  109. declare -x KV="3.3.4-pf"
  110. declare -x LADSPA_PATH="/usr/lib64/ladspa"
  111. declare -x LCD_DEVICES=""
  112. declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed"
  113. declare -x LDFLAGS_amd64="-m elf_x86_64"
  114. declare -x LDFLAGS_default
  115. declare -x LDFLAGS_x32="-m elf32_x86_64"
  116. declare -x LDFLAGS_x86="-m elf_i386"
  117. declare -x LIBDIR_amd64="lib64"
  118. declare -x LIBDIR_amd64_fbsd="lib64"
  119. declare -x LIBDIR_default="lib"
  120. declare -x LIBDIR_n32="lib32"
  121. declare -x LIBDIR_n64="lib64"
  122. declare -x LIBDIR_o32="lib"
  123. declare -x LIBDIR_ppc="lib32"
  124. declare -x LIBDIR_ppc64="lib64"
  125. declare -x LIBDIR_s390="lib32"
  126. declare -x LIBDIR_s390x="lib64"
  127. declare -x LIBDIR_sparc32="lib32"
  128. declare -x LIBDIR_sparc64="lib64"
  129. declare -x LIBDIR_x32="libx32"
  130. declare -x LIBDIR_x86="lib32"
  131. declare -x LIBDIR_x86_fbsd="lib32"
  132. declare -x LIBGL_DRIVERS_PATH="/usr/lib64/dri:/usr/lib32/dri"
  133. declare -x LIBOPTIONS="-m0644"
  134. declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
  135. declare -x LICENSE="GPL-3"
  136. declare -x LINGUAS="en en_GB"
  137. declare -x MAIL="/var/mail/root"
  138. declare -x MAKEOPTS="-j9 -s"
  139. declare -x MULTILIB_ABIS="amd64 x86"
  140. declare -x MULTILIB_STRICT_DENY="64-bit.*shared object"
  141. 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"
  142. declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev)"
  143. declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
  144. declare -x OPENCL_PROFILE="amd"
  145. declare -x OPENGL_PROFILE="ati"
  146. declare -x PATH="/usr/lib64/ccache/bin:/usr/lib64/portage/bin/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"
  147. declare PDEPEND=""
  148. declare -x PHP_TARGETS=""
  149. declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig"
  150. declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")'
  151. declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/indicator-applet-0.4.5/html")'
  152. declare -x PRELINK_PATH_MASK="/usr/lib64/libfreebl3.so:/usr/lib64/libnssdbm3.so:/usr/lib64/libsoftokn3.so"
  153. declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC KERNEL USERLAND"
  154. declare -x PROPERTIES=""
  155. declare -x PROVIDE=""
  156. declare -x PYTHONDONTWRITEBYTECODE="1"
  157. declare -x QT_GRAPHICSSYSTEM="raster"
  158. declare -x RDEPEND=">=dev-libs/glib-2.18:2
  159.     >=x11-libs/gtk+-2.12:2
  160.     >=dev-libs/dbus-glib-0.76
  161.     || ( gnome-base/gnome-panel[bonobo] <gnome-base/gnome-panel-2.32 )
  162.     >=gnome-base/gconf-2
  163.     >=dev-libs/libindicator-0.4 "
  164. declare REPOSITORY
  165. declare REQUIRED_USE=""
  166. declare -x RESTRICT=""
  167. declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
  168. declare -x RUBY_TARGETS="ruby18"
  169. declare -x S="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/work/indicator-applet-0.4.5"
  170. declare -x SANDBOX_DEBUG="0"
  171. declare -x SANDBOX_DENY=""
  172. declare -x SANDBOX_PID="24634"
  173. declare -x SANDBOX_PREDICT="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/homedir:/dev/crypto:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig"
  174. declare -x SANDBOX_READ="/:/var/tmp:/var/tmp/ccache"
  175. declare -x SANDBOX_VERBOSE="1"
  176. declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/ccache:/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/homedir/.bash_history:/root/.gnome2"
  177. declare -- SCROLLKEEPER_DIR="/var/lib/scrollkeeper"
  178. declare -- SCROLLKEEPER_UPDATE="1"
  179. declare -- SCROLLKEEPER_UPDATE_BIN="/usr/bin/scrollkeeper-update"
  180. declare -x SLOT="0"
  181. declare SRC_URI="http://launchpad.net/indicator-applet/0.4/0.4.5/+download/indicator-applet-0.4.5.tar.gz"
  182. declare -x SUDO_COMMAND="/usr/bin/emerge indicator-applet"
  183. declare -x SUDO_GID="1000"
  184. declare -x SUDO_UID="1000"
  185. declare -x SUDO_USER="alex"
  186. declare -x SYMLINK_LIB="yes"
  187. declare -x USE="amd64 elibc_glibc kernel_linux multilib nls userland_GNU"
  188. declare -x USERLAND="GNU"
  189. declare -x USERNAME="root"
  190. declare -x USE_ARCH="64bit -32bit mmx mmxext 3dnow 3dnowext sse sse2 sse4a"
  191. declare -x USE_DE="-kde -kde3 -kde4 -kde5 -xfce -gnome -gnome-keyring -avahi -qt -qt4 -qt3 -qt5 gtk gtk2 gtk3 compiz emerald xcomposite"
  192. declare -- USE_EINSTALL=""
  193. declare -x USE_FONTS="lcdfilter fontconfig utf-8 unicode -icu -cleartype -truetype -samba -network-manager"
  194. declare -x USE_FS="btrfs -ntfsprogs -fuse -nfs -ntfs -reiserfs -xfs -jfs  -fam -hal"
  195. declare -x USE_GRAPHICS="pdf djvu fb2 png apng svg gimp jpg jpeg jpeg2k opengl branding cairo clutter -dri -drm -tiff -bmp -chm opencl fglrx X X11 xorg -wayland "
  196. declare -x USE_MEDIA="cups mp3 wav conky mplayer mp4 -flac -ogg -vorbis -pulseaudio -oss -mpd -midi -scanner -phonon sound video  theora encode rar zip xz 7zip alsa jack openal"
  197. declare -x USE_NETWORK="dhcp dhcpcd -wicd -wifi -wimax -ipv6 -facebook -google -msn -irc -bluetooth jabber xmmp "
  198. declare -x USE_OPTIMIZE="glibc-omitfp sqlite sqlite3 optimisememory threads custom-optimization strong-optimization optimization"
  199. declare -x USE_PROG="-perl -python -python2 -python3 -php5 -mysql -postgresql -debug -ldap -subversion -mercurial -bazaar git java -ruby android eclipse -lua javascript vim-syntax  -nano -nano-syntax"
  200. declare -x USE_SYSTEM="ccache consolekit bash-completion -overlay appmenu graphite device-mapper udev dbus symlink crypt systemd -doc -test -zsh -zsh-completion -examples -openrc -doc -test -zsh -zsh-completion  -virtualbox -examples -openrc"
  201. declare -x VIDEO_CARDS=""
  202. declare -x WANT_AUTOCONF="2.5"
  203. declare -x WANT_AUTOMAKE="1.11"
  204. declare -x WANT_LIBTOOL="latest"
  205. declare -x XDG_CACHE_HOME="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/temp/.cache"
  206. declare -x XDG_CONFIG_DIRS="/etc/xdg"
  207. declare -x XDG_CONFIG_HOME="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/temp/.config"
  208. declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share"
  209. declare -x XDG_DATA_HOME="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/temp/.local/share"
  210. declare -x XDG_RUNTIME_DIR="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/temp/run"
  211. 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"
  212. declare -x _E_DOCDESTTREE_=""
  213. declare -x _E_EXEDESTTREE_=""
  214. declare -a _LATEST_AUTOMAKE='([0]="1.11.1:1.11")'
  215. declare -- __ELT_NOTED_TMP="true"
  216. declare -- ___ECLASS_ONCE_AUTOTOOLS="recur -_+^+_- spank"
  217. declare -- ___ECLASS_ONCE_EUTILS="recur -_+^+_- spank"
  218. declare -- ___ECLASS_ONCE_LIBTOOL="recur -_+^+_- spank"
  219. declare -- ___ECLASS_ONCE_MULTILIB="recur -_+^+_- spank"
  220. declare -- ___ECLASS_ONCE_TOOLCHAIN_FUNCS="recur -_+^+_- spank"
  221. declare -- ___ECLASS_ONCE_USER="recur -_+^+_- spank"
  222. declare -- ___ECLASS_ONCE_VERSIONATOR="recur -_+^+_- spank"
  223. declare -- _libtool_atom="sys-devel/libtool"
  224. declare -- omf="/var/tmp/portage/gnome-extra/indicator-applet-0.4.5/work/indicator-applet-0.4.5/src/Makefile.in"
  225. declare -- phase_func
  226. ELT_libtool_version ()
  227. {
  228.     ( unset VERSION;
  229.     eval $(grep -e '^[[:space:]]*VERSION=' "$1");
  230.     echo "${VERSION:-0}" )
  231. }
  232. ELT_try_and_apply_patch ()
  233. {
  234.     local ret=0;
  235.     local file=$1;
  236.     local patch=$2;
  237.     local src=$3;
  238.     local disp="${src} patch";
  239.     local log="${T}/elibtool.log";
  240.     if [[ -z ${__ELT_NOTED_TMP} ]]; then
  241.         __ELT_NOTED_TMP=true;
  242.         printf 'temp patch: %s\n' "${patch}" > "${log}";
  243.     fi;
  244.     printf '\nTrying %s\n' "${disp}" >> "${log}";
  245.     if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1; then
  246.         einfo "  Applying ${disp} ...";
  247.         patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1;
  248.         ret=$?;
  249.         export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}";
  250.     else
  251.         ret=1;
  252.     fi;
  253.     return "${ret}"
  254. }
  255. ELT_walk_patches ()
  256. {
  257.     local patch tmp;
  258.     local ret=1;
  259.     local file=$1;
  260.     local patch_set=$2;
  261.     local patch_dir="$(elt_patch_dir)/${patch_set}";
  262.     local rem_int_dep=$3;
  263.     [[ -z ${patch_set} ]] && return 1;
  264.     [[ ! -d ${patch_dir} ]] && return 1;
  265.     local sed_args=(-e "s:@GENTOO_LIBDIR@:$(get_libdir):g");
  266.     if [[ -n ${rem_int_dep} ]]; then
  267.         sed_args+=(-e "s|@REM_INT_DEP@|${rem_int_dep}|g");
  268.     fi;
  269.     pushd "$(elt_patch_dir)" > /dev/null || die;
  270.     for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r);
  271.     do
  272.         tmp="${T}/libtool-elt.patch";
  273.         sed "${sed_args[@]}" "${patch}" > "${tmp}" || die;
  274.         if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}"; then
  275.             ret=0;
  276.             break;
  277.         fi;
  278.     done;
  279.     popd > /dev/null;
  280.     return ${ret}
  281. }
  282. VER_major ()
  283. {
  284.     [[ -z $1 ]] && return 1;
  285.     local VER=$@;
  286.     echo "${VER%%[^[:digit:]]*}"
  287. }
  288. VER_micro ()
  289. {
  290.     [[ -z $1 ]] && return 1;
  291.     local VER=$@;
  292.     VER=${VER#*.*.};
  293.     echo "${VER%%[^[:digit:]]*}"
  294. }
  295. VER_minor ()
  296. {
  297.     [[ -z $1 ]] && return 1;
  298.     local VER=$@;
  299.     VER=${VER#*.};
  300.     echo "${VER%%[^[:digit:]]*}"
  301. }
  302. VER_to_int ()
  303. {
  304.     [[ -z $1 ]] && return 1;
  305.     local VER_MAJOR=$(VER_major "$1");
  306.     local VER_MINOR=$(VER_minor "$1");
  307.     local VER_MICRO=$(VER_micro "$1");
  308.     local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
  309.     if [[ ${VER_int} -ge 65536 ]]; then
  310.         echo "${VER_int}";
  311.         return 0;
  312.     fi;
  313.     echo 1;
  314.     return 1
  315. }
  316. _assert_pkg_ebuild_phase ()
  317. {
  318.     case ${EBUILD_PHASE} in
  319.         setup | preinst | postinst)
  320.  
  321.         ;;
  322.         *)
  323.             eerror "'$1()' called from '${EBUILD_PHASE}' phase which is not OK:";
  324.             eerror "You may only call from pkg_{setup,preinst,postinst} functions.";
  325.             eerror "Package fails at QA and at life.  Please file a bug.";
  326.             die "Bad package!  $1 is only for use in some pkg_* functions!"
  327.         ;;
  328.     esac
  329. }
  330. _autotools_m4dir_include ()
  331. {
  332.     local x include_opts;
  333.     for x in "$@";
  334.     do
  335.         case ${x} in
  336.             -I)
  337.  
  338.             ;;
  339.             *)
  340.                 [[ ! -d ${x} ]] && ewarn "autotools.eclass: '${x}' does not exist";
  341.                 include_opts+=" -I ${x}"
  342.             ;;
  343.         esac;
  344.     done;
  345.     echo ${include_opts}
  346. }
  347. _elibtoolize ()
  348. {
  349.     local opts g=;
  350.     [[ -n $(autotools_check_macro AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT) ]] || return 0;
  351.     [[ -f GNUmakefile.am || -f Makefile.am ]] && opts="--automake";
  352.     [[ ${CHOST} == *-darwin* ]] && g=g;
  353.     autotools_run_tool ${LIBTOOLIZE:-${g}libtoolize} "$@" ${opts};
  354.     eaclocal
  355. }
  356. _gcc-install-dir ()
  357. {
  358.     echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null |      awk '$1=="install:" {print $2}')"
  359. }
  360. _gcc-specs-directive_raw ()
  361. {
  362.     local cc=$(tc-getCC);
  363.     local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
  364.     ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
  365. $1=="*"directive":"  { pspec=spec; spec=""; outside=0; next }
  366.     outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
  367.     spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
  368.     { spec=spec $0 }
  369. END { print spec }';
  370.     return 0
  371. }
  372. _gcc-specs-exists ()
  373. {
  374.     [[ -f $(_gcc-install-dir)/$1 ]]
  375. }
  376. _gcc_fullversion ()
  377. {
  378.     local ver="$1";
  379.     shift;
  380.     set -- `$(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__"`;
  381.     eval echo "$ver"
  382. }
  383. _tc-getPROG ()
  384. {
  385.     local tuple=$1;
  386.     local v var vars=$2;
  387.     local prog=$3;
  388.     var=${vars%% *};
  389.     for v in ${vars};
  390.     do
  391.         if [[ -n ${!v} ]]; then
  392.             export ${var}="${!v}";
  393.             echo "${!v}";
  394.             return 0;
  395.         fi;
  396.     done;
  397.     local search=;
  398.     [[ -n $4 ]] && search=$(type -p "$4-${prog}");
  399.     [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p "${!tuple}-${prog}");
  400.     [[ -n ${search} ]] && prog=${search##*/};
  401.     export ${var}=${prog};
  402.     echo "${!var}"
  403. }
  404. autotools_check_macro ()
  405. {
  406.     [[ -f configure.ac || -f configure.in ]] || return 0;
  407.     local macro;
  408.     for macro in "$@";
  409.     do
  410.         WANT_AUTOCONF="2.5" autoconf $(autotools_m4dir_include) --trace="${macro}" 2> /dev/null;
  411.     done;
  412.     return 0
  413. }
  414. autotools_check_macro_val ()
  415. {
  416.     local macro=$1 scan_out;
  417.     autotools_check_macro "${macro}" | gawk -v macro="${macro}" '($0 !~ /^[[:space:]]*(#|dnl)/) {
  418.                 if (match($0, macro ":(.*)$", res))
  419.                     print res[1]
  420.             }' | uniq;
  421.     return 0
  422. }
  423. autotools_env_setup ()
  424. {
  425.     if [[ ${WANT_AUTOMAKE} == "latest" ]]; then
  426.         local pv;
  427.         for pv in ${_LATEST_AUTOMAKE[@]/#*:};
  428.         do
  429.             ROOT=/ has_version "=sys-devel/automake-${pv}*" && export WANT_AUTOMAKE="${pv}";
  430.         done;
  431.         [[ ${WANT_AUTOMAKE} == "latest" ]] && die "Cannot find the latest automake! Tried ${_LATEST_AUTOMAKE}";
  432.     fi;
  433.     [[ ${WANT_AUTOCONF} == "latest" ]] && export WANT_AUTOCONF=2.5
  434. }
  435. autotools_get_auxdir ()
  436. {
  437.     autotools_check_macro_val AC_CONFIG_AUX_DIR
  438. }
  439. autotools_get_subdirs ()
  440. {
  441.     autotools_check_macro_val AC_CONFIG_SUBDIRS
  442. }
  443. autotools_m4dir_include ()
  444. {
  445.     _autotools_m4dir_include ${AT_M4DIR}
  446. }
  447. autotools_m4sysdir_include ()
  448. {
  449.     _autotools_m4dir_include $(eval echo ${AT_SYS_M4DIR})
  450. }
  451. autotools_run_tool ()
  452. {
  453.     local autofail=true m4flags=false;
  454.     while [[ -n $1 ]]; do
  455.         case $1 in
  456.             --at-no-fail)
  457.                 autofail=false
  458.             ;;
  459.             --at-m4flags)
  460.                 m4flags=true
  461.             ;;
  462.             *)
  463.                 break
  464.             ;;
  465.         esac;
  466.         shift;
  467.     done;
  468.     if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
  469.         ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase";
  470.     fi;
  471.     autotools_env_setup;
  472.     local STDERR_TARGET="${T}/$1.out";
  473.     if [[ -e ${STDERR_TARGET} ]]; then
  474.         local i=1;
  475.         while :; do
  476.             STDERR_TARGET="${T}/$1-${i}.out";
  477.             [[ -e ${STDERR_TARGET} ]] || break;
  478.             : $(( i++ ));
  479.         done;
  480.     fi;
  481.     if ${m4flags}; then
  482.         set -- "${1}" $(autotools_m4dir_include) "${@:2}" $(autotools_m4sysdir_include);
  483.     fi;
  484.     printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}";
  485.     ebegin "Running $@";
  486.     "$@" >> "${STDERR_TARGET}" 2>&1;
  487.     if ! eend $? && ${autofail}; then
  488.         echo;
  489.         eerror "Failed Running $1 !";
  490.         eerror;
  491.         eerror "Include in your bugreport the contents of:";
  492.         eerror;
  493.         eerror "  ${STDERR_TARGET}";
  494.         echo;
  495.         die "Failed Running $1 !";
  496.     fi
  497. }
  498. built_with_use ()
  499. {
  500.     local hidden="no";
  501.     if [[ $1 == "--hidden" ]]; then
  502.         hidden="yes";
  503.         shift;
  504.     fi;
  505.     local missing_action="die";
  506.     if [[ $1 == "--missing" ]]; then
  507.         missing_action=$2;
  508.         shift;
  509.         shift;
  510.         case ${missing_action} in
  511.             true | false | die)
  512.  
  513.             ;;
  514.             *)
  515.                 die "unknown action '${missing_action}'"
  516.             ;;
  517.         esac;
  518.     fi;
  519.     local opt=$1;
  520.     [[ ${opt:0:1} = "-" ]] && shift || opt="-a";
  521.     local PKG=$(best_version $1);
  522.     [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
  523.     shift;
  524.     local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE;
  525.     local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE;
  526.     if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
  527.         case ${missing_action} in
  528.             true)
  529.                 return 0
  530.             ;;
  531.             false)
  532.                 return 1
  533.             ;;
  534.             die)
  535.                 die "Unable to determine what USE flags $PKG was built with"
  536.             ;;
  537.         esac;
  538.     fi;
  539.     if [[ ${hidden} == "no" ]]; then
  540.         local IUSE_BUILT=($(<"${IUSEFILE}"));
  541.         local expand;
  542.         for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
  543.         do
  544.             if [[ $1 == ${expand}_* ]]; then
  545.                 expand="";
  546.                 break;
  547.             fi;
  548.         done;
  549.         if [[ -n ${expand} ]]; then
  550.             if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
  551.                 case ${missing_action} in
  552.                     true)
  553.                         return 0
  554.                     ;;
  555.                     false)
  556.                         return 1
  557.                     ;;
  558.                     die)
  559.                         die "$PKG does not actually support the $1 USE flag!"
  560.                     ;;
  561.                 esac;
  562.             fi;
  563.         fi;
  564.     fi;
  565.     local USE_BUILT=$(<${USEFILE});
  566.     while [[ $# -gt 0 ]]; do
  567.         if [[ ${opt} = "-o" ]]; then
  568.             has $1 ${USE_BUILT} && return 0;
  569.         else
  570.             has $1 ${USE_BUILT} || return 1;
  571.         fi;
  572.         shift;
  573.     done;
  574.     [[ ${opt} = "-a" ]]
  575. }
  576. check_license ()
  577. {
  578.     die "you no longer need this as portage supports ACCEPT_LICENSE itself"
  579. }
  580. config_rpath_update ()
  581. {
  582.     local dst src=$(type -P gettext | sed 's:bin/gettext:share/gettext/config.rpath:');
  583.     [[ $# -eq 0 ]] && set -- $(find -name config.rpath);
  584.     [[ $# -eq 0 ]] && return 0;
  585.     einfo "Updating all config.rpath files";
  586.     for dst in "$@";
  587.     do
  588.         einfo "   ${dst}";
  589.         cp "${src}" "${dst}" || die;
  590.     done
  591. }
  592. darwintoolize ()
  593. {
  594.     die "Use elibtoolize"
  595. }
  596. delete_all_version_separators ()
  597. {
  598.     replace_all_version_separators "" "${1}"
  599. }
  600. delete_version_separator ()
  601. {
  602.     replace_version_separator "${1}" "" "${2}"
  603. }
  604. doicon ()
  605. {
  606.     ( local i j ret;
  607.     insinto /usr/share/pixmaps;
  608.     for i in "$@";
  609.     do
  610.         if [[ -f ${i} ]]; then
  611.             doins "${i}";
  612.             ((ret+=$?));
  613.         else
  614.             if [[ -d ${i} ]]; then
  615.                 for j in "${i}"/*.png;
  616.                 do
  617.                     doins "${j}";
  618.                     ((ret+=$?));
  619.                 done;
  620.             else
  621.                 ((++ret));
  622.             fi;
  623.         fi;
  624.     done;
  625.     exit ${ret} )
  626. }
  627. domenu ()
  628. {
  629.     ( local i j ret=0;
  630.     insinto /usr/share/applications;
  631.     for i in "$@";
  632.     do
  633.         if [[ -f ${i} ]]; then
  634.             doins "${i}";
  635.             ((ret+=$?));
  636.         else
  637.             if [[ -d ${i} ]]; then
  638.                 for j in "${i}"/*.desktop;
  639.                 do
  640.                     doins "${j}";
  641.                     ((ret+=$?));
  642.                 done;
  643.             else
  644.                 ((++ret));
  645.             fi;
  646.         fi;
  647.     done;
  648.     exit ${ret} )
  649. }
  650. eaclocal ()
  651. {
  652.     [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && autotools_run_tool --at-m4flags aclocal "$@" $(eaclocal_amflags)
  653. }
  654. eaclocal_amflags ()
  655. {
  656.     local aclocal_opts amflags_file;
  657.     for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in;
  658.     do
  659.         [[ -e ${amflags_file} ]] || continue;
  660.         autotools_env_setup;
  661.         aclocal_opts=$(sed -n           "/^ACLOCAL_AMFLAGS[[:space:]]*=/{             # match the first line
  662.               s:[^=]*=::p;            # then gobble up all escaped lines
  663.               : nextline /\\\\$/{ n; p; b nextline; }           }" ${amflags_file});
  664.         eval aclocal_opts=\""${aclocal_opts}"\";
  665.         break;
  666.     done;
  667.     echo ${aclocal_opts}
  668. }
  669. eautoconf ()
  670. {
  671.     if [[ ! -f configure.ac && ! -f configure.in ]]; then
  672.         echo;
  673.         eerror "No configure.{ac,in} present in '${PWD}'!";
  674.         echo;
  675.         die "No configure.{ac,in} present!";
  676.     fi;
  677.     autotools_run_tool --at-m4flags autoconf "$@"
  678. }
  679. eautoheader ()
  680. {
  681.     [[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0;
  682.     autotools_run_tool --at-no-fail --at-m4flags autoheader "$@"
  683. }
  684. eautomake ()
  685. {
  686.     local extra_opts;
  687.     local makefile_name;
  688.     for makefile_name in {GNUmakefile,{M,m}akefile}.am "";
  689.     do
  690.         [[ -f ${makefile_name} ]] && break;
  691.     done;
  692.     if [[ -z ${makefile_name} ]]; then
  693.         local am_init_automake=$(sed -n '/AM_INIT_AUTOMAKE/{s:#.*::;s:\<dnl\>.*::;p}' configure.??);
  694.         if [[ ${am_init_automake} != *"AM_INIT_AUTOMAKE"* ]]; then
  695.             return 0;
  696.         fi;
  697.     else
  698.         if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name%.am}.in ]]; then
  699.             local used_automake;
  700.             local installed_automake;
  701.             installed_automake=$(WANT_AUTOMAKE= automake --version | head -n 1 |            sed -e 's:.*(GNU automake) ::');
  702.             used_automake=$(head -n 1 < ${makefile_name%.am}.in |           sed -e 's:.*by automake \(.*\) from .*:\1:');
  703.             if [[ ${installed_automake} != ${used_automake} ]]; then
  704.                 einfo "Automake used for the package (${used_automake}) differs from";
  705.                 einfo "the installed version (${installed_automake}).";
  706.                 eautoreconf;
  707.                 return 0;
  708.             fi;
  709.         fi;
  710.     fi;
  711.     [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS && -f README ]] || extra_opts="${extra_opts} --foreign";
  712.     autotools_run_tool automake --add-missing --copy ${extra_opts} "$@"
  713. }
  714. eautopoint ()
  715. {
  716.     autotools_run_tool autopoint "$@"
  717. }
  718. eautoreconf ()
  719. {
  720.     local x auxdir g;
  721.     if [[ -z ${AT_NO_RECURSIVE} ]]; then
  722.         for x in $(autotools_get_subdirs);
  723.         do
  724.             if [[ -d ${x} ]]; then
  725.                 pushd "${x}" > /dev/null;
  726.                 AT_NOELIBTOOLIZE="yes" eautoreconf;
  727.                 popd > /dev/null;
  728.             fi;
  729.         done;
  730.     fi;
  731.     auxdir=$(autotools_get_auxdir);
  732.     einfo "Running eautoreconf in '${PWD}' ...";
  733.     [[ -n ${auxdir} ]] && mkdir -p ${auxdir};
  734.     eaclocal;
  735.     [[ ${CHOST} == *-darwin* ]] && g=g;
  736.     if ${LIBTOOLIZE:-${g}libtoolize} -n --install &>/dev/null; then
  737.         _elibtoolize --copy --force --install;
  738.     else
  739.         _elibtoolize --copy --force;
  740.     fi;
  741.     eautoconf;
  742.     eautoheader;
  743.     [[ ${AT_NOEAUTOMAKE} != "yes" ]] && FROM_EAUTORECONF="yes" eautomake ${AM_OPTS};
  744.     [[ ${AT_NOELIBTOOLIZE} == "yes" ]] && return 0;
  745.     S=${PWD} elibtoolize --force;
  746.     return 0
  747. }
  748. ebeep ()
  749. {
  750.     local n;
  751.     if [[ -z ${EBEEP_IGNORE} ]]; then
  752.         for ((n=1 ; n <= ${1:-5} ; n++))
  753.         do
  754.             echo -ne "\a";
  755.             sleep 0.1 &>/dev/null;
  756.             sleep 0,1 &>/dev/null;
  757.             echo -ne "\a";
  758.             sleep 1;
  759.         done;
  760.     fi
  761. }
  762. econf_build ()
  763. {
  764.     tc-env_build econf --build=${CBUILD:-${CHOST}} "$@"
  765. }
  766. ecvs_clean ()
  767. {
  768.     [[ -z $* ]] && set -- .;
  769.     find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
  770.     find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
  771. }
  772. edos2unix ()
  773. {
  774.     [[ $# -eq 0 ]] && return 0;
  775.     sed -i 's/\r$//' -- "$@" || die
  776. }
  777. egetent ()
  778. {
  779.     local db=$1 key=$2;
  780.     [[ $# -ge 3 ]] && die "usage: egetent <database> <key>";
  781.     case ${db} in
  782.         passwd | group)
  783.  
  784.         ;;
  785.         *)
  786.             die "sorry, database '${db}' not yet supported; file a bug"
  787.         ;;
  788.     esac;
  789.     case ${CHOST} in
  790.         *-darwin[678])
  791.             case ${key} in
  792.                 *[!0-9]*)
  793.                     nidump ${db} . | awk -F: "(\$1 ~ /^${key}\$/) {print;exit;}"
  794.                 ;;
  795.                 *)
  796.                     nidump ${db} . | awk -F: "(\$3 == ${key}) {print;exit;}"
  797.                 ;;
  798.             esac
  799.         ;;
  800.         *-darwin*)
  801.             local mykey;
  802.             case ${db} in
  803.                 passwd)
  804.                     db="Users" mykey="UniqueID"
  805.                 ;;
  806.                 group)
  807.                     db="Groups" mykey="PrimaryGroupID"
  808.                 ;;
  809.             esac;
  810.             case ${key} in
  811.                 *[!0-9]*)
  812.                     dscl . -read /${db}/${key} 2> /dev/null | grep RecordName
  813.                 ;;
  814.                 *)
  815.                     dscl . -search /${db} ${mykey} ${key} 2> /dev/null
  816.                 ;;
  817.             esac
  818.         ;;
  819.         *-freebsd* | *-dragonfly*)
  820.             case ${db} in
  821.                 passwd)
  822.                     db="user"
  823.                 ;;
  824.                 *)
  825.  
  826.                 ;;
  827.             esac;
  828.             local opts;
  829.             if [[ ${key} == [[:digit:]]* ]]; then
  830.                 [[ ${db} == "user" ]] && opts="-u" || opts="-g";
  831.             fi;
  832.             pw show ${db} ${opts} "${key}" -q
  833.         ;;
  834.         *-netbsd* | *-openbsd*)
  835.             grep "${key}:\*:" /etc/${db}
  836.         ;;
  837.         *)
  838.             nscd -i "${db}" 2> /dev/null;
  839.             getent "${db}" "${key}"
  840.         ;;
  841.     esac
  842. }
  843. egethome ()
  844. {
  845.     local pos;
  846.     [[ $# -eq 1 ]] || die "usage: egethome <user>";
  847.     case ${CHOST} in
  848.         *-darwin* | *-freebsd* | *-dragonfly*)
  849.             pos=9
  850.         ;;
  851.         *)
  852.             pos=6
  853.         ;;
  854.     esac;
  855.     egetent passwd "$1" | cut -d: -f${pos}
  856. }
  857. egetshell ()
  858. {
  859.     local pos;
  860.     [[ $# -eq 1 ]] || die "usage: egetshell <user>";
  861.     case ${CHOST} in
  862.         *-darwin* | *-freebsd* | *-dragonfly*)
  863.             pos=10
  864.         ;;
  865.         *)
  866.             pos=7
  867.         ;;
  868.     esac;
  869.     egetent passwd "$1" | cut -d: -f${pos}
  870. }
  871. elibtoolize ()
  872. {
  873.     local x;
  874.     local do_portage="no";
  875.     local do_reversedeps="no";
  876.     local do_only_patches="no";
  877.     local do_uclibc="yes";
  878.     local deptoremove=;
  879.     local do_shallow="no";
  880.     local force="false";
  881.     local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed";
  882.     for x in "$@";
  883.     do
  884.         case ${x} in
  885.             --portage)
  886.                 do_portage="yes"
  887.             ;;
  888.             --reverse-deps)
  889.                 do_reversedeps="yes";
  890.                 elt_patches+=" fix-relink"
  891.             ;;
  892.             --patch-only)
  893.                 do_only_patches="yes"
  894.             ;;
  895.             --remove-internal-dep=*)
  896.                 deptoremove=${x#--remove-internal-dep=};
  897.                 [[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep"
  898.             ;;
  899.             --shallow)
  900.                 do_shallow="yes"
  901.             ;;
  902.             --no-uclibc)
  903.                 do_uclibc="no"
  904.             ;;
  905.             --force)
  906.                 force="true"
  907.             ;;
  908.             *)
  909.                 eerror "Invalid elibtoolize option: ${x}";
  910.                 die "elibtoolize called with ${x} ??"
  911.             ;;
  912.         esac;
  913.     done;
  914.     [[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf";
  915.     case ${CHOST} in
  916.         *-aix*)
  917.             elt_patches+=" hardcode aixrtl aix-noundef"
  918.         ;;
  919.         *-darwin*)
  920.             elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf"
  921.         ;;
  922.         *-solaris*)
  923.             elt_patches+=" sol2-conf"
  924.         ;;
  925.         *-freebsd*)
  926.             elt_patches+=" fbsd-conf fbsd-ltconf"
  927.         ;;
  928.         *-hpux*)
  929.             elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc"
  930.         ;;
  931.         *-irix*)
  932.             elt_patches+=" irix-ltmain"
  933.         ;;
  934.         *-mint*)
  935.             elt_patches+=" mint-conf"
  936.         ;;
  937.     esac;
  938.     if $(tc-getLD) --version 2>&1 | grep -qs 'GNU gold'; then
  939.         elt_patches+=" gold-conf";
  940.     fi;
  941.     set --;
  942.     if [[ ${do_shallow} == "yes" ]]; then
  943.         [[ -f ${S}/ltmain.sh ]] && set -- "${S}";
  944.     else
  945.         set -- $(find "${S}" -name ltmain.sh -printf '%h ');
  946.     fi;
  947.     local d p;
  948.     for d in "$@";
  949.     do
  950.         export ELT_APPLIED_PATCHES=;
  951.         if [[ -f ${d}/.elibtoolized ]]; then
  952.             ${force} || continue;
  953.         fi;
  954.         local outfunc="einfo";
  955.         [[ -f ${d}/.elibtoolized ]] && outfunc="ewarn";
  956.         ${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/";
  957.         if [[ ${outfunc} == "ewarn" ]]; then
  958.             ewarn "  We've already been run in this tree; you should";
  959.             ewarn "  avoid this if possible (perhaps by filing a bug)";
  960.         fi;
  961.         for p in ${elt_patches};
  962.         do
  963.             local ret=0;
  964.             case ${p} in
  965.                 portage)
  966.                     if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  967.                         ELT_walk_patches "${d}/ltmain.sh" "${p}";
  968.                         ret=$?;
  969.                     fi
  970.                 ;;
  971.                 rem-int-dep)
  972.                     ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}";
  973.                     ret=$?
  974.                 ;;
  975.                 fix-relink)
  976.                     if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh"; then
  977.                         ELT_walk_patches "${d}/ltmain.sh" "${p}";
  978.                         ret=$?;
  979.                     fi
  980.                 ;;
  981.                 max_cmd_len)
  982.                     if grep -qs 'max_cmd_len' "${d}/ltmain.sh"; then
  983.                         ELT_walk_patches "${d}/ltmain.sh" "${p}";
  984.                         ret=$?;
  985.                     fi
  986.                 ;;
  987.                 as-needed)
  988.                     ELT_walk_patches "${d}/ltmain.sh" "${p}";
  989.                     ret=$?
  990.                 ;;
  991.                 uclibc-conf)
  992.                     if grep -qs 'Transform linux' "${d}/configure"; then
  993.                         ELT_walk_patches "${d}/configure" "${p}";
  994.                         ret=$?;
  995.                     else
  996.                         if [[ ! -e ${d}/configure ]] && grep -qs 'Transform linux' "${d}/../configure"; then
  997.                             ELT_walk_patches "${d}/../configure" "${p}";
  998.                             ret=$?;
  999.                         fi;
  1000.                     fi
  1001.                 ;;
  1002.                 uclibc-ltconf)
  1003.                     if [[ -s ${d}/ltconfig ]]; then
  1004.                         ELT_walk_patches "${d}/ltconfig" "${p}";
  1005.                         ret=$?;
  1006.                     fi
  1007.                 ;;
  1008.                 fbsd-conf)
  1009.                     if grep -qs 'version_type=freebsd-' "${d}/configure"; then
  1010.                         ELT_walk_patches "${d}/configure" "${p}";
  1011.                         ret=$?;
  1012.                     else
  1013.                         if [[ ! -e ${d}/configure ]] && grep -qs 'version_type=freebsd-' "${d}/../configure"; then
  1014.                             ELT_walk_patches "${d}/../configure" "${p}";
  1015.                             ret=$?;
  1016.                         fi;
  1017.                     fi
  1018.                 ;;
  1019.                 fbsd-ltconf)
  1020.                     if [[ -s ${d}/ltconfig ]]; then
  1021.                         ELT_walk_patches "${d}/ltconfig" "${p}";
  1022.                         ret=$?;
  1023.                     fi
  1024.                 ;;
  1025.                 darwin-conf)
  1026.                     if grep -qs '&& echo \.so ||' "${d}/configure"; then
  1027.                         ELT_walk_patches "${d}/configure" "${p}";
  1028.                         ret=$?;
  1029.                     else
  1030.                         if [[ ! -e ${d}/configure ]] && grep -qs '&& echo \.so ||' "${d}/../configure"; then
  1031.                             ELT_walk_patches "${d}/../configure" "${p}";
  1032.                             ret=$?;
  1033.                         fi;
  1034.                     fi
  1035.                 ;;
  1036.                 darwin-ltconf)
  1037.                     if [[ -s ${d}/ltconfig ]]; then
  1038.                         ELT_walk_patches "${d}/ltconfig" "${p}";
  1039.                         ret=$?;
  1040.                     fi
  1041.                 ;;
  1042.                 darwin-ltmain)
  1043.                     if [[ -e ${d}/ltmain.sh ]] && ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh"; then
  1044.                         ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1045.                         ret=$?;
  1046.                     fi
  1047.                 ;;
  1048.                 aixrtl | hpux-conf)
  1049.                     ret=1;
  1050.                     local subret=0;
  1051.                     while [[ $subret -eq 0 ]]; do
  1052.                         subret=1;
  1053.                         if [[ -e ${d}/configure ]]; then
  1054.                             ELT_walk_patches "${d}/configure" "${p}";
  1055.                             subret=$?;
  1056.                         else
  1057.                             if [[ ! -e ${d}/configure && -e ${d}/../configure ]]; then
  1058.                                 ELT_walk_patches "${d}/../configure" "${p}";
  1059.                                 subret=$?;
  1060.                             fi;
  1061.                         fi;
  1062.                         if [[ $subret -eq 0 ]]; then
  1063.                             ret=0;
  1064.                         fi;
  1065.                     done
  1066.                 ;;
  1067.                 mint-conf | gold-conf | sol2-conf)
  1068.                     ret=1;
  1069.                     local subret=1;
  1070.                     if [[ -e ${d}/configure ]]; then
  1071.                         ELT_walk_patches "${d}/configure" "${p}";
  1072.                         subret=$?;
  1073.                     else
  1074.                         if [[ -e ${d}/../configure ]]; then
  1075.                             ELT_walk_patches "${d}/../configure" "${p}";
  1076.                             subret=$?;
  1077.                         else
  1078.                             if [[ -e ${d}/../../configure ]]; then
  1079.                                 ELT_walk_patches "${d}/../../configure" "${p}";
  1080.                                 subret=$?;
  1081.                             fi;
  1082.                         fi;
  1083.                     fi;
  1084.                     if [[ $subret -eq 0 ]]; then
  1085.                         ret=0;
  1086.                     fi
  1087.                 ;;
  1088.                 install-sh)
  1089.                     ELT_walk_patches "${d}/install-sh" "${p}";
  1090.                     ret=$?
  1091.                 ;;
  1092.                 cross)
  1093.                     if tc-is-cross-compiler; then
  1094.                         ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1095.                         ret=$?;
  1096.                     fi
  1097.                 ;;
  1098.                 *)
  1099.                     ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1100.                     ret=$?
  1101.                 ;;
  1102.             esac;
  1103.             if [[ ${ret} -ne 0 ]]; then
  1104.                 case ${p} in
  1105.                     relink)
  1106.                         local version=$(ELT_libtool_version "${d}/ltmain.sh");
  1107.                         if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
  1108.                             ewarn "  Could not apply relink.patch!";
  1109.                         fi
  1110.                     ;;
  1111.                     portage)
  1112.                         if [[ ${do_portage} == "yes" ]]; then
  1113.                             if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  1114.                                 echo;
  1115.                                 eerror "Portage patch requested, but failed to apply!";
  1116.                                 eerror "Please file a bug report to add a proper patch.";
  1117.                                 die "Portage patch requested, but failed to apply!";
  1118.                             fi;
  1119.                         else
  1120.                             if grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  1121.                                 :;
  1122.                             else
  1123.                                 local version=$(ELT_libtool_version "${d}"/ltmain.sh);
  1124.                                 echo;
  1125.                                 eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
  1126.                                 eerror "Please file a bug report to add a proper patch.";
  1127.                                 die "Portage patch failed to apply!";
  1128.                             fi;
  1129.                             ELT_APPLIED_PATCHES="portage";
  1130.                         fi
  1131.                     ;;
  1132.                     uclibc-*)
  1133.                         [[ ${CHOST} == *-uclibc ]] && ewarn "  uClibc patch set '${p}' failed to apply!"
  1134.                     ;;
  1135.                     fbsd-*)
  1136.                         if [[ ${CHOST} == *-freebsd* ]]; then
  1137.                             if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux'                                 "${d}/configure" "${d}/../configure" 2>/dev/null) ]]; then
  1138.                                 eerror "  FreeBSD patch set '${p}' failed to apply!";
  1139.                                 die "FreeBSD patch set '${p}' failed to apply!";
  1140.                             fi;
  1141.                         fi
  1142.                     ;;
  1143.                     darwin-*)
  1144.                         [[ ${CHOST} == *"-darwin"* ]] && ewarn "  Darwin patch set '${p}' failed to apply!"
  1145.                     ;;
  1146.                 esac;
  1147.             fi;
  1148.         done;
  1149.         if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
  1150.             if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
  1151.                 ewarn "Cannot apply any patches, please file a bug about this";
  1152.                 die;
  1153.             fi;
  1154.         fi;
  1155.         rm -f "${d}/libtool";
  1156.          > "${d}/.elibtoolized";
  1157.     done
  1158. }
  1159. elt_patch_dir ()
  1160. {
  1161.     local d="${ECLASSDIR}/ELT-patches";
  1162.     if [[ ! -d ${d} ]]; then
  1163.         d="${ECLASSDIR_LOCAL}/ELT-patches";
  1164.     fi;
  1165.     echo "${d}"
  1166. }
  1167. emktemp ()
  1168. {
  1169.     local exe="touch";
  1170.     [[ $1 == -d ]] && exe="mkdir" && shift;
  1171.     local topdir=$1;
  1172.     if [[ -z ${topdir} ]]; then
  1173.         [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
  1174.     fi;
  1175.     if ! type -P mktemp > /dev/null; then
  1176.         local tmp=/;
  1177.         while [[ -e ${tmp} ]]; do
  1178.             tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
  1179.         done;
  1180.         ${exe} "${tmp}" || ${exe} -p "${tmp}";
  1181.         echo "${tmp}";
  1182.     else
  1183.         if [[ ${exe} == "touch" ]]; then
  1184.             TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
  1185.         else
  1186.             TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
  1187.         fi;
  1188.     fi
  1189. }
  1190. enewgroup ()
  1191. {
  1192.     _assert_pkg_ebuild_phase ${FUNCNAME};
  1193.     local egroup=$1;
  1194.     shift;
  1195.     if [[ -z ${egroup} ]]; then
  1196.         eerror "No group specified !";
  1197.         die "Cannot call enewgroup without a group";
  1198.     fi;
  1199.     if [[ -n $(egetent group "${egroup}") ]]; then
  1200.         return 0;
  1201.     fi;
  1202.     einfo "Adding group '${egroup}' to your system ...";
  1203.     local egid=$1;
  1204.     shift;
  1205.     if [[ ! -z ${egid} ]]; then
  1206.         if [[ ${egid} -gt 0 ]]; then
  1207.             if [[ -n $(egetent group ${egid}) ]]; then
  1208.                 egid="next available; requested gid taken";
  1209.             fi;
  1210.         else
  1211.             eerror "Groupid given but is not greater than 0 !";
  1212.             die "${egid} is not a valid GID";
  1213.         fi;
  1214.     else
  1215.         egid="next available";
  1216.     fi;
  1217.     einfo " - Groupid: ${egid}";
  1218.     if [[ $# -gt 0 ]]; then
  1219.         die "extra arguments no longer supported; please file a bug";
  1220.     fi;
  1221.     function _enewgroup_next_gid ()
  1222.     {
  1223.         if [[ ${egid} == *[!0-9]* ]]; then
  1224.             for ((egid = 101; egid <= 999; egid++))
  1225.             do
  1226.                 [[ -z $(egetent group ${egid}) ]] && break;
  1227.             done;
  1228.         fi
  1229.     };
  1230.     case ${CHOST} in
  1231.         *-darwin*)
  1232.             _enewgroup_next_gid;
  1233.             dscl . create "/groups/${egroup}" gid ${egid};
  1234.             dscl . create "/groups/${egroup}" passwd '*'
  1235.         ;;
  1236.         *-freebsd* | *-dragonfly*)
  1237.             _enewgroup_next_gid;
  1238.             pw groupadd "${egroup}" -g ${egid} || die
  1239.         ;;
  1240.         *-netbsd*)
  1241.             _enewgroup_next_gid;
  1242.             groupadd -g ${egid} "${egroup}" || die
  1243.         ;;
  1244.         *)
  1245.             local opts;
  1246.             if [[ ${egid} == *[!0-9]* ]]; then
  1247.                 opts="";
  1248.             else
  1249.                 opts="-g ${egid}";
  1250.             fi;
  1251.             groupadd -r ${opts} "${egroup}" || die
  1252.         ;;
  1253.     esac
  1254. }
  1255. enewuser ()
  1256. {
  1257.     _assert_pkg_ebuild_phase ${FUNCNAME};
  1258.     local euser=$1;
  1259.     shift;
  1260.     if [[ -z ${euser} ]]; then
  1261.         eerror "No username specified !";
  1262.         die "Cannot call enewuser without a username";
  1263.     fi;
  1264.     if [[ -n $(egetent passwd "${euser}") ]]; then
  1265.         return 0;
  1266.     fi;
  1267.     einfo "Adding user '${euser}' to your system ...";
  1268.     local opts=();
  1269.     local euid=$1;
  1270.     shift;
  1271.     if [[ -n ${euid} && ${euid} != -1 ]]; then
  1272.         if [[ ${euid} -gt 0 ]]; then
  1273.             if [[ -n $(egetent passwd ${euid}) ]]; then
  1274.                 euid="next";
  1275.             fi;
  1276.         else
  1277.             eerror "Userid given but is not greater than 0 !";
  1278.             die "${euid} is not a valid UID";
  1279.         fi;
  1280.     else
  1281.         euid="next";
  1282.     fi;
  1283.     if [[ ${euid} == "next" ]]; then
  1284.         for ((euid = 101; euid <= 999; euid++))
  1285.         do
  1286.             [[ -z $(egetent passwd ${euid}) ]] && break;
  1287.         done;
  1288.     fi;
  1289.     opts+=(-u ${euid});
  1290.     einfo " - Userid: ${euid}";
  1291.     local eshell=$1;
  1292.     shift;
  1293.     if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then
  1294.         if [[ ! -e ${ROOT}${eshell} ]]; then
  1295.             eerror "A shell was specified but it does not exist !";
  1296.             die "${eshell} does not exist in ${ROOT}";
  1297.         fi;
  1298.         if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then
  1299.             eerror "Do not specify ${eshell} yourself, use -1";
  1300.             die "Pass '-1' as the shell parameter";
  1301.         fi;
  1302.     else
  1303.         for eshell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null;
  1304.         do
  1305.             [[ -x ${ROOT}${eshell} ]] && break;
  1306.         done;
  1307.         if [[ ${eshell} == "/dev/null" ]]; then
  1308.             eerror "Unable to identify the shell to use, proceeding with userland default.";
  1309.             case ${USERLAND} in
  1310.                 GNU)
  1311.                     eshell="/bin/false"
  1312.                 ;;
  1313.                 BSD)
  1314.                     eshell="/sbin/nologin"
  1315.                 ;;
  1316.                 Darwin)
  1317.                     eshell="/usr/sbin/nologin"
  1318.                 ;;
  1319.                 *)
  1320.                     die "Unable to identify the default shell for userland ${USERLAND}"
  1321.                 ;;
  1322.             esac;
  1323.         fi;
  1324.     fi;
  1325.     einfo " - Shell: ${eshell}";
  1326.     opts+=(-s "${eshell}");
  1327.     local ehome=$1;
  1328.     shift;
  1329.     if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then
  1330.         ehome="/dev/null";
  1331.     fi;
  1332.     einfo " - Home: ${ehome}";
  1333.     opts+=(-d "${ehome}");
  1334.     local egroups=$1;
  1335.     shift;
  1336.     local g egroups_arr;
  1337.     IFS="," read -r -a egroups_arr <<< "${egroups}";
  1338.     shift;
  1339.     if [[ ${#egroups_arr[@]} -gt 0 ]]; then
  1340.         local defgroup exgroups;
  1341.         for g in "${egroups_arr[@]}";
  1342.         do
  1343.             if [[ -z $(egetent group "${g}") ]]; then
  1344.                 eerror "You must add group ${g} to the system first";
  1345.                 die "${g} is not a valid GID";
  1346.             fi;
  1347.             if [[ -z ${defgroup} ]]; then
  1348.                 defgroup=${g};
  1349.             else
  1350.                 exgroups+=",${g}";
  1351.             fi;
  1352.         done;
  1353.         opts+=(-g "${defgroup}");
  1354.         if [[ ! -z ${exgroups} ]]; then
  1355.             opts+=(-G "${exgroups:1}");
  1356.         fi;
  1357.     fi;
  1358.     einfo " - Groups: ${egroups:-(none)}";
  1359.     if [[ $# -gt 0 ]]; then
  1360.         die "extra arguments no longer supported; please file a bug";
  1361.     else
  1362.         local comment="added by portage for ${PN}";
  1363.         opts+=(-c "${comment}");
  1364.         einfo " - GECOS: ${comment}";
  1365.     fi;
  1366.     case ${CHOST} in
  1367.         *-darwin*)
  1368.             dscl . create "/users/${euser}" uid ${euid};
  1369.             dscl . create "/users/${euser}" shell "${eshell}";
  1370.             dscl . create "/users/${euser}" home "${ehome}";
  1371.             dscl . create "/users/${euser}" realname "added by portage for ${PN}";
  1372.             for g in "${egroups_arr[@]}";
  1373.             do
  1374.                 dscl . merge "/groups/${g}" users "${euser}";
  1375.             done
  1376.         ;;
  1377.         *-freebsd* | *-dragonfly*)
  1378.             pw useradd "${euser}" "${opts[@]}" || die
  1379.         ;;
  1380.         *-netbsd*)
  1381.             useradd "${opts[@]}" "${euser}" || die
  1382.         ;;
  1383.         *-openbsd*)
  1384.             useradd -u ${euid} -s "${eshell}" -d "${ehome}" -g "${egroups}" "${euser}" || die
  1385.         ;;
  1386.         *)
  1387.             useradd -r "${opts[@]}" "${euser}" || die
  1388.         ;;
  1389.     esac;
  1390.     if [[ ! -e ${ROOT}/${ehome} ]]; then
  1391.         einfo " - Creating ${ehome} in ${ROOT}";
  1392.         mkdir -p "${ROOT}/${ehome}";
  1393.         chown "${euser}" "${ROOT}/${ehome}";
  1394.         chmod 755 "${ROOT}/${ehome}";
  1395.     fi
  1396. }
  1397. epatch ()
  1398. {
  1399.     function _epatch_draw_line ()
  1400.     {
  1401.         [[ -z $1 ]] && set "$(printf "%65s" '')";
  1402.         echo "${1//?/=}"
  1403.     };
  1404.     unset P4CONFIG P4PORT P4USER;
  1405.     local EPATCH_OPTS=(${EPATCH_OPTS[*]});
  1406.     while [[ $# -gt 0 ]]; do
  1407.         case $1 in
  1408.             -*)
  1409.                 EPATCH_OPTS+=("$1")
  1410.             ;;
  1411.             *)
  1412.                 break
  1413.             ;;
  1414.         esac;
  1415.         shift;
  1416.     done;
  1417.     if [[ $# -gt 1 ]]; then
  1418.         local m;
  1419.         for m in "$@";
  1420.         do
  1421.             epatch "${m}";
  1422.         done;
  1423.         return 0;
  1424.     fi;
  1425.     local SINGLE_PATCH="no";
  1426.     [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}";
  1427.     if [[ -f $1 ]]; then
  1428.         SINGLE_PATCH="yes";
  1429.         set -- "$1";
  1430.         local EPATCH_SUFFIX=$1;
  1431.     else
  1432.         if [[ -d $1 ]]; then
  1433.             set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
  1434.        else
  1435.            if [[ -f ${EPATCH_SOURCE}/$1 ]]; then
  1436.                epatch "${EPATCH_SOURCE}/$1";
  1437.                return $?;
  1438.            else
  1439.                [[ $# -ne 0 ]] && EPATCH_SOURCE=$1;
  1440.                echo;
  1441.                eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:";
  1442.                eerror;
  1443.                eerror "  ${EPATCH_SOURCE}";
  1444.                eerror "  ( ${EPATCH_SOURCE##*/} )";
  1445.                echo;
  1446.                die "Cannot find \$EPATCH_SOURCE!";
  1447.            fi;
  1448.        fi;
  1449.    fi;
  1450.    EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
  1451.    local PIPE_CMD;
  1452.    case ${EPATCH_SUFFIX##*\.} in
  1453.        xz)
  1454.            PIPE_CMD="xz -dc"
  1455.        ;;
  1456.        lzma)
  1457.            PIPE_CMD="lzma -dc"
  1458.        ;;
  1459.        bz2)
  1460.            PIPE_CMD="bzip2 -dc"
  1461.        ;;
  1462.        gz | Z | z)
  1463.            PIPE_CMD="gzip -dc"
  1464.        ;;
  1465.        ZIP | zip)
  1466.            PIPE_CMD="unzip -p"
  1467.        ;;
  1468.        *)
  1469.  
  1470.        ;;
  1471.    esac;
  1472.    [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}";
  1473.    local x;
  1474.    for x in "$@";
  1475.    do
  1476.        [[ ! -f ${x} ]] && continue;
  1477.        local patchname=${x##*/};
  1478.        local a=${patchname#*_};
  1479.        a=${a%%_*};
  1480.        if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then
  1481.            continue;
  1482.        fi;
  1483.        if [[ -n ${EPATCH_EXCLUDE} ]]; then
  1484.            eshopts_push -o noglob;
  1485.            local ex;
  1486.            for ex in ${EPATCH_EXCLUDE};
  1487.            do
  1488.                if [[ ${patchname} == ${ex} ]]; then
  1489.                    eshopts_pop;
  1490.                    continue 2;
  1491.                fi;
  1492.            done;
  1493.            eshopts_pop;
  1494.        fi;
  1495.        if [[ ${SINGLE_PATCH} == "yes" ]]; then
  1496.            if [[ -n ${EPATCH_SINGLE_MSG} ]]; then
  1497.                einfo "${EPATCH_SINGLE_MSG}";
  1498.            else
  1499.                einfo "Applying ${patchname} ...";
  1500.            fi;
  1501.        else
  1502.            einfo "  ${patchname} ...";
  1503.        fi;
  1504.        local STDERR_TARGET="${T}/${patchname}.out";
  1505.        if [[ -e ${STDERR_TARGET} ]]; then
  1506.            STDERR_TARGET="${T}/${patchname}-$$.out";
  1507.        fi;
  1508.        printf "***** %s *****\nPWD: %s\n\n" "${patchname}" "${PWD}" > "${STDERR_TARGET}";
  1509.        local count=0;
  1510.        local PATCH_TARGET;
  1511.        if [[ -n ${PIPE_CMD} ]]; then
  1512.            PATCH_TARGET="${T}/$$.patch";
  1513.            echo "PIPE_COMMAND:  ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}";
  1514.            if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then
  1515.                echo;
  1516.                eerror "Could not extract patch!";
  1517.                count=5;
  1518.                break;
  1519.            fi;
  1520.        else
  1521.            PATCH_TARGET=${x};
  1522.        fi;
  1523.        local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
  1524.        if [[ -n ${abs_paths} ]]; then
  1525.            count=1;
  1526.            printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}";
  1527.        fi;
  1528.         local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}");
  1529.        if [[ -n ${rel_paths} ]]; then
  1530.            eqawarn "QA Notice: Your patch uses relative paths '../'.";
  1531.            eqawarn " In the future this will cause a failure.";
  1532.            eqawarn "${rel_paths}";
  1533.        fi;
  1534.        local patch_cmd;
  1535.        while [[ ${count} -lt 5 ]]; do
  1536.            patch_cmd="${BASH_ALIASES[patch]:-patch} -p${count} ${EPATCH_OPTS}";
  1537.            ( _epatch_draw_line "***** ${patchname} *****";
  1538.            echo;
  1539.            echo "PATCH COMMAND:  ${patch_cmd} < '${PATCH_TARGET}'";
  1540.            echo;
  1541.            _epatch_draw_line "***** ${patchname} *****";
  1542.            ${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1;
  1543.            ret=$?;
  1544.            echo;
  1545.            echo "patch program exited with status ${ret}";
  1546.            exit ${ret} ) >> "${STDERR_TARGET}";
  1547.            if [ $? -eq 0 ]; then
  1548.                ( _epatch_draw_line "***** ${patchname} *****";
  1549.                echo;
  1550.                echo "ACTUALLY APPLYING ${patchname} ...";
  1551.                echo;
  1552.                _epatch_draw_line "***** ${patchname} *****";
  1553.                ${patch_cmd} < "${PATCH_TARGET}" 2>&1;
  1554.                ret=$?;
  1555.                echo;
  1556.                echo "patch program exited with status ${ret}";
  1557.                exit ${ret} ) >> "${STDERR_TARGET}";
  1558.                if [ $? -ne 0 ]; then
  1559.                    echo;
  1560.                    eerror "A dry-run of patch command succeeded, but actually";
  1561.                    eerror "applying the patch failed!";
  1562.                    count=5;
  1563.                fi;
  1564.                break;
  1565.            fi;
  1566.            : $(( count++ ));
  1567.        done;
  1568.        if [[ -n ${PIPE_CMD} ]]; then
  1569.            rm -f "${PATCH_TARGET}";
  1570.        fi;
  1571.        if [[ ${count} -ge 5 ]]; then
  1572.            echo;
  1573.            eerror "Failed Patch: ${patchname} !";
  1574.            eerror " ( ${PATCH_TARGET} )";
  1575.            eerror;
  1576.            eerror "Include in your bugreport the contents of:";
  1577.            eerror;
  1578.            eerror "  ${STDERR_TARGET}";
  1579.            echo;
  1580.            die "Failed Patch: ${patchname}!";
  1581.        fi;
  1582.        rm -f "${STDERR_TARGET}";
  1583.        cat >> "${T}/epatch.log"  <<-EOF
  1584. PATCH: ${x}
  1585. CMD: ${patch_cmd}
  1586. PWD: ${PWD}
  1587.  
  1588. EOF
  1589.  
  1590.        eend 0;
  1591.    done;
  1592.    [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
  1593.    :
  1594. }
  1595. epatch_user ()
  1596. {
  1597.    [[ $# -ne 0 ]] && die "epatch_user takes no options";
  1598.    local applied="${T}/epatch_user.log";
  1599.    [[ -e ${applied} ]] && return 2;
  1600.    local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
  1601.    for check in ${CATEGORY}/{${P}-${PR},${P},${PN}};
  1602.    do
  1603.        EPATCH_SOURCE=${base}/${CTARGET}/${check};
  1604.        [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check};
  1605.        [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check};
  1606.        if [[ -d ${EPATCH_SOURCE} ]]; then
  1607.            EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch;
  1608.            echo "${EPATCH_SOURCE}" > "${applied}";
  1609.            return 0;
  1610.        fi;
  1611.    done;
  1612.    echo "none" > "${applied}";
  1613.    return 1
  1614. }
  1615. epause ()
  1616. {
  1617.    [[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5}
  1618. }
  1619. epunt_cxx ()
  1620. {
  1621.    local dir=$1;
  1622.    [[ -z ${dir} ]] && dir=${S};
  1623.    ebegin "Removing useless C++ checks";
  1624.    local f;
  1625.    find "${dir}" -name configure | while read f; do
  1626.        patch --no-backup-if-mismatch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null;
  1627.    done;
  1628.    eend 0
  1629. }
  1630. eshopts_pop ()
  1631. {
  1632.    local s;
  1633.    estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
  1634.    if [[ ${s} == "shopt -"* ]]; then
  1635.        eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
  1636.    else
  1637.        set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
  1638.        set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
  1639.    fi
  1640. }
  1641. eshopts_push ()
  1642. {
  1643.    if [[ $1 == -[su] ]]; then
  1644.        estack_push eshopts "$(shopt -p)";
  1645.        [[ $# -eq 0 ]] && return 0;
  1646.        shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
  1647.    else
  1648.        estack_push eshopts $-;
  1649.        [[ $# -eq 0 ]] && return 0;
  1650.        set "$@" || die "${FUNCNAME}: bad options to set: $*";
  1651.    fi
  1652. }
  1653. estack_pop ()
  1654. {
  1655.    [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
  1656.     local __estack_name="__ESTACK_$1__";
  1657.     shift;
  1658.     local __estack_retvar=$1;
  1659.     shift;
  1660.     eval local __estack_i=\${#${__estack_name}\[@\]};
  1661.     [[ $(( --__estack_i )) -eq -1 ]] && return 1;
  1662.     if [[ -n ${__estack_retvar} ]]; then
  1663.         eval ${__estack_retvar}=\"\${${__estack_name}\[${__estack_i}\]}\";
  1664.     fi;
  1665.     eval unset ${__estack_name}\[${__estack_i}\]
  1666. }
  1667. estack_push ()
  1668. {
  1669.     [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments";
  1670.     local stack_name="__ESTACK_$1__";
  1671.     shift;
  1672.     eval ${stack_name}+=\( \"\$@\" \)
  1673. }
  1674. esvn_clean ()
  1675. {
  1676.     [[ -z $* ]] && set -- .;
  1677.     find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
  1678. }
  1679. eumask_pop ()
  1680. {
  1681.     [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options";
  1682.     local s;
  1683.     estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
  1684.     umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
  1685. }
  1686. eumask_push ()
  1687. {
  1688.     estack_push eumask "$(umask)";
  1689.     umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
  1690. }
  1691. fdo-mime_desktop_database_update ()
  1692. {
  1693.     has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=;
  1694.     has "${EAPI:-0}" 0 1 2 && ! use prefix && EROOT="${ROOT}";
  1695.     if [ -x "${EPREFIX}/usr/bin/update-desktop-database" ]; then
  1696.         einfo "Updating desktop mime database ...";
  1697.         "${EPREFIX}/usr/bin/update-desktop-database" -q "${EROOT}usr/share/applications";
  1698.     fi
  1699. }
  1700. fdo-mime_mime_database_update ()
  1701. {
  1702.     has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=;
  1703.     has "${EAPI:-0}" 0 1 2 && ! use prefix && EROOT="${ROOT}";
  1704.     if [ -x "${EPREFIX}/usr/bin/update-mime-database" ]; then
  1705.         einfo "Updating shared mime info database ...";
  1706.         "${EPREFIX}/usr/bin/update-mime-database" "${EROOT}usr/share/mime";
  1707.     fi
  1708. }
  1709. gcc-fullversion ()
  1710. {
  1711.     _gcc_fullversion '$1.$2.$3' "$@"
  1712. }
  1713. gcc-major-version ()
  1714. {
  1715.     _gcc_fullversion '$1' "$@"
  1716. }
  1717. gcc-micro-version ()
  1718. {
  1719.     _gcc_fullversion '$3' "$@"
  1720. }
  1721. gcc-minor-version ()
  1722. {
  1723.     _gcc_fullversion '$2' "$@"
  1724. }
  1725. gcc-specs-directive ()
  1726. {
  1727.     local directive subdname subdirective;
  1728.     directive="$(_gcc-specs-directive_raw $1)";
  1729.     while [[ ${directive} == *%\(*\)* ]]; do
  1730.         subdname=${directive/*%\(};
  1731.         subdname=${subdname/\)*};
  1732.         subdirective="$(_gcc-specs-directive_raw ${subdname})";
  1733.         directive="${directive//\%(${subdname})/${subdirective}}";
  1734.     done;
  1735.     echo "${directive}";
  1736.     return 0
  1737. }
  1738. gcc-specs-nostrict ()
  1739. {
  1740.     local directive;
  1741.     directive=$(gcc-specs-directive cc1);
  1742.     return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]])
  1743. }
  1744. gcc-specs-now ()
  1745. {
  1746.     local directive;
  1747.     directive=$(gcc-specs-directive link_command);
  1748.     return $([[ "${directive/\{!nonow:}" != "${directive}" ]])
  1749. }
  1750. gcc-specs-pie ()
  1751. {
  1752.     local directive;
  1753.     directive=$(gcc-specs-directive cc1);
  1754.     return $([[ "${directive/\{!nopie:}" != "${directive}" ]])
  1755. }
  1756. gcc-specs-relro ()
  1757. {
  1758.     local directive;
  1759.     directive=$(gcc-specs-directive link_command);
  1760.     return $([[ "${directive/\{!norelro:}" != "${directive}" ]])
  1761. }
  1762. gcc-specs-ssp ()
  1763. {
  1764.     local directive;
  1765.     directive=$(gcc-specs-directive cc1);
  1766.     return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]])
  1767. }
  1768. gcc-specs-ssp-to-all ()
  1769. {
  1770.     local directive;
  1771.     directive=$(gcc-specs-directive cc1);
  1772.     return $([[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]])
  1773. }
  1774. gcc-version ()
  1775. {
  1776.     _gcc_fullversion '$1.$2' "$@"
  1777. }
  1778. gen_usr_ldscript ()
  1779. {
  1780.     local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
  1781.     [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
  1782.     tc-is-static-only && return;
  1783.     dodir /usr/${libdir};
  1784.     if [[ $1 == "-a" ]]; then
  1785.         auto=true;
  1786.         shift;
  1787.         dodir /${libdir};
  1788.     fi;
  1789.     output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
  1790.     [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
  1791.     for lib in "$@";
  1792.     do
  1793.         local tlib;
  1794.         if ${auto}; then
  1795.             lib="lib${lib}${suffix}";
  1796.         else
  1797.             [[ -r ${ED}/${libdir}/${lib} ]] || continue;
  1798.         fi;
  1799.         case ${CTARGET:-${CHOST}} in
  1800.             *-darwin*)
  1801.                 if ${auto}; then
  1802.                     tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1803.                 else
  1804.                     tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
  1805.                 fi;
  1806.                 [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
  1807.                 tlib=${tlib##*/};
  1808.                 if ${auto}; then
  1809.                     mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1810.                     if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
  1811.                         mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1812.                     fi;
  1813.                     rm -f "${ED}"/${libdir}/${lib};
  1814.                 fi;
  1815.                 if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
  1816.                     chmod u+w "${ED}${libdir}/${tlib}";
  1817.                     local nowrite=yes;
  1818.                 fi;
  1819.                 install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
  1820.                 [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
  1821.                 pushd "${ED}/usr/${libdir}" > /dev/null;
  1822.                 ln -snf "../../${libdir}/${tlib}" "${lib}";
  1823.                 popd > /dev/null
  1824.             ;;
  1825.             *-aix* | *-irix* | *64*-hpux* | *-interix* | *-winnt*)
  1826.                 if ${auto}; then
  1827.                     mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
  1828.                     tlib=$(readlink "${ED}"/${libdir}/${lib});
  1829.                     tlib=${tlib##*/};
  1830.                     if [[ -z ${tlib} ]]; then
  1831.                         tlib=${lib};
  1832.                     else
  1833.                         rm -f "${ED}"/${libdir}/${lib};
  1834.                     fi;
  1835.                 else
  1836.                     tlib=${lib};
  1837.                 fi;
  1838.                 pushd "${ED}/usr/${libdir}" > /dev/null;
  1839.                 ln -snf "../../${libdir}/${tlib}" "${lib}";
  1840.                 popd > /dev/null
  1841.             ;;
  1842.             hppa*-hpux*)
  1843.                 if ${auto}; then
  1844.                     tlib=$(chatr "${ED}"/usr/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}');
  1845.                     [[ -z ${tlib} ]] && tlib=${lib};
  1846.                     tlib=${tlib##*/};
  1847.                     mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
  1848.                     if [[ ${tlib} != ${lib}* ]]; then
  1849.                         mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
  1850.                     fi;
  1851.                     [[ ${tlib} != ${lib} ]] && rm -f "${ED}"/${libdir}/${lib};
  1852.                 else
  1853.                     tlib=$(chatr "${ED}"/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}');
  1854.                     [[ -z ${tlib} ]] && tlib=${lib};
  1855.                     tlib=${tlib##*/};
  1856.                 fi;
  1857.                 pushd "${ED}"/usr/${libdir} > /dev/null;
  1858.                 ln -snf "../../${libdir}/${tlib}" "${lib}";
  1859.                 [[ ${tlib} != ${lib} ]] && ln -snf "../../${libdir}/${tlib}" "${tlib}";
  1860.                 popd > /dev/null
  1861.             ;;
  1862.             *)
  1863.                 if ${auto}; then
  1864.                     tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1865.                     [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
  1866.                     mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
  1867.                     if [[ ${tlib} != ${lib}* ]]; then
  1868.                         mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
  1869.                     fi;
  1870.                     rm -f "${ED}"/${libdir}/${lib};
  1871.                 else
  1872.                     tlib=${lib};
  1873.                 fi;
  1874.                 cat > "${ED}/usr/${libdir}/${lib}"  <<-END_LDSCRIPT
  1875. /* GNU ld script
  1876.    Since Gentoo has critical dynamic libraries in /lib, and the static versions
  1877.    in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
  1878.    run into linking problems.  This "fake" dynamic lib is a linker script that
  1879.    redirects the linker to the real lib.  And yes, this works in the cross-
  1880.    compiling scenario as the sysroot-ed linker will prepend the real path.
  1881.  
  1882.    See bug http://bugs.gentoo.org/4411 for more info.
  1883.  */
  1884. ${output_format}
  1885. GROUP ( ${EPREFIX}/${libdir}/${tlib} )
  1886. END_LDSCRIPT
  1887.  
  1888.             ;;
  1889.         esac
  1890.         fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
  1891.     done
  1892. }
  1893. get_abi_CFLAGS ()
  1894. {
  1895.     get_abi_var CFLAGS "$@"
  1896. }
  1897. get_abi_CHOST ()
  1898. {
  1899.     get_abi_var CHOST "$@"
  1900. }
  1901. get_abi_CTARGET ()
  1902. {
  1903.     get_abi_var CTARGET "$@"
  1904. }
  1905. get_abi_FAKE_TARGETS ()
  1906. {
  1907.     get_abi_var FAKE_TARGETS "$@"
  1908. }
  1909. get_abi_LDFLAGS ()
  1910. {
  1911.     get_abi_var LDFLAGS "$@"
  1912. }
  1913. get_abi_LIBDIR ()
  1914. {
  1915.     get_abi_var LIBDIR "$@"
  1916. }
  1917. get_abi_var ()
  1918. {
  1919.     local flag=$1;
  1920.     local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
  1921.     local var="${flag}_${abi}";
  1922.     echo ${!var}
  1923. }
  1924. get_after_major_version ()
  1925. {
  1926.     echo $(get_version_component_range 2- "${1:-${PV}}")
  1927. }
  1928. get_all_abis ()
  1929. {
  1930.     local order="";
  1931.     if [[ -z ${MULTILIB_ABIS} ]]; then
  1932.         echo "default";
  1933.         return 0;
  1934.     fi;
  1935.     for x in ${MULTILIB_ABIS};
  1936.     do
  1937.         if [[ ${x} != ${DEFAULT_ABI} ]]; then
  1938.             order="${order:+${order} }${x}";
  1939.         fi;
  1940.     done;
  1941.     order="${order:+${order} }${DEFAULT_ABI}";
  1942.     echo ${order};
  1943.     return 0
  1944. }
  1945. get_all_libdirs ()
  1946. {
  1947.     local libdirs;
  1948.     local abi;
  1949.     local dir;
  1950.     for abi in ${MULTILIB_ABIS};
  1951.     do
  1952.         libdirs+=" $(get_abi_LIBDIR ${abi})";
  1953.     done;
  1954.     [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
  1955.     echo "${libdirs}"
  1956. }
  1957. get_all_version_components ()
  1958. {
  1959.     eshopts_push -s extglob;
  1960.     local ver_str=${1:-${PV}} result;
  1961.     result=();
  1962.     if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]]; then
  1963.         echo ${VERSIONATOR_CACHE_RESULT};
  1964.         eshopts_pop;
  1965.         return;
  1966.     fi;
  1967.     export VERSIONATOR_CACHE_VER_STR=${ver_str};
  1968.     while [[ -n $ver_str ]]; do
  1969.         case "${ver_str::1}" in
  1970.             [[:digit:]])
  1971.                 result+=("${ver_str%%[^[:digit:]]*}");
  1972.                 ver_str=${ver_str##+([[:digit:]])}
  1973.             ;;
  1974.             [-_.])
  1975.                 result+=("${ver_str::1}");
  1976.                 ver_str=${ver_str:1}
  1977.             ;;
  1978.             [[:alpha:]])
  1979.                 local not_match=${ver_str##+([[:alpha:]])*([[:digit:]])};
  1980.                 result+=("${ver_str::${#ver_str} - ${#not_match}}");
  1981.                 ver_str=${not_match}
  1982.             ;;
  1983.             *)
  1984.                 result+=("${ver_str::1}");
  1985.                 ver_str=${ver_str:1}
  1986.             ;;
  1987.         esac;
  1988.     done;
  1989.     export VERSIONATOR_CACHE_RESULT=${result[*]};
  1990.     echo ${result[@]};
  1991.     eshopts_pop
  1992. }
  1993. get_install_abis ()
  1994. {
  1995.     local order="";
  1996.     if [[ -z ${MULTILIB_ABIS} ]]; then
  1997.         echo "default";
  1998.         return 0;
  1999.     fi;
  2000.     if [[ ${EMULTILIB_PKG} == "true" ]]; then
  2001.         for x in ${MULTILIB_ABIS};
  2002.         do
  2003.             if [[ ${x} != "${DEFAULT_ABI}" ]]; then
  2004.                 has ${x} ${ABI_DENY} || order="${order} ${x}";
  2005.             fi;
  2006.         done;
  2007.         has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
  2008.         if [[ -n ${ABI_ALLOW} ]]; then
  2009.             local ordera="";
  2010.             for x in ${order};
  2011.             do
  2012.                 if has ${x} ${ABI_ALLOW}; then
  2013.                     ordera="${ordera} ${x}";
  2014.                 fi;
  2015.             done;
  2016.             order=${ordera};
  2017.         fi;
  2018.     else
  2019.         order=${DEFAULT_ABI};
  2020.     fi;
  2021.     if [[ -z ${order} ]]; then
  2022.         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.";
  2023.     fi;
  2024.     echo ${order};
  2025.     return 0
  2026. }
  2027. get_last_version_component_index ()
  2028. {
  2029.     echo $(($(get_version_component_count "${1:-${PV}}" ) - 1))
  2030. }
  2031. get_libdir ()
  2032. {
  2033.     local CONF_LIBDIR;
  2034.     if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
  2035.         echo ${CONF_LIBDIR_OVERRIDE};
  2036.     else
  2037.         get_abi_LIBDIR;
  2038.     fi
  2039. }
  2040. get_libname ()
  2041. {
  2042.     local libname;
  2043.     local ver=$1;
  2044.     case ${CHOST} in
  2045.         *-cygwin | mingw* | *-mingw*)
  2046.             libname="dll"
  2047.         ;;
  2048.         *-darwin*)
  2049.             libname="dylib"
  2050.         ;;
  2051.         *-mint*)
  2052.             libname="irrelevant"
  2053.         ;;
  2054.         hppa*-hpux*)
  2055.             libname="sl"
  2056.         ;;
  2057.         *)
  2058.             libname="so"
  2059.         ;;
  2060.     esac;
  2061.     if [[ -z $* ]]; then
  2062.         echo ".${libname}";
  2063.     else
  2064.         for ver in "$@";
  2065.         do
  2066.             case ${CHOST} in
  2067.                 *-darwin*)
  2068.                     echo ".${ver}.${libname}"
  2069.                 ;;
  2070.                 *-mint*)
  2071.                     echo ".${libname}"
  2072.                 ;;
  2073.                 *)
  2074.                     echo ".${libname}.${ver}"
  2075.                 ;;
  2076.             esac;
  2077.         done;
  2078.     fi
  2079. }
  2080. get_major_version ()
  2081. {
  2082.     local c=($(get_all_version_components "${1:-${PV}}"));
  2083.     echo ${c[0]}
  2084. }
  2085. get_modname ()
  2086. {
  2087.     local modname;
  2088.     local ver=$1;
  2089.     case ${CHOST} in
  2090.         *-darwin*)
  2091.             modname="bundle"
  2092.         ;;
  2093.         *)
  2094.             modname="so"
  2095.         ;;
  2096.     esac;
  2097.     echo ".${modname}"
  2098. }
  2099. get_version_component_count ()
  2100. {
  2101.     local a=($(get_version_components "${1:-${PV}}"));
  2102.     echo ${#a[@]}
  2103. }
  2104. get_version_component_range ()
  2105. {
  2106.     eshopts_push -s extglob;
  2107.     local c v="${2:-${PV}}" range="${1}" range_start range_end;
  2108.     local -i i=-1 j=0;
  2109.     c=($(get_all_version_components "${v}"));
  2110.     range_start=${range%-*};
  2111.     range_start=${range_start:-1};
  2112.     range_end=${range#*-};
  2113.     range_end=${range_end:-${#c[@]}};
  2114.     while ((j < range_start)); do
  2115.         i+=1;
  2116.         ((i > ${#c[@]})) && eshopts_pop && return;
  2117.         [[ -n "${c[i]//[-._]}" ]] && j+=1;
  2118.     done;
  2119.     while ((j <= range_end)); do
  2120.         echo -n ${c[i]};
  2121.         ((i > ${#c[@]})) && eshopts_pop && return;
  2122.         [[ -n "${c[i]//[-._]}" ]] && j+=1;
  2123.         i+=1;
  2124.     done;
  2125.     eshopts_pop
  2126. }
  2127. get_version_components ()
  2128. {
  2129.     local c=$(get_all_version_components "${1:-${PV}}");
  2130.     echo ${c//[-._]/ }
  2131. }
  2132. gnome2_environment_reset ()
  2133. {
  2134.     export G_HOME="${T}";
  2135.     export GST_REGISTRY="${T}/registry.xml";
  2136.     export XDG_DATA_HOME="${T}/.local/share";
  2137.     export XDG_CONFIG_HOME="${T}/.config";
  2138.     export XDG_CACHE_HOME="${T}/.cache";
  2139.     export XDG_RUNTIME_DIR="${T}/run";
  2140.     mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "${XDG_RUNTIME_DIR}";
  2141.     chmod 0700 "${XDG_RUNTIME_DIR}"
  2142. }
  2143. gnome2_gconf_install ()
  2144. {
  2145.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2146.     local updater="${EROOT}${GCONFTOOL_BIN}";
  2147.     if [[ ! -x "${updater}" ]]; then
  2148.         debug-print "${updater} is not executable";
  2149.         return;
  2150.     fi;
  2151.     if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
  2152.         debug-print "No GNOME 2 GConf schemas found";
  2153.         return;
  2154.     fi;
  2155.     unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  2156.     export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")";
  2157.     einfo "Installing GNOME 2 GConf schemas";
  2158.     local F;
  2159.     for F in ${GNOME2_ECLASS_SCHEMAS};
  2160.     do
  2161.         if [[ -e "${EROOT}${F}" ]]; then
  2162.             debug-print "Installing schema: ${F}";
  2163.             "${updater}" --makefile-install-rule "${EROOT}${F}" > /dev/null;
  2164.         fi;
  2165.     done;
  2166.     pids=$(pgrep -x gconfd-2);
  2167.     if [[ $? == 0 ]]; then
  2168.         ebegin "Reloading GConf schemas";
  2169.         kill -HUP ${pids};
  2170.         eend $?;
  2171.     fi
  2172. }
  2173. gnome2_gconf_savelist ()
  2174. {
  2175.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2176.     pushd "${ED}" &>/dev/null;
  2177.     export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null);
  2178.     popd &>/dev/null
  2179. }
  2180. gnome2_gconf_uninstall ()
  2181. {
  2182.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2183.     local updater="${EROOT}${GCONFTOOL_BIN}";
  2184.     if [[ ! -x "${updater}" ]]; then
  2185.         debug-print "${updater} is not executable";
  2186.         return;
  2187.     fi;
  2188.     if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
  2189.         debug-print "No GNOME 2 GConf schemas found";
  2190.         return;
  2191.     fi;
  2192.     unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  2193.     export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")";
  2194.     einfo "Uninstalling GNOME 2 GConf schemas";
  2195.     local F;
  2196.     for F in ${GNOME2_ECLASS_SCHEMAS};
  2197.     do
  2198.         if [[ -e "${EROOT}${F}" ]]; then
  2199.             debug-print "Uninstalling gconf schema: ${F}";
  2200.             "${updater}" --makefile-uninstall-rule "${EROOT}${F}" > /dev/null;
  2201.         fi;
  2202.     done;
  2203.     pids=$(pgrep -x gconfd-2);
  2204.     if [[ $? == 0 ]]; then
  2205.         ebegin "Reloading GConf schemas";
  2206.         kill -HUP ${pids};
  2207.         eend $?;
  2208.     fi
  2209. }
  2210. gnome2_icon_cache_update ()
  2211. {
  2212.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2213.     local updater="${EROOT}${GTK_UPDATE_ICON_CACHE}";
  2214.     if [[ ! -x "${updater}" ]]; then
  2215.         debug-print "${updater} is not executable";
  2216.         return;
  2217.     fi;
  2218.     if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
  2219.         debug-print "No icon cache to update";
  2220.         return;
  2221.     fi;
  2222.     ebegin "Updating icons cache";
  2223.     local retval=0;
  2224.     local fails=();
  2225.     for dir in ${GNOME2_ECLASS_ICONS};
  2226.     do
  2227.         if [[ -f "${EROOT}${dir}/index.theme" ]]; then
  2228.             local rv=0;
  2229.             "${updater}" -qf "${EROOT}${dir}";
  2230.             rv=$?;
  2231.             if [[ ! $rv -eq 0 ]]; then
  2232.                 debug-print "Updating cache failed on ${EROOT}${dir}";
  2233.                 fails[$(( ${#fails[@]} + 1 ))]="${EROOT}${dir}";
  2234.                 retval=2;
  2235.             fi;
  2236.         else
  2237.             if [[ $(ls "${EROOT}${dir}") = "icon-theme.cache" ]]; then
  2238.                 rm "${EROOT}${dir}/icon-theme.cache";
  2239.             fi;
  2240.         fi;
  2241.         if [[ -z $(ls "${EROOT}${dir}") ]]; then
  2242.             rmdir "${EROOT}${dir}";
  2243.         fi;
  2244.     done;
  2245.     eend ${retval};
  2246.     for f in "${fails[@]}";
  2247.     do
  2248.         eerror "Failed to update cache with icon $f";
  2249.     done
  2250. }
  2251. gnome2_icon_savelist ()
  2252. {
  2253.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2254.     pushd "${ED}" &>/dev/null;
  2255.     export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null);
  2256.     popd &>/dev/null
  2257. }
  2258. gnome2_omf_fix ()
  2259. {
  2260.     local omf_makefiles filename;
  2261.     omf_makefiles="$@";
  2262.     if [[ -f ${S}/omf.make ]]; then
  2263.         omf_makefiles="${omf_makefiles} ${S}/omf.make";
  2264.     fi;
  2265.     if [[ -f ${S}/gnome-doc-utils.make ]]; then
  2266.         omf_makefiles="${omf_makefiles} ${S}/gnome-doc-utils.make";
  2267.     fi;
  2268.     for filename in $(find "${S}" -name "Makefile.in" -o -name "Makefile.am" |sort);
  2269.     do
  2270.         omf_makefiles="${omf_makefiles} ${filename}";
  2271.     done;
  2272.     ebegin "Fixing OMF Makefiles";
  2273.     local retval=0;
  2274.     local fails=();
  2275.     for omf in ${omf_makefiles};
  2276.     do
  2277.         sed -i -e 's:scrollkeeper-update:true:' "${omf}";
  2278.         retval=$?;
  2279.         if [[ $retval -ne 0 ]]; then
  2280.             debug-print "updating of ${omf} failed";
  2281.             fails[$(( ${#fails[@]} + 1 ))]=$omf;
  2282.             retval=2;
  2283.         fi;
  2284.     done;
  2285.     eend $retval;
  2286.     for f in "${fails[@]}";
  2287.     do
  2288.         eerror "Failed to update OMF Makefile $f";
  2289.     done
  2290. }
  2291. gnome2_pkg_postinst ()
  2292. {
  2293.     gnome2_gconf_install;
  2294.     fdo-mime_desktop_database_update;
  2295.     fdo-mime_mime_database_update;
  2296.     gnome2_icon_cache_update;
  2297.     gnome2_schemas_update;
  2298.     gnome2_scrollkeeper_update
  2299. }
  2300. gnome2_pkg_postrm ()
  2301. {
  2302.     fdo-mime_desktop_database_update;
  2303.     fdo-mime_mime_database_update;
  2304.     gnome2_icon_cache_update;
  2305.     gnome2_schemas_update;
  2306.     gnome2_scrollkeeper_update
  2307. }
  2308. gnome2_pkg_preinst ()
  2309. {
  2310.     gnome2_gconf_savelist;
  2311.     gnome2_icon_savelist;
  2312.     gnome2_schemas_savelist;
  2313.     gnome2_scrollkeeper_savelist
  2314. }
  2315. gnome2_schemas_savelist ()
  2316. {
  2317.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2318.     pushd "${ED}" &>/dev/null;
  2319.     export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null);
  2320.     popd &>/dev/null
  2321. }
  2322. gnome2_schemas_update ()
  2323. {
  2324.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2325.     local updater="${EROOT}${GLIB_COMPILE_SCHEMAS}";
  2326.     if [[ ! -x ${updater} ]]; then
  2327.         debug-print "${updater} is not executable";
  2328.         return;
  2329.     fi;
  2330.     if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then
  2331.         debug-print "No GSettings schemas to update";
  2332.         return;
  2333.     fi;
  2334.     ebegin "Updating GSettings schemas";
  2335.     ${updater} --allow-any-name "$@" "${EROOT%/}/usr/share/glib-2.0/schemas" &>/dev/null;
  2336.     eend $?
  2337. }
  2338. gnome2_scrollkeeper_savelist ()
  2339. {
  2340.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2341.     pushd "${ED}" &>/dev/null;
  2342.     export GNOME2_ECLASS_SCROLLS=$(find 'usr/share/omf' -type f -name "*.omf" 2> /dev/null);
  2343.     popd &>/dev/null
  2344. }
  2345. gnome2_scrollkeeper_update ()
  2346. {
  2347.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2348.     local updater="${EROOT}${SCROLLKEEPER_UPDATE_BIN}";
  2349.     if [[ ! -x "${updater}" ]]; then
  2350.         debug-print "${updater} is not executable";
  2351.         return;
  2352.     fi;
  2353.     if [[ -z "${GNOME2_ECLASS_SCROLLS}" ]]; then
  2354.         debug-print "No scroll cache to update";
  2355.         return;
  2356.     fi;
  2357.     ebegin "Updating scrollkeeper database ...";
  2358.     "${updater}" -q -p "${EROOT}${SCROLLKEEPER_DIR}";
  2359.     eend $?
  2360. }
  2361. gnome2_src_compile ()
  2362. {
  2363.     has ${EAPI:-0} 0 1 && gnome2_src_configure "$@";
  2364.     emake || die "compile failure"
  2365. }
  2366. gnome2_src_configure ()
  2367. {
  2368.     if [[ ${GCONF_DEBUG} != 'no' ]]; then
  2369.         if use debug; then
  2370.             G2CONF="${G2CONF} --enable-debug=yes";
  2371.         fi;
  2372.     fi;
  2373.     if has doc ${IUSE}; then
  2374.         grep -q "enable-gtk-doc" configure && G2CONF="${G2CONF} $(use_enable doc gtk-doc)";
  2375.     fi;
  2376.     if grep -q "^[[:space:]]*AM_MAINTAINER_MODE(\[enable\])" configure.*; then
  2377.         G2CONF="${G2CONF} --disable-maintainer-mode";
  2378.     fi;
  2379.     if grep -q "disable-scrollkeeper" configure; then
  2380.         G2CONF="${G2CONF} --disable-scrollkeeper";
  2381.     fi;
  2382.     addwrite "$(unset HOME; echo ~)/.gnome2";
  2383.     econf "$@" ${G2CONF}
  2384. }
  2385. gnome2_src_install ()
  2386. {
  2387.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2388.     local sk_tmp_dir="/var/lib/scrollkeeper";
  2389.     dodir "${sk_tmp_dir}" || die "dodir failed";
  2390.     export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL="1";
  2391.     if [[ -z "${USE_EINSTALL}" || "${USE_EINSTALL}" = "0" ]]; then
  2392.         debug-print "Installing with 'make install'";
  2393.         emake DESTDIR="${D}" "scrollkeeper_localstate_dir=${ED}${sk_tmp_dir} " "$@" install || die "install failed";
  2394.     else
  2395.         debug-print "Installing with 'einstall'";
  2396.         einstall "scrollkeeper_localstate_dir=${ED}${sk_tmp_dir} " "$@" || die "einstall failed";
  2397.     fi;
  2398.     unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  2399.     if [[ -n "${DOCS}" ]]; then
  2400.         dodoc ${DOCS} || die "dodoc failed";
  2401.     fi;
  2402.     rm -rf "${ED}${sk_tmp_dir}";
  2403.     rmdir "${ED}/var/lib" 2> /dev/null;
  2404.     rmdir "${ED}/var" 2> /dev/null;
  2405.     rm -fr "${ED}/usr/share/applications/mimeinfo.cache";
  2406.     if [[ "${GNOME2_LA_PUNT}" != "no" ]]; then
  2407.         ebegin "Removing .la files";
  2408.         if ! {
  2409.             has static-libs ${IUSE//+} && use static-libs
  2410.         }; then
  2411.             find "${D}" -name '*.la' -exec rm -f {} + || die "la file removal failed";
  2412.         fi;
  2413.         eend;
  2414.     fi
  2415. }
  2416. gnome2_src_prepare ()
  2417. {
  2418.     gnome2_environment_reset;
  2419.     gnome2_omf_fix;
  2420.     if has ${EAPI:-0} 0 1 2 3; then
  2421.         elibtoolize ${ELTCONF};
  2422.     else
  2423.         nonfatal elibtoolize ${ELTCONF};
  2424.     fi
  2425. }
  2426. gnome2_src_unpack ()
  2427. {
  2428.     unpack ${A};
  2429.     cd "${S}";
  2430.     has ${EAPI:-0} 0 1 && gnome2_src_prepare
  2431. }
  2432. has_multilib_profile ()
  2433. {
  2434.     [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
  2435. }
  2436. in_iuse ()
  2437. {
  2438.     debug-print-function ${FUNCNAME} "${@}";
  2439.     [[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()";
  2440.     local flag=${1};
  2441.     local liuse=(${IUSE});
  2442.     has "${flag}" "${liuse[@]#[+-]}"
  2443. }
  2444. is_final_abi ()
  2445. {
  2446.     has_multilib_profile || return 0;
  2447.     set -- $(get_install_abis);
  2448.     local LAST_ABI=$#;
  2449.     [[ ${!LAST_ABI} == ${ABI} ]]
  2450. }
  2451. make_desktop_entry ()
  2452. {
  2453.     [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable";
  2454.     local exec=${1};
  2455.     local name=${2:-${PN}};
  2456.     local icon=${3:-${PN}};
  2457.     local type=${4};
  2458.     local fields=${5};
  2459.     if [[ -z ${type} ]]; then
  2460.         local catmaj=${CATEGORY%%-*};
  2461.         local catmin=${CATEGORY##*-};
  2462.         case ${catmaj} in
  2463.             app)
  2464.                 case ${catmin} in
  2465.                     accessibility)
  2466.                         type="Utility;Accessibility"
  2467.                     ;;
  2468.                     admin)
  2469.                         type=System
  2470.                     ;;
  2471.                     antivirus)
  2472.                         type=System
  2473.                     ;;
  2474.                     arch)
  2475.                         type="Utility;Archiving"
  2476.                     ;;
  2477.                     backup)
  2478.                         type="Utility;Archiving"
  2479.                     ;;
  2480.                     cdr)
  2481.                         type="AudioVideo;DiscBurning"
  2482.                     ;;
  2483.                     dicts)
  2484.                         type="Office;Dictionary"
  2485.                     ;;
  2486.                     doc)
  2487.                         type=Documentation
  2488.                     ;;
  2489.                     editors)
  2490.                         type="Utility;TextEditor"
  2491.                     ;;
  2492.                     emacs)
  2493.                         type="Development;TextEditor"
  2494.                     ;;
  2495.                     emulation)
  2496.                         type="System;Emulator"
  2497.                     ;;
  2498.                     laptop)
  2499.                         type="Settings;HardwareSettings"
  2500.                     ;;
  2501.                     office)
  2502.                         type=Office
  2503.                     ;;
  2504.                     pda)
  2505.                         type="Office;PDA"
  2506.                     ;;
  2507.                     vim)
  2508.                         type="Development;TextEditor"
  2509.                     ;;
  2510.                     xemacs)
  2511.                         type="Development;TextEditor"
  2512.                     ;;
  2513.                 esac
  2514.             ;;
  2515.             dev)
  2516.                 type="Development"
  2517.             ;;
  2518.             games)
  2519.                 case ${catmin} in
  2520.                     action | fps)
  2521.                         type=ActionGame
  2522.                     ;;
  2523.                     arcade)
  2524.                         type=ArcadeGame
  2525.                     ;;
  2526.                     board)
  2527.                         type=BoardGame
  2528.                     ;;
  2529.                     emulation)
  2530.                         type=Emulator
  2531.                     ;;
  2532.                     kids)
  2533.                         type=KidsGame
  2534.                     ;;
  2535.                     puzzle)
  2536.                         type=LogicGame
  2537.                     ;;
  2538.                     roguelike)
  2539.                         type=RolePlaying
  2540.                     ;;
  2541.                     rpg)
  2542.                         type=RolePlaying
  2543.                     ;;
  2544.                     simulation)
  2545.                         type=Simulation
  2546.                     ;;
  2547.                     sports)
  2548.                         type=SportsGame
  2549.                     ;;
  2550.                     strategy)
  2551.                         type=StrategyGame
  2552.                     ;;
  2553.                 esac;
  2554.                 type="Game;${type}"
  2555.             ;;
  2556.             gnome)
  2557.                 type="Gnome;GTK"
  2558.             ;;
  2559.             kde)
  2560.                 type="KDE;Qt"
  2561.             ;;
  2562.             mail)
  2563.                 type="Network;Email"
  2564.             ;;
  2565.             media)
  2566.                 case ${catmin} in
  2567.                     gfx)
  2568.                         type=Graphics
  2569.                     ;;
  2570.                     *)
  2571.                         case ${catmin} in
  2572.                             radio)
  2573.                                 type=Tuner
  2574.                             ;;
  2575.                             sound)
  2576.                                 type=Audio
  2577.                             ;;
  2578.                             tv)
  2579.                                 type=TV
  2580.                             ;;
  2581.                             video)
  2582.                                 type=Video
  2583.                             ;;
  2584.                         esac;
  2585.                         type="AudioVideo;${type}"
  2586.                     ;;
  2587.                 esac
  2588.             ;;
  2589.             net)
  2590.                 case ${catmin} in
  2591.                     dialup)
  2592.                         type=Dialup
  2593.                     ;;
  2594.                     ftp)
  2595.                         type=FileTransfer
  2596.                     ;;
  2597.                     im)
  2598.                         type=InstantMessaging
  2599.                     ;;
  2600.                     irc)
  2601.                         type=IRCClient
  2602.                     ;;
  2603.                     mail)
  2604.                         type=Email
  2605.                     ;;
  2606.                     news)
  2607.                         type=News
  2608.                     ;;
  2609.                     nntp)
  2610.                         type=News
  2611.                     ;;
  2612.                     p2p)
  2613.                         type=FileTransfer
  2614.                     ;;
  2615.                     voip)
  2616.                         type=Telephony
  2617.                     ;;
  2618.                 esac;
  2619.                 type="Network;${type}"
  2620.             ;;
  2621.             sci)
  2622.                 case ${catmin} in
  2623.                     astro*)
  2624.                         type=Astronomy
  2625.                     ;;
  2626.                     bio*)
  2627.                         type=Biology
  2628.                     ;;
  2629.                     calc*)
  2630.                         type=Calculator
  2631.                     ;;
  2632.                     chem*)
  2633.                         type=Chemistry
  2634.                     ;;
  2635.                     elec*)
  2636.                         type=Electronics
  2637.                     ;;
  2638.                     geo*)
  2639.                         type=Geology
  2640.                     ;;
  2641.                     math*)
  2642.                         type=Math
  2643.                     ;;
  2644.                     physics)
  2645.                         type=Physics
  2646.                     ;;
  2647.                     visual*)
  2648.                         type=DataVisualization
  2649.                     ;;
  2650.                 esac;
  2651.                 type="Education;Science;${type}"
  2652.             ;;
  2653.             sys)
  2654.                 type="System"
  2655.             ;;
  2656.             www)
  2657.                 case ${catmin} in
  2658.                     client)
  2659.                         type=WebBrowser
  2660.                     ;;
  2661.                 esac;
  2662.                 type="Network;${type}"
  2663.             ;;
  2664.             *)
  2665.                 type=
  2666.             ;;
  2667.         esac;
  2668.     fi;
  2669.     if [ "${SLOT}" == "0" ]; then
  2670.         local desktop_name="${PN}";
  2671.     else
  2672.         local desktop_name="${PN}-${SLOT}";
  2673.     fi;
  2674.     local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
  2675.     type=${type%;}${type:+;};
  2676.     eshopts_push -s extglob;
  2677.     if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
  2678.         ewarn "As described in the Icon Theme Specification, icon file extensions are not";
  2679.         ewarn "allowed in .desktop files if the value is not an absolute path.";
  2680.         icon=${icon%.@(xpm|png|svg)};
  2681.     fi;
  2682.     eshopts_pop;
  2683.     cat > "${desktop}"  <<-EOF
  2684. [Desktop Entry]
  2685. Name=${name}
  2686. Type=Application
  2687. Comment=${DESCRIPTION}
  2688. Exec=${exec}
  2689. TryExec=${exec%% *}
  2690. Icon=${icon}
  2691. Categories=${type}
  2692. EOF
  2693.  
  2694.     if [[ ${fields:-=} != *=* ]]; then
  2695.         ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
  2696.         fields="Path=${fields}";
  2697.     fi;
  2698.     [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
  2699.     ( insinto /usr/share/applications;
  2700.     doins "${desktop}" ) || die "installing desktop file failed"
  2701. }
  2702. make_session_desktop ()
  2703. {
  2704.     [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
  2705.     [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
  2706.     local title=$1;
  2707.     local command=$2;
  2708.     local desktop=${T}/${wm:-${PN}}.desktop;
  2709.     shift 2;
  2710.     cat > "${desktop}"  <<-EOF
  2711. [Desktop Entry]
  2712. Name=${title}
  2713. Comment=This session logs you into ${title}
  2714. Exec=${command} $*
  2715. TryExec=${command}
  2716. Type=XSession
  2717. EOF
  2718.  
  2719.     ( insinto /usr/share/xsessions;
  2720.     doins "${desktop}" )
  2721. }
  2722. make_wrapper ()
  2723. {
  2724.     local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
  2725.     local tmpwrapper=$(emktemp);
  2726.     cat > "${tmpwrapper}"  <<EOF
  2727. #!/bin/sh
  2728. cd "${chdir:-.}"
  2729. if [ -n "${libdir}" ] ; then
  2730.     if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
  2731.         export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
  2732.     else
  2733.         export LD_LIBRARY_PATH="${libdir}"
  2734.     fi
  2735. fi
  2736. exec ${bin} "\$@"
  2737. EOF
  2738.  
  2739.     chmod go+rx "${tmpwrapper}";
  2740.     if [[ -n ${path} ]]; then
  2741.         ( exeinto "${path}";
  2742.         newexe "${tmpwrapper}" "${wrapper}" ) || die;
  2743.     else
  2744.         newbin "${tmpwrapper}" "${wrapper}" || die;
  2745.     fi
  2746. }
  2747. makeopts_jobs ()
  2748. {
  2749.     [[ $# -eq 0 ]] && set -- ${MAKEOPTS};
  2750.     local x jobs;
  2751.     for x in "$@";
  2752.     do
  2753.         [[ ${x} == -j* ]] && jobs=${x#-j};
  2754.     done;
  2755.     echo ${jobs:-1}
  2756. }
  2757. multilib_env ()
  2758. {
  2759.     local CTARGET=${1:-${CTARGET}};
  2760.     case ${CTARGET} in
  2761.         x86_64*)
  2762.             export CFLAGS_x86=${CFLAGS_x86--m32};
  2763.             export CHOST_x86=${CTARGET/x86_64/i686};
  2764.             export CTARGET_x86=${CHOST_x86};
  2765.             if [[ ${SYMLINK_LIB} == "yes" ]]; then
  2766.                 export LIBDIR_x86="lib32";
  2767.             else
  2768.                 export LIBDIR_x86="lib";
  2769.             fi;
  2770.             export CFLAGS_amd64=${CFLAGS_amd64--m64};
  2771.             export CHOST_amd64=${CTARGET};
  2772.             export CTARGET_amd64=${CHOST_amd64};
  2773.             export LIBDIR_amd64="lib64";
  2774.             export CFLAGS_x32=${CFLAGS_x32--mx32};
  2775.             export CHOST_x32=${CTARGET};
  2776.             export CTARGET_x32=${CHOST_x32};
  2777.             export LIBDIR_x32="libx32";
  2778.             : ${MULTILIB_ABIS=amd64 x86};
  2779.             : ${DEFAULT_ABI=amd64}
  2780.         ;;
  2781.         mips64*)
  2782.             export CFLAGS_o32=${CFLAGS_o32--mabi=32};
  2783.             export CHOST_o32=${CTARGET/mips64/mips};
  2784.             export CTARGET_o32=${CHOST_o32};
  2785.             export LIBDIR_o32="lib";
  2786.             export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
  2787.             export CHOST_n32=${CTARGET};
  2788.             export CTARGET_n32=${CHOST_n32};
  2789.             export LIBDIR_n32="lib32";
  2790.             export CFLAGS_n64=${CFLAGS_n64--mabi=64};
  2791.             export CHOST_n64=${CTARGET};
  2792.             export CTARGET_n64=${CHOST_n64};
  2793.             export LIBDIR_n64="lib64";
  2794.             : ${MULTILIB_ABIS=n64 n32 o32};
  2795.             : ${DEFAULT_ABI=n32}
  2796.         ;;
  2797.         powerpc64*)
  2798.             export CFLAGS_ppc=${CFLAGS_ppc--m32};
  2799.             export CHOST_ppc=${CTARGET/powerpc64/powerpc};
  2800.             export CTARGET_ppc=${CHOST_ppc};
  2801.             export LIBDIR_ppc="lib";
  2802.             export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
  2803.             export CHOST_ppc64=${CTARGET};
  2804.             export CTARGET_ppc64=${CHOST_ppc64};
  2805.             export LIBDIR_ppc64="lib64";
  2806.             : ${MULTILIB_ABIS=ppc64 ppc};
  2807.             : ${DEFAULT_ABI=ppc64}
  2808.         ;;
  2809.         s390x*)
  2810.             export CFLAGS_s390=${CFLAGS_s390--m31};
  2811.             export CHOST_s390=${CTARGET/s390x/s390};
  2812.             export CTARGET_s390=${CHOST_s390};
  2813.             export LIBDIR_s390="lib";
  2814.             export CFLAGS_s390x=${CFLAGS_s390x--m64};
  2815.             export CHOST_s390x=${CTARGET};
  2816.             export CTARGET_s390x=${CHOST_s390x};
  2817.             export LIBDIR_s390x="lib64";
  2818.             : ${MULTILIB_ABIS=s390x s390};
  2819.             : ${DEFAULT_ABI=s390x}
  2820.         ;;
  2821.         sparc*)
  2822.             export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
  2823.             export CHOST_sparc32=${CTARGET/sparc64/sparc};
  2824.             export CTARGET_sparc32=${CHOST_sparc32};
  2825.             export LIBDIR_sparc32="lib";
  2826.             export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
  2827.             export CHOST_sparc64=${CTARGET};
  2828.             export CTARGET_sparc64=${CHOST_sparc64};
  2829.             export LIBDIR_sparc64="lib64";
  2830.             : ${MULTILIB_ABIS=sparc64 sparc32};
  2831.             : ${DEFAULT_ABI=sparc64}
  2832.         ;;
  2833.         *)
  2834.             : ${MULTILIB_ABIS=default};
  2835.             : ${DEFAULT_ABI=default}
  2836.         ;;
  2837.     esac;
  2838.     export MULTILIB_ABIS DEFAULT_ABI
  2839. }
  2840. multilib_toolchain_setup ()
  2841. {
  2842.     local v vv;
  2843.     export ABI=$1;
  2844.     if [[ ${__DEFAULT_ABI_SAVED} == "true" ]]; then
  2845.         for v in CHOST CBUILD AS CC CXX LD;
  2846.         do
  2847.             vv="__abi_saved_${v}";
  2848.             export ${v}="${!vv}";
  2849.             unset ${vv};
  2850.         done;
  2851.         unset __DEFAULT_ABI_SAVED;
  2852.     fi;
  2853.     if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
  2854.         for v in CHOST CBUILD AS CC CXX LD;
  2855.         do
  2856.             export __abi_saved_${v}="${!v}";
  2857.         done;
  2858.         export __DEFAULT_ABI_SAVED="true";
  2859.         export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
  2860.         export CC="$(tc-getCC) $(get_abi_CFLAGS)";
  2861.         export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
  2862.         export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
  2863.         export CHOST=$(get_abi_CHOST $1);
  2864.         export CBUILD=$(get_abi_CHOST $1);
  2865.     fi
  2866. }
  2867. newicon ()
  2868. {
  2869.     ( insinto /usr/share/pixmaps;
  2870.     newins "$@" )
  2871. }
  2872. newmenu ()
  2873. {
  2874.     ( insinto /usr/share/applications;
  2875.     newins "$@" )
  2876. }
  2877. number_abis ()
  2878. {
  2879.     set -- `get_install_abis`;
  2880.     echo $#
  2881. }
  2882. path_exists ()
  2883. {
  2884.     local opt=$1;
  2885.     [[ ${opt} == -[ao] ]] && shift || opt="-a";
  2886.     [[ $# -eq 0 ]] && return 1;
  2887.     local p r=0;
  2888.     for p in "$@";
  2889.     do
  2890.         [[ -e ${p} ]];
  2891.         : $(( r += $? ));
  2892.     done;
  2893.     case ${opt} in
  2894.         -a)
  2895.             return $(( r != 0 ))
  2896.         ;;
  2897.         -o)
  2898.             return $(( r == $# ))
  2899.         ;;
  2900.     esac
  2901. }
  2902. pkg_nofetch ()
  2903. {
  2904.     _eapi0_pkg_nofetch "$@"
  2905. }
  2906. pkg_postinst ()
  2907. {
  2908.     gnome2_pkg_postinst "$@"
  2909. }
  2910. pkg_postrm ()
  2911. {
  2912.     gnome2_pkg_postrm "$@"
  2913. }
  2914. pkg_preinst ()
  2915. {
  2916.     gnome2_pkg_preinst "$@"
  2917. }
  2918. pkg_setup ()
  2919. {
  2920.     G2CONF="${G2CONF}
  2921.         $(use_enable nls)
  2922.         --disable-dependency-tracking";
  2923.     DOCS="AUTHORS"
  2924. }
  2925. preserve_old_lib ()
  2926. {
  2927.     if [[ ${EBUILD_PHASE} != "preinst" ]]; then
  2928.         eerror "preserve_old_lib() must be called from pkg_preinst() only";
  2929.         die "Invalid preserve_old_lib() usage";
  2930.     fi;
  2931.     [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
  2932.     has preserve-libs ${FEATURES} && return 0;
  2933.     local lib dir;
  2934.     for lib in "$@";
  2935.     do
  2936.         [[ -e ${ROOT}/${lib} ]] || continue;
  2937.         dir=${lib%/*};
  2938.         dodir ${dir} || die "dodir ${dir} failed";
  2939.         cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed";
  2940.         touch "${D}"/${lib};
  2941.     done
  2942. }
  2943. preserve_old_lib_notify ()
  2944. {
  2945.     if [[ ${EBUILD_PHASE} != "postinst" ]]; then
  2946.         eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
  2947.         die "Invalid preserve_old_lib_notify() usage";
  2948.     fi;
  2949.     has preserve-libs ${FEATURES} && return 0;
  2950.     local lib notice=0;
  2951.     for lib in "$@";
  2952.     do
  2953.         [[ -e ${ROOT}/${lib} ]] || continue;
  2954.         if [[ ${notice} -eq 0 ]]; then
  2955.             notice=1;
  2956.             ewarn "Old versions of installed libraries were detected on your system.";
  2957.             ewarn "In order to avoid breaking packages that depend on these old libs,";
  2958.             ewarn "the libraries are not being removed.  You need to run revdep-rebuild";
  2959.             ewarn "in order to remove these old dependencies.  If you do not have this";
  2960.             ewarn "helper program, simply emerge the 'gentoolkit' package.";
  2961.             ewarn;
  2962.         fi;
  2963.         [[ ${PN} == "mpfr" ]] && lib=${lib##*/};
  2964.         ewarn "  # revdep-rebuild --library '${lib}'";
  2965.     done;
  2966.     if [[ ${notice} -eq 1 ]]; then
  2967.         ewarn;
  2968.         ewarn "Once you've finished running revdep-rebuild, it should be safe to";
  2969.         ewarn "delete the old libraries.  Here is a copy & paste for the lazy:";
  2970.         for lib in "$@";
  2971.         do
  2972.             ewarn "  # rm '${lib}'";
  2973.         done;
  2974.     fi
  2975. }
  2976. replace_all_version_separators ()
  2977. {
  2978.     local c=($(get_all_version_components "${2:-${PV}}"));
  2979.     c=${c[@]//[-._]/$1};
  2980.     echo ${c// }
  2981. }
  2982. replace_version_separator ()
  2983. {
  2984.     eshopts_push -s extglob;
  2985.     local w c v="${3:-${PV}}";
  2986.     declare -i i found=0;
  2987.     w=${1:-1};
  2988.     c=($(get_all_version_components ${v}));
  2989.     if [[ ${w} != *[[:digit:]]* ]]; then
  2990.         for ((i = 0; i < ${#c[@]}; i++))
  2991.         do
  2992.             if [[ ${c[i]} == ${w} ]]; then
  2993.                 c[i]=${2};
  2994.                 break;
  2995.             fi;
  2996.         done;
  2997.     else
  2998.         for ((i = 0; i < ${#c[@]}; i++))
  2999.         do
  3000.             if [[ -n "${c[i]//[^-._]}" ]]; then
  3001.                 found+=1;
  3002.                 if ((found == w)); then
  3003.                     c[i]=${2};
  3004.                     break;
  3005.                 fi;
  3006.             fi;
  3007.         done;
  3008.     fi;
  3009.     c=${c[*]};
  3010.     echo ${c// };
  3011.     eshopts_pop
  3012. }
  3013. src_compile ()
  3014. {
  3015.     gnome2_src_compile "$@"
  3016. }
  3017. src_configure ()
  3018. {
  3019.     gnome2_src_configure "$@"
  3020. }
  3021. src_install ()
  3022. {
  3023.     gnome2_src_install "$@"
  3024. }
  3025. src_prepare ()
  3026. {
  3027.     gnome2_src_prepare;
  3028.     sed -e 's/0.3.22/0.4.1/g' -i configure.ac configure || die;
  3029.     sed -e 's:indicator >= $INDICATOR_REQUIRED_VERSION:indicator-0.4 >= $INDICATOR_REQUIRED_VERSION:g' -i configure.ac || die;
  3030.     sed -e 's:--variable=indicatordir indicator:--variable=indicatordir indicator-0.4:g' -i configure.ac || die;
  3031.     sed -e 's:--variable=iconsdir indicator:--variable=iconsdir indicator-0.4:g' -i configure.ac || die;
  3032.     eautoreconf
  3033. }
  3034. src_test ()
  3035. {
  3036.     _eapi0_src_test "$@"
  3037. }
  3038. src_unpack ()
  3039. {
  3040.     gnome2_src_unpack "$@"
  3041. }
  3042. strip-linguas ()
  3043. {
  3044.     local ls newls nols;
  3045.     if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
  3046.         local op=$1;
  3047.         shift;
  3048.         ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
  3049.         shift;
  3050.         local d f;
  3051.         for d in "$@";
  3052.         do
  3053.             if [[ ${op} == "-u" ]]; then
  3054.                 newls=${ls};
  3055.             else
  3056.                 newls="";
  3057.             fi;
  3058.             for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
  3059.             do
  3060.                 if [[ ${op} == "-i" ]]; then
  3061.                     has ${f} ${ls} && newls="${newls} ${f}";
  3062.                 else
  3063.                     has ${f} ${ls} || newls="${newls} ${f}";
  3064.                 fi;
  3065.             done;
  3066.             ls=${newls};
  3067.         done;
  3068.     else
  3069.         ls="$@";
  3070.     fi;
  3071.     nols="";
  3072.     newls="";
  3073.     for f in ${LINGUAS};
  3074.     do
  3075.         if has ${f} ${ls}; then
  3076.             newls="${newls} ${f}";
  3077.         else
  3078.             nols="${nols} ${f}";
  3079.         fi;
  3080.     done;
  3081.     [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
  3082.     export LINGUAS=${newls:1}
  3083. }
  3084. tc-arch ()
  3085. {
  3086.     tc-ninja_magic_to_arch portage "$@"
  3087. }
  3088. tc-arch-kernel ()
  3089. {
  3090.     tc-ninja_magic_to_arch kern "$@"
  3091. }
  3092. tc-endian ()
  3093. {
  3094.     local host=$1;
  3095.     [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  3096.     host=${host%%-*};
  3097.     case ${host} in
  3098.         alpha*)
  3099.             echo big
  3100.         ;;
  3101.         arm*b*)
  3102.             echo big
  3103.         ;;
  3104.         arm*)
  3105.             echo little
  3106.         ;;
  3107.         cris*)
  3108.             echo little
  3109.         ;;
  3110.         hppa*)
  3111.             echo big
  3112.         ;;
  3113.         i?86*)
  3114.             echo little
  3115.         ;;
  3116.         ia64*)
  3117.             echo little
  3118.         ;;
  3119.         m68*)
  3120.             echo big
  3121.         ;;
  3122.         mips*l*)
  3123.             echo little
  3124.         ;;
  3125.         mips*)
  3126.             echo big
  3127.         ;;
  3128.         powerpc*)
  3129.             echo big
  3130.         ;;
  3131.         s390*)
  3132.             echo big
  3133.         ;;
  3134.         sh*b*)
  3135.             echo big
  3136.         ;;
  3137.         sh*)
  3138.             echo little
  3139.         ;;
  3140.         sparc*)
  3141.             echo big
  3142.         ;;
  3143.         x86_64*)
  3144.             echo little
  3145.         ;;
  3146.         *)
  3147.             echo wtf
  3148.         ;;
  3149.     esac
  3150. }
  3151. tc-env_build ()
  3152. {
  3153.     CFLAGS=${BUILD_CFLAGS:--O1 -pipe} CXXFLAGS=${BUILD_CXXFLAGS:--O1 -pipe} 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) "$@"
  3154. }
  3155. tc-export ()
  3156. {
  3157.     local var;
  3158.     for var in "$@";
  3159.     do
  3160.         [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
  3161.         eval tc-get${var} > /dev/null;
  3162.     done
  3163. }
  3164. tc-getAR ()
  3165. {
  3166.     tc-getPROG AR ar "$@"
  3167. }
  3168. tc-getAS ()
  3169. {
  3170.     tc-getPROG AS as "$@"
  3171. }
  3172. tc-getBUILD_AR ()
  3173. {
  3174.     tc-getBUILD_PROG AR ar "$@"
  3175. }
  3176. tc-getBUILD_AS ()
  3177. {
  3178.     tc-getBUILD_PROG AS as "$@"
  3179. }
  3180. tc-getBUILD_CC ()
  3181. {
  3182.     tc-getBUILD_PROG CC gcc "$@"
  3183. }
  3184. tc-getBUILD_CPP ()
  3185. {
  3186.     tc-getBUILD_PROG CPP cpp "$@"
  3187. }
  3188. tc-getBUILD_CXX ()
  3189. {
  3190.     tc-getBUILD_PROG CXX g++ "$@"
  3191. }
  3192. tc-getBUILD_LD ()
  3193. {
  3194.     tc-getBUILD_PROG LD ld "$@"
  3195. }
  3196. tc-getBUILD_NM ()
  3197. {
  3198.     tc-getBUILD_PROG NM nm "$@"
  3199. }
  3200. tc-getBUILD_OBJCOPY ()
  3201. {
  3202.     tc-getBUILD_PROG OBJCOPY objcopy "$@"
  3203. }
  3204. tc-getBUILD_PKG_CONFIG ()
  3205. {
  3206.     tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
  3207. }
  3208. tc-getBUILD_PROG ()
  3209. {
  3210.     _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
  3211. }
  3212. tc-getBUILD_RANLIB ()
  3213. {
  3214.     tc-getBUILD_PROG RANLIB ranlib "$@"
  3215. }
  3216. tc-getBUILD_STRIP ()
  3217. {
  3218.     tc-getBUILD_PROG STRIP strip "$@"
  3219. }
  3220. tc-getCC ()
  3221. {
  3222.     tc-getPROG CC gcc "$@"
  3223. }
  3224. tc-getCPP ()
  3225. {
  3226.     tc-getPROG CPP cpp "$@"
  3227. }
  3228. tc-getCXX ()
  3229. {
  3230.     tc-getPROG CXX g++ "$@"
  3231. }
  3232. tc-getDLLWRAP ()
  3233. {
  3234.     tc-getPROG DLLWRAP dllwrap "$@"
  3235. }
  3236. tc-getF77 ()
  3237. {
  3238.     tc-getPROG F77 gfortran "$@"
  3239. }
  3240. tc-getFC ()
  3241. {
  3242.     tc-getPROG FC gfortran "$@"
  3243. }
  3244. tc-getGCJ ()
  3245. {
  3246.     tc-getPROG GCJ gcj "$@"
  3247. }
  3248. tc-getLD ()
  3249. {
  3250.     tc-getPROG LD ld "$@"
  3251. }
  3252. tc-getNM ()
  3253. {
  3254.     tc-getPROG NM nm "$@"
  3255. }
  3256. tc-getOBJCOPY ()
  3257. {
  3258.     tc-getPROG OBJCOPY objcopy "$@"
  3259. }
  3260. tc-getPKG_CONFIG ()
  3261. {
  3262.     tc-getPROG PKG_CONFIG pkg-config "$@"
  3263. }
  3264. tc-getPROG ()
  3265. {
  3266.     _tc-getPROG CHOST "$@"
  3267. }
  3268. tc-getRANLIB ()
  3269. {
  3270.     tc-getPROG RANLIB ranlib "$@"
  3271. }
  3272. tc-getRC ()
  3273. {
  3274.     tc-getPROG RC windres "$@"
  3275. }
  3276. tc-getSTRIP ()
  3277. {
  3278.     tc-getPROG STRIP strip "$@"
  3279. }
  3280. tc-has-openmp ()
  3281. {
  3282.     local base="${T}/test-tc-openmp";
  3283.     cat > "${base}.c"  <<-EOF
  3284. #include <omp.h>
  3285. int main() {
  3286. int nthreads, tid, ret = 0;
  3287. #pragma omp parallel private(nthreads, tid)
  3288. {
  3289. tid = omp_get_thread_num();
  3290. nthreads = omp_get_num_threads(); ret += tid + nthreads;
  3291. }
  3292. return ret;
  3293. }
  3294. EOF
  3295.  
  3296.     $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &>/dev/null;
  3297.     local ret=$?;
  3298.     rm -f "${base}"*;
  3299.     return ${ret}
  3300. }
  3301. tc-has-tls ()
  3302. {
  3303.     local base="${T}/test-tc-tls";
  3304.     cat > "${base}.c"  <<-EOF
  3305. int foo(int *i) {
  3306. static __thread int j = 0;
  3307. return *i ? j : *i;
  3308. }
  3309. EOF
  3310.  
  3311.     local flags;
  3312.     case $1 in
  3313.         -s)
  3314.             flags="-S"
  3315.         ;;
  3316.         -c)
  3317.             flags="-c"
  3318.         ;;
  3319.         -l)
  3320.  
  3321.         ;;
  3322.         -*)
  3323.             die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
  3324.         ;;
  3325.     esac;
  3326.     : ${flags:=-fPIC -shared -Wl,-z,defs};
  3327.     [[ $1 == -* ]] && shift;
  3328.     $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &>/dev/null;
  3329.     local ret=$?;
  3330.     rm -f "${base}"*;
  3331.     return ${ret}
  3332. }
  3333. tc-is-cross-compiler ()
  3334. {
  3335.     return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
  3336. }
  3337. tc-is-hardfloat ()
  3338. {
  3339.     [[ ${CTARGET//_/-} == *-hardfloat-* ]] && echo "yes" || echo "no"
  3340. }
  3341. tc-is-softfloat ()
  3342. {
  3343.     case ${CTARGET} in
  3344.         bfin* | h8300*)
  3345.             echo "only"
  3346.         ;;
  3347.         *)
  3348.             [[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no"
  3349.         ;;
  3350.     esac
  3351. }
  3352. tc-is-static-only ()
  3353. {
  3354.     local host=${CTARGET:-${CHOST}};
  3355.     return $([[ ${host} == *-mint* ]])
  3356. }
  3357. tc-ninja_magic_to_arch ()
  3358. {
  3359.     function ninj ()
  3360.     {
  3361.         [[ ${type} == "kern" ]] && echo $1 || echo $2
  3362.     };
  3363.     local type=$1;
  3364.     local host=$2;
  3365.     [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  3366.     case ${host} in
  3367.         alpha*)
  3368.             echo alpha
  3369.         ;;
  3370.         arm*)
  3371.             echo arm
  3372.         ;;
  3373.         avr*)
  3374.             ninj avr32 avr
  3375.         ;;
  3376.         bfin*)
  3377.             ninj blackfin bfin
  3378.         ;;
  3379.         cris*)
  3380.             echo cris
  3381.         ;;
  3382.         hppa*)
  3383.             ninj parisc hppa
  3384.         ;;
  3385.         i?86*)
  3386.             if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
  3387.                 echo i386;
  3388.             else
  3389.                 echo x86;
  3390.             fi
  3391.         ;;
  3392.         ia64*)
  3393.             echo ia64
  3394.         ;;
  3395.         m68*)
  3396.             echo m68k
  3397.         ;;
  3398.         mips*)
  3399.             echo mips
  3400.         ;;
  3401.         nios2*)
  3402.             echo nios2
  3403.         ;;
  3404.         nios*)
  3405.             echo nios
  3406.         ;;
  3407.         powerpc*)
  3408.             if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
  3409.                 echo powerpc;
  3410.             else
  3411.                 if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]]; then
  3412.                     if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
  3413.                         echo powerpc;
  3414.                     else
  3415.                         echo ppc;
  3416.                     fi;
  3417.                 else
  3418.                     if [[ ${host} == powerpc64* ]]; then
  3419.                         echo ppc64;
  3420.                     else
  3421.                         if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
  3422.                             ninj ppc64 ppc;
  3423.                         else
  3424.                             echo ppc;
  3425.                         fi;
  3426.                     fi;
  3427.                 fi;
  3428.             fi
  3429.         ;;
  3430.         s390*)
  3431.             echo s390
  3432.         ;;
  3433.         sh64*)
  3434.             ninj sh64 sh
  3435.         ;;
  3436.         sh*)
  3437.             echo sh
  3438.         ;;
  3439.         sparc64*)
  3440.             ninj sparc64 sparc
  3441.         ;;
  3442.         sparc*)
  3443.             [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
  3444.         ;;
  3445.         vax*)
  3446.             echo vax
  3447.         ;;
  3448.         x86_64*freebsd*)
  3449.             echo amd64
  3450.         ;;
  3451.         x86_64*)
  3452.             if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
  3453.                 echo x86;
  3454.             else
  3455.                 ninj x86_64 amd64;
  3456.             fi
  3457.         ;;
  3458.         *)
  3459.             echo unknown
  3460.         ;;
  3461.     esac
  3462. }
  3463. uclibctoolize ()
  3464. {
  3465.     die "Use elibtoolize"
  3466. }
  3467. use_if_iuse ()
  3468. {
  3469.     in_iuse $1 || return 1;
  3470.     use $1
  3471. }
  3472. usex ()
  3473. {
  3474.     use "$1" && echo "${2-yes}$4" || echo "${3-no}$5"
  3475. }
  3476. validate_desktop_entries ()
  3477. {
  3478.     if [[ -x /usr/bin/desktop-file-validate ]]; then
  3479.         einfo "Checking desktop entry validity";
  3480.         local directories="";
  3481.         for d in /usr/share/applications $@;
  3482.         do
  3483.             [[ -d ${D}${d} ]] && directories="${directories} ${D}${d}";
  3484.         done;
  3485.         if [[ -n ${directories} ]]; then
  3486.             for FILE in $(find ${directories} -name "*\.desktop"                            -not -path '*.hidden*' | sort -u 2>/dev/null);
  3487.             do
  3488.                 local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" |                               sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
  3489.                 [[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:};
  3490.             done;
  3491.         fi;
  3492.         echo "";
  3493.     else
  3494.         einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
  3495.     fi
  3496. }
  3497. version_compare ()
  3498. {
  3499.     eshopts_push -s extglob;
  3500.     local ver_a=${1} ver_b=${2} parts_a parts_b;
  3501.     local cur_tok_a cur_tok_b num_part_a num_part_b;
  3502.     local -i cur_idx_a=0 cur_idx_b=0 prev_idx_a prev_idx_b;
  3503.     parts_a=($(get_all_version_components "${ver_a}" ));
  3504.     parts_b=($(get_all_version_components "${ver_b}" ));
  3505.     local -i inf_loop=0;
  3506.     while true; do
  3507.         inf_loop+=1;
  3508.         ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  3509.         prev_idx_a=cur_idx_a;
  3510.         prev_idx_b=cur_idx_b;
  3511.         cur_tok_a=${parts_a[cur_idx_a]};
  3512.         cur_tok_b=${parts_b[cur_idx_b]};
  3513.         if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
  3514.             cur_idx_a+=1;
  3515.             [[ ${parts_a[cur_idx_a]} == . ]] && cur_idx_a+=1;
  3516.         else
  3517.             cur_tok_a=;
  3518.         fi;
  3519.         if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
  3520.             cur_idx_b+=1;
  3521.             [[ ${parts_b[cur_idx_b]} == . ]] && cur_idx_b+=1;
  3522.         else
  3523.             cur_tok_b=;
  3524.         fi;
  3525.         [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]] && break;
  3526.         [[ -z ${cur_tok_a} ]] && eshopts_pop && return 1;
  3527.         [[ -z ${cur_tok_b} ]] && eshopts_pop && return 3;
  3528.         if (( prev_idx_a != 0 && prev_idx_b != 0 )) && [[ ${cur_tok_a} == 0* || ${cur_tok_b} == 0* ]]; then
  3529.             cur_tok_a=${cur_tok_a%%+(0)};
  3530.             cur_tok_b=${cur_tok_b%%+(0)};
  3531.             [[ ${cur_tok_a} < ${cur_tok_b} ]] && eshopts_pop && return 1;
  3532.             [[ ${cur_tok_a} > ${cur_tok_b} ]] && eshopts_pop && return 3;
  3533.         else
  3534.             cur_tok_a=${cur_tok_a##+(0)};
  3535.             cur_tok_b=${cur_tok_b##+(0)};
  3536.             : ${cur_tok_a:=0};
  3537.             : ${cur_tok_b:=0};
  3538.             ((cur_tok_a < cur_tok_b)) && eshopts_pop && return 1;
  3539.             ((cur_tok_a > cur_tok_b)) && eshopts_pop && return 3;
  3540.         fi;
  3541.     done;
  3542.     local letter_a=;
  3543.     letter_a=${parts_a[cur_idx_a]};
  3544.     if [[ ${#letter_a} -eq 1 && -z ${letter_a/[a-z]} ]]; then
  3545.         cur_idx_a+=1;
  3546.     else
  3547.         letter_a=@;
  3548.     fi;
  3549.     local letter_b=;
  3550.     letter_b=${parts_b[cur_idx_b]};
  3551.     if [[ ${#letter_b} -eq 1 && -z ${letter_b/[a-z]} ]]; then
  3552.         cur_idx_b+=1;
  3553.     else
  3554.         letter_b=@;
  3555.     fi;
  3556.     [[ ${letter_a} < ${letter_b} ]] && eshopts_pop && return 1;
  3557.     [[ ${letter_a} > ${letter_b} ]] && eshopts_pop && return 3;
  3558.     inf_loop=0;
  3559.     while true; do
  3560.         inf_loop+=1;
  3561.         ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  3562.         [[ ${parts_a[cur_idx_a]} == _ ]] && ((cur_idx_a++));
  3563.         [[ ${parts_b[cur_idx_b]} == _ ]] && ((cur_idx_b++));
  3564.         cur_tok_a=${parts_a[cur_idx_a]};
  3565.         cur_tok_b=${parts_b[cur_idx_b]};
  3566.         num_part_a=0;
  3567.         num_part_b=0;
  3568.         if has ${cur_tok_a%%+([0-9])} "alpha" "beta" "pre" "rc" "p"; then
  3569.             cur_idx_a+=1;
  3570.             num_part_a=${cur_tok_a##+([a-z])};
  3571.             num_part_a=${num_part_a##+(0)};
  3572.             : ${num_part_a:=0};
  3573.             cur_tok_a=${cur_tok_a%%+([0-9])};
  3574.         else
  3575.             cur_tok_a=;
  3576.         fi;
  3577.         if has ${cur_tok_b%%+([0-9])} alpha beta pre rc p; then
  3578.             cur_idx_b+=1;
  3579.             num_part_b=${cur_tok_b##+([a-z])};
  3580.             num_part_b=${num_part_b##+(0)};
  3581.             : ${num_part_b:=0};
  3582.             cur_tok_b=${cur_tok_b%%+([0-9])};
  3583.         else
  3584.             cur_tok_b=;
  3585.         fi;
  3586.         if [[ ${cur_tok_a} != ${cur_tok_b} ]]; then
  3587.             local suffix;
  3588.             for suffix in alpha beta pre rc "" p;
  3589.             do
  3590.                 [[ ${cur_tok_a} == ${suffix} ]] && eshopts_pop && return 1;
  3591.                 [[ ${cur_tok_b} == ${suffix} ]] && eshopts_pop && return 3;
  3592.             done;
  3593.         else
  3594.             if [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]]; then
  3595.                 break;
  3596.             else
  3597.                 ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  3598.                 ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  3599.             fi;
  3600.         fi;
  3601.     done;
  3602.     [[ ${parts_a[cur_idx_a]} == - ]] && ((cur_idx_a++));
  3603.     [[ ${parts_b[cur_idx_b]} == - ]] && ((cur_idx_b++));
  3604.     if [[ -n ${parts_a[cur_idx_a]/r+([0-9])} || -n ${parts_b[cur_idx_b]/r+([0-9])} ]]; then
  3605.         die "versionator compare bug [revisions, ${ver_a}, ${ver_b}]";
  3606.     fi;
  3607.     num_part_a=${parts_a[cur_idx_a]#r};
  3608.     num_part_a=${num_part_a##+(0)};
  3609.     : ${num_part_a:=0};
  3610.     num_part_b=${parts_b[cur_idx_b]#r};
  3611.     num_part_b=${num_part_b##+(0)};
  3612.     : ${num_part_b:=0};
  3613.     ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  3614.     ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  3615.     eshopts_pop;
  3616.     return 2
  3617. }
  3618. version_format_string ()
  3619. {
  3620.     local fstr=$1;
  3621.     shift;
  3622.     set -- $(get_version_components "$@");
  3623.     eval echo "${fstr}"
  3624. }
  3625. version_is_at_least ()
  3626. {
  3627.     local want_s="$1" have_s="${2:-${PVR}}" r;
  3628.     version_compare "${want_s}" "${have_s}";
  3629.     r=$?;
  3630.     case $r in
  3631.         1 | 2)
  3632.             return 0
  3633.         ;;
  3634.         3)
  3635.             return 1
  3636.         ;;
  3637.         *)
  3638.             die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
  3639.         ;;
  3640.     esac
  3641. }
  3642. version_sort ()
  3643. {
  3644.     eshopts_push -s extglob;
  3645.     local items=;
  3646.     local -i left=0;
  3647.     items=("$@");
  3648.     while ((left < ${#items[@]})); do
  3649.         local -i lowest_idx=left;
  3650.         local -i idx=lowest_idx+1;
  3651.         while ((idx < ${#items[@]})); do
  3652.             version_compare "${items[lowest_idx]}" "${items[idx]}";
  3653.             [[ $? -eq 3 ]] && lowest_idx=idx;
  3654.             idx+=1;
  3655.         done;
  3656.         local tmp=${items[lowest_idx]};
  3657.         items[lowest_idx]=${items[left]};
  3658.         items[left]=${tmp};
  3659.         left+=1;
  3660.     done;
  3661.     echo ${items[@]};
  3662.     eshopts_pop
  3663. }
Advertisement
Add Comment
Please, Sign In to add comment