spacepaste

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