[gentoo-user] src_install: dobin failed while merging ebuild (18/18)
From
whiteman808@21:1/5 to
All on Sun Nov 17 08:30:01 2024
[continued from previous message]
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 ()
{
[[ $# -ne 0 ]] && die "replace-sparc64-flags takes no arguments";
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
}
setup-allowed-flags ()
{
[[ ${EAPI} == 7 ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}.";
_setup-allowed-flags "$@"
}
src_compile ()
{
ego build
}
src_configure ()
{
default
}
src_install ()
{
dobin goimapnotify;
systemd_dounit "${FILESDIR}"/goimapnotify@.service
}
src_prepare ()
{
default
}
src_test ()
{
default
}
src_unpack ()
{
go-module_src_unpack "$@"
}
strip-flags ()
{
[[ $# -ne 0 ]] && die "strip-flags takes no arguments";
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
for y in "${ALLOWED_FLAGS[@]}";
do
if [[ ${x} == ${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-unsupported-flags ()
{
[[ $# -ne 0 ]] && die "strip-unsupported-flags takes no arguments";
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-CCLD ${LDFLAGS})
}
systemd_dounit ()
{
debug-print-function ${FUNCNAME} "$@";
( insopts -m 0644;
insinto "$(_systemd_unprefix systemd_get_systemunitdir)";
doins "${@}" )
}
systemd_douserunit ()
{
debug-print-function ${FUNCNAME} "$@";
( insopts -m 0644;
insinto "$(_systemd_unprefix systemd_get_userunitdir)";
doins "${@}" )
}
systemd_enable_ntpunit ()
{
debug-print-function ${FUNCNAME} "$@";
if [[ ${#} -lt 2 ]]; then
die "Usage: systemd_enable_ntpunit <NN-name> <service>...";
fi;
local ntpunit_name=${1};
local services=("${@:2}");
if [[ ${ntpunit_name} != [0-9][0-9]-* ]]; then
die "ntpunit.d file must be named NN-name where NN are digits.";
else
if [[ ${ntpunit_name} == *.list ]]; then
die "The .list suffix is appended implicitly to ntpunit.d name.";
fi;
fi;
local unitdir=$(systemd_get_systemunitdir);
local s;
for s in "${services[@]}";
do
if [[ ! -f "${D}${unitdir}/${s}" ]]; then
die "ntp-units.d provider ${s} not installed (yet?) in \${D}.";
fi;
echo "${s}" >> "${T}"/${ntpunit_name}.list || die;
done;
( insopts -m 0644;
insinto "$(_systemd_unprefix systemd_get_utildir)"/ntp-units.d;
doins "${T}"/${ntpunit_name}.list );
local ret=${?};
rm "${T}"/${ntpunit_name}.list || die;
return ${ret}
}
systemd_enable_service ()
{
debug-print-function ${FUNCNAME} "$@";
[[ ${#} -eq 2 ]] || die "Synopsis: systemd_enable_service target service";
local target=${1};
local service=${2};
local ud=$(_systemd_unprefix systemd_get_systemunitdir);
local destname=${service##*/};
dodir "${ud}"/"${target}".wants && dosym ../"${service}" "${ud}"/"${target}".wants/"${destname}"
}
systemd_get_sleepdir ()
{
debug-print-function ${FUNCNAME} "$@";
_systemd_get_dir systemdsleepdir /lib/systemd/system-sleep
}
systemd_get_systemgeneratordir ()
{
debug-print-function ${FUNCNAME} "$@";
_systemd_get_dir systemdsystemgeneratordir /lib/systemd/system-generators
}
systemd_get_systempresetdir ()
{
debug-print-function ${FUNCNAME} "$@";
_systemd_get_dir systemdsystempresetdir /lib/systemd/system-preset
}
systemd_get_systemunitdir ()
{
debug-print-function ${FUNCNAME} "$@";
_systemd_get_dir systemdsystemunitdir /lib/systemd/system
}
systemd_get_userunitdir ()
{
debug-print-function ${FUNCNAME} "$@";
_systemd_get_dir systemduserunitdir /usr/lib/systemd/user
}
systemd_get_utildir ()
{
debug-print-function ${FUNCNAME} "$@";
_systemd_get_dir systemdutildir /lib/systemd
}
systemd_install_dropin ()
{
debug-print-function ${FUNCNAME} "$@";
local basedir;
if [[ $# -ge 1 ]] && [[ $1 == "--user" ]]; then
basedir=$(_systemd_unprefix systemd_get_userunitdir);
shift 1;
else
basedir=$(_systemd_unprefix systemd_get_systemunitdir);
fi;
local unit=${1};
local src=${2};
[[ -n ${unit} ]] || die "No unit specified";
[[ -n ${src} ]] || die "No conf file specified";
[[ ${unit} == *.d ]] && die "Unit ${unit} must not have .d suffix";
( insopts -m 0644;
insinto "${basedir}/${unit}".d;
newins "${src}" 00gentoo.conf )
}
systemd_install_serviced ()
{
debug-print-function ${FUNCNAME} "$@";
local src=${1};
local service=${2};
[[ -n ${src} ]] || die "No file specified";
if [[ ! -n ${service} ]]; then
[[ ${src} == *.conf ]] || die "Source file needs .conf suffix";
service=${src##*/};
service=${service%.conf};
fi;
[[ ${service} == *.d ]] && die "Service must not have .d suffix";
( insopts -m 0644;
insinto /etc/systemd/system/"${service}".d;
newins "${src}" 00gentoo.conf )
}
systemd_is_booted ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -d /run/systemd/system ]];
local ret=${?};
debug-print "${FUNCNAME}: [[ -d /run/systemd/system ]] -> ${ret}";
return ${ret}
}
systemd_newunit ()
{
debug-print-function ${FUNCNAME} "$@";
( insopts -m 0644;
insinto "$(_systemd_unprefix systemd_get_systemunitdir)";
newins "${@}" )
}
systemd_newuserunit ()
{
debug-print-function ${FUNCNAME} "$@";
( insopts -m 0644;
insinto "$(_systemd_unprefix systemd_get_userunitdir)";
newins "${@}" )
}
systemd_reenable ()
{
type systemctl &> /dev/null || return 0;
local x;
for x in "$@";
do
if systemctl --quiet --root="${ROOT:-/}" is-enabled "${x}"; then
systemctl --root="${ROOT:-/}" reenable "${x}";
fi;
done
}
systemd_update_catalog ()
{
debug-print-function ${FUNCNAME} "$@";
[[ ${EBUILD_PHASE} == post* ]] || die "${FUNCNAME} disallowed during ${EBUILD_PHASE_FUNC:-${EBUILD_PHASE}}";
local journalctl=${EPREFIX}/usr/bin/journalctl;
if [[ -x ${journalctl} ]]; then
ebegin "Updating systemd journal catalogs";
journalctl --update-catalog;
eend $?;
else
debug-print "${FUNCNAME}: journalctl not found.";
fi
}
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 | arm64-apple-darwin*)
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-64bit-time_t ()
{
$(tc-getCC) ${CFLAGS} ${CPPFLAGS} -c -x c - -o /dev/null <<-EOF &> /dev/null
#include <sys/types.h>
int test[sizeof(time_t) >= 8 ? 1 : -1];
EOF
return $?
}
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;
case "${CHOST}" in
*-darwin*)
: ${flags:=-dynamiclib}
;;
*)
: ${flags:=-fPIC -shared -Wl,-z,defs}
;;
esac;
[[ $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";
local ret=1;
case $(tc-get-compiler-type) in
clang)
$(tc-getCC) ${CFLAGS} -c -o "${f}" -x c - <<< "" || die;
llvm-bcanalyzer "${f}" &> /dev/null && ret=0
;;
gcc)
$(tc-getCC) ${CFLAGS} -c -o "${f}" -x c - <<< "" || die;
[[ $($(tc-getREADELF) -S "${f}") == *.gnu.lto* ]] && ret=0
;;
esac;
rm -f "${f}" || die;
return "${ret}"
}
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-bfd "$@"; 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 CFLAGS="${CFLAGS} -fuse-ld=bfd";
export CXXFLAGS="${CXXFLAGS} -fuse-ld=bfd";
export LDFLAGS="${LDFLAGS} -fuse-ld=bfd";
fi
}
tc-ld-is-bfd ()
{
local out;
local -x LC_ALL=C;
out=$($(tc-getLD "$@") --version 2>&1);
if [[ ${out} != "GNU ld"* ]]; then
return 1;
fi;
local base="${T}/test-tc-linker";
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 ld".* ]]; then
return 1;
fi;
return 0
}
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-linker";
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-linker";
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-ld-is-mold ()
{
local out;
local -x LC_ALL=C;
out=$($(tc-getLD "$@") --version 2>&1);
if [[ ${out} == *"mold"* ]]; then
return 0;
fi;
local base="${T}/test-tc-linker";
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} == *"mold"* ]]; 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
arm64*)
echo arm64
;;
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"
;;
arm64-apple-darwin*)
echo "no"
;;
arm*)
echo "yes"
;;
*)
echo "no"
;;
esac
}
test-compile ()
{
local lang=$1;
local code=$2;
shift 2;
[[ -z "${lang}" ]] && return 1;
[[ -z "${code}" ]] && return 1;
local compiler filename_in filename_out args=() libs=();
case "${lang}" in
c)
compiler="$(tc-getCC)";
filename_in="${T}/test.c";
filename_out="${T}/test.o";
args+=(${CFLAGS[@]} -xc -c)
;;
c++)
compiler="$(tc-getCXX)";
filename_in="${T}/test.cc";
filename_out="${T}/test.o";
args+=(${CXXFLAGS[@]} -xc++ -c)
;;
f77)
compiler="$(tc-getF77)";
filename_in="${T}/test.f";
filename_out="${T}/test.o";
args+=(${FFFLAGS[@]} -xf77 -c)
;;
f95)
compiler="$(tc-getFC)";
filename_in="${T}/test.f90";
filename_out="${T}/test.o";
args+=(${FCFLAGS[@]} -xf95 -c)
;;
c+ld)
compiler="$(tc-getCC)";
filename_in="${T}/test.c";
filename_out="${T}/test.exe";
args+=(${CFLAGS[@]} ${LDFLAGS[@]} -xc);
libs+=(${LIBS[@]})
;;
c+++ld)
compiler="$(tc-getCXX)";
filename_in="${T}/test.cc";
filename_out="${T}/test.exe";
args+=(${CXXFLAGS[@]} ${LDFLAGS[@]} -xc++);
libs+=(${LIBS[@]})
;;
f77+ld)
compiler="$(tc-getF77)";
filename_in="${T}/test.f";
filename_out="${T}/test.exe";
args+=(${FFLAGS[@]} ${LDFLAGS[@]} -xf77);
libs+=(${LIBS[@]})
;;
f95+ld)
compiler="$(tc-getFC)";
filename_in="${T}/test.f90";
filename_out="${T}/test.exe";
args+=(${FCFLAGS[@]} ${LDFLAGS[@]} -xf95);
libs+=(${LIBS[@]})
;;
*)
die "Unknown compiled language ${lang}"
;;
esac;
printf "%s\n" "${code}" > "${filename_in}" || die "Failed to create '${test_in}'";
"${compiler}" ${args[@]} "${filename_in}" -o "${filename_out}" ${libs[@]} &> /dev/null
}
test-flag-CC ()
{
_test-flag-PROG CC c "$@"
}
test-flag-CCLD ()
{
_test-flag-PROG CC c+ld "$@"
}
test-flag-CXX ()
{
_test-flag-PROG CXX c++ "$@"
}
test-flag-F77 ()
{
_test-flag-PROG F77 f77 "$@"
}
test-flag-FC ()
{
_test-flag-PROG FC f95 "$@"
}
test-flag-PROG ()
{
[[ ${EAPI} == 7 ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}.";
_test-flag-PROG "$@"
}
test-flags ()
{
test-flags-CC "$@"
}
test-flags-CC ()
{
_test-flags-PROG CC "$@"
}
test-flags-CCLD ()
{
_test-flags-PROG CCLD "$@"
}
test-flags-CXX ()
{
_test-flags-PROG CXX "$@"
}
test-flags-F77 ()
{
_test-flags-PROG F77 "$@"
}
test-flags-FC ()
{
_test-flags-PROG FC "$@"
}
test-flags-PROG ()
{
[[ ${EAPI} == 7 ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}.";
_test-flags-PROG "$@"
}
test_version_info ()
{
if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
return 0;
else
return 1;
fi
}
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
}
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)