-
Bug
-
Resolution: Fixed
-
Normal
-
None
-
None
-
None
-
declare -x ABI="amd64"
declare -x ABI_X86="32 64"
declare -x ADD="attr bash-completion c++11 cairo consolekit dbus dhclient ffmpeg gallium glamor gnutls gtk3 id3tag jack jpeg2k ladspa libav lv2 networkmanager packagekit policykit pulseaudio ruby symlink theora udev unicode v4l vaapi vdpau vim-syntax vorbis webkit-gtk xattr xinerama"
declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel ice1724 intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci"
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 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"
declarex ASFLAGS_x86="-32"
declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_3 python_targets_python2_7 hardened pax_kernel pic xtpax -jit -orc"
declare – BUILD_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkit-gtk-2.6.6_build"
declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author"
declare -x CAMERAS="ptp2"
declare -x CBUILD="x86_64-pc-linux-gnu"
declare -x CC="x86_64-pc-linux-gnu-gcc"
declare -x CDEFINE_amd64="_x86_64_"
declare -x CDEFINE_x86="_i386_"
declare -x CFLAGS="-march=amdfam10 -O2 -pipe"
declare -x CFLAGS_default
declare -x CFLAGS_x86="-m32"
declare – CHECKREQS_DISK_BUILD="18G"
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_x86="i686-pc-linux-gnu"
declare – CMAKE_BINARY="cmake"
declare – CMAKE_BUILD_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkit-gtk-2.6.6_build"
declare – CMAKE_BUILD_TYPE="Gentoo"
declare – CMAKE_EXPF="src_prepare src_configure src_compile src_test src_install"
declare – CMAKE_MAKEFILE_GENERATOR="emake"
declare – CMAKE_MIN_VERSION="2.8.12"
declare – CMAKE_REMOVE_MODULES="yes"
declare – CMAKE_REMOVE_MODULES_LIST="FindBLAS FindLAPACK"
declare – CMAKE_USE_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkitgtk-2.6.6"
declare – CMAKE_VERBOSE="ON"
declare – CMAKE_WARN_UNUSED_CLI="no"
declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
declare -x CPPFLAGS=" -DENABLE_JIT=0 -DENABLE_YARR_JIT=0 -DENABLE_ASSEMBLER=0"
declare -x CPU_FLAGS_X86="3dnow 3dnowext mmx mmxext popcnt sse sse2 sse3 sse4a"
declare -x CTARGET_default="x86_64-pc-linux-gnu"
declare -x CXXFLAGS="-march=amdfam10 -O2 -pipe"
declare -x DEFAULT_ABI="amd64"
declare -x DEFINED_PHASES=" compile configure install postinst postrm preinst prepare pretend setup test unpack"
declare DEPEND="
dev-db/sqlite:3=
>=dev-libs/glib-2.36:2
>=dev-libs/icu-3.8.1-r1:=
>=dev-libs/libxml2-2.8:2
>=dev-libs/libxslt-1.1.7
>=media-libs/fontconfig-2.8:1.0
>=media-libs/freetype-2.4.2:2
>=media-libs/harfbuzz-0.9.18:=[icu(+)]
>=media-libs/libpng-1.4:0=
media-libs/libwebp:=
>=net-libs/libsoup-2.42:2.4[introspection?]
virtual/jpeg:0=
>=x11-libs/cairo-1.10.2:=[X]
>=x11-libs/gtk+-3.6.0:3[X,introspection?]
>=x11-libs/pango-1.30.0
x11-libs/libX11
x11-libs/libXrender
x11-libs/libXt>=x11-libs/gtk+-2.24.10:2
egl? ( media-libs/mesa[egl] )
geoloc? ( >=app-misc/geoclue-2.1.5:2.0 )
gstreamer? (
>=media-libs/gstreamer-1.2:1.0
>=media-libs/gst-plugins-base-1.2:1.0 )
introspection? ( >=dev-libs/gobject-introspection-1.32.0 )
libsecret? ( app-crypt/libsecret )
opengl? ( virtual/opengl )
spell? ( >=app-text/enchant-0.22:= )
webgl? (
x11-libs/cairo[opengl]
x11-libs/libXcomposite
x11-libs/libXdamage )( >=dev-lang/python-2.7.5-r2:2.7 )
>=dev-lang/perl-5.10(
virtual/rubygems[ruby_targets_ruby20]
virtual/rubygems[ruby_targets_ruby21]
virtual/rubygems[ruby_targets_ruby22]
virtual/rubygems[ruby_targets_ruby19]
)
>=app-accessibility/at-spi2-core-2.5.3
>=dev-libs/atk-2.8.0
>=dev-util/gtk-doc-am-1.10
>=dev-util/gperf-3.0.1
>=sys-devel/bison-2.4.3
>=sys-devel/flex-2.5.34( >=sys-devel/gcc-4.7 >=sys-devel/clang-3.3 )
sys-devel/gettext
virtual/pkgconfigdoc? ( >=dev-util/gtk-doc-1.10 )
geoloc? ( dev-util/gdbus-codegen )
introspection? ( jit? ( sys-apps/paxctl ) )
test? (
dev-lang/python:2.7
dev-python/pygobject:3[python_targets_python2_7]
x11-themes/hicolor-icon-theme
jit? ( sys-apps/paxctl ) )
sys-devel/make >=dev-util/cmake-2.8.12 userland_GNU? ( >=sys-apps/findutils-4.4.0 ) app-arch/xz-utils >=sys-apps/sed-4 test? (
!prefix? ( x11-base/xorg-server[xvfb] )
x11-apps/xhost
)"
declare DESCRIPTION="Open source web browser engine"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -x DISABLED=" "
declare -x EAPI="5"
declare -x ELIBC="glibc"
declare – ELTCONF=""
declare -x ENABLED=" /var/lib/layman/causelay /var/lib/layman/dstien-portage /var/lib/layman/gamerlay /var/lib/layman/vortex "
declare – EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch"
declare – EPATCH_EXCLUDE=""
declare – EPATCH_FORCE="no"
declare – EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..."
declare – EPATCH_OPTS=""
declare – EPATCH_SINGLE_MSG=""
declare – EPATCH_SOURCE="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/patch"
declare – EPATCH_SUFFIX="patch.bz2"
declare -x EPYTHON="python2.7"
declare -x EXEOPTIONS="-m0755"
declare -x FCFLAGS="-march=amdfam10 -O2 -pipe"
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} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
declare -x FFLAGS="-march=amdfam10 -O2 -pipe"
declare – G2CONF=""
declare -x GCC_SPECS=""
declare – GCONFTOOL_BIN="/usr/bin/gconftool-2"
declare – GCONF_DEBUG="no"
declare – GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas"
declare – GNOME2_LA_PUNT=""
declare – GNOME_ORG_MODULE="webkit-gtk"
declare – GNOME_ORG_PVP="2.6"
declare – GNOME_TARBALL_SUFFIX="xz"
declare -x GOPATH="/root/Projects/go"
declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx"
declare -x GRUB_PLATFORMS="efi-64 pc"
declare -x GSETTINGS_BACKEND="dconf"
declare -x GST_REGISTRY="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/registry.xml"
declare – GTK_UPDATE_ICON_CACHE="/usr/bin/gtk-update-icon-cache"
declare -x G_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp"
declare HDEPEND=""
declare -x HG="/usr/bin/hg"
declare -x HISTCONTROL="ignoreboth:erasedups"
declare HOMEPAGE="http://www.webkitgtk.org/"
declare -x INHERITED=" multilib toolchain-funcs eutils check-reqs flag-o-matic cmake-utils fdo-mime libtool versionator gnome.org gnome2-utils gnome2 pax-utils python-utils-r1 python-any-r1 virtualx"
declare -x INPUT_DEVICES="evdev synaptics"
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare IUSE="coverage doc +egl +geoloc +gstreamer +introspection +jit libsecret +opengl spell +webgl test"
declare -x IUSE_EFFECTIVE="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 coverage doc egl elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_glibc elibc_mintlib elibc_musl elibc_uclibc geoloc gstreamer hppa hppa-hpux ia64 ia64-hpux ia64-linux introspection jit kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux libsecret m68k m68k-mint mips nios2 opengl ppc ppc-aix ppc-macos ppc-openbsd ppc64 ppc64-linux prefix prefix-guest s390 sh sparc sparc-fbsd sparc-solaris sparc64-freebsd sparc64-solaris spell test userland_BSD userland_GNU webgl x64-cygwin x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
declare -x IUSE_IMPLICIT="prefix prefix-guest"
declare -x JAVAC="/etc/java-config-2/current-system-vm/bin/javac"
declare -x JAVA_HOME="/etc/java-config-2/current-system-vm"
declare -x JDK_HOME="/etc/java-config-2/current-system-vm"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="amd64"
declare -x KEYWORDS="*"
declare -x LADSPA_PATH="/usr/lib64/ladspa"
declare -x LANG="en_US.UTF-8"
declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
declare -x LC_COLLATE="POSIX"
declare -x LC_MESSAGES="C"
declarex LDFLAGS="-Wl,-O1 -Wl,sort-common -Wl,as-needed -Wl,no-keep-memory -Wl,-reduce-memory-overheads"
declare -x LDFLAGS_default
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_ppc="lib32"
declare -x LIBDIR_ppc64="lib64"
declare -x LIBDIR_sparc32="lib32"
declare -x LIBDIR_sparc64="lib64"
declare -x LIBDIR_x86="lib32"
declare -x LIBDIR_x86_fbsd="lib32"
declare -x LIBOPTIONS="-m0644"
declare -x LIBREOFFICE_EXTENSIONS="nlpsolver"
declare -x LICENSE="LGPL-2+ BSD"
declare -x LINGUAS="en es en_US es_MX es_LA"
declare -x MAKEOPTS="-j7 -l6"
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)"
declare – MY_P="webkitgtk-2.6.6"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OFFICE_IMPLEMENTATION="libreoffice"
declare -x OPENCL_PROFILE="mesa"
declare -x OPENGL_PROFILE="xorg-x11"
declare -x PATH="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/python2.7/bin:/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.9.2"
declare – PAX_MARKINGS="PT"
declare PDEPEND=""
declare -x PHP_TARGETS="php5-6"
declare -x PKG_CONFIG_PATH="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/python2.7/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/webkit-gtk-2.6.6/html")'
declare – PREFIX="/usr"
declare -x PRELINK_PATH_MASK="/usr/lib64/libfreebl3.so:/usr/lib64/libnssdbm3.so:/usr/lib64/libsoftokn3.so:/usr/lib32/libfreebl3.so:/usr/lib32/libnssdbm3.so:/usr/lib32/libsoftokn3.so"
declare -x PROFILE_IS_HARDENED="1"
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND"
declare -x PROPERTIES=""
declare -x PROVIDE=""
declare -x PYTHON="/usr/bin/python2.7"
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -x PYTHON_ABIS="2.7 3.3"
declare -a PYTHON_COMPAT='([0]="python2_7")'
declare – PYTHON_DEPS="|| ( >=dev-lang/python-2.7.5-r2:2.7 )"
declare -x PYTHON_SINGLE_TARGET="python2_7"
declare -x PYTHON_TARGETS="python2_7 python3_3"
declare -x QEMU_SOFTMMU_TARGETS="i386 x86_64"
declare -x QEMU_USER_TARGETS="i386 x86_64"
declare -x QT_GRAPHICSSYSTEM="opengl"
declare RDEPEND="
dev-db/sqlite:3=
>=dev-libs/glib-2.36:2
>=dev-libs/icu-3.8.1-r1:=
>=dev-libs/libxml2-2.8:2
>=dev-libs/libxslt-1.1.7
>=media-libs/fontconfig-2.8:1.0
>=media-libs/freetype-2.4.2:2
>=media-libs/harfbuzz-0.9.18:=[icu(+)]
>=media-libs/libpng-1.4:0=
media-libs/libwebp:=
>=net-libs/libsoup-2.42:2.4[introspection?]
virtual/jpeg:0=
>=x11-libs/cairo-1.10.2:=[X]
>=x11-libs/gtk+-3.6.0:3[X,introspection?]
>=x11-libs/pango-1.30.0
x11-libs/libX11
x11-libs/libXrender
x11-libs/libXt>=x11-libs/gtk+-2.24.10:2
egl? ( media-libs/mesa[egl] )
{print $2}
geoloc? ( >=app-misc/geoclue-2.1.5:2.0 )
gstreamer? (
>=media-libs/gstreamer-1.2:1.0
>=media-libs/gst-plugins-base-1.2:1.0 )
introspection? ( >=dev-libs/gobject-introspection-1.32.0 )
libsecret? ( app-crypt/libsecret )
opengl? ( virtual/opengl )
spell? ( >=app-text/enchant-0.22:= )
webgl? (
x11-libs/cairo[opengl]
x11-libs/libXcomposite
x11-libs/libXdamage )
"
declare -x REMOVE="-bluetooth -nss -dhcpcd"
declare REPOSITORY
declare REQUIRED_USE="
geoloc? ( introspection )
introspection? ( gstreamer )
webgl? ( opengl )
"
declare -x RESTRICT=""
declare -x RESUMECOMMAND_RSYNC="rsync -avP \"\${URI}\" \"\${DISTDIR}/\${FILE}\""
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} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
declare -x RUBY_TARGETS="ruby19 ruby20 ruby21 ruby22"
declare -x S="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkitgtk-2.6.6"
declare -x SANDBOX_DEBUG="0"
declare -x SANDBOX_DENY=""
declare -x SANDBOX_PID="13673"
declare -x SANDBOX_PREDICT="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/homedir:/dev/crypto:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig"
declare -x SANDBOX_READ="/:/var/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/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/net-libs/webkit-gtk-2.6.6/homedir/.bash_history"
declare – SCROLLKEEPER_DIR="/var/lib/scrollkeeper"
declare – SCROLLKEEPER_UPDATE_BIN="/usr/bin/scrollkeeper-update"
declare -x SHELL="/bin/bash"
declare -x SLOT="4/37"
declare SRC_URI="http://www.webkitgtk.org/releases/webkitgtk-2.6.6.tar.xz"
declare -x STAGE1_USE="multilib nptl nptlonly unicode"
declare -x SYMLINK_LIB="yes"
declare -x SYNC_USER="root"
declare -x TENGINE_SHARED_MODULES_HTTP="access addition autoindex browser charset_filter empty_gif fastcgi flv footer_filter geoip image_filter limit_conn limit_req lua map memcached mp4 random_index referer reqstat rewrite scgi secure_link slice split_clients sub sysguard tfs trim_filter upstream_ip_hash upstream_least_conn upstream_session_sticky user_agent userid_filter uwsgi xslt"
declare -x TENGINE_STATIC_MODULES_HTTP="concat dav degradation geo gunzip gzip gzip_static perl proxy realip spdy ssi ssl stub_status upstream-rbtree upstream_check upstream_consistent_hash upstream_keepalive"
declare -x USE="amd64 egl elibc_glibc gstreamer introspection kernel_linux opengl userland_GNU webgl"
declare -x USERLAND="GNU"
declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
declare -x USE_EXPAND_UNPREFIXED="ARCH"
declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips nios2 ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-cygwin x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
declare -x USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX linux NetBSD OpenBSD SunOS Winnt"
declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
declare -x VIDEO_CARDS="radeon radeonsi"
declare – VIRTUALX_COMMAND="emake"
declare – VIRTUALX_DEPEND="
!prefix? ( x11-base/xorg-server[xvfb] )
x11-apps/xhost
"
declare – VIRTUALX_REQUIRED="test"
declare -x VISUAL="/usr/bin/vi"
declare – WANT_CMAKE="always"
declare -x XDG_CACHE_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/.cache"
declare -x XDG_CONFIG_DIRS="/etc/xdg"
declare -x XDG_CONFIG_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp"
declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share:/usr/share/mesa/xdg:/usr/share/gdm"
declare -x XDG_DATA_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/.local/share"
declare -x XDG_RUNTIME_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/run"
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 – _CMAKE_UTILS_ECLASS="1"
declare – _EUTILS_ECLASS="1"
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare – _FLAG_O_MATIC_ECLASS="1"
declare – _LIBTOOL_ECLASS="1"
declare – _LIBTOOL_ECLASSDIR_LOCAL="/usr/portage/eclass"
declare – _MULTILIB_ECLASS="1"
declare – _PAX_UTILS_ECLASS="1"
declare -a _PYTHON_ALL_IMPLS='([0]="jython2_5" [1]="jython2_7" [2]="pypy" [3]="pypy3" [4]="python3_3" [5]="python3_4" [6]="python2_7")'
declare – _PYTHON_ANY_R1="1"
declare – _PYTHON_UTILS_R1="1"
declare – _TOOLCHAIN_FUNCS_ECLASS="1"
declare – _VERSIONATOR_ECLASS="1"
declare – conf="webkit-gtk-2.6.6-r0"
declare – phase_func
ELT_libtool_version ()
{
( unset VERSION;
eval $(grep -e '^[[:space:]]*VERSION=' "$1");
echo "${VERSION:-0}" )
}
ELT_try_and_apply_patch ()
{
local ret=0;
local file=$1;
local patch=$2;
local src=$3;
local disp="${src} patch";
local log="${T}/elibtool.log";
if [[ -z ${_ELT_NOTED_TMP} ]]; then
_ELT_NOTED_TMP=true;
printf 'temp patch: %s\n' "${patch}" > "${log}";
fi;
printf '\nTrying %s\n' "${disp}" >> "${log}";
if [[ ! -e ${file} ]]; then
echo "File not found: ${file}" >> "${log}";
return 1;
fi;
local perms="$(find ${file} -maxdepth 0 -printf '%m')";
if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1; then
einfo " Applying ${disp} ...";
patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1;
ret=$?;
export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}";
else
ret=1;
fi;
chmod "${perms}" "${file}";
return "${ret}"
}
ELT_walk_patches ()
{
local patch tmp;
local ret=1;
local file=$1;
local patch_set=$2;
local patch_dir="$(elt_patch_dir)/${patch_set}";
local rem_int_dep=$3;
[[ -z ${patch_set} ]] && return 1;
[[ ! -d ${patch_dir} ]] && return 1;
local sed_args=(-e "s:@GENTOO_LIBDIR@:$(get_libdir):g");
if [[ -n ${rem_int_dep} ]]; then
sed_args+=(-e "s|@REM_INT_DEP@|${rem_int_dep}|g");
fi;
pushd "$(elt_patch_dir)" > /dev/null || die;
for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r);
do
tmp="${T}/libtool-elt.patch";
sed "${sed_args[@]}" "${patch}" > "${tmp}" || die;
if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}"; then
ret=0;
break;
fi;
done;
popd > /dev/null;
return ${ret}
}
PYTHON ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#.24.28PYTHON.29.2C_.24.7BEPYTHON.7D"
}
VER_major ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
echo "${VER%%[^[:digit:]]*}"
}
VER_micro ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
VER=${VER#..};
echo "${VER%%[^[:digit:]]*}"
}
VER_minor ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
VER=${VER#*.};
echo "${VER%%[^[:digit:]]*}"
}
VER_to_int ()
{
[[ -z $1 ]] && return 1;
local VER_MAJOR=$(VER_major "$1");
local VER_MINOR=$(VER_minor "$1");
local VER_MICRO=$(VER_micro "$1");
local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
if [[ ${VER_int} -ge 65536 ]]; then
echo "${VER_int}";
return 0;
fi;
echo 1;
return 1
}
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 "$@"
}
_check_build_dir ()
{
: ${CMAKE_USE_DIR:=${S}};
if [[ -n ${CMAKE_IN_SOURCE_BUILD} ]]; then
BUILD_DIR="${CMAKE_USE_DIR}";
else
if [[ ! -n ${BUILD_DIR} && -n ${CMAKE_BUILD_DIR} ]]; then
eqawarn "The CMAKE_BUILD_DIR variable has been renamed to BUILD_DIR.";
eqawarn "Please migrate the ebuild to use the new one.";
_RESPECT_CMAKE_BUILD_DIR=1;
fi;
if [[ -n ${_RESPECT_CMAKE_BUILD_DIR} ]]; then
BUILD_DIR=${CMAKE_BUILD_DIR:-${WORKDIR}/${P}_build};
else
: ${BUILD_DIR:=${WORKDIR}/${P}_build};
fi;
fi;
CMAKE_BUILD_DIR=${BUILD_DIR};
mkdir -p "${BUILD_DIR}";
echo ">>> Working in BUILD_DIR: \"$BUILD_DIR\""
}
_epatch_draw_line ()
{
[[ -z $1 ]] && set "$(printf "%65s" '')";
echo "${1//?/=}"
}
_eutils_eprefix_init ()
{
has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}}
}
_execute_optionally ()
{
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=$1 new=();
shift;
for f in ${!var};
do
for x in "$@";
do
[[ ${f} == ${x} ]] && continue 2;
done;
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 $NF}
}
_gcc-specs-directive_raw ()
{
local cc=$(tc-getCC);
local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading"');
{ pspec=""; spec=""; outside=1 }
${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN$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 }';
{ [[ -f $(_gcc-install-dir)/$1 ]] }
return 0
}
_gcc-specs-exists ()_gcc_fullversion ()
{ local ver="$1"; shift; set -- `$(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__"`; eval echo "$ver" }_generator_to_use ()
{
local generator_name;
case ${CMAKE_MAKEFILE_GENERATOR} in
ninja)
generator_name="Ninja"
;;
emake)
generator_name="Unix Makefiles"
;;
*)
eerror "Unknown value for \${CMAKE_MAKEFILE_GENERATOR}";
die "Value ${CMAKE_MAKEFILE_GENERATOR} is not supported"
;;
esac;
echo ${generator_name}
}
_iconins ()
{
( local funcname=$1;
shift;
local size dir;
local context=apps;
local theme=hicolor;
while [ $# -gt 0 ]; do
case $1 in
-s | --size)
if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then
size=${2%%x*};
else
size=${2};
fi;
case ${size} in
16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256 | 512)
size=${size}x${size}
;;
scalable);;
{png,svg}
*)
eerror "${size} is an unsupported icon size!";
exit 1
;;
esac;
shift 2
;;
-t | --theme)
theme=${2};
shift 2
;;
-c | --context)
context=${2};
shift 2
;;
*)
if [[ -z ${size} ]]; then
insinto /usr/share/pixmaps;
else
insinto /usr/share/icons/${theme}/${size}/${context};
fi;
if [[ ${funcname} == doicon ]]; then
if [[ -f $1 ]]; then
doins "${1}";
else
if [[ -d $1 ]]; then
shopt -s nullglob;
doins "${1}"/*.;
{s/^/#IGNORE /g}' {} + -exec sed -i -e '/^[[:space:]][sS][eE][tT][[:space:]]([[:space:]]CMAKE_COLOR_MAKEFILE.)/{s/^/#IGNORE /g}
shopt -u nullglob;
else
eerror "${1} is not a valid file/directory!";
exit 1;
fi;
fi;
else
break;
fi;
shift 1
;;
esac;
done;
if [[ ${funcname} == newicon ]]; then
newins "$@";
fi ) || die
}
_is_flagq ()
{
local x var;
eval var=\""\${$1[*]}"\";
for x in ${var};
do
[[ ${x} == $2 ]] && return 0;
done;
return 1
}
_modify-cmakelists ()
{
debug-print-function ${FUNCNAME} "$@";
grep -qs "<<< Gentoo configuration >>>" "${CMAKE_USE_DIR}"/CMakeLists.txt && return 0;
find "${CMAKE_USE_DIR}" -name CMakeLists.txt -exec sed -i -e '/^[[:space:]][sS][eE][tT][[:space:]]([[:space:]]CMAKE_BUILD_TYPE.)/' {} + -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 <<-EOFMESSAGE(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}
_ninjaopts_from_makeopts ()
{
if [[ ${NINJAOPTS+set} == set ]]; then
return 0;
fi;
local ninjaopts=();
set – ${MAKEOPTS};
while (( $# )); do
case $1 in
-j | -l | -k)
ninjaopts+=($1 $2);
shift 2
;;
-j* | -l* | -k*)
ninjaopts+=($1);
shift 1
;;
*)
shift
;;
esac;
done;
export NINJAOPTS="${ninjaopts[*]}"
}
_pax_list_files ()
{
local f cmd;
cmd=$1;
shift;
for f in "$@";
do
${cmd} " ${f}";
done
}
_python_EPYTHON_supported ()
{
debug-print-function ${FUNCNAME} "${@}";
local EPYTHON=${1};
local i=${EPYTHON/./_};
case "${i}" in
python* | jython* | pypy*);;
{,_OR,_OPT}
*)
ewarn "Invalid EPYTHON: ${EPYTHON}";
return 1
;;
esac;
if has "${i}" "${PYTHON_COMPAT[@]}"; then
if python_is_installed "${i}"; then
if declare -f python_check_deps > /dev/null; then
local PYTHON_USEDEP="python_targets_${i},python_single_target_${i}";
python_check_deps;
return ${?};
fi;
return 0;
fi;
else
if ! has "${i}" "${_PYTHON_ALL_IMPLS[@]}"; then
ewarn "Invalid EPYTHON: ${EPYTHON}";
fi;
fi;
return 1
}
_python_build_set_globals ()
{
local usestr i PYTHON_PKG_DEP;
[[ -n ${PYTHON_REQ_USE} ]] && usestr="[${PYTHON_REQ_USE}]";
for i in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${i}";
done;
PYTHON_DEPS=;
for i in "${_PYTHON_ALL_IMPLS[@]}";
do
has "${i}" "${PYTHON_COMPAT[@]}" || continue;
python_export "${i}" PYTHON_PKG_DEP;
PYTHON_DEPS="${PYTHON_PKG_DEP} ${PYTHON_DEPS}";
done;
PYTHON_DEPS="|| ( ${PYTHON_DEPS})"
}
_python_check_dead_variables ()
{
local v;
for v in PYTHON_DEPEND PYTHON_USE_WITH_PYTHON_ABIS;
{CPPFLAGS,CFLAGS,CXXFLAGS,LDFLAGS}
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Ebuild_head";
fi;
done;
for v in PYTHON_;
{SCRIPTS,EXECUTABLES}
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#PYTHON_CFLAGS";
fi;
done;
for v in PYTHON_TESTS_RESTRICTED_ABIS PYTHON_EXPORT_PHASE_FUNCTIONS PYTHON_VERSIONED_PYTHON_NONVERSIONED_EXECUTABLES;
{C,CPP,CXX,CCAS,F,FC,LD}
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite";
fi;
done;
for v in DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES DISTUTILS_SETUP_FILES DISTUTILS_GLOBAL_OPTIONS DISTUTILS_SRC_TEST PYTHON_MODNAME;
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#${v}";
fi;
done;
if [[ -n ${DISTUTILS_DISABLE_TEST_DEPENDENCY} ]]; then
die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#DISTUTILS_SRC_TEST";
fi;
for v in PYTHON_BDEPEND PYTHON_MULTIPLE_ABIS PYTHON_ABI_TYPE PYTHON_RESTRICTED_ABIS PYTHON_TESTS_FAILURES_TOLERANT_ABIS PYTHON_CFFI_MODULES_GENERATION_COMMANDS;
do
if [[ -n ${!v} ]]; then
die "${v} is invalid for python-r1 suite";
fi;
done
}
_python_impl_supported ()
{
debug-print-function ${FUNCNAME} "${@}";
[ ${#} -eq 1 ] || die "${FUNCNAME}: takes exactly 1 argument (impl).";
local impl=${1};
case "${impl}" in
python2_7 | python3_[34] | jython2_[57])
return 0
;;
pypy1_[89] | pypy2_0 | python2_[56] | python3_[12])
return 1
;;
pypy | pypy3)
if [[ ${EAPI:-0} == [01234] ]]; then
die "PyPy is supported in EAPI 5 and newer only.";
fi
;;
*)
die "Invalid implementation in PYTHON_COMPAT: ${impl}"
;;
esac
}
_python_ln_rel ()
{
debug-print-function ${FUNCNAME} "${@}";
local target=${1};
local symname=${2};
local tgpath=${target%/*}/;
local sympath=${symname%/*}/;
local rel_target=;
while [[ -n ${sympath} ]]; do
local tgseg= symseg=;
while [[ ! -n ${tgseg} && -n ${tgpath} ]]; do
tgseg=${tgpath%%/*};
tgpath=${tgpath#${tgseg}/};
done;
while [[ ! -n ${symseg} && -n ${sympath} ]]; do
symseg=${sympath%%/*};
sympath=${sympath#${symseg}/};
done;
if [[ ${tgseg} != ${symseg} ]]; then
rel_target=../${rel_target}${tgseg:+${tgseg}/};
fi;
done;
rel_target+=${tgpath}${target##*/};
debug-print "${FUNCNAME}: ${symname} -> ${target}";
debug-print "${FUNCNAME}: rel_target = ${rel_target}";
ln -fs "${rel_target}" "${symname}"
}
_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 <USE flag> [<flag name>]";
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 <USE flag> [<flag name>]";
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
}
all-flag-vars ()
{
echoFLAGS
{ [[ $# -eq 0 ]] && return 0; export CFLAGS+=" $*"; return 0 }
}
append-cflags ()append-cppflags ()
{ [[ $# -eq 0 ]] && return 0; export CPPFLAGS+=" $*"; return 0 }append-cxxflags ()
{ [[ $# -eq 0 ]] && return 0; export CXXFLAGS+=" $*"; return 0 }append-fflags ()
{ [[ $# -eq 0 ]] && return 0; export FFLAGS+=" $*"; export FCFLAGS+=" $*"; return 0 }append-flags ()
{ [[ $# -eq 0 ]] && return 0; case " $* " in *' '-[DIU]*) eqawarn 'please use append-cppflags for preprocessor flags' ;; *' '-L* | *' '-Wl,*) eqawarn 'please use append-ldflags for linker flags' ;; esac; append-cflags "$@"; append-cxxflags "$@"; append-fflags "$@"; return 0 }append-ldflags ()
{ [[ $# -ne 0 ]] && die "append-lfs-flags takes no arguments"; append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE }
{
[ $# -eq 0 ] && return 0;
local flag;
for flag in "$@";
do
[[ ${flag} == -l* ]] && eqawarn "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 ()append-libs ()
{
[ $# -eq 0 ] && return 0;
local flag;
for flag in "$@";
do
if [[ -z "${flag// }" ]]; then
eqawarn "Appending an empty argument to LIBS is invalid! Skipping.";
continue;
fi;
case $flag in
-[lL]*)
export LIBS="${LIBS} ${flag}"
;;
-*)
eqawarn "Appending non-library to LIBS (${flag}); Other linker flags should be passed via LDFLAGS";
export LIBS="${LIBS} ${flag}"
;;
*)
export LIBS="${LIBS} -l${flag}"
;;
esac;
done;
return 0
}
built_with_use ()
{
_eutils_eprefix_init;
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);;
{print $4}
*)
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=${EROOT}/var/db/pkg/${PKG}/USE;
local IUSEFILE=${EROOT}/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" ]]
}
check-reqs_disk ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -z ${2} ]] && die "Usage: ${FUNCNAME} [path] [size]";
local path=${1};
local size=${2};
local space_megs;
check-reqs_start_phase ${size} "disk space at \"${path}\"";
space_megs=$(df -Pm "${1}" 2>/dev/null | awk 'FNR == 2');
{ print $2 }
if [[ $? == 0 && -n ${space_megs} ]]; then
if [[ ${space_megs} -lt $(check-reqs_get_mebibytes ${size}) ]]; then
eend 1;
check-reqs_unsatisfied ${size} "disk space at \"${path}\"";
else
eend 0;
fi;
else
eend 1;
ewarn "Couldn't determine disk space, skipping...";
fi
}
check-reqs_get_mebibytes ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]";
local unit=${1-1)};
local size=${1%[GMT]};
case ${unit} in
G)
echo $((1024 * size))
;;
[M0-9])
echo ${size}
;;
T)
echo $((1024 * 1024 * size))
;;
*)
die "${FUNCNAME}: Unknown unit: ${unit}"
;;
esac
}
check-reqs_get_number ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]";
local unit=${1-1)};
local size=${1%[GMT]};
if [[ ${size} == ${1} ]]; then
ewarn "QA: Package does not specify unit for the size check";
ewarn "QA: Assuming mebibytes.";
ewarn "QA: File bug against the package. It should specify the unit.";
fi;
echo ${size}
}
check-reqs_get_unit ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]";
local unit=${1-1)};
case ${unit} in
G)
echo "GiB"
;;
[M0-9])
echo "MiB"
;;
T)
echo "TiB"
;;
*)
die "${FUNCNAME}: Unknown unit: ${unit}"
;;
esac
}
check-reqs_memory ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size]";
local size=${1};
local actual_memory;
check-reqs_start_phase ${size} "RAM";
if [[ -r /proc/meminfo ]]; then
actual_memory=$(awk '/MemTotal/' /proc/meminfo);
{ die "you no longer need this as portage supports ACCEPT_LICENSE itself" }
else
actual_memory=$(sysctl hw.physmem 2>/dev/null );
[[ "$?" == "0" ]] && actual_memory=$(echo $actual_memory | sed -e 's/^[^:=]*[:=]//' );
fi;
if [[ -n ${actual_memory} ]]; then
if [[ ${actual_memory} -lt $((1024 * $(check-reqs_get_mebibytes ${size}))) ]]; then
eend 1;
check-reqs_unsatisfied ${size} "RAM";
else
eend 0;
fi;
else
eend 1;
ewarn "Couldn't determine amount of memory, skipping...";
fi
}
check-reqs_output ()
{
debug-print-function ${FUNCNAME} "$@";
local msg="ewarn";
[[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && msg="eerror";
if [[ -n ${CHECKREQS_FAILED} ]]; then
${msg};
${msg} "Space constrains set in the ebuild were not met!";
${msg} "The build will most probably fail, you should enhance the space";
${msg} "as per failed tests.";
${msg};
[[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && die "Build requirements not met!";
fi
}
check-reqs_pkg_pretend ()
{
debug-print-function ${FUNCNAME} "$@";
check-reqs_pkg_setup "$@"
}
check-reqs_pkg_setup ()
{
debug-print-function ${FUNCNAME} "$@";
check-reqs_prepare;
check-reqs_run;
check-reqs_output
}
check-reqs_prepare ()
{
debug-print-function ${FUNCNAME} "$@";
if [[ -z ${CHECKREQS_MEMORY} && -z ${CHECKREQS_DISK_BUILD} && -z ${CHECKREQS_DISK_USR} && -z ${CHECKREQS_DISK_VAR} ]]; then
eerror "Set some check-reqs eclass variables if you want to use it.";
eerror "If you are user and see this message file a bug against the package.";
die "${FUNCNAME}: check-reqs eclass called but not actualy used!";
fi
}
check-reqs_run ()
{
debug-print-function ${FUNCNAME} "$@";
unset CHECKREQS_FAILED;
if [[ ${MERGE_TYPE} != binary ]]; then
[[ -n ${CHECKREQS_MEMORY} ]] && check-reqs_memory ${CHECKREQS_MEMORY};
[[ -n ${CHECKREQS_DISK_BUILD} ]] && check-reqs_disk "${T}" "${CHECKREQS_DISK_BUILD}";
fi;
if [[ ${MERGE_TYPE} != buildonly ]]; then
[[ -n ${CHECKREQS_DISK_USR} ]] && check-reqs_disk "${EROOT}/usr" "${CHECKREQS_DISK_USR}";
[[ -n ${CHECKREQS_DISK_VAR} ]] && check-reqs_disk "${EROOT}/var" "${CHECKREQS_DISK_VAR}";
fi
}
check-reqs_start_phase ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -z ${2} ]] && die "Usage: ${FUNCNAME} [size] [location]";
local size=${1};
local location=${2};
local sizeunit="$(check-reqs_get_number ${size}) $(check-reqs_get_unit ${size})";
ebegin "Checking for at least ${sizeunit} ${location}"
}
check-reqs_unsatisfied ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -z ${2} ]] && die "Usage: ${FUNCNAME} [size] [location]";
local msg="ewarn";
local size=${1};
local location=${2};
local sizeunit="$(check-reqs_get_number ${size}) $(check-reqs_get_unit ${size})";
[[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && msg="eerror";
${msg} "There is NOT at least ${sizeunit} ${location}";
CHECKREQS_FAILED="true"
}
check_license ()check_reqs ()
{ _execute_optionally "src_compile" "$@" }
{
debug-print-function ${FUNCNAME} "$@";
echo;
ewarn "QA: Package calling old ${FUNCNAME} function.";
ewarn "QA: Please file a bug against the package.";
ewarn "QA: It should call check-reqs_pkg_pretend and check-reqs_pkg_setup";
ewarn "QA: and possibly use EAPI=4 or later.";
echo;
check-reqs_pkg_setup "$@"
}
cmake-utils_src_compile ()cmake-utils_src_configure ()
{ _execute_optionally "src_configure" "$@" }cmake-utils_src_install ()
{ _execute_optionally "src_install" "$@" }cmake-utils_src_make ()
{ _execute_optionally "src_prepare" "$@" }
{
debug-print-function ${FUNCNAME} "$@";
_check_build_dir;
pushd "${BUILD_DIR}" > /dev/null;
${CMAKE_MAKEFILE_GENERATOR}_src_make "$@";
popd > /dev/null
}
cmake-utils_src_prepare ()cmake-utils_src_test ()
{ _execute_optionally "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_find_package ()
{ _use_me_now_inverted CMAKE_DISABLE_FIND_PACKAGE_ "$@" }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_ "$@" }cmake-utils_useno ()
{ _use_me_now_inverted "" "$@" }comment_add_subdirectory ()
{ die "Use elibtoolize" }
{
if [[ -z ${1} ]]; then
die "comment_add_subdirectory must be passed the directory name to comment";
fi;
if [[ -e "CMakeLists.txt" ]]; then
sed -e "/add_subdirectory[[:space:]]([[:space:]]${1//\//
/}[[:space:]]*)/s/^/#DONOTCOMPILE /" -i CMakeLists.txt || die "failed to comment add_subdirectory(${1})";
fi
}
darwintoolize ()
delete_all_version_separators ()
{
replace_all_version_separators "" "${1}"
}
delete_version_separator ()
{
replace_version_separator "${1}" "" "${2}"
}
doicon ()
{
_iconins ${FUNCNAME} "$@"
}
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 ()
{
local CBUILD=${CBUILD:-${CHOST}};
tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
}
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 }
einstalldocs ()
{
debug-print-function ${FUNCNAME} "${@}";
local dodoc_opts=-r;
has ${EAPI} 0 1 2 3 && dodoc_opts=;
if ! declare -p DOCS &> /dev/null; then
local d;
for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
do
if [[ -s ${d} ]]; then
dodoc "${d}" || die;
fi;
done;
else
if [[ $(declare -p DOCS) == "declare -a"* ]]; then
if [[ -n ${DOCS[@]} ]]; then
dodoc ${dodoc_opts} "${DOCS[@]}" || die;
fi;
else
if [[ -n ${DOCS} ]]; then
dodoc ${dodoc_opts} ${DOCS} || die;
fi;
fi;
fi;
if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
if [[ -n ${HTML_DOCS[@]} ]]; then
dohtml -r "${HTML_DOCS[@]}" || die;
fi;
else
if [[ -n ${HTML_DOCS} ]]; then
dohtml -r ${HTML_DOCS} || die;
fi;
fi;
return 0
}
elibtoolize ()
{
local x;
local dirs=();
local do_portage="no";
local do_reversedeps="no";
local do_only_patches="no";
local do_uclibc="yes";
local deptoremove=;
local do_shallow="no";
local force="false";
local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed target-nm";
for x in "$@";
do
case ${x} in
--portage)
do_portage="yes"
;;
--reverse-deps)
do_reversedeps="yes";
elt_patches+=" fix-relink"
;;
--patch-only)
do_only_patches="yes"
;;
--remove-internal-dep=*)
deptoremove=${x#--remove-internal-dep=};
[[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep"
;;
--shallow)
do_shallow="yes"
;;
--no-uclibc)
do_uclibc="no"
;;
--force)
force="true"
;;
-*)
eerror "Invalid elibtoolize option: ${x}";
die "elibtoolize called with ${x} ??"
;;
*)
dirs+=("${x}")
;;
esac;
done;
[[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf";
case ${CHOST} in
-aix)
elt_patches+=" hardcode aixrtl"
;;
-darwin)
elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf"
;;
-solaris)
elt_patches+=" sol2-conf sol2-ltmain"
;;
-freebsd)
elt_patches+=" fbsd-conf fbsd-ltconf"
;;
-hpux)
elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc"
;;
-irix)
elt_patches+=" irix-ltmain"
;;
-mint)
elt_patches+=" mint-conf"
;;
esac;
if $(tc-getLD) --version 2>&1 | grep -qs 'GNU gold'; then
elt_patches+=" gold-conf";
fi;
if [[ ${do_shallow} == "yes" ]]; then
[[ ${#dirs[@]} -ne 0 ]] && die "Using --shallow with explicit dirs doesn't make sense";
[[ -f ${S}/ltmain.sh || -f ${S}/configure ]] && dirs+=("${S}");
else
[[ ${#dirs[@]} -eq 0 ]] && dirs+=("${S}");
dirs=($(find "${dirs[@]}" '(' -name ltmain.sh -o -name configure ')' -printf '%h\n' | sort -u));
fi;
local d p ret;
for d in "${dirs[@]}";
do
export ELT_APPLIED_PATCHES=;
if [[ -f ${d}/.elibtoolized ]]; then
${force} || continue;
fi;
local outfunc="einfo";
[[ -f ${d}/.elibtoolized ]] && outfunc="ewarn";
${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/";
if [[ ${outfunc} == "ewarn" ]]; then
ewarn " We've already been run in this tree; you should";
ewarn " avoid this if possible (perhaps by filing a bug)";
fi;
[[ -f ${d}/ltmain.sh ]] && for p in ${elt_patches};
do
ret=0;
case ${p} in
portage)
if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
ELT_walk_patches "${d}/ltmain.sh" "${p}";
ret=$?;
fi
;;
rem-int-dep)
ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}";
ret=$?
;;
fix-relink)
if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh"; then
ELT_walk_patches "${d}/ltmain.sh" "${p}";
ret=$?;
fi
;;
max_cmd_len)
if grep -qs 'max_cmd_len' "${d}/ltmain.sh"; then
ELT_walk_patches "${d}/ltmain.sh" "${p}";
ret=$?;
fi
;;
as-needed)
ELT_walk_patches "${d}/ltmain.sh" "${p}";
ret=$?
;;
uclibc-ltconf)
if [[ -s ${d}/ltconfig ]]; then
ELT_walk_patches "${d}/ltconfig" "${p}";
ret=$?;
fi
;;
fbsd-ltconf)
if [[ -s ${d}/ltconfig ]]; then
ELT_walk_patches "${d}/ltconfig" "${p}";
ret=$?;
fi
;;
darwin-ltconf)
if [[ -s ${d}/ltconfig ]]; then
ELT_walk_patches "${d}/ltconfig" "${p}";
ret=$?;
fi
;;
darwin-ltmain)
if [[ -e ${d}/ltmain.sh ]] && ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh"; then
ELT_walk_patches "${d}/ltmain.sh" "${p}";
ret=$?;
fi
;;
install-sh)
ELT_walk_patches "${d}/install-sh" "${p}";
ret=$?
;;
cross)
if tc-is-cross-compiler; then
ELT_walk_patches "${d}/ltmain.sh" "${p}";
ret=$?;
fi
;;
*)
ELT_walk_patches "${d}/ltmain.sh" "${p}";
ret=$?
;;
esac;
if [[ ${ret} -ne 0 ]]; then
case ${p} in
relink)
local version=$(ELT_libtool_version "${d}/ltmain.sh");
if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
ewarn " Could not apply relink.patch!";
fi
;;
portage)
if [[ ${do_portage} == "yes" ]]; then
if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
echo;
eerror "Portage patch requested, but failed to apply!";
eerror "Please file a bug report to add a proper patch.";
die "Portage patch requested, but failed to apply!";
fi;
else
if grep -qs 'We do not want portage' "${d}/ltmain.sh"; then
:;
else
local version=$(ELT_libtool_version "${d}"/ltmain.sh);
echo;
eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
eerror "Please file a bug report to add a proper patch.";
die "Portage patch failed to apply!";
fi;
ELT_APPLIED_PATCHES="portage";
fi
;;
darwin-*)
[[ ${CHOST} == "-darwin" ]] && ewarn " Darwin patch set '${p}' failed to apply!"
;;
esac;
fi;
done;
[[ -f ${d}/ltmain.sh ]] && if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
ewarn "Cannot apply any patches, please file a bug about this";
die;
fi;
fi;
[[ -f ${d}/configure ]] && for p in ${elt_patches};
do
ret=0;
case ${p} in
uclibc-conf)
if grep -qs 'Transform linux' "${d}/configure"; then
ELT_walk_patches "${d}/configure" "${p}";
ret=$?;
fi
;;
fbsd-conf)
if grepqs 'version_type=freebsd' "${d}/configure"; then
ELT_walk_patches "${d}/configure" "${p}";
ret=$?;
fi
;;
darwin-conf)
if grep -qs '&& echo \.so ||' "${d}/configure"; then
ELT_walk_patches "${d}/configure" "${p}";
ret=$?;
fi
;;
aixrtl | hpux-conf)
ret=1;
local subret=0;
while [[ $subret -eq 0 ]]; do
subret=1;
if [[ -e ${d}/configure ]]; then
ELT_walk_patches "${d}/configure" "${p}";
subret=$?;
fi;
if [[ $subret -eq 0 ]]; then
ret=0;
fi;
done
;;
mint-conf | gold-conf | sol2-conf)
ELT_walk_patches "${d}/configure" "${p}";
ret=$?
;;
target-nm)
ELT_walk_patches "${d}/configure" "${p}";
ret=$?
;;
*)
;;
esac;
if [[ ${ret} -ne 0 ]]; then
case ${p} in
uclibc-*)
[[ ${CHOST} == *-uclibc ]] && ewarn " uClibc patch set '${p}' failed to apply!"
;;
fbsd-*)
if [[ ${CHOST} == -freebsd ]]; then
if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${d}/configure" 2>/dev/null) ]]; then
eerror " FreeBSD patch set '${p}' failed to apply!";
die "FreeBSD patch set '${p}' failed to apply!";
fi;
fi
;;
darwin-*)
[[ ${CHOST} == "-darwin" ]] && ewarn " Darwin patch set '${p}' failed to apply!"
;;
esac;
fi;
done;
rm -f "${d}/libtool";
> "${d}/.elibtoolized";
done
}
elt_patch_dir ()
{
local d="${ECLASSDIR}/ELT-patches";
if [[ ! -d ${d} ]]; then
d="${_LIBTOOL_ECLASSDIR_LOCAL}/ELT-patches";
fi;
echo "${d}"
}
emake_src_make ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -e Makefile ]] || die "Makefile not found. Error during configure stage.";
if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then
emake VERBOSE=1 "$@" || die;
else
emake "$@" || die;
fi
}
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} "$@";
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
local CPPFLAGS=${CPPFLAGS};
append-cppflags -DNDEBUG;
fi;
fi;
local build_rules=${BUILD_DIR}/gentoo_rules.cmake;
cat > "${build_rules}" <<-EOF
SET (CMAKE_AR $(type -P $(tc-getAR)) CACHE FILEPATH "Archive manager" FORCE)
SET (CMAKE_ASM_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${CFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "ASM compile command" FORCE)
SET (CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" FORCE)
SET (CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" FORCE)
SET (CMAKE_Fortran_COMPILE_OBJECT "<CMAKE_Fortran_COMPILER> <DEFINES> ${FCFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "Fortran compile command" FORCE)
SET (CMAKE_RANLIB $(type -P $(tc-getRANLIB)) CACHE FILEPATH "Archive index generator" FORCE)
SET (PKG_CONFIG_EXECUTABLE $(type -P $(tc-getPKG_CONFIG)) CACHE FILEPATH "pkg-config executable" FORCE)
EOF
local toolchain_file=${BUILD_DIR}/gentoo_toolchain.cmake;
cat > ${toolchain_file} <<-EOF
SET (CMAKE_C_COMPILER $(tc-getCC))
SET (CMAKE_CXX_COMPILER $(tc-getCXX))
SET (CMAKE_Fortran_COMPILER $(tc-getFC))
EOF
if tc-is-cross-compiler; then
local sysname;
case "${KERNEL:-linux}" in
Cygwin)
sysname="CYGWIN_NT-5.1"
;;
HPUX)
sysname="HP-UX"
;;
linux)
sysname="Linux"
;;
Winnt)
sysname="Windows"
;;
*)
sysname="${KERNEL}"
;;
esac;
cat >> "${toolchain_file}" <<-EOF
SET (CMAKE_SYSTEM_NAME "${sysname}")
EOF
if [ "${SYSROOT:-/}" != "/" ]; then
cat >> "${toolchain_file}" <<-EOF
set(CMAKE_FIND_ROOT_PATH "${SYSROOT}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
EOF
fi;
fi
has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=;
if [[ -n ${EPREFIX} ]]; then
cat >> "${build_rules}" <<-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}" 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 "")
SET(CMAKE_INSTALL_RPATH "${EPREFIX}${PREFIX}/lib;${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)" CACHE STRING "" FORCE)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE)
SET(CMAKE_INSTALL_NAME_DIR "${EPREFIX}${PREFIX}/lib" CACHE STRING "" FORCE)
ENDIF (NOT APPLE)
EOF
fi
local common_config=${BUILD_DIR}/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 [[ $(declarep mycmakeargs 2>&) != "declare -a mycmakeargs="* ]]; then
local mycmakeargs_local=(${mycmakeargs});
else
local mycmakeargs_local=("${mycmakeargs[@]}");
fi;
if [[ ${CMAKE_WARN_UNUSED_CLI} == no ]]; then
local warn_unused_cli="--no-warn-unused-cli";
else
local warn_unused_cli="";
fi;
local cmakeargs=(${warn_unused_cli} -C "${common_config}" -G "$(_generator_to_use)" -DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}" "${mycmakeargs_local[@]}" -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" -DCMAKE_INSTALL_DO_STRIP=OFF -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}" -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}" "${MYCMAKEARGS}");
if [[ -n "${CMAKE_EXTRA_CACHE_FILE}" ]]; then
cmakeargs+=(-C "${CMAKE_EXTRA_CACHE_FILE}");
fi;
pushd "${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 "${BUILD_DIR}" > /dev/null;
DESTDIR="${D}" ${CMAKE_MAKEFILE_GENERATOR} install "$@" || die "died running ${CMAKE_MAKEFILE_GENERATOR} install";
popd > /dev/null;
pushd "${S}" > /dev/null;
einstalldocs;
popd > /dev/null
}
enable_cmake-utils_src_prepare ()
{
debug-print-function ${FUNCNAME} "$@";
pushd "${S}" > /dev/null;
debug-print "$FUNCNAME: PATCHES=$PATCHES";
[[ -n ${PATCHES[@]} ]] && epatch "${PATCHES[@]}";
debug-print "$FUNCNAME: applying user patches";
epatch_user;
popd > /dev/null
}
enable_cmake-utils_src_test ()
{
debug-print-function ${FUNCNAME} "$@";
_check_build_dir;
pushd "${BUILD_DIR}" > /dev/null;
[[ -e CTestTestfile.cmake ]] || { echo "No tests found. Skipping."; return 0 };
[[n ${TEST_VERBOSE} ]] && myctestargs+=(-extra-verbose --output-on-failure);
if ctest "${myctestargs[@]}" "$@"; then
einfo "Tests succeeded.";
popd > /dev/null;
return 0;
else
if [[ -n "${CMAKE_YES_I_WANT_TO_SEE_THE_TEST_LOG}" ]]; then
eerror "Tests failed. Test log ${BUILD_DIR}/Testing/Temporary/LastTest.log follows:";
eerror "-START TEST LOG-------------------------------------------------------------";
cat "${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${BUILD_DIR}/Testing/Temporary/LastTest.log";
fi;
popd > /dev/null;
return 1;
fi
}
epatch ()
{
function _epatch_draw_line ()
{
[[ -z $1 ]] && set "$(printf "%65s" '')";
echo "${1//?/=}"
};
unset P4CONFIG P4PORT P4USER;
local EPATCH_OPTS=(${EPATCH_OPTS[*]});
while [ $# -gt 0 ]; do
case $1 in
-*)
EPATCH_OPTS+=("$1")
;;
*)
break
;;
esac;
shift;
done;
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
evar_push_set LC_COLLATE C;
set – "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
evar_pop;
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;
EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}";
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}${EPATCH_USER_EXCLUDE} ]]; then
eshopts_push -o noglob;
local ex;
for ex in ${EPATCH_EXCLUDE};
do
if [[ ${patchname} == ${ex} ]]; then
einfo " Skipping ${patchname} due to EPATCH_EXCLUDE ...";
eshopts_pop;
continue 2;
fi;
done;
for ex in ${EPATCH_USER_EXCLUDE};
do
if [[ ${patchname} == ${ex} ]]; then
einfo " Skipping ${patchname} due to EPATCH_USER_EXCLUDE ...";
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 patch="patch";
eval $(alias patch 2>/dev/null | sed 's:^alias ::');
local STDERR_TARGET="${T}/${patchname}.out";
if [[ -e ${STDERR_TARGET} ]]; then
STDERR_TARGET="${T}/${patchname}-$$.out";
fi;
printf "***** %s *****\nPWD: %s\nPATCH TOOL: %s -> %s\nVERSION INFO:\n%s\n\n" "${patchname}" "${PWD}" "${patch}" "$(type -P "${patch}")" "$(${patch} --version)" > "${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
echo;
eerror "Rejected Patch: ${patchname} !";
eerror " ( ${PATCH_TARGET} )";
eerror;
eerror "Your patch uses relative paths '../':";
eerror "${rel_paths}";
echo;
die "you need to fix the relative paths in patch";
fi;
local patch_cmd;
while [[ ${count} -lt 5 ]]; do
patch_cmd="${patch} -p${count} ${EPATCH_OPTS}";
( _epatch_draw_line "***** ${patchname} *****";
echo;
echo "PATCH COMMAND: ${patch_cmd} < '${PATCH_TARGET}'";
echo;
_epatch_draw_line "***** ${patchname} *****";
${patch_cmd} --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_cmd} < "${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}";
cat >> "${T}/epatch.log" <<-EOF
PATCH: ${x}
CMD: ${patch_cmd}
PWD: ${PWD}
EOF
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.log";
[[ -e ${applied} ]] && return 2;
local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT}};
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}";
has epatch_user_death_notice ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" epatch_user_death_notice";
return 0;
fi;
done;
echo "none" > "${applied}";
return 1
}
epatch_user_death_notice () { ewarn "!!! User patches were applied to this build!" }
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 p any_found;
while IFS= read -r -d '' f; do
for p in "${PORTDIR}"/eclass/ELT-patches/nocxx/*.patch;
do
if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
any_found=1;
break;
fi;
done;
done < <(find "${dir}" -name configure -print0);
if [[ -z ${any_found} ]]; then
eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
fi;
eend 0
}
eshopts_pop ()
{
local s;
estack_pop eshopts s || die "${FUNCNAME}: unbalanced push";
if [[ ${s} == "shopt -"* ]]; then
eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}";
else
set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-";
set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}";
fi
}
eshopts_push ()
{
if [[ $1 == -[su] ]]; then
estack_push eshopts "$(shopt -p)";
[ $# -eq 0 ] && return 0;
shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*";
else
estack_push eshopts $-;
[ $# -eq 0 ] && return 0;
set "$@" || die "${FUNCNAME}: bad options to set: $*";
fi
}
estack_pop ()
{
[[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments";
local estack_name="_ESTACK$1_";
shift;
local _estack_retvar=$1;
shift;
eval local _estack_i=\${#${_estack_name}[@]};
[[ $(( --_estack_i )) -eq -1 ]] && return 1;
if [[ -n ${_estack_retvar} ]]; then
eval ${_estack_retvar}=\"\${${_estack_name}[${_estack_i}]}\";
fi;
eval unset ${_estack_name}[${_estack_i}]
}
estack_push ()
{
[ $# -eq 0 ] && die "estack_push: incorrect # of arguments";
local stack_name="ESTACK$1_";
shift;
eval ${stack_name}+=( \"\$@\" )
}
esvn_clean () { [[ -z $* ]] && set -- .; find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf }
eumask_pop ()
{
[ $# -eq 0 ] || die "${FUNCNAME}: we take no options";
local s;
estack_pop eumask s || die "${FUNCNAME}: unbalanced push";
umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}"
}
eumask_push ()
{
estack_push eumask "$(umask)";
umask "$@" || die "${FUNCNAME}: bad options to umask: $*"
}
evar_pop ()
{
local cnt=${1:-bad};
case $# in
0)
cnt=1
;;
1)
isdigit "${cnt}" || die "${FUNCNAME}: first arg must be a number: $*"
;;
*)
die "${FUNCNAME}: only accepts one arg: $*"
;;
esac;
local var val;
while (( cnt-- )); do
estack_pop evar val || die "${FUNCNAME}: unbalanced push";
estack_pop evar var || die "${FUNCNAME}: unbalanced push";
[[ ${val} == "unset_76fc3c462065bb4ca959f939e6793f94" ]] && unset ${var} || printf -v "${var}" '%s' "${val}";
done
}
evar_push ()
{
local var val;
for var in "$@";
do
[[ ${!var+set} == "set" ]] && val=${!var} || val="unset_76fc3c462065bb4ca959f939e6793f94";
estack_push evar "${var}" "${val}";
done
}
evar_push_set ()
{
local var=$1;
evar_push ${var};
case $# in
1)
unset ${var}
;;
2)
printf -v "${var}" '%s' "$2"
;;
*)
die "${FUNCNAME}: incorrect # of args: $*"
;;
esac
}
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 "$@";
local v;
for v in $(all-flag-vars);
do
_filter-var ${v} "$@";
done;
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/both/387,sse};
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
}
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);
[[ "${directive/{!fstrict-overflow:}" != "${directive}" ]]
}
gcc-specs-now ()
{
local directive;
directive=$(gcc-specs-directive link_command);
[[ "${directive/{!nonow:}" != "${directive}" ]]
}
gcc-specs-pie ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/{!nopie:}" != "${directive}" ]]
}
gcc-specs-relro ()
{
local directive;
directive=$(gcc-specs-directive link_command);
[[ "${directive/{!norelro:}" != "${directive}" ]]
}
gcc-specs-ssp ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/{!fno-stack-protector:}" != "${directive}" ]]
}
gcc-specs-ssp-to-all ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/{!fno-stack-protector-all:}" != "${directive}" ]]
}
gcc-specs-stack-check ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/{!fno-stack-check:}" != "${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;
case ${CTARGET:-${CHOST}} in
-darwin)
;;
linux | -freebsd | -openbsd | -netbsd)
use prefix && return 0
;;
*)
return 0
;;
esac;
dodir /usr/${libdir};
if [[ $1 == "-a" ]]; then
auto=true;
shift;
dodir /${libdir};
fi;
local flags=(${CFLAGS} ${LDFLAGS}Wl,-verbose);
if $(tc-getLD) --version | grep -q 'GNU gold'; then
local d="${T}/bfd-linker";
mkdir -p "${d}";
ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld;
flags+=(-B"${d}");
fi;
output_format=$($(tc-getCC) "${flags[@]}" 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
;;
*)
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 var findflag="$1";
for var in $(all-flag-vars);
do
for f in ${!var};
do
if [ "${f/${findflag}}" != "${f}" ]; then
printf "%s\n" "${f/-${findflag}=}";
return 0;
fi;
done;
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 x order="" mvar dvar;
mvar="MULTILIB_ABIS";
dvar="DEFAULT_ABI";
if [[ -n $1 ]]; then
mvar="$1_${mvar}";
dvar="$1_${dvar}";
fi;
if [[ -z ${!mvar} ]]; then
echo "default";
return 0;
fi;
for x in ${!mvar};
do
if [[ ${x} != ${!dvar} ]]; then
order="${order:+${order} }${x}";
fi;
done;
order="${order:+${order} }${!dvar}";
echo ${order};
return 0
}
get_all_libdirs ()
{
local libdirs abi;
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_install_abis ()
{
local x 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_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_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_disable_deprecation_warning ()
{
local retval=0;
local fails=();
local makefile;
ebegin "Disabling deprecation warnings";
while read makefile; do
if ! grep -qE "(DISABLE_DEPRECATED|GSEAL_ENABLE)" "${makefile}"; then
continue;
fi;
LC_ALL=C sed -r -i -e 's:-D[A-Z_]_DISABLE_DEPRECATED:$(NULL):g' -e 's:-DGSEAL_ENABLE[A-Z_]:$(NULL):g' -i "${makefile}";
if [[ $? -ne 0 ]]; then
fails+=("${makefile}");
retval=2;
fi;
done < <(find "${S}" -name "Makefile.in" -o -name "Makefile.am" -o -name "Makefile.decl" | sort; echo configure);
eend ${retval};
for makefile in "${fails[@]}";
do
ewarn "Failed to disable deprecation warnings in ${makefile}";
done
}
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_gdk_pixbuf_savelist ()
{
has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
pushd "${ED}" > /dev/null;
export GNOME2_ECLASS_GDK_PIXBUF_LOADERS=$(find usr/lib*/gdk-pixbuf-2.0 -type f 2>/dev/null);
popd > /dev/null
}
gnome2_gdk_pixbuf_update ()
{
has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
local updater="${EROOT}/usr/bin/${CHOST}-gdk-pixbuf-query-loaders";
if [[ ! -x ${updater} ]]; then
updater="${EROOT}/usr/bin/gdk-pixbuf-query-loaders";
fi;
if [[ ! -x ${updater} ]]; then
debug-print "${updater} is not executable";
return;
fi;
if [[ -z ${GNOME2_ECLASS_GDK_PIXBUF_LOADERS} ]]; then
debug-print "gdk-pixbuf loader cache does not need an update";
return;
fi;
ebegin "Updating gdk-pixbuf loader cache";
local tmp_file=$(mktemp -t tmp.XXXXXXXXXX_gdkpixbuf);
${updater} > "${tmp_file}" && chmod 0644 "${tmp_file}" && cp -f "${tmp_file}" "${EROOT}usr/$(get_libdir)/gdk-pixbuf-2.0/2.10.0/loaders.cache" && rm "${tmp_file}";
eend $?
}
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;
else
if [[ $(ls "${EROOT}${dir}") = "icon-theme.cache" ]]; then
rm "${EROOT}${dir}/icon-theme.cache";
fi;
fi;
if [[ -z $(ls "${EROOT}${dir}") ]]; then
rmdir "${EROOT}${dir}";
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;
if [[ -f ${S}/gnome-doc-utils.make ]]; then
omf_makefiles="${omf_makefiles} ${S}/gnome-doc-utils.make";
fi;
for filename in $(find "${S}" -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
sed -i -e 's:scrollkeeper-update:true:' "${omf}";
retval=$?;
if [[ $retval -ne 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_pkg_postinst () { gnome2_gconf_install; fdo-mime_desktop_database_update; fdo-mime_mime_database_update; gnome2_icon_cache_update; gnome2_schemas_update; gnome2_scrollkeeper_update; gnome2_gdk_pixbuf_update }
gnome2_pkg_postrm () { fdo-mime_desktop_database_update; fdo-mime_mime_database_update; gnome2_icon_cache_update; gnome2_schemas_update; gnome2_scrollkeeper_update }
gnome2_pkg_preinst () { gnome2_gconf_savelist; gnome2_icon_savelist; gnome2_schemas_savelist; gnome2_scrollkeeper_savelist; gnome2_gdk_pixbuf_savelist }
gnome2_query_immodules_gtk2 ()
{
local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-2.0;
[[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-2.0;
"${updater}" --update-cache
}
gnome2_query_immodules_gtk3 ()
{
local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-3.0;
[[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-3.0;
"${updater}" --update-cache
}
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_savelist ()
{
has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}";
pushd "${ED}" &> /dev/null;
export GNOME2_ECLASS_SCROLLS=$(find 'usr/share/omf' -type f -name "*.omf" 2> /dev/null);
popd &> /dev/null
}
gnome2_scrollkeeper_update ()
{
has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}";
local updater="${EROOT}${SCROLLKEEPER_UPDATE_BIN}";
if [[ ! -x "${updater}" ]]; then
debug-print "${updater} is not executable";
return;
fi;
if [[ -z "${GNOME2_ECLASS_SCROLLS}" ]]; then
debug-print "No scroll cache to update";
return;
fi;
ebegin "Updating scrollkeeper database ...";
"${updater}" -q -p "${EROOT}${SCROLLKEEPER_DIR}";
eend $?
}
gnome2_src_compile () { emake }
gnome2_src_configure ()
{
if [[ ${GCONF_DEBUG} != 'no' ]]; then
if use debug; then
G2CONF="--enable-debug=yes ${G2CONF}";
fi;
fi;
if grepq "enable-gtk-doc" "${ECONF_SOURCE:.}"/configure; then
if has ${EAPI:-0} 4 4-python && in_iuse doc; then
G2CONF="$(use_enable doc gtk-doc) ${G2CONF}";
else
G2CONF="--disable-gtk-doc ${G2CONF}";
fi;
fi;
if grepq "^[[:space:]]AM_MAINTAINER_MODE([enable])" "${ECONF_SOURCE:.}"/configure.; then
G2CONF="--disable-maintainer-mode ${G2CONF}";
fi;
if grepq "disable-scrollkeeper" "${ECONF_SOURCE:.}"/configure; then
G2CONF="--disable-scrollkeeper ${G2CONF}";
fi;
if has ${EAPI:-0} 4 4-python; then
if grepq "disable-silent-rules" "${ECONF_SOURCE:.}"/configure; then
G2CONF="--disable-silent-rules ${G2CONF}";
fi;
fi;
if grepq "disable-schemas-install" "${ECONF_SOURCE:.}"/configure; then
G2CONF="--disable-schemas-install ${G2CONF}";
fi;
if grepq "disable-schemas-compile" "${ECONF_SOURCE:.}"/configure; then
G2CONF="--disable-schemas-compile ${G2CONF}";
fi;
if grepq "enable-compile-warnings" "${ECONF_SOURCE:.}"/configure; then
G2CONF="--enable-compile-warnings=minimum ${G2CONF}";
fi;
if grepq "^ *docdir=" "${ECONF_SOURCE:.}"/configure; then
G2CONF="--docdir="${EPREFIX}"/usr/share/doc/${PF} ${G2CONF}";
fi;
addwrite "$(unset HOME; echo ~)/.gnome2";
econf ${G2CONF} "$@"
}
gnome2_src_install ()
{
local installation_prefix;
if [[ -n "${GNOME2_DESTDIR}" ]]; then
installation_prefix="${GNOME2_DESTDIR%/}${EPREFIX}/";
else
installation_prefix="${ED}";
fi;
local sk_tmp_dir="/var/lib/scrollkeeper";
dodir "${sk_tmp_dir}" || die "dodir failed";
export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL="1";
debug-print "Installing with 'make install'";
emake DESTDIR="${GNOME2_DESTDIR:-${D}}" "scrollkeeper_localstate_dir=${installation_prefix}${sk_tmp_dir} " "$@" install || die "install failed";
unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL;
if has ${EAPI:-0} 4 4-python; then
if [[ -n "${DOCS}" ]]; then
dodoc ${DOCS} || die "dodoc failed";
fi;
else
einstalldocs;
fi;
rm -rf "${installation_prefix}${sk_tmp_dir}";
rmdir "${installation_prefix}var/lib" 2> /dev/null;
rmdir "${installation_prefix}var" 2> /dev/null;
rm -fr "${installation_prefix}usr/share/applications/mimeinfo.cache";
if has ${EAPI:-0} 4 4-python; then
if [[ "${GNOME2_LA_PUNT}" != "no" ]]; then
ebegin "Removing .la files";
if ! use_if_iuse static-libs; then
find "${GNOME2_DESTDIR:-${D}}" -name '*.la' -exec rm -f {} + || die "la file removal failed";
fi;
eend;
fi;
else
case "${GNOME2_LA_PUNT}" in
yes)
prune_libtool_files --modules
;;
no)
;;
*)
prune_libtool_files
;;
esac;
fi
}
gnome2_src_prepare ()
{
gnome2_environment_reset;
gnome2_omf_fix;
gnome2_disable_deprecation_warning;
elibtoolize ${ELTCONF}
}
gnome2_src_unpack ()
{
unpack ${A};
cd "${S}"
}
has_m32 ()
{
die "${FUNCNAME}: don't use this anymore"
}
has_m64 ()
{
eqawarn "${FUNCNAME}: don't use this anymore";
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/ /}" ]
}
host-is-pax () { grep -qs ^PaX: /proc/self/status }
in_iuse ()
{
debug-print-function ${FUNCNAME} "${@}";
[ ${#} -eq 1 ] || die "Invalid args to ${FUNCNAME}()";
local flag=${1};
local liuse=(${IUSE});
has "${flag}" "${liuse[@]#[+-]}"
}
is-flag () { is-flagq "$@" && echo true }
is-flagq ()
{
[[ -n $2 ]] && die "Usage: is-flag <flag>";
local var;
for var in $(all-flag-vars);
do
_is_flagq ${var} "$1" && return 0;
done;
return 1
}
is-ldflag () { is-ldflagq "$@" && echo true }
is-ldflagq () { [[ -n $2 ]] && die "Usage: is-ldflag <flag>"; _is_flagq LDFLAGS $1 }
is_final_abi ()
{
has_multilib_profile || return 0;
set – $(get_install_abis);
local LAST_ABI=$#;
[[ ${!LAST_ABI} == ${ABI} ]]
}
isdigit ()
{
local d;
for d in "$@";
do
[[ ${d:-bad} == [!0-9] ]] && return 1;
done;
return 0
}
list-paxables () { file "$@" 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//' }
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="Utility;Accessibility"
;;
admin)
type=System
;;
antivirus)
type=System
;;
arch)
type="Utility;Archiving"
;;
backup)
type="Utility;Archiving"
;;
cdr)
type="AudioVideo;DiscBurning"
;;
dicts)
type="Office;Dictionary"
;;
doc)
type=Documentation
;;
editors)
type="Utility;TextEditor"
;;
emacs)
type="Development;TextEditor"
;;
emulation)
type="System;Emulator"
;;
laptop)
type="Settings;HardwareSettings"
;;
office)
type=Office
;;
pda)
type="Office;PDA"
;;
vim)
type="Development;TextEditor"
;;
xemacs)
type="Development;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;
local slot=${SLOT%/*};
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 ()
{
_eutils_eprefix_init;
local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
local tmpwrapper=$(emktemp);
( echo '#!/bin/sh';
[[ -n ${chdir} ]] && printf 'cd "%s"\n' "${EPREFIX}${chdir}";
if [[ -n ${libdir} ]]; then
local var;
if [[ ${CHOST} == -darwin ]]; then
var=DYLD_LIBRARY_PATH;
else
var=LD_LIBRARY_PATH;
fi;
cat <<-EOF
if [ "\${${var}+set}" = "set" ] ; then
export ${var}="\${${var}}:${EPREFIX}${libdir}"
else
export ${var}="${EPREFIX}${libdir}"
fi
EOF
fi
printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
chmod go+rx "${tmpwrapper}";
if [[ -n ${path} ]]; then
( exeinto "${path}";
newexe "${tmpwrapper}" "${wrapper}" ) || die;
else
newbin "${tmpwrapper}" "${wrapper}" || die;
fi
}
multilib_env ()
{
local CTARGET=${1:-${CTARGET}};
local cpu=${CTARGET%%*-};
case ${cpu} in
aarch64*)
export CFLAGS_arm=${CFLAGS_arm-};
case ${cpu} in
aarch64*be)
export CHOST_arm="armv8b-${CTARGET#*-}"
;;
*)
export CHOST_arm="armv8l-${CTARGET#*-}"
;;
esac;
CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
export CTARGET_arm=${CHOST_arm};
export LIBDIR_arm="lib";
export CFLAGS_arm64=${CFLAGS_arm64-};
export CHOST_arm64=${CTARGET};
export CTARGET_arm64=${CHOST_arm64};
export LIBDIR_arm64="lib64";
: ${MULTILIB_ABIS=arm64};
: ${DEFAULT_ABI=arm64}
;;
x86_64*)
export CFLAGS_x86=${CFLAGS_x86--m32};
export CHOST_x86=${CTARGET/x86_64/i686};
CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
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/%-gnux32/-gnu};
export CTARGET_amd64=${CHOST_amd64};
export LIBDIR_amd64="lib64";
export CFLAGS_x32=${CFLAGS_x32--mx32};
export CHOST_x32=${CTARGET/%-gnu/-gnux32};
export CTARGET_x32=${CHOST_x32};
export LIBDIR_x32="libx32";
case ${CTARGET} in
*-gnux32)
: ${MULTILIB_ABIS=x32 amd64 x86};
: ${DEFAULT_ABI=x32}
;;
*)
: ${MULTILIB_ABIS=amd64 x86};
: ${DEFAULT_ABI=amd64}
;;
esac
;;
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}
;;
sparc64*)
export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
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 F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
do
vv="abi_saved${v}";
[[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
unset ${vv};
done;
unset _DEFAULT_ABI_SAVED;
fi;
if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH};
do
vv="abi_saved${v}";
[[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
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 F77="$(tc-getF77) $(get_abi_CFLAGS)";
export FC="$(tc-getFC) $(get_abi_CFLAGS)";
export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
export CHOST=$(get_abi_CHOST $1);
export CBUILD=$(get_abi_CHOST $1);
export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
fi
}
newicon ()
{
_iconins ${FUNCNAME} "$@"
}
newmenu () { ( insinto /usr/share/applications; newins "$@" ) }
ninja_src_make ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -e build.ninja ]] || die "build.ninja not found. Error during configure stage.";
_ninjaopts_from_makeopts;
if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then
set – ninja ${NINJAOPTS} -v "$@";
else
set – ninja ${NINJAOPTS} "$@";
fi;
echo "$@";
"$@" || die
}
no-as-needed () { case $($(tc-getLD) -v 2>&1 </dev/null) in *GNU*) echo "-Wl,--no-as-needed" ;; esac }
number_abis () { set -- `get_install_abis`; echo $# }
optfeature ()
{
debug-print-function ${FUNCNAME} "$@";
local i j msg;
local desc=$1;
local flag=0;
shift;
for i in "$@";
do
for j in ${i};
do
if has_version "${j}"; then
flag=1;
else
flag=0;
break;
fi;
done;
if [[ ${flag} -eq 1 ]]; then
break;
fi;
done;
if [[ ${flag} -eq 0 ]]; then
for i in "$@";
do
msg=" ";
for j in ${i};
do
msg+=" ${j} and";
done;
msg="${msg:0: -4} for ${desc}";
elog "${msg}";
done;
fi
}
path_exists ()
{
local opt=$1;
[[ ${opt} == -[ao] ]] && shift || opt="-a";
[ $# -eq 0 ] && return 1;
local p r=0;
for p in "$@";
do
[[ -e ${p} ]];
: $(( r += $? ));
done;
case ${opt} in
-a)
return $(( r != 0 ))
;;
-o)
return $(( r == $# ))
;;
esac
}
pax-mark ()
{
local f;
local flags;
local ret=0;
flags="${1//[!zPpEeMmRrSs]}";
[[ -n "${flags}" ]] || return 0;
shift;
local dodefault="";
[[ -n "${flags//[!z]}" ]] && dodefault="yes";
if has PT ${PAX_MARKINGS}; then
_pax_list_files einfo "$@";
for f in "$@";
do
if type -p paxctl > /dev/null; then
einfo "PT PaX marking -${flags} ${f} with paxctl";
paxctl -q${flags} "${f}" && continue;
paxctl -qC${flags} "${f}" && continue;
paxctl -qc${flags} "${f}" && continue;
fi;
if type -p paxctl-ng > /dev/null && paxctl-ng -L; then
einfo "PT PaX marking -${flags} ${f} with paxctl-ng";
flags="${flags//z}";
[[ ${dodefault} == "yes" ]] && paxctl-ng -L -z "${f}";
[[ -n "${flags}" ]] || continue;
paxctl-ng -L -${flags} "${f}" && continue;
fi;
if type -p scanelf > /dev/null && [[ ${PAX_MARKINGS} != "none" ]]; then
scanelf -Xxz ${flags} "$f";
else
if [[ ${PAX_MARKINGS} != "none" ]]; then
elog "Failed to set PT_PAX markings -${flags} ${f}.";
ret=1;
fi;
fi;
done;
fi;
if has XT ${PAX_MARKINGS}; then
_pax_list_files einfo "$@";
flags="${flags//z}";
for f in "$@";
do
if type -p paxctl-ng > /dev/null && paxctl-ng -l; then
einfo "XT PaX marking -${flags} ${f} with paxctl-ng";
[[ ${dodefault} == "yes" ]] && paxctl-ng -d "${f}";
[[ -n "${flags}" ]] || continue;
paxctl-ng -l -${flags} "${f}" && continue;
fi;
if type -p setfattr > /dev/null; then
[[ -n "${flags//[!Ee]}" ]] || flags+="e";
einfo "XT PaX marking -${flags} ${f} with setfattr";
[[ ${dodefault} == "yes" ]] && setfattr -x "user.pax.flags" "${f}";
setfattr -n "user.pax.flags" -v "${flags}" "${f}" && continue;
fi;
if [[ ${PAX_MARKINGS} != "none" ]]; then
elog "Failed to set XATTR_PAX markings -${flags} ${f}.";
ret=1;
fi;
done;
fi;
return ${ret}
}
pkg_nofetch () { __eapi0_pkg_nofetch "$@" }
pkg_postinst () { gnome2_pkg_postinst "$@" }
pkg_postrm () { gnome2_pkg_postrm "$@" }
pkg_preinst () { gnome2_pkg_preinst "$@" }
pkg_pretend ()
{
if [[ ${MERGE_TYPE} != "binary" ]] && is-flagq "-g*" && ! is-flagq "-g*0"; then
einfo "Checking for sufficient disk space to build ${PN} with debugging CFLAGS";
check-reqs_pkg_pretend;
fi;
if ! test-flag-CXX -std=c++11; then
die "You need at least GCC 4.7.x or Clang >= 3.3 for C++11-specific compiler flags";
fi
}
pkg_setup ()
{
if [[ ${MERGE_TYPE} != "binary" ]]; then
check-reqs_pkg_setup;
fi;
[[ ${MERGE_TYPE} = "binary" ]] || python-any-r1_pkg_setup
}
preserve_old_lib ()
{
_eutils_eprefix_init;
if [[ ${EBUILD_PHASE} != "preinst" ]]; then
eerror "preserve_old_lib() must be called from pkg_preinst() only";
die "Invalid preserve_old_lib() usage";
fi;
[[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
has preserve-libs ${FEATURES} && return 0;
local lib dir;
for lib in "$@";
do
[[ -e ${EROOT}/${lib} ]] || continue;
dir=${lib%/*};
dodir ${dir} || die "dodir ${dir} failed";
cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp ${lib} failed";
touch "${ED}"/${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;
_eutils_eprefix_init;
local lib notice=0;
for lib in "$@";
do
[[ -e ${EROOT}/${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;
ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'";
done
}
prune_libtool_files ()
{
debug-print-function ${FUNCNAME} "$@";
local removing_all removing_modules opt;
_eutils_eprefix_init;
for opt in "$@";
do
case "${opt}" in
--all)
removing_all=1;
removing_modules=1
;;
--modules)
removing_modules=1
;;
*)
die "Invalid argument to ${FUNCNAME}(): ${opt}"
;;
esac;
done;
local f;
local queue=();
while IFS= read -r -d '' f; do
local archivefile=${f/%.la/.a};
if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then
continue;
fi;
[[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
local reason= pkgconfig_scanned=;
local snotlink=$(sed -n -e 's:^shouldnotlink=:' "${f}");
if [[ ${snotlink} == yes ]]; then
if [[ -f ${archivefile} ]]; then
einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
queue+=("${archivefile}");
fi;
if [[ -n ${removing_modules} ]]; then
reason='module';
fi;
else
if [[ -n ${removing_all} ]]; then
reason='requested';
else
if [[ ! -f ${archivefile} ]]; then
reason='no static archive';
else
if [[ ! -n $(sed -nre "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" "${f}") ]]; then
reason='no libs & flags';
else
if [[ ! -n ${pkgconfig_scanned} ]]; then
local pc_libs=();
if [[ ! -n ${removing_all} ]]; then
local pc;
local tf=${T}/prune-lt-files.pc;
local pkgconf=$(tc-getPKG_CONFIG);
while IFS= read -r -d '' pc; do
local arg libs;
if ${pkgconf} --exists "${pc}" &> /dev/null; then
sed -e '/^Requires:/d' "${pc}" > "${tf}";
libs=$(${pkgconf} --libs "${tf}");
else
libs=$(sed -ne 's/^Libs://p' "${pc}");
fi;
for arg in ${libs};
do
if [[ ${arg} == -l* ]]; then
if [[ ${arg} == '$' ]]; then
eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
eqawarn "(arg: ${arg})";
eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
fi;
pc_libs+=(lib${arg#-l}.la);
fi;
done;
done < <(find "${D}" -type f -name '*.pc' -print0);
rm -f "${tf}";
fi;
pkgconfig_scanned=1;
fi;
has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
fi;
fi;
fi;
fi;
if [[ -n ${reason} ]]; then
einfo "Removing unnecessary ${f#${D%/}} (${reason})";
queue+=("${f}");
fi;
done < <(find "${ED}" -xtype f -name '*.la' -print0);
if [[ -n ${queue[@]} ]]; then
rm -f "${queue[@]}";
fi
}
python-any-r1_pkg_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${MERGE_TYPE} != binary ]] && python_setup
}
python_abi_depend ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_byte-compile_modules ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_clean_byte-compiled_modules ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_clean_installation_image ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_clean_py-compile_files ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_convert_shebangs ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_convert_shebangs"
}
python_disable_pyc ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_doexe ()
{
debug-print-function ${FUNCNAME} "${@}";
local f;
for f in "$@";
do
python_newexe "${f}" "${f##*/}";
done
}
python_doheader ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local d PYTHON_INCLUDEDIR=${PYTHON_INCLUDEDIR};
[[ -n ${PYTHON_INCLUDEDIR} ]] || python_export PYTHON_INCLUDEDIR;
d=${PYTHON_INCLUDEDIR#${EPREFIX}};
local INSDESTTREE;
insinto "${d}";
doins -r "${@}" || die
}
python_domodule ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local d;
if [[ ${python_moduleroot} == /* ]]; then
d=${python_moduleroot};
else
local PYTHON_SITEDIR=${PYTHON_SITEDIR};
[[ -n ${PYTHON_SITEDIR} ]] || python_export PYTHON_SITEDIR;
d=${PYTHON_SITEDIR#${EPREFIX}}/${python_moduleroot};
fi;
local INSDESTTREE;
insinto "${d}";
doins -r "${@}" || die;
python_optimize "${ED}/${d}"
}
python_doscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_doexe "${@}"
}
python_enable_pyc ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_execute_function ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_execute_function"
}
python_execute_nosetests ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_execute_py.test ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_execute_trial ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_export ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl var;
case "${1}" in
python* | jython*)
impl=${1/_/.};
shift
;;
pypy | pypy3)
impl=${1};
shift
;;
*)
impl=${EPYTHON};
if [[ -z ${impl} ]]; then
die "python_export called without a python implementation and EPYTHON is unset";
fi
;;
esac;
debug-print "${FUNCNAME}: implementation: ${impl}";
for var in "$@";
do
case "${var}" in
EPYTHON)
export EPYTHON=${impl};
debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
;;
PYTHON)
export PYTHON=${EPREFIX}/usr/bin/${impl};
debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
;;
PYTHON_SITEDIR)
local dir;
case "${impl}" in
python* | pypy | pypy3)
dir=/usr/$(get_libdir)/${impl}
;;
jython*)
dir=/usr/share/${impl/n/n-}/Lib
;;
esac;
export PYTHON_SITEDIR=${EPREFIX}${dir}/site-packages;
debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
;;
PYTHON_INCLUDEDIR)
local dir;
case "${impl}" in
python*)
dir=/usr/include/${impl}
;;
pypy | pypy3)
dir=/usr/$(get_libdir)/${impl}/include
;;
*)
die "${impl} lacks header files"
;;
esac;
export PYTHON_INCLUDEDIR=${EPREFIX}${dir};
debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}"
;;
PYTHON_LIBPATH)
local libname;
case "${impl}" in
python*)
libname=lib${impl}
;;
*)
die "${impl} lacks a dynamic library"
;;
esac;
local path=${EPREFIX}/usr/$(get_libdir);
export PYTHON_LIBPATH=${path}/${libname}$(get_libname);
debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}"
;;
PYTHON_CFLAGS)
local val;
case "${impl}" in
python*)
val=$($(tc-getPKG_CONFIG) -cflags ${impl/n/n})
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_CFLAGS=${val};
debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}"
;;
PYTHON_LIBS)
local val;
case "${impl}" in
python*)
val=$($(tc-getPKG_CONFIG) -libs ${impl/n/n})
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_LIBS=${val};
debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}"
;;
PYTHON_PKG_DEP)
local d;
case ${impl} in
python2.7)
PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7'
;;
python3.3)
PYTHON_PKG_DEP='>=dev-lang/python-3.3.2-r2:3.3'
;;
python*)
PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
;;
pypy)
PYTHON_PKG_DEP='virtual/pypy:0='
;;
pypy3)
PYTHON_PKG_DEP='virtual/pypy3:0='
;;
jython2.5)
PYTHON_PKG_DEP='>=dev-java/jython-2.5.3-r2:2.5'
;;
jython2.7)
PYTHON_PKG_DEP='dev-java/jython:2.7'
;;
*)
die "Invalid implementation: ${impl}"
;;
esac;
if [[ -n ${PYTHON_REQ_USE} ]]; then
PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}];
fi;
export PYTHON_PKG_DEP;
debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}"
;;
PYTHON_SCRIPTDIR)
local dir;
export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl};
debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}"
;;
*)
die "python_export: unknown variable ${var}"
;;
esac;
done
}
python_export_utf8_locale ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ $(locale charmap) != UTF-8 ]]; then
if [[ -n ${LC_ALL} ]]; then
ewarn "LC_ALL is set to a locale with a charmap other than UTF-8.";
ewarn "This may trigger build failures in some python packages.";
return 1;
fi;
local lang locales="en_US.UTF-8 $(locale -a)";
for lang in ${locales};
do
if [[ $(LC_CTYPE=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then
export LC_CTYPE=${lang};
return 0;
fi;
done;
ewarn "Could not find a UTF-8 locale. This may trigger build failures in";
ewarn "some python packages. Please ensure that a UTF-8 locale is listed in";
ewarn "/etc/locale.gen and run locale-gen.";
return 1;
fi;
return 0
}
python_fix_shebang ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)";
local force quiet;
while [[ -n ${@} ]]; do
case "${1}" in
-f | --force)
force=1;
shift
;;
-q | --quiet)
quiet=1;
shift
;;
--)
shift;
break
;;
*)
break
;;
esac;
done;
[[ -n ${1} ]] || die "${FUNCNAME}: no paths given";
local path f;
for path in "$@";
do
local any_correct any_fixed is_recursive;
[[ -d ${path} ]] && is_recursive=1;
while IFS= read -r -d '' f; do
local shebang i;
local error= from=;
IFS= read -r shebang < ${f};
if [ ${shebang} == '#!'* ]; then
local split_shebang=();
read -r -a split_shebang <<< ${shebang};
for i in "${split_shebang[@]}";
do
case "${i}" in
*"${EPYTHON}")
debug-print "${FUNCNAME}: in file ${f#${D}}";
debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}";
any_correct=1;
from=${EPYTHON};
break
;;
*python | *python[23])
debug-print "${FUNCNAME}: in file ${f#${D}}";
debug-print "${FUNCNAME}: rewriting shebang: ${shebang}";
if [[ ${i} == *python2 ]]; then
from=python2;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" && error=1;
fi;
else
if [[ ${i} == *python3 ]]; then
from=python3;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" || error=1;
fi;
else
from=python;
fi;
fi;
break
;;
*python[23].[0123456789] | *pypy | *pypy3 | *jython[23].[0123456789])
if [[ ! -n ${force} ]]; then
error=1;
else
case "${i}" in
*python[23].[0123456789])
from="python[23].[0123456789]"
;;
*pypy)
from="pypy"
;;
*pypy3)
from="pypy3"
;;
*jython[23].[0123456789])
from="jython[23].[0123456789]"
;;
*)
die "${FUNCNAME}: internal error in 2nd pattern match"
;;
esac;
fi;
break
;;
esac;
done;
fi;
if [[ ! -n ${error} && ! -n ${from} ]]; then
[[ -n ${is_recursive} ]] && continue;
error=1;
fi;
if [[ ! -n ${quiet} ]]; then
einfo "Fixing shebang in ${f#${D}}.";
fi;
if [[ ! -n ${error} ]]; then
if [[ ${shebang} == ${from}" " ]]; then
sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die;
else
sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die;
fi;
any_fixed=1;
else
eerror "The file has incompatible shebang:";
eerror " file: ${f#${D}}";
eerror " current shebang: ${shebang}";
eerror " requested impl: ${EPYTHON}";
die "${FUNCNAME}: conversion of incompatible shebang requested";
fi;
done < <(find "${path}" -type f -print0);
if [[ ! -n ${any_fixed} ]]; then
eqawarn "QA warning: ${FUNCNAME}, ${path#${D}} did not match any fixable files.";
if [[ -n ${any_correct} ]]; then
eqawarn "All files have ${EPYTHON} shebang already.";
else
eqawarn "There are no Python files in specified directory.";
fi;
fi;
done
}
python_gen_any_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local depstr=${1};
[[ -n ${depstr} ]] || die "No dependency string provided";
local PYTHON_PKG_DEP out=;
for i in "${_PYTHON_ALL_IMPLS[@]}";
do
has "${i}" "${PYTHON_COMPAT[@]}" || continue;
local PYTHON_USEDEP="python_targets_${i},python_single_target_${i}";
python_export "${i}" PYTHON_PKG_DEP;
local i_depstr=${depstr//\${PYTHON_USEDEP}/${PYTHON_USEDEP}};
out="( ${PYTHON_PKG_DEP} ${i_depstr} ) ${out}";
done;
echo "|| ( ${out})"
}
python_generate_cffi_modules ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_generate_wrapper_scripts ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_CFLAGS ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_CFLAGS;
echo "${PYTHON_CFLAGS}"
}
python_get_LIBS ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_LIBS;
echo "${PYTHON_LIBS}"
}
python_get_extension_module_suffix ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_implementation ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_implementation_and_version ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_implementational_package ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_includedir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_INCLUDEDIR;
echo "${PYTHON_INCLUDEDIR}"
}
python_get_libdir ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_library ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_get_library_path ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_LIBPATH;
echo "${PYTHON_LIBPATH}"
}
python_get_scriptdir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_SCRIPTDIR;
echo "${PYTHON_SCRIPTDIR}"
}
python_get_sitedir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_SITEDIR;
echo "${PYTHON_SITEDIR}"
}
python_get_version ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_install_executables ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_is_installed ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON";
local -x ROOT=/;
case "${impl}" in
pypy | pypy3)
local append=;
if [[ -n ${PYTHON_REQ_USE} ]]; then
append=[${PYTHON_REQ_USE}];
fi;
has_version "dev-python/${impl}${append}" || has_version "dev-python/${impl}-bin${append}"
;;
*)
local PYTHON_PKG_DEP;
python_export "${impl}" PYTHON_PKG_DEP;
has_version "${PYTHON_PKG_DEP}"
;;
esac
}
python_is_python3 ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON";
[[ ${impl} == python3* || ${impl} == pypy3 ]]
}
python_merge_intermediate_installation_images ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_mod_cleanup ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
}
python_mod_optimize ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation"
}
python_moduleinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_moduleroot=${1}
}
python_need_rebuild ()
{
die "${FUNCNAME}() is invalid for python-r1 suite"
}
python_newexe ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
[ ${#} -eq 2 ] || die "Usage: ${FUNCNAME} <path> <new-name>";
local wrapd=${python_scriptroot:-${DESTTREE}/bin};
local f=${1};
local newfn=${2};
local PYTHON_SCRIPTDIR d;
python_export PYTHON_SCRIPTDIR;
d=${PYTHON_SCRIPTDIR#${EPREFIX}};
( dodir "${wrapd}";
exeinto "${d}";
newexe "${f}" "${newfn}" || die );
_python_ln_rel "${ED%/}"/usr/lib/python-exec/python-exec2 "${ED%/}/${wrapd}/${newfn}" || die;
if [[ -n ${_PYTHON_REWRITE_SHEBANG} ]]; then
python_fix_shebang -q "${ED%/}/${d}/${newfn}";
fi
}
python_newscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_newexe "${@}"
}
python_optimize ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then
eerror "The new Python eclasses expect the compiled Python files to";
eerror "be controlled by the Package Manager. For this reason,";
eerror "the python_optimize function can be used only during src_* phases";
eerror "(src_install most commonly) and not during pkg_* phases.";
echo;
die "python_optimize is not to be used in pre/post* phases";
fi;
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local PYTHON=${PYTHON};
[[ -n ${PYTHON} ]] || python_export PYTHON;
if [ ${#} -eq 0 ]; then
local f;
while IFS= read -r -d '' f; do
if [[ ${f} == /* && -d ${D}${f} ]]; then
set – "${D}${f}" "${@}";
fi;
done < <("${PYTHON}" -c 'import sys; print("\0".join(sys.path))');
debug-print "${FUNCNAME}: using sys.path: ${*/%/;}";
fi;
local d;
for d in "$@";
do
local instpath=${d#${D}};
instpath=/${instpath##/};
case "${EPYTHON}" in
python*)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
;;
*)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
;;
esac;
done
}
python_pkg_setup ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
}
python_scriptinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_scriptroot=${1}
}
python_set_active_version ()
{
die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup"
}
python_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ -n ${EPYTHON} ]]; then
if _python_EPYTHON_supported "${EPYTHON}"; then
python_export EPYTHON PYTHON;
python_wrapper_setup;
return;
fi;
fi;
local variant i;
for variant in '' '-python2' '-python3';
do
i=$(eselect python --show ${variant} 2>/dev/null);
if [[ ! -n ${i} ]]; then
break;
else
if _python_EPYTHON_supported "${i}"; then
python_export "${i}" EPYTHON PYTHON;
python_wrapper_setup;
return;
fi;
fi;
done;
local rev_impls=();
for i in "${_PYTHON_ALL_IMPLS[@]}";
do
if has "${i}" "${PYTHON_COMPAT[@]}"; then
rev_impls=("${i}" "${rev_impls[@]}");
fi;
done;
for i in "${rev_impls[@]}";
do
python_export "${i}" EPYTHON PYTHON;
if _python_EPYTHON_supported "${EPYTHON}"; then
python_wrapper_setup;
return;
fi;
done;
eerror "No Python implementation found for the build. This is usually";
eerror "a bug in the ebuild. Please report it to bugs.gentoo.org";
eerror "along with the build log.";
echo;
die "No supported Python implementation installed."
}
python_wrapper_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
local workdir=${1:-${T}/${EPYTHON}};
local impl=${2:-${EPYTHON}};
[[ -n ${workdir} ]] || die "${FUNCNAME}: no workdir specified.";
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified.";
if [[ ! -x ${workdir}/bin/python ]]; then
_python_check_dead_variables;
mkdir -p "${workdir}"/{bin,pkgconfig} || die;
rm -f "${workdir}"/bin/python{,2,3,-config};
rm -f "${workdir}"/bin/2to3;
rm -f "${workdir}"/pkgconfig/python{,2,3}.pc;
local EPYTHON PYTHON;
python_export "${impl}" EPYTHON PYTHON;
local pyver;
if python_is_python3; then
pyver=3;
else
pyver=2;
fi;
ln -s "${PYTHON}" "${workdir}"/bin/python || die;
ln -s python "${workdir}"/bin/python${pyver} || die;
local nonsupp=();
if [[ ${EPYTHON} == python* ]]; then
ln -s "${PYTHON}-config" "${workdir}"/bin/python-config || die;
lns "${PYTHON/python/2to3}" "${workdir}"/bin/2to3 || die;
lns "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n}.pc "${workdir}"/pkgconfig/python.pc || die;
ln -s python.pc "${workdir}"/pkgconfig/python${pyver}.pc || die;
else
nonsupp+=(2to3 python-config);
fi;
local x;
for x in "${nonsupp[@]}";
do
cat > "${workdir}"/bin/${x} <<_EOF_
#!/bin/sh
echo "${x} is not supported by ${EPYTHON}" >&2
exit 1
_EOF_
chmod +x "${workdir}"/bin/${x} || die;
done
if [[ ${PATH##:*} != ${workdir}/bin ]]; then
PATH=${workdir}/bin${PATH:+:${PATH}};
fi;
if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then
PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}};
fi;
export PATH PKG_CONFIG_PATH;
fi
}
raw-ldflags ()
{
local x input="$@";
[[ -z ${input} ]] && input=${LDFLAGS};
set --;
for x in ${input};
do
case ${x} in
-Wl,*)
x=${x#-Wl,};
set – "$@" ${x//,/ }
;;
*)
;;
esac;
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 ] && die "Usage: replace-flags <old flag> <new flag>";
local f var new;
for var in $(all-flag-vars);
do
new=();
for f in ${!var};
do
[[ ${f} == ${1} ]] && f=${2};
new+=("${f}");
done;
eval export ${var}=\""${new[*]}"\";
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
}
setup-allowed-flags () { ALLOWED_FLAGS="-pipe"; ALLOWED_FLAGS+=" -O -O1 -O2 -Os -Og -mcpu -march -mtune"; ALLOWED_FLAGS+=" -fstack-protector* -fsanitize=*"; ALLOWED_FLAGS+=" -fbounds-check -fbounds-checking -fno-strict-overflow"; ALLOWED_FLAGS+=" -fno-PIE -fno-pie -nopie -fno-unit-at-a-time"; ALLOWED_FLAGS+=" -g -g[0-9] -ggdb -ggdb[0-9] -gdwarf-* gstabs -gstabs+"; ALLOWED_FLAGS+=" -fno-ident -fpermissive -frecord-gcc-switches"; ALLOWED_FLAGS+=" -fdiagnostics*"; ALLOWED_FLAGS+=" -W* -w"; ALLOWED_FLAGS+=" -fno-stack-protector* -fabi-version=* -fno-strict-aliasing -fno-bounds-check -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer -fno-builtin*"; ALLOWED_FLAGS+=" -mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow -mno-popcnt -mno-abm -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mfloat-gprs -mspe -mno-spe -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mx32 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt -m*-toc -mfloat-abi -mfix-r10000 -mno-fix-r10000 -D* -U*"; ALLOWED_FLAGS+=" -mno-fma4 -mno-movbe -mno-xop -mno-lwp"; ALLOWED_FLAGS+=" -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm"; ALLOWED_FLAGS+=" -mno-avx2 -mno-bmi2 -mno-fma -mno-lzcnt"; ALLOWED_FLAGS+=" -mno-fxsr -mno-rtm -mno-xsave -mno-xsaveopt"; ALLOWED_FLAGS+=" -mno-avx512cd -mno-avx512er -mno-avx512f -mno-avx512pf -mno-sha"; ALLOWED_FLAGS+=" -I* -L* -R* -Wl,*"; export ALLOWED_FLAGS; return 0 }
src_compile () { cmake-utils_src_compile }
src_configure ()
{
tc-export CC;
use jit || append-cppflags -DENABLE_JIT=0 -DENABLE_YARR_JIT=0 -DENABLE_ASSEMBLER=0;
use alpha && append-ldflags "Wl,-no-relax";
use sparc && filter-flags "-mvis";
use ppc64 && append-flags "-mminimal-toc";
if ! use ia64; then
append-ldflags "Wl,-no-keep-memory";
fi;
if ! $(tc-getLD) --version | grep -q "GNU gold"; then
append-ldflags "Wl,-reduce-memory-overheads";
fi;
if has_version "<sys-libs/glibc-2.18"; then
append-cppflags "-D__STDC_LIMIT_MACROS";
fi;
local ruby_interpreter="";
if has_version "virtual/rubygems[ruby_targets_ruby22]"; then
ruby_interpreter="RUBY=$(type -P ruby22)";
else
if has_version "virtual/rubygems[ruby_targets_ruby21]"; then
ruby_interpreter="RUBY=$(type -P ruby21)";
else
if has_version "virtual/rubygems[ruby_targets_ruby20]"; then
ruby_interpreter="RUBY=$(type -P ruby20)";
else
ruby_interpreter="RUBY=$(type -P ruby19)";
fi;
fi;
fi;
local mycmakeargs=($(cmake-utils_use_enable test API_TESTS) $(cmake-utils_use_enable doc GTKDOC) $(cmake-utils_use_enable geoloc GEOLOCATION) $(cmake-utils_use_enable gstreamer VIDEO) $(cmake-utils_use_enable gstreamer WEB_AUDIO) $(cmake-utils_use_enable introspection) $(cmake-utils_use_enable jit) $(cmake-utils_use_enable libsecret CREDENTIAL_STORAGE) $(cmake-utils_use_enable spell SPELLCHECK SPELLCHECK) $(cmake-utils_use_enable webgl WEBGL) $(cmake-utils_use_find_package egl EGL) $(cmake-utils_use_find_package opengl OpenGL) -DCMAKE_BUILD_TYPE=Release -DENABLE_X11_TARGET=ON -DPORT=GTK -DENABLE_PLUGIN_PROCESS_GTK2=ON ${ruby_interpreter});
cmake-utils_src_configure
}
src_install ()
{
cmake-utils_src_install;
use jit && pax-mark m "${ED}usr/bin/jsc" "${ED}usr/libexec/webkit2gtk-4.0/WebKitWebProcess";
pax-mark m "${ED}usr/libexec/webkit2gtk-4.0/WebKitPluginProcess"{,2}
}
src_prepare ()
{
epatch "${FILESDIR}"/${PN}-2.6.0-{hppa,ia64}-platform.patch;
epatch "${FILESDIR}"/${PN}-2.6.0-ia64-malloc.patch;
gnome2_src_prepare
}
src_test () { use jit && pax-mark m $(list-paxables Programs/*[Tt]ests/*); cmake-utils_src_test }
src_unpack () { gnome2_src_unpack "$@" }
strip-flags ()
{
local x y var;
setup-allowed-flags;
set -f;
for var in $(all-flag-vars);
do
local new=();
for x in ${!var};
do
local flag=${x%%=*};
for y in ${ALLOWED_FLAGS};
do
if [[ -z ${flag%%${y}} ]]; then
new+=("${x}");
break;
fi;
done;
done;
if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then
new+=(-O2);
fi;
if [[ ${!var} != "${new[*]}" ]]; then
einfo "strip-flags: ${var}: changed '${!var}' to '${new[*]}'";
fi;
eval export ${var}=\""${new[*]}"\";
done;
set +f;
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} ]] && einfo "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
aarch64*be)
echo big
;;
aarch64)
echo little
;;
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*le)
echo little
;;
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 ()
{
tc-export_build_env;
CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
}
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-export_build_env ()
{
tc-export "$@";
: ${BUILD_CFLAGS:=-O1 -pipe};
: ${BUILD_CXXFLAGS:=-O1 -pipe};
: ${BUILD_CPPFLAGS:= };
: ${BUILD_LDFLAGS:= };
export BUILD_{C,CXX,CPP,LD}FLAGS;
local v;
for v in BUILD_{C,CXX,CPP,LD}FLAGS;
do
export ${v#BUILD_}_FOR_BUILD="${!v}";
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-getGO () { tc-getPROG GO gccgo "$@" }
tc-getLD () { tc-getPROG LD ld "$@" }
tc-getNM () { tc-getPROG NM nm "$@" }
tc-getOBJCOPY () { tc-getPROG OBJCOPY objcopy "$@" }
tc-getOBJDUMP () { tc-getPROG OBJDUMP objdump "$@" }
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 <omp.h>
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 ()
{
[[ ${CBUILD:-${CHOST}} != ${CHOST} ]]
}
tc-is-softfloat ()
{
local CTARGET=${CTARGET:-${CHOST}};
case ${CTARGET} in
bfin* | h8300*)
echo "only"
;;
*)
if [[ ${CTARGET//_/} == -softfloat]]; then
echo "yes";
else
if [[ ${CTARGET//_/} == -softfp]]; then
echo "softfp";
else
echo "no";
fi;
fi
;;
esac
}
tc-is-static-only ()
{
local host=${CTARGET:-${CHOST}};
[[ ${host} == -mint ]]
}
tc-ld-disable-gold ()
{
if ! tc-ld-is-gold "$@"; then
return;
fi;
ewarn "Forcing usage of the BFD linker instead of GOLD";
local ld=$(tc-getLD "$@");
local bfd_ld="${ld%% *}.bfd";
local path_ld=$(which "${bfd_ld}" 2>/dev/null);
[[ -e ${path_ld} ]] && export LD=${bfd_ld};
local major=$(gcc-major-version "$@");
local minor=$(gcc-minor-version "$@");
if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]]; then
if [[ -e ${path_ld} ]]; then
local d="${T}/bfd-linker";
mkdir -p "${d}";
ln -sf "${path_ld}" "${d}"/ld;
export LDFLAGS="${LDFLAGS} -B${d}";
else
die "unable to locate a BFD linker to bypass gold";
fi;
else
export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
fi
}
tc-ld-is-gold ()
{
local out;
out=$($(tc-getLD "$@") --version 2>&1);
if [[ ${out} == "GNU gold" ]]; then
return 0;
fi;
local base="${T}/test-tc-gold";
cat > "${base}.c" <<-EOF
int main() { return 0; }
EOF
out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}Wl,-version "${base}.c" -o "${base}" 2>&1);
rm -f "${base}"*;
if [[ ${out} == "GNU gold" ]]; then
return 0;
fi;
return 1
}
tc-ninja_magic_to_arch ()
{
function ninj ()
{
[[ ${type} == "kern" ]] && echo $1 || echo $2
};
local type=$1;
local host=$2;
[[z ${host} ]] && host=${CTARGET:${CHOST}};
local KV=${KV:-${KV_FULL}};
[[ ${type} == "kern" ]] && [[ -z ${KV} ]] && ewarn "QA: Kernel version could not be determined, please inherit kernel-2 or linux-info";
case ${host} in
aarch64*)
echo arm64
;;
alpha*)
echo alpha
;;
arm*)
echo arm
;;
avr*)
ninj avr32 avr
;;
bfin*)
ninj blackfin bfin
;;
c6x*)
echo c6x
;;
cris*)
echo cris
;;
frv*)
echo frv
;;
hexagon*)
echo hexagon
;;
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
;;
metag*)
echo metag
;;
microblaze*)
echo microblaze
;;
mips*)
echo mips
;;
nios2*)
echo nios2
;;
nios*)
echo nios
;;
or32*)
echo openrisc
;;
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
;;
riscv*)
echo riscv
;;
s390*)
echo s390
;;
score*)
echo score
;;
sh64*)
ninj sh64 sh
;;
sh*)
echo sh
;;
sparc64*)
ninj sparc64 sparc
;;
sparc*)
[[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
;;
tile*)
echo tile
;;
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
;;
xtensa*)
echo xtensa
;;
*)
echo unknown
;;
esac
}
test-flag-CC () { test-flag-PROG "CC" c "$1" }
test-flag-CXX () { test-flag-PROG "CXX" c++ "$1" }
test-flag-F77 () { test-flag-PROG "F77" f77 "$1" }
test-flag-FC () { test-flag-PROG "FC" f95 "$1" }
test-flag-PROG ()
{
local comp=$1;
local lang=$2;
local flag=$3;
[[ -z ${comp} || -z ${flag} ]] && return 1;
local cmdline=($(tc-get${comp}) -Werror -c -o /dev/null);
if "${cmdline[@]}" -x${lang} - < /dev/null > /dev/null 2>&1; then
"${cmdline[@]}" "${flag}" -x${lang} - < /dev/null > /dev/null 2>&1;
else
"${cmdline[@]}" "${flag}" -c -o /dev/null /dev/null > /dev/null 2>&1;
fi
}
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+=("${x}");
done;
echo "${flags[*]}";
[[ ${#flags[@]} -gt 0 ]]
}
test_version_info () { if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then return 0; else return 1; fi }
uclibctoolize () { die "Use elibtoolize" }use_if_iuse ()
{ in_iuse $1 || return 1; use $1 }validate_desktop_entries ()
{
_eutils_eprefix_init;
if [[ -x "${EPREFIX}"/usr/bin/desktop-file-validate ]]; then
einfo "Checking desktop entry validity";
local directories="";
for d in /usr/share/applications $@;
do
[[ -d ${ED}${d} ]] && directories="${directories} ${ED}${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:" | sede "s|error: ||" -e "s|${FILE}:|-|g" );
[[n $temp ]] && elog ${temp/-/${FILE/${ED}/}:};
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 1280x1024x24";
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} \"$@\"";
if has "${EAPI}" 2 3; then
${VIRTUALX_COMMAND} "$@";
retval=$?;
else
nonfatal ${VIRTUALX_COMMAND} "$@";
retval=$?;
fi;
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
}declare -x ABI="amd64" declare -x ABI_X86="32 64" declare -x ADD="attr bash-completion c++11 cairo consolekit dbus dhclient ffmpeg gallium glamor gnutls gtk3 id3tag jack jpeg2k ladspa libav lv2 networkmanager packagekit policykit pulseaudio ruby symlink theora udev unicode v4l vaapi vdpau vim-syntax vorbis webkit-gtk xattr xinerama" declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel ice1724 intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" 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 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 x ASFLAGS_x86=" -32" declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_3 python_targets_python2_7 hardened pax_kernel pic xtpax -jit -orc" declare – BUILD_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkit-gtk-2.6.6_build" declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" declare -x CAMERAS="ptp2" declare -x CBUILD="x86_64-pc-linux-gnu" declare -x CC="x86_64-pc-linux-gnu-gcc" declare -x CDEFINE_amd64="_ x86_64 _" declare -x CDEFINE_x86="_ i386 _" declare -x CFLAGS="-march=amdfam10 -O2 -pipe" declare -x CFLAGS_default declare -x CFLAGS_x86="-m32" declare – CHECKREQS_DISK_BUILD="18G" 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_x86="i686-pc-linux-gnu" declare – CMAKE_BINARY="cmake" declare – CMAKE_BUILD_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkit-gtk-2.6.6_build" declare – CMAKE_BUILD_TYPE="Gentoo" declare – CMAKE_EXPF="src_prepare src_configure src_compile src_test src_install" declare – CMAKE_MAKEFILE_GENERATOR="emake" declare – CMAKE_MIN_VERSION="2.8.12" declare – CMAKE_REMOVE_MODULES="yes" declare – CMAKE_REMOVE_MODULES_LIST="FindBLAS FindLAPACK" declare – CMAKE_USE_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkitgtk-2.6.6" declare – CMAKE_VERBOSE="ON" declare – CMAKE_WARN_UNUSED_CLI="no" declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" declare -x CPPFLAGS=" -DENABLE_JIT=0 -DENABLE_YARR_JIT=0 -DENABLE_ASSEMBLER=0" declare -x CPU_FLAGS_X86="3dnow 3dnowext mmx mmxext popcnt sse sse2 sse3 sse4a" declare -x CTARGET_default="x86_64-pc-linux-gnu" declare -x CXXFLAGS="-march=amdfam10 -O2 -pipe" declare -x DEFAULT_ABI="amd64" declare -x DEFINED_PHASES=" compile configure install postinst postrm preinst prepare pretend setup test unpack" declare DEPEND=" dev-db/sqlite:3= >=dev-libs/glib-2.36:2 >=dev-libs/icu-3.8.1-r1:= >=dev-libs/libxml2-2.8:2 >=dev-libs/libxslt-1.1.7 >=media-libs/fontconfig-2.8:1.0 >=media-libs/freetype-2.4.2:2 >=media-libs/harfbuzz-0.9.18:= [icu(+)] >=media-libs/libpng-1.4:0= media-libs/libwebp:= >=net-libs/libsoup-2.42:2.4 [introspection?] virtual/jpeg:0= >=x11-libs/cairo-1.10.2:= [X] >=x11-libs/gtk+-3.6.0:3 [X,introspection?] >=x11-libs/pango-1.30.0 x11-libs/libX11 x11-libs/libXrender x11-libs/libXt >=x11-libs/gtk+-2.24.10:2 egl? ( media-libs/mesa [egl] ) geoloc? ( >=app-misc/geoclue-2.1.5:2.0 ) gstreamer? ( >=media-libs/gstreamer-1.2:1.0 >=media-libs/gst-plugins-base-1.2:1.0 ) introspection? ( >=dev-libs/gobject-introspection-1.32.0 ) libsecret? ( app-crypt/libsecret ) opengl? ( virtual/opengl ) spell? ( >=app-text/enchant-0.22:= ) webgl? ( x11-libs/cairo [opengl] x11-libs/libXcomposite x11-libs/libXdamage ) ( >=dev-lang/python-2.7.5-r2:2.7 ) >=dev-lang/perl-5.10 ( virtual/rubygems [ruby_targets_ruby20] virtual/rubygems [ruby_targets_ruby21] virtual/rubygems [ruby_targets_ruby22] virtual/rubygems [ruby_targets_ruby19] ) >=app-accessibility/at-spi2-core-2.5.3 >=dev-libs/atk-2.8.0 >=dev-util/gtk-doc-am-1.10 >=dev-util/gperf-3.0.1 >=sys-devel/bison-2.4.3 >=sys-devel/flex-2.5.34 ( >=sys-devel/gcc-4.7 >=sys-devel/clang-3.3 ) sys-devel/gettext virtual/pkgconfig doc? ( >=dev-util/gtk-doc-1.10 ) geoloc? ( dev-util/gdbus-codegen ) introspection? ( jit? ( sys-apps/paxctl ) ) test? ( dev-lang/python:2.7 dev-python/pygobject:3 [python_targets_python2_7] x11-themes/hicolor-icon-theme jit? ( sys-apps/paxctl ) ) sys-devel/make >=dev-util/cmake-2.8.12 userland_GNU? ( >=sys-apps/findutils-4.4.0 ) app-arch/xz-utils >=sys-apps/sed-4 test? ( !prefix? ( x11-base/xorg-server [xvfb] ) x11-apps/xhost )" declare DESCRIPTION="Open source web browser engine" declare -x DESTTREE="/usr" declare -x DIROPTIONS="-m0755" declare -x DISABLED=" " declare -x EAPI="5" declare -x ELIBC="glibc" declare – ELTCONF="" declare -x ENABLED=" /var/lib/layman/causelay /var/lib/layman/dstien-portage /var/lib/layman/gamerlay /var/lib/layman/vortex " declare – EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch" declare – EPATCH_EXCLUDE="" declare – EPATCH_FORCE="no" declare – EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..." declare – EPATCH_OPTS="" declare – EPATCH_SINGLE_MSG="" declare – EPATCH_SOURCE="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/patch" declare – EPATCH_SUFFIX="patch.bz2" declare -x EPYTHON="python2.7" declare -x EXEOPTIONS="-m0755" declare -x FCFLAGS="-march=amdfam10 -O2 -pipe" 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} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x# /}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" declare -x FFLAGS="-march=amdfam10 -O2 -pipe" declare – G2CONF="" declare -x GCC_SPECS="" declare – GCONFTOOL_BIN="/usr/bin/gconftool-2" declare – GCONF_DEBUG="no" declare – GLIB_COMPILE_SCHEMAS="/usr/bin/glib-compile-schemas" declare – GNOME2_LA_PUNT="" declare – GNOME_ORG_MODULE="webkit-gtk" declare – GNOME_ORG_PVP="2.6" declare – GNOME_TARBALL_SUFFIX="xz" declare -x GOPATH="/root/Projects/go" declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" declare -x GRUB_PLATFORMS="efi-64 pc" declare -x GSETTINGS_BACKEND="dconf" declare -x GST_REGISTRY="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/registry.xml" declare – GTK_UPDATE_ICON_CACHE="/usr/bin/gtk-update-icon-cache" declare -x G_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp" declare HDEPEND="" declare -x HG="/usr/bin/hg" declare -x HISTCONTROL="ignoreboth:erasedups" declare HOMEPAGE="http://www.webkitgtk.org/" declare -x INHERITED=" multilib toolchain-funcs eutils check-reqs flag-o-matic cmake-utils fdo-mime libtool versionator gnome.org gnome2-utils gnome2 pax-utils python-utils-r1 python-any-r1 virtualx" declare -x INPUT_DEVICES="evdev synaptics" declare -x INSDESTTREE="" declare -x INSOPTIONS="-m0644" declare IUSE="coverage doc +egl +geoloc +gstreamer +introspection +jit libsecret +opengl spell +webgl test" declare -x IUSE_EFFECTIVE="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 coverage doc egl elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_glibc elibc_mintlib elibc_musl elibc_uclibc geoloc gstreamer hppa hppa-hpux ia64 ia64-hpux ia64-linux introspection jit kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux libsecret m68k m68k-mint mips nios2 opengl ppc ppc-aix ppc-macos ppc-openbsd ppc64 ppc64-linux prefix prefix-guest s390 sh sparc sparc-fbsd sparc-solaris sparc64-freebsd sparc64-solaris spell test userland_BSD userland_GNU webgl x64-cygwin x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt" declare -x IUSE_IMPLICIT="prefix prefix-guest" declare -x JAVAC="/etc/java-config-2/current-system-vm/bin/javac" declare -x JAVA_HOME="/etc/java-config-2/current-system-vm" declare -x JDK_HOME="/etc/java-config-2/current-system-vm" declare -x KERNEL="linux" declare -x KERNEL_ABI="amd64" declare -x KEYWORDS="*" declare -x LADSPA_PATH="/usr/lib64/ladspa" declare -x LANG="en_US.UTF-8" declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" declare -x LC_COLLATE="POSIX" declare -x LC_MESSAGES="C" declare x LDFLAGS="-Wl,-O1 -Wl, sort-common -Wl, as-needed -Wl, no-keep-memory -Wl, -reduce-memory-overheads" declare -x LDFLAGS_default 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_ppc="lib32" declare -x LIBDIR_ppc64="lib64" declare -x LIBDIR_sparc32="lib32" declare -x LIBDIR_sparc64="lib64" declare -x LIBDIR_x86="lib32" declare -x LIBDIR_x86_fbsd="lib32" declare -x LIBOPTIONS="-m0644" declare -x LIBREOFFICE_EXTENSIONS="nlpsolver" declare -x LICENSE="LGPL-2+ BSD" declare -x LINGUAS="en es en_US es_MX es_LA" declare -x MAKEOPTS="-j7 -l6" 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)" declare – MY_P="webkitgtk-2.6.6" declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml" declare -x OFFICE_IMPLEMENTATION="libreoffice" declare -x OPENCL_PROFILE="mesa" declare -x OPENGL_PROFILE="xorg-x11" declare -x PATH="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/python2.7/bin:/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.9.2" declare – PAX_MARKINGS="PT" declare PDEPEND="" declare -x PHP_TARGETS="php5-6" declare -x PKG_CONFIG_PATH="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/python2.7/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/webkit-gtk-2.6.6/html")' declare – PREFIX="/usr" declare -x PRELINK_PATH_MASK="/usr/lib64/libfreebl3.so:/usr/lib64/libnssdbm3.so:/usr/lib64/libsoftokn3.so:/usr/lib32/libfreebl3.so:/usr/lib32/libnssdbm3.so:/usr/lib32/libsoftokn3.so" declare -x PROFILE_IS_HARDENED="1" declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND" declare -x PROPERTIES="" declare -x PROVIDE="" declare -x PYTHON="/usr/bin/python2.7" declare -x PYTHONDONTWRITEBYTECODE="1" declare -x PYTHON_ABIS="2.7 3.3" declare -a PYTHON_COMPAT='( [0] ="python2_7")' declare – PYTHON_DEPS="|| ( >=dev-lang/python-2.7.5-r2:2.7 )" declare -x PYTHON_SINGLE_TARGET="python2_7" declare -x PYTHON_TARGETS="python2_7 python3_3" declare -x QEMU_SOFTMMU_TARGETS="i386 x86_64" declare -x QEMU_USER_TARGETS="i386 x86_64" declare -x QT_GRAPHICSSYSTEM="opengl" declare RDEPEND=" dev-db/sqlite:3= >=dev-libs/glib-2.36:2 >=dev-libs/icu-3.8.1-r1:= >=dev-libs/libxml2-2.8:2 >=dev-libs/libxslt-1.1.7 >=media-libs/fontconfig-2.8:1.0 >=media-libs/freetype-2.4.2:2 >=media-libs/harfbuzz-0.9.18:= [icu(+)] >=media-libs/libpng-1.4:0= media-libs/libwebp:= >=net-libs/libsoup-2.42:2.4 [introspection?] virtual/jpeg:0= >=x11-libs/cairo-1.10.2:= [X] >=x11-libs/gtk+-3.6.0:3 [X,introspection?] >=x11-libs/pango-1.30.0 x11-libs/libX11 x11-libs/libXrender x11-libs/libXt >=x11-libs/gtk+-2.24.10:2 egl? ( media-libs/mesa [egl] ) geoloc? ( >=app-misc/geoclue-2.1.5:2.0 ) gstreamer? ( >=media-libs/gstreamer-1.2:1.0 >=media-libs/gst-plugins-base-1.2:1.0 ) introspection? ( >=dev-libs/gobject-introspection-1.32.0 ) libsecret? ( app-crypt/libsecret ) opengl? ( virtual/opengl ) spell? ( >=app-text/enchant-0.22:= ) webgl? ( x11-libs/cairo [opengl] x11-libs/libXcomposite x11-libs/libXdamage ) " declare -x REMOVE="-bluetooth -nss -dhcpcd" declare REPOSITORY declare REQUIRED_USE=" geoloc? ( introspection ) introspection? ( gstreamer ) webgl? ( opengl ) " declare -x RESTRICT="" declare -x RESUMECOMMAND_RSYNC="rsync -avP \"\${URI}\" \"\${DISTDIR}/\${FILE}\"" 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} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x# /}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" declare -x RUBY_TARGETS="ruby19 ruby20 ruby21 ruby22" declare -x S="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/work/webkitgtk-2.6.6" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_PID="13673" declare -x SANDBOX_PREDICT="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/homedir:/dev/crypto:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig" declare -x SANDBOX_READ="/:/var/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/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/net-libs/webkit-gtk-2.6.6/homedir/.bash_history" declare – SCROLLKEEPER_DIR="/var/lib/scrollkeeper" declare – SCROLLKEEPER_UPDATE_BIN="/usr/bin/scrollkeeper-update" declare -x SHELL="/bin/bash" declare -x SLOT="4/37" declare SRC_URI="http://www.webkitgtk.org/releases/webkitgtk-2.6.6.tar.xz" declare -x STAGE1_USE="multilib nptl nptlonly unicode" declare -x SYMLINK_LIB="yes" declare -x SYNC_USER="root" declare -x TENGINE_SHARED_MODULES_HTTP="access addition autoindex browser charset_filter empty_gif fastcgi flv footer_filter geoip image_filter limit_conn limit_req lua map memcached mp4 random_index referer reqstat rewrite scgi secure_link slice split_clients sub sysguard tfs trim_filter upstream_ip_hash upstream_least_conn upstream_session_sticky user_agent userid_filter uwsgi xslt" declare -x TENGINE_STATIC_MODULES_HTTP="concat dav degradation geo gunzip gzip gzip_static perl proxy realip spdy ssi ssl stub_status upstream-rbtree upstream_check upstream_consistent_hash upstream_keepalive" declare -x USE="amd64 egl elibc_glibc gstreamer introspection kernel_linux opengl userland_GNU webgl" declare -x USERLAND="GNU" declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND" declare -x USE_EXPAND_UNPREFIXED="ARCH" declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips nios2 ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-cygwin x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt" declare -x USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mintlib musl NetBSD OpenBSD SunOS uclibc Winnt" declare -x USE_EXPAND_VALUES_KERNEL="AIX Darwin FreeBSD freemint HPUX linux NetBSD OpenBSD SunOS Winnt" declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU" declare -x VIDEO_CARDS="radeon radeonsi" declare – VIRTUALX_COMMAND="emake" declare – VIRTUALX_DEPEND=" !prefix? ( x11-base/xorg-server [xvfb] ) x11-apps/xhost " declare – VIRTUALX_REQUIRED="test" declare -x VISUAL="/usr/bin/vi" declare – WANT_CMAKE="always" declare -x XDG_CACHE_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/.cache" declare -x XDG_CONFIG_DIRS="/etc/xdg" declare -x XDG_CONFIG_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp" declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share:/usr/share/mesa/xdg:/usr/share/gdm" declare -x XDG_DATA_HOME="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/.local/share" declare -x XDG_RUNTIME_DIR="/var/tmp/portage/net-libs/webkit-gtk-2.6.6/temp/run" 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 – _CMAKE_UTILS_ECLASS="1" declare – _EUTILS_ECLASS="1" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_="" declare – _FLAG_O_MATIC_ECLASS="1" declare – _LIBTOOL_ECLASS="1" declare – _LIBTOOL_ECLASSDIR_LOCAL="/usr/portage/eclass" declare – _MULTILIB_ECLASS="1" declare – _PAX_UTILS_ECLASS="1" declare -a _PYTHON_ALL_IMPLS='( [0] ="jython2_5" [1] ="jython2_7" [2] ="pypy" [3] ="pypy3" [4] ="python3_3" [5] ="python3_4" [6] ="python2_7")' declare – _PYTHON_ANY_R1="1" declare – _PYTHON_UTILS_R1="1" declare – _TOOLCHAIN_FUNCS_ECLASS="1" declare – _VERSIONATOR_ECLASS="1" declare – conf="webkit-gtk-2.6.6-r0" declare – phase_func ELT_libtool_version () { ( unset VERSION; eval $(grep -e '^[ [:space:] ]*VERSION=' "$1"); echo "${VERSION:-0}" ) } ELT_try_and_apply_patch () { local ret=0; local file=$1; local patch=$2; local src=$3; local disp="${src} patch"; local log="${T}/elibtool.log"; if [[ -z ${_ELT_NOTED_TMP} ]]; then _ELT_NOTED_TMP=true; printf 'temp patch: %s\n' "${patch}" > "${log}"; fi; printf '\nTrying %s\n' "${disp}" >> "${log}"; if [[ ! -e ${file} ]]; then echo "File not found: ${file}" >> "${log}"; return 1; fi; local perms="$(find ${file} -maxdepth 0 -printf '%m')"; if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1; then einfo " Applying ${disp} ..."; patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1; ret=$?; export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}"; else ret=1; fi; chmod "${perms}" "${file}"; return "${ret}" } ELT_walk_patches () { local patch tmp; local ret=1; local file=$1; local patch_set=$2; local patch_dir="$(elt_patch_dir)/${patch_set}"; local rem_int_dep=$3; [[ -z ${patch_set} ]] && return 1; [[ ! -d ${patch_dir} ]] && return 1; local sed_args=(-e "s:@GENTOO_LIBDIR@:$(get_libdir):g"); if [[ -n ${rem_int_dep} ]]; then sed_args+=(-e "s|@REM_INT_DEP@|${rem_int_dep}|g"); fi; pushd "$(elt_patch_dir)" > /dev/null || die; for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r); do tmp="${T}/libtool-elt.patch"; sed "${sed_args [@] }" "${patch}" > "${tmp}" || die; if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}"; then ret=0; break; fi; done; popd > /dev/null; return ${ret} } PYTHON () { die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#.24.28PYTHON.29.2C_.24.7BEPYTHON.7D " } VER_major () { [[ -z $1 ]] && return 1; local VER=$@; echo "${VER%%[^ [:digit:] ]*}" } VER_micro () { [[ -z $1 ]] && return 1; local VER=$@; VER=${VER# . .}; echo "${VER%%[^ [:digit:] ]*}" } VER_minor () { [[ -z $1 ]] && return 1; local VER=$@; VER=${VER#*.}; echo "${VER%%[^ [:digit:] ]*}" } VER_to_int () { [[ -z $1 ]] && return 1; local VER_MAJOR=$(VER_major "$1"); local VER_MINOR=$(VER_minor "$1"); local VER_MICRO=$(VER_micro "$1"); local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO )); if [[ ${VER_int} -ge 65536 ]]; then echo "${VER_int}"; return 0; fi; echo 1; return 1 } 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 "$@" } _check_build_dir () { : ${CMAKE_USE_DIR:=${S}}; if [[ -n ${CMAKE_IN_SOURCE_BUILD} ]]; then BUILD_DIR="${CMAKE_USE_DIR}"; else if [[ ! -n ${BUILD_DIR} && -n ${CMAKE_BUILD_DIR} ]]; then eqawarn "The CMAKE_BUILD_DIR variable has been renamed to BUILD_DIR."; eqawarn "Please migrate the ebuild to use the new one."; _RESPECT_CMAKE_BUILD_DIR=1; fi; if [[ -n ${_RESPECT_CMAKE_BUILD_DIR} ]]; then BUILD_DIR=${CMAKE_BUILD_DIR:-${WORKDIR}/${P}_build}; else : ${BUILD_DIR:=${WORKDIR}/${P}_build}; fi; fi; CMAKE_BUILD_DIR=${BUILD_DIR}; mkdir -p "${BUILD_DIR}"; echo ">>> Working in BUILD_DIR: \"$BUILD_DIR\"" } _epatch_draw_line () { [[ -z $1 ]] && set "$(printf "%65s" '')"; echo "${1//?/=}" } _eutils_eprefix_init () { has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}} } _execute_optionally () { 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=$1 new=(); shift; for f in ${!var}; do for x in "$@"; do [[ ${f} == ${x} ]] && continue 2; done; 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" } _generator_to_use () { local generator_name; case ${CMAKE_MAKEFILE_GENERATOR} in ninja) generator_name="Ninja" ;; emake) generator_name="Unix Makefiles" ;; *) eerror "Unknown value for \${CMAKE_MAKEFILE_GENERATOR}"; die "Value ${CMAKE_MAKEFILE_GENERATOR} is not supported" ;; esac; echo ${generator_name} } _iconins () { ( local funcname=$1; shift; local size dir; local context=apps; local theme=hicolor; while [ $# -gt 0 ] ; do case $1 in -s | --size) if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then size=${2%%x*}; else size=${2}; fi; case ${size} in 16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256 | 512) size=${size}x${size} ;; scalable) ;; *) eerror "${size} is an unsupported icon size!"; exit 1 ;; esac; shift 2 ;; -t | --theme) theme=${2}; shift 2 ;; -c | --context) context=${2}; shift 2 ;; *) if [[ -z ${size} ]]; then insinto /usr/share/pixmaps; else insinto /usr/share/icons/${theme}/${size}/${context}; fi; if [[ ${funcname} == doicon ]]; then if [[ -f $1 ]]; then doins "${1}"; else if [[ -d $1 ]]; then shopt -s nullglob; doins "${1}"/*. {png,svg} ; shopt -u nullglob; else eerror "${1} is not a valid file/directory!"; exit 1; fi; fi; else break; fi; shift 1 ;; esac; done; if [[ ${funcname} == newicon ]]; then newins "$@"; fi ) || die } _is_flagq () { local x var; eval var=\""\${$1 [*] }"\"; for x in ${var}; do [[ ${x} == $2 ]] && return 0; done; return 1 } _modify-cmakelists () { debug-print-function ${FUNCNAME} "$@"; grep -qs "<<< Gentoo configuration >>>" "${CMAKE_USE_DIR}"/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 } _ninjaopts_from_makeopts () { if [[ ${NINJAOPTS+set} == set ]]; then return 0; fi; local ninjaopts=(); set – ${MAKEOPTS}; while (( $# )); do case $1 in -j | -l | -k) ninjaopts+=($1 $2); shift 2 ;; -j* | -l* | -k*) ninjaopts+=($1); shift 1 ;; *) shift ;; esac; done; export NINJAOPTS="${ninjaopts [*] }" } _pax_list_files () { local f cmd; cmd=$1; shift; for f in "$@"; do ${cmd} " ${f}"; done } _python_EPYTHON_supported () { debug-print-function ${FUNCNAME} "${@}"; local EPYTHON=${1}; local i=${EPYTHON/./_}; case "${i}" in python* | jython* | pypy*) ;; *) ewarn "Invalid EPYTHON: ${EPYTHON}"; return 1 ;; esac; if has "${i}" "${PYTHON_COMPAT [@] }"; then if python_is_installed "${i}"; then if declare -f python_check_deps > /dev/null; then local PYTHON_USEDEP="python_targets_${i} ,python_single_target_${i} "; python_check_deps; return ${?}; fi; return 0; fi; else if ! has "${i}" "${_PYTHON_ALL_IMPLS [@] }"; then ewarn "Invalid EPYTHON: ${EPYTHON}"; fi; fi; return 1 } _python_build_set_globals () { local usestr i PYTHON_PKG_DEP; [[ -n ${PYTHON_REQ_USE} ]] && usestr=" [${PYTHON_REQ_USE}] "; for i in "${PYTHON_COMPAT [@] }"; do _python_impl_supported "${i}"; done; PYTHON_DEPS=; for i in "${_PYTHON_ALL_IMPLS [@] }"; do has "${i}" "${PYTHON_COMPAT [@] }" || continue; python_export "${i}" PYTHON_PKG_DEP; PYTHON_DEPS="${PYTHON_PKG_DEP} ${PYTHON_DEPS}"; done; PYTHON_DEPS="|| ( ${PYTHON_DEPS})" } _python_check_dead_variables () { local v; for v in PYTHON_DEPEND PYTHON_USE_WITH {,_OR,_OPT} {RESTRICT,SUPPORT} _PYTHON_ABIS; do if [[ -n ${!v} ]]; then die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Ebuild_head "; fi; done; for v in PYTHON_ {CPPFLAGS,CFLAGS,CXXFLAGS,LDFLAGS} ; do if [[ -n ${!v} ]]; then die "${v} is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#PYTHON_CFLAGS "; fi; done; for v in PYTHON_TESTS_RESTRICTED_ABIS PYTHON_EXPORT_PHASE_FUNCTIONS PYTHON_VERSIONED_ {SCRIPTS,EXECUTABLES} PYTHON_NONVERSIONED_EXECUTABLES; do if [[ -n ${!v} ]]; then die "${v} is invalid for python-r1 suite"; fi; done; for v in DISTUTILS_USE_SEPARATE_SOURCE_DIRECTORIES DISTUTILS_SETUP_FILES DISTUTILS_GLOBAL_OPTIONS DISTUTILS_SRC_TEST PYTHON_MODNAME; do if [[ -n ${!v} ]]; then die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#$ {v}"; fi; done; if [[ -n ${DISTUTILS_DISABLE_TEST_DEPENDENCY} ]]; then die "${v} is invalid for distutils-r1, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#DISTUTILS_SRC_TEST "; fi; for v in PYTHON_BDEPEND PYTHON_MULTIPLE_ABIS PYTHON_ABI_TYPE PYTHON_RESTRICTED_ABIS PYTHON_TESTS_FAILURES_TOLERANT_ABIS PYTHON_CFFI_MODULES_GENERATION_COMMANDS; do if [[ -n ${!v} ]]; then die "${v} is invalid for python-r1 suite"; fi; done } _python_impl_supported () { debug-print-function ${FUNCNAME} "${@}"; [ ${#} -eq 1 ] || die "${FUNCNAME}: takes exactly 1 argument (impl)."; local impl=${1}; case "${impl}" in python2_7 | python3_ [34] | jython2_ [57] ) return 0 ;; pypy1_ [89] | pypy2_0 | python2_ [56] | python3_ [12] ) return 1 ;; pypy | pypy3) if [[ ${EAPI:-0} == [01234] ]]; then die "PyPy is supported in EAPI 5 and newer only."; fi ;; *) die "Invalid implementation in PYTHON_COMPAT: ${impl}" ;; esac } _python_ln_rel () { debug-print-function ${FUNCNAME} "${@}"; local target=${1}; local symname=${2}; local tgpath=${target%/*}/; local sympath=${symname%/*}/; local rel_target=; while [[ -n ${sympath} ]]; do local tgseg= symseg=; while [[ ! -n ${tgseg} && -n ${tgpath} ]]; do tgseg=${tgpath%%/*}; tgpath=${tgpath#${tgseg}/}; done; while [[ ! -n ${symseg} && -n ${sympath} ]]; do symseg=${sympath%%/*}; sympath=${sympath#${symseg}/}; done; if [[ ${tgseg} != ${symseg} ]]; then rel_target=../${rel_target}${tgseg:+${tgseg}/}; fi; done; rel_target+=${tgpath}${target##*/}; debug-print "${FUNCNAME}: ${symname} -> ${target}"; debug-print "${FUNCNAME}: rel_target = ${rel_target}"; ln -fs "${rel_target}" "${symname}" } _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 <USE flag> [<flag name>] "; 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 <USE flag> [<flag name>] "; 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 } all-flag-vars () { echo {C,CPP,CXX,CCAS,F,FC,LD} FLAGS } append-cflags () { [[ $# -eq 0 ]] && return 0; export CFLAGS+=" $*"; return 0 } append-cppflags () { [[ $# -eq 0 ]] && return 0; export CPPFLAGS+=" $*"; return 0 } append-cxxflags () { [[ $# -eq 0 ]] && return 0; export CXXFLAGS+=" $*"; return 0 } append-fflags () { [[ $# -eq 0 ]] && return 0; export FFLAGS+=" $*"; export FCFLAGS+=" $*"; return 0 } append-flags () { [[ $# -eq 0 ]] && return 0; case " $* " in *' '-[DIU]*) eqawarn 'please use append-cppflags for preprocessor flags' ;; *' '-L* | *' '-Wl,*) eqawarn 'please use append-ldflags for linker flags' ;; esac; append-cflags "$@"; append-cxxflags "$@"; append-fflags "$@"; return 0 } append-ldflags () { [ $# -eq 0 ] && return 0; local flag; for flag in "$@"; do [[ ${flag} == -l* ]] && eqawarn "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 if [[ -z "${flag// }" ]]; then eqawarn "Appending an empty argument to LIBS is invalid! Skipping."; continue; fi; case $flag in - [lL] *) export LIBS="${LIBS} ${flag}" ;; -*) eqawarn "Appending non-library to LIBS (${flag}); Other linker flags should be passed via LDFLAGS"; export LIBS="${LIBS} ${flag}" ;; *) export LIBS="${LIBS} -l${flag}" ;; esac; done; return 0 } built_with_use () { _eutils_eprefix_init; 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=${EROOT}/var/db/pkg/${PKG}/USE; local IUSEFILE=${EROOT}/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" ]] } check-reqs_disk () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${2} ]] && die "Usage: ${FUNCNAME} [path] [size] "; local path=${1}; local size=${2}; local space_megs; check-reqs_start_phase ${size} "disk space at \"${path}\""; space_megs=$(df -Pm "${1}" 2>/dev/null | awk 'FNR == 2 {print $4} '); if [[ $? == 0 && -n ${space_megs} ]]; then if [[ ${space_megs} -lt $(check-reqs_get_mebibytes ${size}) ]]; then eend 1; check-reqs_unsatisfied ${size} "disk space at \"${path}\""; else eend 0; fi; else eend 1; ewarn "Couldn't determine disk space, skipping..."; fi } check-reqs_get_mebibytes () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size] "; local unit=${1 -1)}; local size=${1% [GMT] }; case ${unit} in G) echo $((1024 * size)) ;; [M0-9] ) echo ${size} ;; T) echo $((1024 * 1024 * size)) ;; *) die "${FUNCNAME}: Unknown unit: ${unit}" ;; esac } check-reqs_get_number () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size] "; local unit=${1 -1)}; local size=${1% [GMT] }; if [[ ${size} == ${1} ]]; then ewarn "QA: Package does not specify unit for the size check"; ewarn "QA: Assuming mebibytes."; ewarn "QA: File bug against the package. It should specify the unit."; fi; echo ${size} } check-reqs_get_unit () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size] "; local unit=${1 -1)}; case ${unit} in G) echo "GiB" ;; [M0-9] ) echo "MiB" ;; T) echo "TiB" ;; *) die "${FUNCNAME}: Unknown unit: ${unit}" ;; esac } check-reqs_memory () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${1} ]] && die "Usage: ${FUNCNAME} [size] "; local size=${1}; local actual_memory; check-reqs_start_phase ${size} "RAM"; if [[ -r /proc/meminfo ]]; then actual_memory=$(awk '/MemTotal/ { print $2 } ' /proc/meminfo); else actual_memory=$(sysctl hw.physmem 2>/dev/null ); [[ "$?" == "0" ]] && actual_memory=$(echo $actual_memory | sed -e 's/^ [^:=] * [:=] //' ); fi; if [[ -n ${actual_memory} ]]; then if [[ ${actual_memory} -lt $((1024 * $(check-reqs_get_mebibytes ${size}))) ]]; then eend 1; check-reqs_unsatisfied ${size} "RAM"; else eend 0; fi; else eend 1; ewarn "Couldn't determine amount of memory, skipping..."; fi } check-reqs_output () { debug-print-function ${FUNCNAME} "$@"; local msg="ewarn"; [[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && msg="eerror"; if [[ -n ${CHECKREQS_FAILED} ]]; then ${msg}; ${msg} "Space constrains set in the ebuild were not met!"; ${msg} "The build will most probably fail, you should enhance the space"; ${msg} "as per failed tests."; ${msg}; [[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && die "Build requirements not met!"; fi } check-reqs_pkg_pretend () { debug-print-function ${FUNCNAME} "$@"; check-reqs_pkg_setup "$@" } check-reqs_pkg_setup () { debug-print-function ${FUNCNAME} "$@"; check-reqs_prepare; check-reqs_run; check-reqs_output } check-reqs_prepare () { debug-print-function ${FUNCNAME} "$@"; if [[ -z ${CHECKREQS_MEMORY} && -z ${CHECKREQS_DISK_BUILD} && -z ${CHECKREQS_DISK_USR} && -z ${CHECKREQS_DISK_VAR} ]]; then eerror "Set some check-reqs eclass variables if you want to use it."; eerror "If you are user and see this message file a bug against the package."; die "${FUNCNAME}: check-reqs eclass called but not actualy used!"; fi } check-reqs_run () { debug-print-function ${FUNCNAME} "$@"; unset CHECKREQS_FAILED; if [[ ${MERGE_TYPE} != binary ]]; then [[ -n ${CHECKREQS_MEMORY} ]] && check-reqs_memory ${CHECKREQS_MEMORY}; [[ -n ${CHECKREQS_DISK_BUILD} ]] && check-reqs_disk "${T}" "${CHECKREQS_DISK_BUILD}"; fi; if [[ ${MERGE_TYPE} != buildonly ]]; then [[ -n ${CHECKREQS_DISK_USR} ]] && check-reqs_disk "${EROOT}/usr" "${CHECKREQS_DISK_USR}"; [[ -n ${CHECKREQS_DISK_VAR} ]] && check-reqs_disk "${EROOT}/var" "${CHECKREQS_DISK_VAR}"; fi } check-reqs_start_phase () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${2} ]] && die "Usage: ${FUNCNAME} [size] [location] "; local size=${1}; local location=${2}; local sizeunit="$(check-reqs_get_number ${size}) $(check-reqs_get_unit ${size})"; ebegin "Checking for at least ${sizeunit} ${location}" } check-reqs_unsatisfied () { debug-print-function ${FUNCNAME} "$@"; [[ -z ${2} ]] && die "Usage: ${FUNCNAME} [size] [location] "; local msg="ewarn"; local size=${1}; local location=${2}; local sizeunit="$(check-reqs_get_number ${size}) $(check-reqs_get_unit ${size})"; [[ ${EBUILD_PHASE} == "pretend" && -z ${I_KNOW_WHAT_I_AM_DOING} ]] && msg="eerror"; ${msg} "There is NOT at least ${sizeunit} ${location}"; CHECKREQS_FAILED="true" } check_license () { die "you no longer need this as portage supports ACCEPT_LICENSE itself" } check_reqs () { debug-print-function ${FUNCNAME} "$@"; echo; ewarn "QA: Package calling old ${FUNCNAME} function."; ewarn "QA: Please file a bug against the package."; ewarn "QA: It should call check-reqs_pkg_pretend and check-reqs_pkg_setup"; ewarn "QA: and possibly use EAPI=4 or later."; echo; check-reqs_pkg_setup "$@" } cmake-utils_src_compile () { _execute_optionally "src_compile" "$@" } cmake-utils_src_configure () { _execute_optionally "src_configure" "$@" } cmake-utils_src_install () { _execute_optionally "src_install" "$@" } cmake-utils_src_make () { debug-print-function ${FUNCNAME} "$@"; _check_build_dir; pushd "${BUILD_DIR}" > /dev/null; ${CMAKE_MAKEFILE_GENERATOR}_src_make "$@"; popd > /dev/null } cmake-utils_src_prepare () { _execute_optionally "src_prepare" "$@" } cmake-utils_src_test () { _execute_optionally "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_find_package () { _use_me_now_inverted CMAKE_DISABLE_FIND_PACKAGE_ "$@" } 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_ "$@" } cmake-utils_useno () { _use_me_now_inverted "" "$@" } comment_add_subdirectory () { if [[ -z ${1} ]]; then die "comment_add_subdirectory must be passed the directory name to comment"; fi; if [[ -e "CMakeLists.txt" ]]; then sed -e "/add_subdirectory[ [:space:] ] ([ [:space:] ] ${1//\// /}[ [:space:] ]*)/s/^/#DONOTCOMPILE /" -i CMakeLists.txt || die "failed to comment add_subdirectory(${1})"; fi } darwintoolize () { die "Use elibtoolize" } delete_all_version_separators () { replace_all_version_separators "" "${1}" } delete_version_separator () { replace_version_separator "${1}" "" "${2}" } doicon () { _iconins ${FUNCNAME} "$@" } 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 () { local CBUILD=${CBUILD:-${CHOST}}; tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@" } 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 } einstalldocs () { debug-print-function ${FUNCNAME} "${@}"; local dodoc_opts=-r; has ${EAPI} 0 1 2 3 && dodoc_opts=; if ! declare -p DOCS &> /dev/null; then local d; for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG; do if [[ -s ${d} ]]; then dodoc "${d}" || die; fi; done; else if [[ $(declare -p DOCS) == "declare -a"* ]]; then if [[ -n ${DOCS [@] } ]]; then dodoc ${dodoc_opts} "${DOCS [@] }" || die; fi; else if [[ -n ${DOCS} ]]; then dodoc ${dodoc_opts} ${DOCS} || die; fi; fi; fi; if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then if [[ -n ${HTML_DOCS [@] } ]]; then dohtml -r "${HTML_DOCS [@] }" || die; fi; else if [[ -n ${HTML_DOCS} ]]; then dohtml -r ${HTML_DOCS} || die; fi; fi; return 0 } elibtoolize () { local x; local dirs=(); local do_portage="no"; local do_reversedeps="no"; local do_only_patches="no"; local do_uclibc="yes"; local deptoremove=; local do_shallow="no"; local force="false"; local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed target-nm"; for x in "$@"; do case ${x} in --portage) do_portage="yes" ;; --reverse-deps) do_reversedeps="yes"; elt_patches+=" fix-relink" ;; --patch-only) do_only_patches="yes" ;; --remove-internal-dep=*) deptoremove=${x#--remove-internal-dep=}; [[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep" ;; --shallow) do_shallow="yes" ;; --no-uclibc) do_uclibc="no" ;; --force) force="true" ;; -*) eerror "Invalid elibtoolize option: ${x}"; die "elibtoolize called with ${x} ??" ;; *) dirs+=("${x}") ;; esac; done; [[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf"; case ${CHOST} in -aix ) elt_patches+=" hardcode aixrtl" ;; -darwin ) elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf" ;; -solaris ) elt_patches+=" sol2-conf sol2-ltmain" ;; -freebsd ) elt_patches+=" fbsd-conf fbsd-ltconf" ;; -hpux ) elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc" ;; -irix ) elt_patches+=" irix-ltmain" ;; -mint ) elt_patches+=" mint-conf" ;; esac; if $(tc-getLD) --version 2>&1 | grep -qs 'GNU gold'; then elt_patches+=" gold-conf"; fi; if [[ ${do_shallow} == "yes" ]]; then [[ ${#dirs [@] } -ne 0 ]] && die "Using --shallow with explicit dirs doesn't make sense"; [[ -f ${S}/ltmain.sh || -f ${S}/configure ]] && dirs+=("${S}"); else [[ ${#dirs [@] } -eq 0 ]] && dirs+=("${S}"); dirs=($(find "${dirs [@] }" '(' -name ltmain.sh -o -name configure ')' -printf '%h\n' | sort -u)); fi; local d p ret; for d in "${dirs [@] }"; do export ELT_APPLIED_PATCHES=; if [[ -f ${d}/.elibtoolized ]]; then ${force} || continue; fi; local outfunc="einfo"; [[ -f ${d}/.elibtoolized ]] && outfunc="ewarn"; ${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/"; if [[ ${outfunc} == "ewarn" ]]; then ewarn " We've already been run in this tree; you should"; ewarn " avoid this if possible (perhaps by filing a bug)"; fi; [[ -f ${d}/ltmain.sh ]] && for p in ${elt_patches}; do ret=0; case ${p} in portage) if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then ELT_walk_patches "${d}/ltmain.sh" "${p}"; ret=$?; fi ;; rem-int-dep) ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}"; ret=$? ;; fix-relink) if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh"; then ELT_walk_patches "${d}/ltmain.sh" "${p}"; ret=$?; fi ;; max_cmd_len) if grep -qs 'max_cmd_len' "${d}/ltmain.sh"; then ELT_walk_patches "${d}/ltmain.sh" "${p}"; ret=$?; fi ;; as-needed) ELT_walk_patches "${d}/ltmain.sh" "${p}"; ret=$? ;; uclibc-ltconf) if [[ -s ${d}/ltconfig ]]; then ELT_walk_patches "${d}/ltconfig" "${p}"; ret=$?; fi ;; fbsd-ltconf) if [[ -s ${d}/ltconfig ]]; then ELT_walk_patches "${d}/ltconfig" "${p}"; ret=$?; fi ;; darwin-ltconf) if [[ -s ${d}/ltconfig ]]; then ELT_walk_patches "${d}/ltconfig" "${p}"; ret=$?; fi ;; darwin-ltmain) if [[ -e ${d}/ltmain.sh ]] && ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh"; then ELT_walk_patches "${d}/ltmain.sh" "${p}"; ret=$?; fi ;; install-sh) ELT_walk_patches "${d}/install-sh" "${p}"; ret=$? ;; cross) if tc-is-cross-compiler; then ELT_walk_patches "${d}/ltmain.sh" "${p}"; ret=$?; fi ;; *) ELT_walk_patches "${d}/ltmain.sh" "${p}"; ret=$? ;; esac; if [[ ${ret} -ne 0 ]]; then case ${p} in relink) local version=$(ELT_libtool_version "${d}/ltmain.sh"); if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then ewarn " Could not apply relink.patch!"; fi ;; portage) if [[ ${do_portage} == "yes" ]]; then if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then echo; eerror "Portage patch requested, but failed to apply!"; eerror "Please file a bug report to add a proper patch."; die "Portage patch requested, but failed to apply!"; fi; else if grep -qs 'We do not want portage' "${d}/ltmain.sh"; then :; else local version=$(ELT_libtool_version "${d}"/ltmain.sh); echo; eerror "Portage patch failed to apply (ltmain.sh version ${version})!"; eerror "Please file a bug report to add a proper patch."; die "Portage patch failed to apply!"; fi; ELT_APPLIED_PATCHES="portage"; fi ;; darwin-*) [[ ${CHOST} == "-darwin" ]] && ewarn " Darwin patch set '${p}' failed to apply!" ;; esac; fi; done; [[ -f ${d}/ltmain.sh ]] && if [[ -z ${ELT_APPLIED_PATCHES} ]]; then if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then ewarn "Cannot apply any patches, please file a bug about this"; die; fi; fi; [[ -f ${d}/configure ]] && for p in ${elt_patches}; do ret=0; case ${p} in uclibc-conf) if grep -qs 'Transform linux' "${d}/configure"; then ELT_walk_patches "${d}/configure" "${p}"; ret=$?; fi ;; fbsd-conf) if grep qs 'version_type=freebsd ' "${d}/configure"; then ELT_walk_patches "${d}/configure" "${p}"; ret=$?; fi ;; darwin-conf) if grep -qs '&& echo \.so ||' "${d}/configure"; then ELT_walk_patches "${d}/configure" "${p}"; ret=$?; fi ;; aixrtl | hpux-conf) ret=1; local subret=0; while [[ $subret -eq 0 ]]; do subret=1; if [[ -e ${d}/configure ]]; then ELT_walk_patches "${d}/configure" "${p}"; subret=$?; fi; if [[ $subret -eq 0 ]]; then ret=0; fi; done ;; mint-conf | gold-conf | sol2-conf) ELT_walk_patches "${d}/configure" "${p}"; ret=$? ;; target-nm) ELT_walk_patches "${d}/configure" "${p}"; ret=$? ;; *) ;; esac; if [[ ${ret} -ne 0 ]]; then case ${p} in uclibc-*) [[ ${CHOST} == *-uclibc ]] && ewarn " uClibc patch set '${p}' failed to apply!" ;; fbsd-*) if [[ ${CHOST} == -freebsd ]]; then if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${d}/configure" 2>/dev/null) ]]; then eerror " FreeBSD patch set '${p}' failed to apply!"; die "FreeBSD patch set '${p}' failed to apply!"; fi; fi ;; darwin-*) [[ ${CHOST} == "-darwin" ]] && ewarn " Darwin patch set '${p}' failed to apply!" ;; esac; fi; done; rm -f "${d}/libtool"; > "${d}/.elibtoolized"; done } elt_patch_dir () { local d="${ECLASSDIR}/ELT-patches"; if [[ ! -d ${d} ]]; then d="${_LIBTOOL_ECLASSDIR_LOCAL}/ELT-patches"; fi; echo "${d}" } emake_src_make () { debug-print-function ${FUNCNAME} "$@"; [[ -e Makefile ]] || die "Makefile not found. Error during configure stage."; if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then emake VERBOSE=1 "$@" || die; else emake "$@" || die; fi } 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} "$@"; 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 local CPPFLAGS=${CPPFLAGS}; append-cppflags -DNDEBUG; fi; fi; local build_rules=${BUILD_DIR}/gentoo_rules.cmake; cat > "${build_rules}" <<- EOF SET (CMAKE_AR $(type -P $(tc-getAR)) CACHE FILEPATH "Archive manager" FORCE) SET (CMAKE_ASM_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${CFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "ASM compile command" FORCE) SET (CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" FORCE) SET (CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" FORCE) SET (CMAKE_Fortran_COMPILE_OBJECT "<CMAKE_Fortran_COMPILER> <DEFINES> ${FCFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "Fortran compile command" FORCE) SET (CMAKE_RANLIB $(type -P $(tc-getRANLIB)) CACHE FILEPATH "Archive index generator" FORCE) SET (PKG_CONFIG_EXECUTABLE $(type -P $(tc-getPKG_CONFIG)) CACHE FILEPATH "pkg-config executable" FORCE) EOF local toolchain_file=${BUILD_DIR}/gentoo_toolchain.cmake; cat > ${toolchain_file} <<- EOF SET (CMAKE_C_COMPILER $(tc-getCC)) SET (CMAKE_CXX_COMPILER $(tc-getCXX)) SET (CMAKE_Fortran_COMPILER $(tc-getFC)) EOF if tc-is-cross-compiler; then local sysname; case "${KERNEL:-linux}" in Cygwin) sysname="CYGWIN_NT-5.1" ;; HPUX) sysname="HP-UX" ;; linux) sysname="Linux" ;; Winnt) sysname="Windows" ;; *) sysname="${KERNEL}" ;; esac; cat >> "${toolchain_file}" <<- EOF SET (CMAKE_SYSTEM_NAME "${sysname}") EOF if [ "${SYSROOT:-/}" != "/" ]; then cat >> "${toolchain_file}" <<- EOF set(CMAKE_FIND_ROOT_PATH "${SYSROOT}") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) EOF fi; fi has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=; if [[ -n ${EPREFIX} ]]; then cat >> "${build_rules}" <<- 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}" 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 "") SET(CMAKE_INSTALL_RPATH "${EPREFIX}${PREFIX}/lib;${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)" CACHE STRING "" FORCE) SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE) SET(CMAKE_INSTALL_NAME_DIR "${EPREFIX}${PREFIX}/lib" CACHE STRING "" FORCE) ENDIF (NOT APPLE) EOF fi local common_config=${BUILD_DIR}/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; if [[ ${CMAKE_WARN_UNUSED_CLI} == no ]]; then local warn_unused_cli="--no-warn-unused-cli"; else local warn_unused_cli=""; fi; local cmakeargs=(${warn_unused_cli} -C "${common_config}" -G "$(_generator_to_use)" -DCMAKE_INSTALL_PREFIX="${EPREFIX}${PREFIX}" "${mycmakeargs_local [@] }" -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" -DCMAKE_INSTALL_DO_STRIP=OFF -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}" -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}" "${MYCMAKEARGS}"); if [[ -n "${CMAKE_EXTRA_CACHE_FILE}" ]]; then cmakeargs+=(-C "${CMAKE_EXTRA_CACHE_FILE}"); fi; pushd "${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 "${BUILD_DIR}" > /dev/null; DESTDIR="${D}" ${CMAKE_MAKEFILE_GENERATOR} install "$@" || die "died running ${CMAKE_MAKEFILE_GENERATOR} install"; popd > /dev/null; pushd "${S}" > /dev/null; einstalldocs; popd > /dev/null } enable_cmake-utils_src_prepare () { debug-print-function ${FUNCNAME} "$@"; pushd "${S}" > /dev/null; debug-print "$FUNCNAME: PATCHES=$PATCHES"; [[ -n ${PATCHES [@] } ]] && epatch "${PATCHES [@] }"; debug-print "$FUNCNAME: applying user patches"; epatch_user; popd > /dev/null } enable_cmake-utils_src_test () { debug-print-function ${FUNCNAME} "$@"; _check_build_dir; pushd "${BUILD_DIR}" > /dev/null; [[ -e CTestTestfile.cmake ]] || { echo "No tests found. Skipping."; return 0 }; [[ n ${TEST_VERBOSE} ]] && myctestargs+=( -extra-verbose --output-on-failure); if ctest "${myctestargs [@] }" "$@"; then einfo "Tests succeeded."; popd > /dev/null; return 0; else if [[ -n "${CMAKE_YES_I_WANT_TO_SEE_THE_TEST_LOG}" ]]; then eerror "Tests failed. Test log ${BUILD_DIR}/Testing/Temporary/LastTest.log follows:"; eerror "- START TEST LOG -------------------------------------------------------------"; cat "${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${BUILD_DIR}/Testing/Temporary/LastTest.log"; fi; popd > /dev/null; return 1; fi } epatch () { function _epatch_draw_line () { [[ -z $1 ]] && set "$(printf "%65s" '')"; echo "${1//?/=}" }; unset P4CONFIG P4PORT P4USER; local EPATCH_OPTS=(${EPATCH_OPTS [*] }); while [ $# -gt 0 ] ; do case $1 in -*) EPATCH_OPTS+=("$1") ;; *) break ;; esac; shift; done; 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 evar_push_set LC_COLLATE C; set – "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"}; evar_pop; 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; EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS [*] }"; 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}${EPATCH_USER_EXCLUDE} ]]; then eshopts_push -o noglob; local ex; for ex in ${EPATCH_EXCLUDE}; do if [[ ${patchname} == ${ex} ]]; then einfo " Skipping ${patchname} due to EPATCH_EXCLUDE ..."; eshopts_pop; continue 2; fi; done; for ex in ${EPATCH_USER_EXCLUDE}; do if [[ ${patchname} == ${ex} ]]; then einfo " Skipping ${patchname} due to EPATCH_USER_EXCLUDE ..."; 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 patch="patch"; eval $(alias patch 2>/dev/null | sed 's:^alias ::'); local STDERR_TARGET="${T}/${patchname}.out"; if [[ -e ${STDERR_TARGET} ]]; then STDERR_TARGET="${T}/${patchname}-$$.out"; fi; printf "***** %s *****\nPWD: %s\nPATCH TOOL: %s -> %s\nVERSION INFO:\n%s\n\n" "${patchname}" "${PWD}" "${patch}" "$(type -P "${patch}")" "$(${patch} --version)" > "${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 echo; eerror "Rejected Patch: ${patchname} !"; eerror " ( ${PATCH_TARGET} )"; eerror; eerror "Your patch uses relative paths '../':"; eerror "${rel_paths}"; echo; die "you need to fix the relative paths in patch"; fi; local patch_cmd; while [[ ${count} -lt 5 ]]; do patch_cmd="${patch} -p${count} ${EPATCH_OPTS}"; ( _epatch_draw_line "***** ${patchname} *****"; echo; echo "PATCH COMMAND: ${patch_cmd} < '${PATCH_TARGET}'"; echo; _epatch_draw_line "***** ${patchname} *****"; ${patch_cmd} --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_cmd} < "${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}"; cat >> "${T}/epatch.log" <<-EOF PATCH: ${x} CMD: ${patch_cmd} PWD: ${PWD} EOF 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.log"; [[ -e ${applied} ]] && return 2; local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches; for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT}}; 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}"; has epatch_user_death_notice ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" epatch_user_death_notice"; return 0; fi; done; echo "none" > "${applied}"; return 1 } epatch_user_death_notice () { ewarn "!!! User patches were applied to this build!" } 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 p any_found; while IFS= read -r -d '' f; do for p in "${PORTDIR}"/eclass/ELT-patches/nocxx/*.patch; do if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then any_found=1; break; fi; done; done < <(find "${dir}" -name configure -print0); if [[ -z ${any_found} ]]; then eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt)."; fi; eend 0 } eshopts_pop () { local s; estack_pop eshopts s || die "${FUNCNAME}: unbalanced push"; if [[ ${s} == "shopt -"* ]]; then eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}"; else set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-"; set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}"; fi } eshopts_push () { if [[ $1 == - [su] ]]; then estack_push eshopts "$(shopt -p)"; [ $# -eq 0 ] && return 0; shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*"; else estack_push eshopts $-; [ $# -eq 0 ] && return 0; set "$@" || die "${FUNCNAME}: bad options to set: $*"; fi } estack_pop () { [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments"; local estack_name="_ESTACK $1_"; shift; local _estack_retvar=$1; shift; eval local _estack_i=\${#${_estack_name}[@]}; [[ $(( --_estack_i )) -eq -1 ]] && return 1; if [[ -n ${_estack_retvar} ]]; then eval ${_estack_retvar}=\"\${${_estack_name}[${_estack_i}]}\"; fi; eval unset ${_estack_name}[${_estack_i}] } estack_push () { [ $# -eq 0 ] && die "estack_push: incorrect # of arguments"; local stack_name=" ESTACK $1_"; shift; eval ${stack_name}+=( \"\$@\" ) } esvn_clean () { [[ -z $* ]] && set -- .; find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf } eumask_pop () { [ $# -eq 0 ] || die "${FUNCNAME}: we take no options"; local s; estack_pop eumask s || die "${FUNCNAME}: unbalanced push"; umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}" } eumask_push () { estack_push eumask "$(umask)"; umask "$@" || die "${FUNCNAME}: bad options to umask: $*" } evar_pop () { local cnt=${1:-bad}; case $# in 0) cnt=1 ;; 1) isdigit "${cnt}" || die "${FUNCNAME}: first arg must be a number: $*" ;; *) die "${FUNCNAME}: only accepts one arg: $*" ;; esac; local var val; while (( cnt-- )); do estack_pop evar val || die "${FUNCNAME}: unbalanced push"; estack_pop evar var || die "${FUNCNAME}: unbalanced push"; [[ ${val} == "unset_76fc3c462065bb4ca959f939e6793f94" ]] && unset ${var} || printf -v "${var}" '%s' "${val}"; done } evar_push () { local var val; for var in "$@"; do [[ ${!var+set} == "set" ]] && val=${!var} || val="unset_76fc3c462065bb4ca959f939e6793f94"; estack_push evar "${var}" "${val}"; done } evar_push_set () { local var=$1; evar_push ${var}; case $# in 1) unset ${var} ;; 2) printf -v "${var}" '%s' "$2" ;; *) die "${FUNCNAME}: incorrect # of args: $*" ;; esac } 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 "$@"; local v; for v in $(all-flag-vars); do _filter-var ${v} "$@"; done; 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/both/387,sse}; 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 } 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); [[ "${directive/{!fstrict-overflow:}" != "${directive}" ]] } gcc-specs-now () { local directive; directive=$(gcc-specs-directive link_command); [[ "${directive/{!nonow:}" != "${directive}" ]] } gcc-specs-pie () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/{!nopie:}" != "${directive}" ]] } gcc-specs-relro () { local directive; directive=$(gcc-specs-directive link_command); [[ "${directive/{!norelro:}" != "${directive}" ]] } gcc-specs-ssp () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/{!fno-stack-protector:}" != "${directive}" ]] } gcc-specs-ssp-to-all () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/{!fno-stack-protector-all:}" != "${directive}" ]] } gcc-specs-stack-check () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/{!fno-stack-check:}" != "${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; case ${CTARGET:-${CHOST}} in -darwin ) ;; linux | -freebsd | -openbsd | -netbsd ) use prefix && return 0 ;; *) return 0 ;; esac; dodir /usr/${libdir}; if [[ $1 == "-a" ]]; then auto=true; shift; dodir /${libdir}; fi; local flags=(${CFLAGS} ${LDFLAGS} Wl, -verbose); if $(tc-getLD) --version | grep -q 'GNU gold'; then local d="${T}/bfd-linker"; mkdir -p "${d}"; ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld; flags+=(-B"${d}"); fi; output_format=$($(tc-getCC) "${flags [@] }" 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 ;; *) 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 var findflag="$1"; for var in $(all-flag-vars); do for f in ${!var}; do if [ "${f/${findflag}}" != "${f}" ]; then printf "%s\n" "${f/-${findflag}=}"; return 0; fi; done; 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 x order="" mvar dvar; mvar="MULTILIB_ABIS"; dvar="DEFAULT_ABI"; if [[ -n $1 ]]; then mvar="$1_${mvar}"; dvar="$1_${dvar}"; fi; if [[ -z ${!mvar} ]]; then echo "default"; return 0; fi; for x in ${!mvar}; do if [[ ${x} != ${!dvar} ]]; then order="${order:+${order} }${x}"; fi; done; order="${order:+${order} }${!dvar}"; echo ${order}; return 0 } get_all_libdirs () { local libdirs abi; 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_install_abis () { local x 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_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_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_disable_deprecation_warning () { local retval=0; local fails=(); local makefile; ebegin "Disabling deprecation warnings"; while read makefile; do if ! grep -qE "(DISABLE_DEPRECATED|GSEAL_ENABLE)" "${makefile}"; then continue; fi; LC_ALL=C sed -r -i -e 's:-D [A-Z_] _DISABLE_DEPRECATED:$(NULL):g' -e 's:-DGSEAL_ENABLE [A-Z_] :$(NULL):g' -i "${makefile}"; if [[ $? -ne 0 ]]; then fails+=("${makefile}"); retval=2; fi; done < <(find "${S}" -name "Makefile.in" -o -name "Makefile.am" -o -name "Makefile.decl" | sort; echo configure); eend ${retval}; for makefile in "${fails [@] }"; do ewarn "Failed to disable deprecation warnings in ${makefile}"; done } 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_gdk_pixbuf_savelist () { has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"; pushd "${ED}" > /dev/null; export GNOME2_ECLASS_GDK_PIXBUF_LOADERS=$(find usr/lib*/gdk-pixbuf-2.0 -type f 2>/dev/null); popd > /dev/null } gnome2_gdk_pixbuf_update () { has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"; local updater="${EROOT}/usr/bin/${CHOST}-gdk-pixbuf-query-loaders"; if [[ ! -x ${updater} ]]; then updater="${EROOT}/usr/bin/gdk-pixbuf-query-loaders"; fi; if [[ ! -x ${updater} ]]; then debug-print "${updater} is not executable"; return; fi; if [[ -z ${GNOME2_ECLASS_GDK_PIXBUF_LOADERS} ]]; then debug-print "gdk-pixbuf loader cache does not need an update"; return; fi; ebegin "Updating gdk-pixbuf loader cache"; local tmp_file=$(mktemp -t tmp.XXXXXXXXXX_gdkpixbuf); ${updater} > "${tmp_file}" && chmod 0644 "${tmp_file}" && cp -f "${tmp_file}" "${EROOT}usr/$(get_libdir)/gdk-pixbuf-2.0/2.10.0/loaders.cache" && rm "${tmp_file}"; eend $? } 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; else if [[ $(ls "${EROOT}${dir}") = "icon-theme.cache" ]]; then rm "${EROOT}${dir}/icon-theme.cache"; fi; fi; if [[ -z $(ls "${EROOT}${dir}") ]]; then rmdir "${EROOT}${dir}"; 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; if [[ -f ${S}/gnome-doc-utils.make ]]; then omf_makefiles="${omf_makefiles} ${S}/gnome-doc-utils.make"; fi; for filename in $(find "${S}" -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 sed -i -e 's:scrollkeeper-update:true:' "${omf}"; retval=$?; if [[ $retval -ne 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_pkg_postinst () { gnome2_gconf_install; fdo-mime_desktop_database_update; fdo-mime_mime_database_update; gnome2_icon_cache_update; gnome2_schemas_update; gnome2_scrollkeeper_update; gnome2_gdk_pixbuf_update } gnome2_pkg_postrm () { fdo-mime_desktop_database_update; fdo-mime_mime_database_update; gnome2_icon_cache_update; gnome2_schemas_update; gnome2_scrollkeeper_update } gnome2_pkg_preinst () { gnome2_gconf_savelist; gnome2_icon_savelist; gnome2_schemas_savelist; gnome2_scrollkeeper_savelist; gnome2_gdk_pixbuf_savelist } gnome2_query_immodules_gtk2 () { local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-2.0; [[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-2.0; "${updater}" --update-cache } gnome2_query_immodules_gtk3 () { local updater=${EPREFIX}/usr/bin/${CHOST}-gtk-query-immodules-3.0; [[ ! -x ${updater} ]] && updater=${EPREFIX}/usr/bin/gtk-query-immodules-3.0; "${updater}" --update-cache } 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_savelist () { has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"; pushd "${ED}" &> /dev/null; export GNOME2_ECLASS_SCROLLS=$(find 'usr/share/omf' -type f -name "*.omf" 2> /dev/null); popd &> /dev/null } gnome2_scrollkeeper_update () { has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"; local updater="${EROOT}${SCROLLKEEPER_UPDATE_BIN}"; if [[ ! -x "${updater}" ]]; then debug-print "${updater} is not executable"; return; fi; if [[ -z "${GNOME2_ECLASS_SCROLLS}" ]]; then debug-print "No scroll cache to update"; return; fi; ebegin "Updating scrollkeeper database ..."; "${updater}" -q -p "${EROOT}${SCROLLKEEPER_DIR}"; eend $? } gnome2_src_compile () { emake } gnome2_src_configure () { if [[ ${GCONF_DEBUG} != 'no' ]]; then if use debug; then G2CONF="--enable-debug=yes ${G2CONF}"; fi; fi; if grep q "enable-gtk-doc" "${ECONF_SOURCE: .}"/configure; then if has ${EAPI:-0} 4 4-python && in_iuse doc; then G2CONF="$(use_enable doc gtk-doc) ${G2CONF}"; else G2CONF="--disable-gtk-doc ${G2CONF}"; fi; fi; if grep q "^[ [:space:] ] AM_MAINTAINER_MODE([enable])" "${ECONF_SOURCE: .}"/configure. ; then G2CONF="--disable-maintainer-mode ${G2CONF}"; fi; if grep q "disable-scrollkeeper" "${ECONF_SOURCE: .}"/configure; then G2CONF="--disable-scrollkeeper ${G2CONF}"; fi; if has ${EAPI:-0} 4 4-python; then if grep q "disable-silent-rules" "${ECONF_SOURCE: .}"/configure; then G2CONF="--disable-silent-rules ${G2CONF}"; fi; fi; if grep q "disable-schemas-install" "${ECONF_SOURCE: .}"/configure; then G2CONF="--disable-schemas-install ${G2CONF}"; fi; if grep q "disable-schemas-compile" "${ECONF_SOURCE: .}"/configure; then G2CONF="--disable-schemas-compile ${G2CONF}"; fi; if grep q "enable-compile-warnings" "${ECONF_SOURCE: .}"/configure; then G2CONF="--enable-compile-warnings=minimum ${G2CONF}"; fi; if grep q "^ * docdir=" "${ECONF_SOURCE: .}"/configure; then G2CONF="--docdir="${EPREFIX}"/usr/share/doc/${PF} ${G2CONF}"; fi; addwrite "$(unset HOME; echo ~)/.gnome2"; econf ${G2CONF} "$@" } gnome2_src_install () { local installation_prefix; if [[ -n "${GNOME2_DESTDIR}" ]]; then installation_prefix="${GNOME2_DESTDIR%/}${EPREFIX}/"; else installation_prefix="${ED}"; fi; local sk_tmp_dir="/var/lib/scrollkeeper"; dodir "${sk_tmp_dir}" || die "dodir failed"; export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL="1"; debug-print "Installing with 'make install'"; emake DESTDIR="${GNOME2_DESTDIR:-${D}}" "scrollkeeper_localstate_dir=${installation_prefix}${sk_tmp_dir} " "$@" install || die "install failed"; unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL; if has ${EAPI:-0} 4 4-python; then if [[ -n "${DOCS}" ]]; then dodoc ${DOCS} || die "dodoc failed"; fi; else einstalldocs; fi; rm -rf "${installation_prefix}${sk_tmp_dir}"; rmdir "${installation_prefix}var/lib" 2> /dev/null; rmdir "${installation_prefix}var" 2> /dev/null; rm -fr "${installation_prefix}usr/share/applications/mimeinfo.cache"; if has ${EAPI:-0} 4 4-python; then if [[ "${GNOME2_LA_PUNT}" != "no" ]]; then ebegin "Removing .la files"; if ! use_if_iuse static-libs; then find "${GNOME2_DESTDIR:-${D}}" -name '*.la' -exec rm -f {} + || die "la file removal failed"; fi; eend; fi; else case "${GNOME2_LA_PUNT}" in yes) prune_libtool_files --modules ;; no) ;; *) prune_libtool_files ;; esac; fi } gnome2_src_prepare () { gnome2_environment_reset; gnome2_omf_fix; gnome2_disable_deprecation_warning; elibtoolize ${ELTCONF} } gnome2_src_unpack () { unpack ${A}; cd "${S}" } has_m32 () { die "${FUNCNAME}: don't use this anymore" } has_m64 () { eqawarn "${FUNCNAME}: don't use this anymore"; 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/ /}" ] } host-is-pax () { grep -qs ^PaX: /proc/self/status } in_iuse () { debug-print-function ${FUNCNAME} "${@}"; [ ${#} -eq 1 ] || die "Invalid args to ${FUNCNAME}()"; local flag=${1}; local liuse=(${IUSE}); has "${flag}" "${liuse [@] # [+-] }" } is-flag () { is-flagq "$@" && echo true } is-flagq () { [[ -n $2 ]] && die "Usage: is-flag <flag>"; local var; for var in $(all-flag-vars); do _is_flagq ${var} "$1" && return 0; done; return 1 } is-ldflag () { is-ldflagq "$@" && echo true } is-ldflagq () { [[ -n $2 ]] && die "Usage: is-ldflag <flag>"; _is_flagq LDFLAGS $1 } is_final_abi () { has_multilib_profile || return 0; set – $(get_install_abis); local LAST_ABI=$#; [[ ${!LAST_ABI} == ${ABI} ]] } isdigit () { local d; for d in "$@"; do [[ ${d:-bad} == [!0-9] ]] && return 1; done; return 0 } list-paxables () { file "$@" 2> /dev/null | grep -E 'ELF.*(executable|shared object)' | sed -e 's/: .*$//' } 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="Utility;Accessibility" ;; admin) type=System ;; antivirus) type=System ;; arch) type="Utility;Archiving" ;; backup) type="Utility;Archiving" ;; cdr) type="AudioVideo;DiscBurning" ;; dicts) type="Office;Dictionary" ;; doc) type=Documentation ;; editors) type="Utility;TextEditor" ;; emacs) type="Development;TextEditor" ;; emulation) type="System;Emulator" ;; laptop) type="Settings;HardwareSettings" ;; office) type=Office ;; pda) type="Office;PDA" ;; vim) type="Development;TextEditor" ;; xemacs) type="Development;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; local slot=${SLOT%/*}; 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 () { _eutils_eprefix_init; local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5; local tmpwrapper=$(emktemp); ( echo '#!/bin/sh'; [[ -n ${chdir} ]] && printf 'cd "%s"\n' "${EPREFIX}${chdir}"; if [[ -n ${libdir} ]]; then local var; if [[ ${CHOST} == -darwin ]]; then var=DYLD_LIBRARY_PATH; else var=LD_LIBRARY_PATH; fi; cat <<-EOF if [ "\${${var}+set}" = "set" ] ; then export ${var}="\${${var}}:${EPREFIX}${libdir}" else export ${var}="${EPREFIX}${libdir}" fi EOF fi printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}"; chmod go+rx "${tmpwrapper}"; if [[ -n ${path} ]]; then ( exeinto "${path}"; newexe "${tmpwrapper}" "${wrapper}" ) || die; else newbin "${tmpwrapper}" "${wrapper}" || die; fi } multilib_env () { local CTARGET=${1:-${CTARGET}}; local cpu=${CTARGET%%*-}; case ${cpu} in aarch64*) export CFLAGS_arm=${CFLAGS_arm-}; case ${cpu} in aarch64*be) export CHOST_arm="armv8b-${CTARGET#*-}" ;; *) export CHOST_arm="armv8l-${CTARGET#*-}" ;; esac; CHOST_arm=${CHOST_arm/%-gnu/-gnueabi}; export CTARGET_arm=${CHOST_arm}; export LIBDIR_arm="lib"; export CFLAGS_arm64=${CFLAGS_arm64-}; export CHOST_arm64=${CTARGET}; export CTARGET_arm64=${CHOST_arm64}; export LIBDIR_arm64="lib64"; : ${MULTILIB_ABIS=arm64}; : ${DEFAULT_ABI=arm64} ;; x86_64*) export CFLAGS_x86=${CFLAGS_x86--m32}; export CHOST_x86=${CTARGET/x86_64/i686}; CHOST_x86=${CHOST_x86/%-gnux32/-gnu}; 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/%-gnux32/-gnu}; export CTARGET_amd64=${CHOST_amd64}; export LIBDIR_amd64="lib64"; export CFLAGS_x32=${CFLAGS_x32--mx32}; export CHOST_x32=${CTARGET/%-gnu/-gnux32}; export CTARGET_x32=${CHOST_x32}; export LIBDIR_x32="libx32"; case ${CTARGET} in *-gnux32) : ${MULTILIB_ABIS=x32 amd64 x86}; : ${DEFAULT_ABI=x32} ;; *) : ${MULTILIB_ABIS=amd64 x86}; : ${DEFAULT_ABI=amd64} ;; esac ;; 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} ;; sparc64*) export CFLAGS_sparc32=${CFLAGS_sparc32--m32}; 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 F77 FC LD PKG_CONFIG_{LIBDIR,PATH}; do vv=" abi_saved ${v}"; [[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v}; unset ${vv}; done; unset _DEFAULT_ABI_SAVED; fi; if [[ ${ABI} != ${DEFAULT_ABI} ]]; then for v in CHOST CBUILD AS CC CXX F77 FC LD PKG_CONFIG_{LIBDIR,PATH}; do vv=" abi_saved ${v}"; [[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv}; 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 F77="$(tc-getF77) $(get_abi_CFLAGS)"; export FC="$(tc-getFC) $(get_abi_CFLAGS)"; export LD="$(tc-getLD) $(get_abi_LDFLAGS)"; export CHOST=$(get_abi_CHOST $1); export CBUILD=$(get_abi_CHOST $1); export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig; export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig; fi } newicon () { _iconins ${FUNCNAME} "$@" } newmenu () { ( insinto /usr/share/applications; newins "$@" ) } ninja_src_make () { debug-print-function ${FUNCNAME} "$@"; [[ -e build.ninja ]] || die "build.ninja not found. Error during configure stage."; _ninjaopts_from_makeopts; if [[ "${CMAKE_VERBOSE}" != "OFF" ]]; then set – ninja ${NINJAOPTS} -v "$@"; else set – ninja ${NINJAOPTS} "$@"; fi; echo "$@"; "$@" || die } no-as-needed () { case $($(tc-getLD) -v 2>&1 </dev/null) in *GNU*) echo "-Wl,--no-as-needed" ;; esac } number_abis () { set -- `get_install_abis`; echo $# } optfeature () { debug-print-function ${FUNCNAME} "$@"; local i j msg; local desc=$1; local flag=0; shift; for i in "$@"; do for j in ${i}; do if has_version "${j}"; then flag=1; else flag=0; break; fi; done; if [[ ${flag} -eq 1 ]]; then break; fi; done; if [[ ${flag} -eq 0 ]]; then for i in "$@"; do msg=" "; for j in ${i}; do msg+=" ${j} and"; done; msg="${msg:0: -4} for ${desc}"; elog "${msg}"; done; fi } path_exists () { local opt=$1; [[ ${opt} == - [ao] ]] && shift || opt="-a"; [ $# -eq 0 ] && return 1; local p r=0; for p in "$@"; do [[ -e ${p} ]]; : $(( r += $? )); done; case ${opt} in -a) return $(( r != 0 )) ;; -o) return $(( r == $# )) ;; esac } pax-mark () { local f; local flags; local ret=0; flags="${1// [!zPpEeMmRrSs] }"; [[ -n "${flags}" ]] || return 0; shift; local dodefault=""; [[ -n "${flags// [!z] }" ]] && dodefault="yes"; if has PT ${PAX_MARKINGS}; then _pax_list_files einfo "$@"; for f in "$@"; do if type -p paxctl > /dev/null; then einfo "PT PaX marking -${flags} ${f} with paxctl"; paxctl -q${flags} "${f}" && continue; paxctl -qC${flags} "${f}" && continue; paxctl -qc${flags} "${f}" && continue; fi; if type -p paxctl-ng > /dev/null && paxctl-ng -L; then einfo "PT PaX marking -${flags} ${f} with paxctl-ng"; flags="${flags//z}"; [[ ${dodefault} == "yes" ]] && paxctl-ng -L -z "${f}"; [[ -n "${flags}" ]] || continue; paxctl-ng -L -${flags} "${f}" && continue; fi; if type -p scanelf > /dev/null && [[ ${PAX_MARKINGS} != "none" ]]; then scanelf -Xxz ${flags} "$f"; else if [[ ${PAX_MARKINGS} != "none" ]]; then elog "Failed to set PT_PAX markings -${flags} ${f}."; ret=1; fi; fi; done; fi; if has XT ${PAX_MARKINGS}; then _pax_list_files einfo "$@"; flags="${flags//z}"; for f in "$@"; do if type -p paxctl-ng > /dev/null && paxctl-ng -l; then einfo "XT PaX marking -${flags} ${f} with paxctl-ng"; [[ ${dodefault} == "yes" ]] && paxctl-ng -d "${f}"; [[ -n "${flags}" ]] || continue; paxctl-ng -l -${flags} "${f}" && continue; fi; if type -p setfattr > /dev/null; then [[ -n "${flags// [!Ee] }" ]] || flags+="e"; einfo "XT PaX marking -${flags} ${f} with setfattr"; [[ ${dodefault} == "yes" ]] && setfattr -x "user.pax.flags" "${f}"; setfattr -n "user.pax.flags" -v "${flags}" "${f}" && continue; fi; if [[ ${PAX_MARKINGS} != "none" ]]; then elog "Failed to set XATTR_PAX markings -${flags} ${f}."; ret=1; fi; done; fi; return ${ret} } pkg_nofetch () { __eapi0_pkg_nofetch "$@" } pkg_postinst () { gnome2_pkg_postinst "$@" } pkg_postrm () { gnome2_pkg_postrm "$@" } pkg_preinst () { gnome2_pkg_preinst "$@" } pkg_pretend () { if [[ ${MERGE_TYPE} != "binary" ]] && is-flagq "-g*" && ! is-flagq "-g*0"; then einfo "Checking for sufficient disk space to build ${PN} with debugging CFLAGS"; check-reqs_pkg_pretend; fi; if ! test-flag-CXX -std=c++11; then die "You need at least GCC 4.7.x or Clang >= 3.3 for C++11-specific compiler flags"; fi } pkg_setup () { if [[ ${MERGE_TYPE} != "binary" ]]; then check-reqs_pkg_setup; fi; [[ ${MERGE_TYPE} = "binary" ]] || python-any-r1_pkg_setup } preserve_old_lib () { _eutils_eprefix_init; if [[ ${EBUILD_PHASE} != "preinst" ]]; then eerror "preserve_old_lib() must be called from pkg_preinst() only"; die "Invalid preserve_old_lib() usage"; fi; [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve] "; has preserve-libs ${FEATURES} && return 0; local lib dir; for lib in "$@"; do [[ -e ${EROOT}/${lib} ]] || continue; dir=${lib%/*}; dodir ${dir} || die "dodir ${dir} failed"; cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp ${lib} failed"; touch "${ED}"/${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; _eutils_eprefix_init; local lib notice=0; for lib in "$@"; do [[ -e ${EROOT}/${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; ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'"; done } prune_libtool_files () { debug-print-function ${FUNCNAME} "$@"; local removing_all removing_modules opt; _eutils_eprefix_init; for opt in "$@"; do case "${opt}" in --all) removing_all=1; removing_modules=1 ;; --modules) removing_modules=1 ;; *) die "Invalid argument to ${FUNCNAME}(): ${opt}" ;; esac; done; local f; local queue=(); while IFS= read -r -d '' f; do local archivefile=${f/%.la/.a}; if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then continue; fi; [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed'; local reason= pkgconfig_scanned=; local snotlink=$(sed -n -e 's:^shouldnotlink=: ' "${f}"); if [[ ${snotlink} == yes ]]; then if [[ -f ${archivefile} ]]; then einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)"; queue+=("${archivefile}"); fi; if [[ -n ${removing_modules} ]]; then reason='module'; fi; else if [[ -n ${removing_all} ]]; then reason='requested'; else if [[ ! -f ${archivefile} ]]; then reason='no static archive'; else if [[ ! -n $(sed -nre "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" "${f}") ]]; then reason='no libs & flags'; else if [[ ! -n ${pkgconfig_scanned} ]]; then local pc_libs=(); if [[ ! -n ${removing_all} ]]; then local pc; local tf=${T}/prune-lt-files.pc; local pkgconf=$(tc-getPKG_CONFIG); while IFS= read -r -d '' pc; do local arg libs; if ${pkgconf} --exists "${pc}" &> /dev/null; then sed -e '/^Requires:/d' "${pc}" > "${tf}"; libs=$(${pkgconf} --libs "${tf}"); else libs=$(sed -ne 's/^Libs://p' "${pc}"); fi; for arg in ${libs}; do if [[ ${arg} == -l* ]]; then if [[ ${arg} == ' $ ' ]]; then eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}"; eqawarn "(arg: ${arg})"; eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND."; fi; pc_libs+=(lib${arg#-l}.la); fi; done; done < <(find "${D}" -type f -name '*.pc' -print0); rm -f "${tf}"; fi; pkgconfig_scanned=1; fi; has "${f##*/}" "${pc_libs [@] }" && reason='covered by .pc'; fi; fi; fi; fi; if [[ -n ${reason} ]]; then einfo "Removing unnecessary ${f#${D%/}} (${reason})"; queue+=("${f}"); fi; done < <(find "${ED}" -xtype f -name '*.la' -print0); if [[ -n ${queue [@] } ]]; then rm -f "${queue [@] }"; fi } python-any-r1_pkg_setup () { debug-print-function ${FUNCNAME} "${@}"; [[ ${MERGE_TYPE} != binary ]] && python_setup } python_abi_depend () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_byte-compile_modules () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_clean_byte-compiled_modules () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_clean_installation_image () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_clean_py-compile_files () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_convert_shebangs () { die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_convert_shebangs " } python_disable_pyc () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_doexe () { debug-print-function ${FUNCNAME} "${@}"; local f; for f in "$@"; do python_newexe "${f}" "${f##*/}"; done } python_doheader () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; local d PYTHON_INCLUDEDIR=${PYTHON_INCLUDEDIR}; [[ -n ${PYTHON_INCLUDEDIR} ]] || python_export PYTHON_INCLUDEDIR; d=${PYTHON_INCLUDEDIR#${EPREFIX}}; local INSDESTTREE; insinto "${d}"; doins -r "${@}" || die } python_domodule () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; local d; if [[ ${python_moduleroot} == /* ]]; then d=${python_moduleroot}; else local PYTHON_SITEDIR=${PYTHON_SITEDIR}; [[ -n ${PYTHON_SITEDIR} ]] || python_export PYTHON_SITEDIR; d=${PYTHON_SITEDIR#${EPREFIX}}/${python_moduleroot}; fi; local INSDESTTREE; insinto "${d}"; doins -r "${@}" || die; python_optimize "${ED}/${d}" } python_doscript () { debug-print-function ${FUNCNAME} "${@}"; local _PYTHON_REWRITE_SHEBANG=1; python_doexe "${@}" } python_enable_pyc () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_execute_function () { die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#python_execute_function " } python_execute_nosetests () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_execute_py.test () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_execute_trial () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_export () { debug-print-function ${FUNCNAME} "${@}"; local impl var; case "${1}" in python* | jython*) impl=${1/_/.}; shift ;; pypy | pypy3) impl=${1}; shift ;; *) impl=${EPYTHON}; if [[ -z ${impl} ]]; then die "python_export called without a python implementation and EPYTHON is unset"; fi ;; esac; debug-print "${FUNCNAME}: implementation: ${impl}"; for var in "$@"; do case "${var}" in EPYTHON) export EPYTHON=${impl}; debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}" ;; PYTHON) export PYTHON=${EPREFIX}/usr/bin/${impl}; debug-print "${FUNCNAME}: PYTHON = ${PYTHON}" ;; PYTHON_SITEDIR) local dir; case "${impl}" in python* | pypy | pypy3) dir=/usr/$(get_libdir)/${impl} ;; jython*) dir=/usr/share/${impl/n/n-}/Lib ;; esac; export PYTHON_SITEDIR=${EPREFIX}${dir}/site-packages; debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}" ;; PYTHON_INCLUDEDIR) local dir; case "${impl}" in python*) dir=/usr/include/${impl} ;; pypy | pypy3) dir=/usr/$(get_libdir)/${impl}/include ;; *) die "${impl} lacks header files" ;; esac; export PYTHON_INCLUDEDIR=${EPREFIX}${dir}; debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}" ;; PYTHON_LIBPATH) local libname; case "${impl}" in python*) libname=lib${impl} ;; *) die "${impl} lacks a dynamic library" ;; esac; local path=${EPREFIX}/usr/$(get_libdir); export PYTHON_LIBPATH=${path}/${libname}$(get_libname); debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}" ;; PYTHON_CFLAGS) local val; case "${impl}" in python*) val=$($(tc-getPKG_CONFIG) - cflags ${impl/n/n }) ;; *) die "${impl}: obtaining ${var} not supported" ;; esac; export PYTHON_CFLAGS=${val}; debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}" ;; PYTHON_LIBS) local val; case "${impl}" in python*) val=$($(tc-getPKG_CONFIG) - libs ${impl/n/n }) ;; *) die "${impl}: obtaining ${var} not supported" ;; esac; export PYTHON_LIBS=${val}; debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}" ;; PYTHON_PKG_DEP) local d; case ${impl} in python2.7) PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7' ;; python3.3) PYTHON_PKG_DEP='>=dev-lang/python-3.3.2-r2:3.3' ;; python*) PYTHON_PKG_DEP="dev-lang/python:${impl#python}" ;; pypy) PYTHON_PKG_DEP='virtual/pypy:0=' ;; pypy3) PYTHON_PKG_DEP='virtual/pypy3:0=' ;; jython2.5) PYTHON_PKG_DEP='>=dev-java/jython-2.5.3-r2:2.5' ;; jython2.7) PYTHON_PKG_DEP='dev-java/jython:2.7' ;; *) die "Invalid implementation: ${impl}" ;; esac; if [[ -n ${PYTHON_REQ_USE} ]]; then PYTHON_PKG_DEP+= [${PYTHON_REQ_USE}] ; fi; export PYTHON_PKG_DEP; debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}" ;; PYTHON_SCRIPTDIR) local dir; export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl}; debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}" ;; *) die "python_export: unknown variable ${var}" ;; esac; done } python_export_utf8_locale () { debug-print-function ${FUNCNAME} "${@}"; if [[ $(locale charmap) != UTF-8 ]]; then if [[ -n ${LC_ALL} ]]; then ewarn "LC_ALL is set to a locale with a charmap other than UTF-8."; ewarn "This may trigger build failures in some python packages."; return 1; fi; local lang locales="en_US.UTF-8 $(locale -a)"; for lang in ${locales}; do if [[ $(LC_CTYPE=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then export LC_CTYPE=${lang}; return 0; fi; done; ewarn "Could not find a UTF-8 locale. This may trigger build failures in"; ewarn "some python packages. Please ensure that a UTF-8 locale is listed in"; ewarn "/etc/locale.gen and run locale-gen."; return 1; fi; return 0 } python_fix_shebang () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)"; local force quiet; while [[ -n ${@} ]]; do case "${1}" in -f | --force) force=1; shift ;; -q | --quiet) quiet=1; shift ;; --) shift; break ;; *) break ;; esac; done; [[ -n ${1} ]] || die "${FUNCNAME}: no paths given"; local path f; for path in "$@"; do local any_correct any_fixed is_recursive; [[ -d ${path} ]] && is_recursive=1; while IFS= read -r -d '' f; do local shebang i; local error= from=; IFS= read -r shebang < ${f}; if [ ${shebang} == '#!'* ] ; then local split_shebang=(); read -r -a split_shebang <<< ${shebang}; for i in "${split_shebang [@] }"; do case "${i}" in *"${EPYTHON}") debug-print "${FUNCNAME}: in file ${f#${D}}"; debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}"; any_correct=1; from=${EPYTHON}; break ;; *python | *python [23] ) debug-print "${FUNCNAME}: in file ${f#${D}}"; debug-print "${FUNCNAME}: rewriting shebang: ${shebang}"; if [[ ${i} == *python2 ]]; then from=python2; if [[ ! -n ${force} ]]; then python_is_python3 "${EPYTHON}" && error=1; fi; else if [[ ${i} == *python3 ]]; then from=python3; if [[ ! -n ${force} ]]; then python_is_python3 "${EPYTHON}" || error=1; fi; else from=python; fi; fi; break ;; *python [23] . [0123456789] | *pypy | *pypy3 | *jython [23] . [0123456789] ) if [[ ! -n ${force} ]]; then error=1; else case "${i}" in *python [23] . [0123456789] ) from="python [23] . [0123456789] " ;; *pypy) from="pypy" ;; *pypy3) from="pypy3" ;; *jython [23] . [0123456789] ) from="jython [23] . [0123456789] " ;; *) die "${FUNCNAME}: internal error in 2nd pattern match" ;; esac; fi; break ;; esac; done; fi; if [[ ! -n ${error} && ! -n ${from} ]]; then [[ -n ${is_recursive} ]] && continue; error=1; fi; if [[ ! -n ${quiet} ]]; then einfo "Fixing shebang in ${f#${D}}."; fi; if [[ ! -n ${error} ]]; then if [[ ${shebang} == ${from}" " ]]; then sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die; else sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die; fi; any_fixed=1; else eerror "The file has incompatible shebang:"; eerror " file: ${f#${D}}"; eerror " current shebang: ${shebang}"; eerror " requested impl: ${EPYTHON}"; die "${FUNCNAME}: conversion of incompatible shebang requested"; fi; done < <(find "${path}" -type f -print0); if [[ ! -n ${any_fixed} ]]; then eqawarn "QA warning: ${FUNCNAME}, ${path#${D}} did not match any fixable files."; if [[ -n ${any_correct} ]]; then eqawarn "All files have ${EPYTHON} shebang already."; else eqawarn "There are no Python files in specified directory."; fi; fi; done } python_gen_any_dep () { debug-print-function ${FUNCNAME} "${@}"; local depstr=${1}; [[ -n ${depstr} ]] || die "No dependency string provided"; local PYTHON_PKG_DEP out=; for i in "${_PYTHON_ALL_IMPLS [@] }"; do has "${i}" "${PYTHON_COMPAT [@] }" || continue; local PYTHON_USEDEP="python_targets_${i} ,python_single_target_${i} "; python_export "${i}" PYTHON_PKG_DEP; local i_depstr=${depstr//\${PYTHON_USEDEP}/${PYTHON_USEDEP}}; out="( ${PYTHON_PKG_DEP} ${i_depstr} ) ${out}"; done; echo "|| ( ${out})" } python_generate_cffi_modules () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_generate_wrapper_scripts () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_get_CFLAGS () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_CFLAGS; echo "${PYTHON_CFLAGS}" } python_get_LIBS () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_LIBS; echo "${PYTHON_LIBS}" } python_get_extension_module_suffix () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_get_implementation () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_get_implementation_and_version () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_get_implementational_package () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_get_includedir () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_INCLUDEDIR; echo "${PYTHON_INCLUDEDIR}" } python_get_libdir () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_get_library () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_get_library_path () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_LIBPATH; echo "${PYTHON_LIBPATH}" } python_get_scriptdir () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_SCRIPTDIR; echo "${PYTHON_SCRIPTDIR}" } python_get_sitedir () { debug-print-function ${FUNCNAME} "${@}"; python_export "${@}" PYTHON_SITEDIR; echo "${PYTHON_SITEDIR}" } python_get_version () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_install_executables () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_is_installed () { local impl=${1:-${EPYTHON}}; [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON"; local -x ROOT=/; case "${impl}" in pypy | pypy3) local append=; if [[ -n ${PYTHON_REQ_USE} ]]; then append= [${PYTHON_REQ_USE}] ; fi; has_version "dev-python/${impl}${append}" || has_version "dev-python/${impl}-bin${append}" ;; *) local PYTHON_PKG_DEP; python_export "${impl}" PYTHON_PKG_DEP; has_version "${PYTHON_PKG_DEP}" ;; esac } python_is_python3 () { local impl=${1:-${EPYTHON}}; [[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON"; [[ ${impl} == python3* || ${impl} == pypy3 ]] } python_merge_intermediate_installation_images () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_mod_cleanup () { die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation " } python_mod_optimize () { die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#Python_byte-code_compilation " } python_moduleinto () { debug-print-function ${FUNCNAME} "${@}"; python_moduleroot=${1} } python_need_rebuild () { die "${FUNCNAME}() is invalid for python-r1 suite" } python_newexe () { debug-print-function ${FUNCNAME} "${@}"; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; [ ${#} -eq 2 ] || die "Usage: ${FUNCNAME} <path> <new-name>"; local wrapd=${python_scriptroot:-${DESTTREE}/bin}; local f=${1}; local newfn=${2}; local PYTHON_SCRIPTDIR d; python_export PYTHON_SCRIPTDIR; d=${PYTHON_SCRIPTDIR#${EPREFIX}}; ( dodir "${wrapd}"; exeinto "${d}"; newexe "${f}" "${newfn}" || die ); _python_ln_rel "${ED%/}"/usr/lib/python-exec/python-exec2 "${ED%/}/${wrapd}/${newfn}" || die; if [[ -n ${_PYTHON_REWRITE_SHEBANG} ]]; then python_fix_shebang -q "${ED%/}/${d}/${newfn}"; fi } python_newscript () { debug-print-function ${FUNCNAME} "${@}"; local _PYTHON_REWRITE_SHEBANG=1; python_newexe "${@}" } python_optimize () { debug-print-function ${FUNCNAME} "${@}"; if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then eerror "The new Python eclasses expect the compiled Python files to"; eerror "be controlled by the Package Manager. For this reason,"; eerror "the python_optimize function can be used only during src_* phases"; eerror "(src_install most commonly) and not during pkg_* phases."; echo; die "python_optimize is not to be used in pre/post* phases"; fi; [[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).'; local PYTHON=${PYTHON}; [[ -n ${PYTHON} ]] || python_export PYTHON; if [ ${#} -eq 0 ] ; then local f; while IFS= read -r -d '' f; do if [[ ${f} == /* && -d ${D}${f} ]]; then set – "${D}${f}" "${@}"; fi; done < <("${PYTHON}" -c 'import sys; print("\0".join(sys.path))'); debug-print "${FUNCNAME}: using sys.path: ${*/%/;}"; fi; local d; for d in "$@"; do local instpath=${d#${D}}; instpath=/${instpath##/}; case "${EPYTHON}" in python*) "${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"; "${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}" ;; *) "${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}" ;; esac; done } python_pkg_setup () { die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup " } python_scriptinto () { debug-print-function ${FUNCNAME} "${@}"; python_scriptroot=${1} } python_set_active_version () { die "${FUNCNAME}() is invalid for python-r1 suite, please take a look @ https://wiki.gentoo.org/wiki/Project:Python/Python.eclass_conversion#pkg_setup " } python_setup () { debug-print-function ${FUNCNAME} "${@}"; if [[ -n ${EPYTHON} ]]; then if _python_EPYTHON_supported "${EPYTHON}"; then python_export EPYTHON PYTHON; python_wrapper_setup; return; fi; fi; local variant i; for variant in '' '- python2' ' -python3'; do i=$(eselect python --show ${variant} 2>/dev/null); if [[ ! -n ${i} ]]; then break; else if _python_EPYTHON_supported "${i}"; then python_export "${i}" EPYTHON PYTHON; python_wrapper_setup; return; fi; fi; done; local rev_impls=(); for i in "${_PYTHON_ALL_IMPLS [@] }"; do if has "${i}" "${PYTHON_COMPAT [@] }"; then rev_impls=("${i}" "${rev_impls [@] }"); fi; done; for i in "${rev_impls [@] }"; do python_export "${i}" EPYTHON PYTHON; if _python_EPYTHON_supported "${EPYTHON}"; then python_wrapper_setup; return; fi; done; eerror "No Python implementation found for the build. This is usually"; eerror "a bug in the ebuild. Please report it to bugs.gentoo.org"; eerror "along with the build log."; echo; die "No supported Python implementation installed." } python_wrapper_setup () { debug-print-function ${FUNCNAME} "${@}"; local workdir=${1:-${T}/${EPYTHON}}; local impl=${2:-${EPYTHON}}; [[ -n ${workdir} ]] || die "${FUNCNAME}: no workdir specified."; [[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified."; if [[ ! -x ${workdir}/bin/python ]]; then _python_check_dead_variables; mkdir -p "${workdir}"/{bin,pkgconfig} || die; rm -f "${workdir}"/bin/python{,2,3,-config}; rm -f "${workdir}"/bin/2to3; rm -f "${workdir}"/pkgconfig/python{,2,3}.pc; local EPYTHON PYTHON; python_export "${impl}" EPYTHON PYTHON; local pyver; if python_is_python3; then pyver=3; else pyver=2; fi; ln -s "${PYTHON}" "${workdir}"/bin/python || die; ln -s python "${workdir}"/bin/python${pyver} || die; local nonsupp=(); if [[ ${EPYTHON} == python* ]]; then ln -s "${PYTHON}-config" "${workdir}"/bin/python-config || die; ln s "${PYTHON/python/2to3 }" "${workdir}"/bin/2to3 || die; ln s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n }.pc "${workdir}"/pkgconfig/python.pc || die; ln -s python.pc "${workdir}"/pkgconfig/python${pyver}.pc || die; else nonsupp+=(2to3 python-config); fi; local x; for x in "${nonsupp [@] }"; do cat > "${workdir}"/bin/${x} <<_ EOF _ #!/bin/sh echo "${x} is not supported by ${EPYTHON}" >&2 exit 1 _ EOF _ chmod +x "${workdir}"/bin/${x} || die; done if [[ ${PATH##:*} != ${workdir}/bin ]]; then PATH=${workdir}/bin${PATH:+:${PATH}}; fi; if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}; fi; export PATH PKG_CONFIG_PATH; fi } raw-ldflags () { local x input="$@"; [[ -z ${input} ]] && input=${LDFLAGS}; set --; for x in ${input}; do case ${x} in -Wl,*) x=${x#-Wl,}; set – "$@" ${x//,/ } ;; *) ;; esac; 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 ] && die "Usage: replace-flags <old flag> <new flag>"; local f var new; for var in $(all-flag-vars); do new=(); for f in ${!var}; do [[ ${f} == ${1} ]] && f=${2}; new+=("${f}"); done; eval export ${var}=\""${new [*] }"\"; 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 } setup-allowed-flags () { ALLOWED_FLAGS="-pipe"; ALLOWED_FLAGS+=" -O -O1 -O2 -Os -Og -mcpu -march -mtune"; ALLOWED_FLAGS+=" -fstack-protector* -fsanitize=*"; ALLOWED_FLAGS+=" -fbounds-check -fbounds-checking -fno-strict-overflow"; ALLOWED_FLAGS+=" -fno-PIE -fno-pie -nopie -fno-unit-at-a-time"; ALLOWED_FLAGS+=" -g -g[0-9] -ggdb -ggdb[0-9] -gdwarf-* gstabs -gstabs+"; ALLOWED_FLAGS+=" -fno-ident -fpermissive -frecord-gcc-switches"; ALLOWED_FLAGS+=" -fdiagnostics*"; ALLOWED_FLAGS+=" -W* -w"; ALLOWED_FLAGS+=" -fno-stack-protector* -fabi-version=* -fno-strict-aliasing -fno-bounds-check -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer -fno-builtin*"; ALLOWED_FLAGS+=" -mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow -mno-popcnt -mno-abm -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mfloat-gprs -mspe -mno-spe -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mx32 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt -m*-toc -mfloat-abi -mfix-r10000 -mno-fix-r10000 -D* -U*"; ALLOWED_FLAGS+=" -mno-fma4 -mno-movbe -mno-xop -mno-lwp"; ALLOWED_FLAGS+=" -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm"; ALLOWED_FLAGS+=" -mno-avx2 -mno-bmi2 -mno-fma -mno-lzcnt"; ALLOWED_FLAGS+=" -mno-fxsr -mno-rtm -mno-xsave -mno-xsaveopt"; ALLOWED_FLAGS+=" -mno-avx512cd -mno-avx512er -mno-avx512f -mno-avx512pf -mno-sha"; ALLOWED_FLAGS+=" -I* -L* -R* -Wl,*"; export ALLOWED_FLAGS; return 0 } src_compile () { cmake-utils_src_compile } src_configure () { tc-export CC; use jit || append-cppflags -DENABLE_JIT=0 -DENABLE_YARR_JIT=0 -DENABLE_ASSEMBLER=0; use alpha && append-ldflags " Wl, -no-relax"; use sparc && filter-flags "-mvis"; use ppc64 && append-flags "-mminimal-toc"; if ! use ia64; then append-ldflags " Wl, -no-keep-memory"; fi; if ! $(tc-getLD) --version | grep -q "GNU gold"; then append-ldflags " Wl, -reduce-memory-overheads"; fi; if has_version "<sys-libs/glibc-2.18"; then append-cppflags "-D__STDC_LIMIT_MACROS"; fi; local ruby_interpreter=""; if has_version "virtual/rubygems [ruby_targets_ruby22] "; then ruby_interpreter="RUBY=$(type -P ruby22)"; else if has_version "virtual/rubygems [ruby_targets_ruby21] "; then ruby_interpreter="RUBY=$(type -P ruby21)"; else if has_version "virtual/rubygems [ruby_targets_ruby20] "; then ruby_interpreter="RUBY=$(type -P ruby20)"; else ruby_interpreter="RUBY=$(type -P ruby19)"; fi; fi; fi; local mycmakeargs=($(cmake-utils_use_enable test API_TESTS) $(cmake-utils_use_enable doc GTKDOC) $(cmake-utils_use_enable geoloc GEOLOCATION) $(cmake-utils_use_enable gstreamer VIDEO) $(cmake-utils_use_enable gstreamer WEB_AUDIO) $(cmake-utils_use_enable introspection) $(cmake-utils_use_enable jit) $(cmake-utils_use_enable libsecret CREDENTIAL_STORAGE) $(cmake-utils_use_enable spell SPELLCHECK SPELLCHECK) $(cmake-utils_use_enable webgl WEBGL) $(cmake-utils_use_find_package egl EGL) $(cmake-utils_use_find_package opengl OpenGL) -DCMAKE_BUILD_TYPE=Release -DENABLE_X11_TARGET=ON -DPORT=GTK -DENABLE_PLUGIN_PROCESS_GTK2=ON ${ruby_interpreter}); cmake-utils_src_configure } src_install () { cmake-utils_src_install; use jit && pax-mark m "${ED}usr/bin/jsc" "${ED}usr/libexec/webkit2gtk-4.0/WebKitWebProcess"; pax-mark m "${ED}usr/libexec/webkit2gtk-4.0/WebKitPluginProcess"{,2} } src_prepare () { epatch "${FILESDIR}"/${PN}-2.6.0-{hppa,ia64}-platform.patch; epatch "${FILESDIR}"/${PN}-2.6.0-ia64-malloc.patch; gnome2_src_prepare } src_test () { use jit && pax-mark m $(list-paxables Programs/*[Tt]ests/*); cmake-utils_src_test } src_unpack () { gnome2_src_unpack "$@" } strip-flags () { local x y var; setup-allowed-flags; set -f; for var in $(all-flag-vars); do local new=(); for x in ${!var}; do local flag=${x%%=*}; for y in ${ALLOWED_FLAGS}; do if [[ -z ${flag%%${y}} ]]; then new+=("${x}"); break; fi; done; done; if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then new+=(-O2); fi; if [[ ${!var} != "${new [*] }" ]]; then einfo "strip-flags: ${var}: changed '${!var}' to '${new [*] }'"; fi; eval export ${var}=\""${new [*] }"\"; done; set +f; 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} ]] && einfo "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 aarch64*be) echo big ;; aarch64) echo little ;; 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*le) echo little ;; 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 () { tc-export_build_env; CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@" } 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-export_build_env () { tc-export "$@"; : ${BUILD_CFLAGS:=-O1 -pipe}; : ${BUILD_CXXFLAGS:=-O1 -pipe}; : ${BUILD_CPPFLAGS:= }; : ${BUILD_LDFLAGS:= }; export BUILD_{C,CXX,CPP,LD}FLAGS; local v; for v in BUILD_{C,CXX,CPP,LD}FLAGS; do export ${v#BUILD_}_FOR_BUILD="${!v}"; 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-getGO () { tc-getPROG GO gccgo "$@" } tc-getLD () { tc-getPROG LD ld "$@" } tc-getNM () { tc-getPROG NM nm "$@" } tc-getOBJCOPY () { tc-getPROG OBJCOPY objcopy "$@" } tc-getOBJDUMP () { tc-getPROG OBJDUMP objdump "$@" } 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 <omp.h> 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 () { [[ ${CBUILD:-${CHOST}} != ${CHOST} ]] } tc-is-softfloat () { local CTARGET=${CTARGET:-${CHOST}}; case ${CTARGET} in bfin* | h8300*) echo "only" ;; *) if [[ ${CTARGET//_/ } == -softfloat ]]; then echo "yes"; else if [[ ${CTARGET//_/ } == -softfp ]]; then echo "softfp"; else echo "no"; fi; fi ;; esac } tc-is-static-only () { local host=${CTARGET:-${CHOST}}; [[ ${host} == -mint ]] } tc-ld-disable-gold () { if ! tc-ld-is-gold "$@"; then return; fi; ewarn "Forcing usage of the BFD linker instead of GOLD"; local ld=$(tc-getLD "$@"); local bfd_ld="${ld%% *}.bfd"; local path_ld=$(which "${bfd_ld}" 2>/dev/null); [[ -e ${path_ld} ]] && export LD=${bfd_ld}; local major=$(gcc-major-version "$@"); local minor=$(gcc-minor-version "$@"); if [[ ${major} -lt 4 ]] || [[ ${major} -eq 4 && ${minor} -lt 8 ]]; then if [[ -e ${path_ld} ]]; then local d="${T}/bfd-linker"; mkdir -p "${d}"; ln -sf "${path_ld}" "${d}"/ld; export LDFLAGS="${LDFLAGS} -B${d}"; else die "unable to locate a BFD linker to bypass gold"; fi; else export LDFLAGS="${LDFLAGS} -fuse-ld=bfd"; fi } tc-ld-is-gold () { local out; out=$($(tc-getLD "$@") --version 2>&1); if [[ ${out} == "GNU gold" ]]; then return 0; fi; local base="${T}/test-tc-gold"; cat > "${base}.c" <<-EOF int main() { return 0; } EOF out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} Wl, -version "${base}.c" -o "${base}" 2>&1); rm -f "${base}"*; if [[ ${out} == "GNU gold" ]]; then return 0; fi; return 1 } tc-ninja_magic_to_arch () { function ninj () { [[ ${type} == "kern" ]] && echo $1 || echo $2 }; local type=$1; local host=$2; [[ z ${host} ]] && host=${CTARGET: ${CHOST}}; local KV=${KV:-${KV_FULL}}; [[ ${type} == "kern" ]] && [[ -z ${KV} ]] && ewarn "QA: Kernel version could not be determined, please inherit kernel-2 or linux-info"; case ${host} in aarch64*) echo arm64 ;; alpha*) echo alpha ;; arm*) echo arm ;; avr*) ninj avr32 avr ;; bfin*) ninj blackfin bfin ;; c6x*) echo c6x ;; cris*) echo cris ;; frv*) echo frv ;; hexagon*) echo hexagon ;; 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 ;; metag*) echo metag ;; microblaze*) echo microblaze ;; mips*) echo mips ;; nios2*) echo nios2 ;; nios*) echo nios ;; or32*) echo openrisc ;; 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 ;; riscv*) echo riscv ;; s390*) echo s390 ;; score*) echo score ;; sh64*) ninj sh64 sh ;; sh*) echo sh ;; sparc64*) ninj sparc64 sparc ;; sparc*) [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc ;; tile*) echo tile ;; 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 ;; xtensa*) echo xtensa ;; *) echo unknown ;; esac } test-flag-CC () { test-flag-PROG "CC" c "$1" } test-flag-CXX () { test-flag-PROG "CXX" c++ "$1" } test-flag-F77 () { test-flag-PROG "F77" f77 "$1" } test-flag-FC () { test-flag-PROG "FC" f95 "$1" } test-flag-PROG () { local comp=$1; local lang=$2; local flag=$3; [[ -z ${comp} || -z ${flag} ]] && return 1; local cmdline=($(tc-get${comp}) -Werror -c -o /dev/null); if "${cmdline [@] }" -x${lang} - < /dev/null > /dev/null 2>&1; then "${cmdline [@] }" "${flag}" -x${lang} - < /dev/null > /dev/null 2>&1; else "${cmdline [@] }" "${flag}" -c -o /dev/null /dev/null > /dev/null 2>&1; fi } 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+=("${x}"); done; echo "${flags [*] }"; [[ ${#flags [@] } -gt 0 ]] } test_version_info () { if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then return 0; else return 1; fi } uclibctoolize () { die "Use elibtoolize" } use_if_iuse () { in_iuse $1 || return 1; use $1 } validate_desktop_entries () { _eutils_eprefix_init; if [[ -x "${EPREFIX}"/usr/bin/desktop-file-validate ]]; then einfo "Checking desktop entry validity"; local directories=""; for d in /usr/share/applications $@; do [[ -d ${ED}${d} ]] && directories="${directories} ${ED}${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/${ED}/}:}; 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 1280x1024x24"; 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} \"$@\""; if has "${EAPI}" 2 3; then ${VIRTUALX_COMMAND} "$@"; retval=$?; else nonfatal ${VIRTUALX_COMMAND} "$@"; retval=$?; fi; 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 }
It is not merging. I think it has something to do with dev-libs/icu but haven't been able to figure out what.
Here's the info:
# emerge --info '=net-libs/webkit-gtk-2.6.6' Portage 2.3.6-r9 (funtoo/1.0/linux-gnu/arch/x86-64bit, gcc-4.9.2, glibc-2.20-r1, 4.1.2 x86_64) ================================================================= System Settings ================================================================= System uname: Linux-4.1.2-x86_64-AMD_Phenom-tm-_II_X6_1100T_Processor-with-gentoo-2.2.0 KiB Mem: 16397844 total, 2307040 free KiB Swap: 8264768 total, 8234964 free Timestamp of tree: Unknown ld GNU ld (Funtoo 2.25) 2.25.0 ccache version 3.2.2 [disabled] app-shells/bash: 4.3_p39 dev-java/java-config: 2.2.0-r1000 dev-lang/perl: 5.22.0 dev-lang/python: 2.7.10-r1000, 3.3.6-r1000 dev-util/ccache: 3.2.2 dev-util/cmake: 3.2.3 sys-apps/baselayout: 2.2.0-r6 sys-apps/openrc: 0.12.4-r4 sys-apps/sandbox: 2.6-r2 sys-devel/autoconf: 2.13, 2.69-r1 sys-devel/automake: 1.11.6-r1, 1.12.6, 1.13.4, 1.14.1, 1.15 sys-devel/binutils: 2.25-r1 sys-devel/gcc: 4.9.2-r1 sys-devel/gcc-config: 1.8 sys-devel/libtool: 2.4.3-r2 sys-devel/make: 4.1-r1 sys-kernel/linux-headers: 4.0 (virtual/os-headers) sys-libs/glibc: 2.20-r1 Repositories: gentoo causelay dstien gamerlay vortex ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="* -@EULA Oracle-BCLA-JavaSE" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-march=amdfam10 -O2 -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/lib64/libreoffice/program/sofficerc /usr/share/gnupg/qualified.txt /var/bind" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.5/ext-active/ /etc/php/cgi-php5.5/ext-active/ /etc/php/cli-php5.5/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-march=amdfam10 -O2 -pipe" DISTDIR="/usr/portage/distfiles" EMERGE_DEFAULT_OPTS="--with-bdeps=y" FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync mini-manifest news parallel-fetch parallel-install preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch xattr" FFLAGS="-march=amdfam10 -O2 -pipe" GENTOO_MIRRORS="http://distfiles.gentoo.org" INSTALL_MASK="/usr/lib/systemd/ /lib/systemd/" LANG="en_US.UTF-8" LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed" LINGUAS="en es en_US es_MX es_LA" MAKEOPTS="-j7 -l6" PKGDIR="/usr/portage/packages" PORTAGE_CONFIGROOT="/" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" PORTDIR_OVERLAY="/var/lib/layman/causelay /var/lib/layman/dstien-portage /var/lib/layman/gamerlay /var/lib/layman/vortex" SYNC="git://github.com/funtoo/ports-2012.git" SYNC_USER="root" USE="X a52 aac aacplus aalib acl adplug alac alsa amd64 amr amrenc apng attr audiofile bash-completion berkdb bluray bzip2 c++11 cairo cdda cddb cdio cdr celt colord consolekit cracklib crypt cups cxx dbus dc1394 dhclient dirac djvu dri dts dv dvd dvdr dvdread eds encode evo exif faac faad ffmpeg flac fluidsynth fpx gallium gdbm gif glamor gme gnome gnome-keyring gnome-online-accounts gnutls gpm gsm gstreamer gtk gtk3 gtkstyle hardened hdri ico iconv icu id3tag iec61883 ieee1394 imagemagick introspection ios ipod ipv6 jack jbig jpeg jpeg2k kate ladspa lame lcms libass libguess libmpeg2 libnotify libtiger live lv2 mac mad matroska midi mikmod mjpeg mms mmx mng modplug modules mp3 mpeg mtp mudflap multilib musepack nautilus ncurses networkmanager nls nptl nsplugin nuv ogg openexr opengl openmp opus pam pax_kernel pcre pdf pic png pnm policykit postproc pppd pulseaudio python quicktime readline resolvconf rtmp rtsp ruby schroedinger shorten sid sndfile sox speex sse sse2 ssl svg symlink taglib tcpd tga theora tiff toolame tracker truetype twolame udev unicode urandom v4l vaapi vdpau vim-syntax vorbis vpx wav wavpack webkit-gtk webp wildmidi win32codecs wmf x264 x265 xattr xinerama xml xtpax xvid zlib" ABI_X86="32 64" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel ice1724 intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" 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" 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 authn_core authz_core socache_shmcb unixd" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="3dnow 3dnowext mmx mmxext popcnt sse sse2 sse3 sse4a" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="efi-64 pc" INPUT_DEVICES="evdev synaptics keyboard mouse" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="nlpsolver" LINGUAS="en es en_US es_MX es_LA" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-6" PYTHON_ABIS="2.7 3.3" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" QEMU_SOFTMMU_TARGETS="i386 x86_64" QEMU_USER_TARGETS="i386 x86_64" RUBY_TARGETS="ruby19 ruby20 ruby21 ruby22" TENGINE_SHARED_MODULES_HTTP="access addition autoindex browser charset_filter empty_gif fastcgi flv footer_filter geoip image_filter limit_conn limit_req lua map memcached mp4 random_index referer reqstat rewrite scgi secure_link slice split_clients sub sysguard tfs trim_filter upstream_ip_hash upstream_least_conn upstream_session_sticky user_agent userid_filter uwsgi xslt" TENGINE_STATIC_MODULES_HTTP="concat dav degradation geo gunzip gzip gzip_static perl proxy realip spdy ssi ssl stub_status upstream-rbtree upstream_check upstream_consistent_hash upstream_keepalive" USERLAND="GNU" VIDEO_CARDS="radeon radeonsi" 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" Unset: CPPFLAGS, CTARGET, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, SYNC_UMASK ================================================================= Package Settings ================================================================= net-libs/webkit-gtk-2.6.6 was built with the following: USE="egl gstreamer introspection opengl webgl -coverage -doc -geoloc -jit -libsecret -spell -test" LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,--no-keep-memory -Wl,--reduce-memory-overh # emerge -pqv '=net-libs/webkit-gtk-2.6.6' [ebuild R ] net-libs/webkit-gtk-2.6.6 USE="egl gstreamer introspection opengl webgl -coverage -doc -geoloc -jit -libsecret -spell {-test}"