Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 499170 Details for
Bug 634692
dev-lang/mono-4.4.1.0: cp: cannot stat 'mdoc.exe': No such file or directory
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
environment
environnment (text/plain), 136.88 KB, created by
malinowski
on 2017-10-18 21:55:51 UTC
(
hide
)
Description:
environment
Filename:
MIME Type:
Creator:
malinowski
Created:
2017-10-18 21:55:51 UTC
Size:
136.88 KB
patch
obsolete
>declare -x ABI="amd64" >declare -x ABI_X86="64" >declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" >declare -x APACHE2_MODULES="authn_core authz_core socache_shmcb unixd 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 BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_4 python_targets_python2_7 multilib hardened pax_kernel pic xtpax -jit -orc" >declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" >declare -x CBUILD="x86_64-pc-linux-gnu" >declare -x CCASFLAGS="" >declare -x CFLAGS="-march=silvermont -O2 -pipe" >declare -x CFLAGS_amd64="-m64" >declare -x CFLAGS_default >declare -x CFLAGS_x32="-mx32" >declare -x CFLAGS_x86="-m32" >declare -x CHOST="x86_64-pc-linux-gnu" >declare -x CHOST_amd64="x86_64-pc-linux-gnu" >declare -x CHOST_default="x86_64-pc-linux-gnu" >declare -x CHOST_x32="x86_64-pc-linux-gnux32" >declare -x CHOST_x86="i686-pc-linux-gnu" >declare -x CODEC="xvid vpx x265 x264 openh264 opus libcaca bluray ogg rtmp matroska librtmp theora cdda encode dvd mpeg flac a52 dts ffmpeg aac mp3 vorbis alsa libass svg gif jpeg apng png jpeg2k imlib tiff imagemagick" >declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" >declare -- COMMONDEPEND=" > !minimal? ( >=dev-dotnet/libgdiplus-2.10 ) > ia64? ( sys-libs/libunwind ) > nls? ( sys-devel/gettext ) >" >declare -x COMP="bzip2 lzo zlib rar archive zip minizip" >declare -x CONF_PREFIX="/usr" >declare -x CPPFLAGS="" >declare -x CPU_FLAGS_X86="mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3" >declare -x CTARGET_default="x86_64-pc-linux-gnu" >declare -x CURL_SSL="libressl" >declare -x CXXFLAGS="-march=silvermont -O2 -pipe" >declare -x DEFAULT_ABI="amd64" >declare -x DEFINED_PHASES=" compile configure install prepare pretend setup test" >declare DEPEND=" > !minimal? ( >=dev-dotnet/libgdiplus-2.10 ) > ia64? ( sys-libs/libunwind ) > nls? ( sys-devel/gettext ) > > sys-devel/bc > virtual/yacc > pax_kernel? ( sys-apps/elfix ) > !dev-lang/mono-basic > " >declare DESCRIPTION="Mono runtime and class libraries, a C# compiler/interpreter" >declare -x DESTTREE="/usr" >declare -x DIROPTIONS="-m0755" >declare -x DOC="cups text xml djvu postscript ebook mobi" >declare -x EAPI="6" >declare -- ECONF_SOURCE="." >declare -x ELIBC="glibc" >declare -x EMU="spice lxc virgl virt-network usbredir hvm" >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/notmpfs/portage/dev-lang/mono-4.4.1.0/work/patch" >declare -- EPATCH_SUFFIX="patch.bz2" >declare -x EXEOPTIONS="-m0755" >declare -x FCFLAGS="-O2 -pipe" >declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" >declare -x FFLAGS="-O2 -pipe" >declare -x FS="device-mapper e2fsprogs btrfs mtp" >declare -x GCC_SPECS="" >declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" >declare -x GPU="wayland wayland-compositor egl eglfs vulkan opengl dri3 drm glamor gallium d3d9 vaapi -gles -gles1 -gles2 -gles3" >declare -x GRUB_PLATFORMS="pc" >declare -x GSETTINGS_BACKEND="dconf" >declare HDEPEND="" >declare HOMEPAGE="http://www.mono-project.com/Main_Page" >declare -x INHERITED=" estack epatch toolchain-funcs multilib ltprune eutils versionator linux-info mono-env flag-o-matic pax-utils multibuild multilib-build multilib-minimal" >declare -x INPUT_DEVICES="evdev synaptics" >declare -x INSDESTTREE="" >declare -x INSOPTIONS="-m0644" >declare IUSE="nls minimal pax_kernel xen doc abi_x86_32 abi_x86_64 abi_x86_x32 abi_mips_n32 abi_mips_n64 abi_mips_o32 abi_ppc_32 abi_ppc_64 abi_s390_32 abi_s390_64" >declare -x IUSE_EFFECTIVE="abi_mips_n32 abi_mips_n64 abi_mips_o32 abi_ppc_32 abi_ppc_64 abi_s390_32 abi_s390_64 abi_x86_32 abi_x86_64 abi_x86_x32 alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 doc elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc hppa ia64 kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k m68k-mint minimal mips nios2 nls pax_kernel ppc ppc-aix ppc-macos ppc64 ppc64-linux prefix prefix-chain prefix-guest riscv s390 sh sparc sparc-fbsd sparc-solaris sparc64-solaris userland_BSD userland_GNU x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt xen" >declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-chain prefix-guest" >declare -x KERNEL="linux" >declare -x KERNEL_ABI="amd64" >declare -- KERNEL_DIR="/usr/src/linux" >declare -- KERNEL_MAKEFILE="/usr/src/linux/Makefile" >declare -x KEYWORDS="amd64 ppc ~ppc64 x86 ~amd64-linux" >declare -- KV_DIR="/usr/src/linux" >declare -- KV_EXTRA="-gentoo" >declare -- KV_FULL="4.12.12-gentoo" >declare -- KV_LOCAL="" >declare -- KV_MAJOR="4" >declare -- KV_MINOR="12" >declare -- KV_OUT_DIR="/lib/modules/4.12.12-gentoo/build" >declare -- KV_PATCH="12" >declare -x LANG="en_GB.utf8" >declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" >declare -x LC_ALL="C" >declare -x LC_COLLATE="C" >declare -x LC_MESSAGES="C" >declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed" >declare -x LDFLAGS_amd64="-m elf_x86_64" >declare -x LDFLAGS_default >declare -x LDFLAGS_x32="-m elf32_x86_64" >declare -x LDFLAGS_x86="-m elf_i386" >declare -x LIBDIR_amd64="lib64" >declare -x LIBDIR_default="lib" >declare -x LIBDIR_x32="libx32" >declare -x LIBDIR_x86="lib32" >declare -x LIBOPTIONS="-m0644" >declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" >declare -x LICENSE="MIT LGPL-2.1 GPL-2 BSD-4 NPL-1.1 Ms-PL GPL-2-with-linking-exception IDPL" >declare -x LINGUAS="en en_GB" >declare -x MAIL="/var/mail/root" >declare -x MAKEOPTS="-j1" >declare -x MANPAGER="manpager" >declare -x MONO_REGISTRY_PATH="/var/tmp/notmpfs/portage/dev-lang/mono-4.4.1.0/temp/registry" >declare -x MONO_SHARED_DIR="/var/tmp/notmpfs/portage/dev-lang/mono-4.4.1.0/temp" >declare -x MULTILIB_ABIS="amd64 x86" >declare -x MULTILIB_STRICT_DENY="64-bit.*shared object" >declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib" >declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec|llvm)" >declare -- MULTILIB_USEDEP="abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_ppc_32(-)?,abi_ppc_64(-)?,abi_s390_32(-)?,abi_s390_64(-)?" >declare -x NET="ssl ssh libressl git gpg gnutls sasl ipv6 -bluetooth -ldap -kerberos networkmanager -sslv2 -sslv3 -tls-heartbeat -geolocation -geoip -samba" >declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml" >declare -x NGINX_MODULES_HTTP="access auth_basic autoindex browser charset empty_gif fastcgi geo gzip limit_conn limit_req map memcached mirror proxy referer rewrite scgi split_clients ssi upstream_hash upstream_ip_hash upstream_keepalive upstream_least_conn upstream_zone userid uwsgi" >declare -x OFFICE_IMPLEMENTATION="libreoffice" >declare -x OPENGL_PROFILE="xorg-x11" >declare -x PATH="/usr/lib/portage/python3.4/ebuild-helpers/xattr:/usr/lib/portage/python3.4/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/5.4.0:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin" >declare -- PAX_MARKINGS="PT XT" >declare PDEPEND="" >declare -x PHP_TARGETS="php5-6" >declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig" >declare -x PORTAGE_COMPRESSION_COMMAND="bzip2" >declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")' >declare -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128" >declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/mono-4.4.1.0/html")' >declare -x POSTGRES_TARGETS="postgres9_5" >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 PYTHONDONTWRITEBYTECODE="1" >declare -x PYTHON_SINGLE_TARGET="python3_4" >declare -x PYTHON_TARGETS="python2_7 python3_4" >declare -- QA_MULTILIB_PATHS="usr/lib/" >declare RDEPEND=" > !minimal? ( >=dev-dotnet/libgdiplus-2.10 ) > ia64? ( sys-libs/libunwind ) > nls? ( sys-devel/gettext ) > > || ( www-client/links www-client/lynx ) > " >declare REPOSITORY >declare REQUIRED_USE="" >declare -x RESTRICT="" >declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" >declare -x RUBY_TARGETS="ruby22" >declare -x S="/var/tmp/notmpfs/portage/dev-lang/mono-4.4.1.0/work/mono-4.4.1" >declare -x SANDBOX_DENY="" >declare -x SANDBOX_PREDICT="" >declare -x SANDBOX_READ="/:/var/tmp/notmpfs" >declare -x SANDBOX_WRITE="/var/tmp/notmpfs" >declare -x SEC="xattr crypt seccomp ssp pic pie cryptsetup" >declare -x SHELL="/bin/bash" >declare -x SLOT="0" >declare SRC_URI="http://download.mono-project.com/sources/mono/mono-4.4.1.0.tar.bz2" >declare -x SUDO_COMMAND="/bin/bash" >declare -x SUDO_GID="1000" >declare -x SUDO_UID="1000" >declare -x SUDO_USER="jord" >declare -x SYMLINK_LIB="yes" >declare -x SYS="nls unicode symlink threads sqlite udev elogind dbus pam policykit -consolekit -bindist -systemd -udisks -gvfs -pulseaudio" >declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1" >declare -x UI="X -gtk -qt3support -qt4 -wxwidgets qt5 gtkstyle fontconfig truetype -gnome -kde" >declare -x USE="abi_x86_64 amd64 elibc_glibc kernel_linux nls pax_kernel userland_GNU" >declare -x USERLAND="GNU" >declare -x USERNAME="root" >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 ia64 m68k m68k-mint mips nios2 ppc ppc64 ppc64-linux ppc-aix ppc-macos riscv s390 sh sparc sparc64-solaris sparc-fbsd sparc-solaris x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt" >declare -x USE_EXPAND_VALUES_ELIBC="AIX bionic Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mingw 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="intel i965" >declare -x XDG_CONFIG_HOME="/var/tmp/notmpfs/portage/dev-lang/mono-4.4.1.0/temp" >declare -x XDG_DATA_HOME="/var/tmp/notmpfs/portage/dev-lang/mono-4.4.1.0/temp/data" >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 -- _EPATCH_ECLASS="1" >declare -- _ESTACK_ECLASS="1" >declare -- _EUTILS_ECLASS="1" >declare -x _E_DOCDESTTREE_="" >declare -x _E_EXEDESTTREE_="" >declare -- _FLAG_O_MATIC_ECLASS="1" >declare -- _LINUX_CONFIG_EXISTS_DONE="" >declare -- _LTPRUNE_ECLASS="1" >declare -- _MONO_ENV="1" >declare -- _MULTIBUILD="1" >declare -- _MULTILIB_BUILD="1" >declare -- _MULTILIB_ECLASS="1" >declare -a _MULTILIB_FLAGS='([0]="abi_x86_32:x86,x86_fbsd,x86_freebsd,x86_linux,x86_macos,x86_solaris" [1]="abi_x86_64:amd64,amd64_fbsd,x64_freebsd,amd64_linux,x64_macos,x64_solaris" [2]="abi_x86_x32:x32" [3]="abi_mips_n32:n32" [4]="abi_mips_n64:n64" [5]="abi_mips_o32:o32" [6]="abi_ppc_32:ppc,ppc_aix,ppc_macos" [7]="abi_ppc_64:ppc64" [8]="abi_s390_32:s390" [9]="abi_s390_64:s390x")' >declare -- _PAX_UTILS_ECLASS="1" >declare -- _TOOLCHAIN_FUNCS_ECLASS="1" >declare -- _VERSIONATOR_ECLASS="1" >declare -- get_version_warning_done="" >declare -- phase_func >__eapi6_src_install () >{ > if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then > emake DESTDIR="${D}" install; > fi; > einstalldocs >} >__eapi6_src_prepare () >{ > if [[ $(declare -p PATCHES 2>/dev/null) == "declare -a"* ]]; then > [[ -n ${PATCHES[@]} ]] && eapply "${PATCHES[@]}"; > else > if [[ -n ${PATCHES} ]]; then > eapply ${PATCHES}; > fi; > fi; > eapply_user >} >_clang_fullversion () >{ > local ver="$1"; > shift; > set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__"); > eval echo "$ver" >} >_eutils_eprefix_init () >{ > has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}} >} >_filter-hardened () >{ > local f; > for f in "$@"; > do > case "${f}" in > -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie) > gcc-specs-pie || continue; > if ! is-flagq -nopie && ! is-flagq -no-pie; then > if test-flags -nopie > /dev/null; then > append-flags -nopie; > else > append-flags -no-pie; > fi; > fi > ;; > -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; > 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" >} >_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="$1[*]"; > for x in ${!var}; > do > [[ ${x} == $2 ]] && return 0; > done; > return 1 >} >_multibuild_create_source_copy () >{ > einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}"; > cp -p -R "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die >} >_multibuild_run () >{ > local i=1; > while [[ ${!i} == _* ]]; do > (( i += 1 )); > done; > [[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}"; > "${@}" >} >_multilib_multibuild_wrapper () >{ > debug-print-function ${FUNCNAME} "${@}"; > local ABI=${MULTIBUILD_VARIANT#*.}; > local -r MULTILIB_ABI_FLAG=${MULTIBUILD_VARIANT%.*}; > multilib_toolchain_setup "${ABI}"; > readonly ABI; > "${@}" >} >_pax_list_files () >{ > local f cmd; > cmd=$1; > shift; > for f in "$@"; > do > ${cmd} " ${f}"; > done >} >_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[0]}); > [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p ${!tuple}-${prog[0]}); > [[ -n ${search} ]] && prog[0]=${search##*/}; > export ${var}="${prog[*]}"; > echo "${!var}" >} >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_extra_config () >{ > local config negate die error reworkmodulenames; > local soft_errors_count=0 hard_errors_count=0 config_required=0; > local old_LINUX_CONFIG_EXISTS_DONE="${_LINUX_CONFIG_EXISTS_DONE}"; > linux-info_get_any_version; > for config in ${CONFIG_CHECK}; > do > if [[ "${config:0:1}" != "~" ]]; then > config_required=1; > break; > fi; > done; > if [[ ${config_required} == 0 ]]; then > if ! linux_config_exists; then > ewarn "Unable to check for the following kernel config options due"; > ewarn "to absence of any configured kernel sources or compiled"; > ewarn "config:"; > for config in ${CONFIG_CHECK}; > do > config=${config#\~}; > config=${config#\!}; > local_error="ERROR_${config}"; > msg="${!local_error}"; > if [[ -z ${msg} ]]; then > local_error="WARNING_${config}"; > msg="${!local_error}"; > fi; > ewarn " - ${config}${msg:+ - }${msg}"; > done; > ewarn "You're on your own to make sure they are set if needed."; > export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}"; > return 0; > fi; > else > require_configured_kernel; > fi; > einfo "Checking for suitable kernel configuration options..."; > for config in ${CONFIG_CHECK}; > do > die=1; > error=0; > negate=0; > reworkmodulenames=0; > if [[ ${config:0:1} == "~" ]]; then > die=0; > config=${config:1}; > else > if [[ ${config:0:1} == "@" ]]; then > die=0; > reworkmodulenames=1; > config=${config:1}; > fi; > fi; > if [[ ${config:0:1} == "!" ]]; then > negate=1; > config=${config:1}; > fi; > if [[ ${negate} == 1 ]]; then > linux_chkconfig_present ${config} && error=2; > else > if [[ ${reworkmodulenames} == 1 ]]; then > local temp_config="${config//*:}" i n; > config="${config//:*}"; > if linux_chkconfig_present ${config}; then > for i in ${MODULE_NAMES}; > do > n="${i//${temp_config}}"; > [[ -z ${n//\(*} ]] && MODULE_IGNORE="${MODULE_IGNORE} ${temp_config}"; > done; > error=2; > fi; > else > linux_chkconfig_present ${config} || error=1; > fi; > fi; > if [[ ${error} > 0 ]]; then > local report_func="eerror" local_error; > local_error="ERROR_${config}"; > local_error="${!local_error}"; > if [[ -z "${local_error}" ]]; then > local_error="${config}_ERROR"; > local_error="${!local_error}"; > fi; > if [[ ${die} == 0 && -z "${local_error}" ]]; then > local_error="WARNING_${config}"; > local_error="${!local_error}"; > if [[ -n "${local_error}" ]]; then > report_func="ewarn"; > fi; > fi; > if [[ -z "${local_error}" ]]; then > [[ ${error} == 1 ]] && local_error="is not set when it should be." || local_error="should not be set. But it is."; > local_error="CONFIG_${config}:\t ${local_error}"; > fi; > if [[ ${die} == 0 ]]; then > ${report_func} " ${local_error}"; > soft_errors_count=$[soft_errors_count + 1]; > else > ${report_func} " ${local_error}"; > hard_errors_count=$[hard_errors_count + 1]; > fi; > fi; > done; > if [[ ${hard_errors_count} > 0 ]]; then > eerror "Please check to make sure these options are set correctly."; > eerror "Failure to do so may cause unexpected problems."; > eerror "Once you have satisfied these options, please try merging"; > eerror "this package again."; > export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}"; > die "Incorrect kernel configuration options"; > else > if [[ ${soft_errors_count} > 0 ]]; then > ewarn "Please check to make sure these options are set correctly."; > ewarn "Failure to do so may cause unexpected problems."; > else > eend 0; > fi; > fi; > export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}" >} >check_kernel_built () >{ > require_configured_kernel; > get_version; > local versionh_path; > if kernel_is -ge 3 7; then > versionh_path="include/generated/uapi/linux/version.h"; > else > versionh_path="include/linux/version.h"; > fi; > if [ ! -f "${KV_OUT_DIR}/${versionh_path}" ]; then > eerror "These sources have not yet been prepared."; > eerror "We cannot build against an unprepared tree."; > eerror "To resolve this, please type the following:"; > eerror; > eerror "# cd ${KV_DIR}"; > eerror "# make oldconfig"; > eerror "# make modules_prepare"; > eerror; > eerror "Then please try merging this module again."; > die "Kernel sources need compiling first"; > fi >} >check_license () >{ > die "you no longer need this as portage supports ACCEPT_LICENSE itself" >} >check_modules_supported () >{ > require_configured_kernel; > get_version; > if ! linux_chkconfig_builtin "MODULES"; then > eerror "These sources do not support loading external modules."; > eerror "to be able to use this module please enable \"Loadable modules support\""; > eerror "in your kernel, recompile and then try merging this module again."; > die "No support for external modules in ${KV_FULL} config"; > fi >} >check_zlibinflate () >{ > require_configured_kernel; > get_version; > local INFLATE; > local DEFLATE; > einfo "Determining the usability of ZLIB_INFLATE support in your kernel"; > ebegin "checking ZLIB_INFLATE"; > linux_chkconfig_builtin CONFIG_ZLIB_INFLATE; > eend $?; > [ "$?" != 0 ] && die; > ebegin "checking ZLIB_DEFLATE"; > linux_chkconfig_builtin CONFIG_ZLIB_DEFLATE; > eend $?; > [ "$?" != 0 ] && die; > local LINENO_START; > local LINENO_END; > local SYMBOLS; > local x; > LINENO_END="$(grep -n 'CONFIG_ZLIB_INFLATE y' ${KV_DIR}/lib/Config.in | cut -d : -f 1)"; > LINENO_START="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | grep -n 'if \[' | tail -n 1 | cut -d : -f 1)"; > (( LINENO_AMOUNT = $LINENO_END - $LINENO_START )); > (( LINENO_END = $LINENO_END - 1 )); > SYMBOLS="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | tail -n $LINENO_AMOUNT | sed -e 's/^.*\(CONFIG_[^\" ]*\).*/\1/g;')"; > for x in $SYMBOLS; > do > if [ "${!x}" = "y" ]; then > einfo "${x} ensures zlib is linked into your kernel - excellent"; > return 0; > fi; > done; > eerror; > eerror "This kernel module requires ZLIB library support."; > eerror "You have enabled zlib support in your kernel, but haven't enabled"; > eerror "enabled any option that will ensure that zlib is linked into your"; > eerror "kernel."; > eerror; > eerror "Please ensure that you enable at least one of these options:"; > eerror; > for x in $SYMBOLS; > do > eerror " * $x"; > done; > eerror; > eerror "Please remember to recompile and install your kernel, and reboot"; > eerror "into your new kernel before attempting to load this kernel module."; > die "Kernel doesn't include zlib support" >} >clang-fullversion () >{ > _clang_fullversion '$1.$2.$3' "$@" >} >clang-major-version () >{ > _clang_fullversion '$1' "$@" >} >clang-micro-version () >{ > _clang_fullversion '$3' "$@" >} >clang-minor-version () >{ > _clang_fullversion '$2' "$@" >} >clang-version () >{ > _clang_fullversion '$1.$2' "$@" >} >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} ) >} >eapply () >{ > local failed patch_cmd=patch; > local -x LC_COLLATE=POSIX; > type -P gpatch > /dev/null && patch_cmd=gpatch; > function _eapply_patch () > { > local f=${1}; > local prefix=${2}; > started_applying=1; > ebegin "${prefix:-Applying }${f##*/}"; > ${patch_cmd} -p1 -f -s -g0 --no-backup-if-mismatch "${patch_options[@]}" < "${f}"; > failed=${?}; > if ! eend "${failed}"; then > __helpers_die "patch -p1 ${patch_options[*]} failed with ${f}"; > fi > }; > local patch_options=() files=(); > local i found_doublehyphen; > for ((i = 1; i <= ${#@}; ++i )) > do > if [[ ${@:i:1} == -- ]]; then > patch_options=("${@:1:i-1}"); > files=("${@:i+1}"); > found_doublehyphen=1; > break; > fi; > done; > if [[ -z ${found_doublehyphen} ]]; then > for ((i = 1; i <= ${#@}; ++i )) > do > if [[ ${@:i:1} != -* ]]; then > patch_options=("${@:1:i-1}"); > files=("${@:i}"); > break; > fi; > done; > for i in "${files[@]}"; > do > if [[ ${i} == -* ]]; then > die "eapply: all options must be passed before non-options"; > fi; > done; > fi; > if [[ -z ${files[@]} ]]; then > die "eapply: no files specified"; > fi; > local f; > for f in "${files[@]}"; > do > if [[ -d ${f} ]]; then > function _eapply_get_files () > { > local LC_ALL=POSIX; > local prev_shopt=$(shopt -p nullglob); > shopt -s nullglob; > local f; > for f in "${1}"/*; > do > if [[ ${f} == *.diff || ${f} == *.patch ]]; then > files+=("${f}"); > fi; > done; > ${prev_shopt} > }; > local files=(); > _eapply_get_files "${f}"; > [[ -z ${files[@]} ]] && die "No *.{patch,diff} files in directory ${f}"; > einfo "Applying patches from ${f} ..."; > local f2; > for f2 in "${files[@]}"; > do > _eapply_patch "${f2}" ' '; > [[ ${failed} -ne 0 ]] && return "${failed}"; > done; > else > _eapply_patch "${f}"; > [[ ${failed} -ne 0 ]] && return "${failed}"; > fi; > done; > return 0 >} >eapply_user () >{ > [[ ${EBUILD_PHASE} == prepare ]] || die "eapply_user() called during invalid phase: ${EBUILD_PHASE}"; > local tagfile=${T}/.portage_user_patches_applied; > [[ -f ${tagfile} ]] && return; > >> "${tagfile}"; > local basedir=${PORTAGE_CONFIGROOT%/}/etc/portage/patches; > local applied d f; > local -A _eapply_user_patches; > local prev_shopt=$(shopt -p nullglob); > shopt -s nullglob; > for d in "${basedir}"/${CATEGORY}/{${P}-${PR},${P},${PN}}{:${SLOT%/*},}; > do > for f in "${d}"/*; > do > if [[ ( ${f} == *.diff || ${f} == *.patch ) && -z ${_eapply_user_patches[${f##*/}]} ]]; then > _eapply_user_patches[${f##*/}]=${f}; > fi; > done; > done; > if [[ ${#_eapply_user_patches[@]} -gt 0 ]]; then > while read -r -d '' f; do > f=${_eapply_user_patches[${f}]}; > if [[ -s ${f} ]]; then > eapply "${f}"; > applied=1; > fi; > done < <(printf -- '%s\0' "${!_eapply_user_patches[@]}" | > LC_ALL=C sort -z); > fi; > ${prev_shopt}; > [[ -n ${applied} ]] && ewarn "User patches applied." >} >ebeep () >{ > ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org" >} >econf_build () >{ > local CBUILD=${CBUILD:-${CHOST}}; > tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@" >} >ecvs_clean () >{ > [[ $# -eq 0 ]] && 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 >} >egit_clean () >{ > [[ $# -eq 0 ]] && set -- .; > find "$@" -type d -name '.git*' -prune -print0 | xargs -0 rm -rf >} >einstalldocs () >{ > ( if ! declare -p DOCS &> /dev/null; then > local d; > for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG; > do > [[ -f ${d} && -s ${d} ]] && docinto / && dodoc "${d}"; > done; > else > if [[ $(declare -p DOCS) == "declare -a"* ]]; then > [[ -n ${DOCS[@]} ]] && docinto / && dodoc -r "${DOCS[@]}"; > else > [[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS}; > fi; > fi ); > ( if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then > [[ -n ${HTML_DOCS[@]} ]] && docinto html && dodoc -r "${HTML_DOCS[@]}"; > else > [[ -n ${HTML_DOCS} ]] && docinto html && dodoc -r ${HTML_DOCS}; > 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 >} >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} --dry-run -f < '${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 "PATCH COMMAND: ${patch_cmd} < '${PATCH_TARGET}'"; > 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; > (( EPATCH_N_APPLIED_PATCHES++ )); > 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"; > : >} >epause () >{ > ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at https://bugs.gentoo.org" >} >eshopts_pop () >{ > local s; > estack_pop eshopts s || die "${FUNCNAME}: unbalanced push"; > eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}" >} >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 "$(shopt -p -o)"; > [[ $# -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 () >{ > [[ $# -eq 0 ]] && 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 >} >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; > if [[ $(type -t multilib_is_native_abi) == "function" ]]; then > multilib_is_native_abi || return 0; > fi; > case ${CTARGET:-${CHOST}} in > *-darwin*) > > ;; > *-android*) > return 0 > ;; > *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 https://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_exeext () >{ > case ${CHOST} in > *-cygwin* | mingw* | *-mingw*) > echo ".exe" > ;; > esac >} >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 libdir_var="LIBDIR_${ABI}"; > local libdir="lib"; > [[ -n ${ABI} && -n ${!libdir_var} ]] && libdir=${!libdir_var}; > echo "${libdir}" >} >get_libname () >{ > local libname; > local ver=$1; > case ${CHOST} in > *-cygwin*) > libname="dll.a" > ;; > 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 > *-cygwin*) > echo ".${ver}.${libname}" > ;; > *-darwin*) > echo ".${ver}.${libname}" > ;; > *-mint*) > echo ".${libname}" > ;; > *) > echo ".${libname}.${ver}" > ;; > esac; > done; > fi >} >get_localversion () >{ > local lv_list i x; > for i in $(ls ${1}/localversion* 2>/dev/null); > do > [[ -n ${i//*~*} ]] && lv_list="${lv_list} ${i}"; > done; > for i in ${lv_list}; > do > x="${x}$(<${i})"; > done; > x=${x/ /}; > echo ${x} >} >get_major_version () >{ > local c=($(get_all_version_components "${1:-${PV}}")); > echo ${c[0]} >} >get_makefile_extract_function () >{ > local a='' b='' mkfunc='getfilevar'; > a="$(getfilevar VERSION ${KERNEL_MAKEFILE})"; > b="$(getfilevar_noexec VERSION ${KERNEL_MAKEFILE})"; > [[ "${a}" != "${b}" ]] && mkfunc='getfilevar_noexec'; > echo "${mkfunc}" >} >get_modname () >{ > local modname; > local ver=$1; > case ${CHOST} in > *-darwin*) > modname="bundle" > ;; > *) > modname="so" > ;; > esac; > echo ".${modname}" >} >get_running_version () >{ > KV_FULL=$(uname -r); > if [[ -f ${ROOT}/lib/modules/${KV_FULL}/source/Makefile && -f ${ROOT}/lib/modules/${KV_FULL}/build/Makefile ]]; then > KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/source); > KBUILD_OUTPUT=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/build); > unset KV_FULL; > get_version; > return $?; > else > if [[ -f ${ROOT}/lib/modules/${KV_FULL}/source/Makefile ]]; then > KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/source); > unset KV_FULL; > get_version; > return $?; > else > if [[ -f ${ROOT}/lib/modules/${KV_FULL}/build/Makefile ]]; then > KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/build); > unset KV_FULL; > get_version; > return $?; > else > local kv_full=${KV_FULL//[-+_]*}; > KV_MAJOR=$(get_version_component_range 1 ${kv_full}); > KV_MINOR=$(get_version_component_range 2 ${kv_full}); > KV_PATCH=$(get_version_component_range 3 ${kv_full}); > KV_EXTRA="${KV_FULL#${KV_MAJOR}.${KV_MINOR}${KV_PATCH:+.${KV_PATCH}}}"; > : ${KV_PATCH:=0}; > fi; > fi; > fi; > return 0 >} >get_version () >{ > local tmplocal; > [ -n "${KV_FULL}" ] && return 0; > unset KV_DIR; > [ -z "${get_version_warning_done}" ] && qeinfo "Determining the location of the kernel source code"; > [ -d "${KERNEL_DIR}" ] && KV_DIR="${KERNEL_DIR}"; > if [ -z "${KV_DIR}" ]; then > if [ -z "${get_version_warning_done}" ]; then > get_version_warning_done=1; > qewarn "Unable to find kernel sources at ${KERNEL_DIR}"; > if [ "${KERNEL_DIR}" == "/usr/src/linux" ]; then > qeinfo "Please make sure that ${KERNEL_DIR} points at your running kernel, "; > qeinfo "(or the kernel you wish to build against)."; > qeinfo "Alternatively, set the KERNEL_DIR environment variable to the kernel sources location"; > else > qeinfo "Please ensure that the KERNEL_DIR environment variable points at full Linux sources of the kernel you wish to compile against."; > fi; > fi; > return 1; > fi; > if [ -z "${KBUILD_OUTPUT}" -a -L "${KERNEL_DIR}/source" ]; then > KBUILD_OUTPUT=${KERNEL_DIR}; > KERNEL_DIR=$(readlink -f "${KERNEL_DIR}/source"); > KV_DIR=${KERNEL_DIR}; > fi; > if [ -z "${get_version_warning_done}" ]; then > qeinfo "Found kernel source directory:"; > qeinfo " ${KV_DIR}"; > fi; > if [ ! -s "${KV_DIR}/Makefile" ]; then > if [ -z "${get_version_warning_done}" ]; then > get_version_warning_done=1; > qeerror "Could not find a Makefile in the kernel source directory."; > qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources"; > fi; > return 1; > fi; > local OUTPUT_DIR=${KBUILD_OUTPUT}; > KERNEL_MAKEFILE="${KV_DIR}/Makefile"; > if [[ -z ${OUTPUT_DIR} ]]; then > local mkfunc=$(get_makefile_extract_function "${KERNEL_MAKEFILE}"); > OUTPUT_DIR=$(${mkfunc} KBUILD_OUTPUT "${KERNEL_MAKEFILE}"); > fi; > KV_MAJOR=$(getfilevar_noexec VERSION "${KERNEL_MAKEFILE}"); > KV_MINOR=$(getfilevar_noexec PATCHLEVEL "${KERNEL_MAKEFILE}"); > KV_PATCH=$(getfilevar_noexec SUBLEVEL "${KERNEL_MAKEFILE}"); > KV_EXTRA=$(getfilevar_noexec EXTRAVERSION "${KERNEL_MAKEFILE}"); > if [ -z "${KV_MAJOR}" -o -z "${KV_MINOR}" -o -z "${KV_PATCH}" ]; then > if [ -z "${get_version_warning_done}" ]; then > get_version_warning_done=1; > qeerror "Could not detect kernel version."; > qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources."; > fi; > return 1; > fi; > if [[ -z ${OUTPUT_DIR} ]]; then > for OUTPUT_DIR in "${SYSROOT}" "${ROOT}" ""; > do > OUTPUT_DIR+="/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}/build"; > if [[ -e ${OUTPUT_DIR} ]]; then > break; > fi; > done; > fi; > [ -d "${OUTPUT_DIR}" ] && KV_OUT_DIR="${OUTPUT_DIR}"; > if [ -n "${KV_OUT_DIR}" ]; then > qeinfo "Found kernel object directory:"; > qeinfo " ${KV_OUT_DIR}"; > fi; > KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}"; > if [ -s "${KV_OUT_DIR}"/include/config/kernel.release ]; then > KV_LOCAL=$(<"${KV_OUT_DIR}"/include/config/kernel.release); > else > if [ -s "${KV_OUT_DIR}"/.kernelrelease ]; then > KV_LOCAL=$(<"${KV_OUT_DIR}"/.kernelrelease); > else > KV_LOCAL=; > fi; > fi; > tmplocal=${KV_LOCAL#${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}}; > if [ "$KV_LOCAL" = "$tmplocal" ]; then > KV_LOCAL=; > else > KV_LOCAL=$tmplocal; > fi; > KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}"; > qeinfo "Found sources for kernel version:"; > qeinfo " ${KV_FULL}"; > return 0 >} >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//[-._]/ } >} >getfilevar () >{ > local ERROR basefname basedname myARCH="${ARCH}" M="${S}"; > ERROR=0; > [ -z "${1}" ] && ERROR=1; > [ ! -f "${2}" ] && ERROR=1; > if [ "${ERROR}" = 1 ]; then > echo -e "\n"; > eerror "getfilevar requires 2 variables, with the second a valid file."; > eerror " getfilevar <VARIABLE> <CONFIGFILE>"; > else > basefname="$(basename ${2})"; > basedname="$(dirname ${2})"; > unset ARCH; > [[ ${EAPI:-0} == [0123] ]] && function nonfatal () > { > "$@" > }; > case ${EBUILD_PHASE_FUNC} in > pkg_info | pkg_nofetch | pkg_pretend) > M="${T}" > ;; > esac; > echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | nonfatal emake -C "${basedname}" M="${M}" ${BUILD_FIXES} -s -f - 2> /dev/null; > ARCH=${myARCH}; > fi >} >getfilevar_noexec () >{ > local ERROR basefname basedname mycat myARCH="${ARCH}"; > ERROR=0; > mycat='cat'; > [ -z "${1}" ] && ERROR=1; > [ ! -f "${2}" ] && ERROR=1; > [ "${2%.gz}" != "${2}" ] && mycat='zcat'; > if [ "${ERROR}" = 1 ]; then > echo -e "\n"; > eerror "getfilevar_noexec requires 2 variables, with the second a valid file."; > eerror " getfilevar_noexec <VARIABLE> <CONFIGFILE>"; > else > ${mycat} "${2}" | sed -n -e "/^[[:space:]]*${1}[[:space:]]*:\\?=[[:space:]]*\(.*\)\$/{ > s,^[^=]*[[:space:]]*=[[:space:]]*,,g ; > s,[[:space:]]*\$,,g ; > p > }"; > fi >} >has_m32 () >{ > die "${FUNCNAME}: don't use this anymore" >} >has_m64 () >{ > die "${FUNCNAME}: don't use this anymore" >} >has_multilib_profile () >{ > [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] >} >host-is-pax () >{ > grep -qs ^PaX: /proc/self/status >} >in_iuse () >{ > local use=${1}; > if [[ -z "${use}" ]]; then > echo "!!! in_iuse() called without a parameter." 1>&2; > echo "!!! in_iuse <USEFLAG>" 1>&2; > die "in_iuse() called without a parameter"; > fi; > local liuse=(${IUSE_EFFECTIVE}); > has "${use}" "${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 >} >kernel_is () >{ > linux-info_get_any_version; > local operator test value; > case ${1#-} in > lt) > operator="-lt"; > shift > ;; > gt) > operator="-gt"; > shift > ;; > le) > operator="-le"; > shift > ;; > ge) > operator="-ge"; > shift > ;; > eq) > operator="-eq"; > shift > ;; > *) > operator="-eq" > ;; > esac; > [[ $# -gt 3 ]] && die "Error in kernel-2_kernel_is(): too many parameters"; > : $(( test = (KV_MAJOR << 16) + (KV_MINOR << 8) + KV_PATCH )); > : $(( value = (${1:-${KV_MAJOR}} << 16) + (${2:-${KV_MINOR}} << 8) + ${3:-${KV_PATCH}} )); > [ ${test} ${operator} ${value} ] >} >linux-info_get_any_version () >{ > get_version; > if [[ $? -ne 0 ]]; then > ewarn "Unable to calculate Linux Kernel version for build, attempting to use running version"; > get_running_version; > fi >} >linux-info_pkg_setup () >{ > linux-info_get_any_version; > if kernel_is 2 4; then > if [ "$( gcc-major-version )" -eq "4" ]; then > echo; > ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with"; > ewarn "linux-2.4 (or modules building against a linux-2.4 kernel)!"; > echo; > ewarn "Either switch to another gcc-version (via gcc-config) or use a"; > ewarn "newer kernel that supports gcc-4."; > echo; > ewarn "Also be aware that bugreports about gcc-4 not working"; > ewarn "with linux-2.4 based ebuilds will be closed as INVALID!"; > echo; > epause 10; > fi; > fi; > [ -n "${CONFIG_CHECK}" ] && check_extra_config >} >linux_chkconfig_builtin () >{ > linux_config_qa_check linux_chkconfig_builtin; > [[ $(getfilevar_noexec "CONFIG_$1" "$(linux_config_path)") == y ]] >} >linux_chkconfig_module () >{ > linux_config_qa_check linux_chkconfig_module; > [[ $(getfilevar_noexec "CONFIG_$1" "$(linux_config_path)") == m ]] >} >linux_chkconfig_present () >{ > linux_config_qa_check linux_chkconfig_present; > [[ $(getfilevar_noexec "CONFIG_$1" "$(linux_config_path)") == [my] ]] >} >linux_chkconfig_string () >{ > linux_config_qa_check linux_chkconfig_string; > getfilevar_noexec "CONFIG_$1" "$(linux_config_path)" >} >linux_config_bin_exists () >{ > export _LINUX_CONFIG_EXISTS_DONE=1; > [[ -s /proc/config.gz ]] >} >linux_config_exists () >{ > linux_config_src_exists || linux_config_bin_exists >} >linux_config_path () >{ > if linux_config_src_exists; then > echo "${KV_OUT_DIR}/.config"; > else > if linux_config_bin_exists; then > echo "/proc/config.gz"; > else > return 1; > fi; > fi >} >linux_config_qa_check () >{ > local f="$1"; > if [ -z "${_LINUX_CONFIG_EXISTS_DONE}" ]; then > ewarn "QA: You called $f before any linux_config_exists!"; > ewarn "QA: The return value of $f will NOT guaranteed later!"; > fi >} >linux_config_src_exists () >{ > export _LINUX_CONFIG_EXISTS_DONE=1; > [[ -n ${KV_OUT_DIR} && -s ${KV_OUT_DIR}/.config ]] >} >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:+;}; > 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%.*}; > fi; > 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 >} >mono-env_pkg_setup () >{ > export MONO_SHARED_DIR="${T}"; > export MONO_REGISTRY_PATH="${T}/registry"; > export XDG_DATA_HOME="${T}/data"; > export LC_ALL=C; > export XDG_CONFIG_HOME="${T}"; > unset MONO_AOT_CACHE; > QA_MULTILIB_PATHS="usr/lib/" >} >multibuild_copy_sources () >{ > debug-print-function ${FUNCNAME} "${@}"; > local _MULTIBUILD_INITIAL_BUILD_DIR=${BUILD_DIR:-${S}}; > einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}"; > local cp_args=(); > if cp --reflink=auto --version &> /dev/null; then > cp_args+=(--reflink=auto); > fi; > function _multibuild_create_source_copy () > { > einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}"; > cp -p -R "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die > }; > multibuild_foreach_variant _multibuild_create_source_copy >} >multibuild_for_best_variant () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set"; > local MULTIBUILD_VARIANTS=("${MULTIBUILD_VARIANTS[$(( ${#MULTIBUILD_VARIANTS[@]} - 1 ))]}"); > multibuild_foreach_variant "${@}" >} >multibuild_foreach_variant () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set"; > local bdir=${BUILD_DIR:-${S}}; > [[ ${bdir%%/} == ${WORKDIR%%/} ]] && bdir=${WORKDIR}/build; > local prev_id=${MULTIBUILD_ID:+${MULTIBUILD_ID}-}; > local ret=0 lret=0 v; > debug-print "${FUNCNAME}: initial build_dir = ${bdir}"; > for v in "${MULTIBUILD_VARIANTS[@]}"; > do > local MULTIBUILD_VARIANT=${v}; > local MULTIBUILD_ID=${prev_id}${v}; > local BUILD_DIR=${bdir%%/}-${v}; > function _multibuild_run () > { > local i=1; > while [[ ${!i} == _* ]]; do > (( i += 1 )); > done; > [[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}"; > "${@}" > }; > _multibuild_run "${@}" > >(exec tee -a "${T}/build-${MULTIBUILD_ID}.log") 2>&1; > lret=${?}; > done; > [[ ${ret} -eq 0 && ${lret} -ne 0 ]] && ret=${lret}; > return ${ret} >} >multibuild_merge_root () >{ > local src=${1}; > local dest=${2}; > local ret; > if use userland_BSD; then > tar -C "${src}" -f - -c . | tar -x -f - -C "${dest}"; > [[ ${PIPESTATUS[*]} == '0 0' ]]; > ret=${?}; > else > local cp_args=(); > if cp -a --version &> /dev/null; then > cp_args+=(-a); > else > cp_args+=(-P -R -p); > fi; > if cp --reflink=auto --version &> /dev/null; then > cp_args+=(--reflink=auto); > fi; > cp "${cp_args[@]}" "${src}"/. "${dest}"/; > ret=${?}; > fi; > if [[ ${ret} -ne 0 ]]; then > die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed."; > fi; > rm -rf "${src}" >} >multibuild_parallel_foreach_variant () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}"; > multibuild_foreach_variant "${@}" >} >multilib-minimal_abi_src_configure () >{ > debug-print-function ${FUNCNAME} "$@"; > mkdir -p "${BUILD_DIR}" || die; > pushd "${BUILD_DIR}" > /dev/null || die; > if declare -f multilib_src_configure > /dev/null; then > multilib_src_configure; > else > default_src_configure; > fi; > popd > /dev/null || die >} >multilib-minimal_src_compile () >{ > debug-print-function ${FUNCNAME} "$@"; > function multilib-minimal_abi_src_compile () > { > debug-print-function ${FUNCNAME} "$@"; > pushd "${BUILD_DIR}" > /dev/null || die; > if declare -f multilib_src_compile > /dev/null; then > multilib_src_compile; > else > default_src_compile; > fi; > popd > /dev/null || die > }; > multilib_foreach_abi multilib-minimal_abi_src_compile >} >multilib-minimal_src_configure () >{ > debug-print-function ${FUNCNAME} "$@"; > function multilib-minimal_abi_src_configure () > { > debug-print-function ${FUNCNAME} "$@"; > mkdir -p "${BUILD_DIR}" || die; > pushd "${BUILD_DIR}" > /dev/null || die; > if declare -f multilib_src_configure > /dev/null; then > multilib_src_configure; > else > default_src_configure; > fi; > popd > /dev/null || die > }; > multilib_foreach_abi multilib-minimal_abi_src_configure >} >multilib-minimal_src_install () >{ > debug-print-function ${FUNCNAME} "$@"; > function multilib-minimal_abi_src_install () > { > debug-print-function ${FUNCNAME} "$@"; > pushd "${BUILD_DIR}" > /dev/null || die; > if declare -f multilib_src_install > /dev/null; then > multilib_src_install; > else > if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then > emake DESTDIR="${D}" install; > fi; > fi; > multilib_prepare_wrappers; > multilib_check_headers; > popd > /dev/null || die > }; > multilib_foreach_abi multilib-minimal_abi_src_install; > multilib_install_wrappers; > if declare -f multilib_src_install_all > /dev/null; then > multilib_src_install_all; > else > einstalldocs; > fi >} >multilib-minimal_src_test () >{ > debug-print-function ${FUNCNAME} "$@"; > function multilib-minimal_abi_src_test () > { > debug-print-function ${FUNCNAME} "$@"; > pushd "${BUILD_DIR}" > /dev/null || die; > if declare -f multilib_src_test > /dev/null; then > multilib_src_test; > else > default_src_test; > fi; > popd > /dev/null || die > }; > multilib_foreach_abi multilib-minimal_abi_src_test >} >multilib_build_binaries () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}, use multilib_is_native_abi() instead"; > eqawarn "QA warning: multilib_build_binaries is deprecated. Please use the equivalent"; > eqawarn "multilib_is_native_abi function instead."; > multilib_is_native_abi "${@}" >} >multilib_check_headers () >{ > function _multilib_header_cksum () > { > set -o pipefail; > if [[ -d ${ED}usr/include ]]; then > find "${ED}"usr/include -type f -exec cksum {} + | sort -k2; > fi > }; > local cksum cksum_prev; > local cksum_file=${T}/.multilib_header_cksum; > cksum=$(_multilib_header_cksum) || die; > unset -f _multilib_header_cksum; > if [[ -f ${cksum_file} ]]; then > cksum_prev=$(< "${cksum_file}") || die; > if [[ ${cksum} != ${cksum_prev} ]]; then > echo "${cksum}" > "${cksum_file}.new" || die; > eerror "Header files have changed between ABIs."; > if type -p diff &> /dev/null; then > eerror "$(diff -du "${cksum_file}" "${cksum_file}.new")"; > else > eerror "Old checksums in: ${cksum_file}"; > eerror "New checksums in: ${cksum_file}.new"; > fi; > die "Header checksum mismatch, aborting."; > fi; > else > echo "${cksum}" > "${cksum_file}" || die; > fi >} >multilib_copy_sources () >{ > debug-print-function ${FUNCNAME} "${@}"; > local MULTIBUILD_VARIANTS=($(multilib_get_enabled_abi_pairs)); > multibuild_copy_sources >} >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_for_best_abi () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ ${EAPI} == [45] ]] || die "${FUNCNAME} is banned in EAPI ${EAPI}, use multilib_is_native_abi() instead"; > eqawarn "QA warning: multilib_for_best_abi() function is deprecated and should"; > eqawarn "not be used. The multilib_is_native_abi() check may be used instead."; > local MULTIBUILD_VARIANTS=($(multilib_get_enabled_abi_pairs)); > multibuild_for_best_variant _multilib_multibuild_wrapper "${@}" >} >multilib_foreach_abi () >{ > debug-print-function ${FUNCNAME} "${@}"; > local MULTIBUILD_VARIANTS=($(multilib_get_enabled_abi_pairs)); > multibuild_foreach_variant _multilib_multibuild_wrapper "${@}" >} >multilib_get_enabled_abi_pairs () >{ > debug-print-function ${FUNCNAME} "${@}"; > local abis=($(get_all_abis)); > local abi i found; > for abi in "${abis[@]}"; > do > for i in "${_MULTILIB_FLAGS[@]}"; > do > local m_abis=${i#*:} m_abi; > local m_flag=${i%:*}; > for m_abi in ${m_abis//,/ }; > do > if [[ ${m_abi} == ${abi} ]] && { > [[ ! -n "${MULTILIB_COMPAT[@]}" ]] || has "${m_flag}" "${MULTILIB_COMPAT[@]}" > } && use "${m_flag}"; then > echo "${m_flag}.${abi}"; > found=1; > break 2; > fi; > done; > done; > done; > if [[ ! -n ${found} ]]; then > local abi=${ABI:-${DEFAULT_ABI}}; > debug-print "${FUNCNAME}: no ABIs enabled, fallback to ${abi}"; > debug-print "${FUNCNAME}: ABI=${ABI}, DEFAULT_ABI=${DEFAULT_ABI}"; > echo ".${abi}"; > fi >} >multilib_get_enabled_abis () >{ > debug-print-function ${FUNCNAME} "${@}"; > local pairs=($(multilib_get_enabled_abi_pairs)); > echo "${pairs[@]#*.}" >} >multilib_install_wrappers () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ ${#} -le 1 ]] || die "${FUNCNAME}: too many arguments"; > [[ ${COMPLETE_MULTILIB} == yes ]] && return; > local root=${1:-${ED}}; > if [[ -d "${ED}"/tmp/multilib-include ]]; then > multibuild_merge_root "${ED}"/tmp/multilib-include "${root}"/usr/include; > rmdir "${ED}"/tmp &> /dev/null; > fi >} >multilib_is_native_abi () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ ${#} -eq 0 ]] || die "${FUNCNAME}: too many arguments"; > [[ ${COMPLETE_MULTILIB} == yes || ${ABI} == ${DEFAULT_ABI} ]] >} >multilib_native_enable () >{ > if multilib_is_native_abi; then > echo "--enable-${1}${2+=${2}}"; > else > echo "--disable-${1}"; > fi >} >multilib_native_use_enable () >{ > if multilib_is_native_abi; then > use_enable "${@}"; > else > echo "--disable-${2:-${1}}"; > fi >} >multilib_native_use_with () >{ > if multilib_is_native_abi; then > use_with "${@}"; > else > echo "--without-${2:-${1}}"; > fi >} >multilib_native_usex () >{ > if multilib_is_native_abi; then > usex "${@}"; > else > echo "${3-no}${5}"; > fi >} >multilib_native_with () >{ > if multilib_is_native_abi; then > echo "--with-${1}${2+=${2}}"; > else > echo "--without-${1}"; > fi >} >multilib_parallel_foreach_abi () >{ > debug-print-function ${FUNCNAME} "${@}"; > local MULTIBUILD_VARIANTS=($(multilib_get_enabled_abi_pairs)); > multibuild_foreach_variant _multilib_multibuild_wrapper "${@}" >} >multilib_prepare_wrappers () >{ > debug-print-function ${FUNCNAME} "${@}"; > [[ ${#} -le 1 ]] || die "${FUNCNAME}: too many arguments"; > local root=${1:-${ED}}; > local f; > if [[ ${COMPLETE_MULTILIB} == yes ]]; then > for f in "${MULTILIB_CHOST_TOOLS[@]}"; > do > f=${f#/}; > local dir=${f%/*}; > local fn=${f##*/}; > ln -s "${fn}" "${root}/${dir}/${CHOST}-${fn}" || die; > done; > return; > fi; > for f in "${MULTILIB_CHOST_TOOLS[@]}"; > do > f=${f#/}; > local dir=${f%/*}; > local fn=${f##*/}; > if [[ -L ${root}/${f} ]]; then > local target; > target=$(readlink "${root}/${f}") || die; > local target_dir target_fn=${target##*/}; > [[ ${target} == */* ]] && target_dir=${target%/*}; > ln -f -s "${target_dir+${target_dir}/}${CHOST}-${target_fn}" "${root}/${f}" || die; > fi; > mv "${root}/${f}" "${root}/${dir}/${CHOST}-${fn}" || die; > if multilib_is_native_abi; then > ln -s "${CHOST}-${fn}" "${root}/${f}" || die; > fi; > done; > if [[ -n ${MULTILIB_WRAPPED_HEADERS[@]} ]]; then > if [[ -n ${MULTILIB_ABI_FLAG} ]]; then > for f in "${MULTILIB_WRAPPED_HEADERS[@]}"; > do > f=${f#/}; > if [[ ${f} != usr/include/* ]]; then > die "Wrapping headers outside of /usr/include is not supported at the moment."; > fi; > f=${f#usr/include}; > local dir=${f%/*}; > if [[ -f ${root}/usr/include${f} ]]; then > local wrapper=${ED}/tmp/multilib-include${f}; > if [[ ! -f ${ED}/tmp/multilib-include${f} ]]; then > dodir "/tmp/multilib-include${dir}"; > cat > "${wrapper}" <<_EOF_ || >/* This file is auto-generated by multilib-build.eclass > * as a multilib-friendly wrapper. For the original content, > * please see the files that are #included below. > */ > >#if defined(__x86_64__) /* amd64 */ ># if defined(__ILP32__) /* x32 ABI */ ># error "abi_x86_x32 not supported by the package." ># else /* 64-bit ABI */ ># error "abi_x86_64 not supported by the package." ># endif >#elif defined(__i386__) /* plain x86 */ ># error "abi_x86_32 not supported by the package." >#elif defined(__mips__) ># if(_MIPS_SIM == _ABIN32) /* n32 */ ># error "abi_mips_n32 not supported by the package." ># elif(_MIPS_SIM == _ABI64) /* n64 */ ># error "abi_mips_n64 not supported by the package." ># elif(_MIPS_SIM == _ABIO32) /* o32 */ ># error "abi_mips_o32 not supported by the package." ># endif >#elif defined(__sparc__) ># if defined(__arch64__) ># error "abi_sparc_64 not supported by the package." ># else ># error "abi_sparc_32 not supported by the package." ># endif >#elif defined(__s390__) ># if defined(__s390x__) ># error "abi_s390_64 not supported by the package." ># else ># error "abi_s390_32 not supported by the package." ># endif >#elif defined(__powerpc__) ># if defined(__powerpc64__) ># error "abi_ppc_64 not supported by the package." ># else ># error "abi_ppc_32 not supported by the package." ># endif >#elif defined(SWIG) /* https://sourceforge.net/p/swig/bugs/799/ */ ># error "Native ABI not supported by the package." >#else ># error "No ABI matched, please report a bug to bugs.gentoo.org" >#endif >_EOF_ > die; > fi > if ! grep -q "${MULTILIB_ABI_FLAG} " "${wrapper}"; then > die "Flag ${MULTILIB_ABI_FLAG} not listed in wrapper template. Please report a bug to https://bugs.gentoo.org."; > fi; > dodir "/tmp/multilib-include/${CHOST}${dir}"; > mv "${root}/usr/include${f}" "${ED}/tmp/multilib-include/${CHOST}${dir}/" || die; > sed -e "/${MULTILIB_ABI_FLAG} /s&error.*&include <${CHOST}${f}>&" -i "${wrapper}" || die; > if multilib_is_native_abi; then > sed -e "/Native ABI/s&error.*&include <${CHOST}${f}>&" -i "${wrapper}" || die; > fi; > fi; > done; > fi; > fi >} >multilib_src_configure () >{ > local myeconfargs=(--disable-silent-rules $(use_with xen xen_opt) --without-ikvm-native --disable-dtrace $(use_with doc mcs-docs) $(use_enable nls)); > econf "${myeconfargs[@]}" >} >multilib_src_install () >{ > default_src_install; > rm -f "${ED}"/usr/lib/mono/{2.0,4.5}/mscorlib.dll.so || die; > rm -f "${ED}"/usr/lib/mono/{2.0,4.5}/mcs.exe.so || die >} >multilib_src_test () >{ > cd mcs/tests || die; > emake check >} >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"; > if [[ ${CBUILD} == "${CHOST}" ]]; then > export CBUILD=$(get_abi_CHOST $1); > fi; > 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 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 "$@" ) >} >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 > for f in "$@"; > do > if type -p paxctl > /dev/null; then > einfo "PT_PAX marking -${flags} ${f} with paxctl"; > paxctl -q${flags} "${f}" > /dev/null 2>&1 && 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}" > /dev/null 2>&1; > [[ -n "${flags}" ]] || continue; > paxctl-ng -L -${flags} "${f}" > /dev/null 2>&1 && continue; > fi; > if type -p scanelf > /dev/null && [[ ${PAX_MARKINGS} != "none" ]]; then > einfo "PT_PAX marking -${flags} ${f} with scanelf"; > scanelf -Xxz ${flags} "$f" > /dev/null 2>&1; > 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 > flags="${flags//z}"; > for f in "$@"; > do > if type -p paxctl-ng > /dev/null && paxctl-ng -l; then > einfo "XATTR_PAX marking -${flags} ${f} with paxctl-ng"; > [[ ${dodefault} == "yes" ]] && paxctl-ng -d "${f}" > /dev/null 2>&1; > [[ -n "${flags}" ]] || continue; > paxctl-ng -l -${flags} "${f}" > /dev/null 2>&1 && continue; > fi; > if type -p setfattr > /dev/null; then > [[ -n "${flags//[!Ee]}" ]] || flags+="e"; > einfo "XATTR_PAX marking -${flags} ${f} with setfattr"; > [[ ${dodefault} == "yes" ]] && setfattr -x "user.pax.flags" "${f}" > /dev/null 2>&1; > setfattr -n "user.pax.flags" -v "${flags}" "${f}" > /dev/null 2>&1 && 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 () >{ > default >} >pkg_pretend () >{ > CONFIG_CHECK="SYSVIPC"; > use kernel_linux && check_extra_config >} >pkg_setup () >{ > linux-info_pkg_setup; > mono-env_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; > 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=::p' "${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 > eerror "${FUNCNAME}: variable substitution likely failed in ${pc}"; > eerror "(arg: ${arg})"; > eerror "Most likely, you need to add virtual/pkgconfig to DEPEND."; > die "${FUNCNAME}: unsubstituted variable found in .pc"; > 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 "${D}" -xtype f -name '*.la' -print0); > if [[ -n ${queue[@]} ]]; then > rm -f "${queue[@]}"; > fi >} >qeerror () >{ > qout eerror "${@}" >} >qeinfo () >{ > qout einfo "${@}" >} >qewarn () >{ > qout ewarn "${@}" >} >qout () >{ > local outputmsg type; > type=${1}; > shift; > outputmsg="${@}"; > case "${EBUILD_PHASE}" in > depend) > unset outputmsg > ;; > clean) > unset outputmsg > ;; > preinst) > unset outputmsg > ;; > esac; > [ -n "${outputmsg}" ] && ${type} "${outputmsg}" >} >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; > 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 >} >require_configured_kernel () >{ > if ! linux_config_src_exists; then > qeerror "Could not find a usable .config in the kernel source directory."; > qeerror "Please ensure that ${KERNEL_DIR} points to a configured set of Linux sources."; > qeerror "If you are using KBUILD_OUTPUT, please set the environment var so that"; > qeerror "it points to the necessary object directory so that it might find .config."; > die "Kernel not configured; no .config found in ${KV_OUT_DIR}"; > fi >} >run_in_build_dir () >{ > debug-print-function ${FUNCNAME} "${@}"; > local ret; > [[ ${#} -ne 0 ]] || die "${FUNCNAME}: no command specified."; > [[ -n ${BUILD_DIR} ]] || die "${FUNCNAME}: BUILD_DIR not set."; > mkdir -p "${BUILD_DIR}" || die; > pushd "${BUILD_DIR}" > /dev/null || die; > "${@}"; > ret=${?}; > popd > /dev/null || die; > return ${ret} >} >set_arch_to_kernel () >{ > export ARCH=$(tc-arch-kernel) >} >set_arch_to_portage () >{ > export ARCH=$(tc-arch) >} >setup-allowed-flags () >{ > ALLOWED_FLAGS=(-pipe -O '-O[12sg]' -mcpu -march -mtune '-fstack-protector*' '-fsanitize*' '-fstack-check*' -fno-stack-check -fbounds-check -fbounds-checking -fno-strict-overflow -fno-PIE -fno-pie -nopie -no-pie -fno-unit-at-a-time -g '-g[0-9]' -ggdb '-ggdb[0-9]' '-gdwarf-*' gstabs -gstabs+ -fno-ident -fpermissive -frecord-gcc-switches '-fdiagnostics*' '-fplugin*' '-W*' -w '-[DUILR]*' '-Wl,*'); > 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 -mthumb -marm -mno-fma4 -mno-movbe -mno-xop -mno-lwp -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm -mno-avx2 -mno-bmi2 -mno-fma -mno-lzcnt -mno-fxsr -mno-hle -mno-rtm -mno-xsave -mno-xsaveopt -mno-avx512cd -mno-avx512er -mno-avx512f -mno-avx512pf -mno-sha) >} >src_compile () >{ > multilib-minimal_src_compile "$@" >} >src_configure () >{ > multilib-minimal_src_configure "$@" >} >src_install () >{ > multilib-minimal_src_install "$@" >} >src_prepare () >{ > if use pax_kernel; then > ewarn "We are disabling MPROTECT on the mono binary."; > sed '/exec "/ i\paxmark.sh -mr "$r/@mono_runtime@"' -i "${S}"/runtime/mono-wrapper.in || die "Failed to sed mono-wrapper.in"; > fi; > strip-flags; > default; > multilib_copy_sources >} >src_test () >{ > multilib-minimal_src_test "$@" >} >src_unpack () >{ > default >} >strip-flags () >{ > local x y var; > local ALLOWED_FLAGS; > 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; > 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}); > export LDFLAGS=$(test-flags-CC ${LDFLAGS}) >} >tc-arch () >{ > tc-ninja_magic_to_arch portage "$@" >} >tc-arch-kernel () >{ > tc-ninja_magic_to_arch kern "$@" >} >tc-check-openmp () >{ > if ! tc-has-openmp; then > eerror "Your current compiler does not support OpenMP!"; > if tc-is-gcc; then > eerror "Enable OpenMP support by building sys-devel/gcc with USE=\"openmp\"."; > else > if tc-is-clang; then > eerror "OpenMP support in sys-devel/clang is provided by sys-libs/libomp."; > fi; > fi; > die "Active compiler does not have required support for OpenMP"; > fi >} >tc-enables-pie () >{ > local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null | grep '^true$' > #if defined(__PIE__) > true > #endif > EOF > )"; > [[ ${ret} == true ]] >} >tc-enables-ssp () >{ > local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null | grep '^true$' > #if defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__) > true > #endif > EOF > )"; > [[ ${ret} == true ]] >} >tc-enables-ssp-all () >{ > local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null | grep '^true$' > #if defined(__SSP_ALL__) > true > #endif > EOF > )"; > [[ ${ret} == true ]] >} >tc-enables-ssp-strong () >{ > local ret="$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P - <<-EOF 2> /dev/null | grep '^true$' > #if defined(__SSP_STRONG__) || defined(__SSP_ALL__) > true > #endif > EOF > )"; > [[ ${ret} == true ]] >} >tc-endian () >{ > local host=$1; > [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; > host=${host%%-*}; > case ${host} in > aarch64*be) > echo big > ;; > aarch64) > echo little > ;; > alpha*) > echo little > ;; > 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}'"; > "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-get-compiler-type () >{ > local code=' >#if defined(__PATHSCALE__) > HAVE_PATHCC >#elif defined(__clang__) > HAVE_CLANG >#elif defined(__GNUC__) > HAVE_GCC >#endif >'; > local res=$($(tc-getCPP "$@") -E -P - <<<"${code}"); > case ${res} in > *HAVE_PATHCC*) > echo pathcc > ;; > *HAVE_CLANG*) > echo clang > ;; > *HAVE_GCC*) > echo gcc > ;; > *) > echo unknown > ;; > esac >} >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 "$(tc-getBUILD_CC) -E" "$@" >} >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 "${CC:-gcc} -E" "$@" >} >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-clang () >{ > [[ $(tc-get-compiler-type) == clang ]] >} >tc-is-cross-compiler () >{ > [[ ${CBUILD:-${CHOST}} != ${CHOST} ]] >} >tc-is-gcc () >{ > [[ $(tc-get-compiler-type) == gcc ]] >} >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}}; > 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" && ${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 > ;; > or1k | or32*) > echo openrisc > ;; > powerpc*) > if [[ ${type} == "kern" ]]; then > echo powerpc; > else > if [[ ${host} == powerpc64* ]]; then > echo ppc64; > else > echo ppc; > 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" ]]; then > echo x86; > else > echo amd64; > fi > ;; > xtensa*) > echo xtensa > ;; > *) > echo unknown > ;; > esac >} >tc-stack-grows-down () >{ > case ${ARCH} in > hppa | metag) > return 1 > ;; > esac; > return 0 >} >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; then > cmdline+=("${flag}" -x${lang} -); > else > cmdline+=("${flag}" -c -o /dev/null /dev/null); > fi; > if ! "${cmdline[@]}" < /dev/null &> /dev/null; then > cmdline+=(-Qunused-arguments); > "${cmdline[@]}" < /dev/null &> /dev/null; > 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 >} >use_if_iuse () >{ > in_iuse $1 || return 1; > use $1 >} >validate_desktop_entries () >{ > eqawarn "validate_desktop_entries is deprecated and should be not be used."; > eqawarn ".desktop file validation is done implicitly by Portage now."; > _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 >}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 634692
:
499168
| 499170