spacepaste

  1.  
  2. declare -x ABI="amd64"
  3. declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel ice1724 intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci"
  4. 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"
  5. 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"
  6. declare -x ARCH="amd64"
  7. declare -x ASFLAGS_x86="--32"
  8. declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_4 python_targets_python2_7"
  9. declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author"
  10. declare -x CAMERAS="ptp2"
  11. declare -x CBUILD="x86_64-pc-linux-gnu"
  12. declare -x CDEFINE_amd64="__x86_64__"
  13. declare -x CDEFINE_x86="__i386__"
  14. declare -x CFLAGS="-march=native -O2 -pipe"
  15. declare -x CFLAGS_default
  16. declare -x CFLAGS_x86="-m32"
  17. declare -x CHOST="x86_64-pc-linux-gnu"
  18. declare -x CHOST_amd64="x86_64-pc-linux-gnu"
  19. declare -x CHOST_default="x86_64-pc-linux-gnu"
  20. declare -x CHOST_x86="i686-pc-linux-gnu"
  21. declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
  22. declare -x CONF_PREFIX="/usr"
  23. declare -x CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 ssse3"
  24. declare -x CTARGET_default="x86_64-pc-linux-gnu"
  25. declare -x CXXFLAGS="-march=native -O2 -pipe"
  26. declare -x DEFAULT_ABI="amd64"
  27. declare -x DEFINED_PHASES=" compile configure install postinst postrm preinst prepare test"
  28. declare DEPEND="
  29. >=dev-libs/glib-2.31.10:2
  30. >=media-libs/lcms-2.2:2
  31. >=media-libs/libcanberra-0.10[gtk3]
  32. media-libs/libexif
  33. media-libs/tiff:0=
  34. >=x11-libs/gtk+-3.3.8:3
  35. >=x11-libs/vte-0.25.1:2.91
  36. >=x11-misc/colord-1.3.1:0=
  37. >=x11-libs/colord-gtk-0.1.20
  38. packagekit? ( app-admin/packagekit-base )
  39. raw? ( media-gfx/exiv2 )
  40. app-text/docbook-sgml-dtd:4.1
  41. app-text/docbook-sgml-utils
  42. dev-libs/appstream-glib
  43. dev-libs/libxslt
  44. >=dev-util/intltool-0.35
  45. dev-util/itstool
  46. virtual/pkgconfig
  47. app-arch/xz-utils >=sys-apps/sed-4
  48. dev-util/desktop-file-utils
  49. x11-misc/shared-mime-info
  50. test? (
  51. !prefix? ( x11-base/xorg-server[xvfb] )
  52. x11-apps/xhost
  53. )"
  54. declare DESCRIPTION="Color profile manager for the GNOME desktop"
  55. declare -- DESKTOP_DATABASE_DIR="/usr/share/applications"
  56. declare -- DESKTOP_DATABASE_UPDATE_BIN="/usr/bin/update-desktop-database"
  57. declare -x DESTTREE="/usr"
  58. declare -x DIROPTIONS="-m0755"
  59. declare -x DISABLED=" "
  60. declare -x EAPI="6"
  61. declare -- ECONF_SOURCE="."
  62. declare -x EGIT3_STORE_DIR="/usr/portage/distfiles/git3-src"
  63. declare -x ELIBC="glibc"
  64. declare -- ELTCONF=""
  65. declare -x ELT_APPLIED_PATCHES=" portage/1.2.0 sed/1.5.6 as-needed/2.4.3"
  66. declare -x ENABLED=" "
  67. declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
  68. declare -- EPATCH_EXCLUDE=""
  69. declare -- EPATCH_FORCE="no"
  70. declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
  71. declare -- EPATCH_OPTS=""
  72. declare -- EPATCH_SINGLE_MSG=""
  73. declare -- EPATCH_SOURCE="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/work/patch"
  74. declare -- EPATCH_SUFFIX="patch.bz2"
  75. declare -x EXEOPTIONS="-m0755"
  76. declare -x FCFLAGS="-march=native -O2 -pipe"
  77. declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
  78. declare -x FFLAGS="-march=native -O2 -pipe"
  79. declare -x GCC_SPECS=""
  80. declare -- GCONFTOOL_BIN="/usr/bin/gconftool-2"
  81. declare -- GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas"
  82. declare -- GNOME2_LA_PUNT=""
  83. declare -- GNOME_ORG_MODULE="gnome-color-manager"
  84. declare -- GNOME_ORG_PVP="3.20"
  85. declare -- GNOME_TARBALL_SUFFIX="xz"
  86. declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx"
  87. declare -x GRUB_PLATFORMS="efi-64 pc"
  88. declare -x GSETTINGS_BACKEND="memory"
  89. declare -x GST_INSPECT="/bin/true"
  90. declare -x GST_REGISTRY="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/temp/registry.xml"
  91. declare -- GTK_UPDATE_ICON_CACHE="/usr/bin/gtk-update-icon-cache"
  92. declare -x G_HOME="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/temp"
  93. declare HDEPEND=""
  94. declare HOMEPAGE="https://git.gnome.org/browse/gnome-color-manager"
  95. declare -x INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH="10"
  96. declare -x INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS="true"
  97. declare -x INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT="100"
  98. declare -x INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH="25"
  99. declare -x INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE="0"
  100. declare -x INFINALITY_FT_BOLD_EMBOLDEN_Y_VALUE="0"
  101. declare -x INFINALITY_FT_BRIGHTNESS="0"
  102. declare -x INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH="0"
  103. declare -x INFINALITY_FT_CONTRAST="0"
  104. declare -x INFINALITY_FT_FILTER_PARAMS="11 22 38 22 11"
  105. declare -x INFINALITY_FT_FRINGE_FILTER_STRENGTH="0"
  106. declare -x INFINALITY_FT_GAMMA_CORRECTION="0 100"
  107. declare -x INFINALITY_FT_GLOBAL_EMBOLDEN_X_VALUE="0"
  108. declare -x INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE="0"
  109. declare -x INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH="0"
  110. declare -x INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="25"
  111. declare -x INFINALITY_FT_STEM_FITTING_STRENGTH="25"
  112. declare -x INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE="40"
  113. declare -x INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS="true"
  114. declare -x INFINALITY_FT_USE_VARIOUS_TWEAKS="true"
  115. declare -x INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="5"
  116. declare -x INHERITED=" multilib toolchain-funcs eutils libtool versionator gnome.org xdg-utils gnome2-utils xdg gnome2 virtualx"
  117. declare -x INPUT_DEVICES="evdev synaptics"
  118. declare -x INSDESTTREE=""
  119. declare -x INSOPTIONS="-m0644"
  120. declare IUSE="packagekit raw test"
  121. declare -x IUSE_EFFECTIVE="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc hppa hppa-hpux ia64 ia64-hpux ia64-linux kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_Interix kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k m68k-mint mips nios2 packagekit ppc ppc-aix ppc-macos ppc-openbsd ppc64 ppc64-linux prefix prefix-guest raw riscv s390 sh sparc sparc-fbsd sparc-solaris sparc64-freebsd sparc64-solaris test userland_BSD userland_GNU x64-cygwin x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
  122. declare -x IUSE_IMPLICIT="prefix prefix-guest"
  123. declare -x KERNEL="linux"
  124. declare -x KERNEL_ABI="amd64"
  125. declare -x KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc ~x86"
  126. declare -x L10N="en"
  127. declare -x LANG="en_US.utf8"
  128. declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
  129. declare -x LC_COLLATE="C"
  130. declare -x LC_MESSAGES="C"
  131. declare -x LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed"
  132. declare -x LDFLAGS_default
  133. declare -x LDFLAGS_x86="-m elf_i386"
  134. declare -x LIBDIR_amd64="lib64"
  135. declare -x LIBDIR_amd64_fbsd="lib64"
  136. declare -x LIBDIR_default="lib"
  137. declare -x LIBDIR_ppc="lib32"
  138. declare -x LIBDIR_ppc64="lib64"
  139. declare -x LIBDIR_sparc32="lib32"
  140. declare -x LIBDIR_sparc64="lib64"
  141. declare -x LIBDIR_x86="lib32"
  142. declare -x LIBDIR_x86_fbsd="lib32"
  143. declare -x LIBOPTIONS="-m0644"
  144. declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
  145. declare -x LICENSE="GPL-2+"
  146. declare -x LINGUAS="en"
  147. declare -x MAIL="/var/mail/root"
  148. declare -x MAKEOPTS="-j3"
  149. declare -x MANPAGER="manpager"
  150. declare -- MIMEINFO_DATABASE_DIR="/usr/share/mime"
  151. declare -- MIMEINFO_DATABASE_UPDATE_BIN="/usr/bin/update-mime-database"
  152. declare -x MULTILIB_ABIS="amd64"
  153. declare -x MULTILIB_STRICT_DENY="64-bit.*shared object"
  154. 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"
  155. declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage)"
  156. declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
  157. declare -x OFFICE_IMPLEMENTATION="libreoffice"
  158. declare -x OPENCL_PROFILE="amd"
  159. declare -x OPENGL_PROFILE="xorg-x11"
  160. declare -x PATH="/usr/lib/portage/python3.4/ebuild-helpers/xattr:/usr/lib/portage/python3.4/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.9.3"
  161. declare PDEPEND=""
  162. declare -x PHP_TARGETS="php5-6"
  163. declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig"
  164. declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")'
  165. declare -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
  166. declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/gnome-color-manager-3.20.0/html")'
  167. declare -x PRELINK_PATH_MASK="/usr/lib64/klibc"
  168. declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND"
  169. declare -x PROPERTIES=""
  170. declare -x PROVIDE=""
  171. declare -x PYTHONDONTWRITEBYTECODE="1"
  172. declare -x PYTHON_SINGLE_TARGET="python3_4"
  173. declare -x PYTHON_TARGETS="python2_7 python3_4"
  174. declare -x QEMU_SOFTMMU_TARGETS="i386 x86_64"
  175. declare -x QEMU_USER_TARGETS="i386 x86_64"
  176. declare RDEPEND="
  177. >=dev-libs/glib-2.31.10:2
  178. >=media-libs/lcms-2.2:2
  179. >=media-libs/libcanberra-0.10[gtk3]
  180. media-libs/libexif
  181. media-libs/tiff:0=
  182. >=x11-libs/gtk+-3.3.8:3
  183. >=x11-libs/vte-0.25.1:2.91
  184. >=x11-misc/colord-1.3.1:0=
  185. >=x11-libs/colord-gtk-0.1.20
  186. packagekit? ( app-admin/packagekit-base )
  187. raw? ( media-gfx/exiv2 )
  188. "
  189. declare REPOSITORY
  190. declare REQUIRED_USE=""
  191. declare -x RESTRICT=""
  192. declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
  193. declare -x RUBY_TARGETS="ruby20 ruby21 ruby22"
  194. declare -x S="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/work/gnome-color-manager-3.20.0"
  195. declare -x SANDBOX_DEBUG="0"
  196. declare -x SANDBOX_DENY=""
  197. declare -x SANDBOX_PREDICT="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/homedir:/dev/crypto:/var/cache/fontconfig:/var/tmp/portage/.gnome2"
  198. declare -x SANDBOX_READ="/:/var/tmp"
  199. declare -x SANDBOX_VERBOSE="1"
  200. declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/ptmx:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/homedir/.bash_history"
  201. declare -x SANE_BACKENDS="avision"
  202. declare -- SCROLLKEEPER_DIR="/var/lib/scrollkeeper"
  203. declare -- SCROLLKEEPER_UPDATE_BIN="/usr/bin/scrollkeeper-update"
  204. declare -x SHELL="/bin/bash"
  205. declare -x SLOT="0"
  206. declare SRC_URI="mirror://gnome/sources/gnome-color-manager/3.20/gnome-color-manager-3.20.0.tar.xz"
  207. declare -x STAGE1_USE="multilib nptl nptlonly unicode"
  208. declare -x SUDO_COMMAND="/usr/bin/emerge -1av --deep gnome-color-manager"
  209. declare -x SUDO_GID="100"
  210. declare -x SUDO_UID="1000"
  211. declare -x SUDO_USER="rj"
  212. declare -x SYMLINK_LIB="yes"
  213. declare -x USE="amd64 elibc_glibc kernel_linux userland_GNU"
  214. declare -x USERLAND="GNU"
  215. declare -x USERNAME="root"
  216. declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
  217. declare -x USE_EXPAND_UNPREFIXED="ARCH"
  218. declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips nios2 ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd riscv s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-cygwin x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
  219. declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
  220. declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt"
  221. declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
  222. declare -x VIDEO_CARDS="nouveau radeon r600"
  223. declare -- VIRTUALX_COMMAND="emake"
  224. declare -- VIRTUALX_DEPEND="
  225. !prefix? ( x11-base/xorg-server[xvfb] )
  226. x11-apps/xhost
  227. "
  228. declare -- VIRTUALX_REQUIRED="test"
  229. declare -x XDG_CACHE_HOME="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/homedir/.cache"
  230. declare -x XDG_CONFIG_DIRS="/etc/xdg"
  231. declare -x XDG_CONFIG_HOME="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/homedir/.config"
  232. declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share"
  233. declare -x XDG_DATA_HOME="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/homedir/.local/share"
  234. declare -x XDG_RUNTIME_DIR="/var/tmp/portage/gnome-extra/gnome-color-manager-3.20.0/temp/run"
  235. 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"
  236. declare -- _ELT_NOTED_TMP="true"
  237. declare -- _EUTILS_ECLASS="1"
  238. declare -- _EUTILS_ECLASSDIR_LOCAL="/usr/portage/eclass"
  239. declare -x _E_DOCDESTTREE_=""
  240. declare -x _E_EXEDESTTREE_=""
  241. declare -- _LIBTOOL_ECLASS="1"
  242. declare -- _LIBTOOL_ECLASSDIR_LOCAL="/usr/portage/eclass"
  243. declare -- _MULTILIB_ECLASS="1"
  244. declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
  245. declare -- _VERSIONATOR_ECLASS="1"
  246. declare -- _VIRTUAL_X="1"
  247. declare -- conf="gnome-color-manager-3.20.0-r0"
  248. declare -- phase_func
  249. ELT_libtool_version ()
  250. {
  251. ( unset VERSION;
  252. eval $(grep -e '^[[:space:]]*VERSION=' "$1");
  253. echo "${VERSION:-0}" )
  254. }
  255. ELT_try_and_apply_patch ()
  256. {
  257. local ret=0;
  258. local file=$1;
  259. local patch=$2;
  260. local src=$3;
  261. local disp="${src} patch";
  262. local log="${T}/elibtool.log";
  263. if [[ -z ${_ELT_NOTED_TMP} ]]; then
  264. _ELT_NOTED_TMP=true;
  265. printf 'temp patch: %s\n' "${patch}" > "${log}";
  266. fi;
  267. printf '\nTrying %s\n' "${disp}" >> "${log}";
  268. if [[ ! -e ${file} ]]; then
  269. echo "File not found: ${file}" >> "${log}";
  270. return 1;
  271. fi;
  272. local perms="$(find ${file} -maxdepth 0 -printf '%m')";
  273. if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1; then
  274. einfo " Applying ${disp} ...";
  275. patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1;
  276. ret=$?;
  277. export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}";
  278. else
  279. ret=1;
  280. fi;
  281. chmod "${perms}" "${file}";
  282. return "${ret}"
  283. }
  284. ELT_walk_patches ()
  285. {
  286. local patch tmp;
  287. local ret=1;
  288. local file=$1;
  289. local patch_set=$2;
  290. local patch_dir="$(libtool_elt_patch_dir)/${patch_set}";
  291. local rem_int_dep=$3;
  292. [[ -z ${patch_set} ]] && return 1;
  293. [[ ! -d ${patch_dir} ]] && return 1;
  294. local sed_args=(-e "s:@GENTOO_LIBDIR@:$(get_libdir):g");
  295. if [[ -n ${rem_int_dep} ]]; then
  296. sed_args+=(-e "s|@REM_INT_DEP@|${rem_int_dep}|g");
  297. fi;
  298. pushd "$(libtool_elt_patch_dir)" > /dev/null || die;
  299. for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r);
  300. do
  301. tmp="${T}/libtool-elt.patch";
  302. sed "${sed_args[@]}" "${patch}" > "${tmp}" || die;
  303. if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}"; then
  304. ret=0;
  305. break;
  306. fi;
  307. done;
  308. popd > /dev/null;
  309. return ${ret}
  310. }
  311. VER_major ()
  312. {
  313. [[ -z $1 ]] && return 1;
  314. local VER=$@;
  315. echo "${VER%%[^[:digit:]]*}"
  316. }
  317. VER_micro ()
  318. {
  319. [[ -z $1 ]] && return 1;
  320. local VER=$@;
  321. VER=${VER#*.*.};
  322. echo "${VER%%[^[:digit:]]*}"
  323. }
  324. VER_minor ()
  325. {
  326. [[ -z $1 ]] && return 1;
  327. local VER=$@;
  328. VER=${VER#*.};
  329. echo "${VER%%[^[:digit:]]*}"
  330. }
  331. VER_to_int ()
  332. {
  333. [[ -z $1 ]] && return 1;
  334. local VER_MAJOR=$(VER_major "$1");
  335. local VER_MINOR=$(VER_minor "$1");
  336. local VER_MICRO=$(VER_micro "$1");
  337. local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
  338. if [[ ${VER_int} -ge 65536 ]]; then
  339. echo "${VER_int}";
  340. return 0;
  341. fi;
  342. echo 1;
  343. return 1
  344. }
  345. Xeconf ()
  346. {
  347. debug-print-function ${FUNCNAME} "$@";
  348. [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx econf ....'";
  349. VIRTUALX_COMMAND="econf" virtualmake "$@"
  350. }
  351. Xemake ()
  352. {
  353. debug-print-function ${FUNCNAME} "$@";
  354. [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx emake ....'";
  355. VIRTUALX_COMMAND="emake" virtualmake "$@"
  356. }
  357. Xmake ()
  358. {
  359. debug-print-function ${FUNCNAME} "$@";
  360. [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx emake -j1 ....'";
  361. eqawarn "you should not execute make directly";
  362. eqawarn "rather execute Xemake -j1 if you have issues with parallel make";
  363. VIRTUALX_COMMAND="emake -j1" virtualmake "$@"
  364. }
  365. __eapi6_src_install ()
  366. {
  367. if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
  368. emake DESTDIR="${D}" install;
  369. fi;
  370. einstalldocs
  371. }
  372. __eapi6_src_prepare ()
  373. {
  374. if [[ $(declare -p PATCHES 2>/dev/null) == "declare -a"* ]]; then
  375. eapply "${PATCHES[@]}";
  376. else
  377. if [[ -n ${PATCHES} ]]; then
  378. eapply ${PATCHES};
  379. fi;
  380. fi;
  381. eapply_user
  382. }
  383. _clang_fullversion ()
  384. {
  385. local ver="$1";
  386. shift;
  387. set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__");
  388. eval echo "$ver"
  389. }
  390. _eutils_eprefix_init ()
  391. {
  392. has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}}
  393. }
  394. _gcc-install-dir ()
  395. {
  396. echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')"
  397. }
  398. _gcc-specs-directive_raw ()
  399. {
  400. local cc=$(tc-getCC);
  401. local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
  402. ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
  403. $1=="*"directive":" { pspec=spec; spec=""; outside=0; next }
  404. outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
  405. spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
  406. { spec=spec $0 }
  407. END { print spec }';
  408. return 0
  409. }
  410. _gcc-specs-exists ()
  411. {
  412. [[ -f $(_gcc-install-dir)/$1 ]]
  413. }
  414. _gcc_fullversion ()
  415. {
  416. local ver="$1";
  417. shift;
  418. set -- $($(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__");
  419. eval echo "$ver"
  420. }
  421. _iconins ()
  422. {
  423. ( local funcname=$1;
  424. shift;
  425. local size dir;
  426. local context=apps;
  427. local theme=hicolor;
  428. while [[ $# -gt 0 ]]; do
  429. case $1 in
  430. -s | --size)
  431. if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then
  432. size=${2%%x*};
  433. else
  434. size=${2};
  435. fi;
  436. case ${size} in
  437. 16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256 | 512)
  438. size=${size}x${size}
  439. ;;
  440. scalable)
  441. ;;
  442. *)
  443. eerror "${size} is an unsupported icon size!";
  444. exit 1
  445. ;;
  446. esac;
  447. shift 2
  448. ;;
  449. -t | --theme)
  450. theme=${2};
  451. shift 2
  452. ;;
  453. -c | --context)
  454. context=${2};
  455. shift 2
  456. ;;
  457. *)
  458. if [[ -z ${size} ]]; then
  459. insinto /usr/share/pixmaps;
  460. else
  461. insinto /usr/share/icons/${theme}/${size}/${context};
  462. fi;
  463. if [[ ${funcname} == doicon ]]; then
  464. if [[ -f $1 ]]; then
  465. doins "${1}";
  466. else
  467. if [[ -d $1 ]]; then
  468. shopt -s nullglob;
  469. doins "${1}"/*.{png,svg};
  470. shopt -u nullglob;
  471. else
  472. eerror "${1} is not a valid file/directory!";
  473. exit 1;
  474. fi;
  475. fi;
  476. else
  477. break;
  478. fi;
  479. shift 1
  480. ;;
  481. esac;
  482. done;
  483. if [[ ${funcname} == newicon ]]; then
  484. newins "$@";
  485. fi ) || die
  486. }
  487. _tc-getPROG ()
  488. {
  489. local tuple=$1;
  490. local v var vars=$2;
  491. local prog=($3);
  492. var=${vars%% *};
  493. for v in ${vars};
  494. do
  495. if [[ -n ${!v} ]]; then
  496. export ${var}="${!v}";
  497. echo "${!v}";
  498. return 0;
  499. fi;
  500. done;
  501. local search=;
  502. [[ -n $4 ]] && search=$(type -p $4-${prog[0]});
  503. [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p ${!tuple}-${prog[0]});
  504. [[ -n ${search} ]] && prog[0]=${search##*/};
  505. export ${var}="${prog[*]}";
  506. echo "${!var}"
  507. }
  508. built_with_use ()
  509. {
  510. _eutils_eprefix_init;
  511. local hidden="no";
  512. if [[ $1 == "--hidden" ]]; then
  513. hidden="yes";
  514. shift;
  515. fi;
  516. local missing_action="die";
  517. if [[ $1 == "--missing" ]]; then
  518. missing_action=$2;
  519. shift;
  520. shift;
  521. case ${missing_action} in
  522. true | false | die)
  523. ;;
  524. *)
  525. die "unknown action '${missing_action}'"
  526. ;;
  527. esac;
  528. fi;
  529. local opt=$1;
  530. [[ ${opt:0:1} = "-" ]] && shift || opt="-a";
  531. local PKG=$(best_version $1);
  532. [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
  533. shift;
  534. local USEFILE=${EROOT}/var/db/pkg/${PKG}/USE;
  535. local IUSEFILE=${EROOT}/var/db/pkg/${PKG}/IUSE;
  536. if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
  537. case ${missing_action} in
  538. true)
  539. return 0
  540. ;;
  541. false)
  542. return 1
  543. ;;
  544. die)
  545. die "Unable to determine what USE flags $PKG was built with"
  546. ;;
  547. esac;
  548. fi;
  549. if [[ ${hidden} == "no" ]]; then
  550. local IUSE_BUILT=($(<"${IUSEFILE}"));
  551. local expand;
  552. for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
  553. do
  554. if [[ $1 == ${expand}_* ]]; then
  555. expand="";
  556. break;
  557. fi;
  558. done;
  559. if [[ -n ${expand} ]]; then
  560. if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
  561. case ${missing_action} in
  562. true)
  563. return 0
  564. ;;
  565. false)
  566. return 1
  567. ;;
  568. die)
  569. die "$PKG does not actually support the $1 USE flag!"
  570. ;;
  571. esac;
  572. fi;
  573. fi;
  574. fi;
  575. local USE_BUILT=$(<${USEFILE});
  576. while [[ $# -gt 0 ]]; do
  577. if [[ ${opt} = "-o" ]]; then
  578. has $1 ${USE_BUILT} && return 0;
  579. else
  580. has $1 ${USE_BUILT} || return 1;
  581. fi;
  582. shift;
  583. done;
  584. [[ ${opt} = "-a" ]]
  585. }
  586. check_license ()
  587. {
  588. die "you no longer need this as portage supports ACCEPT_LICENSE itself"
  589. }
  590. clang-fullversion ()
  591. {
  592. _clang_fullversion '$1.$2.$3' "$@"
  593. }
  594. clang-major-version ()
  595. {
  596. _clang_fullversion '$1' "$@"
  597. }
  598. clang-micro-version ()
  599. {
  600. _clang_fullversion '$3' "$@"
  601. }
  602. clang-minor-version ()
  603. {
  604. _clang_fullversion '$2' "$@"
  605. }
  606. clang-version ()
  607. {
  608. _clang_fullversion '$1.$2' "$@"
  609. }
  610. darwintoolize ()
  611. {
  612. die "Use elibtoolize"
  613. }
  614. delete_all_version_separators ()
  615. {
  616. replace_all_version_separators "" "${1}"
  617. }
  618. delete_version_separator ()
  619. {
  620. replace_version_separator "${1}" "" "${2}"
  621. }
  622. doicon ()
  623. {
  624. _iconins ${FUNCNAME} "$@"
  625. }
  626. domenu ()
  627. {
  628. ( local i j ret=0;
  629. insinto /usr/share/applications;
  630. for i in "$@";
  631. do
  632. if [[ -f ${i} ]]; then
  633. doins "${i}";
  634. ((ret+=$?));
  635. else
  636. if [[ -d ${i} ]]; then
  637. for j in "${i}"/*.desktop;
  638. do
  639. doins "${j}";
  640. ((ret+=$?));
  641. done;
  642. else
  643. ((++ret));
  644. fi;
  645. fi;
  646. done;
  647. exit ${ret} )
  648. }
  649. eapply ()
  650. {
  651. local failed;
  652. local -x LC_COLLATE=POSIX;
  653. function _eapply_patch ()
  654. {
  655. local f=${1};
  656. local prefix=${2};
  657. started_applying=1;
  658. ebegin "${prefix:-Applying }${f##*/}";
  659. patch -p1 -f -s -g0 --no-backup-if-mismatch "${patch_options[@]}" < "${f}";
  660. failed=${?};
  661. if ! eend "${failed}"; then
  662. __helpers_die "patch -p1 ${patch_options[*]} failed with ${f}";
  663. fi
  664. };
  665. local patch_options=() files=();
  666. local i found_doublehyphen;
  667. for ((i = 1; i <= ${#@}; ++i ))
  668. do
  669. if [[ ${@:i:1} == -- ]]; then
  670. patch_options=("${@:1:i-1}");
  671. files=("${@:i+1}");
  672. found_doublehyphen=1;
  673. break;
  674. fi;
  675. done;
  676. if [[ -z ${found_doublehyphen} ]]; then
  677. for ((i = 1; i <= ${#@}; ++i ))
  678. do
  679. if [[ ${@:i:1} != -* ]]; then
  680. patch_options=("${@:1:i-1}");
  681. files=("${@:i}");
  682. break;
  683. fi;
  684. done;
  685. for i in "${files[@]}";
  686. do
  687. if [[ ${i} == -* ]]; then
  688. die "eapply: all options must be passed before non-options";
  689. fi;
  690. done;
  691. fi;
  692. if [[ -z ${files[@]} ]]; then
  693. die "eapply: no files specified";
  694. fi;
  695. local f;
  696. for f in "${files[@]}";
  697. do
  698. if [[ -d ${f} ]]; then
  699. function _eapply_get_files ()
  700. {
  701. local LC_ALL=POSIX;
  702. local prev_shopt=$(shopt -p nullglob);
  703. shopt -s nullglob;
  704. local f;
  705. for f in "${1}"/*;
  706. do
  707. if [[ ${f} == *.diff || ${f} == *.patch ]]; then
  708. files+=("${f}");
  709. fi;
  710. done;
  711. ${prev_shopt}
  712. };
  713. local files=();
  714. _eapply_get_files "${f}";
  715. [[ -z ${files[@]} ]] && die "No *.{patch,diff} files in directory ${f}";
  716. einfo "Applying patches from ${f} ...";
  717. local f2;
  718. for f2 in "${files[@]}";
  719. do
  720. _eapply_patch "${f2}" ' ';
  721. [[ ${failed} -ne 0 ]] && return "${failed}";
  722. done;
  723. else
  724. _eapply_patch "${f}";
  725. [[ ${failed} -ne 0 ]] && return "${failed}";
  726. fi;
  727. done;
  728. return 0
  729. }
  730. eapply_user ()
  731. {
  732. [[ ${EBUILD_PHASE} == prepare ]] || die "eapply_user() called during invalid phase: ${EBUILD_PHASE}";
  733. local tagfile=${T}/.portage_user_patches_applied;
  734. [[ -f ${tagfile} ]] && return;
  735. >> "${tagfile}";
  736. local basedir=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
  737. local d applied;
  738. for d in "${basedir}"/${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT%/*}};
  739. do
  740. if [[ -d ${d} ]]; then
  741. eapply "${d}";
  742. applied=1;
  743. fi;
  744. done;
  745. [[ -n ${applied} ]] && ewarn "User patches applied."
  746. }
  747. ebeep ()
  748. {
  749. ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
  750. }
  751. econf_build ()
  752. {
  753. local CBUILD=${CBUILD:-${CHOST}};
  754. tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
  755. }
  756. ecvs_clean ()
  757. {
  758. [[ $# -eq 0 ]] && set -- .;
  759. find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
  760. find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
  761. }
  762. edos2unix ()
  763. {
  764. [[ $# -eq 0 ]] && return 0;
  765. sed -i 's/\r$//' -- "$@" || die
  766. }
  767. egit_clean ()
  768. {
  769. [[ $# -eq 0 ]] && set -- .;
  770. find "$@" -type d -name '.git*' -prune -print0 | xargs -0 rm -rf
  771. }
  772. einstalldocs ()
  773. {
  774. ( if ! declare -p DOCS &> /dev/null; then
  775. local d;
  776. for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
  777. do
  778. [[ -s ${d} ]] && docinto / && dodoc "${d}";
  779. done;
  780. else
  781. if [[ $(declare -p DOCS) == "declare -a"* ]]; then
  782. [[ -n ${DOCS[@]} ]] && docinto / && dodoc -r "${DOCS[@]}";
  783. else
  784. [[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS};
  785. fi;
  786. fi );
  787. ( if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
  788. [[ -n ${HTML_DOCS[@]} ]] && docinto html && dodoc -r "${HTML_DOCS[@]}";
  789. else
  790. [[ -n ${HTML_DOCS} ]] && docinto html && dodoc -r ${HTML_DOCS};
  791. fi )
  792. }
  793. elibtoolize ()
  794. {
  795. local x;
  796. local dirs=();
  797. local do_portage="no";
  798. local do_reversedeps="yes";
  799. local do_only_patches="no";
  800. local do_uclibc="yes";
  801. local deptoremove=;
  802. local do_shallow="no";
  803. local force="false";
  804. local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed target-nm";
  805. for x in "$@";
  806. do
  807. case ${x} in
  808. --portage)
  809. do_portage="yes"
  810. ;;
  811. --reverse-deps)
  812. do_reversedeps="yes";
  813. elt_patches+=" fix-relink"
  814. ;;
  815. --patch-only)
  816. do_only_patches="yes"
  817. ;;
  818. --remove-internal-dep=*)
  819. deptoremove=${x#--remove-internal-dep=};
  820. [[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep"
  821. ;;
  822. --shallow)
  823. do_shallow="yes"
  824. ;;
  825. --no-uclibc)
  826. do_uclibc="no"
  827. ;;
  828. --force)
  829. force="true"
  830. ;;
  831. -*)
  832. eerror "Invalid elibtoolize option: ${x}";
  833. die "elibtoolize called with ${x} ??"
  834. ;;
  835. *)
  836. dirs+=("${x}")
  837. ;;
  838. esac;
  839. done;
  840. [[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf";
  841. case ${CHOST} in
  842. *-aix*)
  843. elt_patches+=" hardcode aixrtl"
  844. ;;
  845. *-darwin*)
  846. elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf"
  847. ;;
  848. *-solaris*)
  849. elt_patches+=" sol2-conf sol2-ltmain"
  850. ;;
  851. *-freebsd*)
  852. elt_patches+=" fbsd-conf fbsd-ltconf"
  853. ;;
  854. *-hpux*)
  855. elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc"
  856. ;;
  857. *-irix*)
  858. elt_patches+=" irix-ltmain"
  859. ;;
  860. *-mint*)
  861. elt_patches+=" mint-conf"
  862. ;;
  863. esac;
  864. if $(tc-getLD) --version 2>&1 | grep -qs 'GNU gold'; then
  865. elt_patches+=" gold-conf";
  866. fi;
  867. if [[ ${do_shallow} == "yes" ]]; then
  868. [[ ${#dirs[@]} -ne 0 ]] && die "Using --shallow with explicit dirs doesn't make sense";
  869. [[ -f ${S}/ltmain.sh || -f ${S}/configure ]] && dirs+=("${S}");
  870. else
  871. [[ ${#dirs[@]} -eq 0 ]] && dirs+=("${S}");
  872. dirs=($(find "${dirs[@]}" '(' -name ltmain.sh -o -name configure ')' -printf '%h\n' | sort -u));
  873. fi;
  874. local d p ret;
  875. for d in "${dirs[@]}";
  876. do
  877. export ELT_APPLIED_PATCHES=;
  878. if [[ -f ${d}/.elibtoolized ]]; then
  879. ${force} || continue;
  880. fi;
  881. local outfunc="einfo";
  882. [[ -f ${d}/.elibtoolized ]] && outfunc="ewarn";
  883. ${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/";
  884. if [[ ${outfunc} == "ewarn" ]]; then
  885. ewarn " We've already been run in this tree; you should";
  886. ewarn " avoid this if possible (perhaps by filing a bug)";
  887. fi;
  888. [[ -f ${d}/ltmain.sh ]] && for p in ${elt_patches};
  889. do
  890. ret=0;
  891. case ${p} in
  892. portage)
  893. if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  894. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  895. ret=$?;
  896. fi
  897. ;;
  898. rem-int-dep)
  899. ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}";
  900. ret=$?
  901. ;;
  902. fix-relink)
  903. if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh"; then
  904. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  905. ret=$?;
  906. fi
  907. ;;
  908. max_cmd_len)
  909. if grep -qs 'max_cmd_len' "${d}/ltmain.sh"; then
  910. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  911. ret=$?;
  912. fi
  913. ;;
  914. as-needed)
  915. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  916. ret=$?
  917. ;;
  918. uclibc-ltconf)
  919. if [[ -s ${d}/ltconfig ]]; then
  920. ELT_walk_patches "${d}/ltconfig" "${p}";
  921. ret=$?;
  922. fi
  923. ;;
  924. fbsd-ltconf)
  925. if [[ -s ${d}/ltconfig ]]; then
  926. ELT_walk_patches "${d}/ltconfig" "${p}";
  927. ret=$?;
  928. fi
  929. ;;
  930. darwin-ltconf)
  931. if [[ -s ${d}/ltconfig ]]; then
  932. ELT_walk_patches "${d}/ltconfig" "${p}";
  933. ret=$?;
  934. fi
  935. ;;
  936. darwin-ltmain)
  937. if [[ -e ${d}/ltmain.sh ]] && ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh"; then
  938. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  939. ret=$?;
  940. fi
  941. ;;
  942. install-sh)
  943. ELT_walk_patches "${d}/install-sh" "${p}";
  944. ret=$?
  945. ;;
  946. cross)
  947. if tc-is-cross-compiler; then
  948. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  949. ret=$?;
  950. fi
  951. ;;
  952. *)
  953. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  954. ret=$?
  955. ;;
  956. esac;
  957. if [[ ${ret} -ne 0 ]]; then
  958. case ${p} in
  959. relink)
  960. local version=$(ELT_libtool_version "${d}/ltmain.sh");
  961. if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
  962. ewarn " Could not apply relink.patch!";
  963. fi
  964. ;;
  965. portage)
  966. if [[ ${do_portage} == "yes" ]]; then
  967. if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  968. echo;
  969. eerror "Portage patch requested, but failed to apply!";
  970. eerror "Please file a bug report to add a proper patch.";
  971. die "Portage patch requested, but failed to apply!";
  972. fi;
  973. else
  974. if grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  975. :;
  976. else
  977. local version=$(ELT_libtool_version "${d}"/ltmain.sh);
  978. echo;
  979. eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
  980. eerror "Please file a bug report to add a proper patch.";
  981. die "Portage patch failed to apply!";
  982. fi;
  983. ELT_APPLIED_PATCHES="portage";
  984. fi
  985. ;;
  986. darwin-*)
  987. [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${p}' failed to apply!"
  988. ;;
  989. esac;
  990. fi;
  991. done;
  992. [[ -f ${d}/ltmain.sh ]] && if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
  993. if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
  994. ewarn "Cannot apply any patches, please file a bug about this";
  995. die;
  996. fi;
  997. fi;
  998. [[ -f ${d}/configure ]] && for p in ${elt_patches};
  999. do
  1000. ret=0;
  1001. case ${p} in
  1002. uclibc-conf)
  1003. if grep -qs 'Transform linux' "${d}/configure"; then
  1004. ELT_walk_patches "${d}/configure" "${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. fi
  1013. ;;
  1014. darwin-conf)
  1015. if grep -qs '&& echo \.so ||' "${d}/configure"; then
  1016. ELT_walk_patches "${d}/configure" "${p}";
  1017. ret=$?;
  1018. fi
  1019. ;;
  1020. aixrtl | hpux-conf)
  1021. ret=1;
  1022. local subret=0;
  1023. while [[ $subret -eq 0 ]]; do
  1024. subret=1;
  1025. if [[ -e ${d}/configure ]]; then
  1026. ELT_walk_patches "${d}/configure" "${p}";
  1027. subret=$?;
  1028. fi;
  1029. if [[ $subret -eq 0 ]]; then
  1030. ret=0;
  1031. fi;
  1032. done
  1033. ;;
  1034. mint-conf | gold-conf | sol2-conf)
  1035. ELT_walk_patches "${d}/configure" "${p}";
  1036. ret=$?
  1037. ;;
  1038. target-nm)
  1039. ELT_walk_patches "${d}/configure" "${p}";
  1040. ret=$?
  1041. ;;
  1042. *)
  1043. ;;
  1044. esac;
  1045. if [[ ${ret} -ne 0 ]]; then
  1046. case ${p} in
  1047. uclibc-*)
  1048. [[ ${CHOST} == *-uclibc ]] && ewarn " uClibc patch set '${p}' failed to apply!"
  1049. ;;
  1050. fbsd-*)
  1051. if [[ ${CHOST} == *-freebsd* ]]; then
  1052. if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${d}/configure" 2>/dev/null) ]]; then
  1053. eerror " FreeBSD patch set '${p}' failed to apply!";
  1054. die "FreeBSD patch set '${p}' failed to apply!";
  1055. fi;
  1056. fi
  1057. ;;
  1058. darwin-*)
  1059. [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${p}' failed to apply!"
  1060. ;;
  1061. esac;
  1062. fi;
  1063. done;
  1064. rm -f "${d}/libtool";
  1065. > "${d}/.elibtoolized";
  1066. done
  1067. }
  1068. emktemp ()
  1069. {
  1070. local exe="touch";
  1071. [[ $1 == -d ]] && exe="mkdir" && shift;
  1072. local topdir=$1;
  1073. if [[ -z ${topdir} ]]; then
  1074. [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
  1075. fi;
  1076. if ! type -P mktemp > /dev/null; then
  1077. local tmp=/;
  1078. while [[ -e ${tmp} ]]; do
  1079. tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
  1080. done;
  1081. ${exe} "${tmp}" || ${exe} -p "${tmp}";
  1082. echo "${tmp}";
  1083. else
  1084. if [[ ${exe} == "touch" ]]; then
  1085. TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
  1086. else
  1087. TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
  1088. fi;
  1089. fi
  1090. }
  1091. epatch ()
  1092. {
  1093. function _epatch_draw_line ()
  1094. {
  1095. [[ -z $1 ]] && set "$(printf "%65s" '')";
  1096. echo "${1//?/=}"
  1097. };
  1098. unset P4CONFIG P4PORT P4USER;
  1099. local EPATCH_OPTS=(${EPATCH_OPTS[*]});
  1100. while [[ $# -gt 0 ]]; do
  1101. case $1 in
  1102. -*)
  1103. EPATCH_OPTS+=("$1")
  1104. ;;
  1105. *)
  1106. break
  1107. ;;
  1108. esac;
  1109. shift;
  1110. done;
  1111. if [[ $# -gt 1 ]]; then
  1112. local m;
  1113. for m in "$@";
  1114. do
  1115. epatch "${m}";
  1116. done;
  1117. return 0;
  1118. fi;
  1119. local SINGLE_PATCH="no";
  1120. [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}";
  1121. if [[ -f $1 ]]; then
  1122. SINGLE_PATCH="yes";
  1123. set -- "$1";
  1124. local EPATCH_SUFFIX=$1;
  1125. else
  1126. if [[ -d $1 ]]; then
  1127. evar_push_set LC_COLLATE C;
  1128. set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
  1129. evar_pop;
  1130. else
  1131. if [[ -f ${EPATCH_SOURCE}/$1 ]]; then
  1132. epatch "${EPATCH_SOURCE}/$1";
  1133. return $?;
  1134. else
  1135. [[ $# -ne 0 ]] && EPATCH_SOURCE=$1;
  1136. echo;
  1137. eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:";
  1138. eerror;
  1139. eerror " ${EPATCH_SOURCE}";
  1140. eerror " ( ${EPATCH_SOURCE##*/} )";
  1141. echo;
  1142. die "Cannot find \$EPATCH_SOURCE!";
  1143. fi;
  1144. fi;
  1145. fi;
  1146. EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
  1147. local PIPE_CMD;
  1148. case ${EPATCH_SUFFIX##*\.} in
  1149. xz)
  1150. PIPE_CMD="xz -dc"
  1151. ;;
  1152. lzma)
  1153. PIPE_CMD="lzma -dc"
  1154. ;;
  1155. bz2)
  1156. PIPE_CMD="bzip2 -dc"
  1157. ;;
  1158. gz | Z | z)
  1159. PIPE_CMD="gzip -dc"
  1160. ;;
  1161. ZIP | zip)
  1162. PIPE_CMD="unzip -p"
  1163. ;;
  1164. *)
  1165. ;;
  1166. esac;
  1167. [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}";
  1168. local x;
  1169. for x in "$@";
  1170. do
  1171. [[ ! -f ${x} ]] && continue;
  1172. local patchname=${x##*/};
  1173. local a=${patchname#*_};
  1174. a=${a%%_*};
  1175. if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then
  1176. continue;
  1177. fi;
  1178. if [[ -n ${EPATCH_EXCLUDE}${EPATCH_USER_EXCLUDE} ]]; then
  1179. eshopts_push -o noglob;
  1180. local ex;
  1181. for ex in ${EPATCH_EXCLUDE};
  1182. do
  1183. if [[ ${patchname} == ${ex} ]]; then
  1184. einfo " Skipping ${patchname} due to EPATCH_EXCLUDE ...";
  1185. eshopts_pop;
  1186. continue 2;
  1187. fi;
  1188. done;
  1189. for ex in ${EPATCH_USER_EXCLUDE};
  1190. do
  1191. if [[ ${patchname} == ${ex} ]]; then
  1192. einfo " Skipping ${patchname} due to EPATCH_USER_EXCLUDE ...";
  1193. eshopts_pop;
  1194. continue 2;
  1195. fi;
  1196. done;
  1197. eshopts_pop;
  1198. fi;
  1199. if [[ ${SINGLE_PATCH} == "yes" ]]; then
  1200. if [[ -n ${EPATCH_SINGLE_MSG} ]]; then
  1201. einfo "${EPATCH_SINGLE_MSG}";
  1202. else
  1203. einfo "Applying ${patchname} ...";
  1204. fi;
  1205. else
  1206. einfo " ${patchname} ...";
  1207. fi;
  1208. local patch="patch";
  1209. eval $(alias patch 2>/dev/null | sed 's:^alias ::');
  1210. local STDERR_TARGET="${T}/${patchname}.out";
  1211. if [[ -e ${STDERR_TARGET} ]]; then
  1212. STDERR_TARGET="${T}/${patchname}-$$.out";
  1213. fi;
  1214. printf "***** %s *****\nPWD: %s\nPATCH TOOL: %s -> %s\nVERSION INFO:\n%s\n\n" "${patchname}" "${PWD}" "${patch}" "$(type -P "${patch}")" "$(${patch} --version)" > "${STDERR_TARGET}";
  1215. local count=0;
  1216. local PATCH_TARGET;
  1217. if [[ -n ${PIPE_CMD} ]]; then
  1218. PATCH_TARGET="${T}/$$.patch";
  1219. echo "PIPE_COMMAND: ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}";
  1220. if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then
  1221. echo;
  1222. eerror "Could not extract patch!";
  1223. count=5;
  1224. break;
  1225. fi;
  1226. else
  1227. PATCH_TARGET=${x};
  1228. fi;
  1229. local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
  1230. if [[ -n ${abs_paths} ]]; then
  1231. count=1;
  1232. printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}";
  1233. fi;
  1234. local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}");
  1235. if [[ -n ${rel_paths} ]]; then
  1236. echo;
  1237. eerror "Rejected Patch: ${patchname} !";
  1238. eerror " ( ${PATCH_TARGET} )";
  1239. eerror;
  1240. eerror "Your patch uses relative paths '../':";
  1241. eerror "${rel_paths}";
  1242. echo;
  1243. die "you need to fix the relative paths in patch";
  1244. fi;
  1245. local patch_cmd;
  1246. while [[ ${count} -lt 5 ]]; do
  1247. patch_cmd="${patch} -p${count} ${EPATCH_OPTS}";
  1248. ( _epatch_draw_line "***** ${patchname} *****";
  1249. echo;
  1250. echo "PATCH COMMAND: ${patch_cmd} --dry-run -f < '${PATCH_TARGET}'";
  1251. echo;
  1252. _epatch_draw_line "***** ${patchname} *****";
  1253. ${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1;
  1254. ret=$?;
  1255. echo;
  1256. echo "patch program exited with status ${ret}";
  1257. exit ${ret} ) >> "${STDERR_TARGET}";
  1258. if [ $? -eq 0 ]; then
  1259. ( _epatch_draw_line "***** ${patchname} *****";
  1260. echo;
  1261. echo "ACTUALLY APPLYING ${patchname} ...";
  1262. echo "PATCH COMMAND: ${patch_cmd} < '${PATCH_TARGET}'";
  1263. echo;
  1264. _epatch_draw_line "***** ${patchname} *****";
  1265. ${patch_cmd} < "${PATCH_TARGET}" 2>&1;
  1266. ret=$?;
  1267. echo;
  1268. echo "patch program exited with status ${ret}";
  1269. exit ${ret} ) >> "${STDERR_TARGET}";
  1270. if [ $? -ne 0 ]; then
  1271. echo;
  1272. eerror "A dry-run of patch command succeeded, but actually";
  1273. eerror "applying the patch failed!";
  1274. count=5;
  1275. fi;
  1276. break;
  1277. fi;
  1278. : $(( count++ ));
  1279. done;
  1280. (( EPATCH_N_APPLIED_PATCHES++ ));
  1281. if [[ -n ${PIPE_CMD} ]]; then
  1282. rm -f "${PATCH_TARGET}";
  1283. fi;
  1284. if [[ ${count} -ge 5 ]]; then
  1285. echo;
  1286. eerror "Failed Patch: ${patchname} !";
  1287. eerror " ( ${PATCH_TARGET} )";
  1288. eerror;
  1289. eerror "Include in your bugreport the contents of:";
  1290. eerror;
  1291. eerror " ${STDERR_TARGET}";
  1292. echo;
  1293. die "Failed Patch: ${patchname}!";
  1294. fi;
  1295. rm -f "${STDERR_TARGET}";
  1296. cat >> "${T}/epatch.log" <<-EOF
  1297. PATCH: ${x}
  1298. CMD: ${patch_cmd}
  1299. PWD: ${PWD}
  1300. EOF
  1301. eend 0;
  1302. done;
  1303. [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
  1304. :
  1305. }
  1306. epause ()
  1307. {
  1308. ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
  1309. }
  1310. epunt_cxx ()
  1311. {
  1312. local dir=$1;
  1313. [[ -z ${dir} ]] && dir=${S};
  1314. ebegin "Removing useless C++ checks";
  1315. local f p any_found;
  1316. while IFS= read -r -d '' f; do
  1317. for p in "$(eutils_elt_patch_dir)"/nocxx/*.patch;
  1318. do
  1319. if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
  1320. any_found=1;
  1321. break;
  1322. fi;
  1323. done;
  1324. done < <(find "${dir}" -name configure -print0);
  1325. if [[ -z ${any_found} ]]; then
  1326. eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
  1327. fi;
  1328. eend 0
  1329. }
  1330. eshopts_pop ()
  1331. {
  1332. local s;
  1333. estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
  1334. if [[ ${s} == "shopt -"* ]]; then
  1335. eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
  1336. else
  1337. set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
  1338. set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
  1339. fi
  1340. }
  1341. eshopts_push ()
  1342. {
  1343. if [[ $1 == -[su] ]]; then
  1344. estack_push eshopts "$(shopt -p)";
  1345. [[ $# -eq 0 ]] && return 0;
  1346. shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
  1347. else
  1348. estack_push eshopts $-;
  1349. [[ $# -eq 0 ]] && return 0;
  1350. set "$@" || die "${FUNCNAME}: bad options to set: $*";
  1351. fi
  1352. }
  1353. estack_pop ()
  1354. {
  1355. [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
  1356. local _estack_name="_ESTACK_$1_";
  1357. shift;
  1358. local _estack_retvar=$1;
  1359. shift;
  1360. eval local _estack_i=\${#${_estack_name}\[@\]};
  1361. [[ $(( --_estack_i )) -eq -1 ]] && return 1;
  1362. if [[ -n ${_estack_retvar} ]]; then
  1363. eval ${_estack_retvar}=\"\${${_estack_name}\[${_estack_i}\]}\";
  1364. fi;
  1365. eval unset \"${_estack_name}\[${_estack_i}\]\"
  1366. }
  1367. estack_push ()
  1368. {
  1369. [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments";
  1370. local stack_name="_ESTACK_$1_";
  1371. shift;
  1372. eval ${stack_name}+=\( \"\$@\" \)
  1373. }
  1374. esvn_clean ()
  1375. {
  1376. [[ $# -eq 0 ]] && set -- .;
  1377. find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
  1378. }
  1379. eumask_pop ()
  1380. {
  1381. [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options";
  1382. local s;
  1383. estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
  1384. umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
  1385. }
  1386. eumask_push ()
  1387. {
  1388. estack_push eumask "$(umask)";
  1389. umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
  1390. }
  1391. eutils_elt_patch_dir ()
  1392. {
  1393. local d="${ECLASSDIR}/ELT-patches";
  1394. if [[ ! -d ${d} ]]; then
  1395. d="${_EUTILS_ECLASSDIR_LOCAL}/ELT-patches";
  1396. fi;
  1397. echo "${d}"
  1398. }
  1399. evar_pop ()
  1400. {
  1401. local cnt=${1:-bad};
  1402. case $# in
  1403. 0)
  1404. cnt=1
  1405. ;;
  1406. 1)
  1407. isdigit "${cnt}" || die "${FUNCNAME}: first arg must be a number: $*"
  1408. ;;
  1409. *)
  1410. die "${FUNCNAME}: only accepts one arg: $*"
  1411. ;;
  1412. esac;
  1413. local var val;
  1414. while (( cnt-- )); do
  1415. estack_pop evar val || die "${FUNCNAME}: unbalanced push";
  1416. estack_pop evar var || die "${FUNCNAME}: unbalanced push";
  1417. [[ ${val} == "unset_76fc3c462065bb4ca959f939e6793f94" ]] && unset ${var} || printf -v "${var}" '%s' "${val}";
  1418. done
  1419. }
  1420. evar_push ()
  1421. {
  1422. local var val;
  1423. for var in "$@";
  1424. do
  1425. [[ ${!var+set} == "set" ]] && val=${!var} || val="unset_76fc3c462065bb4ca959f939e6793f94";
  1426. estack_push evar "${var}" "${val}";
  1427. done
  1428. }
  1429. evar_push_set ()
  1430. {
  1431. local var=$1;
  1432. evar_push ${var};
  1433. case $# in
  1434. 1)
  1435. unset ${var}
  1436. ;;
  1437. 2)
  1438. printf -v "${var}" '%s' "$2"
  1439. ;;
  1440. *)
  1441. die "${FUNCNAME}: incorrect # of args: $*"
  1442. ;;
  1443. esac
  1444. }
  1445. gcc-fullversion ()
  1446. {
  1447. _gcc_fullversion '$1.$2.$3' "$@"
  1448. }
  1449. gcc-major-version ()
  1450. {
  1451. _gcc_fullversion '$1' "$@"
  1452. }
  1453. gcc-micro-version ()
  1454. {
  1455. _gcc_fullversion '$3' "$@"
  1456. }
  1457. gcc-minor-version ()
  1458. {
  1459. _gcc_fullversion '$2' "$@"
  1460. }
  1461. gcc-specs-directive ()
  1462. {
  1463. local directive subdname subdirective;
  1464. directive="$(_gcc-specs-directive_raw $1)";
  1465. while [[ ${directive} == *%\(*\)* ]]; do
  1466. subdname=${directive/*%\(};
  1467. subdname=${subdname/\)*};
  1468. subdirective="$(_gcc-specs-directive_raw ${subdname})";
  1469. directive="${directive//\%(${subdname})/${subdirective}}";
  1470. done;
  1471. echo "${directive}";
  1472. return 0
  1473. }
  1474. gcc-specs-nostrict ()
  1475. {
  1476. local directive;
  1477. directive=$(gcc-specs-directive cc1);
  1478. [[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]
  1479. }
  1480. gcc-specs-now ()
  1481. {
  1482. local directive;
  1483. directive=$(gcc-specs-directive link_command);
  1484. [[ "${directive/\{!nonow:}" != "${directive}" ]]
  1485. }
  1486. gcc-specs-pie ()
  1487. {
  1488. local directive;
  1489. directive=$(gcc-specs-directive cc1);
  1490. [[ "${directive/\{!nopie:}" != "${directive}" ]]
  1491. }
  1492. gcc-specs-relro ()
  1493. {
  1494. local directive;
  1495. directive=$(gcc-specs-directive link_command);
  1496. [[ "${directive/\{!norelro:}" != "${directive}" ]]
  1497. }
  1498. gcc-specs-ssp ()
  1499. {
  1500. local directive;
  1501. directive=$(gcc-specs-directive cc1);
  1502. [[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]
  1503. }
  1504. gcc-specs-ssp-to-all ()
  1505. {
  1506. local directive;
  1507. directive=$(gcc-specs-directive cc1);
  1508. [[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]
  1509. }
  1510. gcc-specs-stack-check ()
  1511. {
  1512. local directive;
  1513. directive=$(gcc-specs-directive cc1);
  1514. [[ "${directive/\{!fno-stack-check:}" != "${directive}" ]]
  1515. }
  1516. gcc-version ()
  1517. {
  1518. _gcc_fullversion '$1.$2' "$@"
  1519. }
  1520. gen_usr_ldscript ()
  1521. {
  1522. local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
  1523. [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
  1524. tc-is-static-only && return;
  1525. if [[ $(type -t multilib_is_native_abi) == "function" ]]; then
  1526. multilib_is_native_abi || return 0;
  1527. fi;
  1528. case ${CTARGET:-${CHOST}} in
  1529. *-darwin*)
  1530. ;;
  1531. *-android*)
  1532. return 0
  1533. ;;
  1534. *linux* | *-freebsd* | *-openbsd* | *-netbsd*)
  1535. use prefix && return 0
  1536. ;;
  1537. *)
  1538. return 0
  1539. ;;
  1540. esac;
  1541. dodir /usr/${libdir};
  1542. if [[ $1 == "-a" ]]; then
  1543. auto=true;
  1544. shift;
  1545. dodir /${libdir};
  1546. fi;
  1547. local flags=(${CFLAGS} ${LDFLAGS} -Wl,--verbose);
  1548. if $(tc-getLD) --version | grep -q 'GNU gold'; then
  1549. local d="${T}/bfd-linker";
  1550. mkdir -p "${d}";
  1551. ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld;
  1552. flags+=(-B"${d}");
  1553. fi;
  1554. output_format=$($(tc-getCC) "${flags[@]}" 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
  1555. [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
  1556. for lib in "$@";
  1557. do
  1558. local tlib;
  1559. if ${auto}; then
  1560. lib="lib${lib}${suffix}";
  1561. else
  1562. [[ -r ${ED}/${libdir}/${lib} ]] || continue;
  1563. fi;
  1564. case ${CTARGET:-${CHOST}} in
  1565. *-darwin*)
  1566. if ${auto}; then
  1567. tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1568. else
  1569. tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
  1570. fi;
  1571. [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
  1572. tlib=${tlib##*/};
  1573. if ${auto}; then
  1574. mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1575. if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
  1576. mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1577. fi;
  1578. rm -f "${ED}"/${libdir}/${lib};
  1579. fi;
  1580. if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
  1581. chmod u+w "${ED}${libdir}/${tlib}";
  1582. local nowrite=yes;
  1583. fi;
  1584. install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
  1585. [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
  1586. pushd "${ED}/usr/${libdir}" > /dev/null;
  1587. ln -snf "../../${libdir}/${tlib}" "${lib}";
  1588. popd > /dev/null
  1589. ;;
  1590. *)
  1591. if ${auto}; then
  1592. tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1593. [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
  1594. mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
  1595. if [[ ${tlib} != ${lib}* ]]; then
  1596. mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
  1597. fi;
  1598. rm -f "${ED}"/${libdir}/${lib};
  1599. else
  1600. tlib=${lib};
  1601. fi;
  1602. cat > "${ED}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
  1603. /* GNU ld script
  1604. Since Gentoo has critical dynamic libraries in /lib, and the static versions
  1605. in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
  1606. run into linking problems. This "fake" dynamic lib is a linker script that
  1607. redirects the linker to the real lib. And yes, this works in the cross-
  1608. compiling scenario as the sysroot-ed linker will prepend the real path.
  1609. See bug https://bugs.gentoo.org/4411 for more info.
  1610. */
  1611. ${output_format}
  1612. GROUP ( ${EPREFIX}/${libdir}/${tlib} )
  1613. END_LDSCRIPT
  1614. ;;
  1615. esac
  1616. fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
  1617. done
  1618. }
  1619. get_abi_CFLAGS ()
  1620. {
  1621. get_abi_var CFLAGS "$@"
  1622. }
  1623. get_abi_CHOST ()
  1624. {
  1625. get_abi_var CHOST "$@"
  1626. }
  1627. get_abi_CTARGET ()
  1628. {
  1629. get_abi_var CTARGET "$@"
  1630. }
  1631. get_abi_FAKE_TARGETS ()
  1632. {
  1633. get_abi_var FAKE_TARGETS "$@"
  1634. }
  1635. get_abi_LDFLAGS ()
  1636. {
  1637. get_abi_var LDFLAGS "$@"
  1638. }
  1639. get_abi_LIBDIR ()
  1640. {
  1641. get_abi_var LIBDIR "$@"
  1642. }
  1643. get_abi_var ()
  1644. {
  1645. local flag=$1;
  1646. local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
  1647. local var="${flag}_${abi}";
  1648. echo ${!var}
  1649. }
  1650. get_after_major_version ()
  1651. {
  1652. echo $(get_version_component_range 2- "${1:-${PV}}")
  1653. }
  1654. get_all_abis ()
  1655. {
  1656. local x order="" mvar dvar;
  1657. mvar="MULTILIB_ABIS";
  1658. dvar="DEFAULT_ABI";
  1659. if [[ -n $1 ]]; then
  1660. mvar="$1_${mvar}";
  1661. dvar="$1_${dvar}";
  1662. fi;
  1663. if [[ -z ${!mvar} ]]; then
  1664. echo "default";
  1665. return 0;
  1666. fi;
  1667. for x in ${!mvar};
  1668. do
  1669. if [[ ${x} != ${!dvar} ]]; then
  1670. order="${order:+${order} }${x}";
  1671. fi;
  1672. done;
  1673. order="${order:+${order} }${!dvar}";
  1674. echo ${order};
  1675. return 0
  1676. }
  1677. get_all_libdirs ()
  1678. {
  1679. local libdirs abi;
  1680. for abi in ${MULTILIB_ABIS};
  1681. do
  1682. libdirs+=" $(get_abi_LIBDIR ${abi})";
  1683. done;
  1684. [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
  1685. echo "${libdirs}"
  1686. }
  1687. get_all_version_components ()
  1688. {
  1689. eshopts_push -s extglob;
  1690. local ver_str=${1:-${PV}} result;
  1691. result=();
  1692. if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]]; then
  1693. echo ${VERSIONATOR_CACHE_RESULT};
  1694. eshopts_pop;
  1695. return;
  1696. fi;
  1697. export VERSIONATOR_CACHE_VER_STR=${ver_str};
  1698. while [[ -n $ver_str ]]; do
  1699. case "${ver_str::1}" in
  1700. [[:digit:]])
  1701. result+=("${ver_str%%[^[:digit:]]*}");
  1702. ver_str=${ver_str##+([[:digit:]])}
  1703. ;;
  1704. [-_.])
  1705. result+=("${ver_str::1}");
  1706. ver_str=${ver_str:1}
  1707. ;;
  1708. [[:alpha:]])
  1709. local not_match=${ver_str##+([[:alpha:]])*([[:digit:]])};
  1710. result+=("${ver_str::${#ver_str} - ${#not_match}}");
  1711. ver_str=${not_match}
  1712. ;;
  1713. *)
  1714. result+=("${ver_str::1}");
  1715. ver_str=${ver_str:1}
  1716. ;;
  1717. esac;
  1718. done;
  1719. export VERSIONATOR_CACHE_RESULT=${result[*]};
  1720. echo ${result[@]};
  1721. eshopts_pop
  1722. }
  1723. get_exeext ()
  1724. {
  1725. case ${CHOST} in
  1726. *-cygwin* | mingw* | *-mingw*)
  1727. echo ".exe"
  1728. ;;
  1729. esac
  1730. }
  1731. get_install_abis ()
  1732. {
  1733. local x order="";
  1734. if [[ -z ${MULTILIB_ABIS} ]]; then
  1735. echo "default";
  1736. return 0;
  1737. fi;
  1738. if [[ ${EMULTILIB_PKG} == "true" ]]; then
  1739. for x in ${MULTILIB_ABIS};
  1740. do
  1741. if [[ ${x} != "${DEFAULT_ABI}" ]]; then
  1742. has ${x} ${ABI_DENY} || order="${order} ${x}";
  1743. fi;
  1744. done;
  1745. has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
  1746. if [[ -n ${ABI_ALLOW} ]]; then
  1747. local ordera="";
  1748. for x in ${order};
  1749. do
  1750. if has ${x} ${ABI_ALLOW}; then
  1751. ordera="${ordera} ${x}";
  1752. fi;
  1753. done;
  1754. order=${ordera};
  1755. fi;
  1756. else
  1757. order=${DEFAULT_ABI};
  1758. fi;
  1759. if [[ -z ${order} ]]; then
  1760. 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.";
  1761. fi;
  1762. echo ${order};
  1763. return 0
  1764. }
  1765. get_last_version_component_index ()
  1766. {
  1767. echo $(($(get_version_component_count "${1:-${PV}}" ) - 1))
  1768. }
  1769. get_libdir ()
  1770. {
  1771. local libdir_var="LIBDIR_${ABI}";
  1772. local libdir="lib";
  1773. [[ -n ${ABI} && -n ${!libdir_var} ]] && libdir=${!libdir_var};
  1774. echo "${libdir}"
  1775. }
  1776. get_libname ()
  1777. {
  1778. local libname;
  1779. local ver=$1;
  1780. case ${CHOST} in
  1781. *-cygwin*)
  1782. libname="dll.a"
  1783. ;;
  1784. mingw* | *-mingw*)
  1785. libname="dll"
  1786. ;;
  1787. *-darwin*)
  1788. libname="dylib"
  1789. ;;
  1790. *-mint*)
  1791. libname="irrelevant"
  1792. ;;
  1793. hppa*-hpux*)
  1794. libname="sl"
  1795. ;;
  1796. *)
  1797. libname="so"
  1798. ;;
  1799. esac;
  1800. if [[ -z $* ]]; then
  1801. echo ".${libname}";
  1802. else
  1803. for ver in "$@";
  1804. do
  1805. case ${CHOST} in
  1806. *-cygwin*)
  1807. echo ".${ver}.${libname}"
  1808. ;;
  1809. *-darwin*)
  1810. echo ".${ver}.${libname}"
  1811. ;;
  1812. *-mint*)
  1813. echo ".${libname}"
  1814. ;;
  1815. *)
  1816. echo ".${libname}.${ver}"
  1817. ;;
  1818. esac;
  1819. done;
  1820. fi
  1821. }
  1822. get_major_version ()
  1823. {
  1824. local c=($(get_all_version_components "${1:-${PV}}"));
  1825. echo ${c[0]}
  1826. }
  1827. get_modname ()
  1828. {
  1829. local modname;
  1830. local ver=$1;
  1831. case ${CHOST} in
  1832. *-darwin*)
  1833. modname="bundle"
  1834. ;;
  1835. *)
  1836. modname="so"
  1837. ;;
  1838. esac;
  1839. echo ".${modname}"
  1840. }
  1841. get_version_component_count ()
  1842. {
  1843. local a=($(get_version_components "${1:-${PV}}"));
  1844. echo ${#a[@]}
  1845. }
  1846. get_version_component_range ()
  1847. {
  1848. eshopts_push -s extglob;
  1849. local c v="${2:-${PV}}" range="${1}" range_start range_end;
  1850. local -i i=-1 j=0;
  1851. c=($(get_all_version_components "${v}"));
  1852. range_start=${range%-*};
  1853. range_start=${range_start:-1};
  1854. range_end=${range#*-};
  1855. range_end=${range_end:-${#c[@]}};
  1856. while ((j < range_start)); do
  1857. i+=1;
  1858. ((i > ${#c[@]})) && eshopts_pop && return;
  1859. [[ -n "${c[i]//[-._]}" ]] && j+=1;
  1860. done;
  1861. while ((j <= range_end)); do
  1862. echo -n ${c[i]};
  1863. ((i > ${#c[@]})) && eshopts_pop && return;
  1864. [[ -n "${c[i]//[-._]}" ]] && j+=1;
  1865. i+=1;
  1866. done;
  1867. eshopts_pop
  1868. }
  1869. get_version_components ()
  1870. {
  1871. local c=$(get_all_version_components "${1:-${PV}}");
  1872. echo ${c//[-._]/ }
  1873. }
  1874. gnome2_disable_deprecation_warning ()
  1875. {
  1876. local retval=0;
  1877. local fails=();
  1878. local makefile;
  1879. ebegin "Disabling deprecation warnings";
  1880. while read makefile; do
  1881. if ! grep -qE "(DISABLE_DEPRECATED|GSEAL_ENABLE)" "${makefile}"; then
  1882. continue;
  1883. fi;
  1884. LC_ALL=C sed -r -i -e 's:-D[A-Z_]+_DISABLE_DEPRECATED:$(/bin/true):g' -e 's:-DGSEAL_ENABLE(=[A-Za-z0-9_]*)?:$(/bin/true):g' -i "${makefile}";
  1885. if [[ $? -ne 0 ]]; then
  1886. fails+=("${makefile}");
  1887. retval=2;
  1888. fi;
  1889. done < <(find "${S}" -name "Makefile.in" -o -name "Makefile.am" -o -name "Makefile.decl" | sort; [[ -f "${S}"/configure ]] && echo configure);
  1890. eend ${retval};
  1891. for makefile in "${fails[@]}";
  1892. do
  1893. ewarn "Failed to disable deprecation warnings in ${makefile}";
  1894. done
  1895. }
  1896. gnome2_environment_reset ()
  1897. {
  1898. xdg_environment_reset;
  1899. export G_HOME="${T}";
  1900. export GST_REGISTRY="${T}/registry.xml";
  1901. export GSETTINGS_BACKEND="memory";
  1902. if has ${EAPI:-0} 6; then
  1903. export GST_INSPECT="$(type -P true)";
  1904. unset DISPLAY;
  1905. fi
  1906. }
  1907. gnome2_gconf_install ()
  1908. {
  1909. has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  1910. local updater="${EROOT}${GCONFTOOL_BIN}";
  1911. if [[ ! -x "${updater}" ]]; then
  1912. debug-print "${updater} is not executable";
  1913. return;
  1914. fi;
  1915. if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
  1916. debug-print "No GNOME 2 GConf schemas found";
  1917. return;
  1918. fi;
  1919. unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  1920. export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")";
  1921. einfo "Installing GNOME 2 GConf schemas";
  1922. local F;
  1923. for F in ${GNOME2_ECLASS_SCHEMAS};
  1924. do
  1925. if [[ -e "${EROOT}${F}" ]]; then
  1926. debug-print "Installing schema: ${F}";
  1927. "${updater}" --makefile-install-rule "${EROOT}${F}" > /dev/null;
  1928. fi;
  1929. done;
  1930. pids=$(pgrep -x gconfd-2);
  1931. if [[ $? == 0 ]]; then
  1932. ebegin "Reloading GConf schemas";
  1933. kill -HUP ${pids};
  1934. eend $?;
  1935. fi
  1936. }
  1937. gnome2_gconf_savelist ()
  1938. {
  1939. has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  1940. pushd "${ED}" > /dev/null || die;
  1941. export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null);
  1942. popd > /dev/null || die
  1943. }
  1944. gnome2_gconf_uninstall ()
  1945. {
  1946. has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  1947. local updater="${EROOT}${GCONFTOOL_BIN}";
  1948. if [[ ! -x "${updater}" ]]; then
  1949. debug-print "${updater} is not executable";
  1950. return;
  1951. fi;
  1952. if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
  1953. debug-print "No GNOME 2 GConf schemas found";
  1954. return;
  1955. fi;
  1956. unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  1957. export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")";
  1958. einfo "Uninstalling GNOME 2 GConf schemas";
  1959. local F;
  1960. for F in ${GNOME2_ECLASS_SCHEMAS};
  1961. do
  1962. if [[ -e "${EROOT}${F}" ]]; then
  1963. debug-print "Uninstalling gconf schema: ${F}";
  1964. "${updater}" --makefile-uninstall-rule "${EROOT}${F}" > /dev/null;
  1965. fi;
  1966. done;
  1967. pids=$(pgrep -x gconfd-2);
  1968. if [[ $? == 0 ]]; then
  1969. ebegin "Reloading GConf schemas";
  1970. kill -HUP ${pids};
  1971. eend $?;
  1972. fi
  1973. }
  1974. gnome2_gdk_pixbuf_savelist ()
  1975. {
  1976. has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  1977. pushd "${ED}" > /dev/null || die;
  1978. export GNOME2_ECLASS_GDK_PIXBUF_LOADERS=$(find usr/lib*/gdk-pixbuf-2.0 -type f 2>/dev/null);
  1979. popd > /dev/null || die
  1980. }
  1981. gnome2_gdk_pixbuf_update ()
  1982. {
  1983. has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  1984. local updater="${EROOT}/usr/bin/${CHOST}-gdk-pixbuf-query-loaders";
  1985. if [[ ! -x ${updater} ]]; then
  1986. updater="${EROOT}/usr/bin/gdk-pixbuf-query-loaders";
  1987. fi;
  1988. if [[ ! -x ${updater} ]]; then
  1989. debug-print "${updater} is not executable";
  1990. return;
  1991. fi;
  1992. if [[ -z ${GNOME2_ECLASS_GDK_PIXBUF_LOADERS} ]]; then
  1993. debug-print "gdk-pixbuf loader cache does not need an update";
  1994. return;
  1995. fi;
  1996. ebegin "Updating gdk-pixbuf loader cache";
  1997. local tmp_file=$(emktemp);
  1998. ${updater} > "${tmp_file}" && chmod 0644 "${tmp_file}" && cp -f "${tmp_file}" "${EROOT}usr/$(get_libdir)/gdk-pixbuf-2.0/2.10.0/loaders.cache" && rm "${tmp_file}";
  1999. eend $?
  2000. }
  2001. gnome2_giomodule_cache_update ()
  2002. {
  2003. has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2004. local updater="${EROOT}/usr/bin/${CHOST}-gio-querymodules";
  2005. if [[ ! -x ${updater} ]]; then
  2006. updater="${EROOT}/usr/bin/gio-querymodules";
  2007. fi;
  2008. if [[ ! -x ${updater} ]]; then
  2009. debug-print "${updater} is not executable";
  2010. return;
  2011. fi;
  2012. ebegin "Updating GIO modules cache";
  2013. ${updater} "${EROOT%/}"/usr/$(get_libdir)/gio/modules;
  2014. eend $?
  2015. }
  2016. gnome2_icon_cache_update ()
  2017. {
  2018. has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2019. local updater="${EROOT}${GTK_UPDATE_ICON_CACHE}";
  2020. if [[ ! -x "${updater}" ]]; then
  2021. debug-print "${updater} is not executable";
  2022. return;
  2023. fi;
  2024. if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
  2025. debug-print "No icon cache to update";
  2026. return;
  2027. fi;
  2028. ebegin "Updating icons cache";
  2029. local retval=0;
  2030. local fails=();
  2031. for dir in ${GNOME2_ECLASS_ICONS};
  2032. do
  2033. if [[ -f "${EROOT}${dir}/index.theme" ]]; then
  2034. local rv=0;
  2035. "${updater}" -qf "${EROOT}${dir}";
  2036. rv=$?;
  2037. if [[ ! $rv -eq 0 ]]; then
  2038. debug-print "Updating cache failed on ${EROOT}${dir}";
  2039. fails[$(( ${#fails[@]} + 1 ))]="${EROOT}${dir}";
  2040. retval=2;
  2041. fi;
  2042. else
  2043. if [[ $(ls "${EROOT}${dir}") = "icon-theme.cache" ]]; then
  2044. rm "${EROOT}${dir}/icon-theme.cache";
  2045. fi;
  2046. fi;
  2047. if [[ -z $(ls "${EROOT}${dir}") ]]; then
  2048. rmdir "${EROOT}${dir}";
  2049. fi;
  2050. done;
  2051. eend ${retval};
  2052. for f in "${fails[@]}";
  2053. do
  2054. eerror "Failed to update cache with icon $f";
  2055. done
  2056. }
  2057. gnome2_icon_savelist ()
  2058. {
  2059. has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2060. pushd "${ED}" > /dev/null || die;
  2061. export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null);
  2062. popd > /dev/null || die
  2063. }
  2064. gnome2_omf_fix ()
  2065. {
  2066. local omf_makefiles filename;
  2067. omf_makefiles="$@";
  2068. if [[ -f ${S}/omf.make ]]; then
  2069. omf_makefiles="${omf_makefiles} ${S}/omf.make";
  2070. fi;
  2071. if [[ -f ${S}/gnome-doc-utils.make ]]; then
  2072. omf_makefiles="${omf_makefiles} ${S}/gnome-doc-utils.make";
  2073. fi;
  2074. for filename in $(find "${S}" -name "Makefile.in" -o -name "Makefile.am" |sort);
  2075. do
  2076. omf_makefiles="${omf_makefiles} ${filename}";
  2077. done;
  2078. ebegin "Fixing OMF Makefiles";
  2079. local retval=0;
  2080. local fails=();
  2081. for omf in ${omf_makefiles};
  2082. do
  2083. sed -i -e 's:scrollkeeper-update:true:' "${omf}";
  2084. retval=$?;
  2085. if [[ $retval -ne 0 ]]; then
  2086. debug-print "updating of ${omf} failed";
  2087. fails[$(( ${#fails[@]} + 1 ))]=$omf;
  2088. retval=2;
  2089. fi;
  2090. done;
  2091. eend $retval;
  2092. for f in "${fails[@]}";
  2093. do
  2094. eerror "Failed to update OMF Makefile $f";
  2095. done
  2096. }
  2097. gnome2_pkg_postinst ()
  2098. {
  2099. xdg_pkg_postinst;
  2100. gnome2_gconf_install;
  2101. gnome2_icon_cache_update;
  2102. gnome2_schemas_update;
  2103. gnome2_scrollkeeper_update;
  2104. gnome2_gdk_pixbuf_update;
  2105. if [[ ${#GNOME2_ECLASS_GIO_MODULES[@]} -gt 0 ]]; then
  2106. gnome2_giomodule_cache_update;
  2107. fi
  2108. }
  2109. gnome2_pkg_postrm ()
  2110. {
  2111. xdg_pkg_postrm;
  2112. gnome2_icon_cache_update;
  2113. gnome2_schemas_update;
  2114. gnome2_scrollkeeper_update;
  2115. if [[ ${#GNOME2_ECLASS_GIO_MODULES[@]} -gt 0 ]]; then
  2116. gnome2_giomodule_cache_update;
  2117. fi
  2118. }
  2119. gnome2_pkg_preinst ()
  2120. {
  2121. xdg_pkg_preinst;
  2122. gnome2_gconf_savelist;
  2123. gnome2_icon_savelist;
  2124. gnome2_schemas_savelist;
  2125. gnome2_scrollkeeper_savelist;
  2126. gnome2_gdk_pixbuf_savelist;
  2127. local f;
  2128. GNOME2_ECLASS_GIO_MODULES=();
  2129. while IFS= read -r -d '' f; do
  2130. GNOME2_ECLASS_GIO_MODULES+=(${f});
  2131. done < <(cd "${D}" && find usr/$(get_libdir)/gio/modules -type f -print0 2>/dev/null);
  2132. export GNOME2_ECLASS_GIO_MODULES
  2133. }
  2134. gnome2_query_immodules_gtk2 ()
  2135. {
  2136. local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-2.0;
  2137. [[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-2.0;
  2138. ebegin "Updating gtk2 input method module cache";
  2139. GTK_IM_MODULE_FILE="${EROOT}usr/$(get_libdir)/gtk-2.0/2.10.0/immodules.cache" "${updater}" --update-cache;
  2140. eend $?
  2141. }
  2142. gnome2_query_immodules_gtk3 ()
  2143. {
  2144. local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-3.0;
  2145. [[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-3.0;
  2146. ebegin "Updating gtk3 input method module cache";
  2147. GTK_IM_MODULE_FILE="${EROOT}usr/$(get_libdir)/gtk-3.0/3.0.0/immodules.cache" "${updater}" --update-cache;
  2148. eend $?
  2149. }
  2150. gnome2_schemas_savelist ()
  2151. {
  2152. has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2153. pushd "${ED}" > /dev/null || die;
  2154. export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null);
  2155. popd > /dev/null || die
  2156. }
  2157. gnome2_schemas_update ()
  2158. {
  2159. has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2160. local updater="${EROOT}${GLIB_COMPILE_SCHEMAS}";
  2161. if [[ ! -x ${updater} ]]; then
  2162. debug-print "${updater} is not executable";
  2163. return;
  2164. fi;
  2165. if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then
  2166. debug-print "No GSettings schemas to update";
  2167. return;
  2168. fi;
  2169. ebegin "Updating GSettings schemas";
  2170. ${updater} --allow-any-name "$@" "${EROOT%/}/usr/share/glib-2.0/schemas" &> /dev/null;
  2171. eend $?
  2172. }
  2173. gnome2_scrollkeeper_savelist ()
  2174. {
  2175. has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2176. pushd "${ED}" > /dev/null || die;
  2177. export GNOME2_ECLASS_SCROLLS=$(find 'usr/share/omf' -type f -name "*.omf" 2> /dev/null);
  2178. popd > /dev/null || die
  2179. }
  2180. gnome2_scrollkeeper_update ()
  2181. {
  2182. has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2183. local updater="${EROOT}${SCROLLKEEPER_UPDATE_BIN}";
  2184. if [[ ! -x "${updater}" ]]; then
  2185. debug-print "${updater} is not executable";
  2186. return;
  2187. fi;
  2188. if [[ -z "${GNOME2_ECLASS_SCROLLS}" ]]; then
  2189. debug-print "No scroll cache to update";
  2190. return;
  2191. fi;
  2192. ebegin "Updating scrollkeeper database ...";
  2193. "${updater}" -q -p "${EROOT}${SCROLLKEEPER_DIR}";
  2194. eend $?
  2195. }
  2196. gnome2_src_compile ()
  2197. {
  2198. if has ${EAPI:-0} 4 5; then
  2199. emake;
  2200. else
  2201. default;
  2202. fi
  2203. }
  2204. gnome2_src_configure ()
  2205. {
  2206. if [[ -n ${G2CONF} ]]; then
  2207. if has ${EAPI:-0} 4 5; then
  2208. eqawarn "G2CONF set, please review documentation at https://wiki.gentoo.org/wiki/Project:GNOME/Gnome_Team_Ebuild_Policies#G2CONF_and_src_configure";
  2209. else
  2210. die "G2CONF set, please review documentation at https://wiki.gentoo.org/wiki/Project:GNOME/Gnome_Team_Ebuild_Policies#G2CONF_and_src_configure";
  2211. fi;
  2212. fi;
  2213. local g2conf=();
  2214. if has ${EAPI:-0} 4 5; then
  2215. if [[ ${GCONF_DEBUG} != 'no' ]]; then
  2216. if use debug; then
  2217. g2conf+=(--enable-debug=yes);
  2218. fi;
  2219. fi;
  2220. else
  2221. if [[ -n ${GCONF_DEBUG} ]]; then
  2222. die "GCONF_DEBUG is banned since eapi6 in favor of each ebuild taking care of the proper handling of debug configure option";
  2223. fi;
  2224. fi;
  2225. if grep -q "enable-gtk-doc" "${ECONF_SOURCE:-.}"/configure; then
  2226. if has ${EAPI:-0} 4 && in_iuse doc; then
  2227. g2conf+=($(use_enable doc gtk-doc));
  2228. else
  2229. g2conf+=(--disable-gtk-doc);
  2230. fi;
  2231. fi;
  2232. if grep -q "^[[:space:]]*AM_MAINTAINER_MODE(\[enable\])" "${ECONF_SOURCE:-.}"/configure.*; then
  2233. g2conf+=(--disable-maintainer-mode);
  2234. fi;
  2235. if grep -q "disable-scrollkeeper" "${ECONF_SOURCE:-.}"/configure; then
  2236. g2conf+=(--disable-scrollkeeper);
  2237. fi;
  2238. if has ${EAPI:-0} 4; then
  2239. if grep -q "disable-silent-rules" "${ECONF_SOURCE:-.}"/configure; then
  2240. g2conf+=(--disable-silent-rules);
  2241. fi;
  2242. fi;
  2243. if grep -q "disable-schemas-install" "${ECONF_SOURCE:-.}"/configure; then
  2244. g2conf+=(--disable-schemas-install);
  2245. fi;
  2246. if grep -q "disable-schemas-compile" "${ECONF_SOURCE:-.}"/configure; then
  2247. g2conf+=(--disable-schemas-compile);
  2248. fi;
  2249. if grep -q "disable-update-mimedb" "${ECONF_SOURCE:-.}"/configure; then
  2250. g2conf+=(--disable-update-mimedb);
  2251. fi;
  2252. if grep -q "enable-compile-warnings" "${ECONF_SOURCE:-.}"/configure; then
  2253. g2conf+=(--enable-compile-warnings=minimum);
  2254. fi;
  2255. if has ${EAPI:-0} 4 5; then
  2256. if grep -q "^ *--docdir=" "${ECONF_SOURCE:-.}"/configure; then
  2257. g2conf+=(--docdir="${EPREFIX}"/usr/share/doc/${PF});
  2258. fi;
  2259. fi;
  2260. if has ${EAPI:-0} 4 5; then
  2261. addwrite "$(unset HOME; echo ~)/.gnome2";
  2262. else
  2263. addpredict "$(unset HOME; echo ~)/.gnome2";
  2264. fi;
  2265. if has ${EAPI:-0} 4 5; then
  2266. econf ${g2conf[@]} ${G2CONF} "$@";
  2267. else
  2268. econf ${g2conf[@]} "$@";
  2269. fi
  2270. }
  2271. gnome2_src_install ()
  2272. {
  2273. export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL="1";
  2274. local sk_tmp_dir="/var/lib/scrollkeeper";
  2275. if has ${EAPI:-0} 4 5; then
  2276. dodir "${sk_tmp_dir}" || die "dodir failed";
  2277. emake DESTDIR="${D}" "scrollkeeper_localstate_dir=${ED}${sk_tmp_dir} " "$@" install || die "install failed";
  2278. else
  2279. default;
  2280. fi;
  2281. unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  2282. if has ${EAPI:-0} 4; then
  2283. if [[ -n "${DOCS}" ]]; then
  2284. dodoc ${DOCS} || die "dodoc failed";
  2285. fi;
  2286. else
  2287. if has ${EAPI:-0} 5; then
  2288. einstalldocs;
  2289. else
  2290. local d;
  2291. for d in HACKING MAINTAINERS;
  2292. do
  2293. [[ -s "${d}" ]] && dodoc "${d}";
  2294. done;
  2295. fi;
  2296. fi;
  2297. rm -rf "${ED}${sk_tmp_dir}";
  2298. rmdir "${ED}/var/lib" 2> /dev/null;
  2299. rmdir "${ED}/var" 2> /dev/null;
  2300. rm -fr "${ED}/usr/share/applications/mimeinfo.cache";
  2301. if has ${EAPI:-0} 4; then
  2302. if [[ "${GNOME2_LA_PUNT}" != "no" ]]; then
  2303. ebegin "Removing .la files";
  2304. if ! use_if_iuse static-libs; then
  2305. find "${D}" -name '*.la' -exec rm -f {} + || die "la file removal failed";
  2306. fi;
  2307. eend;
  2308. fi;
  2309. else
  2310. case "${GNOME2_LA_PUNT}" in
  2311. yes)
  2312. prune_libtool_files --modules
  2313. ;;
  2314. no)
  2315. ;;
  2316. *)
  2317. prune_libtool_files
  2318. ;;
  2319. esac;
  2320. fi
  2321. }
  2322. gnome2_src_prepare ()
  2323. {
  2324. xdg_src_prepare;
  2325. gnome2_environment_reset;
  2326. has ${EAPI:-0} 4 5 && gnome2_omf_fix;
  2327. gnome2_disable_deprecation_warning;
  2328. elibtoolize ${ELTCONF}
  2329. }
  2330. gnome2_src_unpack ()
  2331. {
  2332. if has ${EAPI:-0} 4 5; then
  2333. unpack ${A};
  2334. cd "${S}";
  2335. else
  2336. die "gnome2_src_unpack is banned from eapi6";
  2337. fi
  2338. }
  2339. has_multilib_profile ()
  2340. {
  2341. [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
  2342. }
  2343. in_iuse ()
  2344. {
  2345. local use=${1};
  2346. if [[ -z "${use}" ]]; then
  2347. echo "!!! in_iuse() called without a parameter." 1>&2;
  2348. echo "!!! in_iuse <USEFLAG>" 1>&2;
  2349. die "in_iuse() called without a parameter";
  2350. fi;
  2351. local liuse=(${IUSE_EFFECTIVE});
  2352. has "${use}" "${liuse[@]#[+-]}"
  2353. }
  2354. is_final_abi ()
  2355. {
  2356. has_multilib_profile || return 0;
  2357. set -- $(get_install_abis);
  2358. local LAST_ABI=$#;
  2359. [[ ${!LAST_ABI} == ${ABI} ]]
  2360. }
  2361. isdigit ()
  2362. {
  2363. local d;
  2364. for d in "$@";
  2365. do
  2366. [[ ${d:-bad} == *[!0-9]* ]] && return 1;
  2367. done;
  2368. return 0
  2369. }
  2370. libtool_elt_patch_dir ()
  2371. {
  2372. local d="${ECLASSDIR}/ELT-patches";
  2373. if [[ ! -d ${d} ]]; then
  2374. d="${_LIBTOOL_ECLASSDIR_LOCAL}/ELT-patches";
  2375. fi;
  2376. echo "${d}"
  2377. }
  2378. localpatch ()
  2379. {
  2380. if ! has localpatch ${foobashrc_modules} || [ "${FUNCNAME[1]}" != "${localpatch_into_phase:-post_src_unpack}" ]; then
  2381. return;
  2382. else
  2383. local patches_overlay_dir patches patch locksufix;
  2384. locksufix="${RANDOM}";
  2385. LOCALPATCH_OVERLAY="${LOCALPATCH_OVERLAY:-/etc/portage/localpatches}";
  2386. if [ -d "${LOCALPATCH_OVERLAY}" ]; then
  2387. if [ -d "${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}-${PR}" ]; then
  2388. patches_overlay_dir="${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}-${PR}";
  2389. else
  2390. if [ -d "${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}" ]; then
  2391. patches_overlay_dir="${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}";
  2392. else
  2393. if [ -d "${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}" ]; then
  2394. patches_overlay_dir="${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}";
  2395. fi;
  2396. fi;
  2397. fi;
  2398. if [ -n "${patches_overlay_dir}" ]; then
  2399. patches="$(find "${patches_overlay_dir}"/ -name '*.diff' -o -name '*.patch' | sort -n)";
  2400. fi;
  2401. else
  2402. ewarn "LOCALPATCH_OVERLAY is set to '${LOCALPATCH_OVERLAY}' but there is no such directory.";
  2403. fi;
  2404. if [ -n "${patches}" ]; then
  2405. echo '>>> Applying local patches ...';
  2406. if [ ! -d "${S}" ]; then
  2407. eerror "The \$S variable pointing to non existing dir. Propably ebuild is messing with it.";
  2408. eerror "Localpatch cannot work in such case.";
  2409. die "localpatch failed.";
  2410. fi;
  2411. for patch in ${patches};
  2412. do
  2413. if [ -f "${patch}" ] && [ -r "${patch}" ] && [ ! -f "${S}/.patch-${patch##*/}.${locksufix}" ]; then
  2414. for patchprefix in {0..4};
  2415. do
  2416. if patch -d "${S}" --dry-run -p${patchprefix} -i "${patch}" --silent > /dev/null; then
  2417. einfo "Applying ${patch##*/} [localpatch] ...";
  2418. patch -d "${S}" -p${patchprefix} -i "${patch}" --silent;
  2419. eend $?;
  2420. touch "${S}/.patch-${patch##*/}.${locksufix}";
  2421. EPATCH_EXCLUDE+=" ${patch##*/} ";
  2422. break;
  2423. else
  2424. if [ "${patchprefix}" -ge 4 ]; then
  2425. eerror "\e[1;31mLocal patch ${patch##*/} does not fit.\e[0m";
  2426. eend 1;
  2427. die "localpatch failed.";
  2428. fi;
  2429. fi;
  2430. done;
  2431. fi;
  2432. done;
  2433. rm "${S}"/.patch-*."${locksufix}" -f;
  2434. fi;
  2435. fi
  2436. }
  2437. make_desktop_entry ()
  2438. {
  2439. [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable";
  2440. local exec=${1};
  2441. local name=${2:-${PN}};
  2442. local icon=${3:-${PN}};
  2443. local type=${4};
  2444. local fields=${5};
  2445. if [[ -z ${type} ]]; then
  2446. local catmaj=${CATEGORY%%-*};
  2447. local catmin=${CATEGORY##*-};
  2448. case ${catmaj} in
  2449. app)
  2450. case ${catmin} in
  2451. accessibility)
  2452. type="Utility;Accessibility"
  2453. ;;
  2454. admin)
  2455. type=System
  2456. ;;
  2457. antivirus)
  2458. type=System
  2459. ;;
  2460. arch)
  2461. type="Utility;Archiving"
  2462. ;;
  2463. backup)
  2464. type="Utility;Archiving"
  2465. ;;
  2466. cdr)
  2467. type="AudioVideo;DiscBurning"
  2468. ;;
  2469. dicts)
  2470. type="Office;Dictionary"
  2471. ;;
  2472. doc)
  2473. type=Documentation
  2474. ;;
  2475. editors)
  2476. type="Utility;TextEditor"
  2477. ;;
  2478. emacs)
  2479. type="Development;TextEditor"
  2480. ;;
  2481. emulation)
  2482. type="System;Emulator"
  2483. ;;
  2484. laptop)
  2485. type="Settings;HardwareSettings"
  2486. ;;
  2487. office)
  2488. type=Office
  2489. ;;
  2490. pda)
  2491. type="Office;PDA"
  2492. ;;
  2493. vim)
  2494. type="Development;TextEditor"
  2495. ;;
  2496. xemacs)
  2497. type="Development;TextEditor"
  2498. ;;
  2499. esac
  2500. ;;
  2501. dev)
  2502. type="Development"
  2503. ;;
  2504. games)
  2505. case ${catmin} in
  2506. action | fps)
  2507. type=ActionGame
  2508. ;;
  2509. arcade)
  2510. type=ArcadeGame
  2511. ;;
  2512. board)
  2513. type=BoardGame
  2514. ;;
  2515. emulation)
  2516. type=Emulator
  2517. ;;
  2518. kids)
  2519. type=KidsGame
  2520. ;;
  2521. puzzle)
  2522. type=LogicGame
  2523. ;;
  2524. roguelike)
  2525. type=RolePlaying
  2526. ;;
  2527. rpg)
  2528. type=RolePlaying
  2529. ;;
  2530. simulation)
  2531. type=Simulation
  2532. ;;
  2533. sports)
  2534. type=SportsGame
  2535. ;;
  2536. strategy)
  2537. type=StrategyGame
  2538. ;;
  2539. esac;
  2540. type="Game;${type}"
  2541. ;;
  2542. gnome)
  2543. type="Gnome;GTK"
  2544. ;;
  2545. kde)
  2546. type="KDE;Qt"
  2547. ;;
  2548. mail)
  2549. type="Network;Email"
  2550. ;;
  2551. media)
  2552. case ${catmin} in
  2553. gfx)
  2554. type=Graphics
  2555. ;;
  2556. *)
  2557. case ${catmin} in
  2558. radio)
  2559. type=Tuner
  2560. ;;
  2561. sound)
  2562. type=Audio
  2563. ;;
  2564. tv)
  2565. type=TV
  2566. ;;
  2567. video)
  2568. type=Video
  2569. ;;
  2570. esac;
  2571. type="AudioVideo;${type}"
  2572. ;;
  2573. esac
  2574. ;;
  2575. net)
  2576. case ${catmin} in
  2577. dialup)
  2578. type=Dialup
  2579. ;;
  2580. ftp)
  2581. type=FileTransfer
  2582. ;;
  2583. im)
  2584. type=InstantMessaging
  2585. ;;
  2586. irc)
  2587. type=IRCClient
  2588. ;;
  2589. mail)
  2590. type=Email
  2591. ;;
  2592. news)
  2593. type=News
  2594. ;;
  2595. nntp)
  2596. type=News
  2597. ;;
  2598. p2p)
  2599. type=FileTransfer
  2600. ;;
  2601. voip)
  2602. type=Telephony
  2603. ;;
  2604. esac;
  2605. type="Network;${type}"
  2606. ;;
  2607. sci)
  2608. case ${catmin} in
  2609. astro*)
  2610. type=Astronomy
  2611. ;;
  2612. bio*)
  2613. type=Biology
  2614. ;;
  2615. calc*)
  2616. type=Calculator
  2617. ;;
  2618. chem*)
  2619. type=Chemistry
  2620. ;;
  2621. elec*)
  2622. type=Electronics
  2623. ;;
  2624. geo*)
  2625. type=Geology
  2626. ;;
  2627. math*)
  2628. type=Math
  2629. ;;
  2630. physics)
  2631. type=Physics
  2632. ;;
  2633. visual*)
  2634. type=DataVisualization
  2635. ;;
  2636. esac;
  2637. type="Education;Science;${type}"
  2638. ;;
  2639. sys)
  2640. type="System"
  2641. ;;
  2642. www)
  2643. case ${catmin} in
  2644. client)
  2645. type=WebBrowser
  2646. ;;
  2647. esac;
  2648. type="Network;${type}"
  2649. ;;
  2650. *)
  2651. type=
  2652. ;;
  2653. esac;
  2654. fi;
  2655. local slot=${SLOT%/*};
  2656. if [[ ${slot} == "0" ]]; then
  2657. local desktop_name="${PN}";
  2658. else
  2659. local desktop_name="${PN}-${slot}";
  2660. fi;
  2661. local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
  2662. type=${type%;}${type:+;};
  2663. eshopts_push -s extglob;
  2664. if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
  2665. ewarn "As described in the Icon Theme Specification, icon file extensions are not";
  2666. ewarn "allowed in .desktop files if the value is not an absolute path.";
  2667. icon=${icon%.@(xpm|png|svg)};
  2668. fi;
  2669. eshopts_pop;
  2670. cat > "${desktop}" <<-EOF
  2671. [Desktop Entry]
  2672. Name=${name}
  2673. Type=Application
  2674. Comment=${DESCRIPTION}
  2675. Exec=${exec}
  2676. TryExec=${exec%% *}
  2677. Icon=${icon}
  2678. Categories=${type}
  2679. EOF
  2680. if [[ ${fields:-=} != *=* ]]; then
  2681. ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
  2682. fields="Path=${fields}";
  2683. fi;
  2684. [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
  2685. ( insinto /usr/share/applications;
  2686. doins "${desktop}" ) || die "installing desktop file failed"
  2687. }
  2688. make_session_desktop ()
  2689. {
  2690. [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
  2691. [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
  2692. local title=$1;
  2693. local command=$2;
  2694. local desktop=${T}/${wm:-${PN}}.desktop;
  2695. shift 2;
  2696. cat > "${desktop}" <<-EOF
  2697. [Desktop Entry]
  2698. Name=${title}
  2699. Comment=This session logs you into ${title}
  2700. Exec=${command} $*
  2701. TryExec=${command}
  2702. Type=XSession
  2703. EOF
  2704. ( insinto /usr/share/xsessions;
  2705. doins "${desktop}" )
  2706. }
  2707. make_wrapper ()
  2708. {
  2709. _eutils_eprefix_init;
  2710. local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
  2711. local tmpwrapper=$(emktemp);
  2712. ( echo '#!/bin/sh';
  2713. [[ -n ${chdir} ]] && printf 'cd "%s"\n' "${EPREFIX}${chdir}";
  2714. if [[ -n ${libdir} ]]; then
  2715. local var;
  2716. if [[ ${CHOST} == *-darwin* ]]; then
  2717. var=DYLD_LIBRARY_PATH;
  2718. else
  2719. var=LD_LIBRARY_PATH;
  2720. fi;
  2721. cat <<-EOF
  2722. if [ "\${${var}+set}" = "set" ] ; then
  2723. export ${var}="\${${var}}:${EPREFIX}${libdir}"
  2724. else
  2725. export ${var}="${EPREFIX}${libdir}"
  2726. fi
  2727. EOF
  2728. fi
  2729. printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
  2730. chmod go+rx "${tmpwrapper}";
  2731. if [[ -n ${path} ]]; then
  2732. ( exeinto "${path}";
  2733. newexe "${tmpwrapper}" "${wrapper}" ) || die;
  2734. else
  2735. newbin "${tmpwrapper}" "${wrapper}" || die;
  2736. fi
  2737. }
  2738. multilib_env ()
  2739. {
  2740. local CTARGET=${1:-${CTARGET}};
  2741. local cpu=${CTARGET%%*-};
  2742. case ${cpu} in
  2743. aarch64*)
  2744. export CFLAGS_arm=${CFLAGS_arm-};
  2745. case ${cpu} in
  2746. aarch64*be)
  2747. export CHOST_arm="armv8b-${CTARGET#*-}"
  2748. ;;
  2749. *)
  2750. export CHOST_arm="armv8l-${CTARGET#*-}"
  2751. ;;
  2752. esac;
  2753. CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
  2754. export CTARGET_arm=${CHOST_arm};
  2755. export LIBDIR_arm="lib";
  2756. export CFLAGS_arm64=${CFLAGS_arm64-};
  2757. export CHOST_arm64=${CTARGET};
  2758. export CTARGET_arm64=${CHOST_arm64};
  2759. export LIBDIR_arm64="lib64";
  2760. : ${MULTILIB_ABIS=arm64};
  2761. : ${DEFAULT_ABI=arm64}
  2762. ;;
  2763. x86_64*)
  2764. export CFLAGS_x86=${CFLAGS_x86--m32};
  2765. export CHOST_x86=${CTARGET/x86_64/i686};
  2766. CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
  2767. export CTARGET_x86=${CHOST_x86};
  2768. if [[ ${SYMLINK_LIB} == "yes" ]]; then
  2769. export LIBDIR_x86="lib32";
  2770. else
  2771. export LIBDIR_x86="lib";
  2772. fi;
  2773. export CFLAGS_amd64=${CFLAGS_amd64--m64};
  2774. export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
  2775. export CTARGET_amd64=${CHOST_amd64};
  2776. export LIBDIR_amd64="lib64";
  2777. export CFLAGS_x32=${CFLAGS_x32--mx32};
  2778. export CHOST_x32=${CTARGET/%-gnu/-gnux32};
  2779. export CTARGET_x32=${CHOST_x32};
  2780. export LIBDIR_x32="libx32";
  2781. case ${CTARGET} in
  2782. *-gnux32)
  2783. : ${MULTILIB_ABIS=x32 amd64 x86};
  2784. : ${DEFAULT_ABI=x32}
  2785. ;;
  2786. *)
  2787. : ${MULTILIB_ABIS=amd64 x86};
  2788. : ${DEFAULT_ABI=amd64}
  2789. ;;
  2790. esac
  2791. ;;
  2792. mips64*)
  2793. export CFLAGS_o32=${CFLAGS_o32--mabi=32};
  2794. export CHOST_o32=${CTARGET/mips64/mips};
  2795. export CTARGET_o32=${CHOST_o32};
  2796. export LIBDIR_o32="lib";
  2797. export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
  2798. export CHOST_n32=${CTARGET};
  2799. export CTARGET_n32=${CHOST_n32};
  2800. export LIBDIR_n32="lib32";
  2801. export CFLAGS_n64=${CFLAGS_n64--mabi=64};
  2802. export CHOST_n64=${CTARGET};
  2803. export CTARGET_n64=${CHOST_n64};
  2804. export LIBDIR_n64="lib64";
  2805. : ${MULTILIB_ABIS=n64 n32 o32};
  2806. : ${DEFAULT_ABI=n32}
  2807. ;;
  2808. powerpc64*)
  2809. export CFLAGS_ppc=${CFLAGS_ppc--m32};
  2810. export CHOST_ppc=${CTARGET/powerpc64/powerpc};
  2811. export CTARGET_ppc=${CHOST_ppc};
  2812. export LIBDIR_ppc="lib";
  2813. export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
  2814. export CHOST_ppc64=${CTARGET};
  2815. export CTARGET_ppc64=${CHOST_ppc64};
  2816. export LIBDIR_ppc64="lib64";
  2817. : ${MULTILIB_ABIS=ppc64 ppc};
  2818. : ${DEFAULT_ABI=ppc64}
  2819. ;;
  2820. s390x*)
  2821. export CFLAGS_s390=${CFLAGS_s390--m31};
  2822. export CHOST_s390=${CTARGET/s390x/s390};
  2823. export CTARGET_s390=${CHOST_s390};
  2824. export LIBDIR_s390="lib";
  2825. export CFLAGS_s390x=${CFLAGS_s390x--m64};
  2826. export CHOST_s390x=${CTARGET};
  2827. export CTARGET_s390x=${CHOST_s390x};
  2828. export LIBDIR_s390x="lib64";
  2829. : ${MULTILIB_ABIS=s390x s390};
  2830. : ${DEFAULT_ABI=s390x}
  2831. ;;
  2832. sparc64*)
  2833. export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
  2834. export CHOST_sparc32=${CTARGET/sparc64/sparc};
  2835. export CTARGET_sparc32=${CHOST_sparc32};
  2836. export LIBDIR_sparc32="lib";
  2837. export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
  2838. export CHOST_sparc64=${CTARGET};
  2839. export CTARGET_sparc64=${CHOST_sparc64};
  2840. export LIBDIR_sparc64="lib64";
  2841. : ${MULTILIB_ABIS=sparc64 sparc32};
  2842. : ${DEFAULT_ABI=sparc64}
  2843. ;;
  2844. *)
  2845. : ${MULTILIB_ABIS=default};
  2846. : ${DEFAULT_ABI=default}
  2847. ;;
  2848. esac;
  2849. export MULTILIB_ABIS DEFAULT_ABI
  2850. }
  2851. multilib_toolchain_setup ()
  2852. {
  2853. local v vv;
  2854. export ABI=$1;
  2855. if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
  2856. for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  2857. do
  2858. vv="_abi_saved_${v}";
  2859. [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
  2860. unset ${vv};
  2861. done;
  2862. unset _DEFAULT_ABI_SAVED;
  2863. fi;
  2864. if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
  2865. for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  2866. do
  2867. vv="_abi_saved_${v}";
  2868. [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
  2869. done;
  2870. export _DEFAULT_ABI_SAVED="true";
  2871. export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
  2872. export CC="$(tc-getCC) $(get_abi_CFLAGS)";
  2873. export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
  2874. export F77="$(tc-getF77) $(get_abi_CFLAGS)";
  2875. export FC="$(tc-getFC) $(get_abi_CFLAGS)";
  2876. export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
  2877. export CHOST=$(get_abi_CHOST $1);
  2878. export CBUILD=$(get_abi_CHOST $1);
  2879. export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
  2880. export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
  2881. fi
  2882. }
  2883. newicon ()
  2884. {
  2885. _iconins ${FUNCNAME} "$@"
  2886. }
  2887. newmenu ()
  2888. {
  2889. ( insinto /usr/share/applications;
  2890. newins "$@" )
  2891. }
  2892. number_abis ()
  2893. {
  2894. set -- `get_install_abis`;
  2895. echo $#
  2896. }
  2897. optfeature ()
  2898. {
  2899. debug-print-function ${FUNCNAME} "$@";
  2900. local i j msg;
  2901. local desc=$1;
  2902. local flag=0;
  2903. shift;
  2904. for i in "$@";
  2905. do
  2906. for j in ${i};
  2907. do
  2908. if has_version "${j}"; then
  2909. flag=1;
  2910. else
  2911. flag=0;
  2912. break;
  2913. fi;
  2914. done;
  2915. if [[ ${flag} -eq 1 ]]; then
  2916. break;
  2917. fi;
  2918. done;
  2919. if [[ ${flag} -eq 0 ]]; then
  2920. for i in "$@";
  2921. do
  2922. msg=" ";
  2923. for j in ${i};
  2924. do
  2925. msg+=" ${j} and";
  2926. done;
  2927. msg="${msg:0: -4} for ${desc}";
  2928. elog "${msg}";
  2929. done;
  2930. fi
  2931. }
  2932. path_exists ()
  2933. {
  2934. local opt=$1;
  2935. [[ ${opt} == -[ao] ]] && shift || opt="-a";
  2936. [[ $# -eq 0 ]] && return 1;
  2937. local p r=0;
  2938. for p in "$@";
  2939. do
  2940. [[ -e ${p} ]];
  2941. : $(( r += $? ));
  2942. done;
  2943. case ${opt} in
  2944. -a)
  2945. return $(( r != 0 ))
  2946. ;;
  2947. -o)
  2948. return $(( r == $# ))
  2949. ;;
  2950. esac
  2951. }
  2952. pkg_nofetch ()
  2953. {
  2954. default
  2955. }
  2956. pkg_postinst ()
  2957. {
  2958. gnome2_pkg_postinst;
  2959. if ! has_version media-gfx/argyllcms; then
  2960. elog "If you want to do display or scanner calibration, you will need to";
  2961. elog "install media-gfx/argyllcms";
  2962. fi
  2963. }
  2964. pkg_postrm ()
  2965. {
  2966. gnome2_pkg_postrm "$@"
  2967. }
  2968. pkg_preinst ()
  2969. {
  2970. gnome2_pkg_preinst "$@"
  2971. }
  2972. post_pkg_postinst ()
  2973. {
  2974. has pathparanoid ${foobashrc_modules} && pathparanoid --restore-acls --recursive /
  2975. }
  2976. post_pkg_preinst ()
  2977. {
  2978. has striplafiles ${foobashrc_modules} && striplafiles;
  2979. has pathparanoid ${foobashrc_modules} && pathparanoid --restore-acls --recursive --prefix "${D}" / > /dev/null 2>&1
  2980. }
  2981. post_src_compile ()
  2982. {
  2983. localpatch
  2984. }
  2985. post_src_configure ()
  2986. {
  2987. localpatch
  2988. }
  2989. post_src_install ()
  2990. {
  2991. localpatch
  2992. }
  2993. post_src_prepare ()
  2994. {
  2995. localpatch
  2996. }
  2997. post_src_unpack ()
  2998. {
  2999. localpatch
  3000. }
  3001. pre_src_compile ()
  3002. {
  3003. localpatch
  3004. }
  3005. pre_src_configure ()
  3006. {
  3007. localpatch
  3008. }
  3009. pre_src_install ()
  3010. {
  3011. localpatch
  3012. }
  3013. pre_src_prepare ()
  3014. {
  3015. localpatch
  3016. }
  3017. pre_src_unpack ()
  3018. {
  3019. localpatch
  3020. }
  3021. preserve_old_lib ()
  3022. {
  3023. _eutils_eprefix_init;
  3024. if [[ ${EBUILD_PHASE} != "preinst" ]]; then
  3025. eerror "preserve_old_lib() must be called from pkg_preinst() only";
  3026. die "Invalid preserve_old_lib() usage";
  3027. fi;
  3028. [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
  3029. has preserve-libs ${FEATURES} && return 0;
  3030. local lib dir;
  3031. for lib in "$@";
  3032. do
  3033. [[ -e ${EROOT}/${lib} ]] || continue;
  3034. dir=${lib%/*};
  3035. dodir ${dir} || die "dodir ${dir} failed";
  3036. cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp ${lib} failed";
  3037. touch "${ED}"/${lib};
  3038. done
  3039. }
  3040. preserve_old_lib_notify ()
  3041. {
  3042. if [[ ${EBUILD_PHASE} != "postinst" ]]; then
  3043. eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
  3044. die "Invalid preserve_old_lib_notify() usage";
  3045. fi;
  3046. has preserve-libs ${FEATURES} && return 0;
  3047. _eutils_eprefix_init;
  3048. local lib notice=0;
  3049. for lib in "$@";
  3050. do
  3051. [[ -e ${EROOT}/${lib} ]] || continue;
  3052. if [[ ${notice} -eq 0 ]]; then
  3053. notice=1;
  3054. ewarn "Old versions of installed libraries were detected on your system.";
  3055. ewarn "In order to avoid breaking packages that depend on these old libs,";
  3056. ewarn "the libraries are not being removed. You need to run revdep-rebuild";
  3057. ewarn "in order to remove these old dependencies. If you do not have this";
  3058. ewarn "helper program, simply emerge the 'gentoolkit' package.";
  3059. ewarn;
  3060. fi;
  3061. ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'";
  3062. done
  3063. }
  3064. prune_libtool_files ()
  3065. {
  3066. debug-print-function ${FUNCNAME} "$@";
  3067. local removing_all removing_modules opt;
  3068. _eutils_eprefix_init;
  3069. for opt in "$@";
  3070. do
  3071. case "${opt}" in
  3072. --all)
  3073. removing_all=1;
  3074. removing_modules=1
  3075. ;;
  3076. --modules)
  3077. removing_modules=1
  3078. ;;
  3079. *)
  3080. die "Invalid argument to ${FUNCNAME}(): ${opt}"
  3081. ;;
  3082. esac;
  3083. done;
  3084. local f;
  3085. local queue=();
  3086. while IFS= read -r -d '' f; do
  3087. local archivefile=${f/%.la/.a};
  3088. if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then
  3089. continue;
  3090. fi;
  3091. [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
  3092. local reason= pkgconfig_scanned=;
  3093. local snotlink=$(sed -n -e 's:^shouldnotlink=::p' "${f}");
  3094. if [[ ${snotlink} == yes ]]; then
  3095. if [[ -f ${archivefile} ]]; then
  3096. einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
  3097. queue+=("${archivefile}");
  3098. fi;
  3099. if [[ -n ${removing_modules} ]]; then
  3100. reason='module';
  3101. fi;
  3102. else
  3103. if [[ -n ${removing_all} ]]; then
  3104. reason='requested';
  3105. else
  3106. if [[ ! -f ${archivefile} ]]; then
  3107. reason='no static archive';
  3108. else
  3109. if [[ ! -n $(sed -nre "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" "${f}") ]]; then
  3110. reason='no libs & flags';
  3111. else
  3112. if [[ ! -n ${pkgconfig_scanned} ]]; then
  3113. local pc_libs=();
  3114. if [[ ! -n ${removing_all} ]]; then
  3115. local pc;
  3116. local tf=${T}/prune-lt-files.pc;
  3117. local pkgconf=$(tc-getPKG_CONFIG);
  3118. while IFS= read -r -d '' pc; do
  3119. local arg libs;
  3120. if ${pkgconf} --exists "${pc}" &> /dev/null; then
  3121. sed -e '/^Requires:/d' "${pc}" > "${tf}";
  3122. libs=$(${pkgconf} --libs "${tf}");
  3123. else
  3124. libs=$(sed -ne 's/^Libs://p' "${pc}");
  3125. fi;
  3126. for arg in ${libs};
  3127. do
  3128. if [[ ${arg} == -l* ]]; then
  3129. if [[ ${arg} == '*$*' ]]; then
  3130. eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
  3131. eqawarn "(arg: ${arg})";
  3132. eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
  3133. fi;
  3134. pc_libs+=(lib${arg#-l}.la);
  3135. fi;
  3136. done;
  3137. done < <(find "${D}" -type f -name '*.pc' -print0);
  3138. rm -f "${tf}";
  3139. fi;
  3140. pkgconfig_scanned=1;
  3141. fi;
  3142. has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
  3143. fi;
  3144. fi;
  3145. fi;
  3146. fi;
  3147. if [[ -n ${reason} ]]; then
  3148. einfo "Removing unnecessary ${f#${D%/}} (${reason})";
  3149. queue+=("${f}");
  3150. fi;
  3151. done < <(find "${ED}" -xtype f -name '*.la' -print0);
  3152. if [[ -n ${queue[@]} ]]; then
  3153. rm -f "${queue[@]}";
  3154. fi
  3155. }
  3156. replace_all_version_separators ()
  3157. {
  3158. local c=($(get_all_version_components "${2:-${PV}}"));
  3159. c=${c[@]//[-._]/$1};
  3160. echo ${c// }
  3161. }
  3162. replace_version_separator ()
  3163. {
  3164. eshopts_push -s extglob;
  3165. local w c v="${3:-${PV}}";
  3166. declare -i i found=0;
  3167. w=${1:-1};
  3168. c=($(get_all_version_components ${v}));
  3169. if [[ ${w} != *[[:digit:]]* ]]; then
  3170. for ((i = 0; i < ${#c[@]}; i++))
  3171. do
  3172. if [[ ${c[i]} == ${w} ]]; then
  3173. c[i]=${2};
  3174. break;
  3175. fi;
  3176. done;
  3177. else
  3178. for ((i = 0; i < ${#c[@]}; i++))
  3179. do
  3180. if [[ -n "${c[i]//[^-._]}" ]]; then
  3181. found+=1;
  3182. if ((found == w)); then
  3183. c[i]=${2};
  3184. break;
  3185. fi;
  3186. fi;
  3187. done;
  3188. fi;
  3189. c=${c[*]};
  3190. echo ${c// };
  3191. eshopts_pop
  3192. }
  3193. src_compile ()
  3194. {
  3195. gnome2_src_compile "$@"
  3196. }
  3197. src_configure ()
  3198. {
  3199. gnome2_src_configure --disable-static --enable-tests $(use_enable packagekit) $(use_enable raw exiv) APPSTREAM_UTIL=$(type -P true)
  3200. }
  3201. src_install ()
  3202. {
  3203. gnome2_src_install "$@"
  3204. }
  3205. src_prepare ()
  3206. {
  3207. gnome2_src_prepare "$@"
  3208. }
  3209. src_test ()
  3210. {
  3211. virtx emake check
  3212. }
  3213. src_unpack ()
  3214. {
  3215. default
  3216. }
  3217. strip-linguas ()
  3218. {
  3219. local ls newls nols;
  3220. if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
  3221. local op=$1;
  3222. shift;
  3223. ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
  3224. shift;
  3225. local d f;
  3226. for d in "$@";
  3227. do
  3228. if [[ ${op} == "-u" ]]; then
  3229. newls=${ls};
  3230. else
  3231. newls="";
  3232. fi;
  3233. for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
  3234. do
  3235. if [[ ${op} == "-i" ]]; then
  3236. has ${f} ${ls} && newls="${newls} ${f}";
  3237. else
  3238. has ${f} ${ls} || newls="${newls} ${f}";
  3239. fi;
  3240. done;
  3241. ls=${newls};
  3242. done;
  3243. else
  3244. ls="$@";
  3245. fi;
  3246. nols="";
  3247. newls="";
  3248. for f in ${LINGUAS};
  3249. do
  3250. if has ${f} ${ls}; then
  3251. newls="${newls} ${f}";
  3252. else
  3253. nols="${nols} ${f}";
  3254. fi;
  3255. done;
  3256. [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
  3257. export LINGUAS=${newls:1}
  3258. }
  3259. striplafiles ()
  3260. {
  3261. if has 'static-libs' ${USE}; then
  3262. return;
  3263. fi;
  3264. local i install_lafiles lafiles_whitelist;
  3265. lafiles_whitelist=(imagemagick libtool gst-plugins-base libsidplay gnome-bluetooth kdelibs);
  3266. for i in "${lafiles_whitelist[@]}";
  3267. do
  3268. if [ "${PN}" = "${i}" ]; then
  3269. install_lafiles='true';
  3270. break;
  3271. fi;
  3272. done;
  3273. if ! [ "${install_lafiles}" = 'true' ]; then
  3274. local line;
  3275. find "${D}" -type f -name '*.la' -print0 | while read -d '' line; do
  3276. einfo "Removing \${D}/${line/${D}} [striplafiles] ...";
  3277. rm "${line}";
  3278. eend $?;
  3279. done;
  3280. fi
  3281. }
  3282. tc-arch ()
  3283. {
  3284. tc-ninja_magic_to_arch portage "$@"
  3285. }
  3286. tc-arch-kernel ()
  3287. {
  3288. tc-ninja_magic_to_arch kern "$@"
  3289. }
  3290. tc-endian ()
  3291. {
  3292. local host=$1;
  3293. [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  3294. host=${host%%-*};
  3295. case ${host} in
  3296. aarch64*be)
  3297. echo big
  3298. ;;
  3299. aarch64)
  3300. echo little
  3301. ;;
  3302. alpha*)
  3303. echo big
  3304. ;;
  3305. arm*b*)
  3306. echo big
  3307. ;;
  3308. arm*)
  3309. echo little
  3310. ;;
  3311. cris*)
  3312. echo little
  3313. ;;
  3314. hppa*)
  3315. echo big
  3316. ;;
  3317. i?86*)
  3318. echo little
  3319. ;;
  3320. ia64*)
  3321. echo little
  3322. ;;
  3323. m68*)
  3324. echo big
  3325. ;;
  3326. mips*l*)
  3327. echo little
  3328. ;;
  3329. mips*)
  3330. echo big
  3331. ;;
  3332. powerpc*le)
  3333. echo little
  3334. ;;
  3335. powerpc*)
  3336. echo big
  3337. ;;
  3338. s390*)
  3339. echo big
  3340. ;;
  3341. sh*b*)
  3342. echo big
  3343. ;;
  3344. sh*)
  3345. echo little
  3346. ;;
  3347. sparc*)
  3348. echo big
  3349. ;;
  3350. x86_64*)
  3351. echo little
  3352. ;;
  3353. *)
  3354. echo wtf
  3355. ;;
  3356. esac
  3357. }
  3358. tc-env_build ()
  3359. {
  3360. tc-export_build_env;
  3361. CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
  3362. }
  3363. tc-export ()
  3364. {
  3365. local var;
  3366. for var in "$@";
  3367. do
  3368. [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
  3369. eval tc-get${var} > /dev/null;
  3370. done
  3371. }
  3372. tc-export_build_env ()
  3373. {
  3374. tc-export "$@";
  3375. : ${BUILD_CFLAGS:=-O1 -pipe};
  3376. : ${BUILD_CXXFLAGS:=-O1 -pipe};
  3377. : ${BUILD_CPPFLAGS:= };
  3378. : ${BUILD_LDFLAGS:= };
  3379. export BUILD_{C,CXX,CPP,LD}FLAGS;
  3380. local v;
  3381. for v in BUILD_{C,CXX,CPP,LD}FLAGS;
  3382. do
  3383. export ${v#BUILD_}_FOR_BUILD="${!v}";
  3384. done
  3385. }
  3386. tc-get-compiler-type ()
  3387. {
  3388. local code='
  3389. #if defined(__PATHSCALE__)
  3390. HAVE_PATHCC
  3391. #elif defined(__clang__)
  3392. HAVE_CLANG
  3393. #elif defined(__GNUC__)
  3394. HAVE_GCC
  3395. #endif
  3396. ';
  3397. local res=$($(tc-getCPP "$@") -E -P - <<<"${code}");
  3398. case ${res} in
  3399. *HAVE_PATHCC*)
  3400. echo pathcc
  3401. ;;
  3402. *HAVE_CLANG*)
  3403. echo clang
  3404. ;;
  3405. *HAVE_GCC*)
  3406. echo gcc
  3407. ;;
  3408. *)
  3409. echo unknown
  3410. ;;
  3411. esac
  3412. }
  3413. tc-getAR ()
  3414. {
  3415. tc-getPROG AR ar "$@"
  3416. }
  3417. tc-getAS ()
  3418. {
  3419. tc-getPROG AS as "$@"
  3420. }
  3421. tc-getBUILD_AR ()
  3422. {
  3423. tc-getBUILD_PROG AR ar "$@"
  3424. }
  3425. tc-getBUILD_AS ()
  3426. {
  3427. tc-getBUILD_PROG AS as "$@"
  3428. }
  3429. tc-getBUILD_CC ()
  3430. {
  3431. tc-getBUILD_PROG CC gcc "$@"
  3432. }
  3433. tc-getBUILD_CPP ()
  3434. {
  3435. tc-getBUILD_PROG CPP "$(tc-getBUILD_CC) -E" "$@"
  3436. }
  3437. tc-getBUILD_CXX ()
  3438. {
  3439. tc-getBUILD_PROG CXX g++ "$@"
  3440. }
  3441. tc-getBUILD_LD ()
  3442. {
  3443. tc-getBUILD_PROG LD ld "$@"
  3444. }
  3445. tc-getBUILD_NM ()
  3446. {
  3447. tc-getBUILD_PROG NM nm "$@"
  3448. }
  3449. tc-getBUILD_OBJCOPY ()
  3450. {
  3451. tc-getBUILD_PROG OBJCOPY objcopy "$@"
  3452. }
  3453. tc-getBUILD_PKG_CONFIG ()
  3454. {
  3455. tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
  3456. }
  3457. tc-getBUILD_PROG ()
  3458. {
  3459. _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
  3460. }
  3461. tc-getBUILD_RANLIB ()
  3462. {
  3463. tc-getBUILD_PROG RANLIB ranlib "$@"
  3464. }
  3465. tc-getBUILD_STRIP ()
  3466. {
  3467. tc-getBUILD_PROG STRIP strip "$@"
  3468. }
  3469. tc-getCC ()
  3470. {
  3471. tc-getPROG CC gcc "$@"
  3472. }
  3473. tc-getCPP ()
  3474. {
  3475. tc-getPROG CPP "${CC:-gcc} -E" "$@"
  3476. }
  3477. tc-getCXX ()
  3478. {
  3479. tc-getPROG CXX g++ "$@"
  3480. }
  3481. tc-getDLLWRAP ()
  3482. {
  3483. tc-getPROG DLLWRAP dllwrap "$@"
  3484. }
  3485. tc-getF77 ()
  3486. {
  3487. tc-getPROG F77 gfortran "$@"
  3488. }
  3489. tc-getFC ()
  3490. {
  3491. tc-getPROG FC gfortran "$@"
  3492. }
  3493. tc-getGCJ ()
  3494. {
  3495. tc-getPROG GCJ gcj "$@"
  3496. }
  3497. tc-getGO ()
  3498. {
  3499. tc-getPROG GO gccgo "$@"
  3500. }
  3501. tc-getLD ()
  3502. {
  3503. tc-getPROG LD ld "$@"
  3504. }
  3505. tc-getNM ()
  3506. {
  3507. tc-getPROG NM nm "$@"
  3508. }
  3509. tc-getOBJCOPY ()
  3510. {
  3511. tc-getPROG OBJCOPY objcopy "$@"
  3512. }
  3513. tc-getOBJDUMP ()
  3514. {
  3515. tc-getPROG OBJDUMP objdump "$@"
  3516. }
  3517. tc-getPKG_CONFIG ()
  3518. {
  3519. tc-getPROG PKG_CONFIG pkg-config "$@"
  3520. }
  3521. tc-getPROG ()
  3522. {
  3523. _tc-getPROG CHOST "$@"
  3524. }
  3525. tc-getRANLIB ()
  3526. {
  3527. tc-getPROG RANLIB ranlib "$@"
  3528. }
  3529. tc-getRC ()
  3530. {
  3531. tc-getPROG RC windres "$@"
  3532. }
  3533. tc-getSTRIP ()
  3534. {
  3535. tc-getPROG STRIP strip "$@"
  3536. }
  3537. tc-has-openmp ()
  3538. {
  3539. local base="${T}/test-tc-openmp";
  3540. cat > "${base}.c" <<-EOF
  3541. #include <omp.h>
  3542. int main() {
  3543. int nthreads, tid, ret = 0;
  3544. #pragma omp parallel private(nthreads, tid)
  3545. {
  3546. tid = omp_get_thread_num();
  3547. nthreads = omp_get_num_threads(); ret += tid + nthreads;
  3548. }
  3549. return ret;
  3550. }
  3551. EOF
  3552. $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &> /dev/null;
  3553. local ret=$?;
  3554. rm -f "${base}"*;
  3555. return ${ret}
  3556. }
  3557. tc-has-tls ()
  3558. {
  3559. local base="${T}/test-tc-tls";
  3560. cat > "${base}.c" <<-EOF
  3561. int foo(int *i) {
  3562. static __thread int j = 0;
  3563. return *i ? j : *i;
  3564. }
  3565. EOF
  3566. local flags;
  3567. case $1 in
  3568. -s)
  3569. flags="-S"
  3570. ;;
  3571. -c)
  3572. flags="-c"
  3573. ;;
  3574. -l)
  3575. ;;
  3576. -*)
  3577. die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
  3578. ;;
  3579. esac;
  3580. : ${flags:=-fPIC -shared -Wl,-z,defs};
  3581. [[ $1 == -* ]] && shift;
  3582. $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &> /dev/null;
  3583. local ret=$?;
  3584. rm -f "${base}"*;
  3585. return ${ret}
  3586. }
  3587. tc-is-clang ()
  3588. {
  3589. [[ $(tc-get-compiler-type) == clang ]]
  3590. }
  3591. tc-is-cross-compiler ()
  3592. {
  3593. [[ ${CBUILD:-${CHOST}} != ${CHOST} ]]
  3594. }
  3595. tc-is-gcc ()
  3596. {
  3597. [[ $(tc-get-compiler-type) == gcc ]]
  3598. }
  3599. tc-is-softfloat ()
  3600. {
  3601. local CTARGET=${CTARGET:-${CHOST}};
  3602. case ${CTARGET} in
  3603. bfin* | h8300*)
  3604. echo "only"
  3605. ;;
  3606. *)
  3607. if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then
  3608. echo "yes";
  3609. else
  3610. if [[ ${CTARGET//_/-} == *-softfp-* ]]; then
  3611. echo "softfp";
  3612. else
  3613. echo "no";
  3614. fi;
  3615. fi
  3616. ;;
  3617. esac
  3618. }
  3619. tc-is-static-only ()
  3620. {
  3621. local host=${CTARGET:-${CHOST}};
  3622. [[ ${host} == *-mint* ]]
  3623. }
  3624. tc-ld-disable-gold ()
  3625. {
  3626. if ! tc-ld-is-gold "$@"; then
  3627. return;
  3628. fi;
  3629. ewarn "Forcing usage of the BFD linker instead of GOLD";
  3630. local ld=$(tc-getLD "$@");
  3631. local bfd_ld="${ld%% *}.bfd";
  3632. local path_ld=$(which "${bfd_ld}" 2>/dev/null);
  3633. [[ -e ${path_ld} ]] && export LD=${bfd_ld};
  3634. local major=$(gcc-major-version "$@");
  3635. local minor=$(gcc-minor-version "$@");
  3636. if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]]; then
  3637. if [[ -e ${path_ld} ]]; then
  3638. local d="${T}/bfd-linker";
  3639. mkdir -p "${d}";
  3640. ln -sf "${path_ld}" "${d}"/ld;
  3641. export LDFLAGS="${LDFLAGS} -B${d}";
  3642. else
  3643. die "unable to locate a BFD linker to bypass gold";
  3644. fi;
  3645. else
  3646. export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
  3647. fi
  3648. }
  3649. tc-ld-is-gold ()
  3650. {
  3651. local out;
  3652. out=$($(tc-getLD "$@") --version 2>&1);
  3653. if [[ ${out} == *"GNU gold"* ]]; then
  3654. return 0;
  3655. fi;
  3656. local base="${T}/test-tc-gold";
  3657. cat > "${base}.c" <<-EOF
  3658. int main() { return 0; }
  3659. EOF
  3660. out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1);
  3661. rm -f "${base}"*;
  3662. if [[ ${out} == *"GNU gold"* ]]; then
  3663. return 0;
  3664. fi;
  3665. return 1
  3666. }
  3667. tc-ninja_magic_to_arch ()
  3668. {
  3669. function ninj ()
  3670. {
  3671. [[ ${type} == "kern" ]] && echo $1 || echo $2
  3672. };
  3673. local type=$1;
  3674. local host=$2;
  3675. [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  3676. case ${host} in
  3677. aarch64*)
  3678. echo arm64
  3679. ;;
  3680. alpha*)
  3681. echo alpha
  3682. ;;
  3683. arm*)
  3684. echo arm
  3685. ;;
  3686. avr*)
  3687. ninj avr32 avr
  3688. ;;
  3689. bfin*)
  3690. ninj blackfin bfin
  3691. ;;
  3692. c6x*)
  3693. echo c6x
  3694. ;;
  3695. cris*)
  3696. echo cris
  3697. ;;
  3698. frv*)
  3699. echo frv
  3700. ;;
  3701. hexagon*)
  3702. echo hexagon
  3703. ;;
  3704. hppa*)
  3705. ninj parisc hppa
  3706. ;;
  3707. i?86*)
  3708. if [[ ${type} == "kern" && ${host} == *freebsd* ]]; then
  3709. echo i386;
  3710. else
  3711. echo x86;
  3712. fi
  3713. ;;
  3714. ia64*)
  3715. echo ia64
  3716. ;;
  3717. m68*)
  3718. echo m68k
  3719. ;;
  3720. metag*)
  3721. echo metag
  3722. ;;
  3723. microblaze*)
  3724. echo microblaze
  3725. ;;
  3726. mips*)
  3727. echo mips
  3728. ;;
  3729. nios2*)
  3730. echo nios2
  3731. ;;
  3732. nios*)
  3733. echo nios
  3734. ;;
  3735. or1k | or32*)
  3736. echo openrisc
  3737. ;;
  3738. powerpc*)
  3739. if [[ ${type} == "kern" ]]; then
  3740. echo powerpc;
  3741. else
  3742. if [[ ${host} == powerpc64* ]]; then
  3743. echo ppc64;
  3744. else
  3745. echo ppc;
  3746. fi;
  3747. fi
  3748. ;;
  3749. riscv*)
  3750. echo riscv
  3751. ;;
  3752. s390*)
  3753. echo s390
  3754. ;;
  3755. score*)
  3756. echo score
  3757. ;;
  3758. sh64*)
  3759. ninj sh64 sh
  3760. ;;
  3761. sh*)
  3762. echo sh
  3763. ;;
  3764. sparc64*)
  3765. ninj sparc64 sparc
  3766. ;;
  3767. sparc*)
  3768. [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
  3769. ;;
  3770. tile*)
  3771. echo tile
  3772. ;;
  3773. vax*)
  3774. echo vax
  3775. ;;
  3776. x86_64*freebsd*)
  3777. echo amd64
  3778. ;;
  3779. x86_64*)
  3780. if [[ ${type} == "kern" ]]; then
  3781. echo x86;
  3782. else
  3783. echo amd64;
  3784. fi
  3785. ;;
  3786. xtensa*)
  3787. echo xtensa
  3788. ;;
  3789. *)
  3790. echo unknown
  3791. ;;
  3792. esac
  3793. }
  3794. tc-stack-grows-down ()
  3795. {
  3796. case ${ARCH} in
  3797. hppa | metag)
  3798. return 1
  3799. ;;
  3800. esac;
  3801. return 0
  3802. }
  3803. uclibctoolize ()
  3804. {
  3805. die "Use elibtoolize"
  3806. }
  3807. use_if_iuse ()
  3808. {
  3809. in_iuse $1 || return 1;
  3810. use $1
  3811. }
  3812. validate_desktop_entries ()
  3813. {
  3814. _eutils_eprefix_init;
  3815. if [[ -x "${EPREFIX}"/usr/bin/desktop-file-validate ]]; then
  3816. einfo "Checking desktop entry validity";
  3817. local directories="";
  3818. for d in /usr/share/applications $@;
  3819. do
  3820. [[ -d ${ED}${d} ]] && directories="${directories} ${ED}${d}";
  3821. done;
  3822. if [[ -n ${directories} ]]; then
  3823. for FILE in $(find ${directories} -name "*\.desktop" -not -path '*.hidden*' | sort -u 2>/dev/null);
  3824. do
  3825. local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
  3826. [[ -n $temp ]] && elog ${temp/--/${FILE/${ED}/}:};
  3827. done;
  3828. fi;
  3829. echo "";
  3830. else
  3831. einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
  3832. fi
  3833. }
  3834. version_compare ()
  3835. {
  3836. eshopts_push -s extglob;
  3837. local ver_a=${1} ver_b=${2} parts_a parts_b;
  3838. local cur_tok_a cur_tok_b num_part_a num_part_b;
  3839. local -i cur_idx_a=0 cur_idx_b=0 prev_idx_a prev_idx_b;
  3840. parts_a=($(get_all_version_components "${ver_a}" ));
  3841. parts_b=($(get_all_version_components "${ver_b}" ));
  3842. local -i inf_loop=0;
  3843. while true; do
  3844. inf_loop+=1;
  3845. ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  3846. prev_idx_a=cur_idx_a;
  3847. prev_idx_b=cur_idx_b;
  3848. cur_tok_a=${parts_a[cur_idx_a]};
  3849. cur_tok_b=${parts_b[cur_idx_b]};
  3850. if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
  3851. cur_idx_a+=1;
  3852. [[ ${parts_a[cur_idx_a]} == . ]] && cur_idx_a+=1;
  3853. else
  3854. cur_tok_a=;
  3855. fi;
  3856. if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
  3857. cur_idx_b+=1;
  3858. [[ ${parts_b[cur_idx_b]} == . ]] && cur_idx_b+=1;
  3859. else
  3860. cur_tok_b=;
  3861. fi;
  3862. [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]] && break;
  3863. [[ -z ${cur_tok_a} ]] && eshopts_pop && return 1;
  3864. [[ -z ${cur_tok_b} ]] && eshopts_pop && return 3;
  3865. if (( prev_idx_a != 0 && prev_idx_b != 0 )) && [[ ${cur_tok_a} == 0* || ${cur_tok_b} == 0* ]]; then
  3866. cur_tok_a=${cur_tok_a%%+(0)};
  3867. cur_tok_b=${cur_tok_b%%+(0)};
  3868. [[ ${cur_tok_a} < ${cur_tok_b} ]] && eshopts_pop && return 1;
  3869. [[ ${cur_tok_a} > ${cur_tok_b} ]] && eshopts_pop && return 3;
  3870. else
  3871. cur_tok_a=${cur_tok_a##+(0)};
  3872. cur_tok_b=${cur_tok_b##+(0)};
  3873. : ${cur_tok_a:=0};
  3874. : ${cur_tok_b:=0};
  3875. ((cur_tok_a < cur_tok_b)) && eshopts_pop && return 1;
  3876. ((cur_tok_a > cur_tok_b)) && eshopts_pop && return 3;
  3877. fi;
  3878. done;
  3879. local letter_a=;
  3880. letter_a=${parts_a[cur_idx_a]};
  3881. if [[ ${#letter_a} -eq 1 && -z ${letter_a/[a-z]} ]]; then
  3882. cur_idx_a+=1;
  3883. else
  3884. letter_a=@;
  3885. fi;
  3886. local letter_b=;
  3887. letter_b=${parts_b[cur_idx_b]};
  3888. if [[ ${#letter_b} -eq 1 && -z ${letter_b/[a-z]} ]]; then
  3889. cur_idx_b+=1;
  3890. else
  3891. letter_b=@;
  3892. fi;
  3893. [[ ${letter_a} < ${letter_b} ]] && eshopts_pop && return 1;
  3894. [[ ${letter_a} > ${letter_b} ]] && eshopts_pop && return 3;
  3895. inf_loop=0;
  3896. while true; do
  3897. inf_loop+=1;
  3898. ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  3899. [[ ${parts_a[cur_idx_a]} == _ ]] && ((cur_idx_a++));
  3900. [[ ${parts_b[cur_idx_b]} == _ ]] && ((cur_idx_b++));
  3901. cur_tok_a=${parts_a[cur_idx_a]};
  3902. cur_tok_b=${parts_b[cur_idx_b]};
  3903. num_part_a=0;
  3904. num_part_b=0;
  3905. if has ${cur_tok_a%%+([0-9])} "alpha" "beta" "pre" "rc" "p"; then
  3906. cur_idx_a+=1;
  3907. num_part_a=${cur_tok_a##+([a-z])};
  3908. num_part_a=${num_part_a##+(0)};
  3909. : ${num_part_a:=0};
  3910. cur_tok_a=${cur_tok_a%%+([0-9])};
  3911. else
  3912. cur_tok_a=;
  3913. fi;
  3914. if has ${cur_tok_b%%+([0-9])} alpha beta pre rc p; then
  3915. cur_idx_b+=1;
  3916. num_part_b=${cur_tok_b##+([a-z])};
  3917. num_part_b=${num_part_b##+(0)};
  3918. : ${num_part_b:=0};
  3919. cur_tok_b=${cur_tok_b%%+([0-9])};
  3920. else
  3921. cur_tok_b=;
  3922. fi;
  3923. if [[ ${cur_tok_a} != ${cur_tok_b} ]]; then
  3924. local suffix;
  3925. for suffix in alpha beta pre rc "" p;
  3926. do
  3927. [[ ${cur_tok_a} == ${suffix} ]] && eshopts_pop && return 1;
  3928. [[ ${cur_tok_b} == ${suffix} ]] && eshopts_pop && return 3;
  3929. done;
  3930. else
  3931. if [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]]; then
  3932. break;
  3933. else
  3934. ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  3935. ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  3936. fi;
  3937. fi;
  3938. done;
  3939. [[ ${parts_a[cur_idx_a]} == - ]] && ((cur_idx_a++));
  3940. [[ ${parts_b[cur_idx_b]} == - ]] && ((cur_idx_b++));
  3941. if [[ -n ${parts_a[cur_idx_a]/r+([0-9])} || -n ${parts_b[cur_idx_b]/r+([0-9])} ]]; then
  3942. die "versionator compare bug [revisions, ${ver_a}, ${ver_b}]";
  3943. fi;
  3944. num_part_a=${parts_a[cur_idx_a]#r};
  3945. num_part_a=${num_part_a##+(0)};
  3946. : ${num_part_a:=0};
  3947. num_part_b=${parts_b[cur_idx_b]#r};
  3948. num_part_b=${num_part_b##+(0)};
  3949. : ${num_part_b:=0};
  3950. ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  3951. ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  3952. eshopts_pop;
  3953. return 2
  3954. }
  3955. version_format_string ()
  3956. {
  3957. local fstr=$1;
  3958. shift;
  3959. set -- $(get_version_components "$@");
  3960. eval echo "${fstr}"
  3961. }
  3962. version_is_at_least ()
  3963. {
  3964. local want_s="$1" have_s="${2:-${PVR}}" r;
  3965. version_compare "${want_s}" "${have_s}";
  3966. r=$?;
  3967. case $r in
  3968. 1 | 2)
  3969. return 0
  3970. ;;
  3971. 3)
  3972. return 1
  3973. ;;
  3974. *)
  3975. die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
  3976. ;;
  3977. esac
  3978. }
  3979. version_sort ()
  3980. {
  3981. eshopts_push -s extglob;
  3982. local items=;
  3983. local -i left=0;
  3984. items=("$@");
  3985. while ((left < ${#items[@]})); do
  3986. local -i lowest_idx=left;
  3987. local -i idx=lowest_idx+1;
  3988. while ((idx < ${#items[@]})); do
  3989. version_compare "${items[lowest_idx]}" "${items[idx]}";
  3990. [[ $? -eq 3 ]] && lowest_idx=idx;
  3991. idx+=1;
  3992. done;
  3993. local tmp=${items[lowest_idx]};
  3994. items[lowest_idx]=${items[left]};
  3995. items[left]=${tmp};
  3996. left+=1;
  3997. done;
  3998. echo ${items[@]};
  3999. eshopts_pop
  4000. }
  4001. virtualmake ()
  4002. {
  4003. debug-print-function ${FUNCNAME} "$@";
  4004. [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use virtx";
  4005. if [[ -n ${maketype} ]]; then
  4006. [[ ${EAPI} == [2345] ]] || die "maketype is banned in EAPI > 5";
  4007. eqawarn "ebuild is exporting \$maketype=${maketype}";
  4008. eqawarn "Ebuild should be migrated to use 'virtx command' instead.";
  4009. VIRTUALX_COMMAND=${maketype};
  4010. fi;
  4011. virtx "${VIRTUALX_COMMAND}" "${@}"
  4012. }
  4013. virtx ()
  4014. {
  4015. debug-print-function ${FUNCNAME} "$@";
  4016. [[ $# -lt 1 ]] && die "${FUNCNAME} needs at least one argument";
  4017. local i=0;
  4018. local retval=0;
  4019. local OLD_SANDBOX_ON="${SANDBOX_ON}";
  4020. local XVFB XHOST XDISPLAY;
  4021. local xvfbargs="-screen 0 1280x1024x24 +extension RANDR";
  4022. XVFB=$(type -p Xvfb) || die;
  4023. XHOST=$(type -p xhost) || die;
  4024. debug-print "${FUNCNAME}: running Xvfb hack";
  4025. export XAUTHORITY=;
  4026. einfo "Scanning for an open DISPLAY to start Xvfb ...";
  4027. XDISPLAY=$(i=0; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i});
  4028. debug-print "${FUNCNAME}: XDISPLAY=${XDISPLAY}";
  4029. export SANDBOX_ON="0";
  4030. debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
  4031. ${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2;
  4032. local start=${XDISPLAY};
  4033. while [[ ! -f /tmp/.X${XDISPLAY}-lock ]]; do
  4034. if ((XDISPLAY - start > 15)); then
  4035. eerror "'${XVFB} :${XDISPLAY} ${xvfbargs}' returns:";
  4036. echo;
  4037. ${XVFB} :${XDISPLAY} ${xvfbargs};
  4038. echo;
  4039. eerror "If possible, correct the above error and try your emerge again.";
  4040. die "Unable to start Xvfb";
  4041. fi;
  4042. ((XDISPLAY++));
  4043. debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
  4044. ${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2;
  4045. done;
  4046. export SANDBOX_ON="${OLD_SANDBOX_ON}";
  4047. einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ...";
  4048. export DISPLAY=:${XDISPLAY};
  4049. debug-print "${FUNCNAME}: $@";
  4050. if has "${EAPI}" 2 3; then
  4051. "$@";
  4052. retval=$?;
  4053. else
  4054. nonfatal "$@";
  4055. retval=$?;
  4056. fi;
  4057. kill $(cat /tmp/.X${XDISPLAY}-lock);
  4058. [[ ${retval} -ne 0 ]] && die "Failed to run '$@'";
  4059. return 0
  4060. }
  4061. xdg_desktop_database_update ()
  4062. {
  4063. local updater="${EROOT}${DESKTOP_DATABASE_UPDATE_BIN}";
  4064. if [[ ${EBUILD_PHASE} != post* ]]; then
  4065. die "xdg_desktop_database_update must be used in pkg_post* phases.";
  4066. fi;
  4067. if [[ ! -x "${updater}" ]]; then
  4068. debug-print "${updater} is not executable";
  4069. return;
  4070. fi;
  4071. ebegin "Updating .desktop files database";
  4072. "${updater}" -q "${EROOT}${DESKTOP_DATABASE_DIR}";
  4073. eend $?
  4074. }
  4075. xdg_environment_reset ()
  4076. {
  4077. export XDG_DATA_HOME="${HOME}/.local/share";
  4078. export XDG_CONFIG_HOME="${HOME}/.config";
  4079. export XDG_CACHE_HOME="${HOME}/.cache";
  4080. export XDG_RUNTIME_DIR="${T}/run";
  4081. mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "${XDG_RUNTIME_DIR}" || die;
  4082. chmod 0700 "${XDG_RUNTIME_DIR}" || die;
  4083. unset DBUS_SESSION_BUS_ADDRESS
  4084. }
  4085. xdg_mimeinfo_database_update ()
  4086. {
  4087. local updater="${EROOT}${MIMEINFO_DATABASE_UPDATE_BIN}";
  4088. if [[ ${EBUILD_PHASE} != post* ]]; then
  4089. die "xdg_mimeinfo_database_update must be used in pkg_post* phases.";
  4090. fi;
  4091. if [[ ! -x "${updater}" ]]; then
  4092. debug-print "${updater} is not executable";
  4093. return;
  4094. fi;
  4095. ebegin "Updating shared mime info database";
  4096. "${updater}" "${EROOT}${MIMEINFO_DATABASE_DIR}";
  4097. eend $?
  4098. }
  4099. xdg_pkg_postinst ()
  4100. {
  4101. if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then
  4102. xdg_desktop_database_update;
  4103. else
  4104. debug-print "No .desktop files to add to database";
  4105. fi;
  4106. if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then
  4107. xdg_mimeinfo_database_update;
  4108. else
  4109. debug-print "No mime info files to add to database";
  4110. fi
  4111. }
  4112. xdg_pkg_postrm ()
  4113. {
  4114. if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then
  4115. xdg_desktop_database_update;
  4116. else
  4117. debug-print "No .desktop files to add to database";
  4118. fi;
  4119. if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then
  4120. xdg_mimeinfo_database_update;
  4121. else
  4122. debug-print "No mime info files to add to database";
  4123. fi
  4124. }
  4125. xdg_pkg_preinst ()
  4126. {
  4127. local f;
  4128. XDG_ECLASS_DESKTOPFILES=();
  4129. while IFS= read -r -d '' f; do
  4130. XDG_ECLASS_DESKTOPFILES+=(${f});
  4131. done < <(cd "${D}" && find 'usr/share/applications' -type f -print0 2>/dev/null);
  4132. XDG_ECLASS_MIMEINFOFILES=();
  4133. while IFS= read -r -d '' f; do
  4134. XDG_ECLASS_MIMEINFOFILES+=(${f});
  4135. done < <(cd "${D}" && find 'usr/share/mime' -type f -print0 2>/dev/null);
  4136. export XDG_ECLASS_DESKTOPFILES XDG_ECLASS_MIMEINFOFILES
  4137. }
  4138. xdg_src_prepare ()
  4139. {
  4140. xdg_environment_reset;
  4141. has ${EAPI:-0} 6 && default
  4142. }
  4143.