1. declare -x ABI="x86"
  2. declare -x ABI_X86="32"
  3. declare -a ALL_AUTOTOOLS_MACROS='([0]="AC_PROG_LIBTOOL" [1]="AM_PROG_LIBTOOL" [2]="LT_INIT" [3]="AC_CONFIG_HEADERS" [4]="AC_CONFIG_HEADER" [5]="AM_CONFIG_HEADERS" [6]="AM_CONFIG_HEADER" [7]="AC_CONFIG_SUBDIRS" [8]="AC_CONFIG_AUX_DIR" [9]="AC_CONFIG_MACRO_DIR" [10]="AM_INIT_AUTOMAKE" [11]="AM_GLIB_GNU_GETTEXT" [12]="AM_GNU_GETTEXT_VERSION" [13]="AC_PROG_INTLTOOL" [14]="IT_PROG_INTLTOOL" [15]="GTK_DOC_CHECK" [16]="GNOME_DOC_INIT")'
  4. declare -x ALSA_CARDS="via82xx"
  5. declare -x APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
  6. declare -x ARCH="x86"
  7. declare -- AT_M4DIR=""
  8. declare -- AT_SYS_M4DIR=""
  9. declare -- AUTOTOOLS_AUTO_DEPEND="yes"
  10. declare -- AUTOTOOLS_DEPEND="!<sys-devel/gettext-0.18.1.1-r3
  11. || ( >=sys-devel/automake-1.14.1:1.14 >=sys-devel/automake-1.15:1.15 )
  12. >=sys-devel/autoconf-2.69
  13. >=sys-devel/libtool-2.4"
  14. declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_3 python_targets_python2_7 hardened pax_kernel pic xtpax -jit -orc"
  15. declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author"
  16. declare -x CAMERAS="ptp2"
  17. declare -x CBUILD="i686-pc-linux-gnu"
  18. declare -x CC="i686-pc-linux-gnu-gcc"
  19. declare -x CFLAGS="-O2 -march=pentium4 -pipe -fomit-frame-pointer"
  20. declare -x CFLAGS_default
  21. declare -x CHOST="i686-pc-linux-gnu"
  22. declare -x CHOST_default="i686-pc-linux-gnu"
  23. declare -x CHOST_x86="i686-pc-linux-gnu"
  24. declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
  25. declare -x CONF_PREFIX="/usr"
  26. declare -x CTARGET_default="i686-pc-linux-gnu"
  27. declare -x CXXFLAGS="-O2 -march=pentium4 -pipe -fomit-frame-pointer"
  28. declare -x DEFAULT_ABI="x86"
  29. declare -x DEFINED_PHASES=" compile configure install postinst preinst prepare setup"
  30. declare DEPEND="
  31. gpm? ( sys-libs/gpm[static-libs(+)] )
  32. truetype? (
  33. >=media-libs/freetype-2[static-libs]
  34. app-arch/bzip2[static-libs(+)]
  35. sys-libs/zlib[static-libs(+)]
  36. )
  37. png? (
  38. >=media-libs/libpng-1.4.3[static-libs]
  39. sys-libs/zlib[static-libs(+)]
  40. )
  41. mng? (
  42. media-libs/libmng[static-libs(+)]
  43. )
  44. virtual/jpeg:0[static-libs]
  45. app-arch/cpio
  46. media-gfx/fbgrab
  47. !sys-apps/lcdsplash
  48. >=dev-libs/klibc-1.5
  49. virtual/pkgconfig
  50. !<sys-devel/gettext-0.18.1.1-r3
  51. || ( >=sys-devel/automake-1.14.1:1.14 >=sys-devel/automake-1.15:1.15 )
  52. >=sys-devel/autoconf-2.69
  53. >=sys-devel/libtool-2.4"
  54. declare DESCRIPTION="Framebuffer splash utilities"
  55. declare -x DESTTREE="/usr"
  56. declare -x DIROPTIONS="-m0755"
  57. declare -x EAPI="5"
  58. declare -- ECONF_SOURCE="."
  59. declare -x ELIBC="glibc"
  60. declare -x ELT_APPLIED_PATCHES=""
  61. declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
  62. declare -- EPATCH_EXCLUDE=""
  63. declare -- EPATCH_FORCE="no"
  64. declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
  65. declare -- EPATCH_OPTS=""
  66. declare -- EPATCH_SINGLE_MSG=""
  67. declare -- EPATCH_SOURCE="/var/tmp/portage/media-gfx/splashutils-1.5.4.4-r5/work/patch"
  68. declare -- EPATCH_SUFFIX="patch.bz2"
  69. declare -x EXEOPTIONS="-m0755"
  70. declare -x FCFLAGS="-march=i686 -O2 -pipe"
  71. declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
  72. declare -x FFLAGS="-march=i686 -O2 -pipe"
  73. declare -- FT2SRC="libs/freetype-2.3.12"
  74. declare -x GCC_SPECS=""
  75. declare -- GENTOOSPLASH="splashutils-gentoo-1.0.17"
  76. 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"
  77. declare -x GRUB_PLATFORMS="pc"
  78. declare -x GUILE_LOAD_PATH="/usr/share/guile/1.8"
  79. declare HDEPEND=""
  80. declare HOMEPAGE="http://fbsplash.berlios.de"
  81. declare -x INHERITED=" multilib toolchain-funcs libtool autotools eutils"
  82. declare -x INPUT_DEVICES="keyboard mouse evdev"
  83. declare -x INSDESTTREE=""
  84. declare -x INSOPTIONS="-m0644"
  85. declare IUSE="hardened +png +truetype +mng gpm fbcondecor "
  86. declare -x IUSE_EFFECTIVE="abi_x86_32 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_glibc elibc_mintlib elibc_musl elibc_uclibc fbcondecor gpm hardened hppa hppa-hpux ia64 ia64-hpux ia64-linux kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k m68k-mint mips mng nios2 png ppc ppc-aix ppc-macos ppc-openbsd ppc64 ppc64-linux prefix prefix-guest s390 sh sparc sparc-fbsd sparc-solaris sparc64-freebsd sparc64-solaris truetype 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"
  87. declare -x IUSE_IMPLICIT="abi_x86_32 prefix prefix-guest"
  88. declare -- JPEGSRC="libs/jpeg-8a"
  89. declare -x KERNEL="linux"
  90. declare -x KERNEL_ABI="x86"
  91. declare -x KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc ~x86"
  92. declare -x LANG="ru_RU.utf8"
  93. declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
  94. declare -x LC_ALL=""
  95. declare -x LC_COLLATE="C"
  96. declare -x LC_MESSAGES="C"
  97. declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed"
  98. declare -x LDFLAGS_default
  99. declare -x LIBDIR_default="lib"
  100. declare -x LIBDIR_x86="lib"
  101. declare -x LIBOPTIONS="-m0644"
  102. declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
  103. declare -x LICENSE="GPL-2"
  104. declare -- LPNGSRC="libs/libpng-1.4.3"
  105. declare -x MAIL="/var/mail/root"
  106. declare -x MAKEOPTS="-j2"
  107. declare -- MISCSPLASH="miscsplashutils-0.1.8"
  108. declare -x MULTILIB_ABIS="x86"
  109. declare -x MULTIOSDIRS="../lib"
  110. declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
  111. declare -x OFFICE_IMPLEMENTATION="libreoffice"
  112. declare -x PATH="/usr/lib/ccache/bin:/usr/lib/portage/python3.3/ebuild-helpers/xattr:/usr/lib/portage/python3.3/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.8.4"
  113. declare PDEPEND=""
  114. declare -x PHP_TARGETS="php5-5"
  115. declare -x PKG_CONFIG_PATH="/usr/lib/pkgconfig"
  116. declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")'
  117. declare -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
  118. declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/splashutils-1.5.4.4-r5/html")'
  119. declare -x PRELINK_PATH_MASK="/usr/lib/klibc"
  120. declare -x PROFILE_IS_HARDENED="1"
  121. 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"
  122. declare -x PROPERTIES=""
  123. declare -x PROVIDE=""
  124. declare -x PYTHONDONTWRITEBYTECODE="1"
  125. declare -x PYTHON_SINGLE_TARGET="python2_7"
  126. declare -x PYTHON_TARGETS="python2_7 python3_3"
  127. declare RDEPEND="
  128. gpm? ( sys-libs/gpm[static-libs(+)] )
  129. truetype? (
  130. >=media-libs/freetype-2[static-libs]
  131. app-arch/bzip2[static-libs(+)]
  132. sys-libs/zlib[static-libs(+)]
  133. )
  134. png? (
  135. >=media-libs/libpng-1.4.3[static-libs]
  136. sys-libs/zlib[static-libs(+)]
  137. )
  138. mng? (
  139. media-libs/libmng[static-libs(+)]
  140. )
  141. virtual/jpeg:0[static-libs]
  142. app-arch/cpio
  143. media-gfx/fbgrab
  144. !sys-apps/lcdsplash "
  145. declare REPOSITORY
  146. declare REQUIRED_USE=""
  147. declare -x RESTRICT="test"
  148. declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
  149. declare -x RUBY_TARGETS="ruby19 ruby20"
  150. declare -x S="/var/tmp/portage/media-gfx/splashutils-1.5.4.4-r5/work/splashutils-1.5.4.4"
  151. declare -x SANDBOX_DEBUG="0"
  152. declare -x SANDBOX_DENY=""
  153. declare -x SANDBOX_PID="6539"
  154. declare -x SANDBOX_PREDICT="/var/tmp/portage/media-gfx/splashutils-1.5.4.4-r5/homedir:/dev/crypto"
  155. declare -x SANDBOX_READ="/:/var/tmp:/var/tmp/ccache"
  156. declare -x SANDBOX_VERBOSE="1"
  157. declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/ccache:/var/tmp/portage/media-gfx/splashutils-1.5.4.4-r5/homedir/.bash_history"
  158. declare -- SG="/var/tmp/portage/media-gfx/splashutils-1.5.4.4-r5/work/splashutils-gentoo-1.0.17"
  159. declare -x SHELL="/bin/bash"
  160. declare -x SLOT="0"
  161. declare -- SM="/var/tmp/portage/media-gfx/splashutils-1.5.4.4-r5/work/miscsplashutils-0.1.8"
  162. declare SRC_URI="
  163. mirror://berlios/fbsplash/splashutils-lite-1.5.4.4.tar.bz2
  164. mirror://berlios/fbsplash/splashutils-gentoo-1.0.17.tar.bz2
  165. mirror://gentoo/miscsplashutils-0.1.8.tar.bz2
  166. mirror://sourceforge/libpng/libpng-1.4.3.tar.bz2
  167. ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v8a.tar.gz
  168. mirror://sourceforge/freetype/freetype-2.3.12.tar.bz2
  169. http://www.gzip.org/zlib/zlib-1.2.3.tar.bz2
  170. "
  171. declare -x SUDO_COMMAND="/bin/bash"
  172. declare -x SUDO_GID="1002"
  173. declare -x SUDO_UID="1002"
  174. declare -x SUDO_USER="artschool"
  175. declare -x SUEXEC_DOCROOT="/home"
  176. declare -x USE="abi_x86_32 elibc_glibc fbcondecor kernel_linux png truetype userland_GNU x86"
  177. declare -x USERLAND="GNU"
  178. declare -x USERNAME="root"
  179. declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
  180. declare -x USE_EXPAND_UNPREFIXED="ARCH"
  181. 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 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"
  182. declare -x USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
  183. declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX linux NetBSD OpenBSD SunOS Winnt"
  184. declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
  185. declare -x VIDEO_CARDS="apm ark chips cirrus cyrix dummy fbdev glint i128 i740 intel mach64 mga nsc nv r128 radeon rendition s3 s3virge savage siliconmotion sis sisusb tdfx tga trident tseng v4l vesa via vmware voodoo"
  186. declare -- V_FT="2.3.12"
  187. declare -- V_JPEG="8a"
  188. declare -- V_PNG="1.4.3"
  189. declare -- V_ZLIB="1.2.3"
  190. declare -x WANT_AUTOCONF="2.5"
  191. declare -x WANT_AUTOMAKE="1.14"
  192. declare -x WANT_LIBTOOL="latest"
  193. 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"
  194. declare -- ZLIBSRC="libs/zlib-1.2.3"
  195. declare -- _AUTOTOOLS_ECLASS="1"
  196. declare -- _ELT_NOTED_TMP="true"
  197. declare -- _EUTILS_ECLASS="1"
  198. declare -x _E_DOCDESTTREE_=""
  199. declare -x _E_EXEDESTTREE_=""
  200. declare -a _LATEST_AUTOMAKE='([0]="1.14.1:1.14" [1]="1.15:1.15")'
  201. declare -- _LIBTOOL_ECLASS="1"
  202. declare -- _LIBTOOL_ECLASSDIR_LOCAL="/usr/portage/eclass"
  203. declare -- _MULTILIB_ECLASS="1"
  204. declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
  205. declare -- __AUTOTOOLS_AUTO_DEPEND="yes"
  206. declare -- _libtool_atom=">=sys-devel/libtool-2.4"
  207. declare -- phase_func
  208. ELT_libtool_version ()
  209. {
  210. ( unset VERSION;
  211. eval $(grep -e '^[[:space:]]*VERSION=' "$1");
  212. echo "${VERSION:-0}" )
  213. }
  214. ELT_try_and_apply_patch ()
  215. {
  216. local ret=0;
  217. local file=$1;
  218. local patch=$2;
  219. local src=$3;
  220. local disp="${src} patch";
  221. local log="${T}/elibtool.log";
  222. if [[ -z ${_ELT_NOTED_TMP} ]]; then
  223. _ELT_NOTED_TMP=true;
  224. printf 'temp patch: %s\n' "${patch}" > "${log}";
  225. fi;
  226. printf '\nTrying %s\n' "${disp}" >> "${log}";
  227. if [[ ! -e ${file} ]]; then
  228. echo "File not found: ${file}" >> "${log}";
  229. return 1;
  230. fi;
  231. local perms="$(find ${file} -maxdepth 0 -printf '%m')";
  232. if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1; then
  233. einfo " Applying ${disp} ...";
  234. patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1;
  235. ret=$?;
  236. export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}";
  237. else
  238. ret=1;
  239. fi;
  240. chmod "${perms}" "${file}";
  241. return "${ret}"
  242. }
  243. ELT_walk_patches ()
  244. {
  245. local patch tmp;
  246. local ret=1;
  247. local file=$1;
  248. local patch_set=$2;
  249. local patch_dir="$(elt_patch_dir)/${patch_set}";
  250. local rem_int_dep=$3;
  251. [[ -z ${patch_set} ]] && return 1;
  252. [[ ! -d ${patch_dir} ]] && return 1;
  253. local sed_args=(-e "s:@GENTOO_LIBDIR@:$(get_libdir):g");
  254. if [[ -n ${rem_int_dep} ]]; then
  255. sed_args+=(-e "s|@REM_INT_DEP@|${rem_int_dep}|g");
  256. fi;
  257. pushd "$(elt_patch_dir)" > /dev/null || die;
  258. for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r);
  259. do
  260. tmp="${T}/libtool-elt.patch";
  261. sed "${sed_args[@]}" "${patch}" > "${tmp}" || die;
  262. if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}"; then
  263. ret=0;
  264. break;
  265. fi;
  266. done;
  267. popd > /dev/null;
  268. return ${ret}
  269. }
  270. VER_major ()
  271. {
  272. [[ -z $1 ]] && return 1;
  273. local VER=$@;
  274. echo "${VER%%[^[:digit:]]*}"
  275. }
  276. VER_micro ()
  277. {
  278. [[ -z $1 ]] && return 1;
  279. local VER=$@;
  280. VER=${VER#*.*.};
  281. echo "${VER%%[^[:digit:]]*}"
  282. }
  283. VER_minor ()
  284. {
  285. [[ -z $1 ]] && return 1;
  286. local VER=$@;
  287. VER=${VER#*.};
  288. echo "${VER%%[^[:digit:]]*}"
  289. }
  290. VER_to_int ()
  291. {
  292. [[ -z $1 ]] && return 1;
  293. local VER_MAJOR=$(VER_major "$1");
  294. local VER_MINOR=$(VER_minor "$1");
  295. local VER_MICRO=$(VER_micro "$1");
  296. local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
  297. if [[ ${VER_int} -ge 65536 ]]; then
  298. echo "${VER_int}";
  299. return 0;
  300. fi;
  301. echo 1;
  302. return 1
  303. }
  304. __bashpid ()
  305. {
  306. sh -c 'echo ${PPID}'
  307. }
  308. __eapi6_src_install ()
  309. {
  310. if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
  311. emake DESTDIR="${D}" install;
  312. fi;
  313. einstalldocs
  314. }
  315. __eapi6_src_prepare ()
  316. {
  317. if [[ $(declare -p PATCHES) == "declare -a"* ]]; then
  318. eapply "${PATCHES[@]}";
  319. else
  320. if [[ -n ${PATCHES} ]]; then
  321. eapply ${PATCHES};
  322. fi;
  323. fi;
  324. eapply_user
  325. }
  326. __start_distcc ()
  327. {
  328. if has distcc $FEATURES && has distcc-pump $FEATURES; then
  329. if [[ -z $INCLUDE_SERVER_PORT ]] || [[ ! -w $INCLUDE_SERVER_PORT ]]; then
  330. eval $(pump --startup | grep -v PATH);
  331. trap "pump --shutdown >/dev/null" EXIT;
  332. fi;
  333. fi
  334. }
  335. _at_uses_autoheader ()
  336. {
  337. _at_uses_pkg A{C,M}_CONFIG_HEADER{S,}
  338. }
  339. _at_uses_automake ()
  340. {
  341. _at_uses_pkg AM_INIT_AUTOMAKE
  342. }
  343. _at_uses_gettext ()
  344. {
  345. _at_uses_pkg AM_GNU_GETTEXT_VERSION
  346. }
  347. _at_uses_glibgettext ()
  348. {
  349. _at_uses_pkg AM_GLIB_GNU_GETTEXT
  350. }
  351. _at_uses_gnomedoc ()
  352. {
  353. _at_uses_pkg GNOME_DOC_INIT
  354. }
  355. _at_uses_gtkdoc ()
  356. {
  357. _at_uses_pkg GTK_DOC_CHECK
  358. }
  359. _at_uses_intltool ()
  360. {
  361. _at_uses_pkg {AC,IT}_PROG_INTLTOOL
  362. }
  363. _at_uses_libtool ()
  364. {
  365. _at_uses_pkg A{C,M}_PROG_LIBTOOL LT_INIT
  366. }
  367. _at_uses_pkg ()
  368. {
  369. if [[ -n $(autotools_check_macro "$@") ]]; then
  370. return 0;
  371. else
  372. local macro args=();
  373. for macro in "$@";
  374. do
  375. args+=(-e "^[[:space:]]*${macro}\>");
  376. done;
  377. egrep -q "${args[@]}" configure.??;
  378. fi
  379. }
  380. _automake_version ()
  381. {
  382. autotools_run_tool --at-output automake --version 2> /dev/null | sed -n -e '1{s:.*(GNU automake) ::p;q}'
  383. }
  384. _autotools_m4dir_include ()
  385. {
  386. local x include_opts flag;
  387. [[ ${WANT_AUTOCONF} == "2.1" ]] && flag="l" || flag="I";
  388. for x in "$@";
  389. do
  390. case ${x} in
  391. -${flag})
  392. ;;
  393. *)
  394. [[ ! -d ${x} ]] && ewarn "autotools.eclass: '${x}' does not exist";
  395. include_opts+=" -${flag} ${x}"
  396. ;;
  397. esac;
  398. done;
  399. echo ${include_opts}
  400. }
  401. _elibtoolize ()
  402. {
  403. local LIBTOOLIZE=${LIBTOOLIZE:-$(type -P glibtoolize > /dev/null && echo glibtoolize || echo libtoolize)};
  404. [[ -f GNUmakefile.am || -f Makefile.am ]] && set -- "$@" --automake;
  405. autotools_run_tool ${LIBTOOLIZE} "$@"
  406. }
  407. _epatch_draw_line ()
  408. {
  409. [[ -z $1 ]] && set "$(printf "%65s" '')";
  410. echo "${1//?/=}"
  411. }
  412. _eutils_eprefix_init ()
  413. {
  414. has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}}
  415. }
  416. _gcc-install-dir ()
  417. {
  418. echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')"
  419. }
  420. _gcc-specs-directive_raw ()
  421. {
  422. local cc=$(tc-getCC);
  423. local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
  424. ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
  425. $1=="*"directive":" { pspec=spec; spec=""; outside=0; next }
  426. outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
  427. spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
  428. { spec=spec $0 }
  429. END { print spec }';
  430. return 0
  431. }
  432. _gcc-specs-exists ()
  433. {
  434. [[ -f $(_gcc-install-dir)/$1 ]]
  435. }
  436. _gcc_fullversion ()
  437. {
  438. local ver="$1";
  439. shift;
  440. set -- `$(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__"`;
  441. eval echo "$ver"
  442. }
  443. _iconins ()
  444. {
  445. ( local funcname=$1;
  446. shift;
  447. local size dir;
  448. local context=apps;
  449. local theme=hicolor;
  450. while [[ $# -gt 0 ]]; do
  451. case $1 in
  452. -s | --size)
  453. if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then
  454. size=${2%%x*};
  455. else
  456. size=${2};
  457. fi;
  458. case ${size} in
  459. 16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256 | 512)
  460. size=${size}x${size}
  461. ;;
  462. scalable)
  463. ;;
  464. *)
  465. eerror "${size} is an unsupported icon size!";
  466. exit 1
  467. ;;
  468. esac;
  469. shift 2
  470. ;;
  471. -t | --theme)
  472. theme=${2};
  473. shift 2
  474. ;;
  475. -c | --context)
  476. context=${2};
  477. shift 2
  478. ;;
  479. *)
  480. if [[ -z ${size} ]]; then
  481. insinto /usr/share/pixmaps;
  482. else
  483. insinto /usr/share/icons/${theme}/${size}/${context};
  484. fi;
  485. if [[ ${funcname} == doicon ]]; then
  486. if [[ -f $1 ]]; then
  487. doins "${1}";
  488. else
  489. if [[ -d $1 ]]; then
  490. shopt -s nullglob;
  491. doins "${1}"/*.{png,svg};
  492. shopt -u nullglob;
  493. else
  494. eerror "${1} is not a valid file/directory!";
  495. exit 1;
  496. fi;
  497. fi;
  498. else
  499. break;
  500. fi;
  501. shift 1
  502. ;;
  503. esac;
  504. done;
  505. if [[ ${funcname} == newicon ]]; then
  506. newins "$@";
  507. fi ) || die
  508. }
  509. _tc-getPROG ()
  510. {
  511. local tuple=$1;
  512. local v var vars=$2;
  513. local prog=$3;
  514. var=${vars%% *};
  515. for v in ${vars};
  516. do
  517. if [[ -n ${!v} ]]; then
  518. export ${var}="${!v}";
  519. echo "${!v}";
  520. return 0;
  521. fi;
  522. done;
  523. local search=;
  524. [[ -n $4 ]] && search=$(type -p "$4-${prog}");
  525. [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p "${!tuple}-${prog}");
  526. [[ -n ${search} ]] && prog=${search##*/};
  527. export ${var}=${prog};
  528. echo "${!var}"
  529. }
  530. autotools_check_macro ()
  531. {
  532. [[ -f configure.ac || -f configure.in ]] || return 0;
  533. local trace_file=".__autoconf_trace_data";
  534. if [[ ! -e ${trace_file} ]] || [[ ! aclocal.m4 -ot ${trace_file} ]]; then
  535. WANT_AUTOCONF="2.5" autoconf $(autotools_m4dir_include) ${ALL_AUTOTOOLS_MACROS[@]/#/--trace=} > ${trace_file} 2> /dev/null;
  536. fi;
  537. local macro args=();
  538. for macro in "$@";
  539. do
  540. has ${macro} ${ALL_AUTOTOOLS_MACROS[@]} || die "internal error: add ${macro} to ALL_AUTOTOOLS_MACROS";
  541. args+=(-e ":${macro}:");
  542. done;
  543. grep "${args[@]}" ${trace_file}
  544. }
  545. autotools_check_macro_val ()
  546. {
  547. local macro scan_out;
  548. for macro in "$@";
  549. do
  550. autotools_check_macro "${macro}" | gawk -v macro="${macro}" '($0 !~ /^[[:space:]]*(#|dnl)/) {
  551. if (match($0, macro ":(.*)$", res))
  552. print res[1]
  553. }' | uniq;
  554. done;
  555. return 0
  556. }
  557. autotools_env_setup ()
  558. {
  559. if [[ ${WANT_AUTOMAKE} == "latest" ]]; then
  560. local pv;
  561. for pv in ${_LATEST_AUTOMAKE[@]/#*:};
  562. do
  563. ROOT=/ has_version "=sys-devel/automake-${pv}*" && export WANT_AUTOMAKE="${pv}";
  564. done;
  565. [[ ${WANT_AUTOMAKE} == "latest" ]] && die "Cannot find the latest automake! Tried ${_LATEST_AUTOMAKE[*]}";
  566. fi;
  567. [[ ${WANT_AUTOCONF} == "latest" ]] && export WANT_AUTOCONF=2.5
  568. }
  569. autotools_m4dir_include ()
  570. {
  571. _autotools_m4dir_include ${AT_M4DIR}
  572. }
  573. autotools_m4sysdir_include ()
  574. {
  575. local paths=($(eval echo ${AT_SYS_M4DIR}));
  576. if [[ ${#paths[@]} -eq 0 && -n ${SYSROOT} ]]; then
  577. local path="${SYSROOT}/usr/share/aclocal";
  578. [[ -d ${path} ]] && paths+=("${path}");
  579. fi;
  580. _autotools_m4dir_include "${paths[@]}"
  581. }
  582. autotools_run_tool ()
  583. {
  584. local autofail=true m4flags=false missing_ok=false return_output=false;
  585. while [[ -n $1 ]]; do
  586. case $1 in
  587. --at-no-fail)
  588. autofail=false
  589. ;;
  590. --at-m4flags)
  591. m4flags=true
  592. ;;
  593. --at-missing)
  594. missing_ok=true
  595. ;;
  596. --at-output)
  597. return_output=true
  598. ;;
  599. *)
  600. break
  601. ;;
  602. esac;
  603. shift;
  604. done;
  605. if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
  606. ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase";
  607. fi;
  608. if ${missing_ok} && ! type -P ${1} > /dev/null; then
  609. einfo "Skipping '$*' due $1 not installed";
  610. return 0;
  611. fi;
  612. autotools_env_setup;
  613. local STDERR_TARGET="${T}/$1.out";
  614. if [[ -e ${STDERR_TARGET} ]]; then
  615. local i=1;
  616. while :; do
  617. STDERR_TARGET="${T}/$1-${i}.out";
  618. [[ -e ${STDERR_TARGET} ]] || break;
  619. : $(( i++ ));
  620. done;
  621. fi;
  622. if ${m4flags}; then
  623. set -- "${1}" $(autotools_m4dir_include) "${@:2}" $(autotools_m4sysdir_include);
  624. fi;
  625. if ${return_output}; then
  626. "$@";
  627. return;
  628. fi;
  629. printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}";
  630. ebegin "Running $@";
  631. "$@" >> "${STDERR_TARGET}" 2>&1;
  632. if ! eend $? && ${autofail}; then
  633. echo;
  634. eerror "Failed Running $1 !";
  635. eerror;
  636. eerror "Include in your bugreport the contents of:";
  637. eerror;
  638. eerror " ${STDERR_TARGET}";
  639. echo;
  640. die "Failed Running $1 !";
  641. fi
  642. }
  643. built_with_use ()
  644. {
  645. _eutils_eprefix_init;
  646. local hidden="no";
  647. if [[ $1 == "--hidden" ]]; then
  648. hidden="yes";
  649. shift;
  650. fi;
  651. local missing_action="die";
  652. if [[ $1 == "--missing" ]]; then
  653. missing_action=$2;
  654. shift;
  655. shift;
  656. case ${missing_action} in
  657. true | false | die)
  658. ;;
  659. *)
  660. die "unknown action '${missing_action}'"
  661. ;;
  662. esac;
  663. fi;
  664. local opt=$1;
  665. [[ ${opt:0:1} = "-" ]] && shift || opt="-a";
  666. local PKG=$(best_version $1);
  667. [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
  668. shift;
  669. local USEFILE=${EROOT}/var/db/pkg/${PKG}/USE;
  670. local IUSEFILE=${EROOT}/var/db/pkg/${PKG}/IUSE;
  671. if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
  672. case ${missing_action} in
  673. true)
  674. return 0
  675. ;;
  676. false)
  677. return 1
  678. ;;
  679. die)
  680. die "Unable to determine what USE flags $PKG was built with"
  681. ;;
  682. esac;
  683. fi;
  684. if [[ ${hidden} == "no" ]]; then
  685. local IUSE_BUILT=($(<"${IUSEFILE}"));
  686. local expand;
  687. for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
  688. do
  689. if [[ $1 == ${expand}_* ]]; then
  690. expand="";
  691. break;
  692. fi;
  693. done;
  694. if [[ -n ${expand} ]]; then
  695. if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
  696. case ${missing_action} in
  697. true)
  698. return 0
  699. ;;
  700. false)
  701. return 1
  702. ;;
  703. die)
  704. die "$PKG does not actually support the $1 USE flag!"
  705. ;;
  706. esac;
  707. fi;
  708. fi;
  709. fi;
  710. local USE_BUILT=$(<${USEFILE});
  711. while [[ $# -gt 0 ]]; do
  712. if [[ ${opt} = "-o" ]]; then
  713. has $1 ${USE_BUILT} && return 0;
  714. else
  715. has $1 ${USE_BUILT} || return 1;
  716. fi;
  717. shift;
  718. done;
  719. [[ ${opt} = "-a" ]]
  720. }
  721. check_license ()
  722. {
  723. die "you no longer need this as portage supports ACCEPT_LICENSE itself"
  724. }
  725. config_rpath_update ()
  726. {
  727. local dst src=$(type -P gettext | sed 's:bin/gettext:share/gettext/config.rpath:');
  728. [[ $# -eq 0 ]] && set -- $(find -name config.rpath);
  729. [[ $# -eq 0 ]] && return 0;
  730. einfo "Updating all config.rpath files";
  731. for dst in "$@";
  732. do
  733. einfo " ${dst}";
  734. cp "${src}" "${dst}" || die;
  735. done
  736. }
  737. darwintoolize ()
  738. {
  739. die "Use elibtoolize"
  740. }
  741. doicon ()
  742. {
  743. _iconins ${FUNCNAME} "$@"
  744. }
  745. domenu ()
  746. {
  747. ( local i j ret=0;
  748. insinto /usr/share/applications;
  749. for i in "$@";
  750. do
  751. if [[ -f ${i} ]]; then
  752. doins "${i}";
  753. ((ret+=$?));
  754. else
  755. if [[ -d ${i} ]]; then
  756. for j in "${i}"/*.desktop;
  757. do
  758. doins "${j}";
  759. ((ret+=$?));
  760. done;
  761. else
  762. ((++ret));
  763. fi;
  764. fi;
  765. done;
  766. exit ${ret} )
  767. }
  768. eaclocal ()
  769. {
  770. [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && autotools_run_tool --at-m4flags aclocal "$@" $(eaclocal_amflags)
  771. }
  772. eaclocal_amflags ()
  773. {
  774. local aclocal_opts amflags_file;
  775. for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in;
  776. do
  777. [[ -e ${amflags_file} ]] || continue;
  778. autotools_env_setup;
  779. aclocal_opts=$(sed -n "/^ACLOCAL_AMFLAGS[[:space:]]*=/{ # match the first line
  780. s:[^=]*=::p; # then gobble up all escaped lines
  781. : nextline /\\\\$/{ n; p; b nextline; } }" ${amflags_file});
  782. eval aclocal_opts=\""${aclocal_opts}"\";
  783. break;
  784. done;
  785. echo ${aclocal_opts}
  786. }
  787. eautoconf ()
  788. {
  789. if [[ ! -f configure.ac && ! -f configure.in ]]; then
  790. echo;
  791. eerror "No configure.{ac,in} present in '${PWD}'!";
  792. echo;
  793. die "No configure.{ac,in} present!";
  794. fi;
  795. if [[ ${WANT_AUTOCONF} != "2.1" && -e configure.in ]]; then
  796. eqawarn "This package has a configure.in file which has long been deprecated. Please";
  797. eqawarn "update it to use configure.ac instead as newer versions of autotools will die";
  798. eqawarn "when it finds this file. See https://bugs.gentoo.org/426262 for details.";
  799. fi;
  800. autotools_run_tool --at-m4flags autoconf "$@"
  801. }
  802. eautoheader ()
  803. {
  804. _at_uses_autoheader || return 0;
  805. autotools_run_tool --at-no-fail --at-m4flags autoheader "$@"
  806. }
  807. eautomake ()
  808. {
  809. local extra_opts=();
  810. local makefile_name;
  811. for makefile_name in {GNUmakefile,{M,m}akefile}.am "";
  812. do
  813. [[ -f ${makefile_name} ]] && break;
  814. done;
  815. function _automake_version ()
  816. {
  817. autotools_run_tool --at-output automake --version 2> /dev/null | sed -n -e '1{s:.*(GNU automake) ::p;q}'
  818. };
  819. if [[ -z ${makefile_name} ]]; then
  820. _at_uses_automake || return 0;
  821. else
  822. if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name%.am}.in ]]; then
  823. local used_automake;
  824. local installed_automake;
  825. installed_automake=$(WANT_AUTOMAKE= _automake_version);
  826. used_automake=$(head -n 1 < ${makefile_name%.am}.in | sed -e 's:.*by automake \(.*\) from .*:\1:');
  827. if [[ ${installed_automake} != ${used_automake} ]]; then
  828. ewarn "Automake used for the package (${used_automake}) differs from" "the installed version (${installed_automake}).";
  829. ewarn "Forcing a full rebuild of the autotools to workaround.";
  830. eautoreconf;
  831. return 0;
  832. fi;
  833. fi;
  834. fi;
  835. [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS && -f README ]] || extra_opts+=(--foreign);
  836. case $(_automake_version) in
  837. 1.4 | 1.4[.-]*)
  838. ;;
  839. *)
  840. extra_opts+=(--force-missing)
  841. ;;
  842. esac;
  843. autotools_run_tool automake --add-missing --copy "${extra_opts[@]}" "$@"
  844. }
  845. eautopoint ()
  846. {
  847. autotools_run_tool autopoint "$@"
  848. }
  849. eautoreconf ()
  850. {
  851. local x g;
  852. if [[ -z ${AT_NO_RECURSIVE} ]]; then
  853. for x in $(autotools_check_macro_val AC_CONFIG_SUBDIRS);
  854. do
  855. if [[ -d ${x} ]]; then
  856. pushd "${x}" > /dev/null;
  857. AT_NOELIBTOOLIZE="yes" eautoreconf || die;
  858. popd > /dev/null;
  859. fi;
  860. done;
  861. fi;
  862. einfo "Running eautoreconf in '${PWD}' ...";
  863. local m4dirs=$(autotools_check_macro_val AC_CONFIG_{AUX,MACRO}_DIR);
  864. [[ -n ${m4dirs} ]] && mkdir -p ${m4dirs};
  865. local i tools=(glibgettext false "autotools_run_tool glib-gettextize --copy --force" gettext false "autotools_run_tool --at-missing autopoint --force" intltool false "autotools_run_tool intltoolize --automake --copy --force" gtkdoc false "autotools_run_tool --at-missing gtkdocize --copy" gnomedoc false "autotools_run_tool --at-missing gnome-doc-prepare --copy --force" libtool false "_elibtoolize --install --copy --force");
  866. for ((i = 0; i < ${#tools[@]}; i += 3 ))
  867. do
  868. if _at_uses_${tools[i]}; then
  869. tools[i+1]=true;
  870. ${tools[i+2]};
  871. fi;
  872. done;
  873. local rerun_aclocal=false;
  874. eaclocal;
  875. for ((i = 0; i < ${#tools[@]}; i += 3 ))
  876. do
  877. if ! ${tools[i+1]} && _at_uses_${tools[i]}; then
  878. ${tools[i+2]};
  879. rerun_aclocal=true;
  880. fi;
  881. done;
  882. ${rerun_aclocal} && eaclocal;
  883. if [[ ${WANT_AUTOCONF} = 2.1 ]]; then
  884. eautoconf;
  885. else
  886. eautoconf --force;
  887. fi;
  888. eautoheader;
  889. [[ ${AT_NOEAUTOMAKE} != "yes" ]] && FROM_EAUTORECONF="yes" eautomake ${AM_OPTS};
  890. if [[ ${AT_NOELIBTOOLIZE} != "yes" ]]; then
  891. elibtoolize --force "${PWD}";
  892. fi;
  893. return 0
  894. }
  895. ebeep ()
  896. {
  897. ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org"
  898. }
  899. econf_build ()
  900. {
  901. local CBUILD=${CBUILD:-${CHOST}};
  902. tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
  903. }
  904. ecvs_clean ()
  905. {
  906. [[ -z $* ]] && set -- .;
  907. find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
  908. find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
  909. }
  910. edos2unix ()
  911. {
  912. [[ $# -eq 0 ]] && return 0;
  913. sed -i 's/\r$//' -- "$@" || die
  914. }
  915. einstalldocs ()
  916. {
  917. debug-print-function ${FUNCNAME} "${@}";
  918. local dodoc_opts=-r;
  919. has ${EAPI} 0 1 2 3 && dodoc_opts=;
  920. if ! declare -p DOCS &> /dev/null; then
  921. local d;
  922. for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
  923. do
  924. if [[ -s ${d} ]]; then
  925. dodoc "${d}" || die;
  926. fi;
  927. done;
  928. else
  929. if [[ $(declare -p DOCS) == "declare -a"* ]]; then
  930. if [[ -n ${DOCS[@]} ]]; then
  931. dodoc ${dodoc_opts} "${DOCS[@]}" || die;
  932. fi;
  933. else
  934. if [[ -n ${DOCS} ]]; then
  935. dodoc ${dodoc_opts} ${DOCS} || die;
  936. fi;
  937. fi;
  938. fi;
  939. if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
  940. if [[ -n ${HTML_DOCS[@]} ]]; then
  941. dohtml -r "${HTML_DOCS[@]}" || die;
  942. fi;
  943. else
  944. if [[ -n ${HTML_DOCS} ]]; then
  945. dohtml -r ${HTML_DOCS} || die;
  946. fi;
  947. fi;
  948. return 0
  949. }
  950. elibtoolize ()
  951. {
  952. local x;
  953. local dirs=();
  954. local do_portage="no";
  955. local do_reversedeps="no";
  956. local do_only_patches="no";
  957. local do_uclibc="yes";
  958. local deptoremove=;
  959. local do_shallow="no";
  960. local force="false";
  961. local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed target-nm";
  962. for x in "$@";
  963. do
  964. case ${x} in
  965. --portage)
  966. do_portage="yes"
  967. ;;
  968. --reverse-deps)
  969. do_reversedeps="yes";
  970. elt_patches+=" fix-relink"
  971. ;;
  972. --patch-only)
  973. do_only_patches="yes"
  974. ;;
  975. --remove-internal-dep=*)
  976. deptoremove=${x#--remove-internal-dep=};
  977. [[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep"
  978. ;;
  979. --shallow)
  980. do_shallow="yes"
  981. ;;
  982. --no-uclibc)
  983. do_uclibc="no"
  984. ;;
  985. --force)
  986. force="true"
  987. ;;
  988. -*)
  989. eerror "Invalid elibtoolize option: ${x}";
  990. die "elibtoolize called with ${x} ??"
  991. ;;
  992. *)
  993. dirs+=("${x}")
  994. ;;
  995. esac;
  996. done;
  997. [[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf";
  998. case ${CHOST} in
  999. *-aix*)
  1000. elt_patches+=" hardcode aixrtl"
  1001. ;;
  1002. *-darwin*)
  1003. elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf"
  1004. ;;
  1005. *-solaris*)
  1006. elt_patches+=" sol2-conf sol2-ltmain"
  1007. ;;
  1008. *-freebsd*)
  1009. elt_patches+=" fbsd-conf fbsd-ltconf"
  1010. ;;
  1011. *-hpux*)
  1012. elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc"
  1013. ;;
  1014. *-irix*)
  1015. elt_patches+=" irix-ltmain"
  1016. ;;
  1017. *-mint*)
  1018. elt_patches+=" mint-conf"
  1019. ;;
  1020. esac;
  1021. if $(tc-getLD) --version 2>&1 | grep -qs 'GNU gold'; then
  1022. elt_patches+=" gold-conf";
  1023. fi;
  1024. if [[ ${do_shallow} == "yes" ]]; then
  1025. [[ ${#dirs[@]} -ne 0 ]] && die "Using --shallow with explicit dirs doesn't make sense";
  1026. [[ -f ${S}/ltmain.sh || -f ${S}/configure ]] && dirs+=("${S}");
  1027. else
  1028. [[ ${#dirs[@]} -eq 0 ]] && dirs+=("${S}");
  1029. dirs=($(find "${dirs[@]}" '(' -name ltmain.sh -o -name configure ')' -printf '%h\n' | sort -u));
  1030. fi;
  1031. local d p ret;
  1032. for d in "${dirs[@]}";
  1033. do
  1034. export ELT_APPLIED_PATCHES=;
  1035. if [[ -f ${d}/.elibtoolized ]]; then
  1036. ${force} || continue;
  1037. fi;
  1038. local outfunc="einfo";
  1039. [[ -f ${d}/.elibtoolized ]] && outfunc="ewarn";
  1040. ${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/";
  1041. if [[ ${outfunc} == "ewarn" ]]; then
  1042. ewarn " We've already been run in this tree; you should";
  1043. ewarn " avoid this if possible (perhaps by filing a bug)";
  1044. fi;
  1045. [[ -f ${d}/ltmain.sh ]] && for p in ${elt_patches};
  1046. do
  1047. ret=0;
  1048. case ${p} in
  1049. portage)
  1050. if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  1051. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1052. ret=$?;
  1053. fi
  1054. ;;
  1055. rem-int-dep)
  1056. ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}";
  1057. ret=$?
  1058. ;;
  1059. fix-relink)
  1060. if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh"; then
  1061. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1062. ret=$?;
  1063. fi
  1064. ;;
  1065. max_cmd_len)
  1066. if grep -qs 'max_cmd_len' "${d}/ltmain.sh"; then
  1067. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1068. ret=$?;
  1069. fi
  1070. ;;
  1071. as-needed)
  1072. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1073. ret=$?
  1074. ;;
  1075. uclibc-ltconf)
  1076. if [[ -s ${d}/ltconfig ]]; then
  1077. ELT_walk_patches "${d}/ltconfig" "${p}";
  1078. ret=$?;
  1079. fi
  1080. ;;
  1081. fbsd-ltconf)
  1082. if [[ -s ${d}/ltconfig ]]; then
  1083. ELT_walk_patches "${d}/ltconfig" "${p}";
  1084. ret=$?;
  1085. fi
  1086. ;;
  1087. darwin-ltconf)
  1088. if [[ -s ${d}/ltconfig ]]; then
  1089. ELT_walk_patches "${d}/ltconfig" "${p}";
  1090. ret=$?;
  1091. fi
  1092. ;;
  1093. darwin-ltmain)
  1094. if [[ -e ${d}/ltmain.sh ]] && ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh"; then
  1095. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1096. ret=$?;
  1097. fi
  1098. ;;
  1099. install-sh)
  1100. ELT_walk_patches "${d}/install-sh" "${p}";
  1101. ret=$?
  1102. ;;
  1103. cross)
  1104. if tc-is-cross-compiler; then
  1105. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1106. ret=$?;
  1107. fi
  1108. ;;
  1109. *)
  1110. ELT_walk_patches "${d}/ltmain.sh" "${p}";
  1111. ret=$?
  1112. ;;
  1113. esac;
  1114. if [[ ${ret} -ne 0 ]]; then
  1115. case ${p} in
  1116. relink)
  1117. local version=$(ELT_libtool_version "${d}/ltmain.sh");
  1118. if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
  1119. ewarn " Could not apply relink.patch!";
  1120. fi
  1121. ;;
  1122. portage)
  1123. if [[ ${do_portage} == "yes" ]]; then
  1124. if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  1125. echo;
  1126. eerror "Portage patch requested, but failed to apply!";
  1127. eerror "Please file a bug report to add a proper patch.";
  1128. die "Portage patch requested, but failed to apply!";
  1129. fi;
  1130. else
  1131. if grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
  1132. :;
  1133. else
  1134. local version=$(ELT_libtool_version "${d}"/ltmain.sh);
  1135. echo;
  1136. eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
  1137. eerror "Please file a bug report to add a proper patch.";
  1138. die "Portage patch failed to apply!";
  1139. fi;
  1140. ELT_APPLIED_PATCHES="portage";
  1141. fi
  1142. ;;
  1143. darwin-*)
  1144. [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${p}' failed to apply!"
  1145. ;;
  1146. esac;
  1147. fi;
  1148. done;
  1149. [[ -f ${d}/ltmain.sh ]] && if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
  1150. if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
  1151. ewarn "Cannot apply any patches, please file a bug about this";
  1152. die;
  1153. fi;
  1154. fi;
  1155. [[ -f ${d}/configure ]] && for p in ${elt_patches};
  1156. do
  1157. ret=0;
  1158. case ${p} in
  1159. uclibc-conf)
  1160. if grep -qs 'Transform linux' "${d}/configure"; then
  1161. ELT_walk_patches "${d}/configure" "${p}";
  1162. ret=$?;
  1163. fi
  1164. ;;
  1165. fbsd-conf)
  1166. if grep -qs 'version_type=freebsd-' "${d}/configure"; then
  1167. ELT_walk_patches "${d}/configure" "${p}";
  1168. ret=$?;
  1169. fi
  1170. ;;
  1171. darwin-conf)
  1172. if grep -qs '&& echo \.so ||' "${d}/configure"; then
  1173. ELT_walk_patches "${d}/configure" "${p}";
  1174. ret=$?;
  1175. fi
  1176. ;;
  1177. aixrtl | hpux-conf)
  1178. ret=1;
  1179. local subret=0;
  1180. while [[ $subret -eq 0 ]]; do
  1181. subret=1;
  1182. if [[ -e ${d}/configure ]]; then
  1183. ELT_walk_patches "${d}/configure" "${p}";
  1184. subret=$?;
  1185. fi;
  1186. if [[ $subret -eq 0 ]]; then
  1187. ret=0;
  1188. fi;
  1189. done
  1190. ;;
  1191. mint-conf | gold-conf | sol2-conf)
  1192. ELT_walk_patches "${d}/configure" "${p}";
  1193. ret=$?
  1194. ;;
  1195. target-nm)
  1196. ELT_walk_patches "${d}/configure" "${p}";
  1197. ret=$?
  1198. ;;
  1199. *)
  1200. ;;
  1201. esac;
  1202. if [[ ${ret} -ne 0 ]]; then
  1203. case ${p} in
  1204. uclibc-*)
  1205. [[ ${CHOST} == *-uclibc ]] && ewarn " uClibc patch set '${p}' failed to apply!"
  1206. ;;
  1207. fbsd-*)
  1208. if [[ ${CHOST} == *-freebsd* ]]; then
  1209. if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${d}/configure" 2>/dev/null) ]]; then
  1210. eerror " FreeBSD patch set '${p}' failed to apply!";
  1211. die "FreeBSD patch set '${p}' failed to apply!";
  1212. fi;
  1213. fi
  1214. ;;
  1215. darwin-*)
  1216. [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${p}' failed to apply!"
  1217. ;;
  1218. esac;
  1219. fi;
  1220. done;
  1221. rm -f "${d}/libtool";
  1222. > "${d}/.elibtoolized";
  1223. done
  1224. }
  1225. elt_patch_dir ()
  1226. {
  1227. local d="${ECLASSDIR}/ELT-patches";
  1228. if [[ ! -d ${d} ]]; then
  1229. d="${_LIBTOOL_ECLASSDIR_LOCAL}/ELT-patches";
  1230. fi;
  1231. echo "${d}"
  1232. }
  1233. emktemp ()
  1234. {
  1235. local exe="touch";
  1236. [[ $1 == -d ]] && exe="mkdir" && shift;
  1237. local topdir=$1;
  1238. if [[ -z ${topdir} ]]; then
  1239. [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
  1240. fi;
  1241. if ! type -P mktemp > /dev/null; then
  1242. local tmp=/;
  1243. while [[ -e ${tmp} ]]; do
  1244. tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
  1245. done;
  1246. ${exe} "${tmp}" || ${exe} -p "${tmp}";
  1247. echo "${tmp}";
  1248. else
  1249. if [[ ${exe} == "touch" ]]; then
  1250. TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
  1251. else
  1252. TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
  1253. fi;
  1254. fi
  1255. }
  1256. epatch ()
  1257. {
  1258. function _epatch_draw_line ()
  1259. {
  1260. [[ -z $1 ]] && set "$(printf "%65s" '')";
  1261. echo "${1//?/=}"
  1262. };
  1263. unset P4CONFIG P4PORT P4USER;
  1264. local EPATCH_OPTS=(${EPATCH_OPTS[*]});
  1265. while [[ $# -gt 0 ]]; do
  1266. case $1 in
  1267. -*)
  1268. EPATCH_OPTS+=("$1")
  1269. ;;
  1270. *)
  1271. break
  1272. ;;
  1273. esac;
  1274. shift;
  1275. done;
  1276. if [[ $# -gt 1 ]]; then
  1277. local m;
  1278. for m in "$@";
  1279. do
  1280. epatch "${m}";
  1281. done;
  1282. return 0;
  1283. fi;
  1284. local SINGLE_PATCH="no";
  1285. [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}";
  1286. if [[ -f $1 ]]; then
  1287. SINGLE_PATCH="yes";
  1288. set -- "$1";
  1289. local EPATCH_SUFFIX=$1;
  1290. else
  1291. if [[ -d $1 ]]; then
  1292. evar_push_set LC_COLLATE C;
  1293. set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
  1294. evar_pop;
  1295. else
  1296. if [[ -f ${EPATCH_SOURCE}/$1 ]]; then
  1297. epatch "${EPATCH_SOURCE}/$1";
  1298. return $?;
  1299. else
  1300. [[ $# -ne 0 ]] && EPATCH_SOURCE=$1;
  1301. echo;
  1302. eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:";
  1303. eerror;
  1304. eerror " ${EPATCH_SOURCE}";
  1305. eerror " ( ${EPATCH_SOURCE##*/} )";
  1306. echo;
  1307. die "Cannot find \$EPATCH_SOURCE!";
  1308. fi;
  1309. fi;
  1310. fi;
  1311. EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
  1312. local PIPE_CMD;
  1313. case ${EPATCH_SUFFIX##*\.} in
  1314. xz)
  1315. PIPE_CMD="xz -dc"
  1316. ;;
  1317. lzma)
  1318. PIPE_CMD="lzma -dc"
  1319. ;;
  1320. bz2)
  1321. PIPE_CMD="bzip2 -dc"
  1322. ;;
  1323. gz | Z | z)
  1324. PIPE_CMD="gzip -dc"
  1325. ;;
  1326. ZIP | zip)
  1327. PIPE_CMD="unzip -p"
  1328. ;;
  1329. *)
  1330. ;;
  1331. esac;
  1332. [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}";
  1333. local x;
  1334. for x in "$@";
  1335. do
  1336. [[ ! -f ${x} ]] && continue;
  1337. local patchname=${x##*/};
  1338. local a=${patchname#*_};
  1339. a=${a%%_*};
  1340. if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then
  1341. continue;
  1342. fi;
  1343. if [[ -n ${EPATCH_EXCLUDE}${EPATCH_USER_EXCLUDE} ]]; then
  1344. eshopts_push -o noglob;
  1345. local ex;
  1346. for ex in ${EPATCH_EXCLUDE};
  1347. do
  1348. if [[ ${patchname} == ${ex} ]]; then
  1349. einfo " Skipping ${patchname} due to EPATCH_EXCLUDE ...";
  1350. eshopts_pop;
  1351. continue 2;
  1352. fi;
  1353. done;
  1354. for ex in ${EPATCH_USER_EXCLUDE};
  1355. do
  1356. if [[ ${patchname} == ${ex} ]]; then
  1357. einfo " Skipping ${patchname} due to EPATCH_USER_EXCLUDE ...";
  1358. eshopts_pop;
  1359. continue 2;
  1360. fi;
  1361. done;
  1362. eshopts_pop;
  1363. fi;
  1364. if [[ ${SINGLE_PATCH} == "yes" ]]; then
  1365. if [[ -n ${EPATCH_SINGLE_MSG} ]]; then
  1366. einfo "${EPATCH_SINGLE_MSG}";
  1367. else
  1368. einfo "Applying ${patchname} ...";
  1369. fi;
  1370. else
  1371. einfo " ${patchname} ...";
  1372. fi;
  1373. local patch="patch";
  1374. eval $(alias patch 2>/dev/null | sed 's:^alias ::');
  1375. local STDERR_TARGET="${T}/${patchname}.out";
  1376. if [[ -e ${STDERR_TARGET} ]]; then
  1377. STDERR_TARGET="${T}/${patchname}-$$.out";
  1378. fi;
  1379. printf "***** %s *****\nPWD: %s\nPATCH TOOL: %s -> %s\nVERSION INFO:\n%s\n\n" "${patchname}" "${PWD}" "${patch}" "$(type -P "${patch}")" "$(${patch} --version)" > "${STDERR_TARGET}";
  1380. local count=0;
  1381. local PATCH_TARGET;
  1382. if [[ -n ${PIPE_CMD} ]]; then
  1383. PATCH_TARGET="${T}/$$.patch";
  1384. echo "PIPE_COMMAND: ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}";
  1385. if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then
  1386. echo;
  1387. eerror "Could not extract patch!";
  1388. count=5;
  1389. break;
  1390. fi;
  1391. else
  1392. PATCH_TARGET=${x};
  1393. fi;
  1394. local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
  1395. if [[ -n ${abs_paths} ]]; then
  1396. count=1;
  1397. printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}";
  1398. fi;
  1399. local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}");
  1400. if [[ -n ${rel_paths} ]]; then
  1401. echo;
  1402. eerror "Rejected Patch: ${patchname} !";
  1403. eerror " ( ${PATCH_TARGET} )";
  1404. eerror;
  1405. eerror "Your patch uses relative paths '../':";
  1406. eerror "${rel_paths}";
  1407. echo;
  1408. die "you need to fix the relative paths in patch";
  1409. fi;
  1410. local patch_cmd;
  1411. while [[ ${count} -lt 5 ]]; do
  1412. patch_cmd="${patch} -p${count} ${EPATCH_OPTS}";
  1413. ( _epatch_draw_line "***** ${patchname} *****";
  1414. echo;
  1415. echo "PATCH COMMAND: ${patch_cmd} < '${PATCH_TARGET}'";
  1416. echo;
  1417. _epatch_draw_line "***** ${patchname} *****";
  1418. ${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1;
  1419. ret=$?;
  1420. echo;
  1421. echo "patch program exited with status ${ret}";
  1422. exit ${ret} ) >> "${STDERR_TARGET}";
  1423. if [ $? -eq 0 ]; then
  1424. ( _epatch_draw_line "***** ${patchname} *****";
  1425. echo;
  1426. echo "ACTUALLY APPLYING ${patchname} ...";
  1427. echo;
  1428. _epatch_draw_line "***** ${patchname} *****";
  1429. ${patch_cmd} < "${PATCH_TARGET}" 2>&1;
  1430. ret=$?;
  1431. echo;
  1432. echo "patch program exited with status ${ret}";
  1433. exit ${ret} ) >> "${STDERR_TARGET}";
  1434. if [ $? -ne 0 ]; then
  1435. echo;
  1436. eerror "A dry-run of patch command succeeded, but actually";
  1437. eerror "applying the patch failed!";
  1438. count=5;
  1439. fi;
  1440. break;
  1441. fi;
  1442. : $(( count++ ));
  1443. done;
  1444. if [[ -n ${PIPE_CMD} ]]; then
  1445. rm -f "${PATCH_TARGET}";
  1446. fi;
  1447. if [[ ${count} -ge 5 ]]; then
  1448. echo;
  1449. eerror "Failed Patch: ${patchname} !";
  1450. eerror " ( ${PATCH_TARGET} )";
  1451. eerror;
  1452. eerror "Include in your bugreport the contents of:";
  1453. eerror;
  1454. eerror " ${STDERR_TARGET}";
  1455. echo;
  1456. die "Failed Patch: ${patchname}!";
  1457. fi;
  1458. rm -f "${STDERR_TARGET}";
  1459. cat >> "${T}/epatch.log" <<-EOF
  1460. PATCH: ${x}
  1461. CMD: ${patch_cmd}
  1462. PWD: ${PWD}
  1463. EOF
  1464. eend 0;
  1465. done;
  1466. [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
  1467. :
  1468. }
  1469. epatch_user ()
  1470. {
  1471. [[ $# -ne 0 ]] && die "epatch_user takes no options";
  1472. local applied="${T}/epatch_user.log";
  1473. [[ -e ${applied} ]] && return 2;
  1474. local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
  1475. for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT}};
  1476. do
  1477. EPATCH_SOURCE=${base}/${CTARGET}/${check};
  1478. [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check};
  1479. [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check};
  1480. if [[ -d ${EPATCH_SOURCE} ]]; then
  1481. EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch;
  1482. echo "${EPATCH_SOURCE}" > "${applied}";
  1483. has epatch_user_death_notice ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" epatch_user_death_notice";
  1484. return 0;
  1485. fi;
  1486. done;
  1487. echo "none" > "${applied}";
  1488. return 1
  1489. }
  1490. epatch_user_death_notice ()
  1491. {
  1492. ewarn "!!! User patches were applied to this build!"
  1493. }
  1494. epause ()
  1495. {
  1496. ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org"
  1497. }
  1498. epunt_cxx ()
  1499. {
  1500. local dir=$1;
  1501. [[ -z ${dir} ]] && dir=${S};
  1502. ebegin "Removing useless C++ checks";
  1503. local f p any_found;
  1504. while IFS= read -r -d '' f; do
  1505. for p in "${PORTDIR}"/eclass/ELT-patches/nocxx/*.patch;
  1506. do
  1507. if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
  1508. any_found=1;
  1509. break;
  1510. fi;
  1511. done;
  1512. done < <(find "${dir}" -name configure -print0);
  1513. if [[ -z ${any_found} ]]; then
  1514. eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
  1515. fi;
  1516. eend 0
  1517. }
  1518. eshopts_pop ()
  1519. {
  1520. local s;
  1521. estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
  1522. if [[ ${s} == "shopt -"* ]]; then
  1523. eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
  1524. else
  1525. set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
  1526. set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
  1527. fi
  1528. }
  1529. eshopts_push ()
  1530. {
  1531. if [[ $1 == -[su] ]]; then
  1532. estack_push eshopts "$(shopt -p)";
  1533. [[ $# -eq 0 ]] && return 0;
  1534. shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
  1535. else
  1536. estack_push eshopts $-;
  1537. [[ $# -eq 0 ]] && return 0;
  1538. set "$@" || die "${FUNCNAME}: bad options to set: $*";
  1539. fi
  1540. }
  1541. estack_pop ()
  1542. {
  1543. [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
  1544. local _estack_name="_ESTACK_$1_";
  1545. shift;
  1546. local _estack_retvar=$1;
  1547. shift;
  1548. eval local _estack_i=\${#${_estack_name}\[@\]};
  1549. [[ $(( --_estack_i )) -eq -1 ]] && return 1;
  1550. if [[ -n ${_estack_retvar} ]]; then
  1551. eval ${_estack_retvar}=\"\${${_estack_name}\[${_estack_i}\]}\";
  1552. fi;
  1553. eval unset ${_estack_name}\[${_estack_i}\]
  1554. }
  1555. estack_push ()
  1556. {
  1557. [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments";
  1558. local stack_name="_ESTACK_$1_";
  1559. shift;
  1560. eval ${stack_name}+=\( \"\$@\" \)
  1561. }
  1562. esvn_clean ()
  1563. {
  1564. [[ -z $* ]] && set -- .;
  1565. find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
  1566. }
  1567. eumask_pop ()
  1568. {
  1569. [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options";
  1570. local s;
  1571. estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
  1572. umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
  1573. }
  1574. eumask_push ()
  1575. {
  1576. estack_push eumask "$(umask)";
  1577. umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
  1578. }
  1579. evar_pop ()
  1580. {
  1581. local cnt=${1:-bad};
  1582. case $# in
  1583. 0)
  1584. cnt=1
  1585. ;;
  1586. 1)
  1587. isdigit "${cnt}" || die "${FUNCNAME}: first arg must be a number: $*"
  1588. ;;
  1589. *)
  1590. die "${FUNCNAME}: only accepts one arg: $*"
  1591. ;;
  1592. esac;
  1593. local var val;
  1594. while (( cnt-- )); do
  1595. estack_pop evar val || die "${FUNCNAME}: unbalanced push";
  1596. estack_pop evar var || die "${FUNCNAME}: unbalanced push";
  1597. [[ ${val} == "unset_76fc3c462065bb4ca959f939e6793f94" ]] && unset ${var} || printf -v "${var}" '%s' "${val}";
  1598. done
  1599. }
  1600. evar_push ()
  1601. {
  1602. local var val;
  1603. for var in "$@";
  1604. do
  1605. [[ ${!var+set} == "set" ]] && val=${!var} || val="unset_76fc3c462065bb4ca959f939e6793f94";
  1606. estack_push evar "${var}" "${val}";
  1607. done
  1608. }
  1609. evar_push_set ()
  1610. {
  1611. local var=$1;
  1612. evar_push ${var};
  1613. case $# in
  1614. 1)
  1615. unset ${var}
  1616. ;;
  1617. 2)
  1618. printf -v "${var}" '%s' "$2"
  1619. ;;
  1620. *)
  1621. die "${FUNCNAME}: incorrect # of args: $*"
  1622. ;;
  1623. esac
  1624. }
  1625. gcc-fullversion ()
  1626. {
  1627. _gcc_fullversion '$1.$2.$3' "$@"
  1628. }
  1629. gcc-major-version ()
  1630. {
  1631. _gcc_fullversion '$1' "$@"
  1632. }
  1633. gcc-micro-version ()
  1634. {
  1635. _gcc_fullversion '$3' "$@"
  1636. }
  1637. gcc-minor-version ()
  1638. {
  1639. _gcc_fullversion '$2' "$@"
  1640. }
  1641. gcc-specs-directive ()
  1642. {
  1643. local directive subdname subdirective;
  1644. directive="$(_gcc-specs-directive_raw $1)";
  1645. while [[ ${directive} == *%\(*\)* ]]; do
  1646. subdname=${directive/*%\(};
  1647. subdname=${subdname/\)*};
  1648. subdirective="$(_gcc-specs-directive_raw ${subdname})";
  1649. directive="${directive//\%(${subdname})/${subdirective}}";
  1650. done;
  1651. echo "${directive}";
  1652. return 0
  1653. }
  1654. gcc-specs-nostrict ()
  1655. {
  1656. local directive;
  1657. directive=$(gcc-specs-directive cc1);
  1658. [[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]
  1659. }
  1660. gcc-specs-now ()
  1661. {
  1662. local directive;
  1663. directive=$(gcc-specs-directive link_command);
  1664. [[ "${directive/\{!nonow:}" != "${directive}" ]]
  1665. }
  1666. gcc-specs-pie ()
  1667. {
  1668. local directive;
  1669. directive=$(gcc-specs-directive cc1);
  1670. [[ "${directive/\{!nopie:}" != "${directive}" ]]
  1671. }
  1672. gcc-specs-relro ()
  1673. {
  1674. local directive;
  1675. directive=$(gcc-specs-directive link_command);
  1676. [[ "${directive/\{!norelro:}" != "${directive}" ]]
  1677. }
  1678. gcc-specs-ssp ()
  1679. {
  1680. local directive;
  1681. directive=$(gcc-specs-directive cc1);
  1682. [[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]
  1683. }
  1684. gcc-specs-ssp-to-all ()
  1685. {
  1686. local directive;
  1687. directive=$(gcc-specs-directive cc1);
  1688. [[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]
  1689. }
  1690. gcc-specs-stack-check ()
  1691. {
  1692. local directive;
  1693. directive=$(gcc-specs-directive cc1);
  1694. [[ "${directive/\{!fno-stack-check:}" != "${directive}" ]]
  1695. }
  1696. gcc-version ()
  1697. {
  1698. _gcc_fullversion '$1.$2' "$@"
  1699. }
  1700. gen_usr_ldscript ()
  1701. {
  1702. local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
  1703. [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
  1704. tc-is-static-only && return;
  1705. case ${CTARGET:-${CHOST}} in
  1706. *-darwin*)
  1707. ;;
  1708. *linux* | *-freebsd* | *-openbsd* | *-netbsd*)
  1709. use prefix && return 0
  1710. ;;
  1711. *)
  1712. return 0
  1713. ;;
  1714. esac;
  1715. dodir /usr/${libdir};
  1716. if [[ $1 == "-a" ]]; then
  1717. auto=true;
  1718. shift;
  1719. dodir /${libdir};
  1720. fi;
  1721. local flags=(${CFLAGS} ${LDFLAGS} -Wl,--verbose);
  1722. if $(tc-getLD) --version | grep -q 'GNU gold'; then
  1723. local d="${T}/bfd-linker";
  1724. mkdir -p "${d}";
  1725. ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld;
  1726. flags+=(-B"${d}");
  1727. fi;
  1728. output_format=$($(tc-getCC) "${flags[@]}" 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
  1729. [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
  1730. for lib in "$@";
  1731. do
  1732. local tlib;
  1733. if ${auto}; then
  1734. lib="lib${lib}${suffix}";
  1735. else
  1736. [[ -r ${ED}/${libdir}/${lib} ]] || continue;
  1737. fi;
  1738. case ${CTARGET:-${CHOST}} in
  1739. *-darwin*)
  1740. if ${auto}; then
  1741. tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1742. else
  1743. tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
  1744. fi;
  1745. [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
  1746. tlib=${tlib##*/};
  1747. if ${auto}; then
  1748. mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1749. if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
  1750. mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  1751. fi;
  1752. rm -f "${ED}"/${libdir}/${lib};
  1753. fi;
  1754. if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
  1755. chmod u+w "${ED}${libdir}/${tlib}";
  1756. local nowrite=yes;
  1757. fi;
  1758. install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
  1759. [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
  1760. pushd "${ED}/usr/${libdir}" > /dev/null;
  1761. ln -snf "../../${libdir}/${tlib}" "${lib}";
  1762. popd > /dev/null
  1763. ;;
  1764. *)
  1765. if ${auto}; then
  1766. tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  1767. [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
  1768. mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
  1769. if [[ ${tlib} != ${lib}* ]]; then
  1770. mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
  1771. fi;
  1772. rm -f "${ED}"/${libdir}/${lib};
  1773. else
  1774. tlib=${lib};
  1775. fi;
  1776. cat > "${ED}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
  1777. /* GNU ld script
  1778. Since Gentoo has critical dynamic libraries in /lib, and the static versions
  1779. in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
  1780. run into linking problems. This "fake" dynamic lib is a linker script that
  1781. redirects the linker to the real lib. And yes, this works in the cross-
  1782. compiling scenario as the sysroot-ed linker will prepend the real path.
  1783. See bug http://bugs.gentoo.org/4411 for more info.
  1784. */
  1785. ${output_format}
  1786. GROUP ( ${EPREFIX}/${libdir}/${tlib} )
  1787. END_LDSCRIPT
  1788. ;;
  1789. esac
  1790. fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
  1791. done
  1792. }
  1793. get_abi_CFLAGS ()
  1794. {
  1795. get_abi_var CFLAGS "$@"
  1796. }
  1797. get_abi_CHOST ()
  1798. {
  1799. get_abi_var CHOST "$@"
  1800. }
  1801. get_abi_CTARGET ()
  1802. {
  1803. get_abi_var CTARGET "$@"
  1804. }
  1805. get_abi_FAKE_TARGETS ()
  1806. {
  1807. get_abi_var FAKE_TARGETS "$@"
  1808. }
  1809. get_abi_LDFLAGS ()
  1810. {
  1811. get_abi_var LDFLAGS "$@"
  1812. }
  1813. get_abi_LIBDIR ()
  1814. {
  1815. get_abi_var LIBDIR "$@"
  1816. }
  1817. get_abi_var ()
  1818. {
  1819. local flag=$1;
  1820. local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
  1821. local var="${flag}_${abi}";
  1822. echo ${!var}
  1823. }
  1824. get_all_abis ()
  1825. {
  1826. local x order="" mvar dvar;
  1827. mvar="MULTILIB_ABIS";
  1828. dvar="DEFAULT_ABI";
  1829. if [[ -n $1 ]]; then
  1830. mvar="$1_${mvar}";
  1831. dvar="$1_${dvar}";
  1832. fi;
  1833. if [[ -z ${!mvar} ]]; then
  1834. echo "default";
  1835. return 0;
  1836. fi;
  1837. for x in ${!mvar};
  1838. do
  1839. if [[ ${x} != ${!dvar} ]]; then
  1840. order="${order:+${order} }${x}";
  1841. fi;
  1842. done;
  1843. order="${order:+${order} }${!dvar}";
  1844. echo ${order};
  1845. return 0
  1846. }
  1847. get_all_libdirs ()
  1848. {
  1849. local libdirs abi;
  1850. for abi in ${MULTILIB_ABIS};
  1851. do
  1852. libdirs+=" $(get_abi_LIBDIR ${abi})";
  1853. done;
  1854. [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
  1855. echo "${libdirs}"
  1856. }
  1857. get_install_abis ()
  1858. {
  1859. local x order="";
  1860. if [[ -z ${MULTILIB_ABIS} ]]; then
  1861. echo "default";
  1862. return 0;
  1863. fi;
  1864. if [[ ${EMULTILIB_PKG} == "true" ]]; then
  1865. for x in ${MULTILIB_ABIS};
  1866. do
  1867. if [[ ${x} != "${DEFAULT_ABI}" ]]; then
  1868. has ${x} ${ABI_DENY} || order="${order} ${x}";
  1869. fi;
  1870. done;
  1871. has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
  1872. if [[ -n ${ABI_ALLOW} ]]; then
  1873. local ordera="";
  1874. for x in ${order};
  1875. do
  1876. if has ${x} ${ABI_ALLOW}; then
  1877. ordera="${ordera} ${x}";
  1878. fi;
  1879. done;
  1880. order=${ordera};
  1881. fi;
  1882. else
  1883. order=${DEFAULT_ABI};
  1884. fi;
  1885. if [[ -z ${order} ]]; then
  1886. 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.";
  1887. fi;
  1888. echo ${order};
  1889. return 0
  1890. }
  1891. get_libdir ()
  1892. {
  1893. local CONF_LIBDIR;
  1894. if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
  1895. echo ${CONF_LIBDIR_OVERRIDE};
  1896. else
  1897. get_abi_LIBDIR;
  1898. fi
  1899. }
  1900. get_libname ()
  1901. {
  1902. local libname;
  1903. local ver=$1;
  1904. case ${CHOST} in
  1905. *-cygwin | mingw* | *-mingw*)
  1906. libname="dll"
  1907. ;;
  1908. *-darwin*)
  1909. libname="dylib"
  1910. ;;
  1911. *-mint*)
  1912. libname="irrelevant"
  1913. ;;
  1914. hppa*-hpux*)
  1915. libname="sl"
  1916. ;;
  1917. *)
  1918. libname="so"
  1919. ;;
  1920. esac;
  1921. if [[ -z $* ]]; then
  1922. echo ".${libname}";
  1923. else
  1924. for ver in "$@";
  1925. do
  1926. case ${CHOST} in
  1927. *-darwin*)
  1928. echo ".${ver}.${libname}"
  1929. ;;
  1930. *-mint*)
  1931. echo ".${libname}"
  1932. ;;
  1933. *)
  1934. echo ".${libname}.${ver}"
  1935. ;;
  1936. esac;
  1937. done;
  1938. fi
  1939. }
  1940. get_modname ()
  1941. {
  1942. local modname;
  1943. local ver=$1;
  1944. case ${CHOST} in
  1945. *-darwin*)
  1946. modname="bundle"
  1947. ;;
  1948. *)
  1949. modname="so"
  1950. ;;
  1951. esac;
  1952. echo ".${modname}"
  1953. }
  1954. has_multilib_profile ()
  1955. {
  1956. [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
  1957. }
  1958. in_iuse ()
  1959. {
  1960. debug-print-function ${FUNCNAME} "${@}";
  1961. [[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()";
  1962. local flag=${1};
  1963. local liuse=(${IUSE});
  1964. has "${flag}" "${liuse[@]#[+-]}"
  1965. }
  1966. is_final_abi ()
  1967. {
  1968. has_multilib_profile || return 0;
  1969. set -- $(get_install_abis);
  1970. local LAST_ABI=$#;
  1971. [[ ${!LAST_ABI} == ${ABI} ]]
  1972. }
  1973. isdigit ()
  1974. {
  1975. local d;
  1976. for d in "$@";
  1977. do
  1978. [[ ${d:-bad} == *[!0-9]* ]] && return 1;
  1979. done;
  1980. return 0
  1981. }
  1982. make_desktop_entry ()
  1983. {
  1984. [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable";
  1985. local exec=${1};
  1986. local name=${2:-${PN}};
  1987. local icon=${3:-${PN}};
  1988. local type=${4};
  1989. local fields=${5};
  1990. if [[ -z ${type} ]]; then
  1991. local catmaj=${CATEGORY%%-*};
  1992. local catmin=${CATEGORY##*-};
  1993. case ${catmaj} in
  1994. app)
  1995. case ${catmin} in
  1996. accessibility)
  1997. type="Utility;Accessibility"
  1998. ;;
  1999. admin)
  2000. type=System
  2001. ;;
  2002. antivirus)
  2003. type=System
  2004. ;;
  2005. arch)
  2006. type="Utility;Archiving"
  2007. ;;
  2008. backup)
  2009. type="Utility;Archiving"
  2010. ;;
  2011. cdr)
  2012. type="AudioVideo;DiscBurning"
  2013. ;;
  2014. dicts)
  2015. type="Office;Dictionary"
  2016. ;;
  2017. doc)
  2018. type=Documentation
  2019. ;;
  2020. editors)
  2021. type="Utility;TextEditor"
  2022. ;;
  2023. emacs)
  2024. type="Development;TextEditor"
  2025. ;;
  2026. emulation)
  2027. type="System;Emulator"
  2028. ;;
  2029. laptop)
  2030. type="Settings;HardwareSettings"
  2031. ;;
  2032. office)
  2033. type=Office
  2034. ;;
  2035. pda)
  2036. type="Office;PDA"
  2037. ;;
  2038. vim)
  2039. type="Development;TextEditor"
  2040. ;;
  2041. xemacs)
  2042. type="Development;TextEditor"
  2043. ;;
  2044. esac
  2045. ;;
  2046. dev)
  2047. type="Development"
  2048. ;;
  2049. games)
  2050. case ${catmin} in
  2051. action | fps)
  2052. type=ActionGame
  2053. ;;
  2054. arcade)
  2055. type=ArcadeGame
  2056. ;;
  2057. board)
  2058. type=BoardGame
  2059. ;;
  2060. emulation)
  2061. type=Emulator
  2062. ;;
  2063. kids)
  2064. type=KidsGame
  2065. ;;
  2066. puzzle)
  2067. type=LogicGame
  2068. ;;
  2069. roguelike)
  2070. type=RolePlaying
  2071. ;;
  2072. rpg)
  2073. type=RolePlaying
  2074. ;;
  2075. simulation)
  2076. type=Simulation
  2077. ;;
  2078. sports)
  2079. type=SportsGame
  2080. ;;
  2081. strategy)
  2082. type=StrategyGame
  2083. ;;
  2084. esac;
  2085. type="Game;${type}"
  2086. ;;
  2087. gnome)
  2088. type="Gnome;GTK"
  2089. ;;
  2090. kde)
  2091. type="KDE;Qt"
  2092. ;;
  2093. mail)
  2094. type="Network;Email"
  2095. ;;
  2096. media)
  2097. case ${catmin} in
  2098. gfx)
  2099. type=Graphics
  2100. ;;
  2101. *)
  2102. case ${catmin} in
  2103. radio)
  2104. type=Tuner
  2105. ;;
  2106. sound)
  2107. type=Audio
  2108. ;;
  2109. tv)
  2110. type=TV
  2111. ;;
  2112. video)
  2113. type=Video
  2114. ;;
  2115. esac;
  2116. type="AudioVideo;${type}"
  2117. ;;
  2118. esac
  2119. ;;
  2120. net)
  2121. case ${catmin} in
  2122. dialup)
  2123. type=Dialup
  2124. ;;
  2125. ftp)
  2126. type=FileTransfer
  2127. ;;
  2128. im)
  2129. type=InstantMessaging
  2130. ;;
  2131. irc)
  2132. type=IRCClient
  2133. ;;
  2134. mail)
  2135. type=Email
  2136. ;;
  2137. news)
  2138. type=News
  2139. ;;
  2140. nntp)
  2141. type=News
  2142. ;;
  2143. p2p)
  2144. type=FileTransfer
  2145. ;;
  2146. voip)
  2147. type=Telephony
  2148. ;;
  2149. esac;
  2150. type="Network;${type}"
  2151. ;;
  2152. sci)
  2153. case ${catmin} in
  2154. astro*)
  2155. type=Astronomy
  2156. ;;
  2157. bio*)
  2158. type=Biology
  2159. ;;
  2160. calc*)
  2161. type=Calculator
  2162. ;;
  2163. chem*)
  2164. type=Chemistry
  2165. ;;
  2166. elec*)
  2167. type=Electronics
  2168. ;;
  2169. geo*)
  2170. type=Geology
  2171. ;;
  2172. math*)
  2173. type=Math
  2174. ;;
  2175. physics)
  2176. type=Physics
  2177. ;;
  2178. visual*)
  2179. type=DataVisualization
  2180. ;;
  2181. esac;
  2182. type="Education;Science;${type}"
  2183. ;;
  2184. sys)
  2185. type="System"
  2186. ;;
  2187. www)
  2188. case ${catmin} in
  2189. client)
  2190. type=WebBrowser
  2191. ;;
  2192. esac;
  2193. type="Network;${type}"
  2194. ;;
  2195. *)
  2196. type=
  2197. ;;
  2198. esac;
  2199. fi;
  2200. local slot=${SLOT%/*};
  2201. if [[ ${slot} == "0" ]]; then
  2202. local desktop_name="${PN}";
  2203. else
  2204. local desktop_name="${PN}-${slot}";
  2205. fi;
  2206. local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
  2207. type=${type%;}${type:+;};
  2208. eshopts_push -s extglob;
  2209. if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
  2210. ewarn "As described in the Icon Theme Specification, icon file extensions are not";
  2211. ewarn "allowed in .desktop files if the value is not an absolute path.";
  2212. icon=${icon%.@(xpm|png|svg)};
  2213. fi;
  2214. eshopts_pop;
  2215. cat > "${desktop}" <<-EOF
  2216. [Desktop Entry]
  2217. Name=${name}
  2218. Type=Application
  2219. Comment=${DESCRIPTION}
  2220. Exec=${exec}
  2221. TryExec=${exec%% *}
  2222. Icon=${icon}
  2223. Categories=${type}
  2224. EOF
  2225. if [[ ${fields:-=} != *=* ]]; then
  2226. ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
  2227. fields="Path=${fields}";
  2228. fi;
  2229. [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
  2230. ( insinto /usr/share/applications;
  2231. doins "${desktop}" ) || die "installing desktop file failed"
  2232. }
  2233. make_session_desktop ()
  2234. {
  2235. [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
  2236. [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
  2237. local title=$1;
  2238. local command=$2;
  2239. local desktop=${T}/${wm:-${PN}}.desktop;
  2240. shift 2;
  2241. cat > "${desktop}" <<-EOF
  2242. [Desktop Entry]
  2243. Name=${title}
  2244. Comment=This session logs you into ${title}
  2245. Exec=${command} $*
  2246. TryExec=${command}
  2247. Type=XSession
  2248. EOF
  2249. ( insinto /usr/share/xsessions;
  2250. doins "${desktop}" )
  2251. }
  2252. make_wrapper ()
  2253. {
  2254. _eutils_eprefix_init;
  2255. local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
  2256. local tmpwrapper=$(emktemp);
  2257. ( echo '#!/bin/sh';
  2258. [[ -n ${chdir} ]] && printf 'cd "%s"\n' "${EPREFIX}${chdir}";
  2259. if [[ -n ${libdir} ]]; then
  2260. local var;
  2261. if [[ ${CHOST} == *-darwin* ]]; then
  2262. var=DYLD_LIBRARY_PATH;
  2263. else
  2264. var=LD_LIBRARY_PATH;
  2265. fi;
  2266. cat <<-EOF
  2267. if [ "\${${var}+set}" = "set" ] ; then
  2268. export ${var}="\${${var}}:${EPREFIX}${libdir}"
  2269. else
  2270. export ${var}="${EPREFIX}${libdir}"
  2271. fi
  2272. EOF
  2273. fi
  2274. printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
  2275. chmod go+rx "${tmpwrapper}";
  2276. if [[ -n ${path} ]]; then
  2277. ( exeinto "${path}";
  2278. newexe "${tmpwrapper}" "${wrapper}" ) || die;
  2279. else
  2280. newbin "${tmpwrapper}" "${wrapper}" || die;
  2281. fi
  2282. }
  2283. multilib_env ()
  2284. {
  2285. local CTARGET=${1:-${CTARGET}};
  2286. local cpu=${CTARGET%%*-};
  2287. case ${cpu} in
  2288. aarch64*)
  2289. export CFLAGS_arm=${CFLAGS_arm-};
  2290. case ${cpu} in
  2291. aarch64*be)
  2292. export CHOST_arm="armv8b-${CTARGET#*-}"
  2293. ;;
  2294. *)
  2295. export CHOST_arm="armv8l-${CTARGET#*-}"
  2296. ;;
  2297. esac;
  2298. CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
  2299. export CTARGET_arm=${CHOST_arm};
  2300. export LIBDIR_arm="lib";
  2301. export CFLAGS_arm64=${CFLAGS_arm64-};
  2302. export CHOST_arm64=${CTARGET};
  2303. export CTARGET_arm64=${CHOST_arm64};
  2304. export LIBDIR_arm64="lib64";
  2305. : ${MULTILIB_ABIS=arm64};
  2306. : ${DEFAULT_ABI=arm64}
  2307. ;;
  2308. x86_64*)
  2309. export CFLAGS_x86=${CFLAGS_x86--m32};
  2310. export CHOST_x86=${CTARGET/x86_64/i686};
  2311. CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
  2312. export CTARGET_x86=${CHOST_x86};
  2313. if [[ ${SYMLINK_LIB} == "yes" ]]; then
  2314. export LIBDIR_x86="lib32";
  2315. else
  2316. export LIBDIR_x86="lib";
  2317. fi;
  2318. export CFLAGS_amd64=${CFLAGS_amd64--m64};
  2319. export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
  2320. export CTARGET_amd64=${CHOST_amd64};
  2321. export LIBDIR_amd64="lib64";
  2322. export CFLAGS_x32=${CFLAGS_x32--mx32};
  2323. export CHOST_x32=${CTARGET/%-gnu/-gnux32};
  2324. export CTARGET_x32=${CHOST_x32};
  2325. export LIBDIR_x32="libx32";
  2326. case ${CTARGET} in
  2327. *-gnux32)
  2328. : ${MULTILIB_ABIS=x32 amd64 x86};
  2329. : ${DEFAULT_ABI=x32}
  2330. ;;
  2331. *)
  2332. : ${MULTILIB_ABIS=amd64 x86};
  2333. : ${DEFAULT_ABI=amd64}
  2334. ;;
  2335. esac
  2336. ;;
  2337. mips64*)
  2338. export CFLAGS_o32=${CFLAGS_o32--mabi=32};
  2339. export CHOST_o32=${CTARGET/mips64/mips};
  2340. export CTARGET_o32=${CHOST_o32};
  2341. export LIBDIR_o32="lib";
  2342. export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
  2343. export CHOST_n32=${CTARGET};
  2344. export CTARGET_n32=${CHOST_n32};
  2345. export LIBDIR_n32="lib32";
  2346. export CFLAGS_n64=${CFLAGS_n64--mabi=64};
  2347. export CHOST_n64=${CTARGET};
  2348. export CTARGET_n64=${CHOST_n64};
  2349. export LIBDIR_n64="lib64";
  2350. : ${MULTILIB_ABIS=n64 n32 o32};
  2351. : ${DEFAULT_ABI=n32}
  2352. ;;
  2353. powerpc64*)
  2354. export CFLAGS_ppc=${CFLAGS_ppc--m32};
  2355. export CHOST_ppc=${CTARGET/powerpc64/powerpc};
  2356. export CTARGET_ppc=${CHOST_ppc};
  2357. export LIBDIR_ppc="lib";
  2358. export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
  2359. export CHOST_ppc64=${CTARGET};
  2360. export CTARGET_ppc64=${CHOST_ppc64};
  2361. export LIBDIR_ppc64="lib64";
  2362. : ${MULTILIB_ABIS=ppc64 ppc};
  2363. : ${DEFAULT_ABI=ppc64}
  2364. ;;
  2365. s390x*)
  2366. export CFLAGS_s390=${CFLAGS_s390--m31};
  2367. export CHOST_s390=${CTARGET/s390x/s390};
  2368. export CTARGET_s390=${CHOST_s390};
  2369. export LIBDIR_s390="lib";
  2370. export CFLAGS_s390x=${CFLAGS_s390x--m64};
  2371. export CHOST_s390x=${CTARGET};
  2372. export CTARGET_s390x=${CHOST_s390x};
  2373. export LIBDIR_s390x="lib64";
  2374. : ${MULTILIB_ABIS=s390x s390};
  2375. : ${DEFAULT_ABI=s390x}
  2376. ;;
  2377. sparc64*)
  2378. export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
  2379. export CHOST_sparc32=${CTARGET/sparc64/sparc};
  2380. export CTARGET_sparc32=${CHOST_sparc32};
  2381. export LIBDIR_sparc32="lib";
  2382. export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
  2383. export CHOST_sparc64=${CTARGET};
  2384. export CTARGET_sparc64=${CHOST_sparc64};
  2385. export LIBDIR_sparc64="lib64";
  2386. : ${MULTILIB_ABIS=sparc64 sparc32};
  2387. : ${DEFAULT_ABI=sparc64}
  2388. ;;
  2389. *)
  2390. : ${MULTILIB_ABIS=default};
  2391. : ${DEFAULT_ABI=default}
  2392. ;;
  2393. esac;
  2394. export MULTILIB_ABIS DEFAULT_ABI
  2395. }
  2396. multilib_toolchain_setup ()
  2397. {
  2398. local v vv;
  2399. export ABI=$1;
  2400. if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
  2401. for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  2402. do
  2403. vv="_abi_saved_${v}";
  2404. [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
  2405. unset ${vv};
  2406. done;
  2407. unset _DEFAULT_ABI_SAVED;
  2408. fi;
  2409. if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
  2410. for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  2411. do
  2412. vv="_abi_saved_${v}";
  2413. [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
  2414. done;
  2415. export _DEFAULT_ABI_SAVED="true";
  2416. export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
  2417. export CC="$(tc-getCC) $(get_abi_CFLAGS)";
  2418. export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
  2419. export F77="$(tc-getF77) $(get_abi_CFLAGS)";
  2420. export FC="$(tc-getFC) $(get_abi_CFLAGS)";
  2421. export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
  2422. export CHOST=$(get_abi_CHOST $1);
  2423. export CBUILD=$(get_abi_CHOST $1);
  2424. export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
  2425. export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
  2426. fi
  2427. }
  2428. newicon ()
  2429. {
  2430. _iconins ${FUNCNAME} "$@"
  2431. }
  2432. newmenu ()
  2433. {
  2434. ( insinto /usr/share/applications;
  2435. newins "$@" )
  2436. }
  2437. number_abis ()
  2438. {
  2439. set -- `get_install_abis`;
  2440. echo $#
  2441. }
  2442. optfeature ()
  2443. {
  2444. debug-print-function ${FUNCNAME} "$@";
  2445. local i j msg;
  2446. local desc=$1;
  2447. local flag=0;
  2448. shift;
  2449. for i in "$@";
  2450. do
  2451. for j in ${i};
  2452. do
  2453. if has_version "${j}"; then
  2454. flag=1;
  2455. else
  2456. flag=0;
  2457. break;
  2458. fi;
  2459. done;
  2460. if [[ ${flag} -eq 1 ]]; then
  2461. break;
  2462. fi;
  2463. done;
  2464. if [[ ${flag} -eq 0 ]]; then
  2465. for i in "$@";
  2466. do
  2467. msg=" ";
  2468. for j in ${i};
  2469. do
  2470. msg+=" ${j} and";
  2471. done;
  2472. msg="${msg:0: -4} for ${desc}";
  2473. elog "${msg}";
  2474. done;
  2475. fi
  2476. }
  2477. path_exists ()
  2478. {
  2479. local opt=$1;
  2480. [[ ${opt} == -[ao] ]] && shift || opt="-a";
  2481. [[ $# -eq 0 ]] && return 1;
  2482. local p r=0;
  2483. for p in "$@";
  2484. do
  2485. [[ -e ${p} ]];
  2486. : $(( r += $? ));
  2487. done;
  2488. case ${opt} in
  2489. -a)
  2490. return $(( r != 0 ))
  2491. ;;
  2492. -o)
  2493. return $(( r == $# ))
  2494. ;;
  2495. esac
  2496. }
  2497. pkg_nofetch ()
  2498. {
  2499. default
  2500. }
  2501. pkg_postinst ()
  2502. {
  2503. if has_version sys-fs/devfsd || ! has_version virtual/udev; then
  2504. elog "This package has been designed with udev in mind. Other solutions, such as";
  2505. elog "devfs or a static /dev tree might work, but are generally discouraged and";
  2506. elog "not supported. If you decide to switch to udev, you might want to have a";
  2507. elog "look at 'The Gentoo udev Guide', which can be found at";
  2508. elog " http://www.gentoo.org/doc/en/udev-guide.xml";
  2509. elog "";
  2510. fi;
  2511. if [[ $previous_less_than_1_0 = 0 ]]; then
  2512. elog "Since you are upgrading from a pre-1.0 version, please make sure that you";
  2513. elog "rebuild your initrds. You can use the splash_geninitramfs script to do that.";
  2514. elog "";
  2515. fi;
  2516. if [[ $previous_less_than_1_5_3 = 0 ]] && ! use fbcondecor; then
  2517. elog "Starting with splashutils-1.5.3, support for the fbcondecor kernel patch";
  2518. elog "is optional and dependent on the the 'fbcondecor' USE flag. If you wish";
  2519. elog "to use fbcondecor, run:";
  2520. elog " echo \"media-gfx/splashutils fbcondecor\" >> /etc/portage/package.use";
  2521. elog "and re-emerge splashutils.";
  2522. fi;
  2523. if ! test -f /proc/cmdline || ! egrep -q '(console=tty1|CONSOLE=/dev/tty1)' /proc/cmdline; then
  2524. elog "It is required that you add 'console=tty1' to your kernel";
  2525. elog "command line parameters.";
  2526. elog "";
  2527. elog "After these modifications, the relevant part of the kernel command";
  2528. elog "line might look like:";
  2529. elog " splash=silent,fadein,theme:emergence console=tty1";
  2530. elog "";
  2531. fi;
  2532. if ! has_version 'media-gfx/splash-themes-livecd' && ! has_version 'media-gfx/splash-themes-gentoo'; then
  2533. elog "The sample Gentoo themes (emergence, gentoo) have been removed from the";
  2534. elog "core splashutils package. To get some themes you might want to emerge:";
  2535. elog " media-gfx/splash-themes-livecd";
  2536. elog " media-gfx/splash-themes-gentoo";
  2537. fi
  2538. }
  2539. pkg_preinst ()
  2540. {
  2541. has_version "<${CATEGORY}/${PN}-1.0";
  2542. previous_less_than_1_0=$?;
  2543. has_version "<${CATEGORY}/${PN}-1.5.3";
  2544. previous_less_than_1_5_3=$?
  2545. }
  2546. pkg_setup ()
  2547. {
  2548. if use hardened; then
  2549. ewarn "Due to problems with klibc, it is currently impossible to compile splashutils";
  2550. ewarn "with 'hardened' GCC flags. As a workaround, the package will be compiled with";
  2551. ewarn "-fno-stack-protector. Hardened GCC features will not be used while building";
  2552. ewarn "the splash kernel helper.";
  2553. fi
  2554. }
  2555. preserve_old_lib ()
  2556. {
  2557. _eutils_eprefix_init;
  2558. if [[ ${EBUILD_PHASE} != "preinst" ]]; then
  2559. eerror "preserve_old_lib() must be called from pkg_preinst() only";
  2560. die "Invalid preserve_old_lib() usage";
  2561. fi;
  2562. [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
  2563. has preserve-libs ${FEATURES} && return 0;
  2564. local lib dir;
  2565. for lib in "$@";
  2566. do
  2567. [[ -e ${EROOT}/${lib} ]] || continue;
  2568. dir=${lib%/*};
  2569. dodir ${dir} || die "dodir ${dir} failed";
  2570. cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp ${lib} failed";
  2571. touch "${ED}"/${lib};
  2572. done
  2573. }
  2574. preserve_old_lib_notify ()
  2575. {
  2576. if [[ ${EBUILD_PHASE} != "postinst" ]]; then
  2577. eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
  2578. die "Invalid preserve_old_lib_notify() usage";
  2579. fi;
  2580. has preserve-libs ${FEATURES} && return 0;
  2581. _eutils_eprefix_init;
  2582. local lib notice=0;
  2583. for lib in "$@";
  2584. do
  2585. [[ -e ${EROOT}/${lib} ]] || continue;
  2586. if [[ ${notice} -eq 0 ]]; then
  2587. notice=1;
  2588. ewarn "Old versions of installed libraries were detected on your system.";
  2589. ewarn "In order to avoid breaking packages that depend on these old libs,";
  2590. ewarn "the libraries are not being removed. You need to run revdep-rebuild";
  2591. ewarn "in order to remove these old dependencies. If you do not have this";
  2592. ewarn "helper program, simply emerge the 'gentoolkit' package.";
  2593. ewarn;
  2594. fi;
  2595. ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'";
  2596. done
  2597. }
  2598. prune_libtool_files ()
  2599. {
  2600. debug-print-function ${FUNCNAME} "$@";
  2601. local removing_all removing_modules opt;
  2602. _eutils_eprefix_init;
  2603. for opt in "$@";
  2604. do
  2605. case "${opt}" in
  2606. --all)
  2607. removing_all=1;
  2608. removing_modules=1
  2609. ;;
  2610. --modules)
  2611. removing_modules=1
  2612. ;;
  2613. *)
  2614. die "Invalid argument to ${FUNCNAME}(): ${opt}"
  2615. ;;
  2616. esac;
  2617. done;
  2618. local f;
  2619. local queue=();
  2620. while IFS= read -r -d '' f; do
  2621. local archivefile=${f/%.la/.a};
  2622. if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then
  2623. continue;
  2624. fi;
  2625. [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
  2626. local reason= pkgconfig_scanned=;
  2627. local snotlink=$(sed -n -e 's:^shouldnotlink=::p' "${f}");
  2628. if [[ ${snotlink} == yes ]]; then
  2629. if [[ -f ${archivefile} ]]; then
  2630. einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
  2631. queue+=("${archivefile}");
  2632. fi;
  2633. if [[ -n ${removing_modules} ]]; then
  2634. reason='module';
  2635. fi;
  2636. else
  2637. if [[ -n ${removing_all} ]]; then
  2638. reason='requested';
  2639. else
  2640. if [[ ! -f ${archivefile} ]]; then
  2641. reason='no static archive';
  2642. else
  2643. if [[ ! -n $(sed -nre "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" "${f}") ]]; then
  2644. reason='no libs & flags';
  2645. else
  2646. if [[ ! -n ${pkgconfig_scanned} ]]; then
  2647. local pc_libs=();
  2648. if [[ ! -n ${removing_all} ]]; then
  2649. local pc;
  2650. local tf=${T}/prune-lt-files.pc;
  2651. local pkgconf=$(tc-getPKG_CONFIG);
  2652. while IFS= read -r -d '' pc; do
  2653. local arg libs;
  2654. if ${pkgconf} --exists "${pc}" &> /dev/null; then
  2655. sed -e '/^Requires:/d' "${pc}" > "${tf}";
  2656. libs=$(${pkgconf} --libs "${tf}");
  2657. else
  2658. libs=$(sed -ne 's/^Libs://p' "${pc}");
  2659. fi;
  2660. for arg in ${libs};
  2661. do
  2662. if [[ ${arg} == -l* ]]; then
  2663. if [[ ${arg} == '*$*' ]]; then
  2664. eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
  2665. eqawarn "(arg: ${arg})";
  2666. eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
  2667. fi;
  2668. pc_libs+=(lib${arg#-l}.la);
  2669. fi;
  2670. done;
  2671. done < <(find "${D}" -type f -name '*.pc' -print0);
  2672. rm -f "${tf}";
  2673. fi;
  2674. pkgconfig_scanned=1;
  2675. fi;
  2676. has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
  2677. fi;
  2678. fi;
  2679. fi;
  2680. fi;
  2681. if [[ -n ${reason} ]]; then
  2682. einfo "Removing unnecessary ${f#${D%/}} (${reason})";
  2683. queue+=("${f}");
  2684. fi;
  2685. done < <(find "${ED}" -xtype f -name '*.la' -print0);
  2686. if [[ -n ${queue[@]} ]]; then
  2687. rm -f "${queue[@]}";
  2688. fi
  2689. }
  2690. src_compile ()
  2691. {
  2692. emake CC="${CC}" STRIP="true";
  2693. cd "${SG}";
  2694. emake LIB=$(get_libdir)
  2695. }
  2696. src_configure ()
  2697. {
  2698. tc-export CC;
  2699. cd "${SM}";
  2700. emake CC="${CC}" LIB=$(get_libdir) STRIP=true;
  2701. cd "${S}";
  2702. econf $(use_with png) $(use_with mng) $(use_with gpm) $(use_with truetype ttf) $(use_with truetype ttf-kernel) $(use_enable fbcondecor) --docdir=/usr/share/doc/${PF} --with-freetype2-src=${FT2SRC} --with-jpeg-src=${JPEGSRC} --with-lpng-src=${LPNGSRC} --with-zlib-src=${ZLIBSRC} --with-essential-libdir=/$(get_libdir)
  2703. }
  2704. src_install ()
  2705. {
  2706. local LIB=$(get_libdir);
  2707. cd "${SM}";
  2708. emake DESTDIR="${D}" LIB=${LIB} install;
  2709. cd "${S}";
  2710. emake DESTDIR="${D}" STRIP="true" install;
  2711. mv "${D}"/usr/${LIB}/libfbsplash.so* "${D}"/${LIB}/;
  2712. gen_usr_ldscript libfbsplash.so;
  2713. echo 'CONFIG_PROTECT_MASK="/etc/splash"' > 99splash;
  2714. doenvd 99splash;
  2715. if use fbcondecor; then
  2716. newinitd "${SG}"/init-fbcondecor fbcondecor;
  2717. newconfd "${SG}"/fbcondecor.conf fbcondecor;
  2718. fi;
  2719. newconfd "${SG}"/splash.conf splash;
  2720. insinto /usr/share/${PN};
  2721. doins "${SG}"/initrd.splash;
  2722. insinto /etc/splash;
  2723. doins "${SM}"/fbtruetype/luxisri.ttf;
  2724. cd "${SG}";
  2725. make DESTDIR="${D}" LIB=${LIB} install;
  2726. sed -i -e "s#/lib/splash#/${LIB}/splash#" "${D}"/sbin/splash-functions.sh;
  2727. keepdir /${LIB}/splash/{tmp,cache,bin,sys};
  2728. dosym /${LIB}/splash/bin/fbres /sbin/fbres
  2729. }
  2730. src_prepare ()
  2731. {
  2732. mv "${WORKDIR}"/{libpng-${V_PNG},jpeg-${V_JPEG},zlib-${V_ZLIB},freetype-${V_FT}} "${S}/libs";
  2733. rm "${S}/libs/zlib-${V_ZLIB}/Makefile";
  2734. cd "${SG}";
  2735. epatch "${FILESDIR}/splashutils-1.5.4.4-gentoo-typo-fix.patch";
  2736. epatch "${FILESDIR}/splashutils-1.5.4.4-r5_sys_queueh.patch";
  2737. if use truetype; then
  2738. cd "${SM}";
  2739. epatch "${FILESDIR}/splashutils-1.5.4.4-freetype-bz2.patch";
  2740. fi;
  2741. if has_version ">=media-libs/freetype-2.5.1"; then
  2742. cd "${SM}";
  2743. epatch "${FILESDIR}/splashutils-1.5.4.4-freetype251.patch";
  2744. cd "${S}";
  2745. epatch "${FILESDIR}/splashutils-1.5.4.4-freetype251-splashutils.patch";
  2746. fi;
  2747. cd "${S}";
  2748. ln -sf "${S}/src" "${WORKDIR}/core";
  2749. epatch "${FILESDIR}/${P}-bzip2.patch";
  2750. epatch "${FILESDIR}/${P}-multi-keyboard.patch";
  2751. epatch "${FILESDIR}/libmng2-lcms2.patch";
  2752. if ! tc-is-cross-compiler && has_version "sys-devel/gcc:$(gcc-version)[vanilla]"; then
  2753. ewarn "Your GCC was built with the 'vanilla' flag set. If you can't compile";
  2754. ewarn "splashutils, you're on your own, as this configuration is not supported.";
  2755. else
  2756. sed -e 's@K_CFLAGS =@K_CFLAGS = -fno-stack-protector@' -i "${S}/Makefile.in";
  2757. fi;
  2758. if ! use truetype; then
  2759. sed -i -e 's/fbtruetype kbd/kbd/' "${SM}/Makefile";
  2760. fi;
  2761. if has_version ">=dev-libs/klibc-1.5.20"; then
  2762. echo > "libs/klibc_compat.h";
  2763. fi;
  2764. rm -f m4/*;
  2765. eautoreconf
  2766. }
  2767. src_test ()
  2768. {
  2769. default
  2770. }
  2771. src_unpack ()
  2772. {
  2773. default
  2774. }
  2775. strip-linguas ()
  2776. {
  2777. local ls newls nols;
  2778. if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
  2779. local op=$1;
  2780. shift;
  2781. ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
  2782. shift;
  2783. local d f;
  2784. for d in "$@";
  2785. do
  2786. if [[ ${op} == "-u" ]]; then
  2787. newls=${ls};
  2788. else
  2789. newls="";
  2790. fi;
  2791. for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
  2792. do
  2793. if [[ ${op} == "-i" ]]; then
  2794. has ${f} ${ls} && newls="${newls} ${f}";
  2795. else
  2796. has ${f} ${ls} || newls="${newls} ${f}";
  2797. fi;
  2798. done;
  2799. ls=${newls};
  2800. done;
  2801. else
  2802. ls="$@";
  2803. fi;
  2804. nols="";
  2805. newls="";
  2806. for f in ${LINGUAS};
  2807. do
  2808. if has ${f} ${ls}; then
  2809. newls="${newls} ${f}";
  2810. else
  2811. nols="${nols} ${f}";
  2812. fi;
  2813. done;
  2814. [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
  2815. export LINGUAS=${newls:1}
  2816. }
  2817. tc-arch ()
  2818. {
  2819. tc-ninja_magic_to_arch portage "$@"
  2820. }
  2821. tc-arch-kernel ()
  2822. {
  2823. tc-ninja_magic_to_arch kern "$@"
  2824. }
  2825. tc-endian ()
  2826. {
  2827. local host=$1;
  2828. [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  2829. host=${host%%-*};
  2830. case ${host} in
  2831. aarch64*be)
  2832. echo big
  2833. ;;
  2834. aarch64)
  2835. echo little
  2836. ;;
  2837. alpha*)
  2838. echo big
  2839. ;;
  2840. arm*b*)
  2841. echo big
  2842. ;;
  2843. arm*)
  2844. echo little
  2845. ;;
  2846. cris*)
  2847. echo little
  2848. ;;
  2849. hppa*)
  2850. echo big
  2851. ;;
  2852. i?86*)
  2853. echo little
  2854. ;;
  2855. ia64*)
  2856. echo little
  2857. ;;
  2858. m68*)
  2859. echo big
  2860. ;;
  2861. mips*l*)
  2862. echo little
  2863. ;;
  2864. mips*)
  2865. echo big
  2866. ;;
  2867. powerpc*le)
  2868. echo little
  2869. ;;
  2870. powerpc*)
  2871. echo big
  2872. ;;
  2873. s390*)
  2874. echo big
  2875. ;;
  2876. sh*b*)
  2877. echo big
  2878. ;;
  2879. sh*)
  2880. echo little
  2881. ;;
  2882. sparc*)
  2883. echo big
  2884. ;;
  2885. x86_64*)
  2886. echo little
  2887. ;;
  2888. *)
  2889. echo wtf
  2890. ;;
  2891. esac
  2892. }
  2893. tc-env_build ()
  2894. {
  2895. tc-export_build_env;
  2896. 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) "$@"
  2897. }
  2898. tc-export ()
  2899. {
  2900. local var;
  2901. for var in "$@";
  2902. do
  2903. [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
  2904. eval tc-get${var} > /dev/null;
  2905. done
  2906. }
  2907. tc-export_build_env ()
  2908. {
  2909. tc-export "$@";
  2910. : ${BUILD_CFLAGS:=-O1 -pipe};
  2911. : ${BUILD_CXXFLAGS:=-O1 -pipe};
  2912. : ${BUILD_CPPFLAGS:= };
  2913. : ${BUILD_LDFLAGS:= };
  2914. export BUILD_{C,CXX,CPP,LD}FLAGS;
  2915. local v;
  2916. for v in BUILD_{C,CXX,CPP,LD}FLAGS;
  2917. do
  2918. export ${v#BUILD_}_FOR_BUILD="${!v}";
  2919. done
  2920. }
  2921. tc-getAR ()
  2922. {
  2923. tc-getPROG AR ar "$@"
  2924. }
  2925. tc-getAS ()
  2926. {
  2927. tc-getPROG AS as "$@"
  2928. }
  2929. tc-getBUILD_AR ()
  2930. {
  2931. tc-getBUILD_PROG AR ar "$@"
  2932. }
  2933. tc-getBUILD_AS ()
  2934. {
  2935. tc-getBUILD_PROG AS as "$@"
  2936. }
  2937. tc-getBUILD_CC ()
  2938. {
  2939. tc-getBUILD_PROG CC gcc "$@"
  2940. }
  2941. tc-getBUILD_CPP ()
  2942. {
  2943. tc-getBUILD_PROG CPP cpp "$@"
  2944. }
  2945. tc-getBUILD_CXX ()
  2946. {
  2947. tc-getBUILD_PROG CXX g++ "$@"
  2948. }
  2949. tc-getBUILD_LD ()
  2950. {
  2951. tc-getBUILD_PROG LD ld "$@"
  2952. }
  2953. tc-getBUILD_NM ()
  2954. {
  2955. tc-getBUILD_PROG NM nm "$@"
  2956. }
  2957. tc-getBUILD_OBJCOPY ()
  2958. {
  2959. tc-getBUILD_PROG OBJCOPY objcopy "$@"
  2960. }
  2961. tc-getBUILD_PKG_CONFIG ()
  2962. {
  2963. tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
  2964. }
  2965. tc-getBUILD_PROG ()
  2966. {
  2967. _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
  2968. }
  2969. tc-getBUILD_RANLIB ()
  2970. {
  2971. tc-getBUILD_PROG RANLIB ranlib "$@"
  2972. }
  2973. tc-getBUILD_STRIP ()
  2974. {
  2975. tc-getBUILD_PROG STRIP strip "$@"
  2976. }
  2977. tc-getCC ()
  2978. {
  2979. tc-getPROG CC gcc "$@"
  2980. }
  2981. tc-getCPP ()
  2982. {
  2983. tc-getPROG CPP cpp "$@"
  2984. }
  2985. tc-getCXX ()
  2986. {
  2987. tc-getPROG CXX g++ "$@"
  2988. }
  2989. tc-getDLLWRAP ()
  2990. {
  2991. tc-getPROG DLLWRAP dllwrap "$@"
  2992. }
  2993. tc-getF77 ()
  2994. {
  2995. tc-getPROG F77 gfortran "$@"
  2996. }
  2997. tc-getFC ()
  2998. {
  2999. tc-getPROG FC gfortran "$@"
  3000. }
  3001. tc-getGCJ ()
  3002. {
  3003. tc-getPROG GCJ gcj "$@"
  3004. }
  3005. tc-getGO ()
  3006. {
  3007. tc-getPROG GO gccgo "$@"
  3008. }
  3009. tc-getLD ()
  3010. {
  3011. tc-getPROG LD ld "$@"
  3012. }
  3013. tc-getNM ()
  3014. {
  3015. tc-getPROG NM nm "$@"
  3016. }
  3017. tc-getOBJCOPY ()
  3018. {
  3019. tc-getPROG OBJCOPY objcopy "$@"
  3020. }
  3021. tc-getOBJDUMP ()
  3022. {
  3023. tc-getPROG OBJDUMP objdump "$@"
  3024. }
  3025. tc-getPKG_CONFIG ()
  3026. {
  3027. tc-getPROG PKG_CONFIG pkg-config "$@"
  3028. }
  3029. tc-getPROG ()
  3030. {
  3031. _tc-getPROG CHOST "$@"
  3032. }
  3033. tc-getRANLIB ()
  3034. {
  3035. tc-getPROG RANLIB ranlib "$@"
  3036. }
  3037. tc-getRC ()
  3038. {
  3039. tc-getPROG RC windres "$@"
  3040. }
  3041. tc-getSTRIP ()
  3042. {
  3043. tc-getPROG STRIP strip "$@"
  3044. }
  3045. tc-has-openmp ()
  3046. {
  3047. local base="${T}/test-tc-openmp";
  3048. cat > "${base}.c" <<-EOF
  3049. #include <omp.h>
  3050. int main() {
  3051. int nthreads, tid, ret = 0;
  3052. #pragma omp parallel private(nthreads, tid)
  3053. {
  3054. tid = omp_get_thread_num();
  3055. nthreads = omp_get_num_threads(); ret += tid + nthreads;
  3056. }
  3057. return ret;
  3058. }
  3059. EOF
  3060. $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &> /dev/null;
  3061. local ret=$?;
  3062. rm -f "${base}"*;
  3063. return ${ret}
  3064. }
  3065. tc-has-tls ()
  3066. {
  3067. local base="${T}/test-tc-tls";
  3068. cat > "${base}.c" <<-EOF
  3069. int foo(int *i) {
  3070. static __thread int j = 0;
  3071. return *i ? j : *i;
  3072. }
  3073. EOF
  3074. local flags;
  3075. case $1 in
  3076. -s)
  3077. flags="-S"
  3078. ;;
  3079. -c)
  3080. flags="-c"
  3081. ;;
  3082. -l)
  3083. ;;
  3084. -*)
  3085. die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
  3086. ;;
  3087. esac;
  3088. : ${flags:=-fPIC -shared -Wl,-z,defs};
  3089. [[ $1 == -* ]] && shift;
  3090. $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &> /dev/null;
  3091. local ret=$?;
  3092. rm -f "${base}"*;
  3093. return ${ret}
  3094. }
  3095. tc-is-cross-compiler ()
  3096. {
  3097. [[ ${CBUILD:-${CHOST}} != ${CHOST} ]]
  3098. }
  3099. tc-is-softfloat ()
  3100. {
  3101. local CTARGET=${CTARGET:-${CHOST}};
  3102. case ${CTARGET} in
  3103. bfin* | h8300*)
  3104. echo "only"
  3105. ;;
  3106. *)
  3107. if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then
  3108. echo "yes";
  3109. else
  3110. if [[ ${CTARGET//_/-} == *-softfp-* ]]; then
  3111. echo "softfp";
  3112. else
  3113. echo "no";
  3114. fi;
  3115. fi
  3116. ;;
  3117. esac
  3118. }
  3119. tc-is-static-only ()
  3120. {
  3121. local host=${CTARGET:-${CHOST}};
  3122. [[ ${host} == *-mint* ]]
  3123. }
  3124. tc-ld-disable-gold ()
  3125. {
  3126. if ! tc-ld-is-gold "$@"; then
  3127. return;
  3128. fi;
  3129. ewarn "Forcing usage of the BFD linker instead of GOLD";
  3130. local ld=$(tc-getLD "$@");
  3131. local bfd_ld="${ld%% *}.bfd";
  3132. local path_ld=$(which "${bfd_ld}" 2>/dev/null);
  3133. [[ -e ${path_ld} ]] && export LD=${bfd_ld};
  3134. local major=$(gcc-major-version "$@");
  3135. local minor=$(gcc-minor-version "$@");
  3136. if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]]; then
  3137. if [[ -e ${path_ld} ]]; then
  3138. local d="${T}/bfd-linker";
  3139. mkdir -p "${d}";
  3140. ln -sf "${path_ld}" "${d}"/ld;
  3141. export LDFLAGS="${LDFLAGS} -B${d}";
  3142. else
  3143. die "unable to locate a BFD linker to bypass gold";
  3144. fi;
  3145. else
  3146. export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
  3147. fi
  3148. }
  3149. tc-ld-is-gold ()
  3150. {
  3151. local out;
  3152. out=$($(tc-getLD "$@") --version 2>&1);
  3153. if [[ ${out} == *"GNU gold"* ]]; then
  3154. return 0;
  3155. fi;
  3156. local base="${T}/test-tc-gold";
  3157. cat > "${base}.c" <<-EOF
  3158. int main() { return 0; }
  3159. EOF
  3160. out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1);
  3161. rm -f "${base}"*;
  3162. if [[ ${out} == *"GNU gold"* ]]; then
  3163. return 0;
  3164. fi;
  3165. return 1
  3166. }
  3167. tc-ninja_magic_to_arch ()
  3168. {
  3169. function ninj ()
  3170. {
  3171. [[ ${type} == "kern" ]] && echo $1 || echo $2
  3172. };
  3173. local type=$1;
  3174. local host=$2;
  3175. [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  3176. local KV=${KV:-${KV_FULL}};
  3177. [[ ${type} == "kern" ]] && [[ -z ${KV} ]] && ewarn "QA: Kernel version could not be determined, please inherit kernel-2 or linux-info";
  3178. case ${host} in
  3179. aarch64*)
  3180. echo arm64
  3181. ;;
  3182. alpha*)
  3183. echo alpha
  3184. ;;
  3185. arm*)
  3186. echo arm
  3187. ;;
  3188. avr*)
  3189. ninj avr32 avr
  3190. ;;
  3191. bfin*)
  3192. ninj blackfin bfin
  3193. ;;
  3194. c6x*)
  3195. echo c6x
  3196. ;;
  3197. cris*)
  3198. echo cris
  3199. ;;
  3200. frv*)
  3201. echo frv
  3202. ;;
  3203. hexagon*)
  3204. echo hexagon
  3205. ;;
  3206. hppa*)
  3207. ninj parisc hppa
  3208. ;;
  3209. i?86*)
  3210. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
  3211. echo i386;
  3212. else
  3213. echo x86;
  3214. fi
  3215. ;;
  3216. ia64*)
  3217. echo ia64
  3218. ;;
  3219. m68*)
  3220. echo m68k
  3221. ;;
  3222. metag*)
  3223. echo metag
  3224. ;;
  3225. microblaze*)
  3226. echo microblaze
  3227. ;;
  3228. mips*)
  3229. echo mips
  3230. ;;
  3231. nios2*)
  3232. echo nios2
  3233. ;;
  3234. nios*)
  3235. echo nios
  3236. ;;
  3237. or32*)
  3238. echo openrisc
  3239. ;;
  3240. powerpc*)
  3241. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
  3242. echo powerpc;
  3243. else
  3244. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]]; then
  3245. if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
  3246. echo powerpc;
  3247. else
  3248. echo ppc;
  3249. fi;
  3250. else
  3251. if [[ ${host} == powerpc64* ]]; then
  3252. echo ppc64;
  3253. else
  3254. if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
  3255. ninj ppc64 ppc;
  3256. else
  3257. echo ppc;
  3258. fi;
  3259. fi;
  3260. fi;
  3261. fi
  3262. ;;
  3263. riscv*)
  3264. echo riscv
  3265. ;;
  3266. s390*)
  3267. echo s390
  3268. ;;
  3269. score*)
  3270. echo score
  3271. ;;
  3272. sh64*)
  3273. ninj sh64 sh
  3274. ;;
  3275. sh*)
  3276. echo sh
  3277. ;;
  3278. sparc64*)
  3279. ninj sparc64 sparc
  3280. ;;
  3281. sparc*)
  3282. [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
  3283. ;;
  3284. tile*)
  3285. echo tile
  3286. ;;
  3287. vax*)
  3288. echo vax
  3289. ;;
  3290. x86_64*freebsd*)
  3291. echo amd64
  3292. ;;
  3293. x86_64*)
  3294. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
  3295. echo x86;
  3296. else
  3297. ninj x86_64 amd64;
  3298. fi
  3299. ;;
  3300. xtensa*)
  3301. echo xtensa
  3302. ;;
  3303. *)
  3304. echo unknown
  3305. ;;
  3306. esac
  3307. }
  3308. uclibctoolize ()
  3309. {
  3310. die "Use elibtoolize"
  3311. }
  3312. use_if_iuse ()
  3313. {
  3314. in_iuse $1 || return 1;
  3315. use $1
  3316. }
  3317. validate_desktop_entries ()
  3318. {
  3319. _eutils_eprefix_init;
  3320. if [[ -x "${EPREFIX}"/usr/bin/desktop-file-validate ]]; then
  3321. einfo "Checking desktop entry validity";
  3322. local directories="";
  3323. for d in /usr/share/applications $@;
  3324. do
  3325. [[ -d ${ED}${d} ]] && directories="${directories} ${ED}${d}";
  3326. done;
  3327. if [[ -n ${directories} ]]; then
  3328. for FILE in $(find ${directories} -name "*\.desktop" -not -path '*.hidden*' | sort -u 2>/dev/null);
  3329. do
  3330. local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
  3331. [[ -n $temp ]] && elog ${temp/--/${FILE/${ED}/}:};
  3332. done;
  3333. fi;
  3334. echo "";
  3335. else
  3336. einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
  3337. fi
  3338. }