Skip to content

Instantly share code, notes, and snippets.

@Sober7135
Created February 5, 2024 08:16
Show Gist options
  • Save Sober7135/a44adea339a9e391d73729a108543aec to your computer and use it in GitHub Desktop.
Save Sober7135/a44adea339a9e391d73729a108543aec to your computer and use it in GitHub Desktop.
/var/tmp/portage/dev-perl/XS-Parse-Keyword-0.380.0/temp/environment
declare -x ABI="amd64"
declare -x ABI_MIPS=""
declare -x ABI_S390=""
declare -x ABI_X86="64"
declare -x ADA_TARGET=""
declare -x ALSA_CARDS=""
declare -x AMDGPU_TARGETS=""
declare -x APACHE2_MODULES=""
declare -x APACHE2_MPMS=""
declare -x ARCH="amd64"
declare BDEPEND=$'\n\t>=dev-perl/ExtUtils-CChecker-0.110.0\n\t>=dev-perl/Module-Build-0.400.400\n\tvirtual/perl-ExtUtils-CBuilder\n\tvirtual/perl-ExtUtils-ParseXS\n\ttest? ( dev-perl/Test2-Suite )\n dev-lang/perl\n\t\t\t\t\t test? ( >=virtual/perl-Test-Simple-1 )'
declare -x BINPKG_FORMAT="gpkg"
declare -x BINPKG_GPG_SIGNING_BASE_COMMAND="/usr/bin/flock /run/lock/portage-binpkg-gpg.lock /usr/bin/gpg --sign --armor [PORTAGE_CONFIG]"
declare -x BINPKG_GPG_SIGNING_DIGEST="SHA512"
declare -x BINPKG_GPG_VERIFY_BASE_COMMAND="/usr/bin/gpg --verify --batch --no-tty --no-auto-check-trustdb --status-fd 2 [PORTAGE_CONFIG] [SIGNATURE]"
declare -x BINPKG_GPG_VERIFY_GPG_HOME="/etc/portage/gnupg"
declare -x BOOTSTRAP_USE="unicode internal-glib pkg-config split-usr xml python_targets_python3_11 python_single_target_python3_11 multilib systemd sysv-utils udev"
declare -x CALLIGRA_FEATURES=""
declare -x CAMERAS=""
declare -x CBUILD="x86_64-pc-linux-gnu"
declare -x CFLAGS="-march=native -O3 -pipe -flto"
declare -x CFLAGS_amd64="-m64"
declare -x CFLAGS_default
declare -x CFLAGS_x32="-mx32"
declare -x CFLAGS_x86="-m32 -mfpmath=sse"
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 COLLECTD_PLUGINS=""
declare -x COMMON_FLAGS="-march=native -O3 -pipe -flto"
declare -x CPU_FLAGS_ARM=""
declare -x CPU_FLAGS_PPC=""
declare -x CPU_FLAGS_X86=""
declare -x CTARGET_default="x86_64-pc-linux-gnu"
declare -x CURL_SSL=""
declare -x CXXFLAGS="-march=native -O3 -pipe -flto"
declare -x DEFAULT_ABI="amd64"
declare -x DEFINED_PHASES=" compile configure install prepare test"
declare DEPEND="dev-lang/perl"
declare DESCRIPTION="XS functions to assist in parsing keyword syntax"
declare -x DIROPTIONS="-m0755"
declare -- DIST_A="XS-Parse-Keyword-0.38.tar.gz"
declare -- DIST_AUTHOR="PEVANS"
declare -a DIST_MAKE=([0]="OPTIMIZE=-march=native -O3 -pipe -flto")
declare -- DIST_NAME="XS-Parse-Keyword"
declare -- DIST_P="XS-Parse-Keyword-0.38"
declare -- DIST_VERSION="0.38"
declare -x EAPI="8"
declare -x ELIBC="glibc"
declare -x ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GDK_PIXBUF_MODULE_FILE GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_STATE_HOME"
declare -- EPOCHREALTIME="1707120006.736768"
declare -- EPOCHSECONDS="1707120006"
declare -x EXEOPTIONS="-m0755"
declare -x FCFLAGS="-march=native -O3 -pipe -flto"
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="-march=native -O3 -pipe -flto"
declare -x FFTOOLS=""
declare -x GCC_SPECS=""
declare -x GPG_VERIFY_GROUP_DROP="nogroup"
declare -x GPG_VERIFY_USER_DROP="nobody"
declare -x GPSD_PROTOCOLS=""
declare -x GRUB_PLATFORMS=""
declare HOMEPAGE="https://metacpan.org/release/XS-Parse-Keyword"
declare IDEPEND=""
declare -x INHERITED=" multiprocessing perl-functions readme.gentoo-r1 toolchain-funcs multilib perl-module"
declare -x INPUT_DEVICES=""
declare -x INSOPTIONS="-m0644"
declare IUSE="test"
declare -x IUSE_EFFECTIVE="abi_x86_64 alpha amd64 amd64-linux arm arm64 arm64-macos elibc_Darwin elibc_SunOS elibc_bionic elibc_glibc elibc_mingw elibc_musl hppa ia64 kernel_Darwin kernel_SunOS kernel_linux loong m68k mips ppc ppc-macos ppc64 ppc64-linux prefix prefix-guest prefix-stack riscv s390 sparc test x64-macos x64-solaris x86 x86-linux"
declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-guest prefix-stack"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="amd64"
declare -x KEYWORDS="~alpha amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
declare -x L10N=""
declare -x LANG="en_US.utf8"
declare -x LCD_DEVICES=""
declare -x LC_COLLATE="C"
declare -x LC_MESSAGES="C.utf8"
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 LEX="flex"
declare -x LIBDIR_amd64="lib64"
declare -x LIBDIR_default="lib"
declare -x LIBDIR_x32="libx32"
declare -x LIBDIR_x86="lib"
declare -x LIBOPTIONS="-m0644"
declare -x LIBREOFFICE_EXTENSIONS=""
declare -x LICENSE="|| ( Artistic GPL-1+ )"
declare -x LLVM_TARGETS=""
declare -x LUA_SINGLE_TARGET=""
declare -x LUA_TARGETS=""
declare -x MAIL="/var/mail/root"
declare -x MAKEOPTS="-j32 -l32"
declare -x MANPAGER="manpager"
declare -x MONKEYD_PLUGINS=""
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|binutils|eclipse-3|debug|portage|udev|systemd|clang|python-exec|llvm)"
declare -x NGINX_MODULES_HTTP=""
declare -x NGINX_MODULES_MAIL=""
declare -x NGINX_MODULES_STREAM=""
declare -x OFFICE_IMPLEMENTATION=""
declare -x OPENMPI_FABRICS=""
declare -x OPENMPI_OFED_FEATURES=""
declare -x OPENMPI_RM=""
declare -x PATH="/usr/lib/portage/python3.11/ebuild-helpers/xattr:/usr/lib/portage/python3.11/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/bin:/usr/lib/llvm/17/bin:/opt/cuda/bin"
declare PDEPEND=""
declare -- PERL_EXPF="src_prepare src_configure src_compile src_test src_install"
declare -x PHP_TARGETS=""
declare -x PORTAGE_COMPRESSION_COMMAND="zstd -T32"
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/XS-Parse-Keyword-0.380.0/html")
declare -a PORTAGE_DOSTRIP=([0]="/")
declare -a PORTAGE_DOSTRIP_SKIP=()
declare -x POSTGRES_TARGETS=""
declare -- PREFER_BUILDPL="yes"
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL"
declare -- PROPERTIES=""
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -x PYTHON_SINGLE_TARGET=""
declare -x PYTHON_TARGETS=""
declare -x QEMU_SOFTMMU_TARGETS=""
declare -x QEMU_USER_TARGETS=""
declare RDEPEND="dev-lang/perl:="
declare -- README_GENTOO_SUFFIX=""
declare REPOSITORY
declare REQUIRED_USE=""
declare RESTRICT="test"
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=""
declare -x S="/var/tmp/portage/dev-perl/XS-Parse-Keyword-0.380.0/work/XS-Parse-Keyword-0.38"
declare -x SANDBOX_DEBUG="0"
declare -x SANDBOX_DENY=""
declare -x SANDBOX_METHOD="any"
declare -x SANDBOX_PREDICT="/var/tmp/portage/dev-perl/XS-Parse-Keyword-0.380.0/homedir:/dev/crypto:/var/cache/man:/dev/nvidiactl:/dev/nvidia-caps:/dev/char:/var/cache/fontconfig"
declare -x SANDBOX_READ="/:/var/tmp/portage"
declare -x SANDBOX_VERBOSE="1"
declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/ptmx:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp/:/var/tmp/portage:/var/tmp/portage/dev-perl/XS-Parse-Keyword-0.380.0/homedir/.bash_history"
declare -x SANE_BACKENDS=""
declare -x SHELL="/bin/fish"
declare -x SLOT="0"
declare -i SRANDOM="2799339418"
declare SRC_URI="mirror://cpan/authors/id/P/PE/PEVANS/XS-Parse-Keyword-0.38.tar.gz"
declare -x SUDO_COMMAND="/usr/sbin/emerge -a1tv dev-perl/XS-Parse-Keyword"
declare -x SUDO_GID="1000"
declare -x SUDO_UID="1000"
declare -x SUDO_USER="w"
declare -x SYMLINK_LIB="no"
declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1"
declare -x USE="abi_x86_64 amd64 elibc_glibc kernel_linux"
declare -x USERLAND="GNU"
declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL"
declare -x USE_EXPAND_UNPREFIXED="ARCH"
declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-linux arm arm64 arm64-macos hppa ia64 loong m68k mips ppc ppc64 ppc64-linux ppc-macos riscv s390 sparc x64-macos x64-solaris x86 x86-linux"
declare -x USE_EXPAND_VALUES_ELIBC="bionic Darwin glibc mingw musl SunOS"
declare -x USE_EXPAND_VALUES_KERNEL="Darwin linux SunOS"
declare -x UWSGI_PLUGINS=""
declare -x VIDEO_CARDS=""
declare -x VOICEMAIL_STORAGE=""
declare -x XTABLES_ADDONS=""
declare -- _MULTILIB_ECLASS="1"
declare -- _MULTIPROCESSING_ECLASS="1"
declare -- _README_GENTOO_ECLASS="1"
declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
declare -x __E_DESTTREE="/usr"
declare -x __E_DOCDESTTREE=""
declare -x __E_EXEDESTTREE=""
declare -x __E_INSDESTTREE=""
declare -x ac_cv_c_undeclared_builtin_options="none needed"
declare -x enable_year2038="no"
declare -x gl_cv_compiler_check_decl_option="-Werror=implicit-function-declaration"
declare -x gl_cv_func_getcwd_path_max="yes"
declare -- perlinfo_done="false"
declare -- pm_echovar=""
__eapi6_src_install ()
{
if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
emake DESTDIR="${D}" install;
fi;
einstalldocs
}
__eapi6_src_prepare ()
{
if ___is_indexed_array_var PATCHES; then
[[ ${#PATCHES[@]} -gt 0 ]] && eapply "${PATCHES[@]}";
else
if [[ -n ${PATCHES} ]]; then
eapply ${PATCHES};
fi;
fi;
eapply_user
}
__eapi7_ver_compare ()
{
local va=${1} vb=${2} a an al as ar b bn bl bs br re LC_ALL=C;
re="^([0-9]+(\.[0-9]+)*)([a-z]?)((_(alpha|beta|pre|rc|p)[0-9]*)*)(-r[0-9]+)?$";
[[ ${va} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${va}";
an=${BASH_REMATCH[1]};
al=${BASH_REMATCH[3]};
as=${BASH_REMATCH[4]};
ar=${BASH_REMATCH[7]};
[[ ${vb} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${vb}";
bn=${BASH_REMATCH[1]};
bl=${BASH_REMATCH[3]};
bs=${BASH_REMATCH[4]};
br=${BASH_REMATCH[7]};
__eapi7_ver_compare_int "${an%%.*}" "${bn%%.*}" || return;
while [[ ${an} == *.* && ${bn} == *.* ]]; do
an=${an#*.};
bn=${bn#*.};
a=${an%%.*};
b=${bn%%.*};
if [[ ${a} == 0* || ${b} == 0* ]]; then
[[ ${a} =~ 0+$ ]] && a=${a%"${BASH_REMATCH[0]}"};
[[ ${b} =~ 0+$ ]] && b=${b%"${BASH_REMATCH[0]}"};
[[ ${a} > ${b} ]] && return 3;
[[ ${a} < ${b} ]] && return 1;
else
__eapi7_ver_compare_int "${a}" "${b}" || return;
fi;
done;
[[ ${an} == *.* ]] && return 3;
[[ ${bn} == *.* ]] && return 1;
[[ ${al} > ${bl} ]] && return 3;
[[ ${al} < ${bl} ]] && return 1;
as=${as#_}${as:+_};
bs=${bs#_}${bs:+_};
while [[ -n ${as} && -n ${bs} ]]; do
a=${as%%_*};
b=${bs%%_*};
if [[ ${a%%[0-9]*} == "${b%%[0-9]*}" ]]; then
__eapi7_ver_compare_int "${a##*[a-z]}" "${b##*[a-z]}" || return;
else
[[ ${a%%[0-9]*} == p ]] && return 3;
[[ ${b%%[0-9]*} == p ]] && return 1;
[[ ${a} > ${b} ]] && return 3 || return 1;
fi;
as=${as#*_};
bs=${bs#*_};
done;
if [[ -n ${as} ]]; then
[[ ${as} == p[_0-9]* ]] && return 3 || return 1;
else
if [[ -n ${bs} ]]; then
[[ ${bs} == p[_0-9]* ]] && return 1 || return 3;
fi;
fi;
__eapi7_ver_compare_int "${ar#-r}" "${br#-r}" || return;
return 2
}
__eapi7_ver_compare_int ()
{
local a=$1 b=$2 d=$(( ${#1}-${#2} ));
if [[ ${d} -gt 0 ]]; then
printf -v b "%0${d}d%s" 0 "${b}";
else
if [[ ${d} -lt 0 ]]; then
printf -v a "%0$(( -d ))d%s" 0 "${a}";
fi;
fi;
[[ ${a} > ${b} ]] && return 3;
[[ ${a} == "${b}" ]]
}
__eapi7_ver_parse_range ()
{
local range=${1};
local max=${2};
[[ ${range} == [0-9]* ]] || die "${FUNCNAME}: range must start with a number";
start=${range%-*};
[[ ${range} == *-* ]] && end=${range#*-} || end=${start};
if [[ -n ${end} ]]; then
[[ ${start} -le ${end} ]] || die "${FUNCNAME}: end of range must be >= start";
[[ ${end} -le ${max} ]] || end=${max};
else
end=${max};
fi
}
__eapi7_ver_split ()
{
local v=${1} LC_ALL=C;
comp=();
local s c;
while [[ -n ${v} ]]; do
s=${v%%[a-zA-Z0-9]*};
v=${v:${#s}};
[[ ${v} == [0-9]* ]] && c=${v%%[^0-9]*} || c=${v%%[^a-zA-Z]*};
v=${v:${#c}};
comp+=("${s}" "${c}");
done
}
__eapi8_src_prepare ()
{
local f;
if ___is_indexed_array_var PATCHES; then
[[ ${#PATCHES[@]} -gt 0 ]] && 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}"
}
_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}"
}
_get_all_makeopts ()
{
echo "${MAKEOPTS} ${GNUMAKEFLAGS} ${MAKEFLAGS}"
}
_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}"
}
_tc-has-openmp ()
{
local base="${T}/test-tc-openmp";
cat <<-EOF > "${base}.c"
#include <omp.h>
int main(void) {
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}
}
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' "$@"
}
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};
ebegin "${prefix:-Applying }${f##*/}";
local all_opts=(-p1 -f -g0 --no-backup-if-mismatch "${patch_options[@]}");
if ${patch_cmd} "${all_opts[@]}" --dry-run -s -F0 < "${f}" &> /dev/null; then
all_opts+=(-s -F0);
fi;
${patch_cmd} "${all_opts[@]}" < "${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 [[ ${#files[@]} -eq 0 ]]; 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}";
[[ ${#files[@]} -eq 0 ]] && 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 columns=${COLUMNS:-0};
[[ ${columns} == 0 ]] && columns=$(set -- $( ( stty size < /dev/tty ) 2> /dev/null || echo 24 80); echo $2);
(( columns > 0 )) || (( columns = 80 ));
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
if [[ -z ${applied} ]]; then
einfo "${PORTAGE_COLOR_INFO}$(for ((column = 0; column < ${columns} - 3; column++))
do
echo -n =;
done)${PORTAGE_COLOR_NORMAL}";
einfo "Applying user patches from ${basedir} ...";
fi;
eapply "${f}";
applied=1;
fi;
done < <(printf -- '%s\0' "${!_eapply_user_patches[@]}" | LC_ALL=C sort -z);
fi;
${prev_shopt};
if [[ -n ${applied} ]]; then
einfo "User patches applied.";
einfo "${PORTAGE_COLOR_INFO}$(for ((column = 0; column < ${columns} - 3; column++))
do
echo -n =;
done)${PORTAGE_COLOR_NORMAL}";
fi
}
econf_build ()
{
local CBUILD=${CBUILD:-${CHOST}};
function econf_env ()
{
CHOST=${CBUILD} econf "$@"
};
tc-env_build econf_env "$@"
}
einstalldocs ()
{
( if [[ $(declare -p DOCS 2> /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 ___is_indexed_array_var DOCS; then
[[ ${#DOCS[@]} -gt 0 ]] && docinto / && dodoc -r "${DOCS[@]}";
else
[[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS};
fi;
fi );
( if ___is_indexed_array_var HTML_DOCS; then
[[ ${#HTML_DOCS[@]} -gt 0 ]] && docinto html && dodoc -r "${HTML_DOCS[@]}";
else
[[ -n ${HTML_DOCS} ]] && docinto html && dodoc -r ${HTML_DOCS};
fi )
}
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 ()
{
ewarn "${FUNCNAME}: Please migrate to usr-ldscript.eclass";
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*)
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 $(type -P ${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_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_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_exeext ()
{
case ${CHOST} in
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_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
mingw* | *-mingw*)
libname="dll"
;;
*-darwin*)
libname="dylib"
;;
*)
libname="so"
;;
esac;
if [[ -z $* ]]; then
echo ".${libname}";
else
for ver in "$@";
do
case ${CHOST} in
*-darwin*)
echo ".${ver}.${libname}"
;;
*)
echo ".${libname}.${ver}"
;;
esac;
done;
fi
}
get_makeopts_jobs ()
{
makeopts_jobs "$(_get_all_makeopts)" "${1:-1}"
}
get_makeopts_loadavg ()
{
makeopts_loadavg "$(_get_all_makeopts)" "${1:-999}"
}
get_modname ()
{
local modname;
local ver=$1;
case ${CHOST} in
*-darwin*)
modname="bundle"
;;
*)
modname="so"
;;
esac;
echo ".${modname}"
}
get_nproc ()
{
local nproc;
if type -P nproc &> /dev/null; then
nproc=$(nproc);
fi;
if [[ -z ${nproc} ]] && type -P sysctl &> /dev/null; then
nproc=$(sysctl -n hw.ncpu 2> /dev/null);
fi;
if [[ -z ${nproc} ]] && type -P python &> /dev/null; then
nproc=$(python -c 'import multiprocessing; print(multiprocessing.cpu_count());' 2> /dev/null);
fi;
if [[ -n ${nproc} ]]; then
echo "${nproc}";
else
echo "${1:-1}";
fi
}
has_multilib_profile ()
{
[ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
}
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_final_abi ()
{
has_multilib_profile || return 0;
set -- $(get_install_abis);
local LAST_ABI=$#;
[[ ${!LAST_ABI} == ${ABI} ]]
}
makeopts_jobs ()
{
[[ $# -eq 0 ]] && set -- "$(_get_all_makeopts)";
local jobs=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' -e "s:.*[[:space:]](-[a-z]*j|--jobs)[[:space:]].*:${2:-$(( $(get_nproc) + 1 ))}:p");
echo ${jobs:-1}
}
makeopts_loadavg ()
{
[[ $# -eq 0 ]] && set -- "$(_get_all_makeopts)";
local lavg=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load)[=[:space:]])[[:space:]]*([0-9]+(\.[0-9]+)?)[[:space:]].*:\3:p' -e "s:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:${2:-999}:p");
echo ${lavg:-${2:-999}}
}
multilib_env ()
{
local CTARGET=${1:-${CTARGET}};
local cpu=${CTARGET%%*-};
if [[ ${CTARGET} = *-musl* ]]; then
: "${MULTILIB_ABIS=default}";
: "${DEFAULT_ABI=default}";
export MULTILIB_ABIS DEFAULT_ABI;
return;
fi;
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
;;
loongarch64*)
export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d};
export CHOST_lp64d=${CTARGET};
export CTARGET_lp64d=${CTARGET};
export LIBDIR_lp64d=${LIBDIR_lp64d-lib64};
: "${MULTILIB_ABIS=lp64d}";
: "${DEFAULT_ABI=lp64d}"
;;
mips64* | mipsisa64*)
export CFLAGS_o32=${CFLAGS_o32--mabi=32};
export CHOST_o32=${CTARGET/mips64/mips};
export CHOST_o32=${CHOST_o32/mipsisa64/mipsisa32};
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}"
;;
riscv64*)
: "${MULTILIB_ABIS=lp64d lp64 ilp32d ilp32}";
: "${DEFAULT_ABI=lp64d}";
local _libdir_riscvdefaultabi_variable="LIBDIR_${DEFAULT_ABI}";
local _libdir_riscvdefaultabi=${!_libdir_riscvdefaultabi_variable};
export ${_libdir_riscvdefaultabi_variable}=${_libdir_riscvdefaultabi:-lib64};
export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d -march=rv64gc};
export CHOST_lp64d=${CTARGET};
export CTARGET_lp64d=${CTARGET};
export LIBDIR_lp64d=${LIBDIR_lp64d-lib64/lp64d};
export CFLAGS_lp64=${CFLAGS_lp64--mabi=lp64 -march=rv64imac};
export CHOST_lp64=${CTARGET};
export CTARGET_lp64=${CTARGET};
export LIBDIR_lp64=${LIBDIR_lp64-lib64/lp64};
export CFLAGS_ilp32d=${CFLAGS_ilp32d--mabi=ilp32d -march=rv32imafdc};
export CHOST_ilp32d=${CTARGET/riscv64/riscv32};
export CTARGET_ilp32d=${CTARGET/riscv64/riscv32};
export LIBDIR_ilp32d=${LIBDIR_ilp32d-lib32/ilp32d};
export CFLAGS_ilp32=${CFLAGS_ilp32--mabi=ilp32 -march=rv32imac};
export CHOST_ilp32=${CTARGET/riscv64/riscv32};
export CTARGET_ilp32=${CTARGET/riscv64/riscv32};
export LIBDIR_ilp32=${LIBDIR_ilp32-lib32/ilp32}
;;
riscv32*)
: "${MULTILIB_ABIS=ilp32d ilp32}";
: "${DEFAULT_ABI=ilp32d}";
local _libdir_riscvdefaultabi_variable="LIBDIR_${DEFAULT_ABI}";
local _libdir_riscvdefaultabi=${!_libdir_riscvdefaultabi_variable};
export ${_libdir_riscvdefaultabi_variable}=${_libdir_riscvdefaultabi:-lib};
export CFLAGS_ilp32d=${CFLAGS_ilp32d--mabi=ilp32d -march=rv32imafdc};
export CHOST_ilp32d=${CTARGET};
export CTARGET_ilp32d=${CTARGET};
export LIBDIR_ilp32d=${LIBDIR_ilp32d-lib32/ilp32d};
export CFLAGS_ilp32=${CFLAGS_ilp32--mabi=ilp32 -march=rv32imac};
export CHOST_ilp32=${CTARGET};
export CTARGET_ilp32=${CTARGET};
export LIBDIR_ilp32=${LIBDIR_ilp32-lib32/ilp32}
;;
s390x*)
export CFLAGS_s390=${CFLAGS_s390--m31};
export CHOST_s390=${CTARGET/s390x/s390};
export CTARGET_s390=${CHOST_s390};
export LIBDIR_s390="lib";
export CFLAGS_s390x=${CFLAGS_s390x--m64};
export CHOST_s390x=${CTARGET};
export CTARGET_s390x=${CHOST_s390x};
export LIBDIR_s390x="lib64";
: "${MULTILIB_ABIS=s390x s390}";
: "${DEFAULT_ABI=s390x}"
;;
sparc64*)
export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
export CHOST_sparc32=${CTARGET/sparc64/sparc};
export CTARGET_sparc32=${CHOST_sparc32};
export LIBDIR_sparc32="lib";
export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
export CHOST_sparc64=${CTARGET};
export CTARGET_sparc64=${CHOST_sparc64};
export LIBDIR_sparc64="lib64";
: "${MULTILIB_ABIS=sparc64 sparc32}";
: "${DEFAULT_ABI=sparc64}"
;;
*)
: "${MULTILIB_ABIS=default}";
: "${DEFAULT_ABI=default}"
;;
esac;
export MULTILIB_ABIS DEFAULT_ABI
}
multilib_toolchain_setup ()
{
local v vv;
export ABI=$1;
local save_restore_variables=(CBUILD CHOST AR CC CXX F77 FC LD NM OBJCOPY OBJDUMP PKG_CONFIG RANLIB READELF STRINGS STRIP PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG_SYSTEM_INCLUDE_PATH PKG_CONFIG_SYSTEM_LIBRARY_PATH);
if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
for v in "${save_restore_variables[@]}";
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 "${save_restore_variables[@]}";
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 AR="$(tc-getAR)";
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 NM="$(tc-getNM)";
export OBJCOPY="$(tc-getOBJCOPY)";
export OBJDUMP="$(tc-getOBJDUMP)";
export PKG_CONFIG="$(tc-getPKG_CONFIG)";
export RANLIB="$(tc-getRANLIB)";
export READELF="$(tc-getREADELF)";
export STRINGS="$(tc-getSTRINGS)";
export STRIP="$(tc-getSTRIP)";
export CHOST=$(get_abi_CHOST $1);
export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
export PKG_CONFIG_SYSTEM_INCLUDE_PATH=${EPREFIX}/usr/include;
export PKG_CONFIG_SYSTEM_LIBRARY_PATH=${EPREFIX}/$(get_libdir):${EPREFIX}/usr/$(get_libdir);
fi
}
number_abis ()
{
set -- `get_install_abis`;
echo $#
}
perl-module_pkg_postinst ()
{
debug-print-function ${FUNCNAME} "$@";
if [[ ${CATEGORY} != perl-core ]]; then
eerror "perl-module.eclass: You are calling perl-module_pkg_postinst outside the perl-core category.";
die " This does not do anything; the call can be removed.";
fi;
perl_link_duallife_scripts
}
perl-module_pkg_postrm ()
{
debug-print-function ${FUNCNAME} "$@";
if [[ ${CATEGORY} != perl-core ]]; then
eerror "perl-module.eclass: You are calling perl-module_pkg_postrm outside the perl-core category.";
die " This does not do anything; the call can be removed.";
fi;
perl_link_duallife_scripts
}
perl-module_src_compile ()
{
debug-print-function ${FUNCNAME} "$@";
perl_set_version;
case ${EAPI} in
7)
if [[ $(declare -p mymake 2>&-) != "declare -a mymake="* ]]; then
local mymake_local=(${mymake});
else
local mymake_local=("${mymake[@]}");
fi
;;
*)
local mymake_local=("${DIST_MAKE[@]}")
;;
esac;
if [[ -f Build ]]; then
./Build build || die "Compilation failed";
else
if [[ -f Makefile ]]; then
set -- OTHERLDFLAGS="${LDFLAGS}" "${mymake_local[@]}";
emake "$@";
fi;
fi
}
perl-module_src_configure ()
{
debug-print-function ${FUNCNAME} "$@";
export CCLD=$(tc-getCC);
unset LD;
perl_check_env;
perl_set_version;
[[ -z ${pm_echovar} ]] && export PERL_MM_USE_DEFAULT=1;
export PERL_EXTUTILS_AUTOINSTALL="--skipdeps";
export PERL_CANARY_STABILITY_DISABLE=1;
if [[ $(declare -p myconf 2>&-) != "declare -a myconf="* ]]; then
local myconf_local=(${myconf});
else
local myconf_local=("${myconf[@]}");
fi;
if [[ ( ${PREFER_BUILDPL} == yes || ! -f Makefile.PL ) && -f Build.PL ]]; then
if grep -q '\(use\|require\)\s*Module::Build::Tiny' Build.PL; then
einfo "Using Module::Build::Tiny";
if [[ ${BDEPEND} != *dev-perl/Module-Build-Tiny* && ${PN} != Module-Build-Tiny ]]; then
eerror "QA Notice: The ebuild uses Module::Build::Tiny but doesn't depend on it.";
eerror " Add dev-perl/Module-Build-Tiny to BDEPEND!";
fi;
else
einfo "Using Module::Build";
if [[ ${BDEPEND} != *virtual/perl-Module-Build* && ${BDEPEND} != *dev-perl/Module-Build* && ${PN} != Module-Build ]]; then
eerror "QA Notice: The ebuild uses Module::Build but doesn't depend on it.";
eerror " Add dev-perl/Module-Build to BDEPEND!";
fi;
fi;
set -- --installdirs=vendor --libdoc= --destdir="${D}" --create_packlist=1 "${myconf_local[@]}";
einfo "perl Build.PL" "$@";
perl Build.PL "$@" <<< "${pm_echovar}" || die "Unable to build!";
else
if [[ -f Makefile.PL ]]; then
einfo "Using ExtUtils::MakeMaker";
set -- PREFIX="${EPREFIX}"/usr INSTALLDIRS=vendor INSTALLMAN3DIR='none' DESTDIR="${D}" "${myconf_local[@]}";
einfo "perl Makefile.PL" "$@";
perl Makefile.PL "$@" <<< "${pm_echovar}" || die "Unable to build!";
fi;
fi;
if [[ ! -f Build.PL && ! -f Makefile.PL ]]; then
einfo "No Make or Build file detected...";
return;
fi
}
perl-module_src_install ()
{
debug-print-function ${FUNCNAME} "$@";
perl_set_version;
local f;
if [[ -f Build ]]; then
mytargets="${mytargets:-install}";
mbparams="${mbparams:---pure}";
einfo "./Build ${mytargets} ${mbparams}";
./Build ${mytargets} ${mbparams} || die "./Build ${mytargets} ${mbparams} failed";
else
if [[ -f Makefile ]]; then
case "${CATEGORY}" in
dev-perl | perl-core)
mytargets="pure_install"
;;
*)
mytargets="install"
;;
esac;
if [[ $(declare -p myinst 2>&-) != "declare -a myinst="* ]]; then
local myinst_local=(${myinst});
else
local myinst_local=("${myinst[@]}");
fi;
emake "${myinst_local[@]}" ${mytargets};
fi;
fi;
case ${EAPI} in
7)
;;
*)
perl_fix_permissions
;;
esac;
perl_delete_module_manpages;
perl_delete_localpod;
perl_fix_packlist;
perl_delete_emptybsdir;
perl_remove_temppath;
for f in Change* CHANGES README* TODO FAQ ${mydoc};
do
[[ -s ${f} ]] && dodoc ${f};
done;
if in_iuse examples && use examples; then
[[ ${#DIST_EXAMPLES[@]} -eq 0 ]] || perl_doexamples "${DIST_EXAMPLES[@]}";
fi;
perl_link_duallife_scripts;
case ${EAPI} in
7)
;;
*)
if has 'features' ${DIST_WIKI}; then
DISABLE_AUTOFORMATTING=yes;
DOC_CONTENTS="This package may require additional dependencies and/or preparation steps for\n";
DOC_CONTENTS+="some optional features. For details, see\n";
DOC_CONTENTS+="$(perl_get_wikiurl_features)";
einfo;
readme.gentoo_create_doc;
readme.gentoo_print_elog;
fi
;;
esac
}
perl-module_src_prepare ()
{
debug-print-function ${FUNCNAME} "$@";
default;
if [[ -n ${PERL_RM_FILES[@]} ]]; then
debug-print "$FUNCNAME: stripping unneeded files";
perl_rm_files "${PERL_RM_FILES[@]}";
fi;
perl_fix_osx_extra
}
perl-module_src_test ()
{
debug-print-function ${FUNCNAME} "$@";
local my_test_control;
local my_test_verbose;
local my_test_makeopts;
[[ -n "${DIST_TEST_OVERRIDE}" ]] && ewarn "DIST_TEST_OVERRIDE is set to ${DIST_TEST_OVERRIDE}";
my_test_control=${DIST_TEST_OVERRIDE:-${DIST_TEST:-do parallel}};
if ! has 'do' ${my_test_control} && ! has 'parallel' ${my_test_control}; then
einfo Skipping tests due to DIST_TEST=${my_test_control};
return 0;
fi;
if has 'do' ${my_test_control} && ! has 'parallel' ${my_test_control}; then
my_test_makeopts="-j1";
fi;
if has verbose ${my_test_control}; then
my_test_verbose=1;
else
my_test_verbose=0;
fi;
if has parallel ${my_test_control}; then
export HARNESS_OPTIONS=j$(makeopts_jobs);
einfo "Test::Harness Jobs=$(makeopts_jobs)";
fi;
if ! has network ${my_test_control}; then
export NO_NETWORK_TESTING=1;
fi;
export NONINTERACTIVE_TESTING=1;
case ${EAPI} in
7)
;;
*)
if has 'tests' ${DIST_WIKI}; then
ewarn "This package may require additional dependencies and/or preparation steps for";
ewarn "comprehensive testing. For details, see:";
ewarn "$(perl_get_wikiurl_tests)";
fi
;;
esac;
perl_set_version;
if [[ -f Build ]]; then
./Build test verbose=${my_test_verbose} || die "test failed";
else
if [[ -f Makefile ]]; then
emake ${my_test_makeopts} test TEST_VERBOSE=${my_test_verbose};
fi;
fi
}
perl_check_env ()
{
local errored value;
for i in PERL_MM_OPT PERL5LIB PERL5OPT PERL_MB_OPT PERL_CORE PERLPREFIX;
do
[[ -v $i ]] || continue;
if [[ ${errored:-0} == 0 ]]; then
if [[ -n ${I_KNOW_WHAT_I_AM_DOING} ]]; then
elog "perl-module.eclass: Suspicious environment values found.";
else
eerror "perl-module.eclass: Suspicious environment values found.";
fi;
fi;
errored=1;
value=${!i};
if [[ -n ${I_KNOW_WHAT_I_AM_DOING} ]]; then
elog " $i=\"$value\"";
else
eerror " $i=\"$value\"";
fi;
done;
[[ ${errored:-0} == 0 ]] && return;
if [[ -n ${I_KNOW_WHAT_I_AM_DOING} ]]; then
elog "Continuing anyway, seems you know what you're doing.";
return;
fi;
eerror "Your environment settings may lead to undefined behavior and/or build failures.";
die "Please fix your environment ( ~/.bashrc, package.env, ... ), see above for details."
}
perl_delete_emptybsdir ()
{
debug-print-function ${FUNCNAME} "$@";
perl_set_version;
if [[ -d ${D}/${VENDOR_ARCH} ]]; then
find "${D}/${VENDOR_ARCH}" -type f -a -name '*.bs' -a -empty -delete;
find "${D}" -depth -mindepth 1 -type d -empty -delete;
fi
}
perl_delete_localpod ()
{
debug-print-function ${FUNCNAME} "$@";
find "${D}" -type f -name perllocal.pod -delete;
find "${D}" -depth -mindepth 1 -type d -empty -delete
}
perl_delete_module_manpages ()
{
debug-print-function ${FUNCNAME} "$@";
if [[ -d "${ED}"/usr/share/man ]]; then
find "${ED}"/usr/share/man -type f -name "*.3pm" -delete;
find "${ED}"/usr/share/man -depth -type d -empty -delete;
fi
}
perl_delete_packlist ()
{
debug-print-function ${FUNCNAME} "$@";
perl_set_version;
if [[ -d ${D}/${VENDOR_ARCH} ]]; then
find "${D}/${VENDOR_ARCH}" -type f -a -name .packlist -delete;
perl_delete_emptybsdir;
fi
}
perl_doexamples ()
{
debug-print-function ${FUNCNAME} "$@";
einfo "Installing examples into /usr/share/doc/${PF}/examples";
docompress -x /usr/share/doc/${PF}/examples;
docinto examples/;
dodoc -r $@
}
perl_domodule ()
{
local target_prefix="";
local files=();
local doins_opts=();
local recursive="false";
local target;
local file;
while [[ $# -gt 0 ]]; do
case $1 in
-C | --target-prefix)
[[ -z "${2}" || "${2:0:1}" == "-" ]] && die "${FUNCNAME}: -C|--target-prefix expects an argument, got \"$2\"!";
target_prefix="${2}";
shift 2
;;
-r)
recursive="true";
shift
;;
*)
[[ -z "${1}" || "${1:0:1}" == "-" ]] && die "${FUNCNAME}: Unknown argument \"${1}\"!";
files+=("${1}");
shift 1
;;
esac;
done;
if [[ "true" == $recursive ]]; then
doins_opts+=("-r");
fi;
for file in "${files[@]}";
do
[[ -e "${file}" ]] || die "$FUNCNAME: Argument \"${file}\" is not an existing file";
[[ "false" == ${recursive} && -d "${file}" ]] && die "$FUNCNAME: Argument \"${file}\" is a directory ( needs -r parameter )";
done;
target="$(perl_get_vendorlib)";
[[ -z "${target_prefix}" ]] || target="${target%/}/${target_prefix#/}";
insinto "/${target#/}";
doins "${doins_opts[@]}" "${files[@]}"
}
perl_fix_osx_extra ()
{
debug-print-function ${FUNCNAME} "$@";
local f;
find "${S}" -type f -name "._*" -print0 | while read -rd '' f; do
einfo "Removing AppleDouble encoded Macintosh file: ${f#${S}/}";
rm -f "${f}";
f=${f#${S}/};
grep -q "${f}" "${S}"/MANIFEST && elog "AppleDouble encoded Macintosh file in MANIFEST: ${f#${S}/}";
done
}
perl_fix_packlist ()
{
debug-print-function ${FUNCNAME} "$@";
local packlist_temp="${T}/.gentoo_packlist_temp";
find "${D}" -type f -name '.packlist' -print0 | while read -rd '' f; do
if file "${f}" | grep -q -i " text"; then
einfo "Fixing packlist file /${f#${D}}";
sed -i -e "s:${D%/}/:/:g" "${f}";
sort -u "${f}" > "${packlist_temp}";
mv "${packlist_temp}" "${f}";
cat "${f}" | while read -r entry; do
if [[ ! -e ${D}/${entry} ]]; then
einfo "Pruning surplus packlist entry ${entry}";
grep -v -x -F "${entry}" "${f}" > "${packlist_temp}";
mv "${packlist_temp}" "${f}";
fi;
done;
fi;
done
}
perl_fix_permissions ()
{
debug-print-function ${FUNCNAME} "$@";
perl_set_version;
einfo Fixing installed file permissions;
fperms -R u+w /
}
perl_get_module_version ()
{
debug-print-function ${FUNCNAME} "$@";
[[ $# -gt 0 ]] || die "${FUNCNAME}: No module name provided";
[[ $# -lt 2 ]] || die "${FUNCNAME}: Too many parameters ($#)";
if ! perl_has_module "$@"; then
echo "(Not Installed)";
return 1;
fi;
perl -we 'my $mn = $ARGV[0];
$mn =~ s{(::|\x{27})}{/}g;
local $@;
eval { require qq[${mn}.pm]; 1 } or do {
print q[(Compilation failed in require)];
exit 1;
};
my $stash = \%{ $ARGV[0] . q[::] };
if ( not exists $stash->{VERSION} ) {
print q[(No VERSION property)];
exit 0;
}
if ( not defined ${$stash->{VERSION}} ) {
print q[(undef)];
exit 0;
}
print ${$stash->{VERSION}};
exit 0; ' "$@"
}
perl_get_raw_vendorlib ()
{
debug-print-function ${FUNCNAME} "$@";
[[ $# -lt 1 ]] || die "${FUNCNAME}: Too many parameters ($#)";
perl -MConfig -e'exists $Config{$ARGV[0]} || die qq{No such Config key "$ARGV[0]"};
print $Config{$ARGV[0]};
exit 0' -- "installvendorlib" || die "Can't extract installvendorlib from Perl Configuration"
}
perl_get_vendorlib ()
{
debug-print-function ${FUNCNAME} "$@";
[[ $# -lt 1 ]] || die "${FUNCNAME}: Too many parameters ($#)";
perl -M5.014 -MConfig -e'exists $Config{$ARGV[0]} || die qq{No such Config key "$ARGV[0]"};
print $Config{$ARGV[0]} =~ s{\A\Q$ARGV[1]\E}{}r;
exit 0' -- "installvendorlib" "$EPREFIX" || die "Can't extract installvendorlib from Perl Configuration"
}
perl_get_wikiurl ()
{
debug-print-function ${FUNCNAME} "$@";
if [[ -z "${1}" ]]; then
echo "https://wiki.gentoo.org/wiki/Project:Perl/maint-notes/${CATEGORY}/${PN}";
else
echo "https://wiki.gentoo.org/wiki/Project:Perl/maint-notes/${CATEGORY}/${PN}#${1}";
fi
}
perl_get_wikiurl_features ()
{
perl_get_wikiurl Optional_Features
}
perl_get_wikiurl_tests ()
{
perl_get_wikiurl Testing
}
perl_has_module ()
{
debug-print-function ${FUNCNAME} "$@";
[[ $# -gt 0 ]] || die "${FUNCNAME}: No module name provided";
[[ $# -lt 2 ]] || die "${FUNCNAME}: Too many parameters ($#)";
perl -we 'my $mn = $ARGV[0];
$mn =~ s{(::|\x{27})}{/}g;
for(@INC){
next if ref $_;
exit 0 if -r $_ . q[/] . $mn . q[.pm]
}
exit 1' "$@"
}
perl_has_module_version ()
{
debug-print-function ${FUNCNAME} "$@";
[[ $# -gt 0 ]] || die "${FUNCNAME}: No module name provided";
[[ $# -gt 1 ]] || die "${FUNCNAME}: No module version provided";
[[ $# -lt 3 ]] || die "${FUNCNAME}: Too many parameters ($#)";
perl -we 'my $mn = $ARGV[0];
$mn =~ s{(::|\x{27})}{/}g;
exit ( eval {
require qq[${mn}.pm];
$ARGV[0]->VERSION($ARGV[1]);
1
} ? 0 : 1 )' "$@"
}
perl_link_duallife_scripts ()
{
debug-print-function ${FUNCNAME} "$@";
[[ ${CATEGORY} != perl-core ]] && return 0;
local i ff;
if has "${EBUILD_PHASE:-none}" "postinst" "postrm"; then
for i in "${DUALLIFESCRIPTS[@]}";
do
alternatives_auto_makesym "/${i}" "/${i}-[0-9]*";
done;
for i in "${DUALLIFEMAN[@]}";
do
ff=`echo "${EROOT}"/${i%.1}-${PV}-${P}.1*`;
ff=${ff##*.1};
alternatives_auto_makesym "/${i}${ff}" "/${i%.1}-[0-9]*";
done;
else
pushd "${ED}" > /dev/null;
for i in $(find usr/bin -maxdepth 1 -type f 2> /dev/null);
do
mv ${i}{,-${PV}-${P}} || die;
DUALLIFESCRIPTS[${#DUALLIFESCRIPTS[*]}]=${i};
done;
for i in $(find usr/share/man/man1 -maxdepth 1 -type f 2> /dev/null);
do
mv ${i} ${i%.1}-${PV}-${P}.1 || die;
DUALLIFEMAN[${#DUALLIFEMAN[*]}]=${i};
done;
popd > /dev/null;
fi
}
perl_remove_temppath ()
{
debug-print-function ${FUNCNAME} "$@";
find "${D}" -type f -not -name '*.so' -print0 | while read -rd '' f; do
if file "${f}" | grep -q -i " text"; then
grep -q "${D}" "${f}" && ewarn "QA: File contains a temporary path ${f}";
sed -i -e "s:${D%/}/:/:g" "${f}";
fi;
done
}
perl_rm_files ()
{
debug-print-function ${FUNCNAME} "$@";
local skipfile="${T}/.gentoo_makefile_skip";
local manifile="${S}/MANIFEST";
local manitemp="${T}/.gentoo_manifest_temp";
oldifs="$IFS";
IFS="\n";
for filename in "$@";
do
einfo "Removing un-needed ${filename}";
rm -f "${S}/${filename}";
[[ -e "${manifile}" ]] && echo "${filename}" >> "${skipfile}";
done;
if [[ -e "${manifile}" && -e "${skipfile}" ]]; then
einfo "Fixing Manifest";
grep -v -F -f "${skipfile}" "${manifile}" > "${manitemp}";
mv -f -- "${manitemp}" "${manifile}";
rm -- "${skipfile}";
fi;
IFS="$oldifs"
}
perl_set_version ()
{
debug-print-function ${FUNCNAME} "$@";
debug-print "$FUNCNAME: perlinfo_done=${perlinfo_done}";
${perlinfo_done} && return 0;
perlinfo_done=true;
local f version install{{site,vendor}{arch,lib},archlib};
eval "$(perl -V:{version,install{{site,vendor}{arch,lib},archlib}})";
PERL_VERSION=${version};
SITE_ARCH=${installsitearch};
SITE_LIB=${installsitelib};
ARCH_LIB=${installarchlib};
VENDOR_LIB=${installvendorlib};
VENDOR_ARCH=${installvendorarch}
}
pkg_nofetch ()
{
default
}
readme.gentoo_create_doc ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ -n "${DOC_CONTENTS}" ]]; then
if [[ -n "${DISABLE_AUTOFORMATTING}" ]]; then
echo "${DOC_CONTENTS}" > "${T}"/README.gentoo || die;
else
local saved_flags=$-;
set -f;
echo -e ${DOC_CONTENTS} | fold -s -w 70 | sed 's/[[:space:]]*$//' > "${T}"/README.gentoo;
assert;
set +f -${saved_flags};
fi;
else
if [[ -f "${FILESDIR}/README.gentoo-${SLOT%/*}" ]]; then
cp "${FILESDIR}/README.gentoo-${SLOT%/*}" "${T}"/README.gentoo || die;
else
if [[ -f "${FILESDIR}/README.gentoo${README_GENTOO_SUFFIX}" ]]; then
cp "${FILESDIR}/README.gentoo${README_GENTOO_SUFFIX}" "${T}"/README.gentoo || die;
else
die "You are not specifying README.gentoo contents!";
fi;
fi;
fi;
( docinto .;
dodoc "${T}"/README.gentoo ) || die;
README_GENTOO_DOC_VALUE=$(< "${T}/README.gentoo")
}
readme.gentoo_print_elog ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ -z "${README_GENTOO_DOC_VALUE}" ]]; then
die "readme.gentoo_print_elog invoked without matching readme.gentoo_create_doc call!";
else
if ! [[ -n "${REPLACING_VERSIONS}" ]] || [[ -n "${FORCE_PRINT_ELOG}" ]]; then
echo -e "${README_GENTOO_DOC_VALUE}" | while read -r ELINE; do
elog "${ELINE}";
done;
elog "";
elog "(Note: Above message is only printed the first time package is";
elog "installed. Please look at ${EPREFIX}/usr/share/doc/${PF}/README.gentoo*";
elog "for future reference)";
fi;
fi
}
src_compile ()
{
perl-module_src_compile "$@"
}
src_configure ()
{
perl-module_src_configure "$@"
}
src_install ()
{
perl-module_src_install "$@"
}
src_prepare ()
{
perl-module_src_prepare "$@"
}
src_test ()
{
perl-module_src_test "$@"
}
src_unpack ()
{
default
}
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-cpp-is-true ()
{
local CONDITION=${1};
shift;
$(tc-getTARGET_CPP) "${@}" -P - <<-EOF > /dev/null 2>&1
#if ${CONDITION}
true
#else
#error false
#endif
EOF
}
tc-detect-is-softfloat ()
{
[[ $(tc-getTARGET_CPP) == "gcc -E" ]] && return 1;
case ${CTARGET:-${CHOST}} in
*-newlib | *-elf | *-eabi)
return 1
;;
arm*)
if tc-cpp-is-true "defined(__ARM_PCS_VFP)"; then
echo "no";
else
if tc-cpp-is-true "defined(__SOFTFP__)"; then
echo "yes";
else
echo "softfp";
fi;
fi;
return 0
;;
*)
return 1
;;
esac
}
tc-enables-cxx-assertions ()
{
tc-cpp-is-true "defined(_GLIBCXX_ASSERTIONS) || defined(_LIBCPP_ENABLE_ASSERTIONS) || defined(_LIBCPP_ENABLE_HARDENED_MODE)" ${CPPFLAGS} ${CXXFLAGS}
}
tc-enables-fortify-source ()
{
tc-cpp-is-true "defined(_FORTIFY_SOURCE)" ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS}
}
tc-enables-pie ()
{
tc-cpp-is-true "defined(__PIE__)" ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS}
}
tc-enables-ssp ()
{
tc-cpp-is-true "defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS}
}
tc-enables-ssp-all ()
{
tc-cpp-is-true "defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS}
}
tc-enables-ssp-strong ()
{
tc-cpp-is-true "defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS} ${CXXFLAGS}
}
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
;;
arc*b*)
echo big
;;
arc*)
echo little
;;
arm*b*)
echo big
;;
arm*)
echo little
;;
cris*)
echo little
;;
hppa*)
echo big
;;
i?86*)
echo little
;;
ia64*)
echo little
;;
loongarch*)
echo little
;;
m68*)
echo big
;;
mips*l*)
echo little
;;
mips*)
echo big
;;
powerpc*le)
echo little
;;
powerpc*)
echo big
;;
riscv*)
echo little
;;
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) READELF=$(tc-getBUILD_READELF) "$@"
}
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 "$@";
if tc-is-cross-compiler; then
: "${BUILD_CFLAGS:=-O1 -pipe}";
: "${BUILD_CXXFLAGS:=-O1 -pipe}";
: "${BUILD_CPPFLAGS:= }";
: "${BUILD_LDFLAGS:= }";
else
: "${BUILD_CFLAGS:=${CFLAGS}}";
: "${BUILD_CXXFLAGS:=${CXXFLAGS}}";
: "${BUILD_CPPFLAGS:=${CPPFLAGS}}";
: "${BUILD_LDFLAGS:=${LDFLAGS}}";
fi;
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-build-ptr-size ()
{
$(tc-getBUILD_CPP) -P - <<< __SIZEOF_POINTER__ || die "Could not determine CBUILD pointer size"
}
tc-get-c-rtlib ()
{
local res=$($(tc-getCC) ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} -print-libgcc-file-name 2> /dev/null);
case ${res} in
*libclang_rt*)
echo compiler-rt
;;
*libgcc*)
echo libgcc
;;
*)
return 1
;;
esac;
return 0
}
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-get-cxx-stdlib ()
{
local code='#include <ciso646>
#if defined(_LIBCPP_VERSION)
HAVE_LIBCXX
#elif defined(__GLIBCXX__)
HAVE_LIBSTDCPP
#endif
';
local res=$($(tc-getCXX) ${CPPFLAGS} ${CXXFLAGS} -x c++ -E -P - <<< "${code}" 2> /dev/null);
case ${res} in
*HAVE_LIBCXX*)
echo libc++
;;
*HAVE_LIBSTDCPP*)
echo libstdc++
;;
*)
return 1
;;
esac;
return 0
}
tc-get-ptr-size ()
{
$(tc-getCPP) -P - <<< __SIZEOF_POINTER__ || die "Could not determine CHOST pointer size"
}
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 ()
{
local vars="BUILD_$1 $1_FOR_BUILD HOST$1";
tc-is-cross-compiler || vars+=" $1";
_tc-getPROG CBUILD "${vars}" "${@:2}"
}
tc-getBUILD_RANLIB ()
{
tc-getBUILD_PROG RANLIB ranlib "$@"
}
tc-getBUILD_READELF ()
{
tc-getBUILD_PROG READELF readelf "$@"
}
tc-getBUILD_STRINGS ()
{
tc-getBUILD_PROG STRINGS strings "$@"
}
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-getREADELF ()
{
tc-getPROG READELF readelf "$@"
}
tc-getSTRINGS ()
{
tc-getPROG STRINGS strings "$@"
}
tc-getSTRIP ()
{
tc-getPROG STRIP strip "$@"
}
tc-getTARGET_CPP ()
{
if [[ -n ${CTARGET} ]]; then
_tc-getPROG CTARGET TARGET_CPP "gcc -E" "$@";
else
tc-getCPP "$@";
fi
}
tc-has-tls ()
{
local base="${T}/test-tc-tls";
cat <<-EOF > "${base}.c"
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-lto ()
{
local f="${T}/test-lto.o";
case $(tc-get-compiler-type) in
clang)
$(tc-getCC) ${CFLAGS} -c -o "${f}" -x c - <<< "" || die;
llvm-bcanalyzer "${f}" &> /dev/null && return 0
;;
gcc)
$(tc-getCC) ${CFLAGS} -c -o "${f}" -x c - <<< "" || die;
[[ $($(tc-getREADELF) -S "${f}") == *.gnu.lto* ]] && return 0
;;
esac;
return 1
}
tc-is-softfloat ()
{
tc-detect-is-softfloat || tc-tuple-is-softfloat
}
tc-is-static-only ()
{
local host=${CTARGET:-${CHOST}};
[[ ${host} == *-mint* ]]
}
tc-ld-disable-gold ()
{
tc-ld-is-gold "$@" && tc-ld-force-bfd "$@"
}
tc-ld-force-bfd ()
{
if ! tc-ld-is-gold "$@" && ! tc-ld-is-lld "$@"; then
return;
fi;
ewarn "Forcing usage of the BFD linker";
local ld=$(unset LD; tc-getLD "$@");
local bfd_ld="${ld}.bfd";
local path_ld=$(type -P "${bfd_ld}" 2> /dev/null);
[[ -e ${path_ld} ]] && export LD=${bfd_ld};
if tc-is-gcc || tc-is-clang; then
export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
fi
}
tc-ld-is-gold ()
{
local out;
local -x LC_ALL=C;
out=$($(tc-getLD "$@") --version 2>&1);
if [[ ${out} == *"GNU gold"* ]]; then
return 0;
fi;
local base="${T}/test-tc-gold";
cat <<-EOF > "${base}.c"
int main(void) { 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-ld-is-lld ()
{
local out;
local -x LC_ALL=C;
out=$($(tc-getLD "$@") --version 2>&1);
if [[ ${out} == *"LLD"* ]]; then
return 0;
fi;
local base="${T}/test-tc-lld";
cat <<-EOF > "${base}.c"
int main(void) { return 0; }
EOF
out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1);
rm -f "${base}"*;
if [[ ${out} == *"LLD"* ]]; then
return 0;
fi;
return 1
}
tc-ninja_magic_to_arch ()
{
function _tc_echo_kernel_alias ()
{
[[ ${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
;;
arc*)
echo arc
;;
arm*)
echo arm
;;
avr*)
_tc_echo_kernel_alias avr32 avr
;;
bfin*)
_tc_echo_kernel_alias blackfin bfin
;;
c6x*)
echo c6x
;;
cris*)
echo cris
;;
frv*)
echo frv
;;
hexagon*)
echo hexagon
;;
hppa*)
_tc_echo_kernel_alias parisc hppa
;;
i?86*)
echo x86
;;
ia64*)
echo ia64
;;
loongarch*)
_tc_echo_kernel_alias loongarch loong
;;
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*)
_tc_echo_kernel_alias sh64 sh
;;
sh*)
echo sh
;;
sparc64*)
_tc_echo_kernel_alias sparc64 sparc
;;
sparc*)
[[ ${PROFILE_ARCH} == "sparc64" ]] && _tc_echo_kernel_alias sparc64 sparc || echo sparc
;;
tile*)
echo tile
;;
vax*)
echo vax
;;
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
}
tc-tuple-is-softfloat ()
{
local CTARGET=${CTARGET:-${CHOST}};
case ${CTARGET//_/-} in
bfin* | h8300*)
echo "only"
;;
*-softfloat-*)
echo "yes"
;;
*-softfp-*)
echo "softfp"
;;
arm*-hardfloat-* | arm*eabihf)
echo "no"
;;
*-newlib | *-elf | *-eabi)
echo "no"
;;
arm*)
echo "yes"
;;
*)
echo "no"
;;
esac
}
ver_cut ()
{
local range=${1};
local v=${2:-${PV}};
local start end;
local -a comp;
__eapi7_ver_split "${v}";
local max=$((${#comp[@]}/2));
__eapi7_ver_parse_range "${range}" "${max}";
local IFS=;
if [[ ${start} -gt 0 ]]; then
start=$(( start*2 - 1 ));
fi;
echo "${comp[*]:start:end*2-start}"
}
ver_rs ()
{
local v;
(( ${#} & 1 )) && v=${@: -1} || v=${PV};
local start end i;
local -a comp;
__eapi7_ver_split "${v}";
local max=$((${#comp[@]}/2 - 1));
while [[ ${#} -ge 2 ]]; do
__eapi7_ver_parse_range "${1}" "${max}";
for ((i = start*2; i <= end*2; i+=2 ))
do
[[ ${i} -eq 0 && -z ${comp[i]} ]] && continue;
comp[i]=${2};
done;
shift 2;
done;
local IFS=;
echo "${comp[*]}"
}
ver_test ()
{
local va op vb;
if [[ $# -eq 3 ]]; then
va=${1};
shift;
else
va=${PVR};
fi;
[[ $# -eq 2 ]] || die "${FUNCNAME}: bad number of arguments";
op=${1};
vb=${2};
case ${op} in
-eq | -ne | -lt | -le | -gt | -ge)
;;
*)
die "${FUNCNAME}: invalid operator: ${op}"
;;
esac;
__eapi7_ver_compare "${va}" "${vb}";
test $? "${op}" 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment