Advertisement
Guest User

Untitled

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