Guest User

Untitled

a guest
Oct 15th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.42 KB | None | 0 0
  1. {
  2. if [[ ${EBUILD_PHASE} != "postinst" ]]; then
  3. eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
  4. die "Invalid preserve_old_lib_notify() usage";
  5. fi;
  6. has preserve-libs ${FEATURES} && return 0;
  7. local lib notice=0;
  8. for lib in "$@";
  9. do
  10. [[ -e ${ROOT}/${lib} ]] || continue;
  11. if [[ ${notice} -eq 0 ]]; then
  12. notice=1;
  13. ewarn "Old versions of installed libraries were detected on your system.";
  14. ewarn "In order to avoid breaking packages that depend on these old libs,";
  15. ewarn "the libraries are not being removed. You need to run revdep-rebuild";
  16. ewarn "in order to remove these old dependencies. If you do not have this";
  17. ewarn "helper program, simply emerge the 'gentoolkit' package.";
  18. ewarn;
  19. fi;
  20. [[ ${PN} == "mpfr" ]] && lib=${lib##*/};
  21. ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'";
  22. done
  23. }
  24. raw-ldflags ()
  25. {
  26. local x input="$@";
  27. [[ -z ${input} ]] && input=${LDFLAGS};
  28. set --;
  29. for x in ${input};
  30. do
  31. x=${x#-Wl,};
  32. set -- "$@" ${x//,/ };
  33. done;
  34. echo "$@"
  35. }
  36. replace-cpu-flags ()
  37. {
  38. local newcpu="$#";
  39. newcpu="${!newcpu}";
  40. while [ $# -gt 1 ]; do
  41. replace-flags "-march=${1}" "-march=${newcpu}";
  42. replace-flags "-mcpu=${1}" "-mcpu=${newcpu}";
  43. replace-flags "-mtune=${1}" "-mtune=${newcpu}";
  44. shift;
  45. done;
  46. return 0
  47. }
  48. replace-flags ()
  49. {
  50. [[ $# != 2 ]] && die "Usage: replace-flags <old flag> <new flag>";
  51. local f var new;
  52. for var in $(all-flag-vars);
  53. do
  54. new=();
  55. for f in ${!var};
  56. do
  57. [[ ${f} == ${1} ]] && f=${2};
  58. new+=("${f}");
  59. done;
  60. eval export ${var}=\""${new[*]}"\";
  61. done;
  62. return 0
  63. }
  64. replace-sparc64-flags ()
  65. {
  66. local SPARC64_CPUS="ultrasparc3 ultrasparc v9";
  67. if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then
  68. for x in ${SPARC64_CPUS};
  69. do
  70. CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}";
  71. done;
  72. else
  73. for x in ${SPARC64_CPUS};
  74. do
  75. CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
  76. done;
  77. fi;
  78. if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then
  79. for x in ${SPARC64_CPUS};
  80. do
  81. CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}";
  82. done;
  83. else
  84. for x in ${SPARC64_CPUS};
  85. do
  86. CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
  87. done;
  88. fi;
  89. export CFLAGS CXXFLAGS
  90. }
  91. replace_all_version_separators ()
  92. {
  93. local c=($(get_all_version_components "${2:-${PV}}"));
  94. c=${c[@]//[-._]/$1};
  95. echo ${c// }
  96. }
  97. replace_version_separator ()
  98. {
  99. eshopts_push -s extglob;
  100. local w c v="${3:-${PV}}";
  101. declare -i i found=0;
  102. w=${1:-1};
  103. c=($(get_all_version_components ${v}));
  104. if [[ ${w} != *[[:digit:]]* ]]; then
  105. for ((i = 0; i < ${#c[@]}; i++))
  106. do
  107. if [[ ${c[i]} == ${w} ]]; then
  108. c[i]=${2};
  109. break;
  110. fi;
  111. done;
  112. else
  113. for ((i = 0; i < ${#c[@]}; i++))
  114. do
  115. if [[ -n "${c[i]//[^-._]}" ]]; then
  116. found+=1;
  117. if ((found == w)); then
  118. c[i]=${2};
  119. break;
  120. fi;
  121. fi;
  122. done;
  123. fi;
  124. c=${c[*]};
  125. echo ${c// };
  126. eshopts_pop
  127. }
  128. save_library_dependencies ()
  129. {
  130. local depsfile="${T}/${PN}";
  131. ebegin "Saving library dependencies in ${depsfile##*/}";
  132. echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || die "Failed to save the library dependencies.";
  133. eend $?
  134. }
  135. setup-allowed-flags ()
  136. {
  137. ALLOWED_FLAGS="-pipe";
  138. ALLOWED_FLAGS+=" -O -O1 -O2 -Os -mcpu -march -mtune";
  139. ALLOWED_FLAGS+=" -fstack-protector -fstack-protector-all";
  140. ALLOWED_FLAGS+=" -fbounds-checking -fno-strict-overflow";
  141. ALLOWED_FLAGS+=" -fno-PIE -fno-pie -fno-unit-at-a-time";
  142. ALLOWED_FLAGS+=" -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+";
  143. ALLOWED_FLAGS+=" -fno-ident -fpermissive";
  144. ALLOWED_FLAGS+=" -W* -w";
  145. ALLOWED_FLAGS+=" -fno-stack-protector -fno-stack-protector-all -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer";
  146. 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 -D* -U*";
  147. ALLOWED_FLAGS+=" -mno-fma4 -mno-movbe -mno-xop -mno-lwp";
  148. ALLOWED_FLAGS+=" -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm";
  149. export ALLOWED_FLAGS;
  150. return 0
  151. }
  152. src_compile ()
  153. {
  154. kde4-base_src_compile;
  155. if use doc; then
  156. einfo "Building API documentation";
  157. cd "${S}"/doc/api/;
  158. ./doxygen.sh "${S}" || die "APIDOX generation failed";
  159. fi
  160. }
  161. src_configure ()
  162. {
  163. if use zeroconf; then
  164. if has_version net-dns/avahi; then
  165. mycmakeargs=(-DWITH_Avahi=ON -DWITH_DNSSD=OFF);
  166. else
  167. die "USE=\"zeroconf\" enabled but net-dns/avahi wasn't found.";
  168. fi;
  169. else
  170. mycmakeargs=(-DWITH_Avahi=OFF -DWITH_DNSSD=OFF);
  171. fi;
  172. mycmakeargs+=(-DWITH_HSPELL=OFF -DWITH_ASPELL=OFF -DKDE_DEFAULT_HOME=.kde4 -DKAUTH_BACKEND=POLKITQT-1 -DBUILD_libkactivities=OFF $(cmake-utils_use_build handbook doc) $(cmake-utils_use_has 3dnow X86_3DNOW) $(cmake-utils_use_has altivec PPC_ALTIVEC) $(cmake-utils_use_has mmx X86_MMX) $(cmake-utils_use_has sse X86_SSE) $(cmake-utils_use_has sse2 X86_SSE2) $(cmake-utils_use_with acl) $(cmake-utils_use_with alsa) $(cmake-utils_use_with bzip2 BZip2) $(cmake-utils_use_with fam) $(cmake-utils_use_with jpeg2k Jasper) $(cmake-utils_use_with kerberos GSSAPI) $(cmake-utils_use_with lzma LibLZMA) $(cmake-utils_use_with nls Libintl) $(cmake-utils_use_with openexr OpenEXR) $(cmake-utils_use_with opengl OpenGL) $(cmake-utils_use_with policykit PolkitQt-1) $(cmake-utils_use_with semantic-desktop Soprano) $(cmake-utils_use_with semantic-desktop SharedDesktopOntologies) $(cmake-utils_use_with spell ENCHANT) $(cmake-utils_use_with ssl OpenSSL) $(cmake-utils_use_with udev UDev) $(cmake-utils_use_with upnp HUpnp));
  173. kde4-base_src_configure
  174. }
  175. src_install ()
  176. {
  177. kde4-base_src_install;
  178. rm -f "${ED}"/usr/share/apps/kssl/ca-bundle.crt || die;
  179. dosym /etc/ssl/certs/ca-certificates.crt /usr/share/apps/kssl/ca-bundle.crt;
  180. if use doc; then
  181. einfo "Installing API documentation. This could take a bit of time.";
  182. cd "${S}"/doc/api/;
  183. docinto /HTML/en/kdelibs-apidox;
  184. dohtml -r ${P}-apidocs/*;
  185. fi;
  186. if use aqua; then
  187. einfo "fixing ${PN} plugins";
  188. local _PV=${PV:0:3}.0;
  189. local _dir=${EPREFIX}/usr/$(get_libdir)/kde4/plugins/script;
  190. install_name_tool -id "${_dir}/libkrossqtsplugin.${_PV}.dylib" "${D}/${_dir}/libkrossqtsplugin.${_PV}.dylib" || die "failed fixing libkrossqtsplugin.${_PV}.dylib";
  191. einfo "fixing ${PN} cmake detection files";
  192. echo -e "set(XKB_FOUND FALSE)\nset(HAVE_XKB FALSE)" > "${ED}"/usr/share/apps/cmake/modules/FindXKB.cmake || die "failed fixing FindXKB.cmake";
  193. fi;
  194. einfo Installing environment file.;
  195. echo "COLON_SEPARATED=QT_PLUGIN_PATH" > "${T}/77kde";
  196. echo "QT_PLUGIN_PATH=${EPREFIX}/usr/$(get_libdir)/kde4/plugins" >> "${T}/77kde";
  197. doenvd "${T}/77kde"
  198. }
  199. src_prepare ()
  200. {
  201. kde4-base_src_prepare;
  202. use arm && epatch "${FILESDIR}/${PN}-4.6.2-armlinking.patch";
  203. sed -e 's|FILES[[:space:]]applications.menu|FILES applications.menu RENAME kde-4-applications.menu|g' -i kded/CMakeLists.txt || die "Sed on CMakeLists.txt for applications.menu failed.";
  204. if use aqua; then
  205. sed -i -e "s:BUNDLE_INSTALL_DIR \"/Applications:BUNDLE_INSTALL_DIR \"${EPREFIX}/${APP_BUNDLE_DIR}:g" cmake/modules/FindKDE4Internal.cmake || die "failed to sed FindKDE4Internal.cmake";
  206. sed -i -e "s:set(_add_executable_param MACOSX_BUNDLE):remove(_add_executable_param MACOSX_BUNDLE):g" cmake/modules/KDE4Macros.cmake || die "failed to sed KDE4Macros.cmake";
  207. sed -e "s|\(APPLE\)|(FALSE)|g" -i solid/solid/CMakeLists.txt || die "disabling solid/solid/backends/iokit failed";
  208. sed -e "s|m_backend = .*Backends::IOKit.*;|m_backend = 0;|g" -i solid/solid/managerbase.cpp || die "disabling solid/solid/backends/iokit failed";
  209. sed -e "/HAVE_FDATASYNC/ d" -i config.h.cmake || die "disabling fdatasync failed";
  210. sed -e "s|nameser8_compat.h|nameser_compat.h|g" -i kio/misc/kpac/discovery.cpp || die "fixing nameser include failed";
  211. append-flags -DHAVE_ARPA_NAMESER8_COMPAT_H=1;
  212. epatch "${FILESDIR}"/${PN}-4.3.80-kdeui_util_kkeyserver_mac.patch;
  213. fi;
  214. if [[ ${CHOST} == *-solaris* ]]; then
  215. epatch "${FILESDIR}/kdelibs-4.3.2-solaris-ksyscoca.patch";
  216. epatch "${FILESDIR}/kdelibs-4.3.2-solaris-getgrouplist.patch";
  217. epatch "${FILESDIR}/kdelibs-4.3.2-solaris-fileunix.patch";
  218. fi
  219. }
  220. src_test ()
  221. {
  222. kde4-base_src_test "$@"
  223. }
  224. src_unpack ()
  225. {
  226. kde4-base_src_unpack "$@"
  227. }
  228. strip-flags ()
  229. {
  230. local x y var;
  231. setup-allowed-flags;
  232. set -f;
  233. for var in $(all-flag-vars);
  234. do
  235. local new=();
  236. for x in ${!var};
  237. do
  238. local flag=${x%%=*};
  239. for y in ${ALLOWED_FLAGS};
  240. do
  241. if [[ -z ${flag%%${y}} ]]; then
  242. new+=("${x}");
  243. break;
  244. fi;
  245. done;
  246. done;
  247. if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then
  248. new+=(-O2);
  249. fi;
  250. eval export ${var}=\""${new[*]}"\";
  251. done;
  252. set +f;
  253. return 0
  254. }
  255. strip-linguas ()
  256. {
  257. local ls newls nols;
  258. if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
  259. local op=$1;
  260. shift;
  261. ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
  262. shift;
  263. local d f;
  264. for d in "$@";
  265. do
  266. if [[ ${op} == "-u" ]]; then
  267. newls=${ls};
  268. else
  269. newls="";
  270. fi;
  271. for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
  272. do
  273. if [[ ${op} == "-i" ]]; then
  274. has ${f} ${ls} && newls="${newls} ${f}";
  275. else
  276. has ${f} ${ls} || newls="${newls} ${f}";
  277. fi;
  278. done;
  279. ls=${newls};
  280. done;
  281. else
  282. ls="$@";
  283. fi;
  284. nols="";
  285. newls="";
  286. for f in ${LINGUAS};
  287. do
  288. if has ${f} ${ls}; then
  289. newls="${newls} ${f}";
  290. else
  291. nols="${nols} ${f}";
  292. fi;
  293. done;
  294. [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
  295. export LINGUAS=${newls:1}
  296. }
  297. strip-unsupported-flags ()
  298. {
  299. export CFLAGS=$(test-flags-CC ${CFLAGS});
  300. export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS});
  301. export FFLAGS=$(test-flags-F77 ${FFLAGS});
  302. export FCFLAGS=$(test-flags-FC ${FCFLAGS})
  303. }
  304. tc-arch ()
  305. {
  306. tc-ninja_magic_to_arch portage "$@"
  307. }
  308. tc-arch-kernel ()
  309. {
  310. tc-ninja_magic_to_arch kern "$@"
  311. }
  312. tc-endian ()
  313. {
  314. local host=$1;
  315. [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  316. host=${host%%-*};
  317. case ${host} in
  318. alpha*)
  319. echo big
  320. ;;
  321. arm*b*)
  322. echo big
  323. ;;
  324. arm*)
  325. echo little
  326. ;;
  327. cris*)
  328. echo little
  329. ;;
  330. hppa*)
  331. echo big
  332. ;;
  333. i?86*)
  334. echo little
  335. ;;
  336. ia64*)
  337. echo little
  338. ;;
  339. m68*)
  340. echo big
  341. ;;
  342. mips*l*)
  343. echo little
  344. ;;
  345. mips*)
  346. echo big
  347. ;;
  348. powerpc*)
  349. echo big
  350. ;;
  351. s390*)
  352. echo big
  353. ;;
  354. sh*b*)
  355. echo big
  356. ;;
  357. sh*)
  358. echo little
  359. ;;
  360. sparc*)
  361. echo big
  362. ;;
  363. x86_64*)
  364. echo little
  365. ;;
  366. *)
  367. echo wtf
  368. ;;
  369. esac
  370. }
  371. tc-env_build ()
  372. {
  373. CFLAGS=${BUILD_CFLAGS:--O1 -pipe} CXXFLAGS=${BUILD_CXXFLAGS:--O1 -pipe} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
  374. }
  375. tc-export ()
  376. {
  377. local var;
  378. for var in "$@";
  379. do
  380. [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
  381. eval tc-get${var} > /dev/null;
  382. done
  383. }
  384. tc-getAR ()
  385. {
  386. tc-getPROG AR ar "$@"
  387. }
  388. tc-getAS ()
  389. {
  390. tc-getPROG AS as "$@"
  391. }
  392. tc-getBUILD_AR ()
  393. {
  394. tc-getBUILD_PROG AR ar "$@"
  395. }
  396. tc-getBUILD_AS ()
  397. {
  398. tc-getBUILD_PROG AS as "$@"
  399. }
  400. tc-getBUILD_CC ()
  401. {
  402. tc-getBUILD_PROG CC gcc "$@"
  403. }
  404. tc-getBUILD_CPP ()
  405. {
  406. tc-getBUILD_PROG CPP cpp "$@"
  407. }
  408. tc-getBUILD_CXX ()
  409. {
  410. tc-getBUILD_PROG CXX g++ "$@"
  411. }
  412. tc-getBUILD_LD ()
  413. {
  414. tc-getBUILD_PROG LD ld "$@"
  415. }
  416. tc-getBUILD_NM ()
  417. {
  418. tc-getBUILD_PROG NM nm "$@"
  419. }
  420. tc-getBUILD_OBJCOPY ()
  421. {
  422. tc-getBUILD_PROG OBJCOPY objcopy "$@"
  423. }
  424. tc-getBUILD_PKG_CONFIG ()
  425. {
  426. tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
  427. }
  428. tc-getBUILD_PROG ()
  429. {
  430. _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
  431. }
  432. tc-getBUILD_RANLIB ()
  433. {
  434. tc-getBUILD_PROG RANLIB ranlib "$@"
  435. }
  436. tc-getBUILD_STRIP ()
  437. {
  438. tc-getBUILD_PROG STRIP strip "$@"
  439. }
  440. tc-getCC ()
  441. {
  442. tc-getPROG CC gcc "$@"
  443. }
  444. tc-getCPP ()
  445. {
  446. tc-getPROG CPP cpp "$@"
  447. }
  448. tc-getCXX ()
  449. {
  450. tc-getPROG CXX g++ "$@"
  451. }
  452. tc-getDLLWRAP ()
  453. {
  454. tc-getPROG DLLWRAP dllwrap "$@"
  455. }
  456. tc-getF77 ()
  457. {
  458. tc-getPROG F77 gfortran "$@"
  459. }
  460. tc-getFC ()
  461. {
  462. tc-getPROG FC gfortran "$@"
  463. }
  464. tc-getGCJ ()
  465. {
  466. tc-getPROG GCJ gcj "$@"
  467. }
  468. tc-getLD ()
  469. {
  470. tc-getPROG LD ld "$@"
  471. }
  472. tc-getNM ()
  473. {
  474. tc-getPROG NM nm "$@"
  475. }
  476. tc-getOBJCOPY ()
  477. {
  478. tc-getPROG OBJCOPY objcopy "$@"
  479. }
  480. tc-getPKG_CONFIG ()
  481. {
  482. tc-getPROG PKG_CONFIG pkg-config "$@"
  483. }
  484. tc-getPROG ()
  485. {
  486. _tc-getPROG CHOST "$@"
  487. }
  488. tc-getRANLIB ()
  489. {
  490. tc-getPROG RANLIB ranlib "$@"
  491. }
  492. tc-getRC ()
  493. {
  494. tc-getPROG RC windres "$@"
  495. }
  496. tc-getSTRIP ()
  497. {
  498. tc-getPROG STRIP strip "$@"
  499. }
  500. tc-has-openmp ()
  501. {
  502. local base="${T}/test-tc-openmp";
  503. cat > "${base}.c" <<-EOF
  504. #include <omp.h>
  505. int main() {
  506. int nthreads, tid, ret = 0;
  507. #pragma omp parallel private(nthreads, tid)
  508. {
  509. tid = omp_get_thread_num();
  510. nthreads = omp_get_num_threads(); ret += tid + nthreads;
  511. }
  512. return ret;
  513. }
  514. EOF
  515.  
  516. $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &>/dev/null;
  517. local ret=$?;
  518. rm -f "${base}"*;
  519. return ${ret}
  520. }
  521. tc-has-tls ()
  522. {
  523. local base="${T}/test-tc-tls";
  524. cat > "${base}.c" <<-EOF
  525. int foo(int *i) {
  526. static __thread int j = 0;
  527. return *i ? j : *i;
  528. }
  529. EOF
  530.  
  531. local flags;
  532. case $1 in
  533. -s)
  534. flags="-S"
  535. ;;
  536. -c)
  537. flags="-c"
  538. ;;
  539. -l)
  540.  
  541. ;;
  542. -*)
  543. die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
  544. ;;
  545. esac;
  546. : ${flags:=-fPIC -shared -Wl,-z,defs};
  547. [[ $1 == -* ]] && shift;
  548. $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &>/dev/null;
  549. local ret=$?;
  550. rm -f "${base}"*;
  551. return ${ret}
  552. }
  553. tc-is-cross-compiler ()
  554. {
  555. return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
  556. }
  557. tc-is-hardfloat ()
  558. {
  559. [[ ${CTARGET//_/-} == *-hardfloat-* ]] && echo "yes" || echo "no"
  560. }
  561. tc-is-softfloat ()
  562. {
  563. local CTARGET=${CTARGET:-${CHOST}};
  564. case ${CTARGET} in
  565. bfin* | h8300*)
  566. echo "only"
  567. ;;
  568. *)
  569. [[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no"
  570. ;;
  571. esac
  572. }
  573. tc-is-static-only ()
  574. {
  575. local host=${CTARGET:-${CHOST}};
  576. return $([[ ${host} == *-mint* ]])
  577. }
  578. tc-ninja_magic_to_arch ()
  579. {
  580. function ninj ()
  581. {
  582. [[ ${type} == "kern" ]] && echo $1 || echo $2
  583. };
  584. local type=$1;
  585. local host=$2;
  586. [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  587. case ${host} in
  588. alpha*)
  589. echo alpha
  590. ;;
  591. arm*)
  592. echo arm
  593. ;;
  594. avr*)
  595. ninj avr32 avr
  596. ;;
  597. bfin*)
  598. ninj blackfin bfin
  599. ;;
  600. cris*)
  601. echo cris
  602. ;;
  603. hppa*)
  604. ninj parisc hppa
  605. ;;
  606. i?86*)
  607. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
  608. echo i386;
  609. else
  610. echo x86;
  611. fi
  612. ;;
  613. ia64*)
  614. echo ia64
  615. ;;
  616. m68*)
  617. echo m68k
  618. ;;
  619. mips*)
  620. echo mips
  621. ;;
  622. nios2*)
  623. echo nios2
  624. ;;
  625. nios*)
  626. echo nios
  627. ;;
  628. powerpc*)
  629. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then
  630. echo powerpc;
  631. else
  632. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]]; then
  633. if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
  634. echo powerpc;
  635. else
  636. echo ppc;
  637. fi;
  638. else
  639. if [[ ${host} == powerpc64* ]]; then
  640. echo ppc64;
  641. else
  642. if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
  643. ninj ppc64 ppc;
  644. else
  645. echo ppc;
  646. fi;
  647. fi;
  648. fi;
  649. fi
  650. ;;
  651. s390*)
  652. echo s390
  653. ;;
  654. sh64*)
  655. ninj sh64 sh
  656. ;;
  657. sh*)
  658. echo sh
  659. ;;
  660. sparc64*)
  661. ninj sparc64 sparc
  662. ;;
  663. sparc*)
  664. [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
  665. ;;
  666. vax*)
  667. echo vax
  668. ;;
  669. x86_64*freebsd*)
  670. echo amd64
  671. ;;
  672. x86_64*)
  673. if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
  674. echo x86;
  675. else
  676. ninj x86_64 amd64;
  677. fi
  678. ;;
  679. *)
  680. echo unknown
  681. ;;
  682. esac
  683. }
  684. test-flag-CC ()
  685. {
  686. test-flag-PROG "CC" "$1"
  687. }
  688. test-flag-CXX ()
  689. {
  690. test-flag-PROG "CXX" "$1"
  691. }
  692. test-flag-F77 ()
  693. {
  694. test-flag-PROG "F77" "$1"
  695. }
  696. test-flag-FC ()
  697. {
  698. test-flag-PROG "FC" "$1"
  699. }
  700. test-flag-PROG ()
  701. {
  702. local comp=$1;
  703. local flag=$2;
  704. [[ -z ${comp} || -z ${flag} ]] && return 1;
  705. local PROG=$(tc-get${comp});
  706. ${PROG} "${flag}" -c -o /dev/null -xc /dev/null > /dev/null 2>&1
  707. }
  708. test-flags ()
  709. {
  710. test-flags-CC "$@"
  711. }
  712. test-flags-CC ()
  713. {
  714. test-flags-PROG "CC" "$@"
  715. }
  716. test-flags-CXX ()
  717. {
  718. test-flags-PROG "CXX" "$@"
  719. }
  720. test-flags-F77 ()
  721. {
  722. test-flags-PROG "F77" "$@"
  723. }
  724. test-flags-FC ()
  725. {
  726. test-flags-PROG "FC" "$@"
  727. }
  728. test-flags-PROG ()
  729. {
  730. local comp=$1;
  731. local flags;
  732. local x;
  733. shift;
  734. [[ -z ${comp} ]] && return 1;
  735. for x in "$@";
  736. do
  737. test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}";
  738. done;
  739. echo "${flags}";
  740. [[ -n ${flags} ]]
  741. }
  742. test_version_info ()
  743. {
  744. if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
  745. return 0;
  746. else
  747. return 1;
  748. fi
  749. }
  750. use_if_iuse ()
  751. {
  752. in_iuse $1 || return 1;
  753. use $1
  754. }
  755. usex ()
  756. {
  757. use "$1" && echo "${2-yes}$4" || echo "${3-no}$5"
  758. }
  759. validate_desktop_entries ()
  760. {
  761. if [[ -x /usr/bin/desktop-file-validate ]]; then
  762. einfo "Checking desktop entry validity";
  763. local directories="";
  764. for d in /usr/share/applications $@;
  765. do
  766. [[ -d ${D}${d} ]] && directories="${directories} ${D}${d}";
  767. done;
  768. if [[ -n ${directories} ]]; then
  769. for FILE in $(find ${directories} -name "*\.desktop" -not -path '*.hidden*' | sort -u 2>/dev/null);
  770. do
  771. local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
  772. [[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:};
  773. done;
  774. fi;
  775. echo "";
  776. else
  777. einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
  778. fi
  779. }
  780. version_compare ()
  781. {
  782. eshopts_push -s extglob;
  783. local ver_a=${1} ver_b=${2} parts_a parts_b;
  784. local cur_tok_a cur_tok_b num_part_a num_part_b;
  785. local -i cur_idx_a=0 cur_idx_b=0 prev_idx_a prev_idx_b;
  786. parts_a=($(get_all_version_components "${ver_a}" ));
  787. parts_b=($(get_all_version_components "${ver_b}" ));
  788. local -i inf_loop=0;
  789. while true; do
  790. inf_loop+=1;
  791. ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  792. prev_idx_a=cur_idx_a;
  793. prev_idx_b=cur_idx_b;
  794. cur_tok_a=${parts_a[cur_idx_a]};
  795. cur_tok_b=${parts_b[cur_idx_b]};
  796. if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
  797. cur_idx_a+=1;
  798. [[ ${parts_a[cur_idx_a]} == . ]] && cur_idx_a+=1;
  799. else
  800. cur_tok_a=;
  801. fi;
  802. if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
  803. cur_idx_b+=1;
  804. [[ ${parts_b[cur_idx_b]} == . ]] && cur_idx_b+=1;
  805. else
  806. cur_tok_b=;
  807. fi;
  808. [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]] && break;
  809. [[ -z ${cur_tok_a} ]] && eshopts_pop && return 1;
  810. [[ -z ${cur_tok_b} ]] && eshopts_pop && return 3;
  811. if (( prev_idx_a != 0 && prev_idx_b != 0 )) && [[ ${cur_tok_a} == 0* || ${cur_tok_b} == 0* ]]; then
  812. cur_tok_a=${cur_tok_a%%+(0)};
  813. cur_tok_b=${cur_tok_b%%+(0)};
  814. [[ ${cur_tok_a} < ${cur_tok_b} ]] && eshopts_pop && return 1;
  815. [[ ${cur_tok_a} > ${cur_tok_b} ]] && eshopts_pop && return 3;
  816. else
  817. cur_tok_a=${cur_tok_a##+(0)};
  818. cur_tok_b=${cur_tok_b##+(0)};
  819. : ${cur_tok_a:=0};
  820. : ${cur_tok_b:=0};
  821. ((cur_tok_a < cur_tok_b)) && eshopts_pop && return 1;
  822. ((cur_tok_a > cur_tok_b)) && eshopts_pop && return 3;
  823. fi;
  824. done;
  825. local letter_a=;
  826. letter_a=${parts_a[cur_idx_a]};
  827. if [[ ${#letter_a} -eq 1 && -z ${letter_a/[a-z]} ]]; then
  828. cur_idx_a+=1;
  829. else
  830. letter_a=@;
  831. fi;
  832. local letter_b=;
  833. letter_b=${parts_b[cur_idx_b]};
  834. if [[ ${#letter_b} -eq 1 && -z ${letter_b/[a-z]} ]]; then
  835. cur_idx_b+=1;
  836. else
  837. letter_b=@;
  838. fi;
  839. [[ ${letter_a} < ${letter_b} ]] && eshopts_pop && return 1;
  840. [[ ${letter_a} > ${letter_b} ]] && eshopts_pop && return 3;
  841. inf_loop=0;
  842. while true; do
  843. inf_loop+=1;
  844. ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  845. [[ ${parts_a[cur_idx_a]} == _ ]] && ((cur_idx_a++));
  846. [[ ${parts_b[cur_idx_b]} == _ ]] && ((cur_idx_b++));
  847. cur_tok_a=${parts_a[cur_idx_a]};
  848. cur_tok_b=${parts_b[cur_idx_b]};
  849. num_part_a=0;
  850. num_part_b=0;
  851. if has ${cur_tok_a%%+([0-9])} "alpha" "beta" "pre" "rc" "p"; then
  852. cur_idx_a+=1;
  853. num_part_a=${cur_tok_a##+([a-z])};
  854. num_part_a=${num_part_a##+(0)};
  855. : ${num_part_a:=0};
  856. cur_tok_a=${cur_tok_a%%+([0-9])};
  857. else
  858. cur_tok_a=;
  859. fi;
  860. if has ${cur_tok_b%%+([0-9])} alpha beta pre rc p; then
  861. cur_idx_b+=1;
  862. num_part_b=${cur_tok_b##+([a-z])};
  863. num_part_b=${num_part_b##+(0)};
  864. : ${num_part_b:=0};
  865. cur_tok_b=${cur_tok_b%%+([0-9])};
  866. else
  867. cur_tok_b=;
  868. fi;
  869. if [[ ${cur_tok_a} != ${cur_tok_b} ]]; then
  870. local suffix;
  871. for suffix in alpha beta pre rc "" p;
  872. do
  873. [[ ${cur_tok_a} == ${suffix} ]] && eshopts_pop && return 1;
  874. [[ ${cur_tok_b} == ${suffix} ]] && eshopts_pop && return 3;
  875. done;
  876. else
  877. if [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]]; then
  878. break;
  879. else
  880. ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  881. ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  882. fi;
  883. fi;
  884. done;
  885. [[ ${parts_a[cur_idx_a]} == - ]] && ((cur_idx_a++));
  886. [[ ${parts_b[cur_idx_b]} == - ]] && ((cur_idx_b++));
  887. if [[ -n ${parts_a[cur_idx_a]/r+([0-9])} || -n ${parts_b[cur_idx_b]/r+([0-9])} ]]; then
  888. die "versionator compare bug [revisions, ${ver_a}, ${ver_b}]";
  889. fi;
  890. num_part_a=${parts_a[cur_idx_a]#r};
  891. num_part_a=${num_part_a##+(0)};
  892. : ${num_part_a:=0};
  893. num_part_b=${parts_b[cur_idx_b]#r};
  894. num_part_b=${num_part_b##+(0)};
  895. : ${num_part_b:=0};
  896. ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  897. ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  898. eshopts_pop;
  899. return 2
  900. }
  901. version_format_string ()
  902. {
  903. local fstr=$1;
  904. shift;
  905. set -- $(get_version_components "$@");
  906. eval echo "${fstr}"
  907. }
  908. version_is_at_least ()
  909. {
  910. local want_s="$1" have_s="${2:-${PVR}}" r;
  911. version_compare "${want_s}" "${have_s}";
  912. r=$?;
  913. case $r in
  914. 1 | 2)
  915. return 0
  916. ;;
  917. 3)
  918. return 1
  919. ;;
  920. *)
  921. die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
  922. ;;
  923. esac
  924. }
  925. version_sort ()
  926. {
  927. eshopts_push -s extglob;
  928. local items=;
  929. local -i left=0;
  930. items=("$@");
  931. while ((left < ${#items[@]})); do
  932. local -i lowest_idx=left;
  933. local -i idx=lowest_idx+1;
  934. while ((idx < ${#items[@]})); do
  935. version_compare "${items[lowest_idx]}" "${items[idx]}";
  936. [[ $? -eq 3 ]] && lowest_idx=idx;
  937. idx+=1;
  938. done;
  939. local tmp=${items[lowest_idx]};
  940. items[lowest_idx]=${items[left]};
  941. items[left]=${tmp};
  942. left+=1;
  943. done;
  944. echo ${items[@]};
  945. eshopts_pop
  946. }
  947. virtualmake ()
  948. {
  949. debug-print-function ${FUNCNAME} "$@";
  950. local i=0;
  951. local retval=0;
  952. local OLD_SANDBOX_ON="${SANDBOX_ON}";
  953. local XVFB=$(type -p Xvfb);
  954. local XHOST=$(type -p xhost);
  955. local xvfbargs="-screen 0 800x600x24";
  956. if [[ -n ${maketype} ]]; then
  957. ewarn "QA: ebuild is exporting \$maketype=${maketype}";
  958. ewarn "QA: Ebuild should be migrated to use VIRTUALX_COMMAND=${maketype} instead.";
  959. ewarn "QA: Setting VIRTUALX_COMMAND to \$maketype conveniently for now.";
  960. VIRTUALX_COMMAND=${maketype};
  961. fi;
  962. if [[ -n ${XVFB} && -n ${XHOST} ]] && ( [[ -z ${DISPLAY} ]] || ! ( ${XHOST} &>/dev/null ) ); then
  963. debug-print "${FUNCNAME}: running Xvfb hack";
  964. export XAUTHORITY=;
  965. einfo "Scanning for an open DISPLAY to start Xvfb ...";
  966. XDISPLAY=$(i=0; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i});
  967. debug-print "${FUNCNAME}: XDISPLAY=${XDISPLAY}";
  968. export SANDBOX_ON="0";
  969. debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
  970. ${XVFB} :${XDISPLAY} ${xvfbargs} &>/dev/null & sleep 2;
  971. local start=${XDISPLAY};
  972. while [[ ! -f /tmp/.X${XDISPLAY}-lock ]]; do
  973. if ((XDISPLAY - start > 15)); then
  974. eerror "'${XVFB} :${XDISPLAY} ${xvfbargs}' returns:";
  975. echo;
  976. ${XVFB} :${XDISPLAY} ${xvfbargs};
  977. echo;
  978. eerror "If possible, correct the above error and try your emerge again.";
  979. die "Unable to start Xvfb";
  980. fi;
  981. ((XDISPLAY++));
  982. debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
  983. ${XVFB} :${XDISPLAY} ${xvfbargs} &>/dev/null & sleep 2;
  984. done;
  985. export SANDBOX_ON="${OLD_SANDBOX_ON}";
  986. einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ...";
  987. export DISPLAY=:${XDISPLAY};
  988. debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\"";
  989. ${VIRTUALX_COMMAND} "$@";
  990. retval=$?;
  991. kill $(cat /tmp/.X${XDISPLAY}-lock);
  992. else
  993. debug-print "${FUNCNAME}: attaching to running X display";
  994. debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\"";
  995. ${VIRTUALX_COMMAND} "$@";
  996. retval=$?;
  997. fi;
  998. [[ ${retval} -ne 0 ]] && die "${FUNCNAME}: the ${VIRTUALX_COMMAND} failed.";
  999. return 0
  1000. }
Add Comment
Please, Sign In to add comment