declare -x ABI="amd64" declare -x ABI_MIPS="" declare -x ABI_S390="" declare -x ABI_X86="64" declare -x ADA_TARGET="" declare -x ADDR2LINE="llvm-addr2line" declare -x ALSA_CARDS="" declare -x AMANDA_CONFIG_NAME="DailySet1" declare -x AMANDA_DBGDIR="/var/tmp/amanda" declare -x AMANDA_GROUP_NAME="amanda" declare -x AMANDA_PORTS="" declare -x AMANDA_PORTS_BOTH="" declare -x AMANDA_PORTS_TCP="" declare -x AMANDA_PORTS_UDP="" declare -x AMANDA_SERVER="23-0-llvm-systemd-20240520-084001" declare -x AMANDA_SERVER_INDEX="23-0-llvm-systemd-20240520-084001" declare -x AMANDA_SERVER_TAPE="23-0-llvm-systemd-20240520-084001" declare -x AMANDA_SERVER_TAPE_DEVICE="/dev/nst0" declare -x AMANDA_TAR="/bin/tar" declare -x AMANDA_TAR_LISTDIR="/var/spool/amanda/tar-lists" declare -x AMANDA_TMPDIR="/var/tmp/amanda" declare -x AMANDA_USER_HOMEDIR="/var/spool/amanda" declare -x AMANDA_USER_NAME="amanda" declare -x AMDGPU_TARGETS="" declare -x ANT_HOME="/usr/share/ant" declare -x APACHE2_MODULES="" declare -x APACHE2_MPMS="" declare -x AR="llvm-ar" declare -x ARCH="amd64" declare -x AS="clang -c" declare BDEPEND=" test? ( ruby_targets_ruby31? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby31(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby31(-)] ) ruby_targets_ruby32? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby32(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby32(-)] ) ruby_targets_ruby33? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby33(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby33(-)] ) ) ruby_targets_ruby31? ( dev-lang/ruby:3.1 ) ruby_targets_ruby32? ( dev-lang/ruby:3.2 ) ruby_targets_ruby33? ( dev-lang/ruby:3.3 ) ruby_targets_ruby31? ( doc? ( dev-ruby/rdoc[ruby_targets_ruby31(-)] ) ) ruby_targets_ruby32? ( doc? ( dev-ruby/rdoc[ruby_targets_ruby32(-)] ) ) ruby_targets_ruby33? ( doc? ( dev-ruby/rdoc[ruby_targets_ruby33(-)] ) ) ruby_targets_ruby31? ( virtual/rubygems[ruby_targets_ruby31(-)] ) ruby_targets_ruby32? ( virtual/rubygems[ruby_targets_ruby32(-)] ) ruby_targets_ruby33? ( virtual/rubygems[ruby_targets_ruby33(-)] ) test? ( ruby_targets_ruby31? ( virtual/rubygems[ruby_targets_ruby31(-)] ) ruby_targets_ruby32? ( virtual/rubygems[ruby_targets_ruby32(-)] ) ruby_targets_ruby33? ( virtual/rubygems[ruby_targets_ruby33(-)] ) ) virtual/pkgconfig " 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 zstd cet ssl curl_ssl_openssl python_single_target_python3_11 -binutils-plugin compiler-rt clang libunwind default-compiler-rt default-lld default-libcxx llvm-libunwind libcxx -sanitize libcxxabi -llvm_targets_BPF -llvm_targets_AMDGPU -llvm_targets_NVPTX -llvm_targets_BPF systemd sysv-utils udev" declare -x CALLIGRA_FEATURES="" declare -x CAMERAS="" declare -x CARGO_TERM_COLOR="never" declare -x CBUILD="x86_64-pc-linux-gnu" declare -x CC="clang" declare -x CCL_DEFAULT_DIRECTORY="/usr/lib64/clozurecl" declare -x CFLAGS="-O2 -pipe -march=native -fno-diagnostics-color" 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 CMAKE_COLOR_DIAGNOSTICS="OFF" declare -x CMAKE_COLOR_MAKEFILE="OFF" declare -x COLLECTD_PLUGINS="" declare -x CPP="clang-cpp" 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 CXX="clang++" declare -x CXXFLAGS="-O2 -pipe -march=native -fno-diagnostics-color" declare -x CXXSTDLIB="c++" declare -x DEFAULT_ABI="amd64" declare -x DEFINED_PHASES=" compile configure install prepare setup test unpack" declare DEPEND=" ruby_targets_ruby31? ( dev-lang/ruby:3.1 ) ruby_targets_ruby32? ( dev-lang/ruby:3.2 ) ruby_targets_ruby33? ( dev-lang/ruby:3.3 ) ruby_targets_ruby31? ( virtual/rubygems[ruby_targets_ruby31(-)] ) ruby_targets_ruby32? ( virtual/rubygems[ruby_targets_ruby32(-)] ) ruby_targets_ruby33? ( virtual/rubygems[ruby_targets_ruby33(-)] ) " declare DESCRIPTION="Send RPCs from Ruby using GRPC" declare -x DIROPTIONS="-m0755" declare -x EAPI="8" declare -x EGO_BUILD_FLAGS="-p 4" 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="1716574073.851082" declare -- EPOCHSECONDS="1716574073" declare -x EXEOPTIONS="-m0755" declare -x FCFLAGS="-O2 -pipe -march=native -fno-diagnostics-color" declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" declare -x FFLAGS="-O2 -pipe -march=native -fno-diagnostics-color" declare -x FFTOOLS="" declare -x GCC_COLORS="" declare -x GCC_SPECS="" declare -x GIT_PAGER="cat" declare -x GO19CONCURRENTCOMPILATION="0" declare -x GOMAXPROCS="4" declare -x GPG_VERIFY_GROUP_DROP="nogroup" declare -x GPG_VERIFY_USER_DROP="nobody" declare -x GPSD_PROTOCOLS="" declare -x GRUB_PLATFORMS="" declare -x GSETTINGS_BACKEND="dconf" declare -x HELIX_RUNTIME="/usr/share/helix/runtime" declare HOMEPAGE="https://github.com/grpc/grpc" declare IDEPEND="" declare -x INHERITED=" multilib toolchain-funcs ruby-utils ruby-ng ruby-fakegem" declare -x INPUT_DEVICES="" declare -x INSOPTIONS="-m0644" declare IUSE=" test ruby_targets_ruby31 ruby_targets_ruby32 ruby_targets_ruby33 doc test" declare -x IUSE_EFFECTIVE="abi_x86_64 alpha amd64 amd64-linux arm arm64 arm64-macos doc 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 ruby_targets_ruby31 ruby_targets_ruby32 ruby_targets_ruby33 s390 sparc test x64-macos x64-solaris x86 x86-linux" declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-guest prefix-stack" declare -x JAVAC="/etc/java-config-2/current-system-vm/bin/javac" declare -x JAVACC_HOME="/usr/share/javacc/" declare -x JAVA_HOME="/etc/java-config-2/current-system-vm" declare -x JDK_HOME="/etc/java-config-2/current-system-vm" declare -x KERNEL="linux" declare -x KERNEL_ABI="amd64" declare -x KEYWORDS="~amd64 ~arm64" declare -x L10N="" declare -x LADSPA_PATH="/usr/lib64/ladspa" declare -x LANG="C.UTF8" declare -x LCD_DEVICES="" declare -x LC_COLLATE="C" declare -x LC_MESSAGES="C" declare -x LD="ld.lld" declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,--as-needed -Wl,--defsym=__gentoo_check_ldflags__=0" 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 LIBGUESTFS_PATH="/usr/share/guestfs/appliance/" declare -x LIBOPTIONS="-m0644" declare -x LIBREOFFICE_EXTENSIONS="" declare -x LICENSE="BSD-2" declare -x LLVM_SLOT="" declare -x LLVM_TARGETS="" declare -x LLVM_USE_LIBCXX="1" declare -x LOGTALKHOME="/usr/share/logtalk-3.47.0" declare -x LUA_SINGLE_TARGET="" declare -x LUA_TARGETS="" declare -x LV2_PATH="/usr/lib64/lv2" declare -x MAILTO="tinderbox" declare -x MAKEOPTS=" -j4" 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 NM="llvm-nm" declare -x NPM_CONFIG_GLOBALCONFIG="/etc/npm/npmrc" declare -x OBJCOPY="llvm-objcopy" declare -x OBJDUMP="llvm-objdump" declare -x OCAML_COLOR="never" declare -x OFFICE_IMPLEMENTATION="" declare -x OMP_DYNAMIC="FALSE" declare -x OMP_NESTED="FALSE" declare -x OMP_NUM_THREADS="4" 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/spark-3/bin:/usr/lib/spark-3/sbin:/usr/lib/llvm/18/bin:/usr/lib/llvm/17/bin:/usr/bin/cdsclient:/opt/hermes/bin:/var/lib/bin" declare PDEPEND="" declare -x PERL_FEATURES="" declare -x PHP_TARGETS="" declare -x PKGSYSTEM_ENABLE_FSYNC="0" declare -x PORTAGE_COMPRESSION_COMMAND="zstd -T4" 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/grpc-1.59.2/html") declare -a PORTAGE_DOSTRIP=([0]="/") declare -a PORTAGE_DOSTRIP_SKIP=() declare -x PORTAGE_REPO_REVISIONS="{\"gentoo\": \"b816102124c6c77ffe004eea5f3f864b74c2b033\"}" declare -x PORTAGE_TMPFS="/dev/shm" declare -x PORTAGE_USE_CLANG_HOOK="1" declare -x PORT_LOGDIR="/var/log/portage" declare -x POSTGRES_TARGETS="" 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 PYTEST_ADDOPTS="--color=no" declare -x PYTHONDONTWRITEBYTECODE="1" declare -x PYTHON_SINGLE_TARGET="" declare -x PYTHON_TARGETS="" declare -x PY_FORCE_COLOR="0" declare -x QEMU_SOFTMMU_TARGETS="" declare -x QEMU_USER_TARGETS="" declare -x QRNADB="/usr/share/qrna/data" declare -x RANLIB="llvm-ranlib" declare RDEPEND=" ruby_targets_ruby31? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby31(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby31(-)] ) ruby_targets_ruby32? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby32(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby32(-)] ) ruby_targets_ruby33? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby33(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby33(-)] ) ruby_targets_ruby31? ( dev-lang/ruby:3.1 ) ruby_targets_ruby32? ( dev-lang/ruby:3.2 ) ruby_targets_ruby33? ( dev-lang/ruby:3.3 ) ruby_targets_ruby31? ( virtual/rubygems[ruby_targets_ruby31(-)] ) ruby_targets_ruby32? ( virtual/rubygems[ruby_targets_ruby32(-)] ) ruby_targets_ruby33? ( virtual/rubygems[ruby_targets_ruby33(-)] ) " declare -x READELF="llvm-readelf" declare REPOSITORY declare REQUIRED_USE=" || ( ruby_targets_ruby31 ruby_targets_ruby32 ruby_targets_ruby33 )" 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 RNAVIEW="/usr/share/rnaview" declare -- RUBY_FAKEGEM_BINDIR="bin" declare -- RUBY_FAKEGEM_BINWRAP="*" declare -- RUBY_FAKEGEM_DOCDIR="doc" declare -- RUBY_FAKEGEM_DOC_SOURCES="lib" declare -a RUBY_FAKEGEM_EXTENSIONS=([0]="src/ruby/ext/grpc/extconf.rb") declare -- RUBY_FAKEGEM_EXTENSION_LIBDIR="lib" declare -- RUBY_FAKEGEM_EXTRAINSTALL="etc src" declare -- RUBY_FAKEGEM_NAME="grpc" declare -- RUBY_FAKEGEM_RECIPE_DOC="rdoc" declare -- RUBY_FAKEGEM_RECIPE_TEST="none" declare -- RUBY_FAKEGEM_SUFFIX="" declare -- RUBY_FAKEGEM_TASK_DOC="rdoc" declare -- RUBY_FAKEGEM_TASK_TEST="test" declare -- RUBY_FAKEGEM_VERSION="1.59.2" declare -x RUBY_TARGETS="ruby31 ruby32 ruby33" declare -- RUBY_TARGETS_PREFERENCE="ruby31 ruby32 ruby33" declare -x RUST_TEST_TASKS="4" declare -x RUST_TEST_THREADS="4" declare -x R_HOME="/usr/lib64/R" declare -x S="/var/tmp/portage/dev-ruby/grpc-1.59.2/work" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_METHOD="any" declare -x SANDBOX_PREDICT="/var/tmp/portage/dev-ruby/grpc-1.59.2/homedir:/dev/crypto:/var/cache/man:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/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-ruby/grpc-1.59.2/homedir/.bash_history" declare -x SANE_BACKENDS="" declare -x SHELL="/bin/bash" declare -x SIEGFRIED_HOME="/usr/share/siegfried" declare -x SLOT="0" declare -x SPARK_HOME="/usr/lib/spark-3" declare -i SRANDOM="3176445157" declare SRC_URI="https://rubygems.org/gems/grpc-1.59.2.gem" declare -x STRINGS="llvm-strings" declare -x STRIP="llvm-strip" declare -x SYMLINK_LIB="no" declare -x TERMINFO="/etc/terminfo" declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1" declare -x USE="abi_x86_64 amd64 elibc_glibc kernel_linux ruby_targets_ruby31 ruby_targets_ruby32 ruby_targets_ruby33" 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 -- USE_RUBY="ruby31 ruby32 ruby33" declare -x UWSGI_PLUGINS="" declare -x VIDEO_CARDS="" declare -x VOICEMAIL_STORAGE="" declare -x XERCESC_NLS_HOME="/usr/share/xerces-c/msg" declare -x XTABLES_ADDONS="" declare -x XZ_OPT="-9 -T4" declare -- _MULTILIB_ECLASS="1" declare -- _RUBY_ATOMS_SAMELIB_RESULT=" ruby_targets_ruby31? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby31(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby31(-)] ) ruby_targets_ruby32? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby32(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby32(-)] ) ruby_targets_ruby33? ( dev-ruby/googleapis-common-protos-types:1[ruby_targets_ruby33(-)] >=dev-ruby/google-protobuf-3.24.4[ruby_targets_ruby33(-)] ) " declare -a _RUBY_GET_ALL_IMPLS=([0]="ruby31" [1]="ruby32" [2]="ruby33") declare -- _RUBY_GET_USE_TARGETS="ruby_targets_ruby31 ruby_targets_ruby32 ruby_targets_ruby33" declare -- _RUBY_IMPLEMENTATIONS_DEPEND="ruby_targets_ruby31? ( dev-lang/ruby:3.1 ) ruby_targets_ruby32? ( dev-lang/ruby:3.2 ) ruby_targets_ruby33? ( dev-lang/ruby:3.3 )" declare -- _RUBY_NG_ECLASS="1" declare -- _RUBY_SET_GLOBALS_USE_RUBY="ruby31 ruby32 ruby33" declare -- _RUBY_UTILS="1" declare -- _TOOLCHAIN_FUNCS_ECLASS="1" declare -x __E_DESTTREE="/usr" declare -x __E_DOCDESTTREE="" declare -x __E_EXEDESTTREE="" declare -x __E_INSDESTTREE="" declare -- __PORTAGE_HOOK_CLANG="/usr/lib/llvm/18/bin/clang-18" declare -- _ruby_implementation="ruby33" declare -x ac_cv_c_undeclared_builtin_options="none needed" declare -- archive="grpc-1.59.2.gem" declare -x enable_year2038="no" declare -- environment="ruby33" declare -x gl_cv_compiler_check_decl_option="-Werror=implicit-function-declaration" declare -x gl_cv_func_getcwd_path_max="yes" declare -- hook_timestamp="2023-11-30T22:24" declare -- hv_args="-b" declare -- my_WORKDIR="/var/tmp/portage/dev-ruby/grpc-1.59.2/work/ruby33" declare -x name="23.0_llvm_systemd-20240520-084001" declare -- old_S="/var/tmp/portage/dev-ruby/grpc-1.59.2/work" declare -- sub_S="grpc-1.59.2" SwitchGCC () { local highest=$(gcc-config --list-profiles --nocolor | cut -f 3 -d ' ' -s | grep -E 'x86_64-(pc|gentoo)-linux-(gnu|musl)-.*[0-9]$' | tail -n 1); if [[ -z $highest ]]; then Mail "${FUNCNAME[0]}: cannot get GCC version"; return; fi; if ! gcc-config --list-profiles --nocolor | grep -q -F "$highest *"; then local current; current=$(gcc -dumpversion); echo "major version change of gcc: $current -> $highest" | tee -a $taskfile.history; gcc-config --nocolor $highest; source_profile; add2backlog "dev-build/libtool"; if grep -q '^LIBTOOL="rdlibtool"' /etc/portage/make.conf; then add2backlog "dev-build/slibtool"; fi; add2backlog "%emerge --unmerge sys-devel/gcc:$(cut -f 1 -d '.' <<<$current)"; fi } declare -fx SwitchGCC __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 } __tinderbox_checkEOL () { if [[ -f /var/tmp/tb/EOL || -f /var/tmp/tb/STOP ]]; then exit 42; fi } __tinderbox_meson () { ( if grep -E -q 'internal compiler error' "${WORKDIR}"/*/config.log &> /dev/null; then echo "${CATEGORY}/${PF}: Found ICE in config.log?!"; fi; if [[ -f "${S}"/meson.build ]] && ! grep -q "dev-build/meson" <<< "${BDEPEND}"; then echo "${CATEGORY}/${PF}: meson.build found but ebuild doesn't use meson?"; fi; if grep -r -q "dejagnu" "${S}" &> /dev/null && ! grep -q "dejagnu" <<< "${BDEPEND}"; then echo "${CATEGORY}/${PF}: Missing dejagnu tests?"; fi; if grep -r -q "test" "${S}/meson_options.txt" &> /dev/null && ! grep -q "test" <<< "${IUSE}"; then echo "${CATEGORY}/${PF}: Missing test option wiring for meson?"; fi; if grep -E -r -q -- "(disable|enable|with(out)?)-(unit)?test(s?)" configure.ac &> /dev/null && ! grep -q "test" <<< "${IUSE}"; then echo "${CATEGORY}/${PF}: Missing test option wiring for autoconf?"; fi; if grep -E -r -q -- "(disable|enable)-valgrind" configure.ac &> /dev/null && ! grep -q "valgrind" <<< "${IUSE}"; then echo "${CATEGORY}/${PF}: Missing valgrind option wiring for autoconf?"; fi; if grep -r -q "valgrind" "${S}/meson_options.txt" &> /dev/null && ! grep -q "valgrind" <<< "${IUSE}"; then echo "${CATEGORY}/${PF}: Missing valgrind option wiring for meson?"; fi; if grep -E -r -q -- "(disable|enable)-fuzz" configure.ac &> /dev/null && ! grep -q "fuzz" <<< "${EBUILD}"; then echo "${CATEGORY}/${PF}: Missing fuzz option wiring for autoconf?"; fi; if grep -r -q "fuzz" "${S}/meson_options.txt" &> /dev/null && ! grep -q "fuzz" <<< "${EBUILD}"; then echo "${CATEGORY}/${PF}: Missing fuzz option wiring for meson?"; fi ) &>> /var/tmp/sam.txt } _clang_fullversion () { local ver="$1"; shift; set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__"); eval echo "${ver}" } _each_ruby_check_install () { local scancmd=scanelf; [[ ${CHOST} == *-darwin ]] && scancmd=scanmacho; local libruby_basename=$(ruby_rbconfig_value 'LIBRUBY_SO'); local libruby_soname=$(basename $(${scancmd} -F "%S#F" -qS "${EPREFIX}/usr/$(get_libdir)/${libruby_basename}") 2>/dev/null); local sitedir=$(ruby_rbconfig_value 'sitedir'); local sitelibdir=$(ruby_rbconfig_value 'sitelibdir'); [[ -z ${libruby_soname} ]] && return 0; ${scancmd} -qnR "${D}${sitelibdir}" "${D}${sitelibdir/site_ruby/gems}" | grep -F -v "${libruby_soname}" | grep -E -v "${RUBY_QA_ALLOWED_LIBS}" > "${T}"/ruby-ng-${_ruby_implementation}-mislink.log; if [[ -s "${T}"/ruby-ng-${_ruby_implementation}-mislink.log ]]; then ewarn "Extensions installed for ${_ruby_implementation} with missing links to ${libruby_soname}"; ewarn $(< "${T}"/ruby-ng-${_ruby_implementation}-mislink.log ); die "Missing links to ${libruby_soname}"; fi } _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}" } _ruby_apply_patches () { case ${EAPI} in 6) if [[ -n ${RUBY_PATCHES[@]} ]]; then eqawarn "RUBY_PATCHES is no longer supported, use PATCHES instead"; fi ;; *) if [[ -n ${RUBY_PATCHES[@]} ]]; then die "RUBY_PATCHES is no longer supported, use PATCHES instead"; fi ;; esac; type all_ruby_prepare &> /dev/null && all_ruby_prepare } _ruby_atoms_samelib () { _RUBY_ATOMS_SAMELIB_RESULT=""; local shopt_save=$(shopt -p -o noglob); set -f; local token; local atoms=" RUBYTARGET? ("; for token in $*; do case "${token}" in "||" | "(" | ")" | *"?") atoms+=" ${token}" ;; *]) atoms+=" ${token%[*}[RUBYTARGET(-),${token/*[}" ;; *) atoms+=" ${token}[RUBYTARGET(-)]" ;; esac; done; atoms+=" ) "; ${shopt_save}; _ruby_set_globals_invalidate_if_stale; local _ruby_implementation; for _ruby_implementation in "${_RUBY_GET_ALL_IMPLS[@]}"; do _RUBY_ATOMS_SAMELIB_RESULT+="${atoms//RUBYTARGET/ruby_targets_${_ruby_implementation}}"; done } _ruby_each_implementation () { _ruby_set_globals_invalidate_if_stale; local invoked=no; for _ruby_implementation in "${_RUBY_GET_ALL_IMPLS[@]}"; do use ruby_targets_${_ruby_implementation} || continue; RUBY=$(ruby_implementation_command ${_ruby_implementation}); if [[ -z ${RUBY} ]]; then eerror "Failed to determine a path for \${RUBY} for USE=ruby_targets_${_ruby_implementation}:"; eerror " ruby_implementation_command returned an empty RUBY for ${_ruby_implementation}"; die "Could not find RUBY for ${_ruby_implementation}. Is $(_ruby_implementation_depend ${_ruby_implementation}) installed?"; fi; invoked=yes; if [[ -n "$1" ]]; then _ruby_invoke_environment ${_ruby_implementation} "$@"; fi; unset RUBY; done; if [[ ${invoked} == "no" ]]; then eerror "You need to select at least one compatible Ruby installation target via RUBY_TARGETS in make.conf."; eerror "Compatible targets for this package are: ${_RUBY_GET_ALL_IMPLS[@]}"; eerror; eerror "See https://www.gentoo.org/proj/en/prog_lang/ruby/index.xml#doc_chap3 for more information."; eerror; die "No compatible Ruby target selected."; fi } _ruby_get_all_impls () { _RUBY_GET_ALL_IMPLS=(); local i found_valid_impl; for i in ${USE_RUBY}; do case ${i} in ruby19 | ruby2[0-7] | ruby30 | jruby) ;; *) found_valid_impl=1; _RUBY_GET_ALL_IMPLS+=(${i}) ;; esac; done; if [[ -z ${found_valid_impl} ]]; then die "No supported implementation in USE_RUBY."; fi } _ruby_get_use_targets () { debug-print-function ${FUNCNAME} "${@}"; _ruby_set_globals_invalidate_if_stale; local impls="${_RUBY_GET_ALL_IMPLS[@]}"; _RUBY_GET_USE_TARGETS="${impls//ruby/ruby_targets_ruby}" } _ruby_implementation_depend () { local rubypn=; local rubyslot=; case $1 in ruby1[89] | ruby2[0-7] | ruby3[0-3]) rubypn="dev-lang/ruby"; rubyslot=":${1:4:1}.${1:5}" ;; ree18) rubypn="dev-lang/ruby-enterprise"; rubyslot=":1.8" ;; jruby) rubypn="dev-java/jruby"; rubyslot="" ;; rbx) rubypn="dev-lang/rubinius"; rubyslot="" ;; *) die "$1: unknown Ruby implementation" ;; esac; echo "$2${rubypn}$3${rubyslot}" } _ruby_implementations_depend () { _ruby_set_globals_invalidate_if_stale; local depend _ruby_implementation; for _ruby_implementation in "${_RUBY_GET_ALL_IMPLS[@]}"; do depend="${depend}${depend+ }ruby_targets_${_ruby_implementation}? ( $(ruby_implementation_depend $_ruby_implementation) )"; done; _RUBY_IMPLEMENTATIONS_DEPEND="${depend}" } _ruby_invoke_environment () { old_S=${S}; if [[ -z ${RUBY_S} ]]; then sub_S=${P}; else sub_S=${RUBY_S}; fi; if [[ "${sub_S}" = *"*"* ]]; then pushd "${WORKDIR}"/all &> /dev/null || die; sub_S=(${sub_S}); if [[ ${#sub_S[@]} -gt 1 ]]; then die "sub_S did expand to multiple paths: ${sub_S[*]}"; fi; popd &> /dev/null || die; fi; environment=$1; shift; my_WORKDIR="${WORKDIR}"/${environment}; S="${my_WORKDIR}"/"${sub_S}"; if [[ -d "${S}" ]]; then pushd "$S" &> /dev/null || die; else if [[ -d "${my_WORKDIR}" ]]; then pushd "${my_WORKDIR}" &> /dev/null || die; else pushd "${WORKDIR}" &> /dev/null || die; fi; fi; einfo "Running ${_PHASE:-${EBUILD_PHASE}} phase for $environment"; "$@"; popd &> /dev/null || die; S=${old_S} } _ruby_set_globals () { _RUBY_SET_GLOBALS_USE_RUBY="${USE_RUBY}"; _ruby_get_all_impls; _ruby_get_use_targets; _ruby_implementations_depend } _ruby_set_globals_invalidate_if_stale () { if [[ ${_RUBY_SET_GLOBALS_USE_RUBY} != ${USE_RUBY} && -z ${_RUBY_SET_GLOBALS_INVALIDATING} ]]; then local _RUBY_SET_GLOBALS_INVALIDATING=1; _ruby_set_globals; fi } _ruby_source_copy () { cp -prlP all ${_ruby_implementation} || die "Unable to copy ${_ruby_implementation} environment" } _ruby_wrap_conditions () { local conditions="$1"; local atoms="$2"; for condition in ${conditions}; do atoms="${condition}? ( ${atoms} )"; done; echo "${atoms}" } _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 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} } add2backlog () { local bl=/var/tmp/tb/backlog.1st; if [[ $1 == '@preserved-rebuild' ]]; then sed -i -e "/@preserved-rebuild/d" $bl; sed -i -e "1 i\@preserved-rebuild" $bl; else if [[ $1 =~ ^@ || $1 =~ ^% ]]; then if [[ "$(tail -n 1 $bl)" != "$1" ]]; then echo "$1" >> $bl; fi; else if ! grep -q "^${1}$" $bl; then echo "$1" >> $bl; fi; fi; fi } declare -fx add2backlog all_fakegem_compile () { debug-print-function ${FUNCNAME} "${@}"; if [[ -n ${RUBY_FAKEGEM_DOCDIR} ]] && use doc; then case ${RUBY_FAKEGEM_RECIPE_DOC} in rake) rake ${RUBY_FAKEGEM_TASK_DOC} || die "failed to (re)build documentation" ;; rdoc) rdoc ${RUBY_FAKEGEM_DOC_SOURCES} || die "failed to (re)build documentation"; rm -f doc/js/*.gz || die "failed to remove duplicated compressed javascript files" ;; yard) yard doc ${RUBY_FAKEGEM_DOC_SOURCES} || die "failed to (re)build documentation" ;; esac; fi } all_fakegem_install () { debug-print-function ${FUNCNAME} "${@}"; if [[ -n ${RUBY_FAKEGEM_DOCDIR} ]] && use doc; then for dir in ${RUBY_FAKEGEM_DOCDIR}; do [[ -d ${dir} ]] || continue; pushd ${dir} &> /dev/null || die; dodoc -r * || die "failed to install documentation"; popd &> /dev/null || die; done; fi; if [[ -n ${RUBY_FAKEGEM_EXTRADOC} ]]; then dodoc ${RUBY_FAKEGEM_EXTRADOC} || die "failed to install further documentation"; fi; if [[ -n ${RUBY_FAKEGEM_BINWRAP} ]]; then local bindir=$(find "${D}" -type d -path "*/gems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}/${RUBY_FAKEGEM_BINDIR}" -print -quit); if [[ -d "${bindir}" ]]; then pushd "${bindir}" &> /dev/null || die; for binary in ${RUBY_FAKEGEM_BINWRAP}; do ruby_fakegem_binwrapper "${binary}"; done; popd &> /dev/null || die; fi; fi } all_ruby_compile () { debug-print-function ${FUNCNAME} "${@}"; all_fakegem_compile } all_ruby_install () { debug-print-function ${FUNCNAME} "${@}"; all_fakegem_install } all_ruby_unpack () { debug-print-function ${FUNCNAME} "${@}"; for archive in ${A}; do case "${archive}" in *.gem) [[ -d "${S}" ]] && die "Unable to unpack ${archive}, ${S} exists"; einfo "Unpacking .gem file..."; tar -mxf "${DISTDIR}"/${archive} || die; einfo "Uncompressing metadata"; gunzip metadata.gz || die; mkdir "${S}"; pushd "${S}" &> /dev/null || die; einfo "Unpacking data.tar.gz"; tar -mxf "${my_WORKDIR}"/data.tar.gz || die; popd &> /dev/null || die ;; *.patch.bz2) einfo "Keeping ${archive} as-is" ;; *) unpack ${archive} ;; esac; done } 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' "$@" } doruby () { debug-print-function ${FUNCNAME} "${@}"; [[ -z ${RUBY} ]] && die "\$RUBY is not set"; ( sitelibdir=$(ruby_rbconfig_value 'sitelibdir'); insinto "${sitelibdir#${EPREFIX}}"; insopts -m 0644; doins "$@" ) || die "failed to install $@" } each_fakegem_compile () { debug-print-function ${FUNCNAME} "${@}"; for extension in "${RUBY_FAKEGEM_EXTENSIONS[@]}"; do emake V=1 -C ${extension%/*}; mkdir -p "${RUBY_FAKEGEM_EXTENSION_LIBDIR%/}"; cp "${extension%/*}"/*$(get_modname) "${RUBY_FAKEGEM_EXTENSION_LIBDIR%/}/" || die "Copy of extension into ${RUBY_FAKEGEM_EXTENSION_LIBDIR} failed"; done } each_fakegem_configure () { debug-print-function ${FUNCNAME} "${@}"; tc-export PKG_CONFIG; for extension in "${RUBY_FAKEGEM_EXTENSIONS[@]}"; do CC=$(tc-getCC) ${RUBY} --disable=did_you_mean -C ${extension%/*} ${extension##*/} --with-cflags="${CFLAGS}" --with-ldflags="${LDFLAGS}" ${RUBY_FAKEGEM_EXTENSION_OPTIONS} || die; done } each_fakegem_install () { debug-print-function ${FUNCNAME} "${@}"; ruby_fakegem_install_gemspec; local _gemlibdirs="${RUBY_FAKEGEM_EXTRAINSTALL}"; for directory in "${RUBY_FAKEGEM_BINDIR}" lib; do [[ -d ${directory} ]] && _gemlibdirs="${_gemlibdirs} ${directory}"; done; [[ -n ${_gemlibdirs} ]] && ruby_fakegem_doins -r ${_gemlibdirs}; if [[ -n ${RUBY_FAKEGEM_EXTENSIONS} ]] && [ ${#RUBY_FAKEGEM_EXTENSIONS[@]} -ge 0 ]; then einfo "installing extensions"; for extension in ${RUBY_FAKEGEM_EXTENSIONS[@]}; do emake V=1 sitearchdir="${ED}$(ruby_fakegem_extensionsdir)" sitelibdir="${ED}$(ruby_rbconfig_value 'sitelibdir')" -C ${extension%/*} install; done; ruby_fakegem_extensions_installed; fi } each_fakegem_test () { debug-print-function ${FUNCNAME} "${@}"; case ${RUBY_FAKEGEM_RECIPE_TEST} in rake) MT_NO_PLUGINS=true ${RUBY} --disable=did_you_mean -S rake ${RUBY_FAKEGEM_TASK_TEST} || die -n "tests failed" ;; rspec) RSPEC_VERSION=2 ruby-ng_rspec ;; rspec3) RSPEC_VERSION=3 ruby-ng_rspec ;; cucumber) ruby-ng_cucumber ;; sus) ruby-ng_sus ;; none) ewarn "each_fakegem_test called, but \${RUBY_FAKEGEM_RECIPE_TEST} is 'none'" ;; esac } each_ruby_compile () { debug-print-function ${FUNCNAME} "${@}"; each_fakegem_compile } each_ruby_configure () { debug-print-function ${FUNCNAME} "${@}"; each_fakegem_configure } each_ruby_install () { rm -rf src/core src/ruby/spec src/ruby/ext/grpc/{libs,objs} || die; each_fakegem_install } 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/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_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 " 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} ]] } 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 $# } pkg_nofetch () { default } pkg_setup () { ruby-ng_pkg_setup "$@" } post_src_install () { if [[ ${PORTAGE_USE_CLANG_HOOK} == 1 && -f "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}/clang16-broken ]]; then if grep -q "error:.*C99" "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}/clang.diff; then eqawarn "Clang 16 testing: Found possible issues in configure!"; eqawarn "Clang 16 testing: Please check "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}/clang.diff"; fi; fi; __tinderbox_meson } pre_src_compile () { if [[ -f "${T}"/clang16-errors.log ]]; then rm -rf "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}; mkdir -p "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}; cp -rv "${T}"/clang16-{errors,safe}.log "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}; if diff -ruN "${T}"/clang16-{safe,errors}.log > "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}/clang.diff; then rm "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}/clang.diff; fi; [[ -f "${T}"/clang16-broken ]] && touch "${EROOT}"/var/tmp/clang/${CATEGORY}/${PF}/clang16-broken; fi; export PORTAGE_CLANG_HOOK_USE_REAL_COMPILER=1 } pre_src_configure () { if [[ ${PORTAGE_USE_CLANG_HOOK} == 1 ]]; then if [[ -n ${CC} && ${CC} != *clang* && -z ${PORTAGE_USE_CLANG_HOOK_GCC} ]]; then return; fi; if ! type -P ansifilter &> /dev/null; then return; fi; ewarn "Modern C testing: this build is using a /etc/portage/bashrc hook ($hook_timestamp)!"; ewarn "Modern C testing: see https://wiki.gentoo.org/wiki/Modern_C_porting for more info."; export ac_cv_c_undeclared_builtin_options="none needed"; export gl_cv_compiler_check_decl_option="-Werror=implicit-function-declaration"; if [[ ${CHOST} == *musl* ]]; then if has_version dev-libs/libbsd; then export ac_cv_func___fpurge=yes; export ac_cv_func_fpurge=yes; export ac_cv_have_decl_fpurge=no; export gl_cv_func_fpurge_works=no; fi; export ac_cv_header_sys_types_h_makedev=no; export gl_cv_minmax_in_limits_h=no; else export ac_cv_have_decl_strerror_r="yes"; fi; has waf-utils ${INHERITED} && return; has qmake-utils ${INHERITED} && return; has qt5-build ${INHERITED} && return; if grep -q "x11-misc/imake" <<< "${BDEPEND}"; then return; fi; __PORTAGE_HOOK_CLANG=$(type -P "${__PORTAGE_HOOK_CLANG}"); mkdir "${T}"/clang-wrappers; cat <<-EOF > "${T}"/clang-wrappers/clang #!/usr/bin/env bash hook_clang=${__PORTAGE_HOOK_CLANG} real_compiler=${__PORTAGE_HOOK_CLANG} if [[ -n \${PORTAGE_USE_CLANG_HOOK_GCC} ]] ; then if [[ -n \${CC} && \${CC##*/} == *clang* ]] ; then :; else real_compiler="${BROOT:-/}"/usr/bin/${CHOST}-gcc fi fi if [[ \$0 == *++ ]]; then real_compiler=\${real_compiler/clang/clang++} real_compiler=\${real_compiler/gcc/g++} hook_clang=\${hook_clang/clang/clang++} hook_clang=\${hook_clang/gcc/g++} fi if [[ \${PORTAGE_CLANG_HOOK_USE_REAL_COMPILER} -gt 1 ]]; then # clang's self recursing... try your best! case "\${real_compiler}" in *++*) real_compiler="/usr/bin/\${CHOST+\${CHOST}-}g++" ;; *) real_compiler="/usr/bin/\${CHOST+\${CHOST}-}gcc" ;; esac real_compiler="\${real_compiler/clang/gcc}" fi # Safety net against recursive calls PORTAGE_orig_USE_REAL_COMP="\${PORTAGE_CLANG_HOOK_USE_REAL_COMPILER}" export PORTAGE_CLANG_HOOK_USE_REAL_COMPILER=\$((PORTAGE_CLANG_HOOK_USE_REAL_COMPILER+1)) if [[ \${PORTAGE_orig_USE_REAL_COMP} ]]; then exec \${real_compiler} "\$@" fi export CFLAGS="${CFLAGS/-fdiagnostics-color=always}" export CFLAGS="${CFLAGS/-fdiagnostics-urls=never}" # - Need > /dev/null for sys-libs/musl # - No LTO because of the noise it generates in diffs (temps) cl1() { \${hook_clang} -fno-lto -Wno-unused-command-line-argument -Wno-error=implicit-function-declaration -Wno-error=implicit-int -Wno-error=int-conversion -Wno-error=incompatible-function-pointer-types -Wno-error=incompatible-pointer-types -Wno-error=return-type ${CFLAGS} \$@ 2>&1 -fdiagnostics-color=never | ansifilter | sed -e "s:14.0.6:14.ignoreme:g" -e "s:15.0.0:14.ignoreme:g" -e "s:clang-\(14\|15\|16\|17\|18\):clang-ignoreme:g" -e 's:clang version \([0-9]\+\)\.[0-9]\.[0-9]:clang version ignoreme:' -e "s:/usr/lib/llvm/\(14\|15\|16\|17\|18\)/:/usr/lib/llvm/ignoreme/:g" -e "s:conftest-.*\.o:conftest.o:g" -e "s_conftest\.c\:[0-9]\+\:[0-9]\+_ignoreme_g" -e "s:garbage2:ignoreme:" -e "s:garbage:ignoreme:" -e "/ac_nonexistent.h/d" -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: no input files/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: unsupported option/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: unknown argument/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: no such file or directory/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: linker command failed/d' -e '/[0-9]\+ \(warning\|error\) generated/d' | tee -a "${T}"/clang16-safe.log > /dev/null if ! [[ \${PIPESTATUS[0]} -eq 0 ]] ; then touch "${T}"/clang16-safe-failed fi } # TODO: No -Werror=strict-prototypes here for now as AC_PROG_LEX, AC_CHECK_FUNCS rely on it # also, I think Clang 15.0.1 (which reverts the other bits) keeps that in anyway. cl2() { \${hook_clang} -fno-lto -Wno-unused-command-line-argument -Werror=implicit-function-declaration -Werror=implicit-int -Werror=int-conversion -Werror=incompatible-function-pointer-types -Werror=incompatible-pointer-types -Werror=return-type ${CFLAGS} \$@ 2>&1 -fdiagnostics-color=never | ansifilter | sed -e "s:14.0.6:14.ignoreme:g" -e "s:15.0.0:14.ignoreme:g" -e "s:clang-\(14\|15\|16\|17\|18\):clang-ignoreme:g" -e 's:clang version \([0-9]\+\)\.[0-9]\.[0-9]:clang version ignoreme:' -e "s:/usr/lib/llvm/\(14\|15\|16\|17\|18\)/:/usr/lib/llvm/ignoreme/:g" -e "s:15:14:g" -e "s:conftest-.*\.o:conftest.o:g" -e "s_conftest\.c\:[0-9]\+\:[0-9]\+_ignoreme_g" -e "s:garbage2:ignoreme:" -e "s:garbage:ignoreme:" -e "/ac_nonexistent.h/d" -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: no input files/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: unsupported option/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: unknown argument/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: no such file or directory/d' -e '/clang-\(14\|15\|16\|17\|18\|ignoreme\): error: linker command failed/d' -e '/[0-9]\+ \(warning\|error\) generated/d' | tee -a "${T}"/clang16-errors.log > /dev/null if ! [[ \${PIPESTATUS[0]} -eq 0 ]] ; then touch "${T}"/clang16-errors-failed fi } # Safety net against recursive calls export PORTAGE_CLANG_HOOK_USE_REAL_COMPILER=1 # Because clang can invoke GCC export PORTAGE_USE_CLANG_HOOK_GCC=1 # - Just run it again as it's easier for anything which wants to parse stdout/stderr, # and we're not concerned about performance for this experiment anyway. # - We have to do the tee & pipe dance to not greedily consume stdin: bug 870985. # - Timeout as a safety net because we don't ever want to make a build hang. Occurs # with waf sometimes (being investigated), but we should keep the timeout after that anyway. timeout --preserve-status -s PIPE 10 tee -p >(cl1 "\$@" -o "${T}"/garbage.\$\$) >(cl2 "\$@" -o "${T}"/garbage2.\$\$) | \${real_compiler} "\$@" ret="\${PIPESTATUS[1]}" # If at least one of them succeeded, then complain if *only* one of them did. if [[ -f "${T}"/clang16-safe-failed || -f "${T}"/clang16-errors-failed ]] ; then if ! [[ -f "${T}"/clang16-safe-failed && -f "${T}"/clang16-errors-failed ]] ; then touch "${T}"/clang16-broken fi fi rm -f "${T}"/clang16-safe-failed "${T}"/clang16-errors-failed exit \${ret} EOF chmod +x "${T}"/clang-wrappers/clang; if in_iuse clang; then :; else for alias in ${CHOST}-gcc gcc ${CHOST}-clang ${CHOST}-g++ g++ ${CHOST}-clang++; do ln -s "${T}"/clang-wrappers/clang "${T}"/clang-wrappers/${alias} || exit 1; chmod +x "${T}"/clang-wrappers/${alias}; done; export CFLAGS="${CFLAGS} -Werror=implicit-function-declaration -Werror=implicit-int"; export PATH="${T}/clang-wrappers:${PATH}"; fi; fi } pre_src_prepare () { if [[ -n ${CC} && ${CC} != *clang* ]]; then return; fi; case ${EAPI} in [0123456]) hv_args="--host-root" ;; *) hv_args="-b" ;; esac; local ver; for ver in 15 16 17 18; do has_version ${hv_args} sys-devel/clang:${ver} && __PORTAGE_HOOK_CLANG=clang-${ver}; done; __PORTAGE_HOOK_CLANG=$(type -P "${__PORTAGE_HOOK_CLANG}"); if ! type -P ansifilter &> /dev/null; then return; fi; if [[ -z ${__PORTAGE_HOOK_CLANG} ]] || ! type -P ${__PORTAGE_HOOK_CLANG} &> /dev/null; then export CC=gcc; export CXX=g++; return; fi } ruby-ng_cucumber () { debug-print-function ${FUNCNAME} "${@}"; if [[ "${DEPEND}${BDEPEND}" != *"dev-util/cucumber"* ]]; then ewarn "Missing test dependency dev-util/cucumber"; fi; local cucumber_params=; case ${NOCOLOR} in 1 | yes | true) cucumber_params+=" --no-color" ;; *) cucumber_params+=" --color" ;; esac; case ${TEST_VERBOSE} in 1 | yes | true) cucumber_params+=" --format pretty" ;; *) cucumber_params+=" --format progress" ;; esac; CUCUMBER_PUBLISH_QUIET=true ${RUBY} -S cucumber ${cucumber_params} "$@" || die -n "cucumber failed" } ruby-ng_pkg_setup () { debug-print-function ${FUNCNAME} "${@}"; _ruby_each_implementation } ruby-ng_rspec () { debug-print-function ${FUNCNAME} "${@}"; local version=${RSPEC_VERSION-2}; local files="$@"; if [[ $# -eq 0 ]]; then files="spec"; fi; if [[ "${DEPEND}${BDEPEND}" != *"dev-ruby/rspec"* ]]; then eqawarn "Missing test dependency dev-ruby/rspec"; fi; local rspec_params=; case ${NOCOLOR} in 1 | yes | true) rspec_params+=" --no-color" ;; *) rspec_params+=" --color" ;; esac; case ${TEST_VERBOSE} in 1 | yes | true) rspec_params+=" --format documentation" ;; *) rspec_params+=" --format progress" ;; esac; ${RUBY} -S rspec-${version} ${rspec_params} ${files} || die -n "rspec failed" } ruby-ng_src_compile () { debug-print-function ${FUNCNAME} "${@}"; if type each_ruby_compile &> /dev/null; then _ruby_each_implementation each_ruby_compile; fi; type all_ruby_compile &> /dev/null && _ruby_invoke_environment all all_ruby_compile } ruby-ng_src_configure () { debug-print-function ${FUNCNAME} "${@}"; if type each_ruby_configure &> /dev/null; then _ruby_each_implementation each_ruby_configure; fi; type all_ruby_configure &> /dev/null && _ruby_invoke_environment all all_ruby_configure } ruby-ng_src_install () { debug-print-function ${FUNCNAME} "${@}"; if type each_ruby_install &> /dev/null; then _ruby_each_implementation each_ruby_install; fi; type all_ruby_install &> /dev/null && _ruby_invoke_environment all all_ruby_install; _PHASE="check install" _ruby_each_implementation _each_ruby_check_install } ruby-ng_src_prepare () { debug-print-function ${FUNCNAME} "${@}"; find . -name '._*' -delete; _ruby_invoke_environment all default; _ruby_invoke_environment all _ruby_apply_patches; _PHASE="source copy" _ruby_each_implementation _ruby_source_copy; if type each_ruby_prepare &> /dev/null; then _ruby_each_implementation each_ruby_prepare; fi } ruby-ng_src_test () { debug-print-function ${FUNCNAME} "${@}"; if type each_ruby_test &> /dev/null; then _ruby_each_implementation each_ruby_test; fi; type all_ruby_test &> /dev/null && _ruby_invoke_environment all all_ruby_test } ruby-ng_src_unpack () { debug-print-function ${FUNCNAME} "${@}"; mkdir "${WORKDIR}"/all; pushd "${WORKDIR}"/all &> /dev/null || die; if type all_ruby_unpack &> /dev/null; then _ruby_invoke_environment all all_ruby_unpack; else [[ -n ${A} ]] && unpack ${A}; fi; popd &> /dev/null || die } ruby-ng_sus () { debug-print-function ${FUNCNAME} "${@}"; if [[ "${DEPEND}${BDEPEND}" != *"dev-ruby/sus"* ]]; then ewarn "Missing test dependency dev-ruby/sus"; fi; local sus_params=; case ${TEST_VERBOSE} in 1 | yes | true) sus_params+=" --verbose" ;; *) ;; esac; ${RUBY} -S sus-parallel ${sus_params} "$@" || die -n "sus failed" } ruby-ng_testrb-2 () { debug-print-function ${FUNCNAME} "${@}"; if [[ "${DEPEND}${BDEPEND}" != *"dev-ruby/test-unit"* ]]; then ewarn "Missing test dependency dev-ruby/test-unit"; fi; local testrb_params=; case ${NOCOLOR} in 1 | yes | true) testrb_params+=" --no-use-color" ;; *) testrb_params+=" --use-color=auto" ;; esac; case ${TEST_VERBOSE} in 1 | yes | true) testrb_params+=" --verbose=verbose" ;; *) testrb_params+=" --verbose=normal" ;; esac; ${RUBY} -S testrb-2 ${testrb_params} "$@" || die "testrb-2 failed" } ruby_add_bdepend () { debug-print-function ${FUNCNAME} "${@}"; case $# in 1) ;; 2) case ${EAPI} in 6) [[ "${GENTOO_DEV}" == "yes" ]] && eqawarn "You can now use the usual syntax in ruby_add_bdepend for $CATEGORY/$PF"; ruby_add_bdepend "$(_ruby_wrap_conditions "$1" "$2")"; return ;; *) die "Use the usual depend syntax with a single argument in ruby_add_bdepend" ;; esac ;; *) die "bad number of arguments to $0" ;; esac; _ruby_set_globals_invalidate_if_stale; _ruby_atoms_samelib "$1"; case ${EAPI} in 6) DEPEND+=" ${_RUBY_ATOMS_SAMELIB_RESULT}" ;; *) BDEPEND+=" ${_RUBY_ATOMS_SAMELIB_RESULT}" ;; esac } ruby_add_depend () { debug-print-function ${FUNCNAME} "${@}"; case ${EAPI} in 6) die "only available in EAPI 7 and newer" ;; *) ;; esac; case $# in 1) ;; *) die "bad number of arguments to $0" ;; esac; _ruby_set_globals_invalidate_if_stale; _ruby_atoms_samelib "$1"; DEPEND+=" ${_RUBY_ATOMS_SAMELIB_RESULT}" } ruby_add_rdepend () { debug-print-function ${FUNCNAME} "${@}"; case $# in 1) ;; 2) case ${EAPI} in 6) [[ "${GENTOO_DEV}" == "yes" ]] && eqawarn "You can now use the usual syntax in ruby_add_rdepend for $CATEGORY/$PF"; ruby_add_rdepend "$(_ruby_wrap_conditions "$1" "$2")"; return ;; *) die "Use the usual depend syntax with a single argument in ruby_add_rdepend" ;; esac ;; *) die "bad number of arguments to $0" ;; esac; _ruby_set_globals_invalidate_if_stale; _ruby_atoms_samelib "$1"; RDEPEND+=" ${_RUBY_ATOMS_SAMELIB_RESULT}"; case ${EAPI} in 6) DEPEND+=" test? ( ${_RUBY_ATOMS_SAMELIB_RESULT} )" ;; *) BDEPEND+=" test? ( ${_RUBY_ATOMS_SAMELIB_RESULT} )" ;; esac; if ! has test "$IUSE"; then IUSE+=" test"; RESTRICT+=" !test? ( test )"; fi } ruby_fakegem_binwrapper () { debug-print-function ${FUNCNAME} "${@}"; ( local gembinary=$1; local newbinary=${2:-/usr/bin/$gembinary}; local content=$3; local relativegembinary=${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}/${RUBY_FAKEGEM_BINDIR}/${gembinary}; local binpath=$(dirname $newbinary); [[ ${binpath} = . ]] && binpath=/usr/bin; local rubycmd=; for implementation in "${_RUBY_GET_ALL_IMPLS[@]}"; do use ruby_targets_${implementation} || continue; if [[ -z ${rubycmd} ]]; then rubycmd="$(ruby_implementation_command ${implementation})"; else rubycmd="${EPREFIX}/usr/bin/env ruby"; break; fi; done; cat - > "${T}"/gembin-wrapper-${gembinary} < $2 } ruby_fakegem_genspec () { debug-print-function ${FUNCNAME} "${@}"; case ${EAPI} in 5 | 6) ;; *) eqawarn "Generating generic fallback gemspec *without* dependencies"; eqawarn "This will only work when there are no runtime dependencies"; eqawarn "Set RUBY_FAKEGEM_GEMSPEC to generate a proper specifications file" ;; esac; local required_paths="'lib'"; for path in ${RUBY_FAKEGEM_REQUIRE_PATHS}; do required_paths="${required_paths}, '${path}'"; done; local quoted_description=${DESCRIPTION//\"/\\\"}; cat - > $1 < 'UTF-8').read).to_ruby" > $2 } ruby_fakegem_newins () { debug-print-function ${FUNCNAME} "${@}"; ( local newdirname=/$(dirname "$2"); [[ ${newdirname} == "/." ]] && newdirname=; local newbasename=$(basename "$2"); insinto $(ruby_fakegem_gemsdir)/gems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}${newdirname}; newins "$1" ${newbasename} ) || die "failed $0 $@" } ruby_get_hdrdir () { debug-print-function ${FUNCNAME} "${@}"; local rubyhdrdir=$(ruby_rbconfig_value 'rubyhdrdir'); if [[ "${rubyhdrdir}" = "nil" ]]; then rubyhdrdir=$(ruby_rbconfig_value 'archdir'); fi; echo "${rubyhdrdir}" } ruby_get_implementation () { debug-print-function ${FUNCNAME} "${@}"; local ruby=${RUBY:-$(type -p ruby 2>/dev/null)}; case $(${ruby} --version) in *rubinius*) echo "rbx" ;; *) echo "mri" ;; esac } ruby_get_libruby () { debug-print-function ${FUNCNAME} "${@}"; ${RUBY} -rrbconfig -e 'puts File.join(RbConfig::CONFIG["libdir"], RbConfig::CONFIG["LIBRUBY"])' } ruby_get_use_implementations () { debug-print-function ${FUNCNAME} "${@}"; _ruby_set_globals_invalidate_if_stale; local i implementation; for implementation in "${_RUBY_GET_ALL_IMPLS[@]}"; do use ruby_targets_${implementation} && i+=" ${implementation}"; done; echo $i } ruby_get_use_targets () { debug-print-function ${FUNCNAME} "${@}"; _ruby_set_globals_invalidate_if_stale; _ruby_get_use_targets; echo "${_RUBY_GET_USE_TARGETS}" } ruby_get_version () { debug-print-function ${FUNCNAME} "${@}"; local ruby=${RUBY:-$(type -p ruby 2>/dev/null)}; echo $(${ruby} -e 'puts RUBY_VERSION') } ruby_implementation_command () { debug-print-function ${FUNCNAME} "${@}"; local _ruby_name=$1; echo $(type -p ${_ruby_name} 2>/dev/null) } ruby_implementation_depend () { debug-print-function ${FUNCNAME} "${@}"; _ruby_implementation_depend $1 } ruby_implementations_depend () { debug-print-function ${FUNCNAME} "${@}"; _ruby_set_globals_invalidate_if_stale; _ruby_implementations_depend; echo "${_RUBY_IMPLEMENTATIONS_DEPEND}" } ruby_rbconfig_value () { debug-print-function ${FUNCNAME} "${@}"; echo $(${RUBY} --disable=did_you_mean -rrbconfig -e "puts RbConfig::CONFIG['$1']" || die "Could not read ruby configuration for '${1}'") } ruby_samelib () { debug-print-function ${FUNCNAME} "${@}"; _ruby_set_globals_invalidate_if_stale; local res=; for _ruby_implementation in "${_RUBY_GET_ALL_IMPLS[@]}"; do has -${_ruby_implementation} $@ || res="${res}ruby_targets_${_ruby_implementation}(-)?,"; done; echo "[${res%,}]" } source_profile () { set +u; source /etc/profile; set -u } declare -fx source_profile src_compile () { ruby-ng_src_compile "$@" } src_configure () { ruby-ng_src_configure "$@" } src_install () { ruby-ng_src_install "$@" } src_prepare () { ruby-ng_src_prepare "$@" } src_test () { ruby-ng_src_test "$@" } src_unpack () { ruby-ng_src_unpack "$@" } syncRepo () { cd /var/db/repos/gentoo; local synclog=/var/tmp/tb/sync.log; local curr_time=$EPOCHSECONDS; if ! emaint sync --auto &> $synclog; then if grep -q -e 'git fetch error' -e ': Failed to connect to ' -e ': SSL connection timeout' -e ': Connection timed out' -e 'The requested URL returned error:' $synclog; then return 0; else if ! emaint merges --fix &>> $synclog; then ReachedEOL "broken repo, cannot be fixed" $synclog; else if ! emaint sync --auto &>> $synclog; then ReachedEOL "broken sync of repo" $synclog; fi; fi; fi; fi; if grep -q -F '* An update to portage is available.' $synclog; then add2backlog "sys-apps/portage"; fi; if ! grep -B 1 '=== Sync completed for gentoo' $synclog | grep -q 'Already up to date.'; then git diff --diff-filter="ACM" --name-only "@{ $((EPOCHSECONDS - last_sync + 2 * 3600)) second ago }..@{ 2 hour ago }" 2> /dev/null | grep -F -e '/files/' -e '.ebuild' -e 'Manifest' | cut -f 1-2 -d '/' -s | grep -v -f /mnt/tb/data/IGNORE_PACKAGES | sort -u > /tmp/syncRepo.upd; if [[ -s /tmp/syncRepo.upd ]]; then sort -u /tmp/syncRepo.upd /var/tmp/tb/backlog.upd | shuf > /tmp/backlog.upd; cp /tmp/backlog.upd /var/tmp/tb/backlog.upd; fi; fi; last_sync=$curr_time; cd - > /dev/null } declare -fx syncRepo 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 #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 }