Guest User

environment

a guest
Sep 4th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 152.86 KB | None | 0 0
  1. declare -x ABI="amd64"
  2. declare -x ABI_X86="32 64"
  3. declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel ice1724 intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci"
  4. declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"
  5. declare -x APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
  6. declare -x ARCH="amd64"
  7. declare -x ASFLAGS_x86="--32"
  8. declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_4 python_targets_python2_7"
  9. declare -- BUILD_DIR="/tmp/portage/kde-frameworks/kfilemetadata-5.25.0/work/kfilemetadata-5.25.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="x86_64-pc-linux-gnu"
  13. declare -x CDEFINE_amd64="__x86_64__"
  14. declare -x CDEFINE_x86="__i386__"
  15. declare -x CFLAGS="-march=native -O3 -pipe"
  16. declare -x CFLAGS_default
  17. declare -x CFLAGS_x86="-m32"
  18. declare -x CHOST="x86_64-pc-linux-gnu"
  19. declare -x CHOST_amd64="x86_64-pc-linux-gnu"
  20. declare -x CHOST_default="x86_64-pc-linux-gnu"
  21. declare -x CHOST_x86="i686-pc-linux-gnu"
  22. declare -- CMAKE_BINARY="cmake"
  23. declare -- CMAKE_BUILD_DIR="/tmp/portage/kde-frameworks/kfilemetadata-5.25.0/work/kfilemetadata-5.25.0_build"
  24. declare -- CMAKE_BUILD_TYPE="Gentoo"
  25. declare -- CMAKE_MAKEFILE_GENERATOR="emake"
  26. declare -- CMAKE_MIN_VERSION="2.8.12"
  27. declare -- CMAKE_REMOVE_MODULES="yes"
  28. declare -- CMAKE_REMOVE_MODULES_LIST="FindBLAS FindLAPACK"
  29. declare -- CMAKE_USE_DIR="/tmp/portage/kde-frameworks/kfilemetadata-5.25.0/work/kfilemetadata-5.25.0"
  30. declare -- CMAKE_VERBOSE="ON"
  31. declare -- CMAKE_WARN_UNUSED_CLI="yes"
  32. declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
  33. declare -x COLORFGBG="15;0"
  34. declare -x CPPFLAGS=" -DQT_NO_DEBUG"
  35. declare -x CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
  36. declare -x CTARGET_default="x86_64-pc-linux-gnu"
  37. declare -x CXXFLAGS="-march=native -O3 -pipe"
  38. declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-CiQiUwwqkd,guid=2eebff9f6774ade88997ee8457cc0ac1"
  39. declare -x DBUS_SESSION_BUS_PID="23363"
  40. declare -x DBUS_SESSION_BUS_WINDOWID="48234497"
  41. declare -x DEFAULT_ABI="amd64"
  42. declare -x DEFINED_PHASES=" compile configure install postinst postrm preinst prepare setup test unpack"
  43. declare DEPEND="
  44.      >=kde-frameworks/karchive-5.25:5
  45.      >=kde-frameworks/ki18n-5.25:5
  46.      >=dev-qt/qtxml-5.6.1:5
  47.     epub? ( app-text/ebook-tools )
  48.     exif? ( media-gfx/exiv2:= )
  49.     ffmpeg? (
  50.         libav? ( media-video/libav:= )
  51.         !libav? ( media-video/ffmpeg:0= )
  52.     )
  53.     pdf? ( app-text/poppler[qt5] )
  54.     taglib? ( media-libs/taglib )
  55.  sys-devel/make >=dev-util/cmake-2.8.12 >=sys-apps/sed-4
  56.     dev-util/desktop-file-utils
  57.     x11-misc/shared-mime-info
  58.   >=kde-frameworks/extra-cmake-modules-5.25:5 test? (  >=dev-qt/qttest-5.6.1:5 )   >=dev-qt/qtcore-5.6.1:5 dev-util/desktop-file-utils app-arch/xz-utils"
  59. declare DESCRIPTION="Library for extracting file metadata"
  60. declare -- DESKTOP_DATABASE_DIR="/usr/share/applications"
  61. declare -- DESKTOP_DATABASE_UPDATE_BIN="/usr/bin/update-desktop-database"
  62. declare -x DESKTOP_SESSION="/usr/share/xsessions/plasma"
  63. declare -x DESTTREE="/usr"
  64. declare -x DIROPTIONS="-m0755"
  65. declare -x EAPI="6"
  66. declare -x ELIBC="glibc"
  67. declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
  68. declare -- EPATCH_EXCLUDE=""
  69. declare -- EPATCH_FORCE="no"
  70. declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
  71. declare -- EPATCH_OPTS=""
  72. declare -- EPATCH_SINGLE_MSG=""
  73. declare -- EPATCH_SOURCE="/tmp/portage/kde-frameworks/kfilemetadata-5.25.0/work/patch"
  74. declare -- EPATCH_SUFFIX="patch.bz2"
  75. declare -x EXEOPTIONS="-m0755"
  76. declare -x FCFLAGS="-march=haswell -O2 -pipe"
  77. declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
  78. declare -x FFLAGS="-march=haswell -O2 -pipe"
  79. declare -- FRAMEWORKS_MINIMAL="5.23.0"
  80. declare -x GCC_SPECS=""
  81. declare -- GCONFTOOL_BIN="/usr/bin/gconftool-2"
  82. declare -- GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas"
  83. declare -x GNOME_KEYRING_CONTROL="/home/tofu/.cache/keyring-7Y86MY"
  84. 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"
  85. declare -x GRUB_PLATFORMS="efi-64"
  86. declare -x GSETTINGS_BACKEND="dconf"
  87. declare -x GS_LIB="/home/tofu/.fonts"
  88. declare -x GTK2_RC_FILES="/etc/gtk-2.0/gtkrc:/home/tofu/.gtkrc-2.0:/home/tofu/.config/gtkrc-2.0"
  89. declare -x GTK_MODULES="canberra-gtk-module"
  90. declare -x GTK_RC_FILES="/etc/gtk/gtkrc:/home/tofu/.gtkrc:/home/tofu/.config/gtkrc"
  91. declare -- GTK_UPDATE_ICON_CACHE="/usr/bin/gtk-update-icon-cache"
  92. declare HDEPEND=""
  93. declare HOMEPAGE="https://www.kde.org/"
  94. declare -x INFINALITY_FT_FILTER_PARAMS="08 24 36 24 08"
  95. declare -x INFINALITY_FT_FRINGE_FILTER_STRENGTH="25"
  96. declare -x INFINALITY_FT_STEM_ALIGNMENT_STRENGTH="15"
  97. declare -x INFINALITY_FT_STEM_FITTING_STRENGTH="15"
  98. declare -x INFINALITY_FT_USE_VARIOUS_TWEAKS="true"
  99. declare -x INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH="25"
  100. declare -x INHERITED=" multilib toolchain-funcs eutils flag-o-matic versionator cmake-utils xdg-utils gnome2-utils kde5-functions virtualx xdg kde5"
  101. declare -x INPUT_DEVICES="mouse keyboard evdev"
  102. declare -x INSDESTTREE=""
  103. declare -x INSOPTIONS="-m0644"
  104. declare IUSE="epub exif ffmpeg libav pdf taglib  debug test"
  105. declare -x IUSE_EFFECTIVE="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 debug elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc epub exif ffmpeg 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 libav m68k m68k-mint mips nios2 pdf 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 taglib test userland_BSD userland_GNU x64-cygwin x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
  106. declare -x IUSE_IMPLICIT="prefix prefix-guest"
  107. declare -- KDE_APPS_MINIMAL="14.12.0"
  108. declare -- KDE_AUTODEPS="true"
  109. declare -- KDE_BLOCK_SLOT4="true"
  110. declare -x KDE_BUILD_TYPE="release"
  111. declare -- KDE_DEBUG="true"
  112. declare -- KDE_DESIGNERPLUGIN="false"
  113. declare -- KDE_DOC_DIR="doc"
  114. declare -- KDE_EXAMPLES="false"
  115. declare -x KDE_FULL_SESSION="true"
  116. declare -- KDE_HANDBOOK="false"
  117. declare -x KDE_MULTIHEAD="false"
  118. declare -- KDE_PUNT_BOGUS_DEPS="false"
  119. declare -- KDE_SCM="git"
  120. declare -- KDE_SELINUX_MODULE="none"
  121. declare -x KDE_SESSION_UID="1000"
  122. declare -x KDE_SESSION_VERSION="5"
  123. declare -- KDE_TEST="true"
  124. declare -x KERNEL="linux"
  125. declare -x KERNEL_ABI="amd64"
  126. declare -x KEYWORDS="~amd64 ~arm ~x86"
  127. declare -x KONSOLE_DBUS_SERVICE=":1.31"
  128. declare -x KONSOLE_DBUS_SESSION="/Sessions/1"
  129. declare -x KONSOLE_DBUS_WINDOW="/Windows/1"
  130. declare -x KONSOLE_PROFILE_NAME="Profile #1"
  131. declare -x LADSPA_PATH="/usr/lib64/ladspa"
  132. declare -x LANG="en_US.UTF-8"
  133. declare -x LANGUAGE="en_US"
  134. declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
  135. declare -x LC_COLLATE="C"
  136. declare -x LC_MESSAGES="C"
  137. declare -x LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed"
  138. declare -x LDFLAGS_default
  139. declare -x LDFLAGS_x86="-m elf_i386"
  140. declare -x LIBDIR_amd64="lib64"
  141. declare -x LIBDIR_amd64_fbsd="lib64"
  142. declare -x LIBDIR_default="lib"
  143. declare -x LIBDIR_ppc="lib32"
  144. declare -x LIBDIR_ppc64="lib64"
  145. declare -x LIBDIR_sparc32="lib32"
  146. declare -x LIBDIR_sparc64="lib64"
  147. declare -x LIBDIR_x86="lib32"
  148. declare -x LIBDIR_x86_fbsd="lib32"
  149. declare -x LIBOPTIONS="-m0644"
  150. declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
  151. declare -x LICENSE="GPL-2"
  152. declare -x MAIL="/var/mail/tofu"
  153. declare -x MAKEOPTS="-j5"
  154. declare -x MANPAGER="manpager"
  155. declare -- MIMEINFO_DATABASE_DIR="/usr/share/mime"
  156. declare -- MIMEINFO_DATABASE_UPDATE_BIN="/usr/bin/update-mime-database"
  157. declare -x MULTILIB_ABIS="amd64 x86"
  158. declare -x MULTILIB_STRICT_DENY="64-bit.*shared object"
  159. declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib"
  160. declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage)"
  161. declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
  162. declare -x OFFICE_IMPLEMENTATION="libreoffice"
  163. declare -x OPENGL_PROFILE="xorg-x11"
  164. 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/x86_64-pc-linux-gnu/gcc-bin/4.9.3"
  165. declare PDEPEND=""
  166. declare -x PHP_TARGETS="php5-6"
  167. declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig"
  168. declare -- PLASMA_MINIMAL="5.4.1"
  169. declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")'
  170. declare -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
  171. declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/kfilemetadata-5.25.0/html")'
  172. declare -- PREFIX="/usr"
  173. declare -x PRELINK_PATH_MASK="/opt/bin/skype"
  174. declare -x PROFILEHOME="/home/tofu"
  175. 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"
  176. declare -x PROPERTIES=""
  177. declare -x PROVIDE=""
  178. declare -x PYTHONDONTWRITEBYTECODE="1"
  179. declare -x PYTHON_SINGLE_TARGET="python3_4"
  180. declare -x PYTHON_TARGETS="python2_7 python3_4"
  181. declare -x QEMU_SOFTMMU_TARGETS="i386 x86_64"
  182. declare -x QEMU_USER_TARGETS="i386 x86_64"
  183. declare -x QT_AUTO_SCREEN_SCALE_FACTOR="0"
  184. declare -x QT_GRAPHICSSYSTEM="raster"
  185. declare -- QT_MINIMAL="5.6.1"
  186. declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins"
  187. declare RDEPEND="
  188.      >=kde-frameworks/karchive-5.25:5
  189.      >=kde-frameworks/ki18n-5.25:5
  190.      >=dev-qt/qtxml-5.6.1:5
  191.     epub? ( app-text/ebook-tools )
  192.     exif? ( media-gfx/exiv2:= )
  193.     ffmpeg? (
  194.         libav? ( media-video/libav:= )
  195.         !libav? ( media-video/ffmpeg:0= )
  196.     )
  197.     pdf? ( app-text/poppler[qt5] )
  198.     taglib? ( media-libs/taglib )
  199.  >=kde-frameworks/kf-env-3
  200.                 !kde-apps/kde4-l10n[-minimal(+)]
  201.                 !<kde-apps/kde4-l10n-15.12.3-r1
  202.                >=dev-qt/qtcore-5.6.1:5"
  203. declare REPOSITORY
  204. declare REQUIRED_USE=""
  205. declare -x RESTRICT=""
  206. 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}\""
  207. declare -x RUBY_TARGETS="ruby20 ruby21 ruby22"
  208. declare -x R_HOME="/usr/lib64/R"
  209. declare -x S="/tmp/portage/kde-frameworks/kfilemetadata-5.25.0/work/kfilemetadata-5.25.0"
  210. declare -x SANDBOX_DEBUG="0"
  211. declare -x SANDBOX_DENY=""
  212. declare -x SANDBOX_PREDICT="/tmp/portage/kde-frameworks/kfilemetadata-5.25.0/homedir:/dev/crypto:/var/cache/fontconfig"
  213. declare -x SANDBOX_READ="/:/tmp"
  214. declare -x SANDBOX_VERBOSE="1"
  215. 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:/tmp/:/tmp/portage/kde-frameworks/kfilemetadata-5.25.0/homedir/.bash_history:/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/"
  216. declare -- SCROLLKEEPER_DIR="/var/lib/scrollkeeper"
  217. declare -- SCROLLKEEPER_UPDATE_BIN="/usr/bin/scrollkeeper-update"
  218. declare -x SESSION_MANAGER="local/envy15:@/tmp/.ICE-unix/22618,unix/envy15:/tmp/.ICE-unix/22618"
  219. declare -x SHELL="/bin/bash"
  220. declare -x SHELL_SESSION_ID="889d7c067d324000b2bdd418cb28d24a"
  221. declare -x SLOT="5/5.25"
  222. declare SRC_URI="mirror://kde/stable/frameworks/5.25/kfilemetadata-5.25.0.tar.xz"
  223. declare -x SSH_ASKPASS="/usr/bin/ksshaskpass"
  224. declare -x STAGE1_USE="multilib nptl nptlonly unicode"
  225. declare -x SYMLINK_LIB="yes"
  226. declare -x USE="amd64 elibc_glibc exif ffmpeg kernel_linux pdf taglib userland_GNU"
  227. declare -x USERLAND="GNU"
  228. declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
  229. declare -x USE_EXPAND_UNPREFIXED="ARCH"
  230. 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"
  231. declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
  232. declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt"
  233. declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
  234. declare -x VDPAU_DRIVER="va_gl"
  235. declare -x VIDEO_CARDS="intel i965"
  236. declare -- VIRTUALX_COMMAND="emake"
  237. declare -- VIRTUALX_DEPEND="
  238.     !prefix? ( x11-base/xorg-server[xvfb] )
  239.     x11-apps/xhost
  240. "
  241. declare -- VIRTUALX_REQUIRED="manual"
  242. declare -- WANT_CMAKE="always"
  243. declare -x WINDOWID="6291461"
  244. declare -x XCURSOR_SIZE="0"
  245. declare -x XCURSOR_THEME="Breeze_Snow"
  246. declare -x XDG_CONFIG_DIRS="/etc/xdg"
  247. declare -x XDG_CURRENT_DESKTOP="KDE"
  248. declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share"
  249. declare -x XDG_SEAT="seat0"
  250. declare -x XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0"
  251. declare -x XDG_SESSION_CLASS="user"
  252. declare -x XDG_SESSION_COOKIE="envy15-1472989863.514165-452586396"
  253. declare -x XDG_SESSION_DESKTOP="KDE"
  254. declare -x XDG_SESSION_PATH="/org/freedesktop/DisplayManager/Session0"
  255. declare -x XDG_SESSION_TYPE="x11"
  256. declare -x XDG_VTNR="7"
  257. 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"
  258. declare -- _CMAKE_UTILS_ECLASS="1"
  259. declare -- _EUTILS_ECLASS="1"
  260. declare -- _EUTILS_ECLASSDIR_LOCAL="/usr/portage/eclass"
  261. declare -x _E_DOCDESTTREE_=""
  262. declare -x _E_EXEDESTTREE_=""
  263. declare -- _FLAG_O_MATIC_ECLASS="1"
  264. declare -- _KDE5_ECLASS="1"
  265. declare -- _KDE5_FUNCTIONS_ECLASS="1"
  266. declare -- _MULTILIB_ECLASS="1"
  267. declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
  268. declare -- _VERSIONATOR_ECLASS="1"
  269. declare -- _VIRTUAL_X="1"
  270. declare -- conf="kfilemetadata-5.25.0-r0"
  271. declare -- phase_func
  272. Xeconf ()
  273. {
  274.     debug-print-function ${FUNCNAME} "$@";
  275.     [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx econf ....'";
  276.     VIRTUALX_COMMAND="econf" virtualmake "$@"
  277. }
  278. Xemake ()
  279. {
  280.     debug-print-function ${FUNCNAME} "$@";
  281.     [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx emake ....'";
  282.     VIRTUALX_COMMAND="emake" virtualmake "$@"
  283. }
  284. Xmake ()
  285. {
  286.     debug-print-function ${FUNCNAME} "$@";
  287.     [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use 'virtx emake -j1 ....'";
  288.     eqawarn "you should not execute make directly";
  289.     eqawarn "rather execute Xemake -j1 if you have issues with parallel make";
  290.     VIRTUALX_COMMAND="emake -j1" virtualmake "$@"
  291. }
  292. __eapi6_src_install ()
  293. {
  294.     if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
  295.         emake DESTDIR="${D}" install;
  296.     fi;
  297.     einstalldocs
  298. }
  299. __eapi6_src_prepare ()
  300. {
  301.     if [[ $(declare -p PATCHES 2>/dev/null) == "declare -a"* ]]; then
  302.         eapply "${PATCHES[@]}";
  303.     else
  304.         if [[ -n ${PATCHES} ]]; then
  305.             eapply ${PATCHES};
  306.         fi;
  307.     fi;
  308.     eapply_user
  309. }
  310. _add_category_dep ()
  311. {
  312.     debug-print-function ${FUNCNAME} "$@";
  313.     local category=${1};
  314.     local package=${2};
  315.     local use=${3};
  316.     local version=${4};
  317.     local slot=${5};
  318.     if [[ -n ${use} ]]; then
  319.         local use="[${use}]";
  320.     fi;
  321.     if [[ -n ${version} ]]; then
  322.         local operator=">=";
  323.         local version="-$(get_version_component_range 1-3 ${version})";
  324.     fi;
  325.     if [[ -n ${slot} ]]; then
  326.         slot=":${slot}";
  327.     else
  328.         if [[ ${SLOT%\/*} = 4 || ${SLOT%\/*} = 5 ]] && ! has kde5-meta-pkg ${INHERITED}; then
  329.             slot=":${SLOT%\/*}";
  330.         fi;
  331.     fi;
  332.     echo " ${operator}${category}/${package}${version}${slot}${use}"
  333. }
  334. _calculate_live_repo ()
  335. {
  336.     debug-print-function ${FUNCNAME} "$@";
  337.     SRC_URI="";
  338.     case ${KDE_SCM} in
  339.         git)
  340.             EGIT_MIRROR=${EGIT_MIRROR:=https://anongit.kde.org};
  341.             local _kmname;
  342.             if [[ -n ${EGIT_REPONAME} ]]; then
  343.                 _kmname=${EGIT_REPONAME};
  344.             else
  345.                 if [[ -n ${KMNAME} ]]; then
  346.                     _kmname=${KMNAME};
  347.                 else
  348.                     _kmname=${PN};
  349.                 fi;
  350.             fi;
  351.             if [[ ${PV} == ??.??.49.9999 && ${CATEGORY} = kde-apps ]]; then
  352.                 EGIT_BRANCH="Applications/$(get_version_component_range 1-2)";
  353.             fi;
  354.             if [[ ${PV} != 9999 && ${CATEGORY} = kde-plasma ]]; then
  355.                 EGIT_BRANCH="Plasma/$(get_version_component_range 1-2)";
  356.             fi;
  357.             EGIT_REPO_URI="${EGIT_MIRROR}/${_kmname}"
  358.         ;;
  359.     esac
  360. }
  361. _calculate_src_uri ()
  362. {
  363.     debug-print-function ${FUNCNAME} "$@";
  364.     local _kmname;
  365.     if [[ -n ${KMNAME} ]]; then
  366.         _kmname=${KMNAME};
  367.     else
  368.         _kmname=${PN};
  369.     fi;
  370.     case ${PN} in
  371.         kdelibs4support | khtml | kjs | kjsembed | kmediaplayer | kross)
  372.             _kmname="portingAids/${_kmname}"
  373.         ;;
  374.     esac;
  375.     DEPEND+=" app-arch/xz-utils";
  376.     case ${CATEGORY} in
  377.         kde-apps)
  378.             case ${PV} in
  379.                 ??.?.[6-9]? | ??.??.[6-9]?)
  380.                     SRC_URI="mirror://kde/unstable/applications/${PV}/src/${_kmname}-${PV}.tar.xz";
  381.                     RESTRICT+=" mirror"
  382.                 ;;
  383.                 *)
  384.                     SRC_URI="mirror://kde/stable/applications/${PV}/src/${_kmname}-${PV}.tar.xz"
  385.                 ;;
  386.             esac
  387.         ;;
  388.         kde-frameworks)
  389.             SRC_URI="mirror://kde/stable/frameworks/${PV%.*}/${_kmname}-${PV}.tar.xz"
  390.         ;;
  391.         kde-plasma)
  392.             local plasmapv=$(get_version_component_range 1-3);
  393.             case ${PV} in
  394.                 5.?.[6-9]?)
  395.                     SRC_URI="mirror://kde/unstable/plasma/${plasmapv}/${_kmname}-${PV}.tar.xz";
  396.                     RESTRICT+=" mirror"
  397.                 ;;
  398.                 *)
  399.                     SRC_URI="mirror://kde/stable/plasma/${plasmapv}/${_kmname}-${PV}.tar.xz"
  400.                 ;;
  401.             esac
  402.         ;;
  403.     esac;
  404.     if [[ ${KDEBASE} = kdel10n ]]; then
  405.         local uri_base="${SRC_URI/${_kmname}-${PV}.tar.xz/}kde-l10n/kde-l10n";
  406.         SRC_URI="";
  407.         for my_l10n in ${KDE_L10N[@]};
  408.         do
  409.             case ${my_l10n} in
  410.                 sr | sr-ijekavsk | sr-Latn-ijekavsk | sr-Latn)
  411.                     SRC_URI="${SRC_URI} l10n_${my_l10n}? ( ${uri_base}-sr-${PV}.tar.xz )"
  412.                 ;;
  413.                 *)
  414.                     SRC_URI="${SRC_URI} l10n_${my_l10n}? ( ${uri_base}-$(kde_l10n2lingua ${my_l10n})-${PV}.tar.xz )"
  415.                 ;;
  416.             esac;
  417.         done;
  418.     fi
  419. }
  420. _check_gcc_version ()
  421. {
  422.     if [[ ${MERGE_TYPE} != binary && -v KDE_GCC_MINIMAL ]] && tc-is-gcc; then
  423.         local version=$(gcc-version);
  424.         local major=${version%.*};
  425.         local minor=${version#*.};
  426.         local min_major=${KDE_GCC_MINIMAL%.*};
  427.         local min_minor=${KDE_GCC_MINIMAL#*.};
  428.         debug-print "GCC version check activated";
  429.         debug-print "Version detected:";
  430.         debug-print "   - Full: ${version}";
  431.         debug-print "   - Major: ${major}";
  432.         debug-print "   - Minor: ${minor}";
  433.         debug-print "Version required:";
  434.         debug-print "   - Major: ${min_major}";
  435.         debug-print "   - Minor: ${min_minor}";
  436.         [[ ${major} -lt ${min_major} ]] || ( [[ ${major} -eq ${min_major} && ${minor} -lt ${min_minor} ]] ) && die "Sorry, but gcc-${KDE_GCC_MINIMAL} or later is required for this package (found ${version}).";
  437.     fi
  438. }
  439. _clang_fullversion ()
  440. {
  441.     local ver="$1";
  442.     shift;
  443.     set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__");
  444.     eval echo "$ver"
  445. }
  446. _cmake_check_build_dir ()
  447. {
  448.     : ${CMAKE_USE_DIR:=${S}};
  449.     if [[ -n ${CMAKE_IN_SOURCE_BUILD} ]]; then
  450.         BUILD_DIR="${CMAKE_USE_DIR}";
  451.     else
  452.         if [[ ! -n ${BUILD_DIR} && -n ${CMAKE_BUILD_DIR} ]]; then
  453.             eqawarn "The CMAKE_BUILD_DIR variable has been renamed to BUILD_DIR.";
  454.             eqawarn "Please migrate the ebuild to use the new one.";
  455.             _RESPECT_CMAKE_BUILD_DIR=1;
  456.         fi;
  457.         if [[ -n ${_RESPECT_CMAKE_BUILD_DIR} ]]; then
  458.             BUILD_DIR=${CMAKE_BUILD_DIR:-${WORKDIR}/${P}_build};
  459.         else
  460.             : ${BUILD_DIR:=${WORKDIR}/${P}_build};
  461.         fi;
  462.     fi;
  463.     CMAKE_BUILD_DIR=${BUILD_DIR};
  464.     mkdir -p "${BUILD_DIR}" || die;
  465.     echo ">>> Working in BUILD_DIR: \"$BUILD_DIR\""
  466. }
  467. _cmake_cleanup_cmake ()
  468. {
  469.     : ${CMAKE_USE_DIR:=${S}};
  470.     if [[ "${CMAKE_REMOVE_MODULES}" == "yes" ]]; then
  471.         local name;
  472.         for name in ${CMAKE_REMOVE_MODULES_LIST};
  473.         do
  474.             find "${S}" -name ${name}.cmake -exec rm -v {} + || die;
  475.         done;
  476.     fi;
  477.     if [[ ! -e ${CMAKE_USE_DIR}/CMakeLists.txt ]]; then
  478.         eerror "Unable to locate CMakeLists.txt under:";
  479.         eerror "\"${CMAKE_USE_DIR}/CMakeLists.txt\"";
  480.         eerror "Consider not inheriting the cmake eclass.";
  481.         die "FATAL: Unable to find CMakeLists.txt";
  482.     fi;
  483.     _cmake_modify-cmakelists
  484. }
  485. _cmake_emake_src_make ()
  486. {
  487.     debug-print-function ${FUNCNAME} "$@";
  488.     [[ -e Makefile ]] || die "Makefile not found. Error during configure stage.";
  489.     if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then
  490.         emake VERBOSE=1 "$@" || die;
  491.     else
  492.         emake "$@" || die;
  493.     fi
  494. }
  495. _cmake_execute_optionally ()
  496. {
  497.     local phase="$1";
  498.     shift;
  499.     if [[ ${WANT_CMAKE} = always ]]; then
  500.         enable_cmake-utils_${phase} "$@";
  501.     else
  502.         use ${WANT_CMAKE} && enable_cmake-utils_${phase} "$@";
  503.     fi
  504. }
  505. _cmake_generator_to_use ()
  506. {
  507.     local generator_name;
  508.     case ${CMAKE_MAKEFILE_GENERATOR} in
  509.         ninja)
  510.             if ! ROOT=/ has_version dev-util/ninja; then
  511.                 die "CMAKE_MAKEFILE_GENERATOR is set to ninja, but ninja is not installed. Please install dev-util/ninja or unset CMAKE_MAKEFILE_GENERATOR.";
  512.             fi;
  513.             generator_name="Ninja"
  514.         ;;
  515.         emake)
  516.             generator_name="Unix Makefiles"
  517.         ;;
  518.         *)
  519.             eerror "Unknown value for \${CMAKE_MAKEFILE_GENERATOR}";
  520.             die "Value ${CMAKE_MAKEFILE_GENERATOR} is not supported"
  521.         ;;
  522.     esac;
  523.     echo ${generator_name}
  524. }
  525. _cmake_modify-cmakelists ()
  526. {
  527.     debug-print-function ${FUNCNAME} "$@";
  528.     grep -qs "<<< Gentoo configuration >>>" "${CMAKE_USE_DIR}"/CMakeLists.txt && return 0;
  529.     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";
  530.     cat >> "${CMAKE_USE_DIR}"/CMakeLists.txt  <<-_EOF_ ||
  531.  
  532. MESSAGE(STATUS "<<< Gentoo configuration >>>
  533. Build type      \${CMAKE_BUILD_TYPE}
  534. Install path    \${CMAKE_INSTALL_PREFIX}
  535. Compiler flags:
  536. C               \${CMAKE_C_FLAGS}
  537. C++             \${CMAKE_CXX_FLAGS}
  538. Linker flags:
  539. Executable      \${CMAKE_EXE_LINKER_FLAGS}
  540. Module          \${CMAKE_MODULE_LINKER_FLAGS}
  541. Shared          \${CMAKE_SHARED_LINKER_FLAGS}\n")
  542. _EOF_
  543.  die
  544. }
  545. _cmake_ninja_src_make ()
  546. {
  547.     debug-print-function ${FUNCNAME} "$@";
  548.     [[ -e build.ninja ]] || die "build.ninja not found. Error during configure stage.";
  549.     _ninjaopts_from_makeopts;
  550.     if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then
  551.         set -- ninja ${NINJAOPTS} -v "$@";
  552.     else
  553.         set -- ninja ${NINJAOPTS} "$@";
  554.     fi;
  555.     echo "$@";
  556.     "$@" || die
  557. }
  558. _cmake_use_me_now ()
  559. {
  560.     debug-print-function ${FUNCNAME} "$@";
  561.     local arg=$2;
  562.     [[ ! -z $3 ]] && arg=$3;
  563.     [[ ${EAPI} == [2345] ]] || die "${FUNCNAME[1]} is banned in EAPI 6 and later";
  564.     local uper capitalised x;
  565.     [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]";
  566.     if [[ ! -z $3 ]]; then
  567.         echo "-D$1$3=$(use $2 && echo ON || echo OFF)";
  568.     else
  569.         uper=$(echo ${2} | tr '[:lower:]' '[:upper:]');
  570.         capitalised=$(echo ${2} | sed 's/\<\(.\)\([^ ]*\)/\u\1\L\2/g');
  571.         for x in $2 $uper $capitalised;
  572.         do
  573.             echo "-D$1$x=$(use $2 && echo ON || echo OFF) ";
  574.         done;
  575.     fi
  576. }
  577. _cmake_use_me_now_inverted ()
  578. {
  579.     debug-print-function ${FUNCNAME} "$@";
  580.     local arg=$2;
  581.     [[ ! -z $3 ]] && arg=$3;
  582.     if [[ ${EAPI} != [2345] && "${FUNCNAME[1]}" != cmake-utils_use_find_package ]]; then
  583.         die "${FUNCNAME[1]} is banned in EAPI 6 and later";
  584.     fi;
  585.     local uper capitalised x;
  586.     [[ -z $2 ]] && die "cmake-utils_use-$1 <USE flag> [<flag name>]";
  587.     if [[ ! -z $3 ]]; then
  588.         echo "-D$1$3=$(use $2 && echo OFF || echo ON)";
  589.     else
  590.         uper=$(echo ${2} | tr '[:lower:]' '[:upper:]');
  591.         capitalised=$(echo ${2} | sed 's/\<\(.\)\([^ ]*\)/\u\1\L\2/g');
  592.         for x in $2 $uper $capitalised;
  593.         do
  594.             echo "-D$1$x=$(use $2 && echo OFF || echo ON) ";
  595.         done;
  596.     fi
  597. }
  598. _eutils_eprefix_init ()
  599. {
  600.     has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}}
  601. }
  602. _filter-hardened ()
  603. {
  604.     local f;
  605.     for f in "$@";
  606.     do
  607.         case "${f}" in
  608.             -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie)
  609.                 gcc-specs-pie || continue;
  610.                 is-flagq -nopie || append-flags -nopie
  611.             ;;
  612.             -fstack-protector)
  613.                 gcc-specs-ssp || continue;
  614.                 is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector)
  615.             ;;
  616.             -fstack-protector-all)
  617.                 gcc-specs-ssp-to-all || continue;
  618.                 is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all)
  619.             ;;
  620.             -fno-strict-overflow)
  621.                 gcc-specs-nostrict || continue;
  622.                 is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow)
  623.             ;;
  624.         esac;
  625.     done
  626. }
  627. _filter-var ()
  628. {
  629.     local f x var=$1 new=();
  630.     shift;
  631.     for f in ${!var};
  632.     do
  633.         for x in "$@";
  634.         do
  635.             [[ ${f} == ${x} ]] && continue 2;
  636.         done;
  637.         new+=("${f}");
  638.     done;
  639.     eval export ${var}=\""${new[*]}"\"
  640. }
  641. _gcc-install-dir ()
  642. {
  643.     echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null |      awk '$1=="install:" {print $2}')"
  644. }
  645. _gcc-specs-directive_raw ()
  646. {
  647.     local cc=$(tc-getCC);
  648.     local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
  649.     ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
  650. $1=="*"directive":"  { pspec=spec; spec=""; outside=0; next }
  651.     outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
  652.     spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
  653.     { spec=spec $0 }
  654. END { print spec }';
  655.     return 0
  656. }
  657. _gcc-specs-exists ()
  658. {
  659.     [[ -f $(_gcc-install-dir)/$1 ]]
  660. }
  661. _gcc_fullversion ()
  662. {
  663.     local ver="$1";
  664.     shift;
  665.     set -- $($(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__");
  666.     eval echo "$ver"
  667. }
  668. _iconins ()
  669. {
  670.     ( local funcname=$1;
  671.     shift;
  672.     local size dir;
  673.     local context=apps;
  674.     local theme=hicolor;
  675.     while [[ $# -gt 0 ]]; do
  676.         case $1 in
  677.             -s | --size)
  678.                 if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then
  679.                     size=${2%%x*};
  680.                 else
  681.                     size=${2};
  682.                 fi;
  683.                 case ${size} in
  684.                     16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256 | 512)
  685.                         size=${size}x${size}
  686.                     ;;
  687.                     scalable)
  688.  
  689.                     ;;
  690.                     *)
  691.                         eerror "${size} is an unsupported icon size!";
  692.                         exit 1
  693.                     ;;
  694.                 esac;
  695.                 shift 2
  696.             ;;
  697.             -t | --theme)
  698.                 theme=${2};
  699.                 shift 2
  700.             ;;
  701.             -c | --context)
  702.                 context=${2};
  703.                 shift 2
  704.             ;;
  705.             *)
  706.                 if [[ -z ${size} ]]; then
  707.                     insinto /usr/share/pixmaps;
  708.                 else
  709.                     insinto /usr/share/icons/${theme}/${size}/${context};
  710.                 fi;
  711.                 if [[ ${funcname} == doicon ]]; then
  712.                     if [[ -f $1 ]]; then
  713.                         doins "${1}";
  714.                     else
  715.                         if [[ -d $1 ]]; then
  716.                             shopt -s nullglob;
  717.                             doins "${1}"/*.{png,svg};
  718.                             shopt -u nullglob;
  719.                         else
  720.                             eerror "${1} is not a valid file/directory!";
  721.                             exit 1;
  722.                         fi;
  723.                     fi;
  724.                 else
  725.                     break;
  726.                 fi;
  727.                 shift 1
  728.             ;;
  729.         esac;
  730.     done;
  731.     if [[ ${funcname} == newicon ]]; then
  732.         newins "$@";
  733.     fi ) || die
  734. }
  735. _is_flagq ()
  736. {
  737.     local x var;
  738.     eval var=\""\${$1[*]}"\";
  739.     for x in ${var};
  740.     do
  741.         [[ ${x} == $2 ]] && return 0;
  742.     done;
  743.     return 1
  744. }
  745. _l10n_variant_subdir2root ()
  746. {
  747.     local l10npart=5;
  748.     [[ ${PN} = kde4-l10n ]] && l10npart=4;
  749.     local lingua=$(kde_l10n2lingua ${1});
  750.     local src=kde-l10n-${2}-${PV};
  751.     local dest=kde-l10n-${lingua}-${PV}/${l10npart};
  752.     mkdir -p ${dest} || die "Failed to create ${dest}";
  753.     mv ${src}/${l10npart}/${2}/${lingua} ${dest}/${lingua} || die "Failed to create ${dest}/${lingua}";
  754.     cp -f ${src}/CMakeLists.txt kde-l10n-${lingua}-${PV} || die "Failed to prepare L10N=${1} subdir";
  755.     echo "add_subdirectory(${lingua})" > ${dest}/CMakeLists.txt || die "Failed to prepare ${dest}/CMakeLists.txt";
  756.     cp -f ${src}/${l10npart}/${2}/CMakeLists.txt ${dest}/${lingua} || die "Failed to create ${dest}/${lingua}/CMakeLists.txt";
  757.     sed -e "s/${2}/${lingua}/" -i ${dest}/${lingua}/CMakeLists.txt || die "Failed to prepare ${dest}/${lingua}/CMakeLists.txt";
  758.     _l10n_variant_subdir_buster ${1}
  759. }
  760. _l10n_variant_subdir_buster ()
  761. {
  762.     local l10npart=5;
  763.     [[ ${PN} = kde4-l10n ]] && l10npart=4;
  764.     local dir=kde-l10n-$(kde_l10n2lingua ${1})-${PV}/${l10npart}/$(kde_l10n2lingua ${1});
  765.     case ${l10npart} in
  766.         5)
  767.             sed -e "/^add_subdirectory(/d" -i ${dir}/CMakeLists.txt || die "Failed to cleanup ${dir} subdir"
  768.         ;;
  769.         4)
  770.             sed -e "/^macro.*subdirectory(/d" -i ${dir}/CMakeLists.txt || die "Failed to cleanup ${dir} subdir"
  771.         ;;
  772.     esac;
  773.     for subdir in $(find ${dir} -mindepth 1 -maxdepth 1 -type d | sed -e "s:^\./::");
  774.     do
  775.         echo "add_subdirectory(${subdir##*/})" >> ${dir}/CMakeLists.txt;
  776.     done
  777. }
  778. _ninjaopts_from_makeopts ()
  779. {
  780.     if [[ ${NINJAOPTS+set} == set ]]; then
  781.         return 0;
  782.     fi;
  783.     local ninjaopts=();
  784.     set -- ${MAKEOPTS};
  785.     while (( $# )); do
  786.         case $1 in
  787.             -j | -l)
  788.                 if [[ $# -eq 1 || $2 == -* ]]; then
  789.                     if [[ $1 == -j ]]; then
  790.                         ninjaopts+=($1 9999);
  791.                     else
  792.                         ninjaopts+=($1 0);
  793.                     fi;
  794.                     shift 1;
  795.                 else
  796.                     ninjaopts+=($1 $2);
  797.                     shift 2;
  798.                 fi
  799.             ;;
  800.             -j* | -l*)
  801.                 ninjaopts+=($1);
  802.                 shift 1
  803.             ;;
  804.             -k)
  805.                 ninjaopts+=($1 0);
  806.                 shift 1
  807.             ;;
  808.             *)
  809.                 shift
  810.             ;;
  811.         esac;
  812.     done;
  813.     export NINJAOPTS="${ninjaopts[*]}"
  814. }
  815. _tc-getPROG ()
  816. {
  817.     local tuple=$1;
  818.     local v var vars=$2;
  819.     local prog=($3);
  820.     var=${vars%% *};
  821.     for v in ${vars};
  822.     do
  823.         if [[ -n ${!v} ]]; then
  824.             export ${var}="${!v}";
  825.             echo "${!v}";
  826.             return 0;
  827.         fi;
  828.     done;
  829.     local search=;
  830.     [[ -n $4 ]] && search=$(type -p $4-${prog[0]});
  831.     [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p ${!tuple}-${prog[0]});
  832.     [[ -n ${search} ]] && prog[0]=${search##*/};
  833.     export ${var}="${prog[*]}";
  834.     echo "${!var}"
  835. }
  836. add_frameworks_dep ()
  837. {
  838.     debug-print-function ${FUNCNAME} "$@";
  839.     if [[ $# -gt 4 ]]; then
  840.         die "${FUNCNAME} was called with too many arguments";
  841.     fi;
  842.     local version;
  843.     if [[ -n ${3} ]]; then
  844.         version=${3};
  845.     else
  846.         if [[ ${CATEGORY} = kde-frameworks ]]; then
  847.             version=$(get_version_component_range 1-2);
  848.         else
  849.             if [[ -z "${version}" ]]; then
  850.                 version=${FRAMEWORKS_MINIMAL};
  851.             fi;
  852.         fi;
  853.     fi;
  854.     _add_category_dep kde-frameworks "${1}" "${2}" "${version}" "${4}"
  855. }
  856. add_kdeapps_dep ()
  857. {
  858.     debug-print-function ${FUNCNAME} "$@";
  859.     if [[ $# -gt 4 ]]; then
  860.         die "${FUNCNAME} was called with too many arguments";
  861.     fi;
  862.     local version;
  863.     if [[ -n ${3} ]]; then
  864.         version=${3};
  865.     else
  866.         if [[ ${CATEGORY} = kde-apps ]]; then
  867.             version=${PV};
  868.         else
  869.             if [[ -z "${version}" ]]; then
  870.                 if [[ ${PV} = 5.9999 || ${PV} = 9999 ]]; then
  871.                     version=5.9999;
  872.                 else
  873.                     version=${KDE_APPS_MINIMAL};
  874.                 fi;
  875.             fi;
  876.         fi;
  877.     fi;
  878.     _add_category_dep kde-apps "${1}" "${2}" "${version}" "${4}"
  879. }
  880. add_plasma_dep ()
  881. {
  882.     debug-print-function ${FUNCNAME} "$@";
  883.     if [[ $# -gt 4 ]]; then
  884.         die "${FUNCNAME} was called with too many arguments";
  885.     fi;
  886.     local version;
  887.     if [[ -n ${3} ]]; then
  888.         version=${3};
  889.     else
  890.         if [[ ${CATEGORY} = kde-plasma ]]; then
  891.             version=${PV};
  892.         else
  893.             if [[ -z "${version}" ]]; then
  894.                 version=${PLASMA_MINIMAL};
  895.             fi;
  896.         fi;
  897.     fi;
  898.     _add_category_dep kde-plasma "${1}" "${2}" "${version}" "${4}"
  899. }
  900. add_qt_dep ()
  901. {
  902.     debug-print-function ${FUNCNAME} "$@";
  903.     if [[ $# -gt 4 ]]; then
  904.         die "${FUNCNAME} was called with too many arguments";
  905.     fi;
  906.     local version;
  907.     if [[ -n ${3} ]]; then
  908.         version=${3};
  909.     else
  910.         if [[ -z "${version}" ]]; then
  911.             version=${QT_MINIMAL};
  912.         fi;
  913.     fi;
  914.     _add_category_dep dev-qt "${1}" "${2}" "${version}" "${4}"
  915. }
  916. all-flag-vars ()
  917. {
  918.     echo {C,CPP,CXX,CCAS,F,FC,LD}FLAGS
  919. }
  920. append-cflags ()
  921. {
  922.     [[ $# -eq 0 ]] && return 0;
  923.     export CFLAGS+=" $*";
  924.     return 0
  925. }
  926. append-cppflags ()
  927. {
  928.     [[ $# -eq 0 ]] && return 0;
  929.     export CPPFLAGS+=" $*";
  930.     return 0
  931. }
  932. append-cxxflags ()
  933. {
  934.     [[ $# -eq 0 ]] && return 0;
  935.     export CXXFLAGS+=" $*";
  936.     return 0
  937. }
  938. append-fflags ()
  939. {
  940.     [[ $# -eq 0 ]] && return 0;
  941.     export FFLAGS+=" $*";
  942.     export FCFLAGS+=" $*";
  943.     return 0
  944. }
  945. append-flags ()
  946. {
  947.     [[ $# -eq 0 ]] && return 0;
  948.     case " $* " in
  949.         *' '-[DIU]*)
  950.             eqawarn 'please use append-cppflags for preprocessor flags'
  951.         ;;
  952.         *' '-L* | *' '-Wl,*)
  953.             eqawarn 'please use append-ldflags for linker flags'
  954.         ;;
  955.     esac;
  956.     append-cflags "$@";
  957.     append-cxxflags "$@";
  958.     append-fflags "$@";
  959.     return 0
  960. }
  961. append-ldflags ()
  962. {
  963.     [[ $# -eq 0 ]] && return 0;
  964.     local flag;
  965.     for flag in "$@";
  966.     do
  967.         [[ ${flag} == -l* ]] && eqawarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS";
  968.     done;
  969.     export LDFLAGS="${LDFLAGS} $*";
  970.     return 0
  971. }
  972. append-lfs-flags ()
  973. {
  974.     [[ $# -ne 0 ]] && die "append-lfs-flags takes no arguments";
  975.     append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
  976. }
  977. append-libs ()
  978. {
  979.     [[ $# -eq 0 ]] && return 0;
  980.     local flag;
  981.     for flag in "$@";
  982.     do
  983.         if [[ -z "${flag// }" ]]; then
  984.             eqawarn "Appending an empty argument to LIBS is invalid! Skipping.";
  985.             continue;
  986.         fi;
  987.         case $flag in
  988.             -[lL]*)
  989.                 export LIBS="${LIBS} ${flag}"
  990.             ;;
  991.             -*)
  992.                 eqawarn "Appending non-library to LIBS (${flag}); Other linker flags should be passed via LDFLAGS";
  993.                 export LIBS="${LIBS} ${flag}"
  994.             ;;
  995.             *)
  996.                 export LIBS="${LIBS} -l${flag}"
  997.             ;;
  998.         esac;
  999.     done;
  1000.     return 0
  1001. }
  1002. built_with_use ()
  1003. {
  1004.     _eutils_eprefix_init;
  1005.     local hidden="no";
  1006.     if [[ $1 == "--hidden" ]]; then
  1007.         hidden="yes";
  1008.         shift;
  1009.     fi;
  1010.     local missing_action="die";
  1011.     if [[ $1 == "--missing" ]]; then
  1012.         missing_action=$2;
  1013.         shift;
  1014.         shift;
  1015.         case ${missing_action} in
  1016.             true | false | die)
  1017.  
  1018.             ;;
  1019.             *)
  1020.                 die "unknown action '${missing_action}'"
  1021.             ;;
  1022.         esac;
  1023.     fi;
  1024.     local opt=$1;
  1025.     [[ ${opt:0:1} = "-" ]] && shift || opt="-a";
  1026.     local PKG=$(best_version $1);
  1027.     [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
  1028.     shift;
  1029.     local USEFILE=${EROOT}/var/db/pkg/${PKG}/USE;
  1030.     local IUSEFILE=${EROOT}/var/db/pkg/${PKG}/IUSE;
  1031.     if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
  1032.         case ${missing_action} in
  1033.             true)
  1034.                 return 0
  1035.             ;;
  1036.             false)
  1037.                 return 1
  1038.             ;;
  1039.             die)
  1040.                 die "Unable to determine what USE flags $PKG was built with"
  1041.             ;;
  1042.         esac;
  1043.     fi;
  1044.     if [[ ${hidden} == "no" ]]; then
  1045.         local IUSE_BUILT=($(<"${IUSEFILE}"));
  1046.         local expand;
  1047.         for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
  1048.         do
  1049.             if [[ $1 == ${expand}_* ]]; then
  1050.                 expand="";
  1051.                 break;
  1052.             fi;
  1053.         done;
  1054.         if [[ -n ${expand} ]]; then
  1055.             if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
  1056.                 case ${missing_action} in
  1057.                     true)
  1058.                         return 0
  1059.                     ;;
  1060.                     false)
  1061.                         return 1
  1062.                     ;;
  1063.                     die)
  1064.                         die "$PKG does not actually support the $1 USE flag!"
  1065.                     ;;
  1066.                 esac;
  1067.             fi;
  1068.         fi;
  1069.     fi;
  1070.     local USE_BUILT=$(<${USEFILE});
  1071.     while [[ $# -gt 0 ]]; do
  1072.         if [[ ${opt} = "-o" ]]; then
  1073.             has $1 ${USE_BUILT} && return 0;
  1074.         else
  1075.             has $1 ${USE_BUILT} || return 1;
  1076.         fi;
  1077.         shift;
  1078.     done;
  1079.     [[ ${opt} = "-a" ]]
  1080. }
  1081. check_license ()
  1082. {
  1083.     die "you no longer need this as portage supports ACCEPT_LICENSE itself"
  1084. }
  1085. clang-fullversion ()
  1086. {
  1087.     _clang_fullversion '$1.$2.$3' "$@"
  1088. }
  1089. clang-major-version ()
  1090. {
  1091.     _clang_fullversion '$1' "$@"
  1092. }
  1093. clang-micro-version ()
  1094. {
  1095.     _clang_fullversion '$3' "$@"
  1096. }
  1097. clang-minor-version ()
  1098. {
  1099.     _clang_fullversion '$2' "$@"
  1100. }
  1101. clang-version ()
  1102. {
  1103.     _clang_fullversion '$1.$2' "$@"
  1104. }
  1105. cmake-utils_src_compile ()
  1106. {
  1107.     _cmake_execute_optionally "src_compile" "$@"
  1108. }
  1109. cmake-utils_src_configure ()
  1110. {
  1111.     _cmake_execute_optionally "src_configure" "$@"
  1112. }
  1113. cmake-utils_src_install ()
  1114. {
  1115.     _cmake_execute_optionally "src_install" "$@"
  1116. }
  1117. cmake-utils_src_make ()
  1118. {
  1119.     debug-print-function ${FUNCNAME} "$@";
  1120.     _cmake_check_build_dir;
  1121.     pushd "${BUILD_DIR}" > /dev/null || die;
  1122.     _cmake_${CMAKE_MAKEFILE_GENERATOR}_src_make "$@";
  1123.     popd > /dev/null || die
  1124. }
  1125. cmake-utils_src_prepare ()
  1126. {
  1127.     _cmake_execute_optionally "src_prepare" "$@"
  1128. }
  1129. cmake-utils_src_test ()
  1130. {
  1131.     _cmake_execute_optionally "src_test" "$@"
  1132. }
  1133. cmake-utils_use ()
  1134. {
  1135.     _cmake_use_me_now "" "$@"
  1136. }
  1137. cmake-utils_use_build ()
  1138. {
  1139.     _cmake_use_me_now BUILD_ "$@"
  1140. }
  1141. cmake-utils_use_disable ()
  1142. {
  1143.     _cmake_use_me_now_inverted DISABLE_ "$@"
  1144. }
  1145. cmake-utils_use_enable ()
  1146. {
  1147.     _cmake_use_me_now ENABLE_ "$@"
  1148. }
  1149. cmake-utils_use_find_package ()
  1150. {
  1151.     if [[ ${EAPI} != [2345] && "$#" != 2 ]]; then
  1152.         die "Usage: cmake-utils_use_find_package <USE flag> <package name>";
  1153.     fi;
  1154.     _cmake_use_me_now_inverted CMAKE_DISABLE_FIND_PACKAGE_ "$@"
  1155. }
  1156. cmake-utils_use_has ()
  1157. {
  1158.     _cmake_use_me_now HAVE_ "$@"
  1159. }
  1160. cmake-utils_use_no ()
  1161. {
  1162.     _cmake_use_me_now_inverted NO_ "$@"
  1163. }
  1164. cmake-utils_use_use ()
  1165. {
  1166.     _cmake_use_me_now USE_ "$@"
  1167. }
  1168. cmake-utils_use_want ()
  1169. {
  1170.     _cmake_use_me_now WANT_ "$@"
  1171. }
  1172. cmake-utils_use_with ()
  1173. {
  1174.     _cmake_use_me_now WITH_ "$@"
  1175. }
  1176. cmake-utils_useno ()
  1177. {
  1178.     _cmake_use_me_now_inverted "" "$@"
  1179. }
  1180. cmake_comment_add_subdirectory ()
  1181. {
  1182.     if [[ -z ${1} ]]; then
  1183.         die "comment_add_subdirectory must be passed the directory name to comment";
  1184.     fi;
  1185.     if [[ -e "CMakeLists.txt" ]]; then
  1186.         sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${1//\//\\/}[[:space:]]*)/I s/^/#DONOTCOMPILE /" -i CMakeLists.txt || die "failed to comment add_subdirectory(${1})";
  1187.     fi
  1188. }
  1189. comment_add_subdirectory ()
  1190. {
  1191.     [[ ${EAPI} == [2345] ]] || die "comment_add_subdirectory is banned in EAPI 6 and later - use cmake_comment_add_subdirectory instead";
  1192.     cmake_comment_add_subdirectory "$@"
  1193. }
  1194. delete_all_version_separators ()
  1195. {
  1196.     replace_all_version_separators "" "${1}"
  1197. }
  1198. delete_version_separator ()
  1199. {
  1200.     replace_version_separator "${1}" "" "${2}"
  1201. }
  1202. doicon ()
  1203. {
  1204.     _iconins ${FUNCNAME} "$@"
  1205. }
  1206. domenu ()
  1207. {
  1208.     ( local i j ret=0;
  1209.     insinto /usr/share/applications;
  1210.     for i in "$@";
  1211.     do
  1212.         if [[ -f ${i} ]]; then
  1213.             doins "${i}";
  1214.             ((ret+=$?));
  1215.         else
  1216.             if [[ -d ${i} ]]; then
  1217.                 for j in "${i}"/*.desktop;
  1218.                 do
  1219.                     doins "${j}";
  1220.                     ((ret+=$?));
  1221.                 done;
  1222.             else
  1223.                 ((++ret));
  1224.             fi;
  1225.         fi;
  1226.     done;
  1227.     exit ${ret} )
  1228. }
  1229. eapply ()
  1230. {
  1231.     local failed;
  1232.     local -x LC_COLLATE=POSIX;
  1233.     function _eapply_patch ()
  1234.     {
  1235.         local f=${1};
  1236.         local prefix=${2};
  1237.         started_applying=1;
  1238.         ebegin "${prefix:-Applying }${f##*/}";
  1239.         patch -p1 -f -s -g0 --no-backup-if-mismatch "${patch_options[@]}" < "${f}";
  1240.         failed=${?};
  1241.         if ! eend "${failed}"; then
  1242.             __helpers_die "patch -p1 ${patch_options[*]} failed with ${f}";
  1243.         fi
  1244.     };
  1245.     local patch_options=() files=();
  1246.     local i found_doublehyphen;
  1247.     for ((i = 1; i <= ${#@}; ++i ))
  1248.     do
  1249.         if [[ ${@:i:1} == -- ]]; then
  1250.             patch_options=("${@:1:i-1}");
  1251.             files=("${@:i+1}");
  1252.             found_doublehyphen=1;
  1253.             break;
  1254.         fi;
  1255.     done;
  1256.     if [[ -z ${found_doublehyphen} ]]; then
  1257.         for ((i = 1; i <= ${#@}; ++i ))
  1258.         do
  1259.             if [[ ${@:i:1} != -* ]]; then
  1260.                 patch_options=("${@:1:i-1}");
  1261.                 files=("${@:i}");
  1262.                 break;
  1263.             fi;
  1264.         done;
  1265.         for i in "${files[@]}";
  1266.         do
  1267.             if [[ ${i} == -* ]]; then
  1268.                 die "eapply: all options must be passed before non-options";
  1269.             fi;
  1270.         done;
  1271.     fi;
  1272.     if [[ -z ${files[@]} ]]; then
  1273.         die "eapply: no files specified";
  1274.     fi;
  1275.     local f;
  1276.     for f in "${files[@]}";
  1277.     do
  1278.         if [[ -d ${f} ]]; then
  1279.             function _eapply_get_files ()
  1280.             {
  1281.                 local LC_ALL=POSIX;
  1282.                 local prev_shopt=$(shopt -p nullglob);
  1283.                 shopt -s nullglob;
  1284.                 local f;
  1285.                 for f in "${1}"/*;
  1286.                 do
  1287.                     if [[ ${f} == *.diff || ${f} == *.patch ]]; then
  1288.                         files+=("${f}");
  1289.                     fi;
  1290.                 done;
  1291.                 ${prev_shopt}
  1292.             };
  1293.             local files=();
  1294.             _eapply_get_files "${f}";
  1295.             [[ -z ${files[@]} ]] && die "No *.{patch,diff} files in directory ${f}";
  1296.             einfo "Applying patches from ${f} ...";
  1297.             local f2;
  1298.             for f2 in "${files[@]}";
  1299.             do
  1300.                 _eapply_patch "${f2}" '  ';
  1301.                 [[ ${failed} -ne 0 ]] && return "${failed}";
  1302.             done;
  1303.         else
  1304.             _eapply_patch "${f}";
  1305.             [[ ${failed} -ne 0 ]] && return "${failed}";
  1306.         fi;
  1307.     done;
  1308.     return 0
  1309. }
  1310. eapply_user ()
  1311. {
  1312.     [[ ${EBUILD_PHASE} == prepare ]] || die "eapply_user() called during invalid phase: ${EBUILD_PHASE}";
  1313.     local tagfile=${T}/.portage_user_patches_applied;
  1314.     [[ -f ${tagfile} ]] && return;
  1315.      >> "${tagfile}";
  1316.     local basedir=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
  1317.     local d applied;
  1318.     for d in "${basedir}"/${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT%/*}};
  1319.     do
  1320.         if [[ -d ${d} ]]; then
  1321.             eapply "${d}";
  1322.             applied=1;
  1323.         fi;
  1324.     done;
  1325.     [[ -n ${applied} ]] && ewarn "User patches applied."
  1326. }
  1327. ebeep ()
  1328. {
  1329.     ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
  1330. }
  1331. econf_build ()
  1332. {
  1333.     local CBUILD=${CBUILD:-${CHOST}};
  1334.     tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
  1335. }
  1336. ecvs_clean ()
  1337. {
  1338.     [[ $# -eq 0 ]] && set -- .;
  1339.     find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
  1340.     find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
  1341. }
  1342. edos2unix ()
  1343. {
  1344.     [[ $# -eq 0 ]] && return 0;
  1345.     sed -i 's/\r$//' -- "$@" || die
  1346. }
  1347. egit_clean ()
  1348. {
  1349.     [[ $# -eq 0 ]] && set -- .;
  1350.     find "$@" -type d -name '.git*' -prune -print0 | xargs -0 rm -rf
  1351. }
  1352. einstalldocs ()
  1353. {
  1354.     ( if ! declare -p DOCS &> /dev/null; then
  1355.         local d;
  1356.         for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
  1357.         do
  1358.             [[ -s ${d} ]] && docinto / && dodoc "${d}";
  1359.         done;
  1360.     else
  1361.         if [[ $(declare -p DOCS) == "declare -a"* ]]; then
  1362.             [[ -n ${DOCS[@]} ]] && docinto / && dodoc -r "${DOCS[@]}";
  1363.         else
  1364.             [[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS};
  1365.         fi;
  1366.     fi );
  1367.     ( if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
  1368.         [[ -n ${HTML_DOCS[@]} ]] && docinto html && dodoc -r "${HTML_DOCS[@]}";
  1369.     else
  1370.         [[ -n ${HTML_DOCS} ]] && docinto html && dodoc -r ${HTML_DOCS};
  1371.     fi )
  1372. }
  1373. emktemp ()
  1374. {
  1375.     local exe="touch";
  1376.     [[ $1 == -d ]] && exe="mkdir" && shift;
  1377.     local topdir=$1;
  1378.     if [[ -z ${topdir} ]]; then
  1379.         [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
  1380.     fi;
  1381.     if ! type -P mktemp > /dev/null; then
  1382.         local tmp=/;
  1383.         while [[ -e ${tmp} ]]; do
  1384.             tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
  1385.         done;
  1386.         ${exe} "${tmp}" || ${exe} -p "${tmp}";
  1387.         echo "${tmp}";
  1388.     else
  1389.         if [[ ${exe} == "touch" ]]; then
  1390.             TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
  1391.         else
  1392.             TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
  1393.         fi;
  1394.     fi
  1395. }
  1396. enable_cmake-utils_src_compile ()
  1397. {
  1398.     debug-print-function ${FUNCNAME} "$@";
  1399.     cmake-utils_src_make "$@"
  1400. }
  1401. enable_cmake-utils_src_configure ()
  1402. {
  1403.     debug-print-function ${FUNCNAME} "$@";
  1404.     [[ ${EAPI} == [2345] ]] && _cmake_cleanup_cmake;
  1405.     _cmake_check_build_dir;
  1406.     local -x XDG_CONFIG_HOME="${T}";
  1407.     if [[ ${CMAKE_BUILD_TYPE} = Gentoo ]]; then
  1408.         if ! has debug ${IUSE//+} || ! use debug; then
  1409.             local CPPFLAGS=${CPPFLAGS};
  1410.             append-cppflags -DNDEBUG;
  1411.         fi;
  1412.     fi;
  1413.     local build_rules=${BUILD_DIR}/gentoo_rules.cmake;
  1414.     local includes=;
  1415.     if [[ ${PN} == cmake ]]; then
  1416.         if $(version_is_at_least 3.4.0 $(get_version_component_range 1-3 ${PV})); then
  1417.             includes="<INCLUDES>";
  1418.         fi;
  1419.     else
  1420.         if ROOT=/ has_version \>=dev-util/cmake-3.4.0_rc1; then
  1421.             includes="<INCLUDES>";
  1422.         fi;
  1423.     fi;
  1424.     cat > "${build_rules}"  <<-_EOF_ ||
  1425. SET (CMAKE_AR $(type -P $(tc-getAR)) CACHE FILEPATH "Archive manager" FORCE)
  1426. SET (CMAKE_ASM_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${includes} ${CFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "ASM compile command" FORCE)
  1427. SET (CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${includes} ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" FORCE)
  1428. SET (CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> ${includes} ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" FORCE)
  1429. SET (CMAKE_Fortran_COMPILE_OBJECT "<CMAKE_Fortran_COMPILER> <DEFINES> ${includes} ${FCFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "Fortran compile command" FORCE)
  1430. SET (CMAKE_RANLIB $(type -P $(tc-getRANLIB)) CACHE FILEPATH "Archive index generator" FORCE)
  1431. SET (PKG_CONFIG_EXECUTABLE $(type -P $(tc-getPKG_CONFIG)) CACHE FILEPATH "pkg-config executable" FORCE)
  1432. _EOF_
  1433.  die
  1434.     local toolchain_file=${BUILD_DIR}/gentoo_toolchain.cmake;
  1435.     cat > ${toolchain_file}  <<-_EOF_ ||
  1436. SET (CMAKE_C_COMPILER $(tc-getCC))
  1437. SET (CMAKE_CXX_COMPILER $(tc-getCXX))
  1438. SET (CMAKE_Fortran_COMPILER $(tc-getFC))
  1439. _EOF_
  1440.  die
  1441.     if tc-is-cross-compiler; then
  1442.         local sysname;
  1443.         case "${KERNEL:-linux}" in
  1444.             Cygwin)
  1445.                 sysname="CYGWIN_NT-5.1"
  1446.             ;;
  1447.             HPUX)
  1448.                 sysname="HP-UX"
  1449.             ;;
  1450.             linux)
  1451.                 sysname="Linux"
  1452.             ;;
  1453.             Winnt)
  1454.                 sysname="Windows";
  1455.                 cat >> "${toolchain_file}"  <<-_EOF_ ||
  1456. SET (CMAKE_RC_COMPILER $(tc-getRC))
  1457. _EOF_
  1458.  die
  1459.             ;;
  1460.             *)
  1461.                 sysname="${KERNEL}"
  1462.             ;;
  1463.         esac
  1464.         cat >> "${toolchain_file}"  <<-_EOF_ ||
  1465. SET (CMAKE_SYSTEM_NAME "${sysname}")
  1466. _EOF_
  1467.  die
  1468.         if [ "${SYSROOT:-/}" != "/" ]; then
  1469.             cat >> "${toolchain_file}"  <<-_EOF_ ||
  1470. set(CMAKE_FIND_ROOT_PATH "${SYSROOT}")
  1471. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  1472. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  1473. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  1474. _EOF_
  1475.  die;
  1476.         fi;
  1477.     fi
  1478.     [[ ${EAPI} == 2 ]] && ! use prefix && local EPREFIX=;
  1479.     if [[ -n ${EPREFIX} ]]; then
  1480.         cat >> "${build_rules}"  <<-_EOF_ ||
  1481. # in Prefix we need rpath and must ensure cmake gets our default linker path
  1482. # right ... except for Darwin hosts
  1483. IF (NOT APPLE)
  1484. SET (CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
  1485. SET (CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH "${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)"
  1486. CACHE STRING "" FORCE)
  1487.  
  1488. ELSE ()
  1489.  
  1490. SET(CMAKE_PREFIX_PATH "${EPREFIX}${PREFIX}" CACHE STRING "" FORCE)
  1491. SET(CMAKE_SKIP_BUILD_RPATH OFF CACHE BOOL "" FORCE)
  1492. SET(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
  1493. SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE CACHE BOOL "")
  1494. 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)
  1495. SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE)
  1496. SET(CMAKE_INSTALL_NAME_DIR "${EPREFIX}${PREFIX}/lib" CACHE STRING "" FORCE)
  1497.  
  1498. ENDIF (NOT APPLE)
  1499. _EOF_
  1500.  die;
  1501.     fi
  1502.     local common_config=${BUILD_DIR}/gentoo_common_config.cmake;
  1503.     local libdir=$(get_libdir);
  1504.     cat > "${common_config}"  <<-_EOF_ ||
  1505. SET (LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE)
  1506. SET (CMAKE_INSTALL_LIBDIR ${libdir} CACHE PATH "Output directory for libraries")
  1507. _EOF_
  1508.  die
  1509.     [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && echo 'SET (CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}";
  1510.     local mycmakeargstype=$(declare -p mycmakeargs 2>&-);
  1511.     if [[ "${mycmakeargstype}" != "declare -a mycmakeargs="* ]]; then
  1512.         if [[ -n "${mycmakeargstype}" ]]; then
  1513.             if [[ ${EAPI} == [2345] ]]; then
  1514.                 eqawarn "Declaring mycmakeargs as a variable is deprecated. Please use an array instead.";
  1515.             else
  1516.                 die "Declaring mycmakeargs as a variable is banned in EAPI=${EAPI}. Please use an array instead.";
  1517.             fi;
  1518.         fi;
  1519.         local mycmakeargs_local=(${mycmakeargs});
  1520.     else
  1521.         local mycmakeargs_local=("${mycmakeargs[@]}");
  1522.     fi;
  1523.     if [[ ${CMAKE_WARN_UNUSED_CLI} == no ]]; then
  1524.         local warn_unused_cli="--no-warn-unused-cli";
  1525.     else
  1526.         local warn_unused_cli="";
  1527.     fi;
  1528.     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}");
  1529.     if [[ -n "${CMAKE_EXTRA_CACHE_FILE}" ]]; then
  1530.         cmakeargs+=(-C "${CMAKE_EXTRA_CACHE_FILE}");
  1531.     fi;
  1532.     pushd "${BUILD_DIR}" > /dev/null || die;
  1533.     debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is ${mycmakeargs_local[*]}";
  1534.     echo "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}";
  1535.     "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}" || die "cmake failed";
  1536.     popd > /dev/null || die
  1537. }
  1538. enable_cmake-utils_src_install ()
  1539. {
  1540.     debug-print-function ${FUNCNAME} "$@";
  1541.     _cmake_check_build_dir;
  1542.     pushd "${BUILD_DIR}" > /dev/null || die;
  1543.     DESTDIR="${D}" ${CMAKE_MAKEFILE_GENERATOR} install "$@" || die "died running ${CMAKE_MAKEFILE_GENERATOR} install";
  1544.     popd > /dev/null || die;
  1545.     pushd "${S}" > /dev/null || die;
  1546.     einstalldocs;
  1547.     popd > /dev/null || die
  1548. }
  1549. enable_cmake-utils_src_prepare ()
  1550. {
  1551.     debug-print-function ${FUNCNAME} "$@";
  1552.     pushd "${S}" > /dev/null || die;
  1553.     if [[ ${EAPI} != [2345] ]]; then
  1554.         default_src_prepare;
  1555.         _cmake_cleanup_cmake;
  1556.     else
  1557.         debug-print "$FUNCNAME: PATCHES=$PATCHES";
  1558.         [[ -n ${PATCHES[@]} ]] && epatch "${PATCHES[@]}";
  1559.         debug-print "$FUNCNAME: applying user patches";
  1560.         epatch_user;
  1561.     fi;
  1562.     popd > /dev/null || die
  1563. }
  1564. enable_cmake-utils_src_test ()
  1565. {
  1566.     debug-print-function ${FUNCNAME} "$@";
  1567.     _cmake_check_build_dir;
  1568.     pushd "${BUILD_DIR}" > /dev/null || die;
  1569.     [[ -e CTestTestfile.cmake ]] || {
  1570.         echo "No tests found. Skipping.";
  1571.         return 0
  1572.     };
  1573.     [[ -n ${TEST_VERBOSE} ]] && myctestargs+=(--extra-verbose --output-on-failure);
  1574.     echo ctest "${myctestargs[@]}" "$@";
  1575.     if ctest "${myctestargs[@]}" "$@"; then
  1576.         einfo "Tests succeeded.";
  1577.         popd > /dev/null || die;
  1578.         return 0;
  1579.     else
  1580.         if [[ -n "${CMAKE_YES_I_WANT_TO_SEE_THE_TEST_LOG}" ]]; then
  1581.             eerror "Tests failed. Test log ${BUILD_DIR}/Testing/Temporary/LastTest.log follows:";
  1582.             eerror "--START TEST LOG--------------------------------------------------------------";
  1583.             cat "${BUILD_DIR}/Testing/Temporary/LastTest.log";
  1584.             eerror "--END TEST LOG----------------------------------------------------------------";
  1585.             die "Tests failed.";
  1586.         else
  1587.             die "Tests failed. When you file a bug, please attach the following file: \n\t${BUILD_DIR}/Testing/Temporary/LastTest.log";
  1588.         fi;
  1589.         popd > /dev/null || die;
  1590.         return 1;
  1591.     fi
  1592. }
  1593. epatch ()
  1594. {
  1595.     function _epatch_draw_line ()
  1596.     {
  1597.         [[ -z $1 ]] && set "$(printf "%65s" '')";
  1598.         echo "${1//?/=}"
  1599.     };
  1600.     unset P4CONFIG P4PORT P4USER;
  1601.     local EPATCH_OPTS=(${EPATCH_OPTS[*]});
  1602.     while [[ $# -gt 0 ]]; do
  1603.         case $1 in
  1604.             -*)
  1605.                 EPATCH_OPTS+=("$1")
  1606.             ;;
  1607.             *)
  1608.                 break
  1609.             ;;
  1610.         esac;
  1611.         shift;
  1612.     done;
  1613.     if [[ $# -gt 1 ]]; then
  1614.         local m;
  1615.         for m in "$@";
  1616.         do
  1617.             epatch "${m}";
  1618.         done;
  1619.         return 0;
  1620.     fi;
  1621.     local SINGLE_PATCH="no";
  1622.     [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}";
  1623.     if [[ -f $1 ]]; then
  1624.         SINGLE_PATCH="yes";
  1625.         set -- "$1";
  1626.         local EPATCH_SUFFIX=$1;
  1627.     else
  1628.         if [[ -d $1 ]]; then
  1629.             evar_push_set LC_COLLATE C;
  1630.             set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
  1631.            evar_pop;
  1632.        else
  1633.            if [[ -f ${EPATCH_SOURCE}/$1 ]]; then
  1634.                epatch "${EPATCH_SOURCE}/$1";
  1635.                return $?;
  1636.            else
  1637.                [[ $# -ne 0 ]] && EPATCH_SOURCE=$1;
  1638.                echo;
  1639.                eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:";
  1640.                eerror;
  1641.                eerror "  ${EPATCH_SOURCE}";
  1642.                eerror "  ( ${EPATCH_SOURCE##*/} )";
  1643.                echo;
  1644.                die "Cannot find \$EPATCH_SOURCE!";
  1645.            fi;
  1646.        fi;
  1647.    fi;
  1648.    EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
  1649.    local PIPE_CMD;
  1650.    case ${EPATCH_SUFFIX##*\.} in
  1651.        xz)
  1652.            PIPE_CMD="xz -dc"
  1653.        ;;
  1654.        lzma)
  1655.            PIPE_CMD="lzma -dc"
  1656.        ;;
  1657.        bz2)
  1658.            PIPE_CMD="bzip2 -dc"
  1659.        ;;
  1660.        gz | Z | z)
  1661.            PIPE_CMD="gzip -dc"
  1662.        ;;
  1663.        ZIP | zip)
  1664.            PIPE_CMD="unzip -p"
  1665.        ;;
  1666.        *)
  1667.  
  1668.        ;;
  1669.    esac;
  1670.    [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}";
  1671.    local x;
  1672.    for x in "$@";
  1673.    do
  1674.        [[ ! -f ${x} ]] && continue;
  1675.        local patchname=${x##*/};
  1676.        local a=${patchname#*_};
  1677.        a=${a%%_*};
  1678.        if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then
  1679.            continue;
  1680.        fi;
  1681.        if [[ -n ${EPATCH_EXCLUDE}${EPATCH_USER_EXCLUDE} ]]; then
  1682.            eshopts_push -o noglob;
  1683.            local ex;
  1684.            for ex in ${EPATCH_EXCLUDE};
  1685.            do
  1686.                if [[ ${patchname} == ${ex} ]]; then
  1687.                    einfo "  Skipping ${patchname} due to EPATCH_EXCLUDE ...";
  1688.                    eshopts_pop;
  1689.                    continue 2;
  1690.                fi;
  1691.            done;
  1692.            for ex in ${EPATCH_USER_EXCLUDE};
  1693.            do
  1694.                if [[ ${patchname} == ${ex} ]]; then
  1695.                    einfo "  Skipping ${patchname} due to EPATCH_USER_EXCLUDE ...";
  1696.                    eshopts_pop;
  1697.                    continue 2;
  1698.                fi;
  1699.            done;
  1700.            eshopts_pop;
  1701.        fi;
  1702.        if [[ ${SINGLE_PATCH} == "yes" ]]; then
  1703.            if [[ -n ${EPATCH_SINGLE_MSG} ]]; then
  1704.                einfo "${EPATCH_SINGLE_MSG}";
  1705.            else
  1706.                einfo "Applying ${patchname} ...";
  1707.            fi;
  1708.        else
  1709.            einfo "  ${patchname} ...";
  1710.        fi;
  1711.        local patch="patch";
  1712.        eval $(alias patch 2>/dev/null | sed 's:^alias ::');
  1713.        local STDERR_TARGET="${T}/${patchname}.out";
  1714.        if [[ -e ${STDERR_TARGET} ]]; then
  1715.            STDERR_TARGET="${T}/${patchname}-$$.out";
  1716.        fi;
  1717.        printf "***** %s *****\nPWD: %s\nPATCH TOOL: %s -> %s\nVERSION INFO:\n%s\n\n" "${patchname}" "${PWD}" "${patch}" "$(type -P "${patch}")" "$(${patch} --version)" > "${STDERR_TARGET}";
  1718.        local count=0;
  1719.        local PATCH_TARGET;
  1720.        if [[ -n ${PIPE_CMD} ]]; then
  1721.            PATCH_TARGET="${T}/$$.patch";
  1722.            echo "PIPE_COMMAND:  ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}";
  1723.            if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then
  1724.                echo;
  1725.                eerror "Could not extract patch!";
  1726.                count=5;
  1727.                break;
  1728.            fi;
  1729.        else
  1730.            PATCH_TARGET=${x};
  1731.        fi;
  1732.        local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
  1733.        if [[ -n ${abs_paths} ]]; then
  1734.            count=1;
  1735.            printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}";
  1736.        fi;
  1737.         local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}");
  1738.        if [[ -n ${rel_paths} ]]; then
  1739.            echo;
  1740.            eerror "Rejected Patch: ${patchname} !";
  1741.            eerror " ( ${PATCH_TARGET} )";
  1742.            eerror;
  1743.            eerror "Your patch uses relative paths '../':";
  1744.            eerror "${rel_paths}";
  1745.            echo;
  1746.            die "you need to fix the relative paths in patch";
  1747.        fi;
  1748.        local patch_cmd;
  1749.        while [[ ${count} -lt 5 ]]; do
  1750.            patch_cmd="${patch} -p${count} ${EPATCH_OPTS}";
  1751.            ( _epatch_draw_line "***** ${patchname} *****";
  1752.            echo;
  1753.            echo "PATCH COMMAND:  ${patch_cmd} --dry-run -f < '${PATCH_TARGET}'";
  1754.            echo;
  1755.            _epatch_draw_line "***** ${patchname} *****";
  1756.            ${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1;
  1757.            ret=$?;
  1758.            echo;
  1759.            echo "patch program exited with status ${ret}";
  1760.            exit ${ret} ) >> "${STDERR_TARGET}";
  1761.            if [ $? -eq 0 ]; then
  1762.                ( _epatch_draw_line "***** ${patchname} *****";
  1763.                echo;
  1764.                echo "ACTUALLY APPLYING ${patchname} ...";
  1765.                echo "PATCH COMMAND:  ${patch_cmd} < '${PATCH_TARGET}'";
  1766.                echo;
  1767.                _epatch_draw_line "***** ${patchname} *****";
  1768.                ${patch_cmd} < "${PATCH_TARGET}" 2>&1;
  1769.                ret=$?;
  1770.                echo;
  1771.                echo "patch program exited with status ${ret}";
  1772.                exit ${ret} ) >> "${STDERR_TARGET}";
  1773.                if [ $? -ne 0 ]; then
  1774.                    echo;
  1775.                    eerror "A dry-run of patch command succeeded, but actually";
  1776.                    eerror "applying the patch failed!";
  1777.                    count=5;
  1778.                fi;
  1779.                break;
  1780.            fi;
  1781.            : $(( count++ ));
  1782.        done;
  1783.        if [[ -n ${PIPE_CMD} ]]; then
  1784.            rm -f "${PATCH_TARGET}";
  1785.        fi;
  1786.        if [[ ${count} -ge 5 ]]; then
  1787.            echo;
  1788.            eerror "Failed Patch: ${patchname} !";
  1789.            eerror " ( ${PATCH_TARGET} )";
  1790.            eerror;
  1791.            eerror "Include in your bugreport the contents of:";
  1792.            eerror;
  1793.            eerror "  ${STDERR_TARGET}";
  1794.            echo;
  1795.            die "Failed Patch: ${patchname}!";
  1796.        fi;
  1797.        rm -f "${STDERR_TARGET}";
  1798.        cat >> "${T}/epatch.log"  <<-EOF
  1799. PATCH: ${x}
  1800. CMD: ${patch_cmd}
  1801. PWD: ${PWD}
  1802.  
  1803. EOF
  1804.  
  1805.        eend 0;
  1806.    done;
  1807.    [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
  1808.    :
  1809. }
  1810. epause ()
  1811. {
  1812.    ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org"
  1813. }
  1814. epunt_cxx ()
  1815. {
  1816.    local dir=$1;
  1817.    [[ -z ${dir} ]] && dir=${S};
  1818.    ebegin "Removing useless C++ checks";
  1819.    local f p any_found;
  1820.    while IFS= read -r -d '' f; do
  1821.        for p in "$(eutils_elt_patch_dir)"/nocxx/*.patch;
  1822.        do
  1823.            if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
  1824.                any_found=1;
  1825.                break;
  1826.            fi;
  1827.        done;
  1828.    done < <(find "${dir}" -name configure -print0);
  1829.    if [[ -z ${any_found} ]]; then
  1830.        eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
  1831.    fi;
  1832.    eend 0
  1833. }
  1834. eshopts_pop ()
  1835. {
  1836.    local s;
  1837.    estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
  1838.    if [[ ${s} == "shopt -"* ]]; then
  1839.        eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
  1840.    else
  1841.        set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
  1842.        set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
  1843.    fi
  1844. }
  1845. eshopts_push ()
  1846. {
  1847.    if [[ $1 == -[su] ]]; then
  1848.        estack_push eshopts "$(shopt -p)";
  1849.        [[ $# -eq 0 ]] && return 0;
  1850.        shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
  1851.    else
  1852.        estack_push eshopts $-;
  1853.        [[ $# -eq 0 ]] && return 0;
  1854.        set "$@" || die "${FUNCNAME}: bad options to set: $*";
  1855.    fi
  1856. }
  1857. estack_pop ()
  1858. {
  1859.    [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
  1860.     local _estack_name="_ESTACK_$1_";
  1861.     shift;
  1862.     local _estack_retvar=$1;
  1863.     shift;
  1864.     eval local _estack_i=\${#${_estack_name}\[@\]};
  1865.     [[ $(( --_estack_i )) -eq -1 ]] && return 1;
  1866.     if [[ -n ${_estack_retvar} ]]; then
  1867.         eval ${_estack_retvar}=\"\${${_estack_name}\[${_estack_i}\]}\";
  1868.     fi;
  1869.     eval unset \"${_estack_name}\[${_estack_i}\]\"
  1870. }
  1871. estack_push ()
  1872. {
  1873.     [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments";
  1874.     local stack_name="_ESTACK_$1_";
  1875.     shift;
  1876.     eval ${stack_name}+=\( \"\$@\" \)
  1877. }
  1878. esvn_clean ()
  1879. {
  1880.     [[ $# -eq 0 ]] && set -- .;
  1881.     find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
  1882. }
  1883. eumask_pop ()
  1884. {
  1885.     [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options";
  1886.     local s;
  1887.     estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
  1888.     umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
  1889. }
  1890. eumask_push ()
  1891. {
  1892.     estack_push eumask "$(umask)";
  1893.     umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
  1894. }
  1895. eutils_elt_patch_dir ()
  1896. {
  1897.     local d="${ECLASSDIR}/ELT-patches";
  1898.     if [[ ! -d ${d} ]]; then
  1899.         d="${_EUTILS_ECLASSDIR_LOCAL}/ELT-patches";
  1900.     fi;
  1901.     echo "${d}"
  1902. }
  1903. evar_pop ()
  1904. {
  1905.     local cnt=${1:-bad};
  1906.     case $# in
  1907.         0)
  1908.             cnt=1
  1909.         ;;
  1910.         1)
  1911.             isdigit "${cnt}" || die "${FUNCNAME}: first arg must be a number: $*"
  1912.         ;;
  1913.         *)
  1914.             die "${FUNCNAME}: only accepts one arg: $*"
  1915.         ;;
  1916.     esac;
  1917.     local var val;
  1918.     while (( cnt-- )); do
  1919.         estack_pop evar val || die "${FUNCNAME}: unbalanced push";
  1920.         estack_pop evar var || die "${FUNCNAME}: unbalanced push";
  1921.         [[ ${val} == "unset_76fc3c462065bb4ca959f939e6793f94" ]] && unset ${var} || printf -v "${var}" '%s' "${val}";
  1922.     done
  1923. }
  1924. evar_push ()
  1925. {
  1926.     local var val;
  1927.     for var in "$@";
  1928.     do
  1929.         [[ ${!var+set} == "set" ]] && val=${!var} || val="unset_76fc3c462065bb4ca959f939e6793f94";
  1930.         estack_push evar "${var}" "${val}";
  1931.     done
  1932. }
  1933. evar_push_set ()
  1934. {
  1935.     local var=$1;
  1936.     evar_push ${var};
  1937.     case $# in
  1938.         1)
  1939.             unset ${var}
  1940.         ;;
  1941.         2)
  1942.             printf -v "${var}" '%s' "$2"
  1943.         ;;
  1944.         *)
  1945.             die "${FUNCNAME}: incorrect # of args: $*"
  1946.         ;;
  1947.     esac
  1948. }
  1949. filter-flags ()
  1950. {
  1951.     _filter-hardened "$@";
  1952.     local v;
  1953.     for v in $(all-flag-vars);
  1954.     do
  1955.         _filter-var ${v} "$@";
  1956.     done;
  1957.     return 0
  1958. }
  1959. filter-ldflags ()
  1960. {
  1961.     _filter-var LDFLAGS "$@";
  1962.     return 0
  1963. }
  1964. filter-lfs-flags ()
  1965. {
  1966.     [[ $# -ne 0 ]] && die "filter-lfs-flags takes no arguments";
  1967.     filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
  1968. }
  1969. filter-mfpmath ()
  1970. {
  1971.     local orig_mfpmath new_math prune_math;
  1972.     orig_mfpmath=$(get-flag -mfpmath);
  1973.     new_math=$(get-flag mfpmath);
  1974.     new_math=${new_math/both/387,sse};
  1975.     new_math=" ${new_math//[,+]/ } ";
  1976.     prune_math="";
  1977.     for prune_math in "$@";
  1978.     do
  1979.         new_math=${new_math/ ${prune_math} / };
  1980.     done;
  1981.     new_math=$(echo ${new_math});
  1982.     new_math=${new_math// /,};
  1983.     if [[ -z ${new_math} ]]; then
  1984.         filter-flags ${orig_mfpmath};
  1985.     else
  1986.         replace-flags ${orig_mfpmath} -mfpmath=${new_math};
  1987.     fi;
  1988.     return 0
  1989. }
  1990. gcc-fullversion ()
  1991. {
  1992.     _gcc_fullversion '$1.$2.$3' "$@"
  1993. }
  1994. gcc-major-version ()
  1995. {
  1996.     _gcc_fullversion '$1' "$@"
  1997. }
  1998. gcc-micro-version ()
  1999. {
  2000.     _gcc_fullversion '$3' "$@"
  2001. }
  2002. gcc-minor-version ()
  2003. {
  2004.     _gcc_fullversion '$2' "$@"
  2005. }
  2006. gcc-specs-directive ()
  2007. {
  2008.     local directive subdname subdirective;
  2009.     directive="$(_gcc-specs-directive_raw $1)";
  2010.     while [[ ${directive} == *%\(*\)* ]]; do
  2011.         subdname=${directive/*%\(};
  2012.         subdname=${subdname/\)*};
  2013.         subdirective="$(_gcc-specs-directive_raw ${subdname})";
  2014.         directive="${directive//\%(${subdname})/${subdirective}}";
  2015.     done;
  2016.     echo "${directive}";
  2017.     return 0
  2018. }
  2019. gcc-specs-nostrict ()
  2020. {
  2021.     local directive;
  2022.     directive=$(gcc-specs-directive cc1);
  2023.     [[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]
  2024. }
  2025. gcc-specs-now ()
  2026. {
  2027.     local directive;
  2028.     directive=$(gcc-specs-directive link_command);
  2029.     [[ "${directive/\{!nonow:}" != "${directive}" ]]
  2030. }
  2031. gcc-specs-pie ()
  2032. {
  2033.     local directive;
  2034.     directive=$(gcc-specs-directive cc1);
  2035.     [[ "${directive/\{!nopie:}" != "${directive}" ]]
  2036. }
  2037. gcc-specs-relro ()
  2038. {
  2039.     local directive;
  2040.     directive=$(gcc-specs-directive link_command);
  2041.     [[ "${directive/\{!norelro:}" != "${directive}" ]]
  2042. }
  2043. gcc-specs-ssp ()
  2044. {
  2045.     local directive;
  2046.     directive=$(gcc-specs-directive cc1);
  2047.     [[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]
  2048. }
  2049. gcc-specs-ssp-to-all ()
  2050. {
  2051.     local directive;
  2052.     directive=$(gcc-specs-directive cc1);
  2053.     [[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]
  2054. }
  2055. gcc-specs-stack-check ()
  2056. {
  2057.     local directive;
  2058.     directive=$(gcc-specs-directive cc1);
  2059.     [[ "${directive/\{!fno-stack-check:}" != "${directive}" ]]
  2060. }
  2061. gcc-version ()
  2062. {
  2063.     _gcc_fullversion '$1.$2' "$@"
  2064. }
  2065. gen_usr_ldscript ()
  2066. {
  2067.     local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
  2068.     [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
  2069.     tc-is-static-only && return;
  2070.     if [[ $(type -t multilib_is_native_abi) == "function" ]]; then
  2071.         multilib_is_native_abi || return 0;
  2072.     fi;
  2073.     case ${CTARGET:-${CHOST}} in
  2074.         *-darwin*)
  2075.  
  2076.         ;;
  2077.         *-android*)
  2078.             return 0
  2079.         ;;
  2080.         *linux* | *-freebsd* | *-openbsd* | *-netbsd*)
  2081.             use prefix && return 0
  2082.         ;;
  2083.         *)
  2084.             return 0
  2085.         ;;
  2086.     esac;
  2087.     dodir /usr/${libdir};
  2088.     if [[ $1 == "-a" ]]; then
  2089.         auto=true;
  2090.         shift;
  2091.         dodir /${libdir};
  2092.     fi;
  2093.     local flags=(${CFLAGS} ${LDFLAGS} -Wl,--verbose);
  2094.     if $(tc-getLD) --version | grep -q 'GNU gold'; then
  2095.         local d="${T}/bfd-linker";
  2096.         mkdir -p "${d}";
  2097.         ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld;
  2098.         flags+=(-B"${d}");
  2099.     fi;
  2100.     output_format=$($(tc-getCC) "${flags[@]}" 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
  2101.     [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
  2102.     for lib in "$@";
  2103.     do
  2104.         local tlib;
  2105.         if ${auto}; then
  2106.             lib="lib${lib}${suffix}";
  2107.         else
  2108.             [[ -r ${ED}/${libdir}/${lib} ]] || continue;
  2109.         fi;
  2110.         case ${CTARGET:-${CHOST}} in
  2111.             *-darwin*)
  2112.                 if ${auto}; then
  2113.                     tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  2114.                 else
  2115.                     tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
  2116.                 fi;
  2117.                 [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
  2118.                 tlib=${tlib##*/};
  2119.                 if ${auto}; then
  2120.                     mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  2121.                     if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
  2122.                         mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
  2123.                     fi;
  2124.                     rm -f "${ED}"/${libdir}/${lib};
  2125.                 fi;
  2126.                 if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
  2127.                     chmod u+w "${ED}${libdir}/${tlib}";
  2128.                     local nowrite=yes;
  2129.                 fi;
  2130.                 install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
  2131.                 [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
  2132.                 pushd "${ED}/usr/${libdir}" > /dev/null;
  2133.                 ln -snf "../../${libdir}/${tlib}" "${lib}";
  2134.                 popd > /dev/null
  2135.             ;;
  2136.             *)
  2137.                 if ${auto}; then
  2138.                     tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
  2139.                     [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
  2140.                     mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
  2141.                     if [[ ${tlib} != ${lib}* ]]; then
  2142.                         mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
  2143.                     fi;
  2144.                     rm -f "${ED}"/${libdir}/${lib};
  2145.                 else
  2146.                     tlib=${lib};
  2147.                 fi;
  2148.                 cat > "${ED}/usr/${libdir}/${lib}"  <<-END_LDSCRIPT
  2149. /* GNU ld script
  2150.    Since Gentoo has critical dynamic libraries in /lib, and the static versions
  2151.    in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
  2152.    run into linking problems.  This "fake" dynamic lib is a linker script that
  2153.    redirects the linker to the real lib.  And yes, this works in the cross-
  2154.    compiling scenario as the sysroot-ed linker will prepend the real path.
  2155.  
  2156.    See bug https://bugs.gentoo.org/4411 for more info.
  2157.  */
  2158. ${output_format}
  2159. GROUP ( ${EPREFIX}/${libdir}/${tlib} )
  2160. END_LDSCRIPT
  2161.  
  2162.             ;;
  2163.         esac
  2164.         fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
  2165.     done
  2166. }
  2167. get-flag ()
  2168. {
  2169.     local f var findflag="$1";
  2170.     for var in $(all-flag-vars);
  2171.     do
  2172.         for f in ${!var};
  2173.         do
  2174.             if [ "${f/${findflag}}" != "${f}" ]; then
  2175.                 printf "%s\n" "${f/-${findflag}=}";
  2176.                 return 0;
  2177.             fi;
  2178.         done;
  2179.     done;
  2180.     return 1
  2181. }
  2182. get_abi_CFLAGS ()
  2183. {
  2184.     get_abi_var CFLAGS "$@"
  2185. }
  2186. get_abi_CHOST ()
  2187. {
  2188.     get_abi_var CHOST "$@"
  2189. }
  2190. get_abi_CTARGET ()
  2191. {
  2192.     get_abi_var CTARGET "$@"
  2193. }
  2194. get_abi_FAKE_TARGETS ()
  2195. {
  2196.     get_abi_var FAKE_TARGETS "$@"
  2197. }
  2198. get_abi_LDFLAGS ()
  2199. {
  2200.     get_abi_var LDFLAGS "$@"
  2201. }
  2202. get_abi_LIBDIR ()
  2203. {
  2204.     get_abi_var LIBDIR "$@"
  2205. }
  2206. get_abi_var ()
  2207. {
  2208.     local flag=$1;
  2209.     local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
  2210.     local var="${flag}_${abi}";
  2211.     echo ${!var}
  2212. }
  2213. get_after_major_version ()
  2214. {
  2215.     echo $(get_version_component_range 2- "${1:-${PV}}")
  2216. }
  2217. get_all_abis ()
  2218. {
  2219.     local x order="" mvar dvar;
  2220.     mvar="MULTILIB_ABIS";
  2221.     dvar="DEFAULT_ABI";
  2222.     if [[ -n $1 ]]; then
  2223.         mvar="$1_${mvar}";
  2224.         dvar="$1_${dvar}";
  2225.     fi;
  2226.     if [[ -z ${!mvar} ]]; then
  2227.         echo "default";
  2228.         return 0;
  2229.     fi;
  2230.     for x in ${!mvar};
  2231.     do
  2232.         if [[ ${x} != ${!dvar} ]]; then
  2233.             order="${order:+${order} }${x}";
  2234.         fi;
  2235.     done;
  2236.     order="${order:+${order} }${!dvar}";
  2237.     echo ${order};
  2238.     return 0
  2239. }
  2240. get_all_libdirs ()
  2241. {
  2242.     local libdirs abi;
  2243.     for abi in ${MULTILIB_ABIS};
  2244.     do
  2245.         libdirs+=" $(get_abi_LIBDIR ${abi})";
  2246.     done;
  2247.     [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
  2248.     echo "${libdirs}"
  2249. }
  2250. get_all_version_components ()
  2251. {
  2252.     eshopts_push -s extglob;
  2253.     local ver_str=${1:-${PV}} result;
  2254.     result=();
  2255.     if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]]; then
  2256.         echo ${VERSIONATOR_CACHE_RESULT};
  2257.         eshopts_pop;
  2258.         return;
  2259.     fi;
  2260.     export VERSIONATOR_CACHE_VER_STR=${ver_str};
  2261.     while [[ -n $ver_str ]]; do
  2262.         case "${ver_str::1}" in
  2263.             [[:digit:]])
  2264.                 result+=("${ver_str%%[^[:digit:]]*}");
  2265.                 ver_str=${ver_str##+([[:digit:]])}
  2266.             ;;
  2267.             [-_.])
  2268.                 result+=("${ver_str::1}");
  2269.                 ver_str=${ver_str:1}
  2270.             ;;
  2271.             [[:alpha:]])
  2272.                 local not_match=${ver_str##+([[:alpha:]])*([[:digit:]])};
  2273.                 result+=("${ver_str::${#ver_str} - ${#not_match}}");
  2274.                 ver_str=${not_match}
  2275.             ;;
  2276.             *)
  2277.                 result+=("${ver_str::1}");
  2278.                 ver_str=${ver_str:1}
  2279.             ;;
  2280.         esac;
  2281.     done;
  2282.     export VERSIONATOR_CACHE_RESULT=${result[*]};
  2283.     echo ${result[@]};
  2284.     eshopts_pop
  2285. }
  2286. get_install_abis ()
  2287. {
  2288.     local x order="";
  2289.     if [[ -z ${MULTILIB_ABIS} ]]; then
  2290.         echo "default";
  2291.         return 0;
  2292.     fi;
  2293.     if [[ ${EMULTILIB_PKG} == "true" ]]; then
  2294.         for x in ${MULTILIB_ABIS};
  2295.         do
  2296.             if [[ ${x} != "${DEFAULT_ABI}" ]]; then
  2297.                 has ${x} ${ABI_DENY} || order="${order} ${x}";
  2298.             fi;
  2299.         done;
  2300.         has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
  2301.         if [[ -n ${ABI_ALLOW} ]]; then
  2302.             local ordera="";
  2303.             for x in ${order};
  2304.             do
  2305.                 if has ${x} ${ABI_ALLOW}; then
  2306.                     ordera="${ordera} ${x}";
  2307.                 fi;
  2308.             done;
  2309.             order=${ordera};
  2310.         fi;
  2311.     else
  2312.         order=${DEFAULT_ABI};
  2313.     fi;
  2314.     if [[ -z ${order} ]]; then
  2315.         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.";
  2316.     fi;
  2317.     echo ${order};
  2318.     return 0
  2319. }
  2320. get_kde_version ()
  2321. {
  2322.     local ver=${1:-${PV}};
  2323.     local major=$(get_major_version ${ver});
  2324.     local minor=$(get_version_component_range 2 ${ver});
  2325.     local micro=$(get_version_component_range 3 ${ver});
  2326.     if [[ ${ver} == 9999 ]]; then
  2327.         echo live;
  2328.     else
  2329.         (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1));
  2330.     fi
  2331. }
  2332. get_last_version_component_index ()
  2333. {
  2334.     echo $(($(get_version_component_count "${1:-${PV}}" ) - 1))
  2335. }
  2336. get_libdir ()
  2337. {
  2338.     local libdir_var="LIBDIR_${ABI}";
  2339.     local libdir="lib";
  2340.     [[ -n ${ABI} && -n ${!libdir_var} ]] && libdir=${!libdir_var};
  2341.     echo "${libdir}"
  2342. }
  2343. get_libname ()
  2344. {
  2345.     local libname;
  2346.     local ver=$1;
  2347.     case ${CHOST} in
  2348.         *-cygwin*)
  2349.             libname="dll.a"
  2350.         ;;
  2351.         mingw* | *-mingw*)
  2352.             libname="dll"
  2353.         ;;
  2354.         *-darwin*)
  2355.             libname="dylib"
  2356.         ;;
  2357.         *-mint*)
  2358.             libname="irrelevant"
  2359.         ;;
  2360.         hppa*-hpux*)
  2361.             libname="sl"
  2362.         ;;
  2363.         *)
  2364.             libname="so"
  2365.         ;;
  2366.     esac;
  2367.     if [[ -z $* ]]; then
  2368.         echo ".${libname}";
  2369.     else
  2370.         for ver in "$@";
  2371.         do
  2372.             case ${CHOST} in
  2373.                 *-cygwin*)
  2374.                     echo ".${ver}.${libname}"
  2375.                 ;;
  2376.                 *-darwin*)
  2377.                     echo ".${ver}.${libname}"
  2378.                 ;;
  2379.                 *-mint*)
  2380.                     echo ".${libname}"
  2381.                 ;;
  2382.                 *)
  2383.                     echo ".${libname}.${ver}"
  2384.                 ;;
  2385.             esac;
  2386.         done;
  2387.     fi
  2388. }
  2389. get_major_version ()
  2390. {
  2391.     local c=($(get_all_version_components "${1:-${PV}}"));
  2392.     echo ${c[0]}
  2393. }
  2394. get_modname ()
  2395. {
  2396.     local modname;
  2397.     local ver=$1;
  2398.     case ${CHOST} in
  2399.         *-darwin*)
  2400.             modname="bundle"
  2401.         ;;
  2402.         *)
  2403.             modname="so"
  2404.         ;;
  2405.     esac;
  2406.     echo ".${modname}"
  2407. }
  2408. get_version_component_count ()
  2409. {
  2410.     local a=($(get_version_components "${1:-${PV}}"));
  2411.     echo ${#a[@]}
  2412. }
  2413. get_version_component_range ()
  2414. {
  2415.     eshopts_push -s extglob;
  2416.     local c v="${2:-${PV}}" range="${1}" range_start range_end;
  2417.     local -i i=-1 j=0;
  2418.     c=($(get_all_version_components "${v}"));
  2419.     range_start=${range%-*};
  2420.     range_start=${range_start:-1};
  2421.     range_end=${range#*-};
  2422.     range_end=${range_end:-${#c[@]}};
  2423.     while ((j < range_start)); do
  2424.         i+=1;
  2425.         ((i > ${#c[@]})) && eshopts_pop && return;
  2426.         [[ -n "${c[i]//[-._]}" ]] && j+=1;
  2427.     done;
  2428.     while ((j <= range_end)); do
  2429.         echo -n ${c[i]};
  2430.         ((i > ${#c[@]})) && eshopts_pop && return;
  2431.         [[ -n "${c[i]//[-._]}" ]] && j+=1;
  2432.         i+=1;
  2433.     done;
  2434.     eshopts_pop
  2435. }
  2436. get_version_components ()
  2437. {
  2438.     local c=$(get_all_version_components "${1:-${PV}}");
  2439.     echo ${c//[-._]/ }
  2440. }
  2441. gnome2_disable_deprecation_warning ()
  2442. {
  2443.     local retval=0;
  2444.     local fails=();
  2445.     local makefile;
  2446.     ebegin "Disabling deprecation warnings";
  2447.     while read makefile; do
  2448.         if ! grep -qE "(DISABLE_DEPRECATED|GSEAL_ENABLE)" "${makefile}"; then
  2449.             continue;
  2450.         fi;
  2451.         LC_ALL=C sed -r -i -e 's:-D[A-Z_]+_DISABLE_DEPRECATED:$(/bin/true):g' -e 's:-DGSEAL_ENABLE(=[A-Za-z0-9_]*)?:$(/bin/true):g' -i "${makefile}";
  2452.         if [[ $? -ne 0 ]]; then
  2453.             fails+=("${makefile}");
  2454.             retval=2;
  2455.         fi;
  2456.     done < <(find "${S}" -name "Makefile.in"        -o -name "Makefile.am" -o -name "Makefile.decl"         | sort; [[ -f "${S}"/configure ]] && echo configure);
  2457.     eend ${retval};
  2458.     for makefile in "${fails[@]}";
  2459.     do
  2460.         ewarn "Failed to disable deprecation warnings in ${makefile}";
  2461.     done
  2462. }
  2463. gnome2_environment_reset ()
  2464. {
  2465.     xdg_environment_reset;
  2466.     export G_HOME="${T}";
  2467.     export GST_REGISTRY="${T}/registry.xml";
  2468.     export GSETTINGS_BACKEND="memory";
  2469.     if has ${EAPI:-0} 6; then
  2470.         export GST_INSPECT="$(type -P true)";
  2471.         unset DISPLAY;
  2472.     fi
  2473. }
  2474. gnome2_gconf_install ()
  2475. {
  2476.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2477.     local updater="${EROOT}${GCONFTOOL_BIN}";
  2478.     if [[ ! -x "${updater}" ]]; then
  2479.         debug-print "${updater} is not executable";
  2480.         return;
  2481.     fi;
  2482.     if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
  2483.         debug-print "No GNOME 2 GConf schemas found";
  2484.         return;
  2485.     fi;
  2486.     unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  2487.     export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")";
  2488.     einfo "Installing GNOME 2 GConf schemas";
  2489.     local F;
  2490.     for F in ${GNOME2_ECLASS_SCHEMAS};
  2491.     do
  2492.         if [[ -e "${EROOT}${F}" ]]; then
  2493.             debug-print "Installing schema: ${F}";
  2494.             "${updater}" --makefile-install-rule "${EROOT}${F}" > /dev/null;
  2495.         fi;
  2496.     done;
  2497.     pids=$(pgrep -x gconfd-2);
  2498.     if [[ $? == 0 ]]; then
  2499.         ebegin "Reloading GConf schemas";
  2500.         kill -HUP ${pids};
  2501.         eend $?;
  2502.     fi
  2503. }
  2504. gnome2_gconf_savelist ()
  2505. {
  2506.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2507.     pushd "${ED}" > /dev/null || die;
  2508.     export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null);
  2509.     popd > /dev/null || die
  2510. }
  2511. gnome2_gconf_uninstall ()
  2512. {
  2513.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2514.     local updater="${EROOT}${GCONFTOOL_BIN}";
  2515.     if [[ ! -x "${updater}" ]]; then
  2516.         debug-print "${updater} is not executable";
  2517.         return;
  2518.     fi;
  2519.     if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
  2520.         debug-print "No GNOME 2 GConf schemas found";
  2521.         return;
  2522.     fi;
  2523.     unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
  2524.     export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")";
  2525.     einfo "Uninstalling GNOME 2 GConf schemas";
  2526.     local F;
  2527.     for F in ${GNOME2_ECLASS_SCHEMAS};
  2528.     do
  2529.         if [[ -e "${EROOT}${F}" ]]; then
  2530.             debug-print "Uninstalling gconf schema: ${F}";
  2531.             "${updater}" --makefile-uninstall-rule "${EROOT}${F}" > /dev/null;
  2532.         fi;
  2533.     done;
  2534.     pids=$(pgrep -x gconfd-2);
  2535.     if [[ $? == 0 ]]; then
  2536.         ebegin "Reloading GConf schemas";
  2537.         kill -HUP ${pids};
  2538.         eend $?;
  2539.     fi
  2540. }
  2541. gnome2_gdk_pixbuf_savelist ()
  2542. {
  2543.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2544.     pushd "${ED}" > /dev/null || die;
  2545.     export GNOME2_ECLASS_GDK_PIXBUF_LOADERS=$(find usr/lib*/gdk-pixbuf-2.0 -type f 2>/dev/null);
  2546.     popd > /dev/null || die
  2547. }
  2548. gnome2_gdk_pixbuf_update ()
  2549. {
  2550.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2551.     local updater="${EROOT}/usr/bin/${CHOST}-gdk-pixbuf-query-loaders";
  2552.     if [[ ! -x ${updater} ]]; then
  2553.         updater="${EROOT}/usr/bin/gdk-pixbuf-query-loaders";
  2554.     fi;
  2555.     if [[ ! -x ${updater} ]]; then
  2556.         debug-print "${updater} is not executable";
  2557.         return;
  2558.     fi;
  2559.     if [[ -z ${GNOME2_ECLASS_GDK_PIXBUF_LOADERS} ]]; then
  2560.         debug-print "gdk-pixbuf loader cache does not need an update";
  2561.         return;
  2562.     fi;
  2563.     ebegin "Updating gdk-pixbuf loader cache";
  2564.     local tmp_file=$(emktemp);
  2565.     ${updater} > "${tmp_file}" && chmod 0644 "${tmp_file}" && cp -f "${tmp_file}" "${EROOT}usr/$(get_libdir)/gdk-pixbuf-2.0/2.10.0/loaders.cache" && rm "${tmp_file}";
  2566.     eend $?
  2567. }
  2568. gnome2_giomodule_cache_update ()
  2569. {
  2570.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2571.     local updater="${EROOT}/usr/bin/${CHOST}-gio-querymodules";
  2572.     if [[ ! -x ${updater} ]]; then
  2573.         updater="${EROOT}/usr/bin/gio-querymodules";
  2574.     fi;
  2575.     if [[ ! -x ${updater} ]]; then
  2576.         debug-print "${updater} is not executable";
  2577.         return;
  2578.     fi;
  2579.     ebegin "Updating GIO modules cache";
  2580.     ${updater} "${EROOT%/}"/usr/$(get_libdir)/gio/modules;
  2581.     eend $?
  2582. }
  2583. gnome2_icon_cache_update ()
  2584. {
  2585.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2586.     local updater="${EROOT}${GTK_UPDATE_ICON_CACHE}";
  2587.     if [[ ! -x "${updater}" ]]; then
  2588.         debug-print "${updater} is not executable";
  2589.         return;
  2590.     fi;
  2591.     if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
  2592.         debug-print "No icon cache to update";
  2593.         return;
  2594.     fi;
  2595.     ebegin "Updating icons cache";
  2596.     local retval=0;
  2597.     local fails=();
  2598.     for dir in ${GNOME2_ECLASS_ICONS};
  2599.     do
  2600.         if [[ -f "${EROOT}${dir}/index.theme" ]]; then
  2601.             local rv=0;
  2602.             "${updater}" -qf "${EROOT}${dir}";
  2603.             rv=$?;
  2604.             if [[ ! $rv -eq 0 ]]; then
  2605.                 debug-print "Updating cache failed on ${EROOT}${dir}";
  2606.                 fails[$(( ${#fails[@]} + 1 ))]="${EROOT}${dir}";
  2607.                 retval=2;
  2608.             fi;
  2609.         else
  2610.             if [[ $(ls "${EROOT}${dir}") = "icon-theme.cache" ]]; then
  2611.                 rm "${EROOT}${dir}/icon-theme.cache";
  2612.             fi;
  2613.         fi;
  2614.         if [[ -z $(ls "${EROOT}${dir}") ]]; then
  2615.             rmdir "${EROOT}${dir}";
  2616.         fi;
  2617.     done;
  2618.     eend ${retval};
  2619.     for f in "${fails[@]}";
  2620.     do
  2621.         eerror "Failed to update cache with icon $f";
  2622.     done
  2623. }
  2624. gnome2_icon_savelist ()
  2625. {
  2626.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2627.     pushd "${ED}" > /dev/null || die;
  2628.     export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null);
  2629.     popd > /dev/null || die
  2630. }
  2631. gnome2_omf_fix ()
  2632. {
  2633.     local omf_makefiles filename;
  2634.     omf_makefiles="$@";
  2635.     if [[ -f ${S}/omf.make ]]; then
  2636.         omf_makefiles="${omf_makefiles} ${S}/omf.make";
  2637.     fi;
  2638.     if [[ -f ${S}/gnome-doc-utils.make ]]; then
  2639.         omf_makefiles="${omf_makefiles} ${S}/gnome-doc-utils.make";
  2640.     fi;
  2641.     for filename in $(find "${S}" -name "Makefile.in" -o -name "Makefile.am" |sort);
  2642.     do
  2643.         omf_makefiles="${omf_makefiles} ${filename}";
  2644.     done;
  2645.     ebegin "Fixing OMF Makefiles";
  2646.     local retval=0;
  2647.     local fails=();
  2648.     for omf in ${omf_makefiles};
  2649.     do
  2650.         sed -i -e 's:scrollkeeper-update:true:' "${omf}";
  2651.         retval=$?;
  2652.         if [[ $retval -ne 0 ]]; then
  2653.             debug-print "updating of ${omf} failed";
  2654.             fails[$(( ${#fails[@]} + 1 ))]=$omf;
  2655.             retval=2;
  2656.         fi;
  2657.     done;
  2658.     eend $retval;
  2659.     for f in "${fails[@]}";
  2660.     do
  2661.         eerror "Failed to update OMF Makefile $f";
  2662.     done
  2663. }
  2664. gnome2_query_immodules_gtk2 ()
  2665. {
  2666.     local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-2.0;
  2667.     [[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-2.0;
  2668.     ebegin "Updating gtk2 input method module cache";
  2669.     GTK_IM_MODULE_FILE="${EROOT}usr/$(get_libdir)/gtk-2.0/2.10.0/immodules.cache" "${updater}" --update-cache;
  2670.     eend $?
  2671. }
  2672. gnome2_query_immodules_gtk3 ()
  2673. {
  2674.     local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-3.0;
  2675.     [[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-3.0;
  2676.     ebegin "Updating gtk3 input method module cache";
  2677.     GTK_IM_MODULE_FILE="${EROOT}usr/$(get_libdir)/gtk-3.0/3.0.0/immodules.cache" "${updater}" --update-cache;
  2678.     eend $?
  2679. }
  2680. gnome2_schemas_savelist ()
  2681. {
  2682.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2683.     pushd "${ED}" > /dev/null || die;
  2684.     export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null);
  2685.     popd > /dev/null || die
  2686. }
  2687. gnome2_schemas_update ()
  2688. {
  2689.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2690.     local updater="${EROOT}${GLIB_COMPILE_SCHEMAS}";
  2691.     if [[ ! -x ${updater} ]]; then
  2692.         debug-print "${updater} is not executable";
  2693.         return;
  2694.     fi;
  2695.     if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then
  2696.         debug-print "No GSettings schemas to update";
  2697.         return;
  2698.     fi;
  2699.     ebegin "Updating GSettings schemas";
  2700.     ${updater} --allow-any-name "$@" "${EROOT%/}/usr/share/glib-2.0/schemas" &> /dev/null;
  2701.     eend $?
  2702. }
  2703. gnome2_scrollkeeper_savelist ()
  2704. {
  2705.     has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
  2706.     pushd "${ED}" > /dev/null || die;
  2707.     export GNOME2_ECLASS_SCROLLS=$(find 'usr/share/omf' -type f -name "*.omf" 2> /dev/null);
  2708.     popd > /dev/null || die
  2709. }
  2710. gnome2_scrollkeeper_update ()
  2711. {
  2712.     has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
  2713.     local updater="${EROOT}${SCROLLKEEPER_UPDATE_BIN}";
  2714.     if [[ ! -x "${updater}" ]]; then
  2715.         debug-print "${updater} is not executable";
  2716.         return;
  2717.     fi;
  2718.     if [[ -z "${GNOME2_ECLASS_SCROLLS}" ]]; then
  2719.         debug-print "No scroll cache to update";
  2720.         return;
  2721.     fi;
  2722.     ebegin "Updating scrollkeeper database ...";
  2723.     "${updater}" -q -p "${EROOT}${SCROLLKEEPER_DIR}";
  2724.     eend $?
  2725. }
  2726. has_m32 ()
  2727. {
  2728.     die "${FUNCNAME}: don't use this anymore"
  2729. }
  2730. has_m64 ()
  2731. {
  2732.     eqawarn "${FUNCNAME}: don't use this anymore";
  2733.     local temp="$(emktemp)";
  2734.     echo "int main() { return(0); }" > "${temp}".c;
  2735.     MY_CC=$(tc-getCC);
  2736.     ${MY_CC/ .*/} -m64 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
  2737.     local ret=$?;
  2738.     rm -f "${temp}".c;
  2739.     [[ ${ret} != 1 ]] && return 0;
  2740.     return 1
  2741. }
  2742. has_multilib_profile ()
  2743. {
  2744.     [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
  2745. }
  2746. in_iuse ()
  2747. {
  2748.     local use=${1};
  2749.     if [[ -z "${use}" ]]; then
  2750.         echo "!!! in_iuse() called without a parameter." 1>&2;
  2751.         echo "!!! in_iuse <USEFLAG>" 1>&2;
  2752.         die "in_iuse() called without a parameter";
  2753.     fi;
  2754.     local liuse=(${IUSE_EFFECTIVE});
  2755.     has "${use}" "${liuse[@]#[+-]}"
  2756. }
  2757. is-flag ()
  2758. {
  2759.     is-flagq "$@" && echo true
  2760. }
  2761. is-flagq ()
  2762. {
  2763.     [[ -n $2 ]] && die "Usage: is-flag <flag>";
  2764.     local var;
  2765.     for var in $(all-flag-vars);
  2766.     do
  2767.         _is_flagq ${var} "$1" && return 0;
  2768.     done;
  2769.     return 1
  2770. }
  2771. is-ldflag ()
  2772. {
  2773.     is-ldflagq "$@" && echo true
  2774. }
  2775. is-ldflagq ()
  2776. {
  2777.     [[ -n $2 ]] && die "Usage: is-ldflag <flag>";
  2778.     _is_flagq LDFLAGS $1
  2779. }
  2780. is_final_abi ()
  2781. {
  2782.     has_multilib_profile || return 0;
  2783.     set -- $(get_install_abis);
  2784.     local LAST_ABI=$#;
  2785.     [[ ${!LAST_ABI} == ${ABI} ]]
  2786. }
  2787. isdigit ()
  2788. {
  2789.     local d;
  2790.     for d in "$@";
  2791.     do
  2792.         [[ ${d:-bad} == *[!0-9]* ]] && return 1;
  2793.     done;
  2794.     return 0
  2795. }
  2796. kde5_pkg_postinst ()
  2797. {
  2798.     debug-print-function ${FUNCNAME} "$@";
  2799.     gnome2_icon_cache_update;
  2800.     xdg_pkg_postinst
  2801. }
  2802. kde5_pkg_postrm ()
  2803. {
  2804.     debug-print-function ${FUNCNAME} "$@";
  2805.     gnome2_icon_cache_update;
  2806.     xdg_pkg_postrm
  2807. }
  2808. kde5_pkg_preinst ()
  2809. {
  2810.     debug-print-function ${FUNCNAME} "$@";
  2811.     gnome2_icon_savelist;
  2812.     xdg_pkg_preinst
  2813. }
  2814. kde5_pkg_pretend ()
  2815. {
  2816.     debug-print-function ${FUNCNAME} "$@";
  2817.     _check_gcc_version
  2818. }
  2819. kde5_pkg_setup ()
  2820. {
  2821.     debug-print-function ${FUNCNAME} "$@";
  2822.     _check_gcc_version
  2823. }
  2824. kde5_src_compile ()
  2825. {
  2826.     debug-print-function ${FUNCNAME} "$@";
  2827.     cmake-utils_src_compile "$@"
  2828. }
  2829. kde5_src_configure ()
  2830. {
  2831.     debug-print-function ${FUNCNAME} "$@";
  2832.     if ! use_if_iuse debug; then
  2833.         append-cppflags -DQT_NO_DEBUG;
  2834.     fi;
  2835.     local cmakeargs;
  2836.     if ! use_if_iuse test; then
  2837.         cmakeargs+=(-DBUILD_TESTING=OFF);
  2838.         if [[ ${KDE_TEST} = optional ]]; then
  2839.             cmakeargs+=(-DCMAKE_DISABLE_FIND_PACKAGE_Qt5Test=ON);
  2840.         fi;
  2841.     fi;
  2842.     if ! use_if_iuse handbook && [[ ${KDE_HANDBOOK} = optional ]]; then
  2843.         cmakeargs+=(-DCMAKE_DISABLE_FIND_PACKAGE_KF5DocTools=ON);
  2844.     fi;
  2845.     if ! use_if_iuse designer && [[ ${KDE_DESIGNERPLUGIN} != false ]]; then
  2846.         cmakeargs+=(-DCMAKE_DISABLE_FIND_PACKAGE_Qt5Designer=ON);
  2847.     fi;
  2848.     cmakeargs+=(-DKDE_INSTALL_USE_QT_SYS_PATHS=ON);
  2849.     mycmakeargs=("${cmakeargs[@]}" "${mycmakeargs[@]}");
  2850.     cmake-utils_src_configure
  2851. }
  2852. kde5_src_install ()
  2853. {
  2854.     debug-print-function ${FUNCNAME} "$@";
  2855.     cmake-utils_src_install;
  2856.     if [[ -d ${ED}/${PREFIX}/share/doc/HTML ]]; then
  2857.         docompress -x ${PREFIX}/share/doc/HTML;
  2858.     fi
  2859. }
  2860. kde5_src_prepare ()
  2861. {
  2862.     debug-print-function ${FUNCNAME} "$@";
  2863.     if [[ ${KDEBASE} = kdel10n ]]; then
  2864.         local l10npart=5;
  2865.         [[ ${PN} = kde4-l10n ]] && l10npart=4;
  2866.         use_if_iuse l10n_sr-ijekavsk && _l10n_variant_subdir2root sr-ijekavsk sr;
  2867.         use_if_iuse l10n_sr-Latn-ijekavsk && _l10n_variant_subdir2root sr-Latn-ijekavsk sr;
  2868.         use_if_iuse l10n_sr-Latn && _l10n_variant_subdir2root sr-Latn sr;
  2869.         if use_if_iuse l10n_sr; then
  2870.             rm -rf kde-l10n-sr-${PV}/${l10npart}/sr/sr@* || die "Failed to cleanup L10N=sr";
  2871.             _l10n_variant_subdir_buster sr;
  2872.         else
  2873.             if [[ -d kde-l10n-sr-${PV} ]]; then
  2874.                 rm -r kde-l10n-sr-${PV} || die "Failed to remove sr parent lingua";
  2875.             fi;
  2876.         fi;
  2877.         cat > CMakeLists.txt  <<-EOF ||
  2878. project(${PN})
  2879. cmake_minimum_required(VERSION 2.8.12)
  2880. $(printf "add_subdirectory( %s )\n"     `find . -mindepth 1 -maxdepth 1 -type d | sed -e "s:^\./::"`)
  2881. EOF
  2882.  die
  2883.         case ${l10npart} in
  2884.             5)
  2885.                 find -maxdepth 2 -type f -name CMakeLists.txt -exec sed -i -e "/add_subdirectory(4)/ s/^/#DONT/" {} + || die
  2886.             ;;
  2887.             4)
  2888.                 find -maxdepth 2 -type f -name CMakeLists.txt -exec sed -i -e "/add_subdirectory(5)/ s/^/#DONT/" {} + || die
  2889.             ;;
  2890.         esac;
  2891.     fi;
  2892.     cmake-utils_src_prepare;
  2893.     if ! use_if_iuse examples || ! use examples; then
  2894.         cmake_comment_add_subdirectory examples;
  2895.     fi;
  2896.     if ! use_if_iuse handbook; then
  2897.         cmake_comment_add_subdirectory ${KDE_DOC_DIR};
  2898.         if [[ ${KDE_HANDBOOK} = forceoptional ]]; then
  2899.             punt_bogus_dep KF5 DocTools;
  2900.         fi;
  2901.     fi;
  2902.     if [[ -d po ]] && in_iuse nls && ! use nls; then
  2903.         rm -r po || die;
  2904.     fi;
  2905.     if [[ -d po && -v LINGUAS ]]; then
  2906.         pushd po > /dev/null || die;
  2907.         for lang in *;
  2908.         do
  2909.             if [[ -d ${lang} ]] && ! has ${lang} ${LINGUAS}; then
  2910.                 rm -r ${lang} || die;
  2911.                 if [[ -e CMakeLists.txt ]]; then
  2912.                     cmake_comment_add_subdirectory ${lang};
  2913.                 fi;
  2914.             else
  2915.                 if ! has ${lang/.po/} ${LINGUAS}; then
  2916.                     if [[ ${lang} != CMakeLists.txt ]]; then
  2917.                         rm ${lang} || die;
  2918.                     fi;
  2919.                 fi;
  2920.             fi;
  2921.         done;
  2922.         popd > /dev/null || die;
  2923.     fi;
  2924.     if [[ ${KDE_BUILD_TYPE} = release ]]; then
  2925.         if [[ ${KDE_HANDBOOK} != false && -d ${KDE_DOC_DIR} && ${CATEGORY} != kde-apps ]]; then
  2926.             pushd ${KDE_DOC_DIR} > /dev/null || die;
  2927.             for lang in *;
  2928.             do
  2929.                 if ! has ${lang} ${LINGUAS}; then
  2930.                     cmake_comment_add_subdirectory ${lang};
  2931.                 fi;
  2932.             done;
  2933.             popd > /dev/null || die;
  2934.         fi;
  2935.     fi;
  2936.     if [[ ${CATEGORY} = kde-frameworks ]] && [[ ${PN} != extra-cmake-modules ]]; then
  2937.         cmake_comment_add_subdirectory tests;
  2938.     fi;
  2939.     case ${KDE_PUNT_BOGUS_DEPS} in
  2940.         false)
  2941.  
  2942.         ;;
  2943.         *)
  2944.             if ! use_if_iuse test; then
  2945.                 punt_bogus_dep Qt5 Test;
  2946.             fi;
  2947.             if ! use_if_iuse handbook; then
  2948.                 punt_bogus_dep KF5 DocTools;
  2949.             fi
  2950.         ;;
  2951.     esac;
  2952.     if ! use_if_iuse test; then
  2953.         if [[ ${KDE_TEST} = forceoptional ]]; then
  2954.             punt_bogus_dep Qt5 Test;
  2955.             cmake_comment_add_subdirectory autotests;
  2956.             cmake_comment_add_subdirectory test;
  2957.             cmake_comment_add_subdirectory tests;
  2958.         else
  2959.             if [[ ${CATEGORY} = kde-frameworks || ${CATEGORY} = kde-plasma || ${CATEGORY} = kde-apps ]]; then
  2960.                 cmake_comment_add_subdirectory autotests;
  2961.                 cmake_comment_add_subdirectory test;
  2962.                 cmake_comment_add_subdirectory tests;
  2963.             fi;
  2964.         fi;
  2965.     fi
  2966. }
  2967. kde5_src_test ()
  2968. {
  2969.     debug-print-function ${FUNCNAME} "$@";
  2970.     function _test_runner ()
  2971.     {
  2972.         if [[ -n "${VIRTUALDBUS_TEST}" ]]; then
  2973.             export $(dbus-launch);
  2974.         fi;
  2975.         cmake-utils_src_test
  2976.     };
  2977.     unset DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID;
  2978.     if [[ ${VIRTUALX_REQUIRED} = always || ${VIRTUALX_REQUIRED} = test ]]; then
  2979.         virtx _test_runner;
  2980.     else
  2981.         _test_runner;
  2982.     fi;
  2983.     if [[ -n "${DBUS_SESSION_BUS_PID}" ]]; then
  2984.         kill ${DBUS_SESSION_BUS_PID};
  2985.     fi
  2986. }
  2987. kde5_src_unpack ()
  2988. {
  2989.     debug-print-function ${FUNCNAME} "$@";
  2990.     if [[ ${KDE_BUILD_TYPE} = live ]]; then
  2991.         case ${KDE_SCM} in
  2992.             git)
  2993.                 git-r3_src_unpack
  2994.             ;;
  2995.         esac;
  2996.     else
  2997.         if [[ ${KDEBASE} = kdel10n ]]; then
  2998.             local l10npart=5;
  2999.             [[ ${PN} = kde4-l10n ]] && l10npart=4;
  3000.             mkdir -p "${S}" || die "Failed to create source dir ${S}";
  3001.             cd "${S}";
  3002.             for my_tar in ${A};
  3003.             do
  3004.                 tar -xpf "${DISTDIR}/${my_tar}" --xz "${my_tar/.tar.xz/}/CMakeLists.txt" "${my_tar/.tar.xz/}/${l10npart}" 2> /dev/null || elog "${my_tar}: tar extract command failed at least partially - continuing";
  3005.             done;
  3006.         else
  3007.             default;
  3008.         fi;
  3009.     fi
  3010. }
  3011. kde_l10n2lingua ()
  3012. {
  3013.     local l;
  3014.     for l in "$@";
  3015.     do
  3016.         case ${l} in
  3017.             ca-valencia)
  3018.                 echo ca@valencia
  3019.             ;;
  3020.             sr-ijekavsk)
  3021.                 echo sr@ijekavian
  3022.             ;;
  3023.             sr-Latn-ijekavsk)
  3024.                 echo sr@ijekavianlatin
  3025.             ;;
  3026.             sr-Latn)
  3027.                 echo sr@latin
  3028.             ;;
  3029.             uz-Cyrl)
  3030.                 echo uz@cyrillic
  3031.             ;;
  3032.             *)
  3033.                 echo "${l/-/_}"
  3034.             ;;
  3035.         esac;
  3036.     done
  3037. }
  3038. make_desktop_entry ()
  3039. {
  3040.     [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable";
  3041.     local exec=${1};
  3042.     local name=${2:-${PN}};
  3043.     local icon=${3:-${PN}};
  3044.     local type=${4};
  3045.     local fields=${5};
  3046.     if [[ -z ${type} ]]; then
  3047.         local catmaj=${CATEGORY%%-*};
  3048.         local catmin=${CATEGORY##*-};
  3049.         case ${catmaj} in
  3050.             app)
  3051.                 case ${catmin} in
  3052.                     accessibility)
  3053.                         type="Utility;Accessibility"
  3054.                     ;;
  3055.                     admin)
  3056.                         type=System
  3057.                     ;;
  3058.                     antivirus)
  3059.                         type=System
  3060.                     ;;
  3061.                     arch)
  3062.                         type="Utility;Archiving"
  3063.                     ;;
  3064.                     backup)
  3065.                         type="Utility;Archiving"
  3066.                     ;;
  3067.                     cdr)
  3068.                         type="AudioVideo;DiscBurning"
  3069.                     ;;
  3070.                     dicts)
  3071.                         type="Office;Dictionary"
  3072.                     ;;
  3073.                     doc)
  3074.                         type=Documentation
  3075.                     ;;
  3076.                     editors)
  3077.                         type="Utility;TextEditor"
  3078.                     ;;
  3079.                     emacs)
  3080.                         type="Development;TextEditor"
  3081.                     ;;
  3082.                     emulation)
  3083.                         type="System;Emulator"
  3084.                     ;;
  3085.                     laptop)
  3086.                         type="Settings;HardwareSettings"
  3087.                     ;;
  3088.                     office)
  3089.                         type=Office
  3090.                     ;;
  3091.                     pda)
  3092.                         type="Office;PDA"
  3093.                     ;;
  3094.                     vim)
  3095.                         type="Development;TextEditor"
  3096.                     ;;
  3097.                     xemacs)
  3098.                         type="Development;TextEditor"
  3099.                     ;;
  3100.                 esac
  3101.             ;;
  3102.             dev)
  3103.                 type="Development"
  3104.             ;;
  3105.             games)
  3106.                 case ${catmin} in
  3107.                     action | fps)
  3108.                         type=ActionGame
  3109.                     ;;
  3110.                     arcade)
  3111.                         type=ArcadeGame
  3112.                     ;;
  3113.                     board)
  3114.                         type=BoardGame
  3115.                     ;;
  3116.                     emulation)
  3117.                         type=Emulator
  3118.                     ;;
  3119.                     kids)
  3120.                         type=KidsGame
  3121.                     ;;
  3122.                     puzzle)
  3123.                         type=LogicGame
  3124.                     ;;
  3125.                     roguelike)
  3126.                         type=RolePlaying
  3127.                     ;;
  3128.                     rpg)
  3129.                         type=RolePlaying
  3130.                     ;;
  3131.                     simulation)
  3132.                         type=Simulation
  3133.                     ;;
  3134.                     sports)
  3135.                         type=SportsGame
  3136.                     ;;
  3137.                     strategy)
  3138.                         type=StrategyGame
  3139.                     ;;
  3140.                 esac;
  3141.                 type="Game;${type}"
  3142.             ;;
  3143.             gnome)
  3144.                 type="Gnome;GTK"
  3145.             ;;
  3146.             kde)
  3147.                 type="KDE;Qt"
  3148.             ;;
  3149.             mail)
  3150.                 type="Network;Email"
  3151.             ;;
  3152.             media)
  3153.                 case ${catmin} in
  3154.                     gfx)
  3155.                         type=Graphics
  3156.                     ;;
  3157.                     *)
  3158.                         case ${catmin} in
  3159.                             radio)
  3160.                                 type=Tuner
  3161.                             ;;
  3162.                             sound)
  3163.                                 type=Audio
  3164.                             ;;
  3165.                             tv)
  3166.                                 type=TV
  3167.                             ;;
  3168.                             video)
  3169.                                 type=Video
  3170.                             ;;
  3171.                         esac;
  3172.                         type="AudioVideo;${type}"
  3173.                     ;;
  3174.                 esac
  3175.             ;;
  3176.             net)
  3177.                 case ${catmin} in
  3178.                     dialup)
  3179.                         type=Dialup
  3180.                     ;;
  3181.                     ftp)
  3182.                         type=FileTransfer
  3183.                     ;;
  3184.                     im)
  3185.                         type=InstantMessaging
  3186.                     ;;
  3187.                     irc)
  3188.                         type=IRCClient
  3189.                     ;;
  3190.                     mail)
  3191.                         type=Email
  3192.                     ;;
  3193.                     news)
  3194.                         type=News
  3195.                     ;;
  3196.                     nntp)
  3197.                         type=News
  3198.                     ;;
  3199.                     p2p)
  3200.                         type=FileTransfer
  3201.                     ;;
  3202.                     voip)
  3203.                         type=Telephony
  3204.                     ;;
  3205.                 esac;
  3206.                 type="Network;${type}"
  3207.             ;;
  3208.             sci)
  3209.                 case ${catmin} in
  3210.                     astro*)
  3211.                         type=Astronomy
  3212.                     ;;
  3213.                     bio*)
  3214.                         type=Biology
  3215.                     ;;
  3216.                     calc*)
  3217.                         type=Calculator
  3218.                     ;;
  3219.                     chem*)
  3220.                         type=Chemistry
  3221.                     ;;
  3222.                     elec*)
  3223.                         type=Electronics
  3224.                     ;;
  3225.                     geo*)
  3226.                         type=Geology
  3227.                     ;;
  3228.                     math*)
  3229.                         type=Math
  3230.                     ;;
  3231.                     physics)
  3232.                         type=Physics
  3233.                     ;;
  3234.                     visual*)
  3235.                         type=DataVisualization
  3236.                     ;;
  3237.                 esac;
  3238.                 type="Education;Science;${type}"
  3239.             ;;
  3240.             sys)
  3241.                 type="System"
  3242.             ;;
  3243.             www)
  3244.                 case ${catmin} in
  3245.                     client)
  3246.                         type=WebBrowser
  3247.                     ;;
  3248.                 esac;
  3249.                 type="Network;${type}"
  3250.             ;;
  3251.             *)
  3252.                 type=
  3253.             ;;
  3254.         esac;
  3255.     fi;
  3256.     local slot=${SLOT%/*};
  3257.     if [[ ${slot} == "0" ]]; then
  3258.         local desktop_name="${PN}";
  3259.     else
  3260.         local desktop_name="${PN}-${slot}";
  3261.     fi;
  3262.     local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
  3263.     type=${type%;}${type:+;};
  3264.     eshopts_push -s extglob;
  3265.     if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
  3266.         ewarn "As described in the Icon Theme Specification, icon file extensions are not";
  3267.         ewarn "allowed in .desktop files if the value is not an absolute path.";
  3268.         icon=${icon%.@(xpm|png|svg)};
  3269.     fi;
  3270.     eshopts_pop;
  3271.     cat > "${desktop}"  <<-EOF
  3272. [Desktop Entry]
  3273. Name=${name}
  3274. Type=Application
  3275. Comment=${DESCRIPTION}
  3276. Exec=${exec}
  3277. TryExec=${exec%% *}
  3278. Icon=${icon}
  3279. Categories=${type}
  3280. EOF
  3281.  
  3282.     if [[ ${fields:-=} != *=* ]]; then
  3283.         ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
  3284.         fields="Path=${fields}";
  3285.     fi;
  3286.     [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
  3287.     ( insinto /usr/share/applications;
  3288.     doins "${desktop}" ) || die "installing desktop file failed"
  3289. }
  3290. make_session_desktop ()
  3291. {
  3292.     [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
  3293.     [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
  3294.     local title=$1;
  3295.     local command=$2;
  3296.     local desktop=${T}/${wm:-${PN}}.desktop;
  3297.     shift 2;
  3298.     cat > "${desktop}"  <<-EOF
  3299. [Desktop Entry]
  3300. Name=${title}
  3301. Comment=This session logs you into ${title}
  3302. Exec=${command} $*
  3303. TryExec=${command}
  3304. Type=XSession
  3305. EOF
  3306.  
  3307.     ( insinto /usr/share/xsessions;
  3308.     doins "${desktop}" )
  3309. }
  3310. make_wrapper ()
  3311. {
  3312.     _eutils_eprefix_init;
  3313.     local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
  3314.     local tmpwrapper=$(emktemp);
  3315.     ( echo '#!/bin/sh';
  3316.     [[ -n ${chdir} ]] && printf 'cd "%s"\n' "${EPREFIX}${chdir}";
  3317.     if [[ -n ${libdir} ]]; then
  3318.         local var;
  3319.         if [[ ${CHOST} == *-darwin* ]]; then
  3320.             var=DYLD_LIBRARY_PATH;
  3321.         else
  3322.             var=LD_LIBRARY_PATH;
  3323.         fi;
  3324.         cat  <<-EOF
  3325. if [ "\${${var}+set}" = "set" ] ; then
  3326. export ${var}="\${${var}}:${EPREFIX}${libdir}"
  3327. else
  3328. export ${var}="${EPREFIX}${libdir}"
  3329. fi
  3330. EOF
  3331.  
  3332.     fi
  3333.     printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
  3334.     chmod go+rx "${tmpwrapper}";
  3335.     if [[ -n ${path} ]]; then
  3336.         ( exeinto "${path}";
  3337.         newexe "${tmpwrapper}" "${wrapper}" ) || die;
  3338.     else
  3339.         newbin "${tmpwrapper}" "${wrapper}" || die;
  3340.     fi
  3341. }
  3342. multilib_env ()
  3343. {
  3344.     local CTARGET=${1:-${CTARGET}};
  3345.     local cpu=${CTARGET%%*-};
  3346.     case ${cpu} in
  3347.         aarch64*)
  3348.             export CFLAGS_arm=${CFLAGS_arm-};
  3349.             case ${cpu} in
  3350.                 aarch64*be)
  3351.                     export CHOST_arm="armv8b-${CTARGET#*-}"
  3352.                 ;;
  3353.                 *)
  3354.                     export CHOST_arm="armv8l-${CTARGET#*-}"
  3355.                 ;;
  3356.             esac;
  3357.             CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
  3358.             export CTARGET_arm=${CHOST_arm};
  3359.             export LIBDIR_arm="lib";
  3360.             export CFLAGS_arm64=${CFLAGS_arm64-};
  3361.             export CHOST_arm64=${CTARGET};
  3362.             export CTARGET_arm64=${CHOST_arm64};
  3363.             export LIBDIR_arm64="lib64";
  3364.             : ${MULTILIB_ABIS=arm64};
  3365.             : ${DEFAULT_ABI=arm64}
  3366.         ;;
  3367.         x86_64*)
  3368.             export CFLAGS_x86=${CFLAGS_x86--m32};
  3369.             export CHOST_x86=${CTARGET/x86_64/i686};
  3370.             CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
  3371.             export CTARGET_x86=${CHOST_x86};
  3372.             if [[ ${SYMLINK_LIB} == "yes" ]]; then
  3373.                 export LIBDIR_x86="lib32";
  3374.             else
  3375.                 export LIBDIR_x86="lib";
  3376.             fi;
  3377.             export CFLAGS_amd64=${CFLAGS_amd64--m64};
  3378.             export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
  3379.             export CTARGET_amd64=${CHOST_amd64};
  3380.             export LIBDIR_amd64="lib64";
  3381.             export CFLAGS_x32=${CFLAGS_x32--mx32};
  3382.             export CHOST_x32=${CTARGET/%-gnu/-gnux32};
  3383.             export CTARGET_x32=${CHOST_x32};
  3384.             export LIBDIR_x32="libx32";
  3385.             case ${CTARGET} in
  3386.                 *-gnux32)
  3387.                     : ${MULTILIB_ABIS=x32 amd64 x86};
  3388.                     : ${DEFAULT_ABI=x32}
  3389.                 ;;
  3390.                 *)
  3391.                     : ${MULTILIB_ABIS=amd64 x86};
  3392.                     : ${DEFAULT_ABI=amd64}
  3393.                 ;;
  3394.             esac
  3395.         ;;
  3396.         mips64*)
  3397.             export CFLAGS_o32=${CFLAGS_o32--mabi=32};
  3398.             export CHOST_o32=${CTARGET/mips64/mips};
  3399.             export CTARGET_o32=${CHOST_o32};
  3400.             export LIBDIR_o32="lib";
  3401.             export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
  3402.             export CHOST_n32=${CTARGET};
  3403.             export CTARGET_n32=${CHOST_n32};
  3404.             export LIBDIR_n32="lib32";
  3405.             export CFLAGS_n64=${CFLAGS_n64--mabi=64};
  3406.             export CHOST_n64=${CTARGET};
  3407.             export CTARGET_n64=${CHOST_n64};
  3408.             export LIBDIR_n64="lib64";
  3409.             : ${MULTILIB_ABIS=n64 n32 o32};
  3410.             : ${DEFAULT_ABI=n32}
  3411.         ;;
  3412.         powerpc64*)
  3413.             export CFLAGS_ppc=${CFLAGS_ppc--m32};
  3414.             export CHOST_ppc=${CTARGET/powerpc64/powerpc};
  3415.             export CTARGET_ppc=${CHOST_ppc};
  3416.             export LIBDIR_ppc="lib";
  3417.             export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
  3418.             export CHOST_ppc64=${CTARGET};
  3419.             export CTARGET_ppc64=${CHOST_ppc64};
  3420.             export LIBDIR_ppc64="lib64";
  3421.             : ${MULTILIB_ABIS=ppc64 ppc};
  3422.             : ${DEFAULT_ABI=ppc64}
  3423.         ;;
  3424.         s390x*)
  3425.             export CFLAGS_s390=${CFLAGS_s390--m31};
  3426.             export CHOST_s390=${CTARGET/s390x/s390};
  3427.             export CTARGET_s390=${CHOST_s390};
  3428.             export LIBDIR_s390="lib";
  3429.             export CFLAGS_s390x=${CFLAGS_s390x--m64};
  3430.             export CHOST_s390x=${CTARGET};
  3431.             export CTARGET_s390x=${CHOST_s390x};
  3432.             export LIBDIR_s390x="lib64";
  3433.             : ${MULTILIB_ABIS=s390x s390};
  3434.             : ${DEFAULT_ABI=s390x}
  3435.         ;;
  3436.         sparc64*)
  3437.             export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
  3438.             export CHOST_sparc32=${CTARGET/sparc64/sparc};
  3439.             export CTARGET_sparc32=${CHOST_sparc32};
  3440.             export LIBDIR_sparc32="lib";
  3441.             export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
  3442.             export CHOST_sparc64=${CTARGET};
  3443.             export CTARGET_sparc64=${CHOST_sparc64};
  3444.             export LIBDIR_sparc64="lib64";
  3445.             : ${MULTILIB_ABIS=sparc64 sparc32};
  3446.             : ${DEFAULT_ABI=sparc64}
  3447.         ;;
  3448.         *)
  3449.             : ${MULTILIB_ABIS=default};
  3450.             : ${DEFAULT_ABI=default}
  3451.         ;;
  3452.     esac;
  3453.     export MULTILIB_ABIS DEFAULT_ABI
  3454. }
  3455. multilib_toolchain_setup ()
  3456. {
  3457.     local v vv;
  3458.     export ABI=$1;
  3459.     if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
  3460.         for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  3461.         do
  3462.             vv="_abi_saved_${v}";
  3463.             [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
  3464.             unset ${vv};
  3465.         done;
  3466.         unset _DEFAULT_ABI_SAVED;
  3467.     fi;
  3468.     if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
  3469.         for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
  3470.         do
  3471.             vv="_abi_saved_${v}";
  3472.             [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
  3473.         done;
  3474.         export _DEFAULT_ABI_SAVED="true";
  3475.         export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
  3476.         export CC="$(tc-getCC) $(get_abi_CFLAGS)";
  3477.         export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
  3478.         export F77="$(tc-getF77) $(get_abi_CFLAGS)";
  3479.         export FC="$(tc-getFC) $(get_abi_CFLAGS)";
  3480.         export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
  3481.         export CHOST=$(get_abi_CHOST $1);
  3482.         export CBUILD=$(get_abi_CHOST $1);
  3483.         export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
  3484.         export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
  3485.     fi
  3486. }
  3487. newicon ()
  3488. {
  3489.     _iconins ${FUNCNAME} "$@"
  3490. }
  3491. newmenu ()
  3492. {
  3493.     ( insinto /usr/share/applications;
  3494.     newins "$@" )
  3495. }
  3496. no-as-needed ()
  3497. {
  3498.     case $($(tc-getLD) -v 2>&1 </dev/null) in
  3499.         *GNU*)
  3500.             echo "-Wl,--no-as-needed"
  3501.         ;;
  3502.     esac
  3503. }
  3504. number_abis ()
  3505. {
  3506.     set -- `get_install_abis`;
  3507.     echo $#
  3508. }
  3509. optfeature ()
  3510. {
  3511.     debug-print-function ${FUNCNAME} "$@";
  3512.     local i j msg;
  3513.     local desc=$1;
  3514.     local flag=0;
  3515.     shift;
  3516.     for i in "$@";
  3517.     do
  3518.         for j in ${i};
  3519.         do
  3520.             if has_version "${j}"; then
  3521.                 flag=1;
  3522.             else
  3523.                 flag=0;
  3524.                 break;
  3525.             fi;
  3526.         done;
  3527.         if [[ ${flag} -eq 1 ]]; then
  3528.             break;
  3529.         fi;
  3530.     done;
  3531.     if [[ ${flag} -eq 0 ]]; then
  3532.         for i in "$@";
  3533.         do
  3534.             msg=" ";
  3535.             for j in ${i};
  3536.             do
  3537.                 msg+=" ${j} and";
  3538.             done;
  3539.             msg="${msg:0: -4} for ${desc}";
  3540.             elog "${msg}";
  3541.         done;
  3542.     fi
  3543. }
  3544. path_exists ()
  3545. {
  3546.     local opt=$1;
  3547.     [[ ${opt} == -[ao] ]] && shift || opt="-a";
  3548.     [[ $# -eq 0 ]] && return 1;
  3549.     local p r=0;
  3550.     for p in "$@";
  3551.     do
  3552.         [[ -e ${p} ]];
  3553.         : $(( r += $? ));
  3554.     done;
  3555.     case ${opt} in
  3556.         -a)
  3557.             return $(( r != 0 ))
  3558.         ;;
  3559.         -o)
  3560.             return $(( r == $# ))
  3561.         ;;
  3562.     esac
  3563. }
  3564. pkg_nofetch ()
  3565. {
  3566.     default
  3567. }
  3568. pkg_postinst ()
  3569. {
  3570.     kde5_pkg_postinst;
  3571.     if ! has_version app-text/catdoc || ! has_version dev-libs/libxls; then
  3572.         elog "To get additional features, optional runtime dependencies may be installed:";
  3573.         optfeature "indexing of Microsoft Word or Powerpoint files" app-text/catdoc;
  3574.         optfeature "indexing of Microsoft Excel files" dev-libs/libxls;
  3575.     fi
  3576. }
  3577. pkg_postrm ()
  3578. {
  3579.     kde5_pkg_postrm "$@"
  3580. }
  3581. pkg_preinst ()
  3582. {
  3583.     kde5_pkg_preinst "$@"
  3584. }
  3585. pkg_setup ()
  3586. {
  3587.     kde5_pkg_setup "$@"
  3588. }
  3589. preserve_old_lib ()
  3590. {
  3591.     _eutils_eprefix_init;
  3592.     if [[ ${EBUILD_PHASE} != "preinst" ]]; then
  3593.         eerror "preserve_old_lib() must be called from pkg_preinst() only";
  3594.         die "Invalid preserve_old_lib() usage";
  3595.     fi;
  3596.     [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
  3597.     has preserve-libs ${FEATURES} && return 0;
  3598.     local lib dir;
  3599.     for lib in "$@";
  3600.     do
  3601.         [[ -e ${EROOT}/${lib} ]] || continue;
  3602.         dir=${lib%/*};
  3603.         dodir ${dir} || die "dodir ${dir} failed";
  3604.         cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp ${lib} failed";
  3605.         touch "${ED}"/${lib};
  3606.     done
  3607. }
  3608. preserve_old_lib_notify ()
  3609. {
  3610.     if [[ ${EBUILD_PHASE} != "postinst" ]]; then
  3611.         eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
  3612.         die "Invalid preserve_old_lib_notify() usage";
  3613.     fi;
  3614.     has preserve-libs ${FEATURES} && return 0;
  3615.     _eutils_eprefix_init;
  3616.     local lib notice=0;
  3617.     for lib in "$@";
  3618.     do
  3619.         [[ -e ${EROOT}/${lib} ]] || continue;
  3620.         if [[ ${notice} -eq 0 ]]; then
  3621.             notice=1;
  3622.             ewarn "Old versions of installed libraries were detected on your system.";
  3623.             ewarn "In order to avoid breaking packages that depend on these old libs,";
  3624.             ewarn "the libraries are not being removed.  You need to run revdep-rebuild";
  3625.             ewarn "in order to remove these old dependencies.  If you do not have this";
  3626.             ewarn "helper program, simply emerge the 'gentoolkit' package.";
  3627.             ewarn;
  3628.         fi;
  3629.         ewarn "  # revdep-rebuild --library '${lib}' && rm '${lib}'";
  3630.     done
  3631. }
  3632. prune_libtool_files ()
  3633. {
  3634.     debug-print-function ${FUNCNAME} "$@";
  3635.     local removing_all removing_modules opt;
  3636.     _eutils_eprefix_init;
  3637.     for opt in "$@";
  3638.     do
  3639.         case "${opt}" in
  3640.             --all)
  3641.                 removing_all=1;
  3642.                 removing_modules=1
  3643.             ;;
  3644.             --modules)
  3645.                 removing_modules=1
  3646.             ;;
  3647.             *)
  3648.                 die "Invalid argument to ${FUNCNAME}(): ${opt}"
  3649.             ;;
  3650.         esac;
  3651.     done;
  3652.     local f;
  3653.     local queue=();
  3654.     while IFS= read -r -d '' f; do
  3655.         local archivefile=${f/%.la/.a};
  3656.         if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then
  3657.             continue;
  3658.         fi;
  3659.         [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
  3660.         local reason= pkgconfig_scanned=;
  3661.         local snotlink=$(sed -n -e 's:^shouldnotlink=::p' "${f}");
  3662.         if [[ ${snotlink} == yes ]]; then
  3663.             if [[ -f ${archivefile} ]]; then
  3664.                 einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
  3665.                 queue+=("${archivefile}");
  3666.             fi;
  3667.             if [[ -n ${removing_modules} ]]; then
  3668.                 reason='module';
  3669.             fi;
  3670.         else
  3671.             if [[ -n ${removing_all} ]]; then
  3672.                 reason='requested';
  3673.             else
  3674.                 if [[ ! -f ${archivefile} ]]; then
  3675.                     reason='no static archive';
  3676.                 else
  3677.                     if [[ ! -n $(sed -nre                   "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p"                  "${f}") ]]; then
  3678.                         reason='no libs & flags';
  3679.                     else
  3680.                         if [[ ! -n ${pkgconfig_scanned} ]]; then
  3681.                             local pc_libs=();
  3682.                             if [[ ! -n ${removing_all} ]]; then
  3683.                                 local pc;
  3684.                                 local tf=${T}/prune-lt-files.pc;
  3685.                                 local pkgconf=$(tc-getPKG_CONFIG);
  3686.                                 while IFS= read -r -d '' pc; do
  3687.                                     local arg libs;
  3688.                                     if ${pkgconf} --exists "${pc}" &> /dev/null; then
  3689.                                         sed -e '/^Requires:/d' "${pc}" > "${tf}";
  3690.                                         libs=$(${pkgconf} --libs "${tf}");
  3691.                                     else
  3692.                                         libs=$(sed -ne 's/^Libs://p' "${pc}");
  3693.                                     fi;
  3694.                                     for arg in ${libs};
  3695.                                     do
  3696.                                         if [[ ${arg} == -l* ]]; then
  3697.                                             if [[ ${arg} == '*$*' ]]; then
  3698.                                                 eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
  3699.                                                 eqawarn "(arg: ${arg})";
  3700.                                                 eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
  3701.                                             fi;
  3702.                                             pc_libs+=(lib${arg#-l}.la);
  3703.                                         fi;
  3704.                                     done;
  3705.                                 done < <(find "${D}" -type f -name '*.pc' -print0);
  3706.                                 rm -f "${tf}";
  3707.                             fi;
  3708.                             pkgconfig_scanned=1;
  3709.                         fi;
  3710.                         has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
  3711.                     fi;
  3712.                 fi;
  3713.             fi;
  3714.         fi;
  3715.         if [[ -n ${reason} ]]; then
  3716.             einfo "Removing unnecessary ${f#${D%/}} (${reason})";
  3717.             queue+=("${f}");
  3718.         fi;
  3719.     done < <(find "${ED}" -xtype f -name '*.la' -print0);
  3720.     if [[ -n ${queue[@]} ]]; then
  3721.         rm -f "${queue[@]}";
  3722.     fi
  3723. }
  3724. punt_bogus_dep ()
  3725. {
  3726.     local prefix=${1};
  3727.     local dep=${2};
  3728.     pcregrep -Mni "(?s)find_package\s*\(\s*${prefix}[^)]*?${dep}.*?\)" CMakeLists.txt > "${T}/bogus${dep}";
  3729.     if [[ $? != 0 ]]; then
  3730.         return;
  3731.     fi;
  3732.     local length=$(wc -l "${T}/bogus${dep}" | cut -d " " -f 1);
  3733.     local first=$(head -n 1 "${T}/bogus${dep}" | cut -d ":" -f 1);
  3734.     local last=$(( ${length} + ${first} - 1));
  3735.     sed -e "${first},${last}s/${dep}//" -i CMakeLists.txt || die;
  3736.     if [[ ${length} = 1 ]]; then
  3737.         sed -e "/find_package\s*(\s*${prefix}\(\s\+\(REQUIRED\|CONFIG\|COMPONENTS\|\${[A-Z0-9_]*}\)\)\+\s*)/Is/^/# removed by kde5-functions.eclass - /" -i CMakeLists.txt || die;
  3738.     fi
  3739. }
  3740. raw-ldflags ()
  3741. {
  3742.     local x input="$@";
  3743.     [[ -z ${input} ]] && input=${LDFLAGS};
  3744.     set --;
  3745.     for x in ${input};
  3746.     do
  3747.         case ${x} in
  3748.             -Wl,*)
  3749.                 x=${x#-Wl,};
  3750.                 set -- "$@" ${x//,/ }
  3751.             ;;
  3752.             *)
  3753.  
  3754.             ;;
  3755.         esac;
  3756.     done;
  3757.     echo "$@"
  3758. }
  3759. replace-cpu-flags ()
  3760. {
  3761.     local newcpu="$#";
  3762.     newcpu="${!newcpu}";
  3763.     while [ $# -gt 1 ]; do
  3764.         replace-flags "-march=${1}" "-march=${newcpu}";
  3765.         replace-flags "-mcpu=${1}" "-mcpu=${newcpu}";
  3766.         replace-flags "-mtune=${1}" "-mtune=${newcpu}";
  3767.         shift;
  3768.     done;
  3769.     return 0
  3770. }
  3771. replace-flags ()
  3772. {
  3773.     [[ $# != 2 ]] && die "Usage: replace-flags <old flag> <new flag>";
  3774.     local f var new;
  3775.     for var in $(all-flag-vars);
  3776.     do
  3777.         new=();
  3778.         for f in ${!var};
  3779.         do
  3780.             [[ ${f} == ${1} ]] && f=${2};
  3781.             new+=("${f}");
  3782.         done;
  3783.         eval export ${var}=\""${new[*]}"\";
  3784.     done;
  3785.     return 0
  3786. }
  3787. replace-sparc64-flags ()
  3788. {
  3789.     local SPARC64_CPUS="ultrasparc3 ultrasparc v9";
  3790.     if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then
  3791.         for x in ${SPARC64_CPUS};
  3792.         do
  3793.             CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}";
  3794.         done;
  3795.     else
  3796.         for x in ${SPARC64_CPUS};
  3797.         do
  3798.             CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
  3799.         done;
  3800.     fi;
  3801.     if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then
  3802.         for x in ${SPARC64_CPUS};
  3803.         do
  3804.             CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}";
  3805.         done;
  3806.     else
  3807.         for x in ${SPARC64_CPUS};
  3808.         do
  3809.             CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
  3810.         done;
  3811.     fi;
  3812.     export CFLAGS CXXFLAGS
  3813. }
  3814. replace_all_version_separators ()
  3815. {
  3816.     local c=($(get_all_version_components "${2:-${PV}}"));
  3817.     c=${c[@]//[-._]/$1};
  3818.     echo ${c// }
  3819. }
  3820. replace_version_separator ()
  3821. {
  3822.     eshopts_push -s extglob;
  3823.     local w c v="${3:-${PV}}";
  3824.     declare -i i found=0;
  3825.     w=${1:-1};
  3826.     c=($(get_all_version_components ${v}));
  3827.     if [[ ${w} != *[[:digit:]]* ]]; then
  3828.         for ((i = 0; i < ${#c[@]}; i++))
  3829.         do
  3830.             if [[ ${c[i]} == ${w} ]]; then
  3831.                 c[i]=${2};
  3832.                 break;
  3833.             fi;
  3834.         done;
  3835.     else
  3836.         for ((i = 0; i < ${#c[@]}; i++))
  3837.         do
  3838.             if [[ -n "${c[i]//[^-._]}" ]]; then
  3839.                 found+=1;
  3840.                 if ((found == w)); then
  3841.                     c[i]=${2};
  3842.                     break;
  3843.                 fi;
  3844.             fi;
  3845.         done;
  3846.     fi;
  3847.     c=${c[*]};
  3848.     echo ${c// };
  3849.     eshopts_pop
  3850. }
  3851. setup-allowed-flags ()
  3852. {
  3853.     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,*');
  3854.     ALLOWED_FLAGS+=('-fno-stack-protector*' '-fabi-version=*' -fno-strict-aliasing -fno-bounds-check -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer '-fno-builtin*');
  3855.     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)
  3856. }
  3857. src_compile ()
  3858. {
  3859.     kde5_src_compile "$@"
  3860. }
  3861. src_configure ()
  3862. {
  3863.     local mycmakeargs=($(cmake-utils_use_find_package epub EPub) $(cmake-utils_use_find_package exif Exiv2) $(cmake-utils_use_find_package ffmpeg FFmpeg) $(cmake-utils_use_find_package pdf PopplerQt5) $(cmake-utils_use_find_package taglib Taglib));
  3864.     kde5_src_configure
  3865. }
  3866. src_install ()
  3867. {
  3868.     kde5_src_install "$@"
  3869. }
  3870. src_prepare ()
  3871. {
  3872.     kde5_src_prepare "$@"
  3873. }
  3874. src_test ()
  3875. {
  3876.     kde5_src_test "$@"
  3877. }
  3878. src_unpack ()
  3879. {
  3880.     kde5_src_unpack "$@"
  3881. }
  3882. strip-flags ()
  3883. {
  3884.     local x y var;
  3885.     local ALLOWED_FLAGS;
  3886.     setup-allowed-flags;
  3887.     set -f;
  3888.     for var in $(all-flag-vars);
  3889.     do
  3890.         local new=();
  3891.         for x in ${!var};
  3892.         do
  3893.             local flag=${x%%=*};
  3894.             for y in "${ALLOWED_FLAGS[@]}";
  3895.             do
  3896.                 if [[ -z ${flag%%${y}} ]]; then
  3897.                     new+=("${x}");
  3898.                     break;
  3899.                 fi;
  3900.             done;
  3901.         done;
  3902.         if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then
  3903.             new+=(-O2);
  3904.         fi;
  3905.         if [[ ${!var} != "${new[*]}" ]]; then
  3906.             einfo "strip-flags: ${var}: changed '${!var}' to '${new[*]}'";
  3907.         fi;
  3908.         eval export ${var}=\""${new[*]}"\";
  3909.     done;
  3910.     set +f;
  3911.     return 0
  3912. }
  3913. strip-linguas ()
  3914. {
  3915.     local ls newls nols;
  3916.     if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
  3917.         local op=$1;
  3918.         shift;
  3919.         ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
  3920.         shift;
  3921.         local d f;
  3922.         for d in "$@";
  3923.         do
  3924.             if [[ ${op} == "-u" ]]; then
  3925.                 newls=${ls};
  3926.             else
  3927.                 newls="";
  3928.             fi;
  3929.             for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
  3930.             do
  3931.                 if [[ ${op} == "-i" ]]; then
  3932.                     has ${f} ${ls} && newls="${newls} ${f}";
  3933.                 else
  3934.                     has ${f} ${ls} || newls="${newls} ${f}";
  3935.                 fi;
  3936.             done;
  3937.             ls=${newls};
  3938.         done;
  3939.     else
  3940.         ls="$@";
  3941.     fi;
  3942.     nols="";
  3943.     newls="";
  3944.     for f in ${LINGUAS};
  3945.     do
  3946.         if has ${f} ${ls}; then
  3947.             newls="${newls} ${f}";
  3948.         else
  3949.             nols="${nols} ${f}";
  3950.         fi;
  3951.     done;
  3952.     [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
  3953.     export LINGUAS=${newls:1}
  3954. }
  3955. strip-unsupported-flags ()
  3956. {
  3957.     export CFLAGS=$(test-flags-CC ${CFLAGS});
  3958.     export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS});
  3959.     export FFLAGS=$(test-flags-F77 ${FFLAGS});
  3960.     export FCFLAGS=$(test-flags-FC ${FCFLAGS})
  3961. }
  3962. tc-arch ()
  3963. {
  3964.     tc-ninja_magic_to_arch portage "$@"
  3965. }
  3966. tc-arch-kernel ()
  3967. {
  3968.     tc-ninja_magic_to_arch kern "$@"
  3969. }
  3970. tc-endian ()
  3971. {
  3972.     local host=$1;
  3973.     [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  3974.     host=${host%%-*};
  3975.     case ${host} in
  3976.         aarch64*be)
  3977.             echo big
  3978.         ;;
  3979.         aarch64)
  3980.             echo little
  3981.         ;;
  3982.         alpha*)
  3983.             echo big
  3984.         ;;
  3985.         arm*b*)
  3986.             echo big
  3987.         ;;
  3988.         arm*)
  3989.             echo little
  3990.         ;;
  3991.         cris*)
  3992.             echo little
  3993.         ;;
  3994.         hppa*)
  3995.             echo big
  3996.         ;;
  3997.         i?86*)
  3998.             echo little
  3999.         ;;
  4000.         ia64*)
  4001.             echo little
  4002.         ;;
  4003.         m68*)
  4004.             echo big
  4005.         ;;
  4006.         mips*l*)
  4007.             echo little
  4008.         ;;
  4009.         mips*)
  4010.             echo big
  4011.         ;;
  4012.         powerpc*le)
  4013.             echo little
  4014.         ;;
  4015.         powerpc*)
  4016.             echo big
  4017.         ;;
  4018.         s390*)
  4019.             echo big
  4020.         ;;
  4021.         sh*b*)
  4022.             echo big
  4023.         ;;
  4024.         sh*)
  4025.             echo little
  4026.         ;;
  4027.         sparc*)
  4028.             echo big
  4029.         ;;
  4030.         x86_64*)
  4031.             echo little
  4032.         ;;
  4033.         *)
  4034.             echo wtf
  4035.         ;;
  4036.     esac
  4037. }
  4038. tc-env_build ()
  4039. {
  4040.     tc-export_build_env;
  4041.     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) "$@"
  4042. }
  4043. tc-export ()
  4044. {
  4045.     local var;
  4046.     for var in "$@";
  4047.     do
  4048.         [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
  4049.         eval tc-get${var} > /dev/null;
  4050.     done
  4051. }
  4052. tc-export_build_env ()
  4053. {
  4054.     tc-export "$@";
  4055.     : ${BUILD_CFLAGS:=-O1 -pipe};
  4056.     : ${BUILD_CXXFLAGS:=-O1 -pipe};
  4057.     : ${BUILD_CPPFLAGS:= };
  4058.     : ${BUILD_LDFLAGS:= };
  4059.     export BUILD_{C,CXX,CPP,LD}FLAGS;
  4060.     local v;
  4061.     for v in BUILD_{C,CXX,CPP,LD}FLAGS;
  4062.     do
  4063.         export ${v#BUILD_}_FOR_BUILD="${!v}";
  4064.     done
  4065. }
  4066. tc-get-compiler-type ()
  4067. {
  4068.     local code='
  4069. #if defined(__PATHSCALE__)
  4070.     HAVE_PATHCC
  4071. #elif defined(__clang__)
  4072.     HAVE_CLANG
  4073. #elif defined(__GNUC__)
  4074.     HAVE_GCC
  4075. #endif
  4076. ';
  4077.     local res=$($(tc-getCPP "$@") -E -P - <<<"${code}");
  4078.     case ${res} in
  4079.         *HAVE_PATHCC*)
  4080.             echo pathcc
  4081.         ;;
  4082.         *HAVE_CLANG*)
  4083.             echo clang
  4084.         ;;
  4085.         *HAVE_GCC*)
  4086.             echo gcc
  4087.         ;;
  4088.         *)
  4089.             echo unknown
  4090.         ;;
  4091.     esac
  4092. }
  4093. tc-getAR ()
  4094. {
  4095.     tc-getPROG AR ar "$@"
  4096. }
  4097. tc-getAS ()
  4098. {
  4099.     tc-getPROG AS as "$@"
  4100. }
  4101. tc-getBUILD_AR ()
  4102. {
  4103.     tc-getBUILD_PROG AR ar "$@"
  4104. }
  4105. tc-getBUILD_AS ()
  4106. {
  4107.     tc-getBUILD_PROG AS as "$@"
  4108. }
  4109. tc-getBUILD_CC ()
  4110. {
  4111.     tc-getBUILD_PROG CC gcc "$@"
  4112. }
  4113. tc-getBUILD_CPP ()
  4114. {
  4115.     tc-getBUILD_PROG CPP "$(tc-getBUILD_CC) -E" "$@"
  4116. }
  4117. tc-getBUILD_CXX ()
  4118. {
  4119.     tc-getBUILD_PROG CXX g++ "$@"
  4120. }
  4121. tc-getBUILD_LD ()
  4122. {
  4123.     tc-getBUILD_PROG LD ld "$@"
  4124. }
  4125. tc-getBUILD_NM ()
  4126. {
  4127.     tc-getBUILD_PROG NM nm "$@"
  4128. }
  4129. tc-getBUILD_OBJCOPY ()
  4130. {
  4131.     tc-getBUILD_PROG OBJCOPY objcopy "$@"
  4132. }
  4133. tc-getBUILD_PKG_CONFIG ()
  4134. {
  4135.     tc-getBUILD_PROG PKG_CONFIG pkg-config "$@"
  4136. }
  4137. tc-getBUILD_PROG ()
  4138. {
  4139.     _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}"
  4140. }
  4141. tc-getBUILD_RANLIB ()
  4142. {
  4143.     tc-getBUILD_PROG RANLIB ranlib "$@"
  4144. }
  4145. tc-getBUILD_STRIP ()
  4146. {
  4147.     tc-getBUILD_PROG STRIP strip "$@"
  4148. }
  4149. tc-getCC ()
  4150. {
  4151.     tc-getPROG CC gcc "$@"
  4152. }
  4153. tc-getCPP ()
  4154. {
  4155.     tc-getPROG CPP "${CC:-gcc} -E" "$@"
  4156. }
  4157. tc-getCXX ()
  4158. {
  4159.     tc-getPROG CXX g++ "$@"
  4160. }
  4161. tc-getDLLWRAP ()
  4162. {
  4163.     tc-getPROG DLLWRAP dllwrap "$@"
  4164. }
  4165. tc-getF77 ()
  4166. {
  4167.     tc-getPROG F77 gfortran "$@"
  4168. }
  4169. tc-getFC ()
  4170. {
  4171.     tc-getPROG FC gfortran "$@"
  4172. }
  4173. tc-getGCJ ()
  4174. {
  4175.     tc-getPROG GCJ gcj "$@"
  4176. }
  4177. tc-getGO ()
  4178. {
  4179.     tc-getPROG GO gccgo "$@"
  4180. }
  4181. tc-getLD ()
  4182. {
  4183.     tc-getPROG LD ld "$@"
  4184. }
  4185. tc-getNM ()
  4186. {
  4187.     tc-getPROG NM nm "$@"
  4188. }
  4189. tc-getOBJCOPY ()
  4190. {
  4191.     tc-getPROG OBJCOPY objcopy "$@"
  4192. }
  4193. tc-getOBJDUMP ()
  4194. {
  4195.     tc-getPROG OBJDUMP objdump "$@"
  4196. }
  4197. tc-getPKG_CONFIG ()
  4198. {
  4199.     tc-getPROG PKG_CONFIG pkg-config "$@"
  4200. }
  4201. tc-getPROG ()
  4202. {
  4203.     _tc-getPROG CHOST "$@"
  4204. }
  4205. tc-getRANLIB ()
  4206. {
  4207.     tc-getPROG RANLIB ranlib "$@"
  4208. }
  4209. tc-getRC ()
  4210. {
  4211.     tc-getPROG RC windres "$@"
  4212. }
  4213. tc-getSTRIP ()
  4214. {
  4215.     tc-getPROG STRIP strip "$@"
  4216. }
  4217. tc-has-openmp ()
  4218. {
  4219.     local base="${T}/test-tc-openmp";
  4220.     cat > "${base}.c"  <<-EOF
  4221. #include <omp.h>
  4222. int main() {
  4223. int nthreads, tid, ret = 0;
  4224. #pragma omp parallel private(nthreads, tid)
  4225. {
  4226. tid = omp_get_thread_num();
  4227. nthreads = omp_get_num_threads(); ret += tid + nthreads;
  4228. }
  4229. return ret;
  4230. }
  4231. EOF
  4232.  
  4233.     $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &> /dev/null;
  4234.     local ret=$?;
  4235.     rm -f "${base}"*;
  4236.     return ${ret}
  4237. }
  4238. tc-has-tls ()
  4239. {
  4240.     local base="${T}/test-tc-tls";
  4241.     cat > "${base}.c"  <<-EOF
  4242. int foo(int *i) {
  4243. static __thread int j = 0;
  4244. return *i ? j : *i;
  4245. }
  4246. EOF
  4247.  
  4248.     local flags;
  4249.     case $1 in
  4250.         -s)
  4251.             flags="-S"
  4252.         ;;
  4253.         -c)
  4254.             flags="-c"
  4255.         ;;
  4256.         -l)
  4257.  
  4258.         ;;
  4259.         -*)
  4260.             die "Usage: tc-has-tls [-c|-l] [toolchain prefix]"
  4261.         ;;
  4262.     esac;
  4263.     : ${flags:=-fPIC -shared -Wl,-z,defs};
  4264.     [[ $1 == -* ]] && shift;
  4265.     $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &> /dev/null;
  4266.     local ret=$?;
  4267.     rm -f "${base}"*;
  4268.     return ${ret}
  4269. }
  4270. tc-is-clang ()
  4271. {
  4272.     [[ $(tc-get-compiler-type) == clang ]]
  4273. }
  4274. tc-is-cross-compiler ()
  4275. {
  4276.     [[ ${CBUILD:-${CHOST}} != ${CHOST} ]]
  4277. }
  4278. tc-is-gcc ()
  4279. {
  4280.     [[ $(tc-get-compiler-type) == gcc ]]
  4281. }
  4282. tc-is-softfloat ()
  4283. {
  4284.     local CTARGET=${CTARGET:-${CHOST}};
  4285.     case ${CTARGET} in
  4286.         bfin* | h8300*)
  4287.             echo "only"
  4288.         ;;
  4289.         *)
  4290.             if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then
  4291.                 echo "yes";
  4292.             else
  4293.                 if [[ ${CTARGET//_/-} == *-softfp-* ]]; then
  4294.                     echo "softfp";
  4295.                 else
  4296.                     echo "no";
  4297.                 fi;
  4298.             fi
  4299.         ;;
  4300.     esac
  4301. }
  4302. tc-is-static-only ()
  4303. {
  4304.     local host=${CTARGET:-${CHOST}};
  4305.     [[ ${host} == *-mint* ]]
  4306. }
  4307. tc-ld-disable-gold ()
  4308. {
  4309.     if ! tc-ld-is-gold "$@"; then
  4310.         return;
  4311.     fi;
  4312.     ewarn "Forcing usage of the BFD linker instead of GOLD";
  4313.     local ld=$(tc-getLD "$@");
  4314.     local bfd_ld="${ld%% *}.bfd";
  4315.     local path_ld=$(which "${bfd_ld}" 2>/dev/null);
  4316.     [[ -e ${path_ld} ]] && export LD=${bfd_ld};
  4317.     local major=$(gcc-major-version "$@");
  4318.     local minor=$(gcc-minor-version "$@");
  4319.     if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]]; then
  4320.         if [[ -e ${path_ld} ]]; then
  4321.             local d="${T}/bfd-linker";
  4322.             mkdir -p "${d}";
  4323.             ln -sf "${path_ld}" "${d}"/ld;
  4324.             export LDFLAGS="${LDFLAGS} -B${d}";
  4325.         else
  4326.             die "unable to locate a BFD linker to bypass gold";
  4327.         fi;
  4328.     else
  4329.         export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
  4330.     fi
  4331. }
  4332. tc-ld-is-gold ()
  4333. {
  4334.     local out;
  4335.     out=$($(tc-getLD "$@") --version 2>&1);
  4336.     if [[ ${out} == *"GNU gold"* ]]; then
  4337.         return 0;
  4338.     fi;
  4339.     local base="${T}/test-tc-gold";
  4340.     cat > "${base}.c"  <<-EOF
  4341. int main() { return 0; }
  4342. EOF
  4343.  
  4344.     out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1);
  4345.     rm -f "${base}"*;
  4346.     if [[ ${out} == *"GNU gold"* ]]; then
  4347.         return 0;
  4348.     fi;
  4349.     return 1
  4350. }
  4351. tc-ninja_magic_to_arch ()
  4352. {
  4353.     function ninj ()
  4354.     {
  4355.         [[ ${type} == "kern" ]] && echo $1 || echo $2
  4356.     };
  4357.     local type=$1;
  4358.     local host=$2;
  4359.     [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
  4360.     case ${host} in
  4361.         aarch64*)
  4362.             echo arm64
  4363.         ;;
  4364.         alpha*)
  4365.             echo alpha
  4366.         ;;
  4367.         arm*)
  4368.             echo arm
  4369.         ;;
  4370.         avr*)
  4371.             ninj avr32 avr
  4372.         ;;
  4373.         bfin*)
  4374.             ninj blackfin bfin
  4375.         ;;
  4376.         c6x*)
  4377.             echo c6x
  4378.         ;;
  4379.         cris*)
  4380.             echo cris
  4381.         ;;
  4382.         frv*)
  4383.             echo frv
  4384.         ;;
  4385.         hexagon*)
  4386.             echo hexagon
  4387.         ;;
  4388.         hppa*)
  4389.             ninj parisc hppa
  4390.         ;;
  4391.         i?86*)
  4392.             if [[ ${type} == "kern" && ${host} == *freebsd* ]]; then
  4393.                 echo i386;
  4394.             else
  4395.                 echo x86;
  4396.             fi
  4397.         ;;
  4398.         ia64*)
  4399.             echo ia64
  4400.         ;;
  4401.         m68*)
  4402.             echo m68k
  4403.         ;;
  4404.         metag*)
  4405.             echo metag
  4406.         ;;
  4407.         microblaze*)
  4408.             echo microblaze
  4409.         ;;
  4410.         mips*)
  4411.             echo mips
  4412.         ;;
  4413.         nios2*)
  4414.             echo nios2
  4415.         ;;
  4416.         nios*)
  4417.             echo nios
  4418.         ;;
  4419.         or32*)
  4420.             echo openrisc
  4421.         ;;
  4422.         powerpc*)
  4423.             if [[ ${type} == "kern" ]]; then
  4424.                 echo powerpc;
  4425.             else
  4426.                 if [[ ${host} == powerpc64* ]]; then
  4427.                     echo ppc64;
  4428.                 else
  4429.                     echo ppc;
  4430.                 fi;
  4431.             fi
  4432.         ;;
  4433.         riscv*)
  4434.             echo riscv
  4435.         ;;
  4436.         s390*)
  4437.             echo s390
  4438.         ;;
  4439.         score*)
  4440.             echo score
  4441.         ;;
  4442.         sh64*)
  4443.             ninj sh64 sh
  4444.         ;;
  4445.         sh*)
  4446.             echo sh
  4447.         ;;
  4448.         sparc64*)
  4449.             ninj sparc64 sparc
  4450.         ;;
  4451.         sparc*)
  4452.             [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
  4453.         ;;
  4454.         tile*)
  4455.             echo tile
  4456.         ;;
  4457.         vax*)
  4458.             echo vax
  4459.         ;;
  4460.         x86_64*freebsd*)
  4461.             echo amd64
  4462.         ;;
  4463.         x86_64*)
  4464.             if [[ ${type} == "kern" ]]; then
  4465.                 echo x86;
  4466.             else
  4467.                 echo amd64;
  4468.             fi
  4469.         ;;
  4470.         xtensa*)
  4471.             echo xtensa
  4472.         ;;
  4473.         *)
  4474.             echo unknown
  4475.         ;;
  4476.     esac
  4477. }
  4478. tc-stack-grows-down ()
  4479. {
  4480.     case ${ARCH} in
  4481.         hppa | metag)
  4482.             return 1
  4483.         ;;
  4484.     esac;
  4485.     return 0
  4486. }
  4487. test-flag-CC ()
  4488. {
  4489.     test-flag-PROG "CC" c "$1"
  4490. }
  4491. test-flag-CXX ()
  4492. {
  4493.     test-flag-PROG "CXX" c++ "$1"
  4494. }
  4495. test-flag-F77 ()
  4496. {
  4497.     test-flag-PROG "F77" f77 "$1"
  4498. }
  4499. test-flag-FC ()
  4500. {
  4501.     test-flag-PROG "FC" f95 "$1"
  4502. }
  4503. test-flag-PROG ()
  4504. {
  4505.     local comp=$1;
  4506.     local lang=$2;
  4507.     local flag=$3;
  4508.     [[ -z ${comp} || -z ${flag} ]] && return 1;
  4509.     local cmdline=($(tc-get${comp}) -Werror -c -o /dev/null);
  4510.     if "${cmdline[@]}" -x${lang} - < /dev/null > /dev/null 2>&1; then
  4511.         "${cmdline[@]}" "${flag}" -x${lang} - < /dev/null > /dev/null 2>&1;
  4512.     else
  4513.         "${cmdline[@]}" "${flag}" -c -o /dev/null /dev/null > /dev/null 2>&1;
  4514.     fi
  4515. }
  4516. test-flags ()
  4517. {
  4518.     test-flags-CC "$@"
  4519. }
  4520. test-flags-CC ()
  4521. {
  4522.     test-flags-PROG "CC" "$@"
  4523. }
  4524. test-flags-CXX ()
  4525. {
  4526.     test-flags-PROG "CXX" "$@"
  4527. }
  4528. test-flags-F77 ()
  4529. {
  4530.     test-flags-PROG "F77" "$@"
  4531. }
  4532. test-flags-FC ()
  4533. {
  4534.     test-flags-PROG "FC" "$@"
  4535. }
  4536. test-flags-PROG ()
  4537. {
  4538.     local comp=$1;
  4539.     local flags=();
  4540.     local x;
  4541.     shift;
  4542.     [[ -z ${comp} ]] && return 1;
  4543.     for x in "$@";
  4544.     do
  4545.         test-flag-${comp} "${x}" && flags+=("${x}");
  4546.     done;
  4547.     echo "${flags[*]}";
  4548.     [[ ${#flags[@]} -gt 0 ]]
  4549. }
  4550. test_version_info ()
  4551. {
  4552.     if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
  4553.         return 0;
  4554.     else
  4555.         return 1;
  4556.     fi
  4557. }
  4558. use_if_iuse ()
  4559. {
  4560.     in_iuse $1 || return 1;
  4561.     use $1
  4562. }
  4563. validate_desktop_entries ()
  4564. {
  4565.     _eutils_eprefix_init;
  4566.     if [[ -x "${EPREFIX}"/usr/bin/desktop-file-validate ]]; then
  4567.         einfo "Checking desktop entry validity";
  4568.         local directories="";
  4569.         for d in /usr/share/applications $@;
  4570.         do
  4571.             [[ -d ${ED}${d} ]] && directories="${directories} ${ED}${d}";
  4572.         done;
  4573.         if [[ -n ${directories} ]]; then
  4574.             for FILE in $(find ${directories} -name "*\.desktop"                            -not -path '*.hidden*' | sort -u 2>/dev/null);
  4575.             do
  4576.                 local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" |                               sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
  4577.                 [[ -n $temp ]] && elog ${temp/--/${FILE/${ED}/}:};
  4578.             done;
  4579.         fi;
  4580.         echo "";
  4581.     else
  4582.         einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
  4583.     fi
  4584. }
  4585. version_compare ()
  4586. {
  4587.     eshopts_push -s extglob;
  4588.     local ver_a=${1} ver_b=${2} parts_a parts_b;
  4589.     local cur_tok_a cur_tok_b num_part_a num_part_b;
  4590.     local -i cur_idx_a=0 cur_idx_b=0 prev_idx_a prev_idx_b;
  4591.     parts_a=($(get_all_version_components "${ver_a}" ));
  4592.     parts_b=($(get_all_version_components "${ver_b}" ));
  4593.     local -i inf_loop=0;
  4594.     while true; do
  4595.         inf_loop+=1;
  4596.         ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  4597.         prev_idx_a=cur_idx_a;
  4598.         prev_idx_b=cur_idx_b;
  4599.         cur_tok_a=${parts_a[cur_idx_a]};
  4600.         cur_tok_b=${parts_b[cur_idx_b]};
  4601.         if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
  4602.             cur_idx_a+=1;
  4603.             [[ ${parts_a[cur_idx_a]} == . ]] && cur_idx_a+=1;
  4604.         else
  4605.             cur_tok_a=;
  4606.         fi;
  4607.         if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
  4608.             cur_idx_b+=1;
  4609.             [[ ${parts_b[cur_idx_b]} == . ]] && cur_idx_b+=1;
  4610.         else
  4611.             cur_tok_b=;
  4612.         fi;
  4613.         [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]] && break;
  4614.         [[ -z ${cur_tok_a} ]] && eshopts_pop && return 1;
  4615.         [[ -z ${cur_tok_b} ]] && eshopts_pop && return 3;
  4616.         if (( prev_idx_a != 0 && prev_idx_b != 0 )) && [[ ${cur_tok_a} == 0* || ${cur_tok_b} == 0* ]]; then
  4617.             cur_tok_a=${cur_tok_a%%+(0)};
  4618.             cur_tok_b=${cur_tok_b%%+(0)};
  4619.             [[ ${cur_tok_a} < ${cur_tok_b} ]] && eshopts_pop && return 1;
  4620.             [[ ${cur_tok_a} > ${cur_tok_b} ]] && eshopts_pop && return 3;
  4621.         else
  4622.             cur_tok_a=${cur_tok_a##+(0)};
  4623.             cur_tok_b=${cur_tok_b##+(0)};
  4624.             : ${cur_tok_a:=0};
  4625.             : ${cur_tok_b:=0};
  4626.             ((cur_tok_a < cur_tok_b)) && eshopts_pop && return 1;
  4627.             ((cur_tok_a > cur_tok_b)) && eshopts_pop && return 3;
  4628.         fi;
  4629.     done;
  4630.     local letter_a=;
  4631.     letter_a=${parts_a[cur_idx_a]};
  4632.     if [[ ${#letter_a} -eq 1 && -z ${letter_a/[a-z]} ]]; then
  4633.         cur_idx_a+=1;
  4634.     else
  4635.         letter_a=@;
  4636.     fi;
  4637.     local letter_b=;
  4638.     letter_b=${parts_b[cur_idx_b]};
  4639.     if [[ ${#letter_b} -eq 1 && -z ${letter_b/[a-z]} ]]; then
  4640.         cur_idx_b+=1;
  4641.     else
  4642.         letter_b=@;
  4643.     fi;
  4644.     [[ ${letter_a} < ${letter_b} ]] && eshopts_pop && return 1;
  4645.     [[ ${letter_a} > ${letter_b} ]] && eshopts_pop && return 3;
  4646.     inf_loop=0;
  4647.     while true; do
  4648.         inf_loop+=1;
  4649.         ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
  4650.         [[ ${parts_a[cur_idx_a]} == _ ]] && ((cur_idx_a++));
  4651.         [[ ${parts_b[cur_idx_b]} == _ ]] && ((cur_idx_b++));
  4652.         cur_tok_a=${parts_a[cur_idx_a]};
  4653.         cur_tok_b=${parts_b[cur_idx_b]};
  4654.         num_part_a=0;
  4655.         num_part_b=0;
  4656.         if has ${cur_tok_a%%+([0-9])} "alpha" "beta" "pre" "rc" "p"; then
  4657.             cur_idx_a+=1;
  4658.             num_part_a=${cur_tok_a##+([a-z])};
  4659.             num_part_a=${num_part_a##+(0)};
  4660.             : ${num_part_a:=0};
  4661.             cur_tok_a=${cur_tok_a%%+([0-9])};
  4662.         else
  4663.             cur_tok_a=;
  4664.         fi;
  4665.         if has ${cur_tok_b%%+([0-9])} alpha beta pre rc p; then
  4666.             cur_idx_b+=1;
  4667.             num_part_b=${cur_tok_b##+([a-z])};
  4668.             num_part_b=${num_part_b##+(0)};
  4669.             : ${num_part_b:=0};
  4670.             cur_tok_b=${cur_tok_b%%+([0-9])};
  4671.         else
  4672.             cur_tok_b=;
  4673.         fi;
  4674.         if [[ ${cur_tok_a} != ${cur_tok_b} ]]; then
  4675.             local suffix;
  4676.             for suffix in alpha beta pre rc "" p;
  4677.             do
  4678.                 [[ ${cur_tok_a} == ${suffix} ]] && eshopts_pop && return 1;
  4679.                 [[ ${cur_tok_b} == ${suffix} ]] && eshopts_pop && return 3;
  4680.             done;
  4681.         else
  4682.             if [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]]; then
  4683.                 break;
  4684.             else
  4685.                 ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  4686.                 ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  4687.             fi;
  4688.         fi;
  4689.     done;
  4690.     [[ ${parts_a[cur_idx_a]} == - ]] && ((cur_idx_a++));
  4691.     [[ ${parts_b[cur_idx_b]} == - ]] && ((cur_idx_b++));
  4692.     if [[ -n ${parts_a[cur_idx_a]/r+([0-9])} || -n ${parts_b[cur_idx_b]/r+([0-9])} ]]; then
  4693.         die "versionator compare bug [revisions, ${ver_a}, ${ver_b}]";
  4694.     fi;
  4695.     num_part_a=${parts_a[cur_idx_a]#r};
  4696.     num_part_a=${num_part_a##+(0)};
  4697.     : ${num_part_a:=0};
  4698.     num_part_b=${parts_b[cur_idx_b]#r};
  4699.     num_part_b=${num_part_b##+(0)};
  4700.     : ${num_part_b:=0};
  4701.     ((num_part_a < num_part_b)) && eshopts_pop && return 1;
  4702.     ((num_part_a > num_part_b)) && eshopts_pop && return 3;
  4703.     eshopts_pop;
  4704.     return 2
  4705. }
  4706. version_format_string ()
  4707. {
  4708.     local fstr=$1;
  4709.     shift;
  4710.     set -- $(get_version_components "$@");
  4711.     eval echo "${fstr}"
  4712. }
  4713. version_is_at_least ()
  4714. {
  4715.     local want_s="$1" have_s="${2:-${PVR}}" r;
  4716.     version_compare "${want_s}" "${have_s}";
  4717.     r=$?;
  4718.     case $r in
  4719.         1 | 2)
  4720.             return 0
  4721.         ;;
  4722.         3)
  4723.             return 1
  4724.         ;;
  4725.         *)
  4726.             die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
  4727.         ;;
  4728.     esac
  4729. }
  4730. version_sort ()
  4731. {
  4732.     eshopts_push -s extglob;
  4733.     local items=;
  4734.     local -i left=0;
  4735.     items=("$@");
  4736.     while ((left < ${#items[@]})); do
  4737.         local -i lowest_idx=left;
  4738.         local -i idx=lowest_idx+1;
  4739.         while ((idx < ${#items[@]})); do
  4740.             version_compare "${items[lowest_idx]}" "${items[idx]}";
  4741.             [[ $? -eq 3 ]] && lowest_idx=idx;
  4742.             idx+=1;
  4743.         done;
  4744.         local tmp=${items[lowest_idx]};
  4745.         items[lowest_idx]=${items[left]};
  4746.         items[left]=${tmp};
  4747.         left+=1;
  4748.     done;
  4749.     echo ${items[@]};
  4750.     eshopts_pop
  4751. }
  4752. virtualmake ()
  4753. {
  4754.     debug-print-function ${FUNCNAME} "$@";
  4755.     [[ ${EAPI} == [2345] ]] || die "${FUNCNAME} is unsupported in EAPI > 5, please use virtx";
  4756.     if [[ -n ${maketype} ]]; then
  4757.         [[ ${EAPI} == [2345] ]] || die "maketype is banned in EAPI > 5";
  4758.         eqawarn "ebuild is exporting \$maketype=${maketype}";
  4759.         eqawarn "Ebuild should be migrated to use 'virtx command' instead.";
  4760.         VIRTUALX_COMMAND=${maketype};
  4761.     fi;
  4762.     virtx "${VIRTUALX_COMMAND}" "${@}"
  4763. }
  4764. virtx ()
  4765. {
  4766.     debug-print-function ${FUNCNAME} "$@";
  4767.     [[ $# -lt 1 ]] && die "${FUNCNAME} needs at least one argument";
  4768.     local i=0;
  4769.     local retval=0;
  4770.     local OLD_SANDBOX_ON="${SANDBOX_ON}";
  4771.     local XVFB XHOST XDISPLAY;
  4772.     local xvfbargs="-screen 0 1280x1024x24 +extension RANDR";
  4773.     XVFB=$(type -p Xvfb) || die;
  4774.     XHOST=$(type -p xhost) || die;
  4775.     debug-print "${FUNCNAME}: running Xvfb hack";
  4776.     export XAUTHORITY=;
  4777.     einfo "Scanning for an open DISPLAY to start Xvfb ...";
  4778.     XDISPLAY=$(i=0; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i});
  4779.     debug-print "${FUNCNAME}: XDISPLAY=${XDISPLAY}";
  4780.     export SANDBOX_ON="0";
  4781.     debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
  4782.     ${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2;
  4783.     local start=${XDISPLAY};
  4784.     while [[ ! -f /tmp/.X${XDISPLAY}-lock ]]; do
  4785.         if ((XDISPLAY - start > 15)); then
  4786.             eerror "'${XVFB} :${XDISPLAY} ${xvfbargs}' returns:";
  4787.             echo;
  4788.             ${XVFB} :${XDISPLAY} ${xvfbargs};
  4789.             echo;
  4790.             eerror "If possible, correct the above error and try your emerge again.";
  4791.             die "Unable to start Xvfb";
  4792.         fi;
  4793.         ((XDISPLAY++));
  4794.         debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
  4795.         ${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2;
  4796.     done;
  4797.     export SANDBOX_ON="${OLD_SANDBOX_ON}";
  4798.     einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ...";
  4799.     export DISPLAY=:${XDISPLAY};
  4800.     debug-print "${FUNCNAME}: $@";
  4801.     if has "${EAPI}" 2 3; then
  4802.         "$@";
  4803.         retval=$?;
  4804.     else
  4805.         nonfatal "$@";
  4806.         retval=$?;
  4807.     fi;
  4808.     kill $(cat /tmp/.X${XDISPLAY}-lock);
  4809.     [[ ${retval} -ne 0 ]] && die "Failed to run '$@'";
  4810.     return 0
  4811. }
  4812. xdg_desktop_database_update ()
  4813. {
  4814.     local updater="${EROOT}${DESKTOP_DATABASE_UPDATE_BIN}";
  4815.     if [[ ${EBUILD_PHASE} != post* ]]; then
  4816.         die "xdg_desktop_database_update must be used in pkg_post* phases.";
  4817.     fi;
  4818.     if [[ ! -x "${updater}" ]]; then
  4819.         debug-print "${updater} is not executable";
  4820.         return;
  4821.     fi;
  4822.     ebegin "Updating .desktop files database";
  4823.     "${updater}" -q "${EROOT}${DESKTOP_DATABASE_DIR}";
  4824.     eend $?
  4825. }
  4826. xdg_environment_reset ()
  4827. {
  4828.     export XDG_DATA_HOME="${HOME}/.local/share";
  4829.     export XDG_CONFIG_HOME="${HOME}/.config";
  4830.     export XDG_CACHE_HOME="${HOME}/.cache";
  4831.     export XDG_RUNTIME_DIR="${T}/run";
  4832.     mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "${XDG_RUNTIME_DIR}" || die;
  4833.     chmod 0700 "${XDG_RUNTIME_DIR}" || die;
  4834.     unset DBUS_SESSION_BUS_ADDRESS
  4835. }
  4836. xdg_mimeinfo_database_update ()
  4837. {
  4838.     local updater="${EROOT}${MIMEINFO_DATABASE_UPDATE_BIN}";
  4839.     if [[ ${EBUILD_PHASE} != post* ]]; then
  4840.         die "xdg_mimeinfo_database_update must be used in pkg_post* phases.";
  4841.     fi;
  4842.     if [[ ! -x "${updater}" ]]; then
  4843.         debug-print "${updater} is not executable";
  4844.         return;
  4845.     fi;
  4846.     ebegin "Updating shared mime info database";
  4847.     "${updater}" "${EROOT}${MIMEINFO_DATABASE_DIR}";
  4848.     eend $?
  4849. }
  4850. xdg_pkg_postinst ()
  4851. {
  4852.     if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then
  4853.         xdg_desktop_database_update;
  4854.     else
  4855.         debug-print "No .desktop files to add to database";
  4856.     fi;
  4857.     if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then
  4858.         xdg_mimeinfo_database_update;
  4859.     else
  4860.         debug-print "No mime info files to add to database";
  4861.     fi
  4862. }
  4863. xdg_pkg_postrm ()
  4864. {
  4865.     if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then
  4866.         xdg_desktop_database_update;
  4867.     else
  4868.         debug-print "No .desktop files to add to database";
  4869.     fi;
  4870.     if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then
  4871.         xdg_mimeinfo_database_update;
  4872.     else
  4873.         debug-print "No mime info files to add to database";
  4874.     fi
  4875. }
  4876. xdg_pkg_preinst ()
  4877. {
  4878.     local f;
  4879.     XDG_ECLASS_DESKTOPFILES=();
  4880.     while IFS= read -r -d '' f; do
  4881.         XDG_ECLASS_DESKTOPFILES+=(${f});
  4882.     done < <(cd "${D}" && find 'usr/share/applications' -type f -print0 2>/dev/null);
  4883.     XDG_ECLASS_MIMEINFOFILES=();
  4884.     while IFS= read -r -d '' f; do
  4885.         XDG_ECLASS_MIMEINFOFILES+=(${f});
  4886.     done < <(cd "${D}" && find 'usr/share/mime' -type f -print0 2>/dev/null);
  4887.     export XDG_ECLASS_DESKTOPFILES XDG_ECLASS_MIMEINFOFILES
  4888. }
  4889. xdg_src_prepare ()
  4890. {
  4891.     xdg_environment_reset;
  4892.     has ${EAPI:-0} 6 && default
  4893. }
Add Comment
Please, Sign In to add comment