- declare -x ABI="amd64"
- declare -x ABI_MIPS=""
- declare -x ABI_PPC=""
- declare -x ABI_S390=""
- declare -x ABI_X86="64"
- declare -x ALSA_CARDS=""
- declare -x ALSA_PCM_PLUGINS=""
- declare -x APACHE2_MODULES=""
- declare -x APACHE2_MPMS=""
- declare -x ARCH="amd64"
- declare -x ASFLAGS_x86="--32"
- declare BDEPEND=""
- declare -x CALLIGRA_EXPERIMENTAL_FEATURES=""
- declare -x CALLIGRA_FEATURES=""
- declare -x CAMERAS=""
- declare -x CBUILD="x86_64-pc-linux-gnu"
- declare -x CDEFINE_amd64="__x86_64__"
- declare -x CDEFINE_x86="__i386__"
- declare -x CFLAGS="-mtune=generic -O2 -pipe"
- declare -x CFLAGS_default
- 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_x86="i686-pc-linux-gnu"
- declare -x COLLECTD_PLUGINS=""
- declare -x CONF_PREFIX="/usr"
- declare -x CPU_FLAGS_ARM=""
- declare -x CPU_FLAGS_X86=""
- declare -x CROSSCOMPILE_OPTS=""
- declare -x CTARGET_default="x86_64-pc-linux-gnu"
- declare -x CURL_SSL=""
- declare -x CXXFLAGS="-mtune=generic -O2 -pipe"
- declare -x DEFAULT_ABI="amd64"
- declare -x DEFINED_PHASES=" compile configure install prepare setup test"
- declare DEPEND="asn1? ( >=dev-libs/libtasn1-3.4[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(-)?] )
- libffi? ( >=dev-libs/libffi-3.0.0[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(-)?] )
- trust? ( app-misc/ca-certificates )
- virtual/pkgconfig "
- declare DESCRIPTION="Provides a standard configuration setup for installing PKCS#11"
- declare -x DESTTREE="/usr"
- declare -x DIROPTIONS="-m0755"
- declare -x DVB_CARDS=""
- declare -x EAPI="6"
- declare -x ELIBC="glibc"
- declare -x ENLIGHTENMENT_MODULES=""
- declare -x EXEOPTIONS="-m0755"
- declare -x FAKED_MODE="1"
- declare -x FCDSL_CARDS=""
- declare -x FCFLAGS="-mtune=generic -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="-mtune=generic -O2 -pipe"
- declare -x FFTOOLS=""
- declare -x FOO2ZJS_DEVICES=""
- declare -x FRITZCAPI_CARDS=""
- declare -x GCC_SPECS=""
- declare -x GPSD_PROTOCOLS=""
- declare -x GRUB_PLATFORMS=""
- declare HDEPEND=""
- declare HOMEPAGE="https://p11-glue.freedesktop.org/p11-kit.html https://github.com/p11-glue/p11-kit"
- declare -x INHERITED=" toolchain-funcs multilib ltprune multibuild multilib-build multilib-minimal"
- declare -x INPUT_DEVICES=""
- declare -x INSDESTTREE=""
- declare -x INSOPTIONS="-m0644"
- declare IUSE="+asn1 debug +libffi +trust 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 asn1 debug 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 libffi m68k m68k-mint mips nios2 ppc ppc-aix ppc-macos ppc64 ppc64-linux prefix prefix-chain prefix-guest riscv s390 sh sparc sparc-fbsd sparc-solaris sparc64-solaris trust userland_BSD userland_GNU x64-cygwin x64-macos x64-solaris x86 x86-cygwin x86-fbsd x86-linux x86-macos x86-solaris x86-winnt"
- declare -x IUSE_IMPLICIT="prefix prefix-chain prefix-guest"
- declare -x KERNEL="linux"
- declare -x KERNEL_ABI="amd64"
- declare -x KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~arm-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
- declare -x L10N=""
- declare -x LANG="en_US.utf8"
- declare -x LCD_DEVICES=""
- declare -x LC_ADDRESS="en_US.utf8"
- declare -x LC_COLLATE="C"
- declare -x LC_CTYPE="en_US.utf8"
- declare -x LC_IDENTIFICATION="en_US.utf8"
- declare -x LC_MEASUREMENT="en_US.utf8"
- declare -x LC_MESSAGES="en_US.utf8"
- declare -x LC_MONETARY="en_US.utf8"
- declare -x LC_NAME="en_US.utf8"
- declare -x LC_NUMERIC="en_US.utf8"
- declare -x LC_PAPER="en_US.utf8"
- declare -x LC_TELEPHONE="en_US.utf8"
- declare -x LC_TIME="en_US.utf8"
- declare -x LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed"
- declare -x LDFLAGS_default
- declare -x LDFLAGS_x86="-m elf_i386"
- declare -x LIBDIR_amd64="lib64"
- declare -x LIBDIR_amd64_fbsd="lib64"
- declare -x LIBDIR_default="lib"
- declare -x LIBDIR_ppc="lib32"
- declare -x LIBDIR_ppc64="lib64"
- declare -x LIBDIR_sparc32="lib32"
- declare -x LIBDIR_sparc64="lib64"
- declare -x LIBDIR_x86="lib32"
- declare -x LIBDIR_x86_fbsd="lib32"
- declare -x LIBOPTIONS="-m0644"
- declare -x LIBREOFFICE_EXTENSIONS=""
- declare -x LICENSE="MIT"
- declare -x LINGUAS="en_US"
- declare -x LIRC_DEVICES=""
- declare -x LLVM_TARGETS=""
- declare -x MAKEOPTS="-j4"
- declare -x MANPAGER="manpager"
- declare -x MISDN_CARDS=""
- 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|gcc-lib|binutils|eclipse-3|debug|portage)"
- 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 NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
- declare -x NETBEANS_MODULES=""
- declare -x NGINX_MODULES_EXTERNAL=""
- declare -x NGINX_MODULES_HTTP=""
- declare -x NGINX_MODULES_MAIL=""
- declare -x NGINX_MODULES_STREAM=""
- declare -x OFED_DRIVERS=""
- declare -x OFFICE_IMPLEMENTATION=""
- declare -x OPENGL_PROFILE="xorg-x11"
- declare -x OPENMPI_FABRICS=""
- declare -x OPENMPI_OFED_FEATURES=""
- declare -x OPENMPI_RM=""
- declare -x OSS_CARDS=""
- declare -x PATH="/usr/lib/portage/python2.7/ebuild-helpers/xattr:/usr/lib/portage/python2.7/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/7.3.1"
- declare PDEPEND=""
- declare -x PHP_TARGETS=""
- 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/p11-kit-0.23.9/html")
- declare -a PORTAGE_DOSTRIP=([0]="/")
- declare -a PORTAGE_DOSTRIP_SKIP=()
- declare -x POSTGRES_TARGETS=""
- 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 PYTHONDONTWRITEBYTECODE="1"
- declare -x PYTHON_SINGLE_TARGET=""
- declare -x PYTHON_TARGETS=""
- declare -x QEMU_SOFTMMU_TARGETS=""
- declare -x QEMU_USER_TARGETS=""
- declare RDEPEND="asn1? ( >=dev-libs/libtasn1-3.4[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(-)?] )
- libffi? ( >=dev-libs/libffi-3.0.0[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(-)?] )
- trust? ( app-misc/ca-certificates ) "
- declare REPOSITORY
- declare REQUIRED_USE="trust? ( asn1 ) "
- 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 ROS_MESSAGES=""
- declare -x RUBY_TARGETS=""
- declare -x S="/var/tmp/portage/app-crypt/p11-kit-0.23.9/work/p11-kit-0.23.9"
- declare -x SANDBOX_DEBUG="0"
- declare -x SANDBOX_DENY=""
- declare -x SANDBOX_PREDICT="/var/tmp/portage/app-crypt/p11-kit-0.23.9/homedir:/dev/crypto"
- declare -x SANDBOX_READ="/:/var/tmp"
- 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/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/app-crypt/p11-kit-0.23.9/homedir/.bash_history"
- declare -x SANE_BACKENDS=""
- declare -x SHELL="/bin/bash"
- declare -x SLOT="0"
- declare SRC_URI="https://github.com/p11-glue/p11-kit/releases/download/0.23.9/p11-kit-0.23.9.tar.gz"
- declare -x STAGE1_USE="multilib nptl nptlonly unicode"
- declare -x SYMLINK_LIB="yes"
- declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1"
- declare -x USE="abi_x86_64 amd64 asn1 elibc_glibc kernel_linux libffi trust userland_GNU"
- declare -x USERLAND="GNU"
- declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
- declare -x USE_EXPAND_UNPREFIXED="ARCH"
- declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 hppa 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 UWSGI_PLUGINS=""
- declare -x VIDEO_CARDS=""
- declare -x VOICEMAIL_STORAGE=""
- declare -x XFCE_PLUGINS=""
- declare -x XTABLES_ADDONS=""
- declare -x _E_DOCDESTTREE_=""
- declare -x _E_EXEDESTTREE_=""
- declare -- _LTPRUNE_ECLASS="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 -- _TOOLCHAIN_FUNCS_ECLASS="1"
- declare -- conf="p11-kit-0.23.9-r0"
- 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
- [[ ${#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"
- }
- _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;
- "${@}"
- }
- _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}"
- }
- 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};
- 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 [[ ${#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 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."
- }
- econf_build ()
- {
- local CBUILD=${CBUILD:-${CHOST}};
- tc-env_build econf --build=${CBUILD} --host=${CBUILD} "$@"
- }
- 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
- [[ ${#DOCS[@]} -gt 0 ]] && docinto / && dodoc -r "${DOCS[@]}";
- else
- [[ -n ${DOCS} ]] && docinto / && dodoc -r ${DOCS};
- fi;
- fi );
- ( if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; 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 ()
- {
- 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_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
- *-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_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_modname ()
- {
- local modname;
- local ver=$1;
- case ${CHOST} in
- *-darwin*)
- modname="bundle"
- ;;
- *)
- modname="so"
- ;;
- esac;
- echo ".${modname}"
- }
- 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} ]]
- }
- 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 ()
- {
- ECONF_SOURCE="${S}" econf $(use_enable trust trust-module) $(use_with trust trust-paths ${EPREFIX}/etc/ssl/certs/ca-certificates.crt) $(use_enable debug) $(use_with libffi) $(use_with asn1 libtasn1);
- if multilib_is_native_abi; then
- ln -s "${S}"/doc/manual/html doc/manual/html || die;
- fi
- }
- multilib_src_install_all ()
- {
- einstalldocs;
- prune_libtool_files --modules
- }
- 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
- }
- number_abis ()
- {
- set -- `get_install_abis`;
- echo $#
- }
- pkg_nofetch ()
- {
- default
- }
- pkg_setup ()
- {
- export FAKED_MODE=1
- }
- 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
- }
- 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}
- }
- src_compile ()
- {
- multilib-minimal_src_compile "$@"
- }
- src_configure ()
- {
- multilib-minimal_src_configure "$@"
- }
- src_install ()
- {
- multilib-minimal_src_install "$@"
- }
- src_prepare ()
- {
- if [[ ${CHOST} == *-solaris2.* && ${CHOST##*-solaris2.} -lt 11 ]]; then
- sed -i -e '/define _XOPEN_SOURCE/s/700/600/' common/compat.c || die;
- sed -i -e '/#include <paths.h>/d' trust/test-trust.c || die;
- sed -i -e 's/SUN_LEN \(([^)]\+)\)/strlen (\1->sun_path)/' p11-kit/server.c || die;
- fi;
- default
- }
- src_test ()
- {
- multilib-minimal_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-endian ()
- {
- local host=$1;
- [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
- host=${host%%-*};
- case ${host} in
- aarch64*be)
- echo big
- ;;
- aarch64)
- echo little
- ;;
- alpha*)
- echo big
- ;;
- arm*b*)
- echo big
- ;;
- arm*)
- echo little
- ;;
- cris*)
- echo little
- ;;
- hppa*)
- echo big
- ;;
- i?86*)
- echo little
- ;;
- ia64*)
- echo little
- ;;
- m68*)
- echo big
- ;;
- mips*l*)
- echo little
- ;;
- mips*)
- echo big
- ;;
- powerpc*le)
- echo little
- ;;
- powerpc*)
- echo big
- ;;
- s390*)
- echo big
- ;;
- sh*b*)
- echo big
- ;;
- sh*)
- echo little
- ;;
- sparc*)
- echo big
- ;;
- x86_64*)
- echo little
- ;;
- *)
- echo wtf
- ;;
- esac
- }
- tc-env_build ()
- {
- tc-export_build_env;
- CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
- }
- tc-export ()
- {
- local var;
- for var in "$@";
- do
- [[ $(type -t "tc-get${var}") != "function" ]] && die "tc-export: invalid export variable '${var}'";
- "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
- }