declare -x ABI="amd64" declare -x ALSA_CARDS="" 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" declare -x ANDROID_SWT="/usr/share/swt-3.7/lib" declare -x ANT_HOME="/usr/share/ant" 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" declare -x ARCH="amd64" declare -- BASE_EXPF="src_unpack src_compile src_install src_prepare src_configure" declare -x BOOTSTRAP_USE="cxx unicode multilib" declare -x BUILD_TYPE="release" declare -x CALLIGRA_FEATURES="kexi words flow plan stage tables krita karbon braindump" declare -x CAMERAS="ptp2" declare -x CBUILD="x86_64-pc-linux-gnu" declare -x CFLAGS="-march=native -O2 -pipe" declare -x CFLAGS_amd64="-m64" declare -x CFLAGS_default declare -x CFLAGS_x32="-mx32" declare -x CFLAGS_x86="-m32" declare -x CHOST="x86_64-pc-linux-gnu" declare -x CHOST_amd64="x86_64-pc-linux-gnu" declare -x CHOST_default="x86_64-pc-linux-gnu" declare -x CHOST_x32="x86_64-pc-linux-gnu" declare -x CHOST_x86="i686-pc-linux-gnu" declare -- CMAKE_BINARY="cmake" declare -- CMAKE_BUILD_DIR="/tmp/portage/kde-base/kdepim-common-libs-4.7.4/work/kdepim-common-libs-4.7.4_build" declare -- CMAKE_BUILD_TYPE="Gentoo" declare -- CMAKE_EXPF="src_compile src_test src_install src_configure" declare -- CMAKE_MIN_VERSION="2.8.4" declare -- CMAKE_REMOVE_MODULES="yes" declare -- CMAKE_REMOVE_MODULES_LIST="FindBLAS FindLAPACK" declare -- CMAKE_REQUIRED="always" declare -- CMAKE_USE_DIR="/tmp/portage/kde-base/kdepim-common-libs-4.7.4/work/kdepim-common-libs-4.7.4" declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" declare -x COLUMNS="237" declare -x CPPFLAGS=" -DQT_NO_DEBUG -DNDEBUG" declare -- CPPUNIT_REQUIRED="never" declare -x CROSSCOMPILE_OPTS="" declare -x CTARGET_default="x86_64-pc-linux-gnu" declare -x CXXFLAGS="-march=native -O2 -pipe" declare -- DECLARATIVE_REQUIRED="never" declare -x DEFAULT_ABI="amd64" declare -x DEFINED_PHASES=" compile configure install postinst postrm preinst prepare setup test unpack" declare DEPEND=" app-crypt/gpgme >=app-office/akonadi-server-1.3.60 >=dev-libs/shared-desktop-ontologies-0.6.50 >=kde-base/kdepimlibs-4.7.4:4[aqua=,semantic-desktop] >=sys-apps/sed-4 >=dev-util/cmake-2.8.4 userland_GNU? ( >=sys-apps/findutils-4.4.0 ) dev-util/automoc dev-util/pkgconfig !aqua? ( >=x11-libs/libXtst-1.1.0 x11-proto/xf86vidmodeproto ) dev-lang/perl >=x11-libs/qt-core-4.7.0:4[qt3support,ssl] >=x11-libs/qt-gui-4.7.0:4[accessibility,dbus] >=x11-libs/qt-qt3support-4.7.0:4[accessibility,kde] >=x11-libs/qt-script-4.7.0:4 >=x11-libs/qt-sql-4.7.0:4[qt3support] >=x11-libs/qt-svg-4.7.0:4 >=x11-libs/qt-test-4.7.0:4 >=x11-libs/qt-webkit-4.7.0:4[kde] !aqua? ( x11-libs/libXext x11-libs/libXt x11-libs/libXxf86vm x11-libs/libXcomposite x11-libs/libxkbfile ) >=kde-base/kdelibs-4.7.4:4[aqua=] " declare DESCRIPTION="Common libraries for KDE PIM apps" declare -x DESTTREE="/usr" declare -x DIROPTIONS="-m0755" declare -x EAPI="4" declare -- EKDEDIR="/usr" declare -x ELIBC="glibc" declare -- EPATCH_EXCLUDE="" declare -- EPATCH_FORCE="no" declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..." declare -- EPATCH_OPTS="-g0 -E --no-backup-if-mismatch" declare -- EPATCH_SINGLE_MSG="" declare -- EPATCH_SOURCE="/tmp/portage/kde-base/kdepim-common-libs-4.7.4/work/patch" declare -- EPATCH_SUFFIX="patch.bz2" declare -x EPAUSE_IGNORE="1" declare -x EXEOPTIONS="-m0755" declare -x FCFLAGS="" declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\"" declare -x FFLAGS="" declare -x GCC_SPECS="" declare -- GCONFTOOL_BIN="/usr/bin/gconftool-2" declare -x GDK_USE_XFT="1" declare -- GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas" 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 ubx" declare -x GRUB_PLATFORMS="" declare -x GSETTINGS_BACKEND="gconf" declare -- GTK_UPDATE_ICON_CACHE="/usr/bin/gtk-update-icon-cache" declare -x HG="/usr/bin/hg" declare HOMEPAGE="http://www.kde.org/" declare -x INHERITED=" multilib toolchain-funcs portability user eutils versionator kde4-functions fdo-mime gnome2-utils base virtualx flag-o-matic cmake-utils kde4-base kde4-meta" declare -x INPUT_DEVICES="evdev" declare -x INSDESTTREE="" declare -x INSOPTIONS="-m0644" declare IUSE="debug aqua kdeenablefinal" declare -x JAVACC_HOME="/usr/share/javacc/" declare -- KDEBASE="kde-base" declare -- KDEDIR="/usr" declare -- KDEMETA_EXPF="pkg_setup src_unpack src_prepare src_configure src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm" declare -- KDE_HANDBOOK="never" declare -- KDE_MINIMAL="4.7.4" declare -- KDE_REQUIRED="always" declare -- KDE_SCM="git" declare -x KERNEL="linux" declare -x KERNEL_ABI="amd64" declare -x KEYWORDS="~amd64 ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux" declare -- KMEXTRA=" akonadi_next/ calendarsupport/ calendarviews/ incidenceeditor-ng/ libkdepim/ libkdepimdbusinterfaces/ libkleo/ libkpgp/ kdgantt2/ messagecomposer/ messagecore/ messagelist/ messageviewer/ nepomuk_email_feeder/ ontologies/ templateparser/ " declare -- KMEXTRACTONLY=" kleopatra/ kmail/ knode/org.kde.knode.xml korganizer/korgac/org.kde.korganizer.KOrgac.xml korganizer/org.kde.korganizer.Korganizer.xml libkdepim/ config-enterprise.h.cmake kleopatra/ConfigureChecks.cmake CTestCustom.cmake kdepim-version.h.cmake" declare -- KMNAME="kdepim" declare -- KMNOMODULE="true" declare -- KMSAVELIBS="true" declare -- KMTARPARAMS=" --bzip2" declare -x LANG="C" declare -x LANGUAGE="da_DK.UTF-8" declare -x LCD_DEVICES="" declare -x LC_ALL="C" declare -x LC_COLLATE="POSIX" declare -x LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed" declare -x LDFLAGS_amd64="-m elf_x86_64" declare -x LDFLAGS_default declare -x LDFLAGS_x32="-m elf32_x86_64" declare -x LDFLAGS_x86="-m elf_i386" declare -x LIBDIR_amd64="lib64" declare -x LIBDIR_amd64_fbsd="lib64" declare -x LIBDIR_default="lib" declare -x LIBDIR_n32="lib32" declare -x LIBDIR_n64="lib64" declare -x LIBDIR_o32="lib" declare -x LIBDIR_ppc="lib32" declare -x LIBDIR_ppc64="lib64" declare -x LIBDIR_s390="lib32" declare -x LIBDIR_s390x="lib64" declare -x LIBDIR_sparc32="lib32" declare -x LIBDIR_sparc64="lib64" declare -x LIBDIR_x32="libx32" declare -x LIBDIR_x86="lib32" declare -x LIBDIR_x86_fbsd="lib32" declare -x LIBOPTIONS="-m0644" declare -x LICENSE="GPL-2" declare -x LINGUAS="da" declare -x MAIL="/var/mail/root" declare -x MAKEOPTS="-j9" declare -x MULTILIB_ABIS="amd64 x86" declare -x MULTILIB_STRICT_DENY="64-bit.*shared object" 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" declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev)" declare -- MULTIMEDIA_REQUIRED="never" declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml" declare -x OPENGL_PROFILE="xorg-x11" declare -- OPENGL_REQUIRED="never" declare -x PATH="/usr/lib64/portage/bin/ebuild-helpers/4:/usr/lib64/portage/bin/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.4.5" declare PDEPEND="" declare -x PHP_TARGETS="" declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig" declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")' declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/kdepim-common-libs-4.7.4/html")' declare -x PORTAGE_SYNC_STALE="30" declare -- PREFIX="/usr" declare -x PRELINK_PATH_MASK="/usr/lib64/libfreebl3.so:/usr/lib64/libnssdbm3.so:/usr/lib64/libsoftokn3.so" declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC KERNEL USERLAND" declare -x PROPERTIES="" declare -x PROVIDE="" declare -x PYTHONDONTWRITEBYTECODE="1" declare -- QTEST_COLORED="1" declare -- QTHELP_REQUIRED="never" declare -- QT_MINIMAL="4.7.0" declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins/" declare RDEPEND=" app-crypt/gpgme >=app-office/akonadi-server-1.3.60 >=dev-libs/shared-desktop-ontologies-0.6.50 >=kde-base/kdepimlibs-4.7.4:4[aqua=,semantic-desktop] app-crypt/gnupg >=kde-base/kdepim-runtime-4.7.4:4[aqua=] !kde-base/akonadi:4 !kde-base/libkdepim:4 !kde-base/libkleo:4 !kde-base/libkpgp:4 !=kde-base/oxygen-icons-4.7.4:4[aqua=] dev-lang/perl >=x11-libs/qt-core-4.7.0:4[qt3support,ssl] >=x11-libs/qt-gui-4.7.0:4[accessibility,dbus] >=x11-libs/qt-qt3support-4.7.0:4[accessibility,kde] >=x11-libs/qt-script-4.7.0:4 >=x11-libs/qt-sql-4.7.0:4[qt3support] >=x11-libs/qt-svg-4.7.0:4 >=x11-libs/qt-test-4.7.0:4 >=x11-libs/qt-webkit-4.7.0:4[kde] !aqua? ( x11-libs/libXext x11-libs/libXt x11-libs/libXxf86vm x11-libs/libXcomposite x11-libs/libxkbfile ) >=kde-base/kdelibs-4.7.4:4[aqua=] " declare REQUIRED_USE="" declare -x RESTRICT="test" declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\"" declare -x RUBYOPT="-rauto_gem" declare -x RUBY_TARGETS="" declare -x S="/tmp/portage/kde-base/kdepim-common-libs-4.7.4/work/kdepim-common-libs-4.7.4" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_PID="2783" declare -x SANDBOX_PREDICT="/tmp/portage/kde-base/kdepim-common-libs-4.7.4/homedir:/dev/crypto:/var/cache/fontconfig" declare -x SANDBOX_READ="/:/tmp" declare -x SANDBOX_VERBOSE="1" declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp:/tmp/:/tmp/portage/kde-base/kdepim-common-libs-4.7.4/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/" declare -- SCROLLKEEPER_DIR="/var/lib/scrollkeeper" declare -- SCROLLKEEPER_UPDATE_BIN="/usr/bin/scrollkeeper-update" declare -x SLOT="4" declare SRC_URI="mirror://kde/stable/4.7.4/src/kdepim-4.7.4.tar.bz2" declare -x SUDO_COMMAND="/bin/sh -c export LC_ALL=C ; LANG=C ; emerge --oneshot =kde-base/kdepim-common-libs-4.7.4" declare -x SUDO_GID="1000" declare -x SUDO_UID="1000" declare -x SUDO_USER="anders" declare -x SYMLINK_LIB="yes" declare -x USE="amd64 elibc_glibc kernel_linux multilib userland_GNU" declare -x USERLAND="GNU" declare -x USERNAME="root" declare -x VIDEO_CARDS="" declare -- VIRTUALX_COMMAND="emake" declare -- VIRTUALX_DEPEND=" !prefix? ( x11-base/xorg-server[xvfb] ) x11-apps/xhost " declare -- VIRTUALX_REQUIRED="manual" declare -- WANT_CMAKE="always" declare -x XDG_CONFIG_DIRS="/etc/xdg" declare -x XDG_CONFIG_HOME="/tmp/portage/kde-base/kdepim-common-libs-4.7.4/temp" declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share" 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" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_="" declare -a __ESHOPTS_SAVE__='()' declare -- ___ECLASS_ONCE_FLAG_O_MATIC="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_MULTILIB="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_PORTABILITY="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_TOOLCHAIN_FUNCS="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_USER="recur -_+^+_- spank" declare -- ___ECLASS_ONCE_VERSIONATOR="recur -_+^+_- spank" declare -a mycmakeargs='([0]="-DKDE4_BUILD_TESTS=OFF" [1]="-DCMAKE_INSTALL_PREFIX=/usr" [2]="-DSYSCONF_INSTALL_DIR=/etc")' declare -- phase_func declare -- qtwebkitusedeps="[kde]" Xeconf () { debug-print-function ${FUNCNAME} "$@"; VIRTUALX_COMMAND="econf" virtualmake "$@" } Xemake () { debug-print-function ${FUNCNAME} "$@"; VIRTUALX_COMMAND="emake" virtualmake "$@" } Xmake () { debug-print-function ${FUNCNAME} "$@"; ewarn "QA: you should not execute make directly"; ewarn "QA: rather execute Xemake -j1 if you have issues with parallel make"; VIRTUALX_COMMAND="emake -j1" virtualmake "$@" } __list_needed_subdirectories () { local i j kmextra kmextra_expanded kmmodule_expanded kmcompileonly_expanded extractlist; kmextra="${KMEXTRA}"; [[ ${1} != fatal ]] && kmextra+=" ${KMEXTRA_NONFATAL}"; for i in ${kmextra}; do kmextra_expanded+=" ${i}"; j=$(dirname ${i}); while [[ ${j} != "." ]]; do kmextra_expanded+=" ${j}/CMakeLists.txt"; j=$(dirname ${j}); done; done; if [[ -n ${KMMODULE} ]]; then kmmodule_expanded="${KMMODULE}"; j=$(dirname ${KMMODULE}); while [[ ${j} != "." ]]; do kmmodule_expanded+=" ${j}/CMakeLists.txt"; j=$(dirname ${j}); done; fi; for i in ${KMCOMPILEONLY}; do kmcompileonly_expanded+=" ${i}"; j=$(dirname ${i}); while [[ ${j} != "." ]]; do kmcompileonly_expanded+=" ${j}/CMakeLists.txt"; j=$(dirname ${j}); done; done; debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmextra_expanded: ${kmextra_expanded}"; debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmmodule_expanded: ${kmmodule_expanded}"; debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmcompileonly_expanded: ${kmcompileonly_expanded}"; for i in ${kmmodule_expanded} ${kmextra_expanded} ${kmcompileonly_expanded} ${KMEXTRACTONLY}; do extractlist+=" ${topdir}${i}"; done; echo ${extractlist} } __versionator__test_version_compare () { eshopts_push -s extglob; local lt=1 eq=2 gt=3 p q; function __versionator__test_version_compare_t () { version_compare "${1}" "${3}"; local r=$?; [[ ${r} -eq ${2} ]] || echo "FAIL: ${@} (got ${r} exp ${2})" }; echo " 0 $lt 1 1 $lt 2 2 $gt 1 2 $eq 2 0 $eq 0 10 $lt 20 68 $eq 068 068 $gt 67 068 $lt 69 1.0 $lt 2.0 2.0 $eq 2.0 2.0 $gt 1.0 1.0 $gt 0.0 0.0 $eq 0.0 0.0 $lt 1.0 0.1 $lt 0.2 0.2 $eq 0.2 0.3 $gt 0.2 1.2 $lt 2.1 2.1 $gt 1.2 1.2.3 $lt 1.2.4 1.2.4 $gt 1.2.3 1.2.0 $gt 1.2 1.2.1 $gt 1.2 1.2 $lt 1.2.1 1.2b $eq 1.2b 1.2b $lt 1.2c 1.2b $gt 1.2a 1.2b $gt 1.2 1.2 $lt 1.2a 1.3 $gt 1.2a 1.3 $lt 1.3a 1.0_alpha7 $lt 1.0_beta7 1.0_beta $lt 1.0_pre 1.0_pre5 $lt 1.0_rc2 1.0_rc2 $lt 1.0 1.0_p1 $gt 1.0 1.0_p1-r1 $gt 1.0_p1 1.0_alpha6-r1 $gt 1.0_alpha6 1.0_beta6-r1 $gt 1.0_alpha6-r2 1.0_pre1 $lt 1.0_p1 1.0p $gt 1.0_p1 1.0r $gt 1.0-r1 1.6.15 $gt 1.6.10-r2 1.6.10-r2 $lt 1.6.15 " | while read a b c; do [[ -z "${a}${b}${c}" ]] && continue; __versionator__test_version_compare_t "${a}" "${b}" "${c}"; done; for q in "alpha beta pre rc=${lt};${gt}" "p=${gt};${lt}"; do for p in ${q%%=*}; do local c=${q##*=}; local alt=${c%%;*} agt=${c##*;}; __versionator__test_version_compare_t "1.0" $agt "1.0_${p}"; __versionator__test_version_compare_t "1.0" $agt "1.0_${p}1"; __versionator__test_version_compare_t "1.0" $agt "1.0_${p}068"; __versionator__test_version_compare_t "2.0_${p}" $alt "2.0"; __versionator__test_version_compare_t "2.0_${p}1" $alt "2.0"; __versionator__test_version_compare_t "2.0_${p}068" $alt "2.0"; __versionator__test_version_compare_t "1.0_${p}" $eq "1.0_${p}"; __versionator__test_version_compare_t "0.0_${p}" $lt "0.0_${p}1"; __versionator__test_version_compare_t "666_${p}3" $gt "666_${p}"; __versionator__test_version_compare_t "1_${p}7" $lt "1_${p}8"; __versionator__test_version_compare_t "1_${p}7" $eq "1_${p}7"; __versionator__test_version_compare_t "1_${p}7" $gt "1_${p}6"; __versionator__test_version_compare_t "1_${p}09" $eq "1_${p}9"; __versionator__test_version_compare_t "1_${p}7-r0" $eq "1_${p}7"; __versionator__test_version_compare_t "1_${p}7-r0" $lt "1_${p}7-r1"; __versionator__test_version_compare_t "1_${p}7-r0" $lt "1_${p}7-r01"; __versionator__test_version_compare_t "1_${p}7-r01" $eq "1_${p}7-r1"; __versionator__test_version_compare_t "1_${p}8-r1" $gt "1_${p}7-r100"; __versionator__test_version_compare_t "1_${p}_alpha" $lt "1_${p}_beta"; done; done; for p in "-r" "_p"; do __versionator__test_version_compare_t "7.2${p}1" $lt "7.2${p}2"; __versionator__test_version_compare_t "7.2${p}2" $gt "7.2${p}1"; __versionator__test_version_compare_t "7.2${p}3" $gt "7.2${p}2"; __versionator__test_version_compare_t "7.2${p}2" $lt "7.2${p}3"; done; __versionator__test_version_compare_t "6.0" $gt "5.0"; __versionator__test_version_compare_t "5.0" $gt "5"; __versionator__test_version_compare_t "1.0-r1" $gt "1.0-r0"; __versionator__test_version_compare_t "1.0-r1" $gt "1.0"; __versionator__test_version_compare_t "999999999999999999999999999999" $gt "999999999999999999999999999998"; __versionator__test_version_compare_t "1.0.0" $gt "1.0"; __versionator__test_version_compare_t "1.0.0" $gt "1.0b"; __versionator__test_version_compare_t "1b" $gt "1"; __versionator__test_version_compare_t "1b_p1" $gt "1_p1"; __versionator__test_version_compare_t "1.1b" $gt "1.1"; __versionator__test_version_compare_t "12.2.5" $gt "12.2b"; __versionator__test_version_compare_t "4.0" $lt "5.0"; __versionator__test_version_compare_t "5" $lt "5.0"; __versionator__test_version_compare_t "1.0_pre2" $lt "1.0_p2"; __versionator__test_version_compare_t "1.0_alpha2" $lt "1.0_p2"; __versionator__test_version_compare_t "1.0_alpha1" $lt "1.0_beta1"; __versionator__test_version_compare_t "1.0_beta3" $lt "1.0_rc3"; __versionator__test_version_compare_t "1.001000000000000000001" $lt "1.001000000000000000002"; __versionator__test_version_compare_t "1.00100000000" $lt "1.0010000000000000001"; __versionator__test_version_compare_t "999999999999999999999999999998" $lt "999999999999999999999999999999"; __versionator__test_version_compare_t "1.01" $lt "1.1"; __versionator__test_version_compare_t "1.0-r0" $lt "1.0-r1"; __versionator__test_version_compare_t "1.0" $lt "1.0-r1"; __versionator__test_version_compare_t "1.0" $lt "1.0.0"; __versionator__test_version_compare_t "1.0b" $lt "1.0.0"; __versionator__test_version_compare_t "1_p1" $lt "1b_p1"; __versionator__test_version_compare_t "1" $lt "1b"; __versionator__test_version_compare_t "1.1" $lt "1.1b"; __versionator__test_version_compare_t "12.2b" $lt "12.2.5"; __versionator__test_version_compare_t "4.0" $eq "4.0"; __versionator__test_version_compare_t "1.0" $eq "1.0"; __versionator__test_version_compare_t "1.0-r0" $eq "1.0"; __versionator__test_version_compare_t "1.0" $eq "1.0-r0"; __versionator__test_version_compare_t "1.0-r0" $eq "1.0-r0"; __versionator__test_version_compare_t "1.0-r1" $eq "1.0-r1"; __versionator__test_version_compare_t "1" $lt "2"; __versionator__test_version_compare_t "1.0_alpha" $lt "1.0_pre"; __versionator__test_version_compare_t "1.0_beta" $gt "1.0_alpha"; __versionator__test_version_compare_t "0" $lt "0.0"; __versionator__test_version_compare_t "1.0-r0" $lt "1.0-r1"; __versionator__test_version_compare_t "1.0-r1" $gt "1.0-r0"; __versionator__test_version_compare_t "1.0" $lt "1.0-r1"; __versionator__test_version_compare_t "1.0-r1" $gt "1.0"; __versionator__test_version_compare_t "1_p1" $lt "1b_p1"; __versionator__test_version_compare_t "1b" $gt "1"; __versionator__test_version_compare_t "1.1b" $gt "1.1"; __versionator__test_version_compare_t "12.2b" $gt "12.2"; __versionator__test_version_compare_t "1.0" $gt "1"; __versionator__test_version_compare_t "1" $lt "1.0"; __versionator__test_version_compare_t "1.0_alpha" $gt "1_alpha"; __versionator__test_version_compare_t "1.0_alpha" $gt "1"; __versionator__test_version_compare_t "1.0_alpha" $lt "1.0"; __versionator__test_version_compare_t "1.2.0.0_alpha7-r4" $gt "1.2_alpha7-r4"; __versionator__test_version_compare_t "0001" $eq "1"; __versionator__test_version_compare_t "01" $eq "001"; __versionator__test_version_compare_t "0001.1" $eq "1.1"; __versionator__test_version_compare_t "01.01" $eq "1.01"; __versionator__test_version_compare_t "1.010" $eq "1.01"; __versionator__test_version_compare_t "1.00" $eq "1.0"; __versionator__test_version_compare_t "1.0100" $eq "1.010"; __versionator__test_version_compare_t "1" $eq "1-r0"; __versionator__test_version_compare_t "1-r00" $eq "1-r0"; eshopts_pop } _assert_pkg_ebuild_phase () { case ${EBUILD_PHASE} in setup | preinst | postinst) ;; *) eerror "'$1()' called from '${EBUILD_PHASE}' phase which is not OK:"; eerror "You may only call from pkg_{setup,preinst,postinst} functions."; eerror "Package fails at QA and at life. Please file a bug."; die "Bad package! $1 is only for use in some pkg_* functions!" ;; esac } _calculate_live_repo () { debug-print-function ${FUNCNAME} "$@"; SRC_URI=""; case ${KDE_SCM} in svn) local branch_prefix; case ${PV} in 9999*) branch_prefix="trunk/KDE" ;; *) branch_prefix="branches/KDE/$(get_kde_version)"; ESVN_PROJECT_SUFFIX="-${PV}" ;; esac; ESVN_MIRROR=${ESVN_MIRROR:=svn://anonsvn.kde.org/home/kde}; if [[ -n ${KMNAME} ]]; then ESVN_PROJECT="${KMNAME}${ESVN_PROJECT_SUFFIX}"; if [[ -z ${KMNOMODULE} ]] && [[ -z ${KMMODULE} ]]; then KMMODULE="${PN}"; fi; case ${KMNAME} in kdebase-*) ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/kdebase/${KMNAME#kdebase-}" ;; kdelibs-*) ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/kdelibs/${KMNAME#kdelibs-}" ;; kdereview*) ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}" ;; kdesupport) ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"; ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}" ;; kde*) ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/${KMNAME}" ;; extragear* | playground*) ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}"; ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}" ;; koffice) ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}" ;; *) ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}/${KMMODULE}" ;; esac; else ESVN_REPO_URI="${ESVN_MIRROR}/${branch_prefix}/${PN}"; ESVN_PROJECT="${PN}${ESVN_PROJECT_SUFFIX}"; fi; [[ ${KDEBASE} = kde-base || ${KDEBASE} = koffice ]] && ESVN_UP_FREQ=${ESVN_UP_FREQ:-1} ;; git) local _kmname; EGIT_MIRROR=${EGIT_MIRROR:=git://anongit.kde.org}; if [[ -n ${EGIT_REPONAME} ]]; then _kmname=${EGIT_REPONAME}; else if [[ -n ${KMNAME} ]]; then _kmname=${KMNAME}; else _kmname=${PN}; fi; fi; [[ ${PV} != 9999* && ${KDEBASE} == kde-base ]] && EGIT_BRANCH="KDE/$(get_kde_version)"; EGIT_REPO_URI="${EGIT_MIRROR}/${_kmname}"; debug-print "${FUNCNAME}: Repository: ${EGIT_REPO_URI}"; debug-print "${FUNCNAME}: Branch: ${EGIT_BRANCH}" ;; esac } _calculate_src_uri () { debug-print-function ${FUNCNAME} "$@"; local _kmname _kmname_pv; [[ -n ${KDEBASE} ]] || return; if [[ -n ${KMNAME} ]]; then case ${KMNAME} in kdebase-apps) _kmname="kdebase" ;; *) _kmname="${KMNAME}" ;; esac; else _kmname=${PN}; fi; _kmname_pv="${_kmname}-${PV}"; case ${KDEBASE} in kde-base) case ${PV} in 4.[456].8[05] | 4.[456].9[023568]) SRC_URI="mirror://kde/unstable/${PV}/src/${_kmname_pv}.tar.bz2"; if ! version_is_at_least 4.6.80 ${PV}; then [[ ${KMNAME} == "kdepim" || ${KMNAME} == "kdepim-runtime" ]] && SRC_URI="mirror://kde/unstable/kdepim/${PV}/${_kmname_pv}.tar.bz2"; fi ;; *) SRC_URI="mirror://kde/stable/${PV}/src/${_kmname_pv}.tar.bz2"; if ! version_is_at_least 4.6.80 ${PV}; then [[ ${KMNAME} == "kdepim" || ${KMNAME} == "kdepim-runtime" ]] && SRC_URI="mirror://kde/stable/kdepim-${PV}/src/${_kmname_pv}.tar.bz2"; fi ;; esac ;; koffice) case ${PV} in 2.[1234].[6-9]*) SRC_URI="mirror://kde/unstable/${_kmname_pv}/${_kmname_pv}.tar.bz2" ;; *) SRC_URI="mirror://kde/stable/${_kmname_pv}/${_kmname_pv}.tar.bz2" ;; esac ;; kdevelop) SRC_URI="mirror://kde/stable/kdevelop/${KDEVELOP_VERSION}/src/${P}.tar.bz2" ;; esac } _cdrom_locate_file_on_cd () { local mline=""; local showedmsg=0 showjolietmsg=0; while [[ -z ${CDROM_ROOT} ]]; do local i=0; local -a cdset=(${*//:/ }); if [[ -n ${CDROM_SET} ]]; then cdset=(${cdset[${CDROM_SET}]}); fi; while [[ -n ${cdset[${i}]} ]]; do local dir=$(dirname ${cdset[${i}]}); local file=$(basename ${cdset[${i}]}); local point= node= fs= foo=; while read point node fs foo; do [[ " cd9660 iso9660 udf " != *" ${fs} "* ]] && ! [[ ${fs} == "subfs" && ",${opts}," == *",fs=cdfss,"* ]] && continue; point=${point//\040/ }; [[ ! -d ${point}/${dir} ]] && continue; [[ -z $(find "${point}/${dir}" -maxdepth 1 -iname "${file}") ]] && continue; export CDROM_ROOT=${point}; export CDROM_SET=${i}; export CDROM_MATCH=${cdset[${i}]}; return; done <<< "$(get_mounts)"; ((++i)); done; echo; if [[ ${showedmsg} -eq 0 ]]; then if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then if [[ -z ${CDROM_NAME} ]]; then einfo "Please insert+mount the cdrom for ${PN} now !"; else einfo "Please insert+mount the ${CDROM_NAME} cdrom now !"; fi; else if [[ -z ${CDROM_NAME_1} ]]; then einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !"; else local var="CDROM_NAME_${CDROM_CURRENT_CD}"; einfo "Please insert+mount the ${!var} cdrom now !"; fi; fi; showedmsg=1; fi; einfo "Press return to scan for the cd again"; einfo "or hit CTRL+C to abort the emerge."; echo; if [[ ${showjolietmsg} -eq 0 ]]; then showjolietmsg=1; else ewarn "If you are having trouble with the detection"; ewarn "of your CD, it is possible that you do not have"; ewarn "Joliet support enabled in your kernel. Please"; ewarn "check that CONFIG_JOLIET is enabled in your kernel."; ebeep 5; fi; read || die "something is screwed with your system"; done } _change_cmakelists_parent_dirs () { debug-print-function ${FUNCNAME} "$@"; local _olddir _dir; _dir="${S}"/${1}; until [[ ${_dir} == ${S} ]]; do _olddir=$(basename "${_dir}"); _dir=$(dirname "${_dir}"); debug-print "${LINENO}: processing ${_dir} CMakeLists.txt searching for ${_olddir}"; if [[ -f ${_dir}/CMakeLists.txt ]]; then sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${_olddir}[[:space:]]*)/s/#DONOTCOMPILE //g" -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${_olddir}[[:space:]]*)/s/#DONOTCOMPILE //g" -i ${_dir}/CMakeLists.txt || die "${LINENO}: died in ${FUNCNAME} while processing ${_dir}"; fi; done } _check_build_dir () { : ${CMAKE_USE_DIR:=${S}}; if [[ -n ${CMAKE_IN_SOURCE_BUILD} ]]; then CMAKE_BUILD_DIR="${CMAKE_USE_DIR}"; else : ${CMAKE_BUILD_DIR:=${WORKDIR}/${P}_build}; fi; echo ">>> Working in BUILD_DIR: \"$CMAKE_BUILD_DIR\"" } _dead_portability_user_funcs () { die "if you really need this, please file a bug for base-system@gentoo.org" } _enable_selected_linguas_dir () { local lingua linguas sr_mess wp; local dir=${1}; [[ -d ${dir} ]] || die "linguas dir \"${dir}\" does not exist"; comment_all_add_subdirectory "${dir}"; pushd "${dir}" > /dev/null; sr_mess="sr@latn sr@latin sr@Latin"; for wp in ${sr_mess}; do [[ -e ${wp}.po ]] && mv "${wp}.po" "sr@Latn.po"; if [[ -d ${wp} ]]; then mv "${wp}" "sr@Latn"; sed -i -e "s:${wp}:sr@Latn:g" CMakeLists.txt; fi; done; for lingua in ${KDE_LINGUAS}; do if [[ -e ${lingua}.po ]]; then mv "${lingua}.po" "${lingua}.po.old"; fi; done; for lingua in ${KDE_LINGUAS}; do if use linguas_${lingua}; then if [[ -d ${lingua} ]]; then linguas="${linguas} ${lingua}"; sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."; fi; if [[ -e ${lingua}.po.old ]]; then linguas="${linguas} ${lingua}"; mv "${lingua}.po.old" "${lingua}.po"; fi; fi; done; [[ -n ${linguas} ]] && echo ">>> Enabling languages: ${linguas}"; popd > /dev/null } _execute_optionaly () { local phase="$1"; shift; if [[ ${WANT_CMAKE} = always ]]; then enable_cmake-utils_${phase} "$@"; else use ${WANT_CMAKE} && enable_cmake-utils_${phase} "$@"; fi } _filter-hardened () { local f; for f in "$@"; do case "${f}" in -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie) gcc-specs-pie || continue; is-flagq -nopie || append-flags -nopie ;; -fstack-protector) gcc-specs-ssp || continue; is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector) ;; -fstack-protector-all) gcc-specs-ssp-to-all || continue; is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all) ;; -fno-strict-overflow) gcc-specs-nostrict || continue; is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow) ;; esac; done } _filter-var () { local f x VAR VAL; declare -a new; VAR=$1; shift; eval VAL=\${${VAR}}; for f in ${VAL}; do for x in "$@"; do [[ ${f} == ${x} ]] && continue 2; done; eval new\[\${\#new\[@]}]=\${f}; done; eval export ${VAR}=\${new\[*]} } _gcc-install-dir () { echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')" } _gcc-specs-directive_raw () { local cc=$(tc-getCC); local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}'); ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 } $1=="*"directive":" { pspec=spec; spec=""; outside=0; next } outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next } spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next } { spec=spec $0 } END { print spec }'; return 0 } _gcc-specs-exists () { [[ -f $(_gcc-install-dir)/$1 ]] } _gcc_fullversion () { local ver="$1"; shift; set -- `$(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__"`; eval echo "$ver" } _is_flagq () { local x; for x in ${!1}; do [[ ${x} == $2 ]] && return 0; done; return 1 } _modify-cmakelists () { debug-print-function ${FUNCNAME} "$@"; grep -qs "<<< Gentoo configuration >>>" CMakeLists.txt && return 0; 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"; cat >> "${CMAKE_USE_DIR}"/CMakeLists.txt <<-_EOF_ MESSAGE(STATUS "<<< Gentoo configuration >>> Build type \${CMAKE_BUILD_TYPE} Install path \${CMAKE_INSTALL_PREFIX} Compiler flags: C \${CMAKE_C_FLAGS} C++ \${CMAKE_CXX_FLAGS} Linker flags: Executable \${CMAKE_EXE_LINKER_FLAGS} Module \${CMAKE_MODULE_LINKER_FLAGS} Shared \${CMAKE_SHARED_LINKER_FLAGS}\n") _EOF_ } _tc-getPROG () { local tuple=$1; local v var vars=$2; local prog=$3; var=${vars%% *}; for v in ${vars}; do if [[ -n ${!v} ]]; then export ${var}="${!v}"; echo "${!v}"; return 0; fi; done; local search=; [[ -n $4 ]] && search=$(type -p "$4-${prog}"); [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p "${!tuple}-${prog}"); [[ -n ${search} ]] && prog=${search##*/}; export ${var}=${prog}; echo "${!var}" } _use_me_now () { debug-print-function ${FUNCNAME} "$@"; local uper capitalised x; [[ -z $2 ]] && die "cmake-utils_use-$1 []"; if [[ ! -z $3 ]]; then echo "-D$1$3=$(use $2 && echo ON || echo OFF)"; else uper=$(echo ${2} | tr '[:lower:]' '[:upper:]'); capitalised=$(echo ${2} | sed 's/\<\(.\)\([^ ]*\)/\u\1\L\2/g'); for x in $2 $uper $capitalised; do echo "-D$1$x=$(use $2 && echo ON || echo OFF) "; done; fi } _use_me_now_inverted () { debug-print-function ${FUNCNAME} "$@"; local uper capitalised x; [[ -z $2 ]] && die "cmake-utils_use-$1 []"; if [[ ! -z $3 ]]; then echo "-D$1$3=$(use $2 && echo OFF || echo ON)"; else uper=$(echo ${2} | tr '[:lower:]' '[:upper:]'); capitalised=$(echo ${2} | sed 's/\<\(.\)\([^ ]*\)/\u\1\L\2/g'); for x in $2 $uper $capitalised; do echo "-D$1$x=$(use $2 && echo OFF || echo ON) "; done; fi } add_blocker () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${1} ]] && die "Missing parameter"; local pkg=kde-base/$1 atom old_ver="unset" use; if [[ $pkg == *\[*\] ]]; then use=${pkg/#*\[/[}; pkg=${pkg%\[*\]}; fi; [[ "$3" == *:3.5 ]] && old_ver=${3%:3.5}; if [[ ${2} != 0 ]]; then if [[ -z ${2} ]]; then atom=${pkg}; else if [[ ${2::1} == "<" ]]; then atom="<${pkg}-${2:1}"; else atom="<=${pkg}-${2}"; fi; fi; RDEPEND+=" !${atom}:4${use}"; fi; if [[ ${old_ver} != "unset" ]]; then if [[ -z ${old_ver} ]]; then atom=${pkg}; else if [[ ${old_ver::1} == "<" ]]; then atom="<${pkg}-${old_ver:1}"; else atom="<=${pkg}-${old_ver}"; fi; fi; RDEPEND+=" !${atom}:3.5${use}"; fi } add_kdebase_dep () { debug-print-function ${FUNCNAME} "$@"; local ver; if [[ -n ${3} ]]; then ver=${3}; else if [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then ver=${KDE_OVERRIDE_MINIMAL}; else if [[ ${KDEBASE} != kde-base ]]; then ver=${KDE_MINIMAL}; else if [[ ${PV} == *.9999 ]]; then ver=$(get_kde_version); else ver=${PV}; fi; fi; fi; fi; [[ -z ${1} ]] && die "Missing parameter"; if [[ ${1} == kdelibs ]] && version_is_at_least 4.7.50 ${ver}; then ver=4.7.1; fi; echo " >=kde-base/${1}-${ver}:4[aqua=${2:+,${2}}]" } append-cflags () { [[ $# -eq 0 ]] && return 0; export CFLAGS=$(test-flags-CC ${CFLAGS} "$@"); return 0 } append-cppflags () { [[ $# -eq 0 ]] && return 0; export CPPFLAGS="${CPPFLAGS} $*"; return 0 } append-cxxflags () { [[ $# -eq 0 ]] && return 0; export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS} "$@"); return 0 } append-fflags () { [[ $# -eq 0 ]] && return 0; export FFLAGS=$(test-flags-F77 ${FFLAGS} "$@"); export FCFLAGS=$(test-flags-FC ${FCFLAGS} "$@"); return 0 } append-flags () { [[ $# -eq 0 ]] && return 0; append-cflags "$@"; append-cxxflags "$@"; append-fflags "$@"; return 0 } append-ldflags () { [[ $# -eq 0 ]] && return 0; local flag; for flag in "$@"; do [[ ${flag} == -l* ]] && ewarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS"; done; export LDFLAGS="${LDFLAGS} $*"; return 0 } append-lfs-flags () { [[ $# -ne 0 ]] && die "append-lfs-flags takes no arguments"; append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE } append-libs () { [[ $# -eq 0 ]] && return 0; local flag; for flag in "$@"; do [[ ${flag} == -l* ]] && flag=${flag#-l}; export LIBS="${LIBS} -l${flag}"; done; return 0 } base_src_compile () { debug-print-function $FUNCNAME "$@"; has src_configure ${BASE_EXPF} || base_src_configure; base_src_make "$@" } base_src_configure () { debug-print-function $FUNCNAME "$@"; [[ -x ${ECONF_SOURCE:-.}/configure ]] && econf "$@" } base_src_install () { debug-print-function $FUNCNAME "$@"; emake DESTDIR="${D}" "$@" install || die "died running make install, $FUNCNAME"; base_src_install_docs } base_src_install_docs () { debug-print-function $FUNCNAME "$@"; local x; pushd "${S}" > /dev/null; if [[ "$(declare -p DOCS 2>/dev/null 2>&1)" == "declare -a"* ]]; then for x in "${DOCS[@]}"; do debug-print "$FUNCNAME: docs: creating document from ${x}"; dodoc "${x}" || die "dodoc failed"; done; fi; if [[ "$(declare -p HTML_DOCS 2>/dev/null 2>&1)" == "declare -a"* ]]; then for x in "${HTML_DOCS[@]}"; do debug-print "$FUNCNAME: docs: creating html document from ${x}"; dohtml -r "${x}" || die "dohtml failed"; done; fi; popd > /dev/null } base_src_make () { debug-print-function $FUNCNAME "$@"; if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then emake "$@" || die "died running emake, $FUNCNAME"; fi } base_src_prepare () { debug-print-function $FUNCNAME "$@"; debug-print "$FUNCNAME: PATCHES=$PATCHES"; local patches_failed=0; pushd "${S}" > /dev/null; if [[ "$(declare -p PATCHES 2>/dev/null 2>&1)" == "declare -a"* ]]; then for x in "${PATCHES[@]}"; do debug-print "$FUNCNAME: applying patch from ${x}"; if [[ -d "${x}" ]]; then EPATCH_SUFFIX=${EPATCH_SUFFIX:=patch}; oldval=${EPATCH_SOURCE}; EPATCH_SOURCE=${x}; EPATCH_FORCE=yes; epatch; EPATCH_SOURCE=${oldval}; else if [[ -f "${x}" ]]; then epatch "${x}"; else ewarn "QA: File or directory \"${x}\" does not exist."; ewarn "QA: Check your PATCHES array or add missing file/directory."; patches_failed=1; fi; fi; done; [[ ${patches_failed} -eq 1 ]] && die "Some patches failed. See above messages."; else for x in ${PATCHES}; do debug-print "$FUNCNAME: patching from ${x}"; epatch "${x}"; done; fi; debug-print "$FUNCNAME: applying user patches"; epatch_user; popd > /dev/null } base_src_unpack () { debug-print-function $FUNCNAME "$@"; pushd "${WORKDIR}" > /dev/null; [[ -n "${A}" ]] && unpack ${A}; has src_prepare ${BASE_EXPF} || base_src_prepare; popd > /dev/null } buildsycoca () { debug-print-function ${FUNCNAME} "$@"; for x in usr/share/{config,kde4}; do DIRS=${EROOT}usr; [[ -d "${EROOT}${x}" ]] || break; if use userland_BSD; then [[ $(stat -f %p "${EROOT}${x}") != 40755 ]]; local stat_rtn="$?"; else [[ $(stat --format=%a "${EROOT}${x}") != 755 ]]; local stat_rtn=$?; fi; if [[ $stat_rtn != 1 ]]; then ewarn "QA Notice:"; ewarn "Package ${PN} is breaking ${EROOT}${x} permissions."; ewarn "Please report this issue to gentoo bugzilla."; einfo "Permissions will get adjusted automatically now."; find "${EROOT}${x}" -type d -print0 | xargs -0 chmod 755; fi; done } built_with_use () { local hidden="no"; if [[ $1 == "--hidden" ]]; then hidden="yes"; shift; fi; local missing_action="die"; if [[ $1 == "--missing" ]]; then missing_action=$2; shift; shift; case ${missing_action} in true | false | die) ;; *) die "unknown action '${missing_action}'" ;; esac; fi; local opt=$1; [[ ${opt:0:1} = "-" ]] && shift || opt="-a"; local PKG=$(best_version $1); [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package"; shift; local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE; local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE; if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then case ${missing_action} in true) return 0 ;; false) return 1 ;; die) die "Unable to determine what USE flags $PKG was built with" ;; esac; fi; if [[ ${hidden} == "no" ]]; then local IUSE_BUILT=($(<"${IUSEFILE}")); local expand; for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]'); do if [[ $1 == ${expand}_* ]]; then expand=""; break; fi; done; if [[ -n ${expand} ]]; then if ! has $1 ${IUSE_BUILT[@]#[-+]}; then case ${missing_action} in true) return 0 ;; false) return 1 ;; die) die "$PKG does not actually support the $1 USE flag!" ;; esac; fi; fi; fi; local USE_BUILT=$(<${USEFILE}); while [[ $# -gt 0 ]]; do if [[ ${opt} = "-o" ]]; then has $1 ${USE_BUILT} && return 0; else has $1 ${USE_BUILT} || return 1; fi; shift; done; [[ ${opt} = "-a" ]] } cdrom_get_cds () { local cdcnt=0; local f=; for f in "$@"; do ((++cdcnt)); export CDROM_CHECK_${cdcnt}="$f"; done; export CDROM_TOTAL_CDS=${cdcnt}; export CDROM_CURRENT_CD=1; if [[ -n ${CD_ROOT}${CD_ROOT_1} ]]; then local var=; cdcnt=0; while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do ((++cdcnt)); var="CD_ROOT_${cdcnt}"; [[ -z ${!var} ]] && var="CD_ROOT"; if [[ -z ${!var} ]]; then eerror "You must either use just the CD_ROOT"; eerror "or specify ALL the CD_ROOT_X variables."; eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables."; die "could not locate CD_ROOT_${cdcnt}"; fi; done; export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}}; einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"; export CDROM_SET=-1; for f in ${CDROM_CHECK_1//:/ }; do ((++CDROM_SET)); [[ -e ${CDROM_ROOT}/${f} ]] && break; done; export CDROM_MATCH=${f}; return; fi; if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}"; echo; einfo "If you do not have the CD, but have the data files"; einfo "mounted somewhere on your filesystem, just export"; einfo "the variable CD_ROOT so that it points to the"; einfo "directory containing the files."; echo; einfo "For example:"; einfo "export CD_ROOT=/mnt/cdrom"; echo; else if [[ -n ${CDROM_NAME_SET} ]]; then cdcnt=0; while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do ((++cdcnt)); export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}"; done; fi; einfo "This package will need access to ${CDROM_TOTAL_CDS} cds."; cdcnt=0; while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do ((++cdcnt)); var="CDROM_NAME_${cdcnt}"; [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}"; done; echo; einfo "If you do not have the CDs, but have the data files"; einfo "mounted somewhere on your filesystem, just export"; einfo "the following variables so they point to the right place:"; einfon ""; cdcnt=0; while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do ((++cdcnt)); echo -n " CD_ROOT_${cdcnt}"; done; echo; einfo "Or, if you have all the files in the same place, or"; einfo "you only have one cdrom, you can export CD_ROOT"; einfo "and that place will be used as the same data source"; einfo "for all the CDs."; echo; einfo "For example:"; einfo "export CD_ROOT_1=/mnt/cdrom"; echo; fi; export CDROM_SET=""; export CDROM_CURRENT_CD=0; cdrom_load_next_cd } cdrom_load_next_cd () { local var; ((++CDROM_CURRENT_CD)); unset CDROM_ROOT; var=CD_ROOT_${CDROM_CURRENT_CD}; [[ -z ${!var} ]] && var="CD_ROOT"; if [[ -z ${!var} ]]; then var="CDROM_CHECK_${CDROM_CURRENT_CD}"; _cdrom_locate_file_on_cd ${!var}; else export CDROM_ROOT=${!var}; fi; einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}" } check_license () { local lic=$1; if [ -z "${lic}" ]; then lic="${PORTDIR}/licenses/${LICENSE}"; else if [ -e "${PORTDIR}/licenses/${lic}" ]; then lic="${PORTDIR}/licenses/${lic}"; else if [ -e "${PWD}/${lic}" ]; then lic="${PWD}/${lic}"; else if [ -e "${lic}" ]; then lic="${lic}"; fi; fi; fi; fi; local l="`basename ${lic}`"; local alic; eshopts_push -o noglob; for alic in ${ACCEPT_LICENSE}; do if [[ ${alic} == ${l} ]]; then eshopts_pop; return 0; fi; done; eshopts_pop; [ ! -f "${lic}" ] && die "Could not find requested license ${lic}"; local licmsg=$(emktemp); cat > ${licmsg} <<-EOF ********************************************************** The following license outlines the terms of use of this package. You MUST accept this license for installation to continue. When you are done viewing, hit 'q'. If you CTRL+C out of this, the install will not run! ********************************************************** EOF cat ${lic} >> ${licmsg}; ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}"; einfon "Do you accept the terms of this license (${l})? [yes/no] "; read alic; case ${alic} in yes | Yes | y | Y) return 0 ;; *) echo; echo; echo; eerror "You MUST accept the license to continue! Exiting!"; die "Failed to accept license" ;; esac } cmake-utils_src_compile () { _execute_optionaly "src_compile" "$@" } cmake-utils_src_configure () { _execute_optionaly "src_configure" "$@" } cmake-utils_src_install () { _execute_optionaly "src_install" "$@" } cmake-utils_src_make () { debug-print-function ${FUNCNAME} "$@"; _check_build_dir; pushd "${CMAKE_BUILD_DIR}" > /dev/null; [[ -e Makefile ]] || die "Makefile not found. Error during configure stage."; if [[ -n ${CMAKE_VERBOSE} ]]; then emake VERBOSE=1 "$@" || die "Make failed!"; else emake "$@" || die "Make failed!"; fi; popd > /dev/null } cmake-utils_src_test () { _execute_optionaly "src_test" "$@" } cmake-utils_use () { _use_me_now "" "$@" } cmake-utils_use_build () { _use_me_now BUILD_ "$@" } cmake-utils_use_disable () { _use_me_now_inverted DISABLE_ "$@" } cmake-utils_use_enable () { _use_me_now ENABLE_ "$@" } cmake-utils_use_has () { _use_me_now HAVE_ "$@" } cmake-utils_use_no () { _use_me_now_inverted NO_ "$@" } cmake-utils_use_use () { _use_me_now USE_ "$@" } cmake-utils_use_want () { _use_me_now WANT_ "$@" } cmake-utils_use_with () { _use_me_now WITH_ "$@" } comment_all_add_subdirectory () { find "$@" -name CMakeLists.txt -print0 | grep -vFzZ "./cmake" | xargs -0 sed -i -e '/^[[:space:]]*add_subdirectory/s/^/#DONOTCOMPILE /' -e '/^[[:space:]]*ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' || die "${LINENO}: Initial sed died" } delete_all_version_separators () { replace_all_version_separators "" "${1}" } delete_version_separator () { replace_version_separator "${1}" "" "${2}" } dlopen_lib () { case "${CHOST}" in *-linux-gnu* | *-linux-uclibc | *-interix*) echo "-ldl" ;; esac } doicon () { ( local i j ret; insinto /usr/share/pixmaps; for i in "$@"; do if [[ -f ${i} ]]; then doins "${i}"; ((ret+=$?)); else if [[ -d ${i} ]]; then for j in "${i}"/*.png; do doins "${j}"; ((ret+=$?)); done; else ((++ret)); fi; fi; done; exit ${ret} ) } domenu () { ( local i j ret=0; insinto /usr/share/applications; for i in "$@"; do if [[ -f ${i} ]]; then doins "${i}"; ((ret+=$?)); else if [[ -d ${i} ]]; then for j in "${i}"/*.desktop; do doins "${j}"; ((ret+=$?)); done; else ((++ret)); fi; fi; done; exit ${ret} ) } ebeep () { ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org" } econf_build () { tc-env_build econf --build=${CBUILD:-${CHOST}} "$@" } ecvs_clean () { [[ -z $* ]] && set -- .; find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf; find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf } edos2unix () { [[ $# -eq 0 ]] && return 0; sed -i 's/\r$//' -- "$@" || die } egetent () { local db=$1 key=$2; [[ $# -ge 3 ]] && die "usage: egetent "; case ${db} in passwd | group) ;; *) die "sorry, database '${db}' not yet supported; file a bug" ;; esac; case ${CHOST} in *-darwin[678]) case ${key} in *[!0-9]*) nidump ${db} . | awk -F: "(\$1 ~ /^${key}\$/) {print;exit;}" ;; *) nidump ${db} . | awk -F: "(\$3 == ${key}) {print;exit;}" ;; esac ;; *-darwin*) local mykey; case ${db} in passwd) db="Users" mykey="UniqueID" ;; group) db="Groups" mykey="PrimaryGroupID" ;; esac; case ${key} in *[!0-9]*) dscl . -read /${db}/${key} 2> /dev/null | grep RecordName ;; *) dscl . -search /${db} ${mykey} ${key} 2> /dev/null ;; esac ;; *-freebsd* | *-dragonfly*) case ${db} in passwd) db="user" ;; *) ;; esac; local opts; if [[ ${key} == [[:digit:]]* ]]; then [[ ${db} == "user" ]] && opts="-u" || opts="-g"; fi; pw show ${db} ${opts} "${key}" -q ;; *-netbsd* | *-openbsd*) grep "${key}:\*:" /etc/${db} ;; *) nscd -i "${db}" 2> /dev/null; getent "${db}" "${key}" ;; esac } egethome () { local pos; [[ $# -eq 1 ]] || die "usage: egethome "; case ${CHOST} in *-darwin* | *-freebsd* | *-dragonfly*) pos=9 ;; *) pos=6 ;; esac; egetent passwd "$1" | cut -d: -f${pos} } egetshell () { local pos; [[ $# -eq 1 ]] || die "usage: egetshell "; case ${CHOST} in *-darwin* | *-freebsd* | *-dragonfly*) pos=10 ;; *) pos=7 ;; esac; egetent passwd "$1" | cut -d: -f${pos} } emktemp () { local exe="touch"; [[ $1 == -d ]] && exe="mkdir" && shift; local topdir=$1; if [[ -z ${topdir} ]]; then [[ -z ${T} ]] && topdir="/tmp" || topdir=${T}; fi; if ! type -P mktemp > /dev/null; then local tmp=/; while [[ -e ${tmp} ]]; do tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}; done; ${exe} "${tmp}" || ${exe} -p "${tmp}"; echo "${tmp}"; else if [[ ${exe} == "touch" ]]; then TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX; else TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX; fi; fi } enable_cmake-utils_src_compile () { debug-print-function ${FUNCNAME} "$@"; has src_configure ${CMAKE_EXPF} || cmake-utils_src_configure; cmake-utils_src_make "$@" } enable_cmake-utils_src_configure () { debug-print-function ${FUNCNAME} "$@"; [[ "${CMAKE_REMOVE_MODULES}" == "yes" ]] && { local name; for name in ${CMAKE_REMOVE_MODULES_LIST}; do find "${S}" -name ${name}.cmake -exec rm -v {} +; done }; _check_build_dir; if [[ ! -e ${CMAKE_USE_DIR}/CMakeLists.txt ]]; then eerror "Unable to locate CMakeLists.txt under:"; eerror "\"${CMAKE_USE_DIR}/CMakeLists.txt\""; eerror "Consider not inheriting the cmake eclass."; die "FATAL: Unable to find CMakeLists.txt"; fi; _modify-cmakelists; export XDG_CONFIG_HOME="${T}"; if [[ ${CMAKE_BUILD_TYPE} = Gentoo ]]; then if ! has debug ${IUSE//+} || ! use debug; then append-cppflags -DNDEBUG; fi; fi; local build_rules=${T}/gentoo_rules.cmake; cat > "${build_rules}" <<-_EOF_ SET (CMAKE_C_COMPILER $(type -P $(tc-getCC)) CACHE FILEPATH "C compiler" FORCE) SET (CMAKE_C_COMPILE_OBJECT " ${CPPFLAGS} -o -c " CACHE STRING "C compile command" FORCE) SET (CMAKE_CXX_COMPILER $(type -P $(tc-getCXX)) CACHE FILEPATH "C++ compiler" FORCE) SET (CMAKE_CXX_COMPILE_OBJECT " ${CPPFLAGS} -o -c " CACHE STRING "C++ compile command" FORCE) _EOF_ has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=; if [[ -n ${EPREFIX} ]]; then cat >> "${build_rules}"; fi <<-_EOF_ # in Prefix we need rpath and must ensure cmake gets our default linker path # right ... except for Darwin hosts IF (NOT APPLE) SET (CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE) SET (CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH "${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)" CACHE STRING "" FORCE) ELSE () SET(CMAKE_PREFIX_PATH "${EPREFIX}${PREFIX:-/usr}" CACHE STRING ""FORCE) SET(CMAKE_SKIP_BUILD_RPATH OFF CACHE BOOL "" FORCE) SET(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE) SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE CACHE BOOL "" FORCE) SET(CMAKE_INSTALL_RPATH "${EPREFIX}${PREFIX:-/usr}/lib;${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)" CACHE STRING "" FORCE) SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE) SET(CMAKE_INSTALL_NAME_DIR "${EPREFIX}${PREFIX:-/usr}/lib" CACHE STRING "" FORCE) ENDIF (NOT APPLE) _EOF_ local common_config=${T}/gentoo_common_config.cmake; local libdir=$(get_libdir); cat > "${common_config}" <<-_EOF_ SET (LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE) SET (CMAKE_INSTALL_LIBDIR ${libdir} CACHE PATH "Output directory for libraries") _EOF_ [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]] && echo 'SET (CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}"; if [[ $(declare -p mycmakeargs 2>&-) != "declare -a mycmakeargs="* ]]; then local mycmakeargs_local=(${mycmakeargs}); else local mycmakeargs_local=("${mycmakeargs[@]}"); fi; local cmakeargs=(--no-warn-unused-cli -C "${common_config}" -DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX:-/usr}" "${mycmakeargs_local[@]}" -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" -DCMAKE_INSTALL_DO_STRIP=OFF -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}" "${MYCMAKEARGS}"); mkdir -p "${CMAKE_BUILD_DIR}"; pushd "${CMAKE_BUILD_DIR}" > /dev/null; debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is ${mycmakeargs_local[*]}"; echo "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}"; "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}" || die "cmake failed"; popd > /dev/null } enable_cmake-utils_src_install () { debug-print-function ${FUNCNAME} "$@"; _check_build_dir; pushd "${CMAKE_BUILD_DIR}" > /dev/null; base_src_install "$@"; popd > /dev/null; if [[ -n "${DOCS}" ]] && [[ "$(declare -p DOCS 2>/dev/null 2>&1)" != "declare -a"* ]]; then dodoc ${DOCS} || die "dodoc failed"; fi; if [[ -n "${HTML_DOCS}" ]] && [[ "$(declare -p HTML_DOCS 2>/dev/null 2>&1)" != "declare -a"* ]]; then dohtml -r ${HTML_DOCS} || die "dohtml failed"; fi } enable_cmake-utils_src_test () { debug-print-function ${FUNCNAME} "$@"; local ctestargs; _check_build_dir; pushd "${CMAKE_BUILD_DIR}" > /dev/null; [[ -e CTestTestfile.cmake ]] || { echo "No tests found. Skipping."; return 0 }; [[ -n ${TEST_VERBOSE} ]] && ctestargs="--extra-verbose --output-on-failure"; if ctest ${ctestargs} "$@"; then einfo "Tests succeeded."; else if [[ -n "${CMAKE_YES_I_WANT_TO_SEE_THE_TEST_LOG}" ]]; then eerror "Tests failed. Test log ${CMAKE_BUILD_DIR}/Testing/Temporary/LastTest.log follows:"; eerror "--START TEST LOG--------------------------------------------------------------"; cat "${CMAKE_BUILD_DIR}/Testing/Temporary/LastTest.log"; eerror "--END TEST LOG----------------------------------------------------------------"; die "Tests failed."; else die "Tests failed. When you file a bug, please attach the following file: \n\t${CMAKE_BUILD_DIR}/Testing/Temporary/LastTest.log"; fi; fi; popd > /dev/null } enable_selected_doc_linguas () { debug-print-function ${FUNCNAME} "$@"; if ! $(env | grep -q "^LINGUAS="); then return 0; fi; KDE_DOC_DIRS=${KDE_DOC_DIRS:='doc/%lingua'}; local linguas; for pattern in ${KDE_DOC_DIRS}; do local handbookdir=`dirname ${pattern}`; local translationdir=`basename ${pattern}`; [[ ${handbookdir} = '.' ]] && handbookdir=${translationdir} && translationdir=; [[ -d ${handbookdir} ]] || die 'wrong doc dir specified'; if ! use handbook; then sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" -i CMakeLists.txt || die 'failed to comment out all handbooks'; else comment_all_add_subdirectory "${handbookdir}"; local lingua; for lingua in en ${KDE_LINGUAS}; do if [[ ${lingua} = en ]] || use linguas_${lingua}; then if [[ -d ${handbookdir}/${translationdir//%lingua/${lingua}} ]]; then sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}"; fi; fi; done; fi; done; [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}" } enable_selected_linguas () { debug-print-function ${FUNCNAME} "$@"; local x; if ! $(env | grep -q "^LINGUAS="); then return 0; fi; if [[ "$(declare -p KDE_LINGUAS_DIR 2>/dev/null 2>&1)" == "declare -a"* ]]; then debug-print "$FUNCNAME: we have these subfolders defined: ${KDE_LINGUAS_DIR}"; for x in ${KDE_LINGUAS_DIR[@]}; do _enable_selected_linguas_dir ${x}; done; else KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"}; _enable_selected_linguas_dir ${KDE_LINGUAS_DIR}; fi } enewgroup () { _assert_pkg_ebuild_phase ${FUNCNAME}; local egroup=$1; shift; if [[ -z ${egroup} ]]; then eerror "No group specified !"; die "Cannot call enewgroup without a group"; fi; if [[ -n $(egetent group "${egroup}") ]]; then return 0; fi; einfo "Adding group '${egroup}' to your system ..."; local egid=$1; shift; if [[ ! -z ${egid} ]]; then if [[ ${egid} -gt 0 ]]; then if [[ -n $(egetent group ${egid}) ]]; then egid="next available; requested gid taken"; fi; else eerror "Groupid given but is not greater than 0 !"; die "${egid} is not a valid GID"; fi; else egid="next available"; fi; einfo " - Groupid: ${egid}"; if [[ $# -gt 0 ]]; then die "extra arguments no longer supported; please file a bug"; fi; function _enewgroup_next_gid () { if [[ ${egid} == *[!0-9]* ]]; then for ((egid = 101; egid <= 999; egid++)) do [[ -z $(egetent group ${egid}) ]] && break; done; fi }; case ${CHOST} in *-darwin*) _enewgroup_next_gid; dscl . create "/groups/${egroup}" gid ${egid}; dscl . create "/groups/${egroup}" passwd '*' ;; *-freebsd* | *-dragonfly*) _enewgroup_next_gid; pw groupadd "${egroup}" -g ${egid} || die ;; *-netbsd*) _enewgroup_next_gid; groupadd -g ${egid} "${egroup}" || die ;; *) local opts; if [[ ${egid} == *[!0-9]* ]]; then opts=""; else opts="-g ${egid}"; fi; groupadd -r ${opts} "${egroup}" || die ;; esac } enewuser () { _assert_pkg_ebuild_phase ${FUNCNAME}; local euser=$1; shift; if [[ -z ${euser} ]]; then eerror "No username specified !"; die "Cannot call enewuser without a username"; fi; if [[ -n $(egetent passwd "${euser}") ]]; then return 0; fi; einfo "Adding user '${euser}' to your system ..."; local opts=(); local euid=$1; shift; if [[ -n ${euid} && ${euid} != -1 ]]; then if [[ ${euid} -gt 0 ]]; then if [[ -n $(egetent passwd ${euid}) ]]; then euid="next"; fi; else eerror "Userid given but is not greater than 0 !"; die "${euid} is not a valid UID"; fi; else euid="next"; fi; if [[ ${euid} == "next" ]]; then for ((euid = 101; euid <= 999; euid++)) do [[ -z $(egetent passwd ${euid}) ]] && break; done; fi; opts+=(-u ${euid}); einfo " - Userid: ${euid}"; local eshell=$1; shift; if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then if [[ ! -e ${ROOT}${eshell} ]]; then eerror "A shell was specified but it does not exist !"; die "${eshell} does not exist in ${ROOT}"; fi; if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then eerror "Do not specify ${eshell} yourself, use -1"; die "Pass '-1' as the shell parameter"; fi; else for eshell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do [[ -x ${ROOT}${eshell} ]] && break; done; if [[ ${eshell} == "/dev/null" ]]; then eerror "Unable to identify the shell to use, proceeding with userland default."; case ${USERLAND} in GNU) eshell="/bin/false" ;; BSD) eshell="/sbin/nologin" ;; Darwin) eshell="/usr/sbin/nologin" ;; *) die "Unable to identify the default shell for userland ${USERLAND}" ;; esac; fi; fi; einfo " - Shell: ${eshell}"; opts+=(-s "${eshell}"); local ehome=$1; shift; if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then ehome="/dev/null"; fi; einfo " - Home: ${ehome}"; opts+=(-d "${ehome}"); local egroups=$1; shift; local g egroups_arr; IFS="," read -r -a egroups_arr <<< "${egroups}"; shift; if [[ ${#egroups_arr[@]} -gt 0 ]]; then local defgroup exgroups; for g in "${egroups_arr[@]}"; do if [[ -z $(egetent group "${g}") ]]; then eerror "You must add group ${g} to the system first"; die "${g} is not a valid GID"; fi; if [[ -z ${defgroup} ]]; then defgroup=${g}; else exgroups+=",${g}"; fi; done; opts+=(-g "${defgroup}"); if [[ ! -z ${exgroups} ]]; then opts+=(-G "${exgroups:1}"); fi; fi; einfo " - Groups: ${egroups:-(none)}"; if [[ $# -gt 0 ]]; then die "extra arguments no longer supported; please file a bug"; else local comment="added by portage for ${PN}"; opts+=(-c "${comment}"); einfo " - GECOS: ${comment}"; fi; case ${CHOST} in *-darwin*) dscl . create "/users/${euser}" uid ${euid}; dscl . create "/users/${euser}" shell "${eshell}"; dscl . create "/users/${euser}" home "${ehome}"; dscl . create "/users/${euser}" realname "added by portage for ${PN}"; for g in "${egroups_arr[@]}"; do dscl . merge "/groups/${g}" users "${euser}"; done ;; *-freebsd* | *-dragonfly*) pw useradd "${euser}" "${opts[@]}" || die ;; *-netbsd*) useradd "${opts[@]}" "${euser}" || die ;; *-openbsd*) useradd -u ${euid} -s "${eshell}" -d "${ehome}" -g "${egroups}" "${euser}" || die ;; *) useradd -r "${opts[@]}" "${euser}" || die ;; esac; if [[ ! -e ${ROOT}/${ehome} ]]; then einfo " - Creating ${ehome} in ${ROOT}"; mkdir -p "${ROOT}/${ehome}"; chown "${euser}" "${ROOT}/${ehome}"; chmod 755 "${ROOT}/${ehome}"; fi } epatch () { function _epatch_draw_line () { [[ -z $1 ]] && set "$(printf "%65s" '')"; echo "${1//?/=}" }; unset P4CONFIG P4PORT P4USER; if [[ $# -gt 1 ]]; then local m; for m in "$@"; do epatch "${m}"; done; return 0; fi; local SINGLE_PATCH="no"; [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}"; if [[ -f $1 ]]; then SINGLE_PATCH="yes"; set -- "$1"; local EPATCH_SUFFIX=$1; else if [[ -d $1 ]]; then set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"}; else if [[ -f ${EPATCH_SOURCE}/$1 ]]; then epatch "${EPATCH_SOURCE}/$1"; return $?; else [[ $# -ne 0 ]] && EPATCH_SOURCE=$1; echo; eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:"; eerror; eerror " ${EPATCH_SOURCE}"; eerror " ( ${EPATCH_SOURCE##*/} )"; echo; die "Cannot find \$EPATCH_SOURCE!"; fi; fi; fi; local PIPE_CMD; case ${EPATCH_SUFFIX##*\.} in xz) PIPE_CMD="xz -dc" ;; lzma) PIPE_CMD="lzma -dc" ;; bz2) PIPE_CMD="bzip2 -dc" ;; gz | Z | z) PIPE_CMD="gzip -dc" ;; ZIP | zip) PIPE_CMD="unzip -p" ;; *) ;; esac; [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}"; local x; for x in "$@"; do [[ ! -f ${x} ]] && continue; local patchname=${x##*/}; local a=${patchname#*_}; a=${a%%_*}; if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then continue; fi; if [[ -n ${EPATCH_EXCLUDE} ]]; then eshopts_push -o noglob; local ex; for ex in ${EPATCH_EXCLUDE}; do if [[ ${patchname} == ${ex} ]]; then eshopts_pop; continue 2; fi; done; eshopts_pop; fi; if [[ ${SINGLE_PATCH} == "yes" ]]; then if [[ -n ${EPATCH_SINGLE_MSG} ]]; then einfo "${EPATCH_SINGLE_MSG}"; else einfo "Applying ${patchname} ..."; fi; else einfo " ${patchname} ..."; fi; local STDERR_TARGET="${T}/${patchname}.out"; if [[ -e ${STDERR_TARGET} ]]; then STDERR_TARGET="${T}/${patchname}-$$.out"; fi; printf "***** %s *****\nPWD: %s\n\n" "${patchname}" "${PWD}" > "${STDERR_TARGET}"; local count=0; local PATCH_TARGET; if [[ -n ${PIPE_CMD} ]]; then PATCH_TARGET="${T}/$$.patch"; echo "PIPE_COMMAND: ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}"; if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then echo; eerror "Could not extract patch!"; count=5; break; fi; else PATCH_TARGET=${x}; fi; local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }'); if [[ -n ${abs_paths} ]]; then count=1; printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}"; fi; local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}"); if [[ -n ${rel_paths} ]]; then eqawarn "QA Notice: Your patch uses relative paths '../'."; eqawarn " In the future this will cause a failure."; eqawarn "${rel_paths}"; fi; while [[ ${count} -lt 5 ]]; do ( _epatch_draw_line "***** ${patchname} *****"; echo; echo "PATCH COMMAND: patch -p${count} ${EPATCH_OPTS} < '${PATCH_TARGET}'"; echo; _epatch_draw_line "***** ${patchname} *****"; patch -p${count} ${EPATCH_OPTS} --dry-run -f < "${PATCH_TARGET}" 2>&1; ret=$?; echo; echo "patch program exited with status ${ret}"; exit ${ret} ) >> "${STDERR_TARGET}"; if [ $? -eq 0 ]; then ( _epatch_draw_line "***** ${patchname} *****"; echo; echo "ACTUALLY APPLYING ${patchname} ..."; echo; _epatch_draw_line "***** ${patchname} *****"; patch -p${count} ${EPATCH_OPTS} < "${PATCH_TARGET}" 2>&1; ret=$?; echo; echo "patch program exited with status ${ret}"; exit ${ret} ) >> "${STDERR_TARGET}"; if [ $? -ne 0 ]; then echo; eerror "A dry-run of patch command succeeded, but actually"; eerror "applying the patch failed!"; count=5; fi; break; fi; : $(( count++ )); done; if [[ -n ${PIPE_CMD} ]]; then rm -f "${PATCH_TARGET}"; fi; if [[ ${count} -ge 5 ]]; then echo; eerror "Failed Patch: ${patchname} !"; eerror " ( ${PATCH_TARGET} )"; eerror; eerror "Include in your bugreport the contents of:"; eerror; eerror " ${STDERR_TARGET}"; echo; die "Failed Patch: ${patchname}!"; fi; rm -f "${STDERR_TARGET}"; eend 0; done; [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching"; : } epatch_user () { [[ $# -ne 0 ]] && die "epatch_user takes no options"; local applied="${T}/epatch_user.applied"; [[ -e ${applied} ]] && return 2; local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches; for check in {${CATEGORY}/${PF},${CATEGORY}/${P},${CATEGORY}/${PN}}; do EPATCH_SOURCE=${base}/${CTARGET}/${check}; [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check}; [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check}; if [[ -d ${EPATCH_SOURCE} ]]; then EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch; echo "${EPATCH_SOURCE}" > "${applied}"; return 0; fi; done; echo "none" > "${applied}"; return 1 } epause () { ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org" } epunt_cxx () { local dir=$1; [[ -z ${dir} ]] && dir=${S}; ebegin "Removing useless C++ checks"; local f; find "${dir}" -name configure | while read f; do patch --no-backup-if-mismatch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null; done; eend 0 } eshopts_pop () { [[ $# -ne 0 ]] && die "eshopts_pop takes no arguments"; local i=$(( ${#__ESHOPTS_SAVE__[@]} - 1 )); [[ ${i} -eq -1 ]] && die "eshopts_{push,pop}: unbalanced pair"; local s=${__ESHOPTS_SAVE__[$i]}; unset __ESHOPTS_SAVE__[$i]; if [[ ${s} == "shopt -"* ]]; then eval "${s}" || die "eshopts_pop: sanity: invalid shopt options: ${s}"; else set +$- || die "eshopts_pop: sanity: invalid shell settings: $-"; set -${s} || die "eshopts_pop: sanity: unable to restore saved shell settings: ${s}"; fi } eshopts_push () { local i=${#__ESHOPTS_SAVE__[@]}; if [[ $1 == -[su] ]]; then __ESHOPTS_SAVE__[$i]=$(shopt -p); [[ $# -eq 0 ]] && return 0; shopt "$@" || die "eshopts_push: bad options to shopt: $*"; else __ESHOPTS_SAVE__[$i]=$-; [[ $# -eq 0 ]] && return 0; set "$@" || die "eshopts_push: bad options to set: $*"; fi } esvn_clean () { [[ -z $* ]] && set -- .; find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf } fdo-mime_desktop_database_update () { has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=; has "${EAPI:-0}" 0 1 2 && ! use prefix && EROOT="${ROOT}"; if [ -x "${EPREFIX}/usr/bin/update-desktop-database" ]; then einfo "Updating desktop mime database ..."; "${EPREFIX}/usr/bin/update-desktop-database" -q "${EROOT}usr/share/applications"; fi } fdo-mime_mime_database_update () { has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=; has "${EAPI:-0}" 0 1 2 && ! use prefix && EROOT="${ROOT}"; if [ -x "${EPREFIX}/usr/bin/update-mime-database" ]; then einfo "Updating shared mime info database ..."; "${EPREFIX}/usr/bin/update-mime-database" "${EROOT}usr/share/mime"; fi } filter-flags () { _filter-hardened "$@"; _filter-var CFLAGS "$@"; _filter-var CPPFLAGS "$@"; _filter-var CXXFLAGS "$@"; _filter-var FFLAGS "$@"; _filter-var FCFLAGS "$@"; return 0 } filter-ldflags () { _filter-var LDFLAGS "$@"; return 0 } filter-lfs-flags () { [[ $# -ne 0 ]] && die "filter-lfs-flags takes no arguments"; filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE } filter-mfpmath () { local orig_mfpmath new_math prune_math; orig_mfpmath=$(get-flag -mfpmath); new_math=$(get-flag mfpmath); new_math=" ${new_math//,/ } "; prune_math=""; for prune_math in "$@"; do new_math=${new_math/ ${prune_math} / }; done; new_math=$(echo ${new_math}); new_math=${new_math// /,}; if [[ -z ${new_math} ]]; then filter-flags ${orig_mfpmath}; else replace-flags ${orig_mfpmath} -mfpmath=${new_math}; fi; return 0 } find_unpackable_file () { local src=$1; if [[ -z ${src} ]]; then src=${DISTDIR}/${A}; else if [[ -e ${DISTDIR}/${src} ]]; then src=${DISTDIR}/${src}; else if [[ -e ${PWD}/${src} ]]; then src=${PWD}/${src}; else if [[ -e ${src} ]]; then src=${src}; fi; fi; fi; fi; [[ ! -e ${src} ]] && return 1; echo "${src}" } gcc-fullversion () { _gcc_fullversion '$1.$2.$3' "$@" } gcc-major-version () { _gcc_fullversion '$1' "$@" } gcc-micro-version () { _gcc_fullversion '$3' "$@" } gcc-minor-version () { _gcc_fullversion '$2' "$@" } gcc-specs-directive () { local directive subdname subdirective; directive="$(_gcc-specs-directive_raw $1)"; while [[ ${directive} == *%\(*\)* ]]; do subdname=${directive/*%\(}; subdname=${subdname/\)*}; subdirective="$(_gcc-specs-directive_raw ${subdname})"; directive="${directive//\%(${subdname})/${subdirective}}"; done; echo "${directive}"; return 0 } gcc-specs-nostrict () { local directive; directive=$(gcc-specs-directive cc1); return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]) } gcc-specs-now () { local directive; directive=$(gcc-specs-directive link_command); return $([[ "${directive/\{!nonow:}" != "${directive}" ]]) } gcc-specs-pie () { local directive; directive=$(gcc-specs-directive cc1); return $([[ "${directive/\{!nopie:}" != "${directive}" ]]) } gcc-specs-relro () { local directive; directive=$(gcc-specs-directive link_command); return $([[ "${directive/\{!norelro:}" != "${directive}" ]]) } gcc-specs-ssp () { local directive; directive=$(gcc-specs-directive cc1); return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]) } gcc-specs-ssp-to-all () { local directive; directive=$(gcc-specs-directive cc1); return $([[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]) } gcc-version () { _gcc_fullversion '$1.$2' "$@" } gen_usr_ldscript () { local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname); [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/; tc-is-static-only && return; dodir /usr/${libdir}; if [[ $1 == "-a" ]]; then auto=true; shift; dodir /${libdir}; fi; output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p'); [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )"; for lib in "$@"; do local tlib; if ${auto}; then lib="lib${lib}${suffix}"; else [[ -r ${ED}/${libdir}/${lib} ]] || continue; fi; case ${CTARGET:-${CHOST}} in *-darwin*) if ${auto}; then tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib}); else tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib}); fi; [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}"; tlib=${tlib##*/}; if ${auto}; then mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die; if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die; fi; rm -f "${ED}"/${libdir}/${lib}; fi; if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then chmod u+w "${ED}${libdir}/${tlib}"; local nowrite=yes; fi; install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed"; [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}"; pushd "${ED}/usr/${libdir}" > /dev/null; ln -snf "../../${libdir}/${tlib}" "${lib}"; popd > /dev/null ;; *-aix* | *-irix* | *64*-hpux* | *-interix* | *-winnt*) if ${auto}; then mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die; tlib=$(readlink "${ED}"/${libdir}/${lib}); tlib=${tlib##*/}; if [[ -z ${tlib} ]]; then tlib=${lib}; else rm -f "${ED}"/${libdir}/${lib}; fi; else tlib=${lib}; fi; pushd "${ED}/usr/${libdir}" > /dev/null; ln -snf "../../${libdir}/${tlib}" "${lib}"; popd > /dev/null ;; hppa*-hpux*) if ${auto}; then tlib=$(chatr "${ED}"/usr/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}'); [[ -z ${tlib} ]] && tlib=${lib}; tlib=${tlib##*/}; mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die; if [[ ${tlib} != ${lib}* ]]; then mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die; fi; [[ ${tlib} != ${lib} ]] && rm -f "${ED}"/${libdir}/${lib}; else tlib=$(chatr "${ED}"/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}'); [[ -z ${tlib} ]] && tlib=${lib}; tlib=${tlib##*/}; fi; pushd "${ED}"/usr/${libdir} > /dev/null; ln -snf "../../${libdir}/${tlib}" "${lib}"; [[ ${tlib} != ${lib} ]] && ln -snf "../../${libdir}/${tlib}" "${tlib}"; popd > /dev/null ;; *) if ${auto}; then tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib}); [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}"; mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die; if [[ ${tlib} != ${lib}* ]]; then mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die; fi; rm -f "${ED}"/${libdir}/${lib}; else tlib=${lib}; fi; cat > "${ED}/usr/${libdir}/${lib}" <<-END_LDSCRIPT /* GNU ld script Since Gentoo has critical dynamic libraries in /lib, and the static versions in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we run into linking problems. This "fake" dynamic lib is a linker script that redirects the linker to the real lib. And yes, this works in the cross- compiling scenario as the sysroot-ed linker will prepend the real path. See bug http://bugs.gentoo.org/4411 for more info. */ ${output_format} GROUP ( ${EPREFIX}/${libdir}/${tlib} ) END_LDSCRIPT ;; esac fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"; done } get-flag () { local f findflag="$1"; for f in ${CFLAGS} ${CXXFLAGS} ${FFLAGS} ${FCFLAGS}; do if [ "${f/${findflag}}" != "${f}" ]; then printf "%s\n" "${f/-${findflag}=}"; return 0; fi; done; return 1 } get_abi_CFLAGS () { get_abi_var CFLAGS "$@" } get_abi_CHOST () { get_abi_var CHOST "$@" } get_abi_CTARGET () { get_abi_var CTARGET "$@" } get_abi_FAKE_TARGETS () { get_abi_var FAKE_TARGETS "$@" } get_abi_LDFLAGS () { get_abi_var LDFLAGS "$@" } get_abi_LIBDIR () { get_abi_var LIBDIR "$@" } get_abi_var () { local flag=$1; local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}}; local var="${flag}_${abi}"; echo ${!var} } get_after_major_version () { echo $(get_version_component_range 2- "${1:-${PV}}") } get_all_abis () { local order=""; if [[ -z ${MULTILIB_ABIS} ]]; then echo "default"; return 0; fi; for x in ${MULTILIB_ABIS}; do if [[ ${x} != ${DEFAULT_ABI} ]]; then order="${order:+${order} }${x}"; fi; done; order="${order:+${order} }${DEFAULT_ABI}"; echo ${order}; return 0 } get_all_libdirs () { local libdirs; local abi; local dir; for abi in ${MULTILIB_ABIS}; do libdirs+=" $(get_abi_LIBDIR ${abi})"; done; [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib"; echo "${libdirs}" } get_all_version_components () { eshopts_push -s extglob; local ver_str=${1:-${PV}} result; result=(); if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]]; then echo ${VERSIONATOR_CACHE_RESULT}; eshopts_pop; return; fi; export VERSIONATOR_CACHE_VER_STR=${ver_str}; while [[ -n $ver_str ]]; do case "${ver_str::1}" in [[:digit:]]) result+=("${ver_str%%[^[:digit:]]*}"); ver_str=${ver_str##+([[:digit:]])} ;; [-_.]) result+=("${ver_str::1}"); ver_str=${ver_str:1} ;; [[:alpha:]]) local not_match=${ver_str##+([[:alpha:]])*([[:digit:]])}; result+=("${ver_str::${#ver_str} - ${#not_match}}"); ver_str=${not_match} ;; *) result+=("${ver_str::1}"); ver_str=${ver_str:1} ;; esac; done; export VERSIONATOR_CACHE_RESULT=${result[*]}; echo ${result[@]}; eshopts_pop } get_bmake () { if [[ ${USERLAND} == *BSD ]]; then echo make; else if [[ ${USERLAND} == "Darwin" ]]; then echo bsdmake; else echo pmake; fi; fi } get_install_abis () { local order=""; if [[ -z ${MULTILIB_ABIS} ]]; then echo "default"; return 0; fi; if [[ ${EMULTILIB_PKG} == "true" ]]; then for x in ${MULTILIB_ABIS}; do if [[ ${x} != "${DEFAULT_ABI}" ]]; then has ${x} ${ABI_DENY} || order="${order} ${x}"; fi; done; has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}"; if [[ -n ${ABI_ALLOW} ]]; then local ordera=""; for x in ${order}; do if has ${x} ${ABI_ALLOW}; then ordera="${ordera} ${x}"; fi; done; order=${ordera}; fi; else order=${DEFAULT_ABI}; fi; if [[ -z ${order} ]]; then 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."; fi; echo ${order}; return 0 } get_kde_version () { local ver=${1:-${PV}}; local major=$(get_major_version ${ver}); local minor=$(get_version_component_range 2 ${ver}); local micro=$(get_version_component_range 3 ${ver}); if [[ ${ver} == 9999 ]]; then echo live; else (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1)); fi } get_last_version_component_index () { echo $(($(get_version_component_count "${1:-${PV}}" ) - 1)) } get_libdir () { local CONF_LIBDIR; if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then echo ${CONF_LIBDIR_OVERRIDE}; else get_abi_LIBDIR; fi } get_libname () { local libname; local ver=$1; case ${CHOST} in *-cygwin | mingw* | *-mingw*) libname="dll" ;; *-darwin*) libname="dylib" ;; *-mint*) libname="irrelevant" ;; hppa*-hpux*) libname="sl" ;; *) libname="so" ;; esac; if [[ -z $* ]]; then echo ".${libname}"; else for ver in "$@"; do case ${CHOST} in *-darwin*) echo ".${ver}.${libname}" ;; *-mint*) echo ".${libname}" ;; *) echo ".${libname}.${ver}" ;; esac; done; fi } get_major_version () { local c=($(get_all_version_components "${1:-${PV}}")); echo ${c[0]} } get_modname () { local modname; local ver=$1; case ${CHOST} in *-darwin*) modname="bundle" ;; *) modname="so" ;; esac; echo ".${modname}" } get_mounts () { local point= node= fs= opts= foo=; if [[ $(uname -s) == "Linux" ]]; then while read node point fs opts foo; do echo "${point} ${node} ${fs} ${opts}"; done < /proc/mounts; return; fi; local IFS=' '; LC_ALL=C mount -p | while read node point fs foo; do opts=${fs#* }; fs=${fs%% *}; echo "${point// /\040} ${node// /\040} ${fs%% *} ${opts// /\040}"; done } get_version_component_count () { local a=($(get_version_components "${1:-${PV}}")); echo ${#a[@]} } get_version_component_range () { eshopts_push -s extglob; local c v="${2:-${PV}}" range="${1}" range_start range_end; local -i i=-1 j=0; c=($(get_all_version_components "${v}")); range_start=${range%-*}; range_start=${range_start:-1}; range_end=${range#*-}; range_end=${range_end:-${#c[@]}}; while ((j < range_start)); do i+=1; ((i > ${#c[@]})) && eshopts_pop && return; [[ -n "${c[i]//[-._]}" ]] && j+=1; done; while ((j <= range_end)); do echo -n ${c[i]}; ((i > ${#c[@]})) && eshopts_pop && return; [[ -n "${c[i]//[-._]}" ]] && j+=1; i+=1; done; eshopts_pop } get_version_components () { local c=$(get_all_version_components "${1:-${PV}}"); echo ${c//[-._]/ } } gnome2_environment_reset () { export G_HOME="${T}"; export GST_REGISTRY="${T}/registry.xml"; export XDG_DATA_HOME="${T}/.local/share"; export XDG_CONFIG_HOME="${T}/.config"; export XDG_CACHE_HOME="${T}/.cache"; export XDG_RUNTIME_DIR="${T}/run"; mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "${XDG_RUNTIME_DIR}"; chmod 0700 "${XDG_RUNTIME_DIR}" } gnome2_gconf_install () { has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"; local updater="${EROOT}${GCONFTOOL_BIN}"; if [[ ! -x "${updater}" ]]; then debug-print "${updater} is not executable"; return; fi; if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then debug-print "No GNOME 2 GConf schemas found"; return; fi; unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL; export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"; einfo "Installing GNOME 2 GConf schemas"; local F; for F in ${GNOME2_ECLASS_SCHEMAS}; do if [[ -e "${EROOT}${F}" ]]; then debug-print "Installing schema: ${F}"; "${updater}" --makefile-install-rule "${EROOT}${F}" > /dev/null; fi; done; pids=$(pgrep -x gconfd-2); if [[ $? == 0 ]]; then ebegin "Reloading GConf schemas"; kill -HUP ${pids}; eend $?; fi } gnome2_gconf_savelist () { has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"; pushd "${ED}" &>/dev/null; export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null); popd &>/dev/null } gnome2_gconf_uninstall () { has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"; local updater="${EROOT}${GCONFTOOL_BIN}"; if [[ ! -x "${updater}" ]]; then debug-print "${updater} is not executable"; return; fi; if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then debug-print "No GNOME 2 GConf schemas found"; return; fi; unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL; export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"; einfo "Uninstalling GNOME 2 GConf schemas"; local F; for F in ${GNOME2_ECLASS_SCHEMAS}; do if [[ -e "${EROOT}${F}" ]]; then debug-print "Uninstalling gconf schema: ${F}"; "${updater}" --makefile-uninstall-rule "${EROOT}${F}" > /dev/null; fi; done; pids=$(pgrep -x gconfd-2); if [[ $? == 0 ]]; then ebegin "Reloading GConf schemas"; kill -HUP ${pids}; eend $?; fi } gnome2_icon_cache_update () { has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"; local updater="${EROOT}${GTK_UPDATE_ICON_CACHE}"; if [[ ! -x "${updater}" ]]; then debug-print "${updater} is not executable"; return; fi; if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then debug-print "No icon cache to update"; return; fi; ebegin "Updating icons cache"; local retval=0; local fails=(); for dir in ${GNOME2_ECLASS_ICONS}; do if [[ -f "${EROOT}${dir}/index.theme" ]]; then local rv=0; "${updater}" -qf "${EROOT}${dir}"; rv=$?; if [[ ! $rv -eq 0 ]]; then debug-print "Updating cache failed on ${EROOT}${dir}"; fails[$(( ${#fails[@]} + 1 ))]="${EROOT}${dir}"; retval=2; fi; fi; done; eend ${retval}; for f in "${fails[@]}"; do eerror "Failed to update cache with icon $f"; done } gnome2_icon_savelist () { has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"; pushd "${ED}" &>/dev/null; export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null); popd &>/dev/null } gnome2_omf_fix () { local omf_makefiles filename; omf_makefiles="$@"; if [[ -f ${S}/omf.make ]]; then omf_makefiles="${omf_makefiles} ${S}/omf.make"; fi; for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am" |sort); do omf_makefiles="${omf_makefiles} ${filename}"; done; ebegin "Fixing OMF Makefiles"; local retval=0; local fails=(); for omf in ${omf_makefiles}; do local rv=0; sed -i -e 's:scrollkeeper-update:true:' "${omf}"; retval=$?; if [[ ! $rv -eq 0 ]]; then debug-print "updating of ${omf} failed"; fails[$(( ${#fails[@]} + 1 ))]=$omf; retval=2; fi; done; eend $retval; for f in "${fails[@]}"; do eerror "Failed to update OMF Makefile $f"; done } gnome2_schemas_savelist () { has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"; pushd "${ED}" &>/dev/null; export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null); popd &>/dev/null } gnome2_schemas_update () { has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"; local updater="${EROOT}${GLIB_COMPILE_SCHEMAS}"; if [[ ! -x ${updater} ]]; then debug-print "${updater} is not executable"; return; fi; if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then debug-print "No GSettings schemas to update"; return; fi; ebegin "Updating GSettings schemas"; ${updater} --allow-any-name "$@" "${EROOT%/}/usr/share/glib-2.0/schemas" &>/dev/null; eend $? } gnome2_scrollkeeper_update () { has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"; if [[ -x "${EROOT}${SCROLLKEEPER_UPDATE_BIN}" ]]; then einfo "Updating scrollkeeper database ..."; "${EROOT}${SCROLLKEEPER_UPDATE_BIN}" -q -p "${EROOT}${SCROLLKEEPER_DIR}"; fi } has_hardened () { die "$0: deprecated, please use gcc-specs-{relro,now}()!" } has_m32 () { [ "$(tc-arch)" = "amd64" ] && has_multilib_profile && return 0; local temp=$(emktemp); echo "int main() { return(0); }" > "${temp}".c; MY_CC=$(tc-getCC); ${MY_CC/ .*/} -m32 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1; local ret=$?; rm -f "${temp}".c; [[ ${ret} != 1 ]] && return 0; return 1 } has_m64 () { local temp="$(emktemp)"; echo "int main() { return(0); }" > "${temp}".c; MY_CC=$(tc-getCC); ${MY_CC/ .*/} -m64 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1; local ret=$?; rm -f "${temp}".c; [[ ${ret} != 1 ]] && return 0; return 1 } has_multilib_profile () { [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] } has_pic () { die "$0: deprecated, please use gcc-specs-pie()!" } has_pie () { die "$0: deprecated, please use gcc-specs-pie()!" } has_ssp () { die "$0: deprecated, please use gcc-specs-ssp()!" } has_ssp_all () { die "$0: deprecated, please use gcc-specs-ssp()!" } in_iuse () { debug-print-function ${FUNCNAME} "${@}"; [[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()"; local flag=${1}; local liuse=(${IUSE}); has "${flag}" "${liuse[@]#[+-]}" } install_library_dependencies () { local depsfile="${T}/${PN}"; ebegin "Installing library dependencies as ${depsfile##*/}"; insinto /var/lib/kde; doins "${depsfile}" || die "Failed to install library dependencies."; eend $? } is-flag () { is-flagq "$@" && echo true } is-flagq () { [[ -n $2 ]] && die "Usage: is-flag "; _is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 || _is_flagq FFLAGS $1 || _is_flagq FCFLAGS $1 } is-ldflag () { is-ldflagq "$@" && echo true } is-ldflagq () { [[ -n $2 ]] && die "Usage: is-ldflag "; _is_flagq LDFLAGS $1 } is-login-disabled () { _dead_portability_user_funcs } is_final_abi () { has_multilib_profile || return 0; set -- $(get_install_abis); local LAST_ABI=$#; [[ ${!LAST_ABI} == ${ABI} ]] } kde4-base_pkg_postinst () { debug-print-function ${FUNCNAME} "$@"; gnome2_icon_cache_update; fdo-mime_desktop_database_update; fdo-mime_mime_database_update; buildsycoca; if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then if use_if_iuse kdeenablefinal; then echo; ewarn "WARNING! you have kdeenable final useflag enabled."; ewarn "This useflag needs to be enabled on ALL kde using packages and"; ewarn "is known to cause issues."; ewarn "You are using this setup at your own risk and the kde team does not"; ewarn "take responsibilities for dead kittens."; echo; fi; if [[ ${BUILD_TYPE} = live ]]; then echo; einfo "WARNING! This is an experimental live ebuild of ${CATEGORY}/${PN}"; einfo "Use it at your own risk."; einfo "Do _NOT_ file bugs at bugs.gentoo.org because of this ebuild!"; echo; fi; if [[ ${KDEBASE} != kde-base ]] && ! has_version 'kde-base/kdebase-runtime-meta' && ! has_version 'kde-base/kdebase-startkde'; then if [[ ${KDE_REQUIRED} == always ]] || ( [[ ${KDE_REQUIRED} == optional ]] && use kde ); then echo; ewarn "WARNING! Your system configuration contains neither \"kde-base/kdebase-runtime-meta\""; ewarn "nor \"kde-base/kdebase-startkde\". You need one of above."; ewarn "With this setting you are unsupported by KDE team."; ewarn "All missing features you report for misc packages will be probably ignored or closed as INVALID."; fi; fi; fi } kde4-base_pkg_postrm () { debug-print-function ${FUNCNAME} "$@"; gnome2_icon_cache_update; fdo-mime_desktop_database_update; fdo-mime_mime_database_update; buildsycoca } kde4-base_pkg_preinst () { debug-print-function ${FUNCNAME} "$@"; gnome2_icon_savelist; if [[ ${BUILD_TYPE} == live && ${KDE_SCM} == svn ]]; then subversion_pkg_preinst; fi } kde4-base_pkg_setup () { debug-print-function ${FUNCNAME} "$@"; if use_if_iuse kdeprefix; then eerror "Sorry, kdeprefix support has been removed."; eerror "Please remove kdeprefix from your USE variable."; die "kdeprefix support has been removed"; fi; if [[ ${CATEGORY}/${PN} != kde-base/kdelibs && ${CATEGORY}/${PN} != kde-base/kde-env ]] && { [[ ${KDE_REQUIRED} == always ]] || { [[ ${KDE_REQUIRED} == optional ]] && use kde } } && has_version kde-base/kdelibs[kdeprefix]; then eerror "Sorry, kdeprefix support has been removed."; eerror "Please rebuild kdelibs without kdeprefix support."; die "kdeprefix support has been removed"; fi; unset KDEHOME; if [[ ${EAPI:-0} != 3 ]]; then if [[ ${MERGE_TYPE} != binary ]]; then [[ $(gcc-major-version) -lt 4 ]] || ( [[ $(gcc-major-version) -eq 4 && $(gcc-minor-version) -le 3 ]] ) && die "Sorry, but gcc-4.3 and earlier wont work for KDE (see bug 354837)."; fi; fi; KDEDIR=/usr; : ${PREFIX:=/usr}; EKDEDIR=${EPREFIX}/usr; QT_PLUGIN_PATH="${EPREFIX}/usr/$(get_libdir)/kde4/plugins/"; export XDG_CONFIG_HOME="${T}" } kde4-base_src_compile () { debug-print-function ${FUNCNAME} "$@"; cmake-utils_src_compile "$@" } kde4-base_src_configure () { debug-print-function ${FUNCNAME} "$@"; local cmakeargs=(-DKDE4_BUILD_TESTS=OFF); if use_if_iuse kdeenablefinal; then cmakeargs+=(-DKDE4_ENABLE_FINAL=ON); fi; if use_if_iuse debug; then CMAKE_BUILD_TYPE="Debugfull"; else append-cppflags -DQT_NO_DEBUG; fi; [[ ${PN} = kdelibs ]] && cmakeargs+=(-DKDE_DISTRIBUTION_TEXT=Gentoo); tc-is-cross-compiler || cmakeargs+=(-DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}"); QTEST_COLORED=1; unset KDEDIRS; tc-is-cross-compiler && cmakeargs+=(-DQT_LIBRARY_DIR=${ROOT}/usr/$(get_libdir)/qt4); tc-is-cross-compiler && cmakeargs+=(-DKDE4_DATA_DIR=${ROOT}/usr/share/apps/); cmakeargs+=(-DSYSCONF_INSTALL_DIR="${EPREFIX}"/etc); if [[ $(declare -p mycmakeargs 2>&-) != "declare -a mycmakeargs="* ]]; then mycmakeargs=(${mycmakeargs}); fi; mycmakeargs=("${cmakeargs[@]}" "${mycmakeargs[@]}"); cmake-utils_src_configure } kde4-base_src_install () { debug-print-function ${FUNCNAME} "$@"; if [[ -n ${KMSAVELIBS} ]]; then install_library_dependencies; fi; local doc; if ! has kde4-meta ${INHERITED}; then for doc in "${S}"/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do [[ -f ${doc} && -s ${doc} ]] && dodoc "${doc}"; done; for doc in "${S}"/*/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do [[ -f ${doc} && -s ${doc} ]] && newdoc "${doc}" "$(basename $(dirname ${doc})).$(basename ${doc})"; done; fi; cmake-utils_src_install; [[ ${EAPI:-0} != 3 && -d ${ED}/${PREFIX}/share/doc/HTML ]] && docompress -x ${PREFIX}/share/doc/HTML } kde4-base_src_prepare () { debug-print-function ${FUNCNAME} "$@"; if [[ -n ${KDE_LINGUAS} ]]; then enable_selected_linguas; fi; if ! has kde4-meta ${INHERITED} && in_iuse handbook; then if [[ ${KDEBASE} == kde-base ]]; then if [[ ${PN} != kde-l10n && ${PN} != kdepim-l10n && ${PN} != kdelibs ]] && use !handbook; then : ${KDE_DOC_DIRS:=doc}; local dir; for dir in ${KDE_DOC_DIRS}; do sed -e "\!^[[:space:]]*add_subdirectory[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" -e "\!^[[:space:]]*ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" -e "\!^[[:space:]]*macro_optional_add_subdirectory[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" -e "\!^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${dir}[[:space:]]*)!s/^/#DONOTCOMPILE /" -i CMakeLists.txt || die "failed to comment out handbook"; done; fi; else enable_selected_doc_linguas; fi; fi; if [[ ${BUILD_TYPE} = live ]]; then case ${KDE_SCM} in svn) subversion_src_prepare ;; esac; fi; base_src_prepare; if [[ -n ${KMSAVELIBS} ]]; then save_library_dependencies; fi; if [[ -n ${KMLOADLIBS} ]]; then load_library_dependencies; fi; find "${S}" -name CMakeLists.txt -exec sed -i -r -e 's/\$\{KDE4WORKSPACE_TASKMANAGER_(LIBRARY|LIBS)\}/taskmanager/g' -e 's/\$\{KDE4WORKSPACE_KWORKSPACE_(LIBRARY|LIBS)\}/kworkspace/g' -e 's/\$\{KDE4WORKSPACE_SOLIDCONTROLIFACES_(LIBRARY|LIBS)\}/solidcontrolifaces/g' -e 's/\$\{KDE4WORKSPACE_SOLIDCONTROL_(LIBRARY|LIBS)\}/solidcontrol/g' -e 's/\$\{KDE4WORKSPACE_PROCESSUI_(LIBRARY|LIBS)\}/processui/g' -e 's/\$\{KDE4WORKSPACE_LSOFUI_(LIBRARY|LIBS)\}/lsofui/g' -e 's/\$\{KDE4WORKSPACE_PLASMACLOCK_(LIBRARY|LIBS)\}/plasmaclock/g' -e 's/\$\{KDE4WORKSPACE_NEPOMUKQUERYCLIENT_(LIBRARY|LIBS)\}/nepomukqueryclient/g' -e 's/\$\{KDE4WORKSPACE_NEPOMUKQUERY_(LIBRARY|LIBS)\}/nepomukquery/g' -e 's/\$\{KDE4WORKSPACE_KSCREENSAVER_(LIBRARY|LIBS)\}/kscreensaver/g' -e 's/\$\{KDE4WORKSPACE_WEATHERION_(LIBRARY|LIBS)\}/weather_ion/g' -e 's/\$\{KDE4WORKSPACE_KWINEFFECTS_(LIBRARY|LIBS)\}/kwineffects/g' -e 's/\$\{KDE4WORKSPACE_KDECORATIONS_(LIBRARY|LIBS)\}/kdecorations/g' -e 's/\$\{KDE4WORKSPACE_KSGRD_(LIBRARY|LIBS)\}/ksgrd/g' -e 's/\$\{KDE4WORKSPACE_KEPHAL_(LIBRARY|LIBS)\}/kephal/g' {} + || die 'failed to replace KDE4Workspace library targets'; if [[ -z ${KDEBASE} ]]; then find "${S}" -name "*.docbook" -exec sed -i -r -e 's:-//KDE//DTD DocBook XML V4\.1(\..)?-Based Variant V1\.[01]//EN:-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN:g' {} + || die 'failed to fix DocBook variant version'; fi } kde4-base_src_test () { debug-print-function ${FUNCNAME} "$@"; mycmakeargs+=(-DKDE4_BUILD_TESTS=ON); cmake-utils_src_configure; kde4-base_src_compile; unset DBUS_SESSION_BUS_ADDRESS; if [[ ${VIRTUALX_REQUIRED} == always || ${VIRTUALX_REQUIRED} == test ]]; then if [[ ${VIRTUALX_COMMAND} != emake ]]; then debug-print "QA Notice: This version of kde4-base.eclass includes the virtualx functionality."; debug-print " You may NOT set VIRTUALX_COMMAND or call virtualmake from the ebuild."; debug-print " Setting VIRTUALX_REQUIRED is completely sufficient. See the"; debug-print " kde4-base.eclass docs for details... Applying workaround."; cmake-utils_src_test; else VIRTUALX_COMMAND="cmake-utils_src_test" virtualmake; fi; else cmake-utils_src_test; fi } kde4-base_src_unpack () { debug-print-function ${FUNCNAME} "$@"; if [[ ${BUILD_TYPE} = live ]]; then case ${KDE_SCM} in svn) migrate_store_dir; subversion_src_unpack ;; git) git-2_src_unpack ;; esac; else unpack ${A}; fi } kde4-meta_change_cmakelists () { debug-print-function ${FUNCNAME} "$@"; pushd "${S}" > /dev/null; comment_all_add_subdirectory ./; if [[ -f CMakeLists.txt ]]; then sed -e '/add_subdirectory[[:space:]]*([[:space:]]*cmake[[:space:]]*)/s/^#DONOTCOMPILE //' -e '/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*cmake[[:space:]]*)/s/^#DONOTCOMPILE //' -i CMakeLists.txt || die "${LINENO}: cmake sed died"; fi; if [[ -z ${KMNOMODULE} ]]; then find "${S}"/${KMMODULE} -name CMakeLists.txt -print0 | xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || die "${LINENO}: died in KMMODULE section"; _change_cmakelists_parent_dirs ${KMMODULE}; fi; local i; for i in ${KMEXTRACTONLY}; do if [[ -d ${i} && -f ${i}/../CMakeLists.txt ]]; then sed -e "/([[:space:]]*$(basename $i)[[:space:]]*)/s/^/#DONOTCOMPILE /" -i ${i}/../CMakeLists.txt || die "${LINENO}: sed died while working in the KMEXTRACTONLY section while processing ${i}"; fi; done; for i in ${KMCOMPILEONLY}; do debug-print "${LINENO}: KMCOMPILEONLY, processing ${i}"; find "${S}"/${i} -name CMakeLists.txt -print0 | xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' -e '/install(.*)/{s/^/#DONOTINSTALL /;}' -e '/^install(/,/)/{s/^/#DONOTINSTALL /;}' -e '/kde4_install_icons(.*)/{s/^/#DONOTINSTALL /;}' || die "${LINENO}: sed died in the KMCOMPILEONLY section while processing ${i}"; _change_cmakelists_parent_dirs ${i}; done; for i in ${KMEXTRA}; do debug-print "${LINENO}: KMEXTRA section, processing ${i}"; find "${S}"/${i} -name CMakeLists.txt -print0 | xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || die "${LINENO}: sed died uncommenting add_subdirectory instructions in KMEXTRA section while processing ${i}"; _change_cmakelists_parent_dirs ${i}; done; for i in ${KMEXTRA_NONFATAL}; do if [[ -d "${S}"/${i} ]]; then find "${S}"/${i} -name CMakeLists.txt -print0 | xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || die "${LINENO}: sed died uncommenting add_subdirectory instructions in KMEXTRA section while processing ${i}"; _change_cmakelists_parent_dirs ${i}; fi; done; case ${KMNAME} in kdebase-workspace | kde-workspace) if [[ ${PN} != kdebase-startkde && -f CMakeLists.txt ]]; then sed -e '/startkde/s/^/#DONOTINSTALL /' -i CMakeLists.txt || die "${LINENO}: sed died in the kdebase-startkde collision prevention section"; fi; if [[ ${PN} != libkworkspace ]]; then sed -e '/install(FILES ${CMAKE_CURRENT_BINARY_DIR}\/KDE4WorkspaceConfig.cmake/,/^[[:space:]]*FILE KDE4WorkspaceLibraryTargets.cmake )[[:space:]]*^/d' -i CMakeLists.txt || die "${LINENO}: sed died in kde-workspace strip config install and fix EXPORT section"; fi; if [[ ${PN} != plasma-workspace ]]; then sed -e '/KActivities/s/REQUIRED//' -i CMakeLists.txt || die "${LINENO}: sed died in kde-workspace dep reduction section"; fi ;; kdebase-runtime | kde-runtime) if [[ ${PN} != kdebase-data && -f CMakeLists.txt ]]; then sed -e '/^install(PROGRAMS[[:space:]]*[^[:space:]]*\/kde4[[:space:]]/s/^/#DONOTINSTALL /' -i CMakeLists.txt || die "Sed to exclude bin/kde4 failed"; fi ;; kdenetwork) sed -e 's/find_package(KdepimLibs REQUIRED)/macro_optional_find_package(KdepimLibs)/' -i CMakeLists.txt || die "failed to disable hardcoded checks" ;; kdepim) sed -r -e '/find_package\(KdepimLibs/s/REQUIRED//' -e '/find_package\((KdepimLibs|Boost|QGpgme|Akonadi|ZLIB|Strigi|SharedDesktopOntologies|Soprano|Nepomuk)/{/macro_optional_/!s/find/macro_optional_&/}' -e '/macro_log_feature\((Boost|QGPGME|Akonadi|ZLIB|STRIGI|SHAREDDESKTOPONTOLOGIES|Soprano|Nepomuk)_FOUND/s/ TRUE / FALSE /' -e 's/if[[:space:]]*([[:space:]]*BUILD_.*)[[:space:]]*/if(1) # &/' -e 's/if[[:space:]]*([[:space:]]*[[:alnum:]]*_FOUND[[:space:]]*)[[:space:]]*$/if(1) # &/' -i CMakeLists.txt || die "failed to disable hardcoded checks"; if use_if_iuse kontact || [[ ${PN} = kontact ]]; then sed -e 's/if[[:space:]]*([[:space:]]*BUILD_.*)[[:space:]]*$/if(1) # &/' -e 's/if[[:space:]]*([[:space:]]*[[:alnum:]]*_FOUND[[:space:]]*)[[:space:]]*$/if(1) # &/' -i kontact/plugins/CMakeLists.txt || die 'failed to override build logic'; fi; if [[ $(get_kde_version) < 4.5 ]]; then case ${PN} in kalarm | kmailcvt | kontact | korganizer | korn) sed -n -e '/qt4_generate_dbus_interface(.*org\.kde\.kmail\.\(kmail\|mailcomposer\)\.xml/p' -e '/add_custom_target(kmail_xml /,/)/p' -i kmail/CMakeLists.txt || die "uncommenting xml failed"; _change_cmakelists_parent_dirs kmail ;; esac; fi ;; kdewebdev) sed -e 's/find_package(KdepimLibs REQUIRED)/macro_optional_find_package(KdepimLibs)/' -e 's/find_package(LibXml2 REQUIRED)/macro_optional_find_package(LibXml2)/' -e 's/find_package(LibXslt REQUIRED)/macro_optional_find_package(LibXslt)/' -e 's/find_package(Boost REQUIRED)/macro_optional_find_package(Boost)/' -i CMakeLists.txt || die "failed to disable hardcoded checks" ;; koffice) if [[ ${PN} != koffice-data ]]; then sed -e '/install(.*FindKOfficeLibs.cmake/,/)/ d' -i cmake/modules/CMakeLists.txt || die "${LINENO}: sed died in collision prevention section"; sed -e '/install(.\+config-openexr\.h.\+)/d' -i CMakeLists.txt || die "${LINENO}: sed died in collision prevention section"; fi ;; esac; popd > /dev/null } kde4-meta_create_extractlists () { debug-print-function ${FUNCNAME} "$@"; if [[ $(get_kde_version) < 4.5 ]] && use_if_iuse handbook && [[ -z ${KMNOMODULE} ]]; then KMEXTRA_NONFATAL+=" doc/${KMMODULE##*/}"; fi; if [[ -z ${KMNOMODULE} ]] && ( [[ ${KDE_HANDBOOK} == always ]] || ( [[ ${KDE_HANDBOOK} == optional ]] && use handbook ) ); then KMEXTRA_NONFATAL+=" doc/${KMMODULE##*/}"; fi; case ${KMNAME} in kdebase | kdebase-apps | kde-baseapps) KMEXTRACTONLY+=" config-apps.h.cmake ConfigureChecks.cmake" ;; kdebase-runtime | kde-runtime) KMEXTRACTONLY+=" config-runtime.h.cmake" ;; kdebase-workspace | kde-workspace) KMEXTRACTONLY+=" config-unix.h.cmake ConfigureChecks.cmake config-workspace.h.cmake config-X11.h.cmake startkde.cmake KDE4WorkspaceConfig.cmake.in" ;; kdegames) if [[ ${PN} != libkdegames ]]; then KMEXTRACTONLY+=" libkdegames/"; KMLOADLIBS="${KMLOADLIBS} libkdegames"; fi ;; kdepim) if [[ ${PN} != libkdepim ]]; then KMEXTRACTONLY+=" libkdepim/"; fi; KMEXTRACTONLY+=" config-enterprise.h.cmake kleopatra/ConfigureChecks.cmake"; if ! [[ $(get_kde_version) < 4.5 ]]; then KMEXTRACTONLY+=" CTestCustom.cmake kdepim-version.h.cmake"; else KMEXTRACTONLY+=" kdepim-version.h"; fi; if use_if_iuse kontact; then KMEXTRA+=" kontact/plugins/${PLUGINNAME:-${PN}}/"; fi ;; kdeutils) KMEXTRACTONLY+=" kdeutils-version.h" ;; koffice) KMEXTRACTONLY+=" filters/config-filters.h.cmake "; case ${PV} in 2.[12].*) KMEXTRACTONLY+=" config-endian.h.cmake config-openexr.h.cmake config-opengl.h.cmake config-prefix.h.cmake" ;; esac ;; esac; if [[ ${KMNAME} != kdegraphics || ( ( $(get_kde_version) != 4.6 || ${PV} < 4.6.2 ) && $(get_kde_version) < 4.7 ) ]] && ! [[ ${KMNAME} == kdeedu && ( ${PV} == 4.6.4 || ${PV} == 4.6.5 ) ]]; then case ${KMNAME} in kdebase-runtime | kde-runtime | kdebase-workspace | kde-workspace | kdeedu | kdegames | kdegraphics) case ${PN} in libkdegames | libkdeedu | libkworkspace) KMEXTRA+=" cmake/modules/" ;; *) KMCOMPILEONLY+=" cmake/modules/" ;; esac ;; esac; fi; debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME}: KMEXTRACTONLY ${KMEXTRACTONLY}" } kde4-meta_pkg_postinst () { debug-print-function ${FUNCNAME} "$@"; kde4-base_pkg_postinst } kde4-meta_pkg_postrm () { debug-print-function ${FUNCNAME} "$@"; kde4-base_pkg_postrm } kde4-meta_pkg_preinst () { debug-print-function ${FUNCNAME} "$@"; kde4-base_pkg_preinst } kde4-meta_pkg_setup () { debug-print-function ${FUNCNAME} "$@"; kde4-base_pkg_setup } kde4-meta_src_compile () { debug-print-function ${FUNCNAME} "$@"; kde4-base_src_compile "$@" } kde4-meta_src_configure () { debug-print-function ${FUNCNAME} "$@"; if [[ $(declare -p mycmakeargs 2>&-) != "declare -a mycmakeargs="* ]]; then mycmakeargs=(${mycmakeargs}); fi; case ${KMNAME} in kdewebdev) mycmakeargs=(-DWITH_KdepimLibs=OFF -DWITH_LibXml2=OFF -DWITH_LibXslt=OFF -DWITH_Boost=OFF -DWITH_LibTidy=OFF "${mycmakeargs[@]}") ;; esac; kde4-base_src_configure } kde4-meta_src_extract () { debug-print-function ${FUNCNAME} "$@"; if [[ ${BUILD_TYPE} = live ]]; then einfo "Exporting parts of working copy to ${S}"; kde4-meta_create_extractlists; case ${KDE_SCM} in svn) local rsync_options subdir targetdir wc_path escm; rsync_options="--group --links --owner --perms --quiet --exclude=.svn/ --exclude=.git/"; wc_path="${ESVN_WC_PATH}"; escm="{ESVN}"; rsync ${rsync_options} "${wc_path}"/* "${S}" || die "${escm}: can't export toplevel files to '${S}'."; if [[ -d "${wc_path}/cmake" ]]; then rsync --recursive ${rsync_options} "${wc_path}/cmake" "${S}" || die "${escm}: can't export cmake files to '${S}'."; fi; for subdir in $(__list_needed_subdirectories); do targetdir=""; if [[ $subdir = doc/* && ! -e "$wc_path/$subdir" ]]; then continue; fi; [[ ${subdir%/} = */* ]] && targetdir=${subdir%/} && targetdir=${targetdir%/*} && mkdir -p "${S}/${targetdir}"; rsync --recursive ${rsync_options} "${wc_path}/${subdir%/}" "${S}/${targetdir}" || die "${escm}: can't export subdirectory '${subdir}' to '${S}/${targetdir}'."; done ;; esac; else local abort tarball tarfile f extractlist postfix; KMTARPARAMS+=" --bzip2"; postfix="bz2"; case ${KMNAME} in kdebase-apps) tarball="kdebase-${PV}.tar.${postfix}" ;; *) tarball="${KMNAME}-${PV}.tar.${postfix}" ;; esac; tarfile="${DISTDIR}/${tarball}"; topdir="${tarball%.tar.*}/"; ebegin "Unpacking parts of ${tarball} to ${WORKDIR}"; kde4-meta_create_extractlists; for f in cmake/ CMakeLists.txt ConfigureChecks.cmake config.h.cmake; do extractlist+=" ${topdir}${f}"; done; extractlist+=" $(__list_needed_subdirectories)"; pushd "${WORKDIR}" > /dev/null; [[ -n ${KDE4_STRICTER} ]] && echo 'tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist}'; if [[ -n ${I_KNOW_WHAT_I_AM_DOING} ]]; then tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist} || ewarn "tar extract command failed at least partially - continuing anyway"; else tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist} 2> /dev/null || echo "tar extract command failed at least partially - continuing anyway"; fi; if [[ ${KMNAME} != ${PN} ]]; then mv ${topdir} ${P} || die "Died while moving \"${topdir}\" to \"${P}\""; fi; popd > /dev/null; eend $?; if [[ -n ${KDE4_STRICTER} ]]; then for f in $(__list_needed_subdirectories fatal); do if [[ ! -e ${S}/${f#*/} ]]; then eerror "'${f#*/}' is missing"; abort=true; fi; done; [[ -n ${abort} ]] && die "There were missing files."; fi; unset topdir; fi } kde4-meta_src_install () { debug-print-function $FUNCNAME "$@"; local doc; for doc in "${S}/${KMMODULE}"/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do [[ -f "${doc}" ]] && [[ -s "${doc}" ]] && dodoc "${doc}"; done; kde4-base_src_install } kde4-meta_src_prepare () { debug-print-function ${FUNCNAME} "$@"; kde4-meta_change_cmakelists; kde4-base_src_prepare } kde4-meta_src_test () { debug-print-function $FUNCNAME "$@"; if [[ -n $I_KNOW_WHAT_I_AM_DOING ]]; then kde4-base_src_test; else einfo "Tests disabled"; fi } kde4-meta_src_unpack () { debug-print-function ${FUNCNAME} "$@"; if [[ ${BUILD_TYPE} = live ]]; then case "${KDE_SCM}" in svn) migrate_store_dir; S="${WORKDIR}/${P}"; mkdir -p "${S}"; ESVN_RESTRICT="export" subversion_src_unpack; subversion_wc_info; subversion_bootstrap ;; git) git-2_src_unpack ;; esac; fi; kde4-meta_src_extract } load_library_dependencies () { local pn i depsfile; ebegin "Injecting library dependencies from '${KMLOADLIBS}'"; i=0; for pn in ${KMLOADLIBS}; do ((i++)); depsfile="${EPREFIX}/var/lib/kde/${pn}"; [[ -r ${depsfile} ]] || depsfile="${EPREFIX}/var/lib/kde/${pn}:$(get_kde_version)"; [[ -r ${depsfile} ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}."; sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || die "Failed to include library dependencies for ${pn}"; done; eend $? } localpatch () { local patches_overlay_dir patches patch locksufix; locksufix="${RANDOM}"; LOCALPATCH_OVERLAY="${LOCALPATCH_OVERLAY:-/etc/portage/patches}"; if [ -d "${LOCALPATCH_OVERLAY}" ]; then if [ -d "${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}-${PR}" ]; then patches_overlay_dir="${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}-${PR}"; else if [ -d "${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}" ]; then patches_overlay_dir="${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}-${PV}"; else if [ -d "${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}" ]; then patches_overlay_dir="${LOCALPATCH_OVERLAY}/${CATEGORY}/${PN}"; fi; fi; fi; if [ -n "${patches_overlay_dir}" ]; then patches="$(find "${patches_overlay_dir}"/ -type f -regex '.*\.\(diff\|\patch\)$' | sort -n)"; fi; else ewarn "LOCALPATCH_OVERLAY is set to '${LOCALPATCH_OVERLAY}' but there is no such directory."; fi; if [ -n "${patches}" ]; then for patch in ${patches}; do if [ -r "${patch}" ] && [ ! -f "${S}/.patch-${patch##*/}.${locksufix}" ]; then for patchprefix in {0..4}; do patch -d "${S}" --dry-run -p${patchprefix} -i "${patch}" --silent > /dev/null; if [ "$?" = 0 ]; then einfo "Applying ${patch##*/} [localpatch] ..."; patch -d "${S}" -p${patchprefix} -i "${patch}" --silent && touch "${S}/.patch-${patch##*/}.${locksufix}"; eend $?; break; else if [ "${patchprefix}" -ge 4 ]; then eerror "\e[1;31mLocal patch ${patch##*/} does not fit.\e[0m"; eend 1; die "localpatch failed."; fi; fi; done; fi; done; rm "${S}"/.patch-*."${locksufix}" -f; fi } make_desktop_entry () { [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable"; local exec=${1}; local name=${2:-${PN}}; local icon=${3:-${PN}}; local type=${4}; local fields=${5}; if [[ -z ${type} ]]; then local catmaj=${CATEGORY%%-*}; local catmin=${CATEGORY##*-}; case ${catmaj} in app) case ${catmin} in accessibility) type=Accessibility ;; admin) type=System ;; antivirus) type=System ;; arch) type=Archiving ;; backup) type=Archiving ;; cdr) type=DiscBurning ;; dicts) type=Dictionary ;; doc) type=Documentation ;; editors) type=TextEditor ;; emacs) type=TextEditor ;; emulation) type=Emulator ;; laptop) type=HardwareSettings ;; office) type=Office ;; pda) type=PDA ;; vim) type=TextEditor ;; xemacs) type=TextEditor ;; esac ;; dev) type="Development" ;; games) case ${catmin} in action | fps) type=ActionGame ;; arcade) type=ArcadeGame ;; board) type=BoardGame ;; emulation) type=Emulator ;; kids) type=KidsGame ;; puzzle) type=LogicGame ;; roguelike) type=RolePlaying ;; rpg) type=RolePlaying ;; simulation) type=Simulation ;; sports) type=SportsGame ;; strategy) type=StrategyGame ;; esac; type="Game;${type}" ;; gnome) type="Gnome;GTK" ;; kde) type="KDE;Qt" ;; mail) type="Network;Email" ;; media) case ${catmin} in gfx) type=Graphics ;; *) case ${catmin} in radio) type=Tuner ;; sound) type=Audio ;; tv) type=TV ;; video) type=Video ;; esac; type="AudioVideo;${type}" ;; esac ;; net) case ${catmin} in dialup) type=Dialup ;; ftp) type=FileTransfer ;; im) type=InstantMessaging ;; irc) type=IRCClient ;; mail) type=Email ;; news) type=News ;; nntp) type=News ;; p2p) type=FileTransfer ;; voip) type=Telephony ;; esac; type="Network;${type}" ;; sci) case ${catmin} in astro*) type=Astronomy ;; bio*) type=Biology ;; calc*) type=Calculator ;; chem*) type=Chemistry ;; elec*) type=Electronics ;; geo*) type=Geology ;; math*) type=Math ;; physics) type=Physics ;; visual*) type=DataVisualization ;; esac; type="Education;Science;${type}" ;; sys) type="System" ;; www) case ${catmin} in client) type=WebBrowser ;; esac; type="Network;${type}" ;; *) type= ;; esac; fi; if [ "${SLOT}" == "0" ]; then local desktop_name="${PN}"; else local desktop_name="${PN}-${SLOT}"; fi; local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop"; type=${type%;}${type:+;}; eshopts_push -s extglob; if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then ewarn "As described in the Icon Theme Specification, icon file extensions are not"; ewarn "allowed in .desktop files if the value is not an absolute path."; icon=${icon%.@(xpm|png|svg)}; fi; eshopts_pop; cat > "${desktop}" <<-EOF [Desktop Entry] Name=${name} Type=Application Comment=${DESCRIPTION} Exec=${exec} TryExec=${exec%% *} Icon=${icon} Categories=${type} EOF if [[ ${fields:-=} != *=* ]]; then ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}"; fields="Path=${fields}"; fi; [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}"; ( insinto /usr/share/applications; doins "${desktop}" ) || die "installing desktop file failed" } make_session_desktop () { [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1; [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1; local title=$1; local command=$2; local desktop=${T}/${wm:-${PN}}.desktop; shift 2; cat > "${desktop}" <<-EOF [Desktop Entry] Name=${title} Comment=This session logs you into ${title} Exec=${command} $* TryExec=${command} Type=XSession EOF ( insinto /usr/share/xsessions; doins "${desktop}" ) } make_wrapper () { local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5; local tmpwrapper=$(emktemp); cat > "${tmpwrapper}" < /dev/null; then for module in `find . -maxdepth 1 -type d -name [a-z0-9]\*`; do module="${module#./}"; mkdir -p "${ESVN_STORE_DIR}/kdebase-${module}" && mv -f "${module}" "${ESVN_STORE_DIR}/kdebase-${module}" || die "Failed to move to '${ESVN_STORE_DIR}/kdebase-${module}'."; done; popd > /dev/null; rm -fr "${cleandir}/kdebase" || die "Failed to remove ${cleandir}/kdebase. You need to remove it manually."; fi; local pkg; for pkg in "${cleandir}"/*; do mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'"; done; rmdir "${cleandir}" || die "Could not move obsolete KDE store dir. Please move '${cleandir}' contents to appropriate location (possibly ${ESVN_STORE_DIR}) and manually remove '${cleandir}' in order to continue."; fi; if ! has kde4-meta ${INHERITED}; then case ${KMNAME} in extragear* | playground*) local scmlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}"; if [[ -d "${scmlocalpath}" ]]; then local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`"; ewarn "'${scmlocalpath}' has been found."; ewarn "Moving contents to new location: ${destdir}"; addwrite "${ESVN_STORE_DIR}"; mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${scmlocalpath}" "${destdir}" || die "Failed to move to '${scmlocalpath}'"; rmdir "`dirname "${scmlocalpath}"`" 2> /dev/null; fi ;; esac; fi } multilib_env () { local CTARGET=${1:-${CTARGET}}; case ${CTARGET} in x86_64*) export CFLAGS_x86=${CFLAGS_x86--m32}; export CHOST_x86=${CTARGET/x86_64/i686}; export CTARGET_x86=${CHOST_x86}; if [[ ${SYMLINK_LIB} == "yes" ]]; then export LIBDIR_x86="lib32"; else export LIBDIR_x86="lib"; fi; export CFLAGS_amd64=${CFLAGS_amd64--m64}; export CHOST_amd64=${CTARGET}; export CTARGET_amd64=${CHOST_amd64}; export LIBDIR_amd64="lib64"; export CFLAGS_x32=${CFLAGS_x32--mx32}; export CHOST_x32=${CTARGET}; export CTARGET_x32=${CHOST_x32}; export LIBDIR_x32="libx32"; : ${MULTILIB_ABIS=amd64 x86}; : ${DEFAULT_ABI=amd64} ;; mips64*) export CFLAGS_o32=${CFLAGS_o32--mabi=32}; export CHOST_o32=${CTARGET/mips64/mips}; export CTARGET_o32=${CHOST_o32}; export LIBDIR_o32="lib"; export CFLAGS_n32=${CFLAGS_n32--mabi=n32}; export CHOST_n32=${CTARGET}; export CTARGET_n32=${CHOST_n32}; export LIBDIR_n32="lib32"; export CFLAGS_n64=${CFLAGS_n64--mabi=64}; export CHOST_n64=${CTARGET}; export CTARGET_n64=${CHOST_n64}; export LIBDIR_n64="lib64"; : ${MULTILIB_ABIS=n64 n32 o32}; : ${DEFAULT_ABI=n32} ;; powerpc64*) export CFLAGS_ppc=${CFLAGS_ppc--m32}; export CHOST_ppc=${CTARGET/powerpc64/powerpc}; export CTARGET_ppc=${CHOST_ppc}; export LIBDIR_ppc="lib"; export CFLAGS_ppc64=${CFLAGS_ppc64--m64}; export CHOST_ppc64=${CTARGET}; export CTARGET_ppc64=${CHOST_ppc64}; export LIBDIR_ppc64="lib64"; : ${MULTILIB_ABIS=ppc64 ppc}; : ${DEFAULT_ABI=ppc64} ;; s390x*) export CFLAGS_s390=${CFLAGS_s390--m31}; export CHOST_s390=${CTARGET/s390x/s390}; export CTARGET_s390=${CHOST_s390}; export LIBDIR_s390="lib"; export CFLAGS_s390x=${CFLAGS_s390x--m64}; export CHOST_s390x=${CTARGET}; export CTARGET_s390x=${CHOST_s390x}; export LIBDIR_s390x="lib64"; : ${MULTILIB_ABIS=s390x s390}; : ${DEFAULT_ABI=s390x} ;; sparc*) export CFLAGS_sparc32=${CFLAGS_sparc32}; export CHOST_sparc32=${CTARGET/sparc64/sparc}; export CTARGET_sparc32=${CHOST_sparc32}; export LIBDIR_sparc32="lib"; export CFLAGS_sparc64=${CFLAGS_sparc64--m64}; export CHOST_sparc64=${CTARGET}; export CTARGET_sparc64=${CHOST_sparc64}; export LIBDIR_sparc64="lib64"; : ${MULTILIB_ABIS=sparc64 sparc32}; : ${DEFAULT_ABI=sparc64} ;; *) : ${MULTILIB_ABIS=default}; : ${DEFAULT_ABI=default} ;; esac; export MULTILIB_ABIS DEFAULT_ABI } multilib_toolchain_setup () { local v vv; export ABI=$1; if [[ ${__DEFAULT_ABI_SAVED} == "true" ]]; then for v in CHOST CBUILD AS CC CXX LD; do vv="__abi_saved_${v}"; export ${v}="${!vv}"; unset ${vv}; done; unset __DEFAULT_ABI_SAVED; fi; if [[ ${ABI} != ${DEFAULT_ABI} ]]; then for v in CHOST CBUILD AS CC CXX LD; do export __abi_saved_${v}="${!v}"; done; export __DEFAULT_ABI_SAVED="true"; export CHOST=$(get_abi_CHOST ${DEFAULT_ABI}); export CC="$(tc-getCC) $(get_abi_CFLAGS)"; export CXX="$(tc-getCXX) $(get_abi_CFLAGS)"; export LD="$(tc-getLD) $(get_abi_LDFLAGS)"; export CHOST=$(get_abi_CHOST $1); export CBUILD=$(get_abi_CHOST $1); fi } newicon () { ( insinto /usr/share/pixmaps; newins "$@" ) } newmenu () { ( insinto /usr/share/applications; newins "$@" ) } no-as-needed () { case $($(tc-getLD) -v 2>&1 [more libraries to preserve]"; has preserve-libs ${FEATURES} && return 0; local lib dir; for lib in "$@"; do [[ -e ${ROOT}/${lib} ]] || continue; dir=${lib%/*}; dodir ${dir} || die "dodir ${dir} failed"; cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed"; touch "${D}"/${lib}; done } preserve_old_lib_notify () { if [[ ${EBUILD_PHASE} != "postinst" ]]; then eerror "preserve_old_lib_notify() must be called from pkg_postinst() only"; die "Invalid preserve_old_lib_notify() usage"; fi; has preserve-libs ${FEATURES} && return 0; local lib notice=0; for lib in "$@"; do [[ -e ${ROOT}/${lib} ]] || continue; if [[ ${notice} -eq 0 ]]; then notice=1; ewarn "Old versions of installed libraries were detected on your system."; ewarn "In order to avoid breaking packages that depend on these old libs,"; ewarn "the libraries are not being removed. You need to run revdep-rebuild"; ewarn "in order to remove these old dependencies. If you do not have this"; ewarn "helper program, simply emerge the 'gentoolkit' package."; ewarn; fi; [[ ${PN} == "mpfr" ]] && lib=${lib##*/}; ewarn " # revdep-rebuild --library '${lib}'"; done; if [[ ${notice} -eq 1 ]]; then ewarn; ewarn "Once you've finished running revdep-rebuild, it should be safe to"; ewarn "delete the old libraries. Here is a copy & paste for the lazy:"; for lib in "$@"; do ewarn " # rm '${lib}'"; done; fi } raw-ldflags () { local x input="$@"; [[ -z ${input} ]] && input=${LDFLAGS}; set --; for x in ${input}; do x=${x#-Wl,}; set -- "$@" ${x//,/ }; done; echo "$@" } replace-cpu-flags () { local newcpu="$#"; newcpu="${!newcpu}"; while [ $# -gt 1 ]; do replace-flags "-march=${1}" "-march=${newcpu}"; replace-flags "-mcpu=${1}" "-mcpu=${newcpu}"; replace-flags "-mtune=${1}" "-mtune=${newcpu}"; shift; done; return 0 } replace-flags () { [[ $# != 2 ]] && echo && eerror "Usage: replace-flags " && die "replace-flags takes 2 arguments, not $#"; local f fset; declare -a new_CFLAGS new_CXXFLAGS new_FFLAGS new_FCFLAGS; for fset in CFLAGS CXXFLAGS FFLAGS FCFLAGS; do for f in ${!fset}; do [[ ${f} == ${1} ]] && f=${2}; eval new_${fset}\[\${\#new_${fset}\[@]}]=\${f}; done; eval export ${fset}=\${new_${fset}\[*]}; done; return 0 } replace-sparc64-flags () { local SPARC64_CPUS="ultrasparc3 ultrasparc v9"; if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; export CFLAGS CXXFLAGS } replace_all_version_separators () { local c=($(get_all_version_components "${2:-${PV}}")); c=${c[@]//[-._]/$1}; echo ${c// } } replace_version_separator () { eshopts_push -s extglob; local w c v="${3:-${PV}}"; declare -i i found=0; w=${1:-1}; c=($(get_all_version_components ${v})); if [[ ${w} != *[[:digit:]]* ]]; then for ((i = 0; i < ${#c[@]}; i++)) do if [[ ${c[i]} == ${w} ]]; then c[i]=${2}; break; fi; done; else for ((i = 0; i < ${#c[@]}; i++)) do if [[ -n "${c[i]//[^-._]}" ]]; then found+=1; if ((found == w)); then c[i]=${2}; break; fi; fi; done; fi; c=${c[*]}; echo ${c// }; eshopts_pop } save_library_dependencies () { local depsfile="${T}/${PN}"; ebegin "Saving library dependencies in ${depsfile##*/}"; echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || die "Failed to save the library dependencies."; eend $? } seq () { local p=$(type -P seq); if [[ -n ${p} ]]; then "${p}" "$@"; return $?; fi; case $# in 1) min=1 max=$1 step=1 ;; 2) min=$1 max=$2 step=1 ;; 3) min=$1 max=$3 step=$2 ;; *) die "seq called with wrong number of arguments" ;; esac; p=$(type -P jot); if [[ -n ${p} ]]; then local reps; if [[ ${step} != 0 ]]; then reps=$(( (max - min) / step + 1 )); else reps=0; fi; jot $reps $min $max $step; return $?; fi; while :; do [[ $max < $min && $step > 0 ]] && break; [[ $min < $max && $step < 0 ]] && break; echo $min; : $(( min += step )); done; return 0 } setup-allowed-flags () { if [[ -z ${ALLOWED_FLAGS} ]]; then export ALLOWED_FLAGS="-pipe"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -O -O0 -O1 -O2 -mcpu -march -mtune"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fstack-protector -fstack-protector-all"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fbounds-checking -fno-strict-overflow"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-PIE -fno-pie -fno-unit-at-a-time"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident -fpermissive"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w"; fi; ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer"; ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow -mno-popcnt -mno-abm -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mfloat-gprs -mspe -mno-spe -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mx32 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt -m*-toc -D* -U*"; ALLOWED_FLAGS="${ALLOWED_FLAGS} -mno-fma4 -mno-movbe -mno-xop -mno-lwp"; ALLOWED_FLAGS="${ALLOWED_FLAGS} -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm"; export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks"; return 0 } src_compile () { kde4-meta_src_compile "$@" } src_configure () { kde4-meta_src_configure "$@" } src_install () { kde4-meta_src_install "$@" } src_prepare () { kde4-meta_src_prepare "$@" } src_test () { kde4-meta_src_test "$@" } src_unpack () { kde4-meta_src_unpack "$@" } strip-flags () { local x y flag NEW_CFLAGS NEW_CXXFLAGS NEW_FFLAGS NEW_FCFLAGS; setup-allowed-flags; local NEW_CFLAGS=""; local NEW_CXXFLAGS=""; local NEW_FFLAGS=""; local NEW_FCFLAGS=""; if has "~$(tc-arch)" ${ACCEPT_KEYWORDS}; then ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}"; fi; set -f; for x in ${CFLAGS}; do for y in ${ALLOWED_FLAGS}; do flag=${x%%=*}; if [ "${flag%%${y}}" = "" ]; then NEW_CFLAGS="${NEW_CFLAGS} ${x}"; break; fi; done; done; for x in ${CXXFLAGS}; do for y in ${ALLOWED_FLAGS}; do flag=${x%%=*}; if [ "${flag%%${y}}" = "" ]; then NEW_CXXFLAGS="${NEW_CXXFLAGS} ${x}"; break; fi; done; done; for x in ${FFLAGS}; do for y in ${ALLOWED_FLAGS}; do flag=${x%%=*}; if [ "${flag%%${y}}" = "" ]; then NEW_FFLAGS="${NEW_FFLAGS} ${x}"; break; fi; done; done; for x in ${FCFLAGS}; do for y in ${ALLOWED_FLAGS}; do flag=${x%%=*}; if [ "${flag%%${y}}" = "" ]; then NEW_FCFLAGS="${NEW_FCFLAGS} ${x}"; break; fi; done; done; if [ "${CFLAGS/-O}" != "${CFLAGS}" -a "${NEW_CFLAGS/-O}" = "${NEW_CFLAGS}" ]; then NEW_CFLAGS="${NEW_CFLAGS} -O2"; fi; if [ "${CXXFLAGS/-O}" != "${CXXFLAGS}" -a "${NEW_CXXFLAGS/-O}" = "${NEW_CXXFLAGS}" ]; then NEW_CXXFLAGS="${NEW_CXXFLAGS} -O2"; fi; if [ "${FFLAGS/-O}" != "${FFLAGS}" -a "${NEW_FFLAGS/-O}" = "${NEW_FFLAGS}" ]; then NEW_FFLAGS="${NEW_FFLAGS} -O2"; fi; if [ "${FCFLAGS/-O}" != "${FCFLAGS}" -a "${NEW_FCFLAGS/-O}" = "${NEW_FCFLAGS}" ]; then NEW_FCFLAGS="${NEW_FCFLAGS} -O2"; fi; set +f; export CFLAGS="${NEW_CFLAGS}"; export CXXFLAGS="${NEW_CXXFLAGS}"; export FFLAGS="${NEW_FFLAGS}"; export FCFLAGS="${NEW_FCFLAGS}"; return 0 } strip-linguas () { local ls newls nols; if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then local op=$1; shift; ls=$(find "$1" -name '*.po' -exec basename {} .po ';'); shift; local d f; for d in "$@"; do if [[ ${op} == "-u" ]]; then newls=${ls}; else newls=""; fi; for f in $(find "$d" -name '*.po' -exec basename {} .po ';'); do if [[ ${op} == "-i" ]]; then has ${f} ${ls} && newls="${newls} ${f}"; else has ${f} ${ls} || newls="${newls} ${f}"; fi; done; ls=${newls}; done; else ls="$@"; fi; nols=""; newls=""; for f in ${LINGUAS}; do if has ${f} ${ls}; then newls="${newls} ${f}"; else nols="${nols} ${f}"; fi; done; [[ -n ${nols} ]] && ewarn "Sorry, but ${PN} does not support the LINGUAS:" ${nols}; export LINGUAS=${newls:1} } strip-unsupported-flags () { export CFLAGS=$(test-flags-CC ${CFLAGS}); export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}); export FFLAGS=$(test-flags-F77 ${FFLAGS}); export FCFLAGS=$(test-flags-FC ${FCFLAGS}) } tc-arch () { tc-ninja_magic_to_arch portage "$@" } tc-arch-kernel () { tc-ninja_magic_to_arch kern "$@" } tc-endian () { local host=$1; [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; host=${host%%-*}; case ${host} in alpha*) echo big ;; arm*b*) echo big ;; arm*) echo little ;; cris*) echo little ;; hppa*) echo big ;; i?86*) echo little ;; ia64*) echo little ;; m68*) echo big ;; mips*l*) echo little ;; mips*) echo big ;; powerpc*) echo big ;; s390*) echo big ;; sh*b*) echo big ;; sh*) echo little ;; sparc*) echo big ;; x86_64*) echo little ;; *) echo wtf ;; esac } tc-env_build () { CFLAGS=${BUILD_CFLAGS:--O1 -pipe} CXXFLAGS=${BUILD_CXXFLAGS:--O1 -pipe} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@" } tc-export () { local var; for var in "$@"; do [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'"; eval tc-get${var} > /dev/null; done } tc-getAR () { tc-getPROG AR ar "$@" } tc-getAS () { tc-getPROG AS as "$@" } tc-getBUILD_AR () { tc-getBUILD_PROG AR ar "$@" } tc-getBUILD_AS () { tc-getBUILD_PROG AS as "$@" } tc-getBUILD_CC () { tc-getBUILD_PROG CC gcc "$@" } tc-getBUILD_CPP () { tc-getBUILD_PROG CPP cpp "$@" } tc-getBUILD_CXX () { tc-getBUILD_PROG CXX g++ "$@" } tc-getBUILD_LD () { tc-getBUILD_PROG LD ld "$@" } tc-getBUILD_NM () { tc-getBUILD_PROG NM nm "$@" } tc-getBUILD_OBJCOPY () { tc-getBUILD_PROG OBJCOPY objcopy "$@" } tc-getBUILD_PKG_CONFIG () { tc-getBUILD_PROG PKG_CONFIG pkg-config "$@" } tc-getBUILD_PROG () { _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}" } tc-getBUILD_RANLIB () { tc-getBUILD_PROG RANLIB ranlib "$@" } tc-getBUILD_STRIP () { tc-getBUILD_PROG STRIP strip "$@" } tc-getCC () { tc-getPROG CC gcc "$@" } tc-getCPP () { tc-getPROG CPP cpp "$@" } tc-getCXX () { tc-getPROG CXX g++ "$@" } tc-getDLLWRAP () { tc-getPROG DLLWRAP dllwrap "$@" } tc-getF77 () { tc-getPROG F77 gfortran "$@" } tc-getFC () { tc-getPROG FC gfortran "$@" } tc-getGCJ () { tc-getPROG GCJ gcj "$@" } tc-getLD () { tc-getPROG LD ld "$@" } tc-getNM () { tc-getPROG NM nm "$@" } tc-getOBJCOPY () { tc-getPROG OBJCOPY objcopy "$@" } tc-getPKG_CONFIG () { tc-getPROG PKG_CONFIG pkg-config "$@" } tc-getPROG () { _tc-getPROG CHOST "$@" } tc-getRANLIB () { tc-getPROG RANLIB ranlib "$@" } tc-getRC () { tc-getPROG RC windres "$@" } tc-getSTRIP () { tc-getPROG STRIP strip "$@" } tc-has-openmp () { local base="${T}/test-tc-openmp"; cat > "${base}.c" <<-EOF #include int main() { int nthreads, tid, ret = 0; #pragma omp parallel private(nthreads, tid) { tid = omp_get_thread_num(); nthreads = omp_get_num_threads(); ret += tid + nthreads; } return ret; } EOF $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &>/dev/null; local ret=$?; rm -f "${base}"*; return ${ret} } tc-has-tls () { local base="${T}/test-tc-tls"; cat > "${base}.c" <<-EOF int foo(int *i) { static __thread int j = 0; return *i ? j : *i; } EOF local flags; case $1 in -s) flags="-S" ;; -c) flags="-c" ;; -l) ;; -*) die "Usage: tc-has-tls [-c|-l] [toolchain prefix]" ;; esac; : ${flags:=-fPIC -shared -Wl,-z,defs}; [[ $1 == -* ]] && shift; $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &>/dev/null; local ret=$?; rm -f "${base}"*; return ${ret} } tc-is-cross-compiler () { return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]]) } tc-is-hardfloat () { [[ ${CTARGET//_/-} == *-hardfloat-* ]] && echo "yes" || echo "no" } tc-is-softfloat () { case ${CTARGET} in bfin* | h8300*) echo "only" ;; *) [[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no" ;; esac } tc-is-static-only () { local host=${CTARGET:-${CHOST}}; return $([[ ${host} == *-mint* ]]) } tc-ninja_magic_to_arch () { function ninj () { [[ ${type} == "kern" ]] && echo $1 || echo $2 }; local type=$1; local host=$2; [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; case ${host} in alpha*) echo alpha ;; arm*) echo arm ;; avr*) ninj avr32 avr ;; bfin*) ninj blackfin bfin ;; cris*) echo cris ;; hppa*) ninj parisc hppa ;; i?86*) if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then echo i386; else echo x86; fi ;; ia64*) echo ia64 ;; m68*) echo m68k ;; mips*) echo mips ;; nios2*) echo nios2 ;; nios*) echo nios ;; powerpc*) if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then echo powerpc; else if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]]; then if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then echo powerpc; else echo ppc; fi; else if [[ ${host} == powerpc64* ]]; then echo ppc64; else if [[ ${PROFILE_ARCH} == "ppc64" ]]; then ninj ppc64 ppc; else echo ppc; fi; fi; fi; fi ;; s390*) echo s390 ;; sh64*) ninj sh64 sh ;; sh*) echo sh ;; sparc64*) ninj sparc64 sparc ;; sparc*) [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc ;; vax*) echo vax ;; x86_64*freebsd*) echo amd64 ;; x86_64*) if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then echo x86; else ninj x86_64 amd64; fi ;; *) echo unknown ;; esac } test-flag-CC () { test-flag-PROG "CC" "$1" } test-flag-CXX () { test-flag-PROG "CXX" "$1" } test-flag-F77 () { test-flag-PROG "F77" "$1" } test-flag-FC () { test-flag-PROG "FC" "$1" } test-flag-PROG () { local comp=$1; local flags="$2"; [[ -z ${comp} || -z ${flags} ]] && return 1; local PROG=$(tc-get${comp}); ${PROG} ${flags} -c -o /dev/null -xc /dev/null > /dev/null 2>&1 } test-flags () { test-flags-CC "$@" } test-flags-CC () { test-flags-PROG "CC" "$@" } test-flags-CXX () { test-flags-PROG "CXX" "$@" } test-flags-F77 () { test-flags-PROG "F77" "$@" } test-flags-FC () { test-flags-PROG "FC" "$@" } test-flags-PROG () { local comp=$1; local flags; local x; shift; [[ -z ${comp} ]] && return 1; for x in "$@"; do test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}"; done; echo "${flags}"; [[ -n ${flags} ]] } test_flag () { die "$0: deprecated, please use test-flags()!" } test_version_info () { if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then return 0; else return 1; fi } treecopy () { dest=${!#}; files_count=$#; while (( $# > 1 )); do dirstruct=$(dirname "$1"); mkdir -p "${dest}/${dirstruct}"; cp -pPR "$1" "${dest}/${dirstruct}"; shift; done } unpack_makeself () { local src_input=${1:-${A}}; local src=$(find_unpackable_file "${src_input}"); local skip=$2; local exe=$3; [[ -z ${src} ]] && die "Could not locate source for '${src_input}'"; local shrtsrc=$(basename "${src}"); echo ">>> Unpacking ${shrtsrc} to ${PWD}"; if [[ -z ${skip} ]]; then local ver=$(grep -m1 -a '#.*Makeself' "${src}" | awk '{print $NF}'); local skip=0; exe=tail; case ${ver} in 1.5.* | 1.6.0-nv) skip=$(grep -a ^skip= "${src}" | cut -d= -f2) ;; 2.0 | 2.0.1) skip=$(grep -a ^' 'tail "${src}" | awk '{print $2}' | cut -b2-) ;; 2.1.1) skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-); (( skip++ )) ;; 2.1.2) skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1); (( skip++ )) ;; 2.1.3) skip=`grep -a ^offset= "${src}" | awk '{print $3}'`; (( skip++ )) ;; 2.1.4 | 2.1.5) skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1); skip=$(head -n ${skip} "${src}" | wc -c); exe="dd" ;; *) eerror "I'm sorry, but I was unable to support the Makeself file."; eerror "The version I detected was '${ver}'."; eerror "Please file a bug about the file ${shrtsrc} at"; eerror "http://bugs.gentoo.org/ so that support can be added."; die "makeself version '${ver}' not supported" ;; esac; debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"; fi; case ${exe} in tail) exe="tail -n +${skip} '${src}'" ;; dd) exe="dd ibs=${skip} skip=1 if='${src}'" ;; *) die "makeself cant handle exe '${exe}'" ;; esac; local filetype tmpfile=$(emktemp); eval ${exe} 2> /dev/null | head -c 512 > "${tmpfile}"; filetype=$(file -b "${tmpfile}") || die; case ${filetype} in *tar\ archive*) eval ${exe} | tar --no-same-owner -xf - ;; bzip2*) eval ${exe} | bzip2 -dc | tar --no-same-owner -xf - ;; gzip*) eval ${exe} | tar --no-same-owner -xzf - ;; compress*) eval ${exe} | gunzip | tar --no-same-owner -xf - ;; *) eerror "Unknown filetype \"${filetype}\" ?"; false ;; esac; assert "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})" } unpack_pdv () { local src=$(find_unpackable_file "$1"); local sizeoff_t=$2; [[ -z ${src} ]] && die "Could not locate source for '$1'"; [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("; local shrtsrc=$(basename "${src}"); echo ">>> Unpacking ${shrtsrc} to ${PWD}"; local metaskip=$(tail -c ${sizeoff_t} "${src}" | hexdump -e \"%i\"); local tailskip=$(tail -c $((${sizeoff_t}*2)) "${src}" | head -c ${sizeoff_t} | hexdump -e \"%i\"); local metafile=$(emktemp); tail -c +$((${metaskip}+1)) "${src}" > "${metafile}"; local datafile=$(tail -c +$((${metaskip}+1)) "${src}" | strings | head -n 1); datafile=$(basename "${datafile}"); local tmpfile=$(emktemp); tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c 512 > ${tmpfile}; local iscompressed=$(file -b "${tmpfile}"); if [[ ${iscompressed:0:8} == "compress" ]]; then iscompressed=1; mv ${tmpfile}{,.Z}; gunzip ${tmpfile}; else iscompressed=0; fi; local istar=$(file -b "${tmpfile}"); if [[ ${istar:0:9} == "POSIX tar" ]]; then istar=1; else istar=0; fi; if [ ${iscompressed} -eq 1 ]; then if [ ${istar} -eq 1 ]; then tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar -xzf -; else tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | gzip -dc > ${datafile}; fi; else if [ ${istar} -eq 1 ]; then tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar --no-same-owner -xf -; else tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) > ${datafile}; fi; fi; true } use_if_iuse () { in_iuse $1 || return 1; use $1 } usex () { use "$1" && echo "${2-yes}$4" || echo "${3-no}$5" } validate_desktop_entries () { if [[ -x /usr/bin/desktop-file-validate ]]; then einfo "Checking desktop entry validity"; local directories=""; for d in /usr/share/applications $@; do [[ -d ${D}${d} ]] && directories="${directories} ${D}${d}"; done; if [[ -n ${directories} ]]; then for FILE in $(find ${directories} -name "*\.desktop" -not -path '*.hidden*' | sort -u 2>/dev/null); do local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | sed -e "s|error: ||" -e "s|${FILE}:|--|g" ); [[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:}; done; fi; echo ""; else einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo."; fi } version_compare () { eshopts_push -s extglob; local ver_a=${1} ver_b=${2} parts_a parts_b; local cur_tok_a cur_tok_b num_part_a num_part_b; local -i cur_idx_a=0 cur_idx_b=0 prev_idx_a prev_idx_b; parts_a=($(get_all_version_components "${ver_a}" )); parts_b=($(get_all_version_components "${ver_b}" )); local -i inf_loop=0; while true; do inf_loop+=1; ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]"; prev_idx_a=cur_idx_a; prev_idx_b=cur_idx_b; cur_tok_a=${parts_a[cur_idx_a]}; cur_tok_b=${parts_b[cur_idx_b]}; if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then cur_idx_a+=1; [[ ${parts_a[cur_idx_a]} == . ]] && cur_idx_a+=1; else cur_tok_a=; fi; if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then cur_idx_b+=1; [[ ${parts_b[cur_idx_b]} == . ]] && cur_idx_b+=1; else cur_tok_b=; fi; [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]] && break; [[ -z ${cur_tok_a} ]] && eshopts_pop && return 1; [[ -z ${cur_tok_b} ]] && eshopts_pop && return 3; if (( prev_idx_a != 0 && prev_idx_b != 0 )) && [[ ${cur_tok_a} == 0* || ${cur_tok_b} == 0* ]]; then cur_tok_a=${cur_tok_a%%+(0)}; cur_tok_b=${cur_tok_b%%+(0)}; [[ ${cur_tok_a} < ${cur_tok_b} ]] && eshopts_pop && return 1; [[ ${cur_tok_a} > ${cur_tok_b} ]] && eshopts_pop && return 3; else cur_tok_a=${cur_tok_a##+(0)}; cur_tok_b=${cur_tok_b##+(0)}; : ${cur_tok_a:=0}; : ${cur_tok_b:=0}; ((cur_tok_a < cur_tok_b)) && eshopts_pop && return 1; ((cur_tok_a > cur_tok_b)) && eshopts_pop && return 3; fi; done; local letter_a=; letter_a=${parts_a[cur_idx_a]}; if [[ ${#letter_a} -eq 1 && -z ${letter_a/[a-z]} ]]; then cur_idx_a+=1; else letter_a=@; fi; local letter_b=; letter_b=${parts_b[cur_idx_b]}; if [[ ${#letter_b} -eq 1 && -z ${letter_b/[a-z]} ]]; then cur_idx_b+=1; else letter_b=@; fi; [[ ${letter_a} < ${letter_b} ]] && eshopts_pop && return 1; [[ ${letter_a} > ${letter_b} ]] && eshopts_pop && return 3; inf_loop=0; while true; do inf_loop+=1; ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]"; [[ ${parts_a[cur_idx_a]} == _ ]] && ((cur_idx_a++)); [[ ${parts_b[cur_idx_b]} == _ ]] && ((cur_idx_b++)); cur_tok_a=${parts_a[cur_idx_a]}; cur_tok_b=${parts_b[cur_idx_b]}; num_part_a=0; num_part_b=0; if has ${cur_tok_a%%+([0-9])} "alpha" "beta" "pre" "rc" "p"; then cur_idx_a+=1; num_part_a=${cur_tok_a##+([a-z])}; num_part_a=${num_part_a##+(0)}; : ${num_part_a:=0}; cur_tok_a=${cur_tok_a%%+([0-9])}; else cur_tok_a=; fi; if has ${cur_tok_b%%+([0-9])} alpha beta pre rc p; then cur_idx_b+=1; num_part_b=${cur_tok_b##+([a-z])}; num_part_b=${num_part_b##+(0)}; : ${num_part_b:=0}; cur_tok_b=${cur_tok_b%%+([0-9])}; else cur_tok_b=; fi; if [[ ${cur_tok_a} != ${cur_tok_b} ]]; then local suffix; for suffix in alpha beta pre rc "" p; do [[ ${cur_tok_a} == ${suffix} ]] && eshopts_pop && return 1; [[ ${cur_tok_b} == ${suffix} ]] && eshopts_pop && return 3; done; else if [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]]; then break; else ((num_part_a < num_part_b)) && eshopts_pop && return 1; ((num_part_a > num_part_b)) && eshopts_pop && return 3; fi; fi; done; [[ ${parts_a[cur_idx_a]} == - ]] && ((cur_idx_a++)); [[ ${parts_b[cur_idx_b]} == - ]] && ((cur_idx_b++)); if [[ -n ${parts_a[cur_idx_a]/r+([0-9])} || -n ${parts_b[cur_idx_b]/r+([0-9])} ]]; then die "versionator compare bug [revisions, ${ver_a}, ${ver_b}]"; fi; num_part_a=${parts_a[cur_idx_a]#r}; num_part_a=${num_part_a##+(0)}; : ${num_part_a:=0}; num_part_b=${parts_b[cur_idx_b]#r}; num_part_b=${num_part_b##+(0)}; : ${num_part_b:=0}; ((num_part_a < num_part_b)) && eshopts_pop && return 1; ((num_part_a > num_part_b)) && eshopts_pop && return 3; eshopts_pop; return 2 } version_format_string () { local fstr=$1; shift; set -- $(get_version_components "$@"); eval echo "${fstr}" } version_is_at_least () { local want_s="$1" have_s="${2:-${PVR}}" r; version_compare "${want_s}" "${have_s}"; r=$?; case $r in 1 | 2) return 0 ;; 3) return 1 ;; *) die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]" ;; esac } version_sort () { eshopts_push -s extglob; local items=; local -i left=0; items=("$@"); while ((left < ${#items[@]})); do local -i lowest_idx=left; local -i idx=lowest_idx+1; while ((idx < ${#items[@]})); do version_compare "${items[lowest_idx]}" "${items[idx]}"; [[ $? -eq 3 ]] && lowest_idx=idx; idx+=1; done; local tmp=${items[lowest_idx]}; items[lowest_idx]=${items[left]}; items[left]=${tmp}; left+=1; done; echo ${items[@]}; eshopts_pop } virtualmake () { debug-print-function ${FUNCNAME} "$@"; local i=0; local retval=0; local OLD_SANDBOX_ON="${SANDBOX_ON}"; local XVFB=$(type -p Xvfb); local XHOST=$(type -p xhost); local xvfbargs="-screen 0 800x600x24"; if [[ -n ${maketype} ]]; then ewarn "QA: ebuild is exporting \$maketype=${maketype}"; ewarn "QA: Ebuild should be migrated to use VIRTUALX_COMMAND=${maketype} instead."; ewarn "QA: Setting VIRTUALX_COMMAND to \$maketype conveniently for now."; VIRTUALX_COMMAND=${maketype}; fi; if [[ -n ${XVFB} && -n ${XHOST} ]] && ( [[ -z ${DISPLAY} ]] || ! ( ${XHOST} &>/dev/null ) ); then debug-print "${FUNCNAME}: running Xvfb hack"; export XAUTHORITY=; einfo "Scanning for an open DISPLAY to start Xvfb ..."; XDISPLAY=$(i=0; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i}); debug-print "${FUNCNAME}: XDISPLAY=${XDISPLAY}"; export SANDBOX_ON="0"; debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}"; ${XVFB} :${XDISPLAY} ${xvfbargs} &>/dev/null & sleep 2; local start=${XDISPLAY}; while [[ ! -f /tmp/.X${XDISPLAY}-lock ]]; do if ((XDISPLAY - start > 15)); then eerror "'${XVFB} :${XDISPLAY} ${xvfbargs}' returns:"; echo; ${XVFB} :${XDISPLAY} ${xvfbargs}; echo; eerror "If possible, correct the above error and try your emerge again."; die "Unable to start Xvfb"; fi; ((XDISPLAY++)); debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}"; ${XVFB} :${XDISPLAY} ${xvfbargs} &>/dev/null & sleep 2; done; export SANDBOX_ON="${OLD_SANDBOX_ON}"; einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ..."; export DISPLAY=:${XDISPLAY}; debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\""; ${VIRTUALX_COMMAND} "$@"; retval=$?; kill $(cat /tmp/.X${XDISPLAY}-lock); else debug-print "${FUNCNAME}: attaching to running X display"; debug-print "${FUNCNAME}: ${VIRTUALX_COMMAND} \"$@\""; ${VIRTUALX_COMMAND} "$@"; retval=$?; fi; [[ ${retval} -ne 0 ]] && die "${FUNCNAME}: the ${VIRTUALX_COMMAND} failed."; return 0 }