declare -x ABI="amd64" declare -x ABI_MIPS="" declare -x ABI_PPC="" declare -x ABI_S390="" declare -x ABI_X86="64" declare -x ADAFLAGS="" declare -x ADA_TARGET="" declare -x ALACRITTY_LOG="/tmp/Alacritty-3497.log" declare -- ALL_LOCALES=" aa af af_ZA am am_ET ang ar ar_AE ar_BH ar_DZ ar_EG ar_IN ar_IQ ar_JO ar_KW ar_LB ar_LY ar_MA ar_OM ar_QA ar_SA ar_SD ar_SY ar_TN ar_YE as ast az az_AZ az_IR be be@latin be_BY bg bg_BG bn bn_IN br br_FR bs bs_BA byn ca ca@valencia ca_ES ca_ES@euro ca_ES@valencia chs cht crh cs cs_CZ cy cy_GB cz da da_DK de de_AT de_AT@euro de_BE de_BE@euro de_CH de_DE de_DE.UTF-8 de_DE@euro de_LU de_LU@euro dk dv dz el el_GR el_GR.UTF-8 el_GR@euro en en@IPA en@boldquot en@quot en@shaw en_AU en_BW en_CA en_DK en_GB en_GB.UTF-8 en_HK en_IE en_IE@euro en_IN en_NZ en_PH en_RN en_SG en_UK en_US en_US.UTF-8 en_ZA en_ZW eo eo_EO es es_AR es_BO es_CL es_CO es_CR es_DO es_EC es_ES es_ES.UTF-8 es_ES@euro es_GT es_HN es_MX es_NI es_PA es_PE es_PR es_PY es_SV es_US es_UY es_VE et et_EE eu eu_ES eu_ES@euro fa fa_IR fa_IR.UTF-8 fi fi_FI fi_FI@euro fo fo_FO fr fr_BE fr_BE@euro fr_CA fr_CH fr_FR fr_FR.UTF-8 fr_FR@euro fr_LU fr_LU@euro fur fy ga ga_IE ga_IE@euro gd gd_GB gez gl gl_ES gl_ES@euro gr gu gv gv_GB haw he he_IL hi hi_IN hi_IN.UTF-8 hr hr_HR hu hu_HU hy hy_AM ia id id_ID is is_IS it it_CH it_IT it_IT@euro iu iw iw_IL ja ja_JP ja_JP.EUC ja_JP.EUC-JP ja_JP.UTF-8 ja_JP.eucJP ka ka_GE kk kl kl_GL km km_KH kn ko ko_KR ko_KR.EUC-KR ko_KR.UTF-8 kok ku kw kw_GB ky la lg li lo lt lt_LT lv lv_LV mai mg mhr mi mi_NZ mk mk_MK ml mn mr mr_IN mr_IN.UTF-8 ms ms_MY mt mt_MT my my_MM nb nb_NO nds ne nl nl_BE nl_BE@euro nl_NL nl_NL@euro nn nn_NO no no_NO nso nyc oc oc_FR om or pa pl pl_PL ps pt pt_BR pt_PT pt_PT@euro rm ro ro_RO ru ru_RU ru_RU.KOI8-R ru_RU.UTF-8 ru_UA rw sa si sid sk sk_SK sl sl_SI so sp sq sq_AL sr sr@Latn sr@ije sr@latin sr_RS sr_YU sr_YU@cyrillic sv sv_FI sv_FI@euro sv_SE sw syr ta ta_IN te te_IN tg tg_TJ th th_TH ti ti_ER ti_ET tig tk tl tl_PH tr tr_TR tt tt_RU ug uk uk_UA ur ur_PK uz uz@Latn uz_UZ ve vi vi_VN vi_VN.UTF-8 wa wal wo xh yi yi_US zh zh_CN zh_CN.GB18030 zh_CN.GB2312 zh_CN.GBK zh_CN.UTF-8 zh_HK zh_HK.UTF-8 zh_SG zh_TW zh_TW.Big5 zh_TW.EUC-TW zh_TW.UTF-8 zu " declare -x ALSA_CARDS="" declare -x APACHE2_MODULES="" declare -x APACHE2_MPMS="" declare -x ARCH="amd64" declare -x ASFLAGS="" declare -- BASHRCD_CCACHE_BASEDIR="/var/tmp/portage" declare -- BASHRCD_CCACHE_COMPRESS="true" declare -- BASHRCD_CCACHE_DIR="/var/cache/ccache" declare -- BASHRCD_CCACHE_NOHASHDIR="true" declare BDEPEND="dev-lang/perl " declare -x BOOTSTRAP_USE="unicode internal-glib pkg-config split-usr xml python_targets_python3_9 multilib" declare -x BUILD_OPT="1" declare -x CALLIGRA_FEATURES="" declare -x CAMERAS="" declare -x CBUILD="x86_64-pc-linux-gnu" declare -x CCASFLAGS="" declare -x CC_IS_GCC="1" declare -x CFLAGS="-march=skylake -mno-3dnow -mno-sse4a -mno-sha -mno-lwp -mno-fma4 -mno-xop -mno-tbm -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mtune=skylake -O2 -pipe -Wl,-O1 -Wl,--as-needed" declare -x CFLAGS_amd64="-m64" declare -x CFLAGS_default declare -x CFLAGS_x32="-mx32" declare -x CFLAGS_x86="-m32" declare -x CHOST="x86_64-pc-linux-gnu" declare -x CHOST_amd64="x86_64-pc-linux-gnu" declare -x CHOST_default="x86_64-pc-linux-gnu" declare -x CHOST_x32="x86_64-pc-linux-gnux32" declare -x CHOST_x86="i686-pc-linux-gnu" declare -x COLLECTD_PLUGINS="" declare -x COMMON_FLAGS="-march=skylake -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -msgx -mbmi2 -mno-pconfig -mno-wbnoinvd -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mrtm -mhle -mrdrnd -mf16c -mfsgsbase -mrdseed -mprfchw -madx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mclflushopt -mxsavec -mxsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-avx5124fmaps -mno-avx5124vnniw -mno-clwb -mno-mwaitx -mno-clzero -mno-pku -mno-rdpid -mno-gfni -mno-shstk -mno-avx512vbmi2 -mno-avx512vnni -mno-vaes -mno-vpclmulqdq -mno-avx512bitalg -mno-avx512vpopcntdq -mno-movdiri -mno-movdir64b -mno-waitpkg -mno-cldemote -mno-ptwrite -mno-avx512bf16 -mno-enqcmd -mno-avx512vp2intersect --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=skylake -O2 -pipe" declare -x CPPFLAGS="" declare -x CPU_FLAGS_ARM="" declare -x CPU_FLAGS_PPC="" declare -x CPU_FLAGS_X86="" declare -x CTARGET_default="x86_64-pc-linux-gnu" declare -x CURL_SSL="" declare -x CXXFLAGS="-march=skylake -mno-3dnow -mno-sse4a -mno-sha -mno-lwp -mno-fma4 -mno-xop -mno-tbm -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mtune=skylake -O2 -pipe -Wl,-O1 -Wl,--as-needed" declare -x DCC_EMAILLOG_WHOM_TO_BLAME="" declare -x DEFAULT_ABI="amd64" declare -x DEFINED_PHASES=" compile configure install postinst postrm prepare test" declare DEPEND=" >=dev-libs/nspr-4.32[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?] >=dev-db/sqlite-3.8.2[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?] >=sys-libs/zlib-1.2.8-r1[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?] virtual/pkgconfig " declare DESCRIPTION="Mozilla's Network Security Services library that implements PKI support" declare -x DESKTOP_SESSION="xmonad" declare -x DEVIRTLTO="-fdevirtualize-at-ltrans" declare -x DIROPTIONS="-m0755" declare -x EAPI="8" declare -x ELIBC="glibc" declare -x ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY 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" declare -- EPOCHREALTIME="1636630345,813789" declare -- EPOCHSECONDS="1636630345" declare -x EXEOPTIONS="-m0755" declare -x F77FLAGS="-march=skylake -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -msgx -mbmi2 -mno-pconfig -mno-wbnoinvd -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mrtm -mhle -mrdrnd -mf16c -mfsgsbase -mrdseed -mprfchw -madx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mclflushopt -mxsavec -mxsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-avx5124fmaps -mno-avx5124vnniw -mno-clwb -mno-mwaitx -mno-clzero -mno-pku -mno-rdpid -mno-gfni -mno-shstk -mno-avx512vbmi2 -mno-avx512vnni -mno-vaes -mno-vpclmulqdq -mno-avx512bitalg -mno-avx512vpopcntdq -mno-movdiri -mno-movdir64b -mno-waitpkg -mno-cldemote -mno-ptwrite -mno-avx512bf16 -mno-enqcmd -mno-avx512vp2intersect --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=skylake -O2 -pipe -Wl,-O1 -Wl,--as-needed" declare -x FCFLAGS="-march=skylake -mno-3dnow -mno-sse4a -mno-sha -mno-lwp -mno-fma4 -mno-xop -mno-tbm -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mtune=skylake -O2 -pipe -Wl,-O1 -Wl,--as-needed" declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" declare -x FFLAGS="-march=skylake -mno-3dnow -mno-sse4a -mno-sha -mno-lwp -mno-fma4 -mno-xop -mno-tbm -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mtune=skylake -O2 -pipe -Wl,-O1 -Wl,--as-needed" declare -x FFTOOLS="" declare -a FLAG_FILTER_CFLAGS=() declare -a FLAG_FILTER_CLANG_LTO_DEP=([0]="-fsanitize=cfi*" [1]="-fwhole-program-vtables") declare -a FLAG_FILTER_CXXFLAGS=() declare -a FLAG_FILTER_CXX_FORTRAN=([0]="-std=c1*" [1]="-std=c8*" [2]="-std=c9*" [3]="-std=gnu1*" [4]="-std=gnu8*" [5]="-std=gnu9*" [6]="-std=iso*" [7]="-Wimplicit-function-declaration") declare -a FLAG_FILTER_C_CXX=([0]="-fall-intrinsics" [1]="-fbackslash" [2]="-fcray-pointer" [3]="-fd-lines-as-*" [4]="-fdec*" [5]="-fdefault-*" [6]="-fdollar-ok" [7]="-ffixed-*" [8]="-ffree-*" [9]="-fimplicit-none" [10]="-finteger-4-integer-8" [11]="-fmax-identifier-length*" [12]="-fmodule-private" [13]="-fno-range-check" [14]="-freal-*" [15]="-ftest-forall-temp" [16]="-std=f*" [17]="-std=gnu" [18]="-std=legacy") declare -a FLAG_FILTER_C_FORTRAN=([0]="-fabi-*" [1]="-faligned-new" [2]="-fcheck-new" [3]="-fconcepts" [4]="-fconstexpr-*" [5]="-fdeduce-init-list" [6]="-fext*" [7]="-ffor-scope" [8]="-ffriend-injection" [9]="-fms-extensions" [10]="-fnew-inheriting-ctors" [11]="-fnew-ttp-matching" [12]="-fno-access-control" [13]="-fno-elide-constructors" [14]="-fno-enforce-eh-specs" [15]="-fno-extern-tls-init" [16]="-fno-for-scope" [17]="-fno-gnu-keywords" [18]="-fno-implement-inlines" [19]="-fno-implicit-*" [20]="-fno-nonansi-builtins" [21]="-fno-operator-names" [22]="-fno-optional-diags" [23]="-fno-pretty-templates" [24]="-fno-rtti" [25]="-fno-threadsafe-statics" [26]="-fno-use-cxa-get-exception-ptr" [27]="-fno-weak" [28]="-fnothrow-opt" [29]="-fpermissive" [30]="-frepo" [31]="-fsized-deallocation" [32]="-fstrict-enums" [33]="-fstrong-eval-order" [34]="-ftemplate-*" [35]="-fuse-cxa-atexit" [36]="-fvisibility-*" [37]="-nostdinc++" [38]="-std=c++*" [39]="-std=gnu++*" [40]="-Wabi*" [41]="-Wctor-dtor-privacy" [42]="-Wdelete-non-virtual-dtor" [43]="-Weffc++" [44]="-Wliteral-suffix" [45]="-Wlto-type-mismatch" [46]="-Wmultiple-inheritance" [47]="-Wnamespaces" [48]="-Wno-narrowing" [49]="-Wno-non-template-friend" [50]="-Wno-pmf-conversions" [51]="-Wno-terminate" [52]="-Wnoexcept" [53]="-Wnon-virtual-dtor" [54]="-Wold-style-cast" [55]="-Woverloaded-virtual" [56]="-Wregister" [57]="-Wreorder" [58]="-Wsign-promo" [59]="-Wstrict-null-sentinel" [60]="-Wtemplates" [61]="-Wvirtual-inheritance") declare -a FLAG_FILTER_F77FLAGS=() declare -a FLAG_FILTER_FCFLAGS=() declare -a FLAG_FILTER_FFLAGS=() declare -a FLAG_FILTER_FORTRAN=([0]="-ansi" [1]="-fallow-parameterless-variadic-functions" [2]="-fcilkplus" [3]="-fcond-mismatch" [4]="-fdirectives-only" [5]="-ffreestanding" [6]="-fgimple" [7]="-fgnu-tm" [8]="-fgnu89-inline" [9]="-fhosted" [10]="-flax-vector-conversions" [11]="-fms-extensions" [12]="-fno-asm" [13]="-fno-builtin*" [14]="-fno-signed-bitfields" [15]="-fno-unsigned-bitfields" [16]="-fpermitted-flt-eval-methods*" [17]="-fplan9-extensions" [18]="-fsigned-*" [19]="-fsso-struct*" [20]="-funsigned-*" [21]="-Wchkp" [22]="-Wclobbered" [23]="-Wformat*" [24]="-Wvolatile-register-var") declare -a FLAG_FILTER_GNU=([0]="-emit-llvm" [1]="-flto=full" [2]="-flto=thin" [3]="-flto-jobs=*" [4]="-fopenmp=*" [5]="-frewrite-includes" [6]="-fsanitize=cfi*" [7]="-fsanitize=safe-stack" [8]="-mllvm" [9]="-mretpoline*" [10]="-polly*" [11]="-Wl,-z,retpolineplt") declare -a FLAG_FILTER_NONGNU=([0]="-fcf-protection*" [1]="-fdevirtualize-at-ltrans" [2]="-fdevirtualize-speculatively" [3]="-fdirectives-only" [4]="-ffat-lto-objects" [5]="-fgcse*" [6]="-fgraphite*" [7]="-finline-functions" [8]="-fipa-pta" [9]="-fira-loop-pressure" [10]="-fisolate-erroneous-paths-attribute" [11]="-fivopts" [12]="-flimit-function-alignment" [13]="-floop*" [14]="-flto=[0-9]*" [15]="-flto=auto" [16]="-flto=jobserver" [17]="-flto-partition=*" [18]="-flto-compression-level=*" [19]="-fmodulo*" [20]="-fno-enforce-eh-specs" [21]="-fno-ident" [22]="-fno-ipa-cp-clone" [23]="-fno-plt" [24]="-fno-semantic-interposition" [25]="-fnothrow-opt" [26]="-fpredictive-commoning" [27]="-frename-registers" [28]="-freorder-functions" [29]="-frerun-cse-after-loop" [30]="-fsched*" [31]="-fsection-anchors" [32]="-ftree*" [33]="-funsafe-loop*" [34]="-fuse-linker-plugin" [35]="-fvect-cost-model" [36]="-fweb" [37]="-fwhole-program" [38]="-malign-data*" [39]="-mfunction-return*" [40]="-mindirect-branch*" [41]="-mvectorize*" [42]="-Wl,-z,retpolineplt") declare -x FLTO="-flto=4" declare -x FREEBL_LOWHASH="1" declare -x FREEBL_NO_DEPEND="1" declare -x GCC_SPECS="" declare -x GDMSESSION="xmonad" declare -x GDM_LANG="en_US.utf8" declare -x GPG_TTY="/dev/pts/0" declare -x GPSD_PROTOCOLS="" declare -x GRAPHITE="-fgraphite-identity -floop-nest-optimize" declare -x GRUB_PLATFORMS="" declare -x GSETTINGS_BACKEND="dconf" declare -x GTK3_MODULES="xapp-gtk3-module" declare -x GTK_MODULES="canberra-gtk-module" declare HOMEPAGE="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS" declare IDEPEND declare -x INHERITED=" toolchain-funcs multilib flag-o-matic multibuild multilib-build multilib-minimal" declare -x INPUT_DEVICES="" declare -x INSOPTIONS="-m0644" declare -x IPAPTA="-fipa-pta" declare IUSE="cacert utils cpu_flags_ppc_altivec cpu_flags_ppc_vsx abi_x86_32 abi_x86_64 abi_x86_x32 abi_mips_n32 abi_mips_n64 abi_mips_o32 abi_s390_32 abi_s390_64" declare -x IUSE_EFFECTIVE="abi_mips_n32 abi_mips_n64 abi_mips_o32 abi_s390_32 abi_s390_64 abi_x86_32 abi_x86_64 abi_x86_x32 alpha amd64 amd64-fbsd amd64-linux arm arm64 arm64-macos cacert cpu_flags_ppc_altivec cpu_flags_ppc_vsx elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_bionic elibc_glibc elibc_mingw elibc_mintlib elibc_musl elibc_uclibc hppa ia64 kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k mips ppc ppc-macos ppc64 ppc64-linux prefix prefix-guest prefix-stack riscv s390 sparc sparc-solaris sparc64-solaris userland_BSD userland_GNU utils x64-cygwin x64-macos x64-solaris x64-winnt x86 x86-fbsd x86-linux x86-solaris x86-winnt" 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 JAVA_HOME="/etc/java-config-2/current-system-vm" declare -x JDK_HOME="/etc/java-config-2/current-system-vm" declare -- KEEPPGO=":" declare -x KERNEL="linux" declare -x KERNEL_ABI="amd64" declare -x KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~x64-solaris ~x86-solaris" declare -x L10N="" declare -x LANG="en_US.UTF-8" declare -x LCD_DEVICES="" declare -x LC_COLLATE="C" declare -x LC_MEASUREMENT="de_DE.UTF-8" declare -x LC_MESSAGES="C" declare -x LC_MONETARY="de_DE.UTF-8" declare -x LC_NUMERIC="de_DE.UTF-8" declare -x LC_PAPER="de_DE.UTF-8" declare -x LC_TIME="de_DE.UTF-8" declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed" declare -x LDFLAGS_amd64="-m elf_x86_64" declare -x LDFLAGS_default declare -x LDFLAGS_x32="-m elf32_x86_64" declare -x LDFLAGS_x86="-m elf_i386" declare -x LIBDIR_amd64="lib64" declare -x LIBDIR_default="lib" declare -x LIBDIR_x32="libx32" declare -x LIBDIR_x86="lib" declare -x LIBOPTIONS="-m0644" declare -x LIBREOFFICE_EXTENSIONS="" declare -x LICENSE="|| ( MPL-2.0 GPL-2 LGPL-2.1 )" declare -x LLVM_TARGETS="" declare -x LSCOLORS="Gxfxcxdxbxegedabagacad" declare -x LUA_SINGLE_TARGET="" declare -x LUA_TARGETS="" declare -x MAIL="/var/mail/pascal" declare -x MAKEOPTS="-j4 -l4" declare -x MANPAGER="manpager" declare -x MONKEYD_PLUGINS="" declare -x MOTD_SHOWN="pam" declare -x MOZ_GMP_PATH="/usr/lib64/nsbrowser/plugins/gmp-gmpopenh264/system-installed" declare -x MULTILIB_ABIS="amd64 x86" declare -a MULTILIB_CHOST_TOOLS=([0]="/usr/bin/nss-config") 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 -- MULTILIB_USEDEP="abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?" declare -x NGINX_MODULES_HTTP="" declare -x NGINX_MODULES_MAIL="" declare -x NGINX_MODULES_STREAM="" declare -x NOCOMMON="-fno-common" declare -x NOPLT="-fno-plt" declare -x NSDISTMODE="copy" declare -- NSPR_VER="4.32" declare -x NSS_ALLOW_SSLKEYLOGFILE="1" declare -x NSS_CHK_SIGN_LIBS="freebl3 nssdbm3 softokn3" declare -x NSS_ENABLE_WERROR="0" declare -x NSS_SEED_ONLY_DEV_URANDOM="1" declare -x NSS_USE_SYSTEM_SQLITE="1" declare -x NS_USE_GCC="1" declare -x NTHREADS="4" declare -x OFED_DRIVERS="" declare -x OFFICE_IMPLEMENTATION="" declare -x OPENMPI_FABRICS="" declare -x OPENMPI_OFED_FEATURES="" declare -x OPENMPI_RM="" declare -x P9K_SSH="0" declare -x P9K_TTY="old" declare -a PATCHES=([0]="/var/tmp/portage/dev-libs/nss-3.72/files/nss-3.53-gentoo-fixups.patch" [1]="/var/tmp/portage/dev-libs/nss-3.72/files/nss-3.21-gentoo-fixup-warnings.patch" [2]="/var/tmp/portage/dev-libs/nss-3.72/files/nss-3.23-hppa-byte_order.patch") declare -x PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:/usr/lib/portage/python3.9/ebuild-helpers/xattr:/usr/lib/portage/python3.9/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/lib/llvm/13/bin" declare PDEPEND="" declare -- PGO_DIR="/var/cache/pgo/dev-libs:nss-3.72" declare -- PGO_PARENT="/var/cache/pgo" declare -x PHP_TARGETS="" 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/nss-3.72/html") declare -a PORTAGE_DOSTRIP=([0]="/") declare -a PORTAGE_DOSTRIP_SKIP=() declare -x PORTAGE_NICENESS="5" declare -x POSTGRES_TARGETS="" declare -x PRELINK_PATH_MASK="/usr/bin/evolution" 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 -- PROPERTIES="" declare -x PYTHONDONTWRITEBYTECODE="1" declare -x PYTHON_SINGLE_TARGET="" declare -x PYTHON_TARGETS="" declare -x QEMU_SOFTMMU_TARGETS="" declare -x QEMU_USER_TARGETS="" declare RDEPEND=" >=dev-libs/nspr-4.32[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?] >=dev-db/sqlite-3.8.2[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?] >=sys-libs/zlib-1.2.8-r1[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?] virtual/pkgconfig " declare REPOSITORY declare REQUIRED_USE="" declare RESTRICT="test" declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port= ; exec rsync --rsh=\\\"ssh \\\${port:+-p\\\${port}} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\"" declare -x ROS_MESSAGES="" declare -- RTM_NAME="NSS_3_72_RTM" declare -x RUBY_TARGETS="" declare -x S="/var/tmp/portage/dev-libs/nss-3.72/work/nss-3.72/nss" declare -x SAFER_FAST_MATH="-fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -fno-math-errno -ffinite-math-only -fno-rounding-math -fno-signaling-nans -fcx-limited-range -fexcess-precision=fast" declare -x SAFER_UNSAFE_MATH_OPTS="-fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math" declare -x SAFEST_FAST_MATH="-fno-math-errno -fno-trapping-math" declare -x SANDBOX_DEBUG="0" declare -x SANDBOX_DENY="" declare -x SANDBOX_METHOD="any" declare -x SANDBOX_PREDICT="/var/tmp/portage/dev-libs/nss-3.72/homedir:/dev/crypto:/var/cache/man:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig" declare -x SANDBOX_READ="/:/var/cache/ccache:/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/cache/ccache:/var/tmp/:/var/tmp/portage:/var/tmp/portage/.distcc:/var/tmp/portage/dev-libs/nss-3.72/homedir/.bash_history" declare -x SANE_BACKENDS="" declare -x SEMINTERPOS="-fno-semantic-interposition" declare -x SHELL="/bin/bash" declare -x SLOT="0" declare -i SRANDOM="2198035724" declare SRC_URI="https://archive.mozilla.org/pub/security/nss/releases/NSS_3_72_RTM/src/nss-3.72.tar.gz cacert? ( https://dev.gentoo.org/~whissi/dist/ca-certificates/nss-cacert-class1-class3-r2.patch )" declare -x SYMLINK_LIB="no" declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1" declare -x UNCACHED_ERR_FD="" declare -x USE="abi_x86_64 amd64 elibc_glibc kernel_linux userland_GNU" declare -x USERLAND="GNU" declare -x USERNAME="pascal" 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 arm64 arm64-macos hppa ia64 m68k mips ppc ppc64 ppc64-linux ppc-macos riscv s390 sparc sparc64-solaris sparc-solaris x64-cygwin x64-macos x64-solaris x64-winnt x86 x86-fbsd x86-linux 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 USE_SYSTEM_ZLIB="1" declare -x UWSGI_PLUGINS="" declare -x VIDEO_CARDS="" declare -x VOICEMAIL_STORAGE="" declare -x WINDOWID="10485762" declare -x WINDOWPATH="8" declare -x XDG_CONFIG_DIRS="/etc/xdg" declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share:/usr/share/gdm" declare -x XDG_SEAT="seat0" declare -x XDG_SESSION_CLASS="user" declare -x XDG_SESSION_DESKTOP="xmonad" declare -x XDG_SESSION_ID="c2" declare -x XDG_SESSION_TYPE="x11" declare -x XDG_VTNR="8" declare -x XTABLES_ADDONS="" declare -x ZLIB_LIBS="-lz" declare -x ZSH="/home/pascal/.oh-my-zsh" declare -x _E_DESTTREE_="/usr" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_="" declare -x _E_INSDESTTREE_="" declare -- _FLAG_O_MATIC_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_s390_32:s390" [7]="abi_s390_64:s390x") declare -x _P9K_TTY="/dev/pts/0" declare -- _TOOLCHAIN_FUNCS_ECLASS="1" declare -- bashrcd_phases_0_all="CcacheRestore" declare -- bashrcd_phases_0_compile="FlagCompile" declare -- bashrcd_phases_0_configure="LTOPatch" declare -- bashrcd_phases_0_preinst="FlagPreinst" declare -- bashrcd_phases_0_setup="FlagSetup" declare -- bashrcd_phases_1_configure="nocommon_configure" declare -- bashrcd_phases_1_preinst="LocalePurge" declare -- bashrcd_phases_1_setup="QlopSetup" declare -- bashrcd_phases_2_preinst="Remove_la" declare -- bashrcd_phases_2_setup="CcacheSetup" declare -- bashrcd_phases_c_all="0" declare -- bashrcd_phases_c_compile="0" declare -- bashrcd_phases_c_configure="1" declare -- bashrcd_phases_c_preinst="2" declare -- bashrcd_phases_c_setup="2" BashrcdEcho () { local i m=einfo; BashrcdTrue $BASHRCDLOG && m=elog; for i in "$@"; do $m "$i"; done } BashrcdLog () { local i m=elog; BashrcdTrue $BASHRCDNOLOG && m=einfo; for i in "$@"; do $m "$i"; done } BashrcdMain () { local bashrcd_ebuild_phase bashrcd_phase bashrcd_num bashrcd_max; bashrcd_ebuild_phase=$EBUILD_PHASE; [ -n "${bashrcd_ebuild_phase:++}" ] || [ $# -eq 0 ] || bashrcd_ebuild_phase=$1; : ${ED:=${D%/}${EPREFIX%/}/}; BashrcdTrue $BASHRCD_DEBUG && BashrcdEcho "$0: $* ($# args)" "EBUILD_PHASE=$EBUILD_PHASE" "PORTDIR=$PORTDIR" "CATEGORY=$CATEGORY" "P=$P" "USER=$USER" "UID=$UID" "HOME=$HOME" "PATH=$PATH" "ROOT=$ROOT" "PORTAGE_CONFIGROOT=$PORTAGE_CONFIGROOT" "LD_PRELOAD=$LD_PRELOAD" "EPREFIX=$EPREFIX" "D=$D" "ED=$ED"; for bashrcd_phase in all "$bashrcd_ebuild_phase"; do eval bashrcd_max=\${bashrcd_phases_c_$bashrcd_phase}; [ -z "${bashrcd_max:++}" ] && continue; bashrcd_num=0; while { eval eval \"\\\${bashrcd_phases_${bashrcd_num}_$bashrcd_phase}\"; [ $bashrcd_num -ne $bashrcd_max ] }; do bashrcd_num=$(( $bashrcd_num + 1 )); done; done } BashrcdTrue () { case ${1:-n} in [nNfF]* | [oO][fF]* | 0 | -) return 1 ;; esac; : } CcacheRestore () { local i j; unset ${!CCACHE_*}; for i in ${!BASHRCD_CCACHE_*}; do j=${i##BASHRCD_}; eval $j=\$$i; export $j; done } CcacheSetup () { local i; : ${CCACHE_BASEDIR=${PORTAGE_TMPDIR:-/var/tmp}/portage}; : ${CCACHE_SLOPPINESS='file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches,pch_defines'}; : ${CCACHE_COMPRESS=true}; if BashrcdTrue $USE_NONGNU && BashrcdTrue $CCACHE_CPP2_OPTIONAL; then : ${CCACHE_CPP2=true}; fi; BashrcdTrue "${CCACHE_HASHDIR-}" || CCACHE_NOHASHDIR=true; for i in ${!CCACHE_*}; do if eval "BashrcdTrue \$$i"; then eval BASHRCD_$i=\$$i; export $i; else unset $i; fi; done; function CcacheRestore () { local i j; unset ${!CCACHE_*}; for i in ${!BASHRCD_CCACHE_*}; do j=${i##BASHRCD_}; eval $j=\$$i; export $j; done } } FlagAdd () { FlagNodupAdd '' "$@" } FlagAddAllFlags () { FlagAddCFlags "$@"; FlagAddFFlags "$@" } FlagAddCFlags () { FlagAdd CFLAGS "$@"; FlagAdd CXXFLAGS "$@" } FlagAddFFlags () { FlagAdd FFLAGS "$@"; FlagAdd FCFLAGS "$@"; FlagAdd F77FLAGS "$@" } FlagAthlon () { FlagSubCFlags '-march=*'; FlagAddCFlags '-march=athlon-4'; command -v x86_64-pc-linux-gnu-gcc32 > /dev/null 2>&1 && export CC=x86_64-pc-linux-gnu-gcc32; command -v x86_64-pc-linux-gnu-g++32 > /dev/null 2>&1 && export CXX=x86_64-pc-linux-gnu-g++32 } FlagCompile () { : } FlagEval () { case $- in *f*) eval "$*" ;; *) set -f; eval "$*"; set +f ;; esac } FlagExecute () { local ex exy excurr; for excurr in "$@"; do case $excurr in '#'*) return ;; '!'*) [ "$HOSTTYPE" = 'i686' ] || continue; ex=${excurr#?} ;; '~'*) [ "$HOSTTYPE" = 'x86_64' ] || continue; ex=${excurr#?} ;; *) ex=$excurr ;; esac; case $ex in /*/*) ex=${ex%/}; ex=${ex#/}; FlagEval FlagReplaceAllFlags "${ex%%/*}" "${ex#*/}" ;; '-'*) FlagAddCFlags "$ex" ;; '+flto*') FlagSubAllFlags '-flto*' '-fuse-linker-plugin' '-emit-llvm' ;; '+'*) FlagSubAllFlags "-${ex#+}" ;; 'C*FLAGS-='*) FlagEval FlagSubCFlags ${ex#*-=} ;; 'C*FLAGS+='*) FlagEval FlagAddCFlags ${ex#*+=} ;; 'C*FLAGS='*) FlagEval FlagSetCFlags "${ex#*=}" ;; 'C*FLAGS/=/'*/*) ex=${ex%/}; ex=${ex#*/=/}; FlagEval FlagReplaceCFlags "${ex%%/*}" "${ex#*/}" ;; 'F*FLAGS-='*) FlagEval FlagSubFFlags ${ex#*-=} ;; 'F*FLAGS+='*) FlagEval FlagAddFFlags ${ex#*+=} ;; 'F*FLAGS='*) FlagEval FlagSetFFlags "${ex#*=}" ;; 'F*FLAGS/=/'*/*) ex=${ex%/}; ex=${ex#*/=/}; FlagEval FlagReplaceFFlags "${ex%%/*}" "${ex#*/}" ;; '*FLAGS-='*) FlagEval FlagSubAllFlags ${ex#*-=} ;; '*FLAGS+='*) FlagEval FlagAddAllFlags ${ex#*+=} ;; '*FLAGS='*) FlagEval FlagSetAllFlags "${ex#*=}" ;; '*FLAGS/=/'*/*) ex=${ex%/}; ex=${ex#*/=/}; FlagEval FlagReplaceAllFlags "${ex%%/*}" "${ex#*/}" ;; 'ATHLON32') FlagAthlon ;; 'NOC*OPT='* | 'NOC*='*) FlagEval FlagSet NOCOPT "${ex#*=}"; NOCXXOPT=$NOCOPT; NOCPPOPT=$NOCOPT ;; 'NO*OPT='*) FlagEval FlagSet NOCOPT "${ex#*=}"; NOCXXOPT=$NOCOPT; NOCPPOPT=$NOCOPT; NOLDOPT=$NOCOPT ;; 'NOLD*='*) FlagEval FlagSet NOLDOPT "${ex#*=}"; NOLDADD=$NOLDOPT ;; 'NO*'*) FlagEval FlagSet NOCOPT "${ex#*=}"; NOCXXOPT=$NOCOPT; NOCPPOPT=$NOCOPT; NOLDOPT=$NOCOPT; NOLDADD=$NOCOPT; NOFFLAGS=$NOCOPT; NOFCFLAGS=$NOCOPT; NOF77FLAGS=$NOCOPT ;; 'SAFE') NOCOPT=1; NOCXXOPT=1; NOCPPOPT=1; NOLDOPT=1; MESONDEDUP=1; LDFLAGS=; CONFIG_SITE=; NOLAFILEREMOVE=1; unset CMAKE_MAKEFILE_GENERATOR ;; *' '*'='*) FlagEval "$ex" ;; *'/=/'*'/'*) ex=${ex%/}; exy=${ex#*/=/}; FlagEval FlagReplace "${ex%%/=/*}" "${exy%%/*}" "${exy#*/}" ;; *'-='*) FlagEval FlagSub "${ex%%-=*}" ${ex#*-=} ;; *'+='*) FlagEval FlagAdd "${ex%%+=*}" ${ex#*+=} ;; *'='*) FlagEval FlagSet "${ex%%=*}" "${ex#*=}" ;; *) FlagEval "$ex" ;; esac; done } FlagInfoExport () { local out; for out in FEATURES CFLAGS CXXFLAGS CPPFLAGS FFLAGS FCFLAGS F77FLAGS LDFLAGS MAKEOPTS EXTRA_ECONF EXTRA_EMAKE USE_NONGNU; do eval "if [ -n \"\${$out:++}\" ] then export $out BashrcdEcho \"$out='\$$out'\" else unset $out fi"; done; if BashrcdTrue $PGO; then BashrcdEcho "Create PGO into $PGO_DIR"; else if $use_pgo; then BashrcdEcho "Using PGO from $PGO_DIR"; fi; fi; out=`${CC:-gcc} --version | head -n 1` || out=; BashrcdEcho "${out:-cannot determine gcc version}"; out=`${CXX:-g++} --version | head -n 1` || out=; BashrcdEcho "${out:-cannot determine g++ version}"; out=`${LD:-ld} --version | head -n 1` || out=; BashrcdEcho "${out:-cannot determine ld version}"; BashrcdEcho "`uname -a`" } FlagMask () { masked-packages -qm "$1" -- "$CATEGORY/$PF:${SLOT:-0}${PORTAGE_REPO_NAME:+::}${PORTAGE_REPO_NAME-}" } FlagMesonDedup () { local newld=; FlagNodupAdd "$CFLAGS $CXXFLAGS $CPPFLAGS $FFLAGS $FCFLAGS $F77FLAGS" newld $LDFLAGS; LDFLAGS=$newld } FlagNodupAdd () { local addres addf addvar dups; dups=$1; shift; addvar=$1; shift; eval addres=\$$addvar; for addf in "$@"; do case " $addres $dups " in *[[:space:]]"$addf"[[:space:]]*) continue ;; esac; addres=$addres${addres:+\ }$addf; done; eval $addvar=\$addres } FlagParseLine () { local scanp scanl scansaveifs; scanl=$2; while :; do case $scanl in [[:space:]]*) scanl=${scanl#?}; continue ;; '#'*) return ;; *[[:space:]]*) break ;; esac; return; done; scanp=${scanl%%[[:space:]]*}; scanl=${scanl#*[[:space:]]}; [ -n "${scanl:++}" ] || return 0; FlagMask "$scanp" || return 0; scansaveifs=$IFS; IFS=$1; BashrcdEcho "$scanfile -> $scanp: $scanl"; FlagEval FlagExecute $scanl; IFS=$scansaveifs } FlagPreinst () { : } FlagReplace () { local repres repf repcurr repvar reppat; repvar=$1; shift; eval repf=\$$repvar; reppat=$1; shift; repres=; for repcurr in $repf; do case $repcurr in $reppat) $repfound && FlagAdd repres "$@"; continue ;; esac; repres=$repres${repres:+\ }$repcurr; done; eval $repvar=\$repres } FlagReplaceAllFlags () { FlagReplaceCFlags "$@"; FlagReplaceFFlags "$@"; FlagSub LDFLAGS "$1"; FlagSub OPTLDFLAGS "$1" } FlagReplaceCFlags () { FlagReplace CFLAGS "$@"; FlagReplace CXXFLAGS "$@"; FlagReplace CPPFLAGS "$@"; FlagSub OPTCFLAGS "$1"; FlagSub OPTCXXFLAGS "$1"; FlagSub OPTCPPFLAGS "$1" } FlagReplaceFFlags () { FlagReplace FFLAGS "$@"; FlagReplace FCFLAGS "$@"; FlagReplace F77FLAGS "$@" } FlagScanDir () { local scantmp scanifs scanfile; scanifs=$IFS; if test -d "$1"; then IFS=' '; for scantmp in `find -L "$1" '(' '(' -name '.*' -o -name '*~' ')' -prune ')' -o -type f -print`; do IFS=$scanifs; FlagScanFiles "$scantmp"; done; else FlagScanFiles "$1"; fi; scanfile='FLAG_ADDLINES'; IFS=' '; for scantmp in $FLAG_ADDLINES; do FlagParseLine "$scanifs" "$scantmp"; done; IFS=$scanifs } FlagScanFiles () { local scanfile scanl oldifs scanifs; scanifs=$IFS; IFS=; for scanfile in "$@"; do [ -z "${scanfile:++}" ] && continue; test -r "$scanfile" || continue; while read -r scanl; do FlagParseLine "$scanifs" "$scanl"; done < "$scanfile"; done; IFS=$scanifs } FlagSet () { local setvar; setvar=$1; shift; eval $setvar=\$* } FlagSetAllFlags () { FlagSetCFlags "$@"; FlagSetFFlags "$@"; LDFLAGS=; OPTLDFLAGS= } FlagSetCFlags () { FlagSet CFLAGS "$@"; CXXFLAGS=$CFLAGS; CPPFLAGS=; OPTCFLAGS=; OPTCXXFLAGS=; OPTCPPFLAGS= } FlagSetFFlags () { FlagSet FFLAGS "$@"; FlagSet FCFLAGS "$@"; FlagSet F77FLAGS "$@" } FlagSetFlags () { local ld i; ld=; : ${PGO_PARENT:=/var/cache/pgo}; : ${PGO_DIR:=$PGO_PARENT/$CATEGORY:$P}; FlagScanDir "${PORTAGE_CONFIGROOT%/}/etc/portage/package.cflags"; [ -z "${USE_NONGNU++}" ] && FlagSetUseNonGNU && USE_NONGNU=1; if BashrcdTrue "${USE_NONGNU-}"; then FlagSetNonGNU; else FlagSetGNU; fi; if [ -n "$FLAG_ADD" ]; then BashrcdEcho "FLAG_ADD: $FLAG_ADD"; FlagEval FlagExecute "$FLAG_ADD"; fi; PGO_DIR=${PGO_DIR%/}; case ${PGO_DIR:-/} in /) error 'PGO_DIR must not be empty'; false ;; /*) : ;; *) error 'PGO_DIR must be an absolute path'; false ;; esac || { die 'Bad PGO_DIR'; exit 2 }; use_pgo=false; if test -r "$PGO_DIR"; then unset PGO; BashrcdTrue $NOPGO || use_pgo=:; fi; if BashrcdTrue $PGO; then FlagAddCFlags "-fprofile-generate=$PGO_DIR" -fvpt -fprofile-arcs; FlagAdd LDFLAGS -fprofile-arcs; addpredict "$PGO_PARENT"; else if $use_pgo; then FlagAddCFlags "-fprofile-use=$PGO_DIR" -fvpt -fbranch-probabilities -fprofile-correction; else : ${KEEPPGO:=:}; fi; fi; BashrcdTrue $NOLDOPT || FlagAdd LDFLAGS $OPTLDFLAGS; BashrcdTrue $NOCADD || BashrcdTrue $MESONDEDUP || case " $LDFLAGS $CFLAGS $CXXFLAGS" in *[[:space:]]'-flto'*) ld="$CFLAGS $CXXFLAGS" ;; esac; BashrcdTrue $NOLDADD || BashrcdTrue $MESONDEDUP || FlagAddCFlags $LDFLAGS; FlagAdd LDFLAGS $ld; BashrcdTrue $NOCOPT || FlagAdd CFLAGS $OPTCFLAGS; BashrcdTrue $NOCXXOPT || FlagAdd CXXFLAGS $OPTCXXFLAGS; BashrcdTrue $NOCPPOPT || FlagAdd CPPFLAGS $OPTCPPFLAGS; BashrcdTrue $NOFFLAGS || FFLAGS=$CFLAGS; BashrcdTrue $NOFCFLAGS || FCFLAGS=$FFLAGS; BashrcdTrue $NOF77FLAGS || F77FLAGS=$FFLAGS; BashrcdTrue $NOFILTER_CXXFLAGS || FlagSub CXXFLAGS "${FLAG_FILTER_C_CXX[@]}" "${FLAG_FILTER_CXX_FORTRAN[@]}" "${FLAG_FILTER_CXXFLAGS[@]}"; BashrcdTrue $NOFILTER_CFLAGS || FlagSub CFLAGS "${FLAG_FILTER_C_CXX[@]}" "${FLAG_FILTER_C_FORTRAN[@]}" "${FLAG_FILTER_CFLAGS[@]}"; BashrcdTrue $NOFILTER_FFLAGS || FlagSub FFLAGS "${FLAG_FILTER_C_FORTRAN[@]}" "${FLAG_FILTER_CXX_FORTRAN[@]}" "${FLAG_FILTER_FORTRAN[@]}" "${FLAG_FILTER_FFLAGS[@]}"; BashrcdTrue $NOFILTER_FCFLAGS || FlagSub FCFLAGS "${FLAG_FILTER_C_FORTRAN[@]}" "${FLAG_FILTER_CXX_FORTRAN[@]}" "${FLAG_FILTER_FORTRAN[@]}" "${FLAG_FILTER_FCFLAGS[@]}"; BashrcdTrue $NOFILTER_F77FLAGS || FlagSub FCFLAGS "${FLAG_FILTER_C_FORTRAN[@]}" "${FLAG_FILTER_CXX_FORTRAN[@]}" "${FLAG_FILTER_FORTRAN[@]}" "${FLAG_FILTER_F77LAGS[@]}"; ! BashrcdTrue $MESONDEDUP || FlagMesonDedup; unset OPTCFLAGS OPTCXXFLAGS OPTCPPFLAGS OPTLDFLAGS; unset NOLDOPT NOLDADD NOCOPT NOCXXOPT NOFFLAGS NOFCFLAGS NOF77FLAGS; unset NOFILTER_CXXFLAGS NOFILTER_CFLAGS; unset NOFILTER_FFLAGS NOFILTER_FCFLAGS NOFILTER_F77FLAGS } FlagSetGNU () { FlagSubAllFlags "${FLAG_FILTER_GNU[@]}" } FlagSetNonGNU () { : ${NOLDADD:=1}; FlagSubAllFlags "${FLAG_FILTER_NONGNU[@]}"; FlagReplaceAllFlags '-fstack-check*' '-fstack-check'; case " $LDFLAGS $CFLAGS $CXXFLAGS" in *[[:space:]]'-flto'*) ;; *) FlagSubAllFlags "${FLAG_FILTER_CLANG_LTO_DEP[@]}" ;; esac } FlagSetUseNonGNU () { has clang ${IUSE//+} && use clang && return 0; case $CC$CXX in *clang*) return 0 ;; esac; return 1 } FlagSetup () { function FlagCompile () { : }; local use_pgo; FlagSetFlags; if BashrcdTrue $PGO; then function FlagPreinst () { test -d "$PGO_DIR" || mkdir -p -m +1777 -- "$PGO_DIR" || { eerror "cannot create pgo directory $PGO_DIR"; die 'cannot create PGO_DIR'; exit 2 }; ewarn "$CATEGORY/$PN will write profile info to world-writable"; ewarn "$PGO_DIR"; ewarn 'Reemerge it soon for an optimized version and removal of that directory' }; else if BashrcdTrue $KEEPPGO; then function FlagPreinst () { : }; else function FlagPreinst () { test -d "$PGO_DIR" || return 0; BashrcdLog "removing pgo directory $PGO_DIR"; rm -r -f -- "$PGO_DIR" || { eerror "cannot remove pgo directory $PGO_DIR"; die 'cannot remove PGO_DIR'; exit 2 }; local g; g=${PGO_DIR%/*}; [ -z "$g" ] || rmdir -p -- "$g" > /dev/null 2>&1 }; fi; fi; FlagInfoExport } FlagSub () { local subres subpat subf subvar sublist; subvar=$1; shift; subres=; eval sublist=\$$subvar; for subf in $sublist; do for subpat in "$@"; do [ -n "${subpat:++}" ] || continue; case $subf in $subpat) subf=; break ;; esac; done; [ -z "${subf:++}" ] || subres=$subres${subres:+\ }$subf; done; eval $subvar=\$subres } FlagSubAllFlags () { FlagSubCFlags "$@"; FlagSubFFlags "$@"; FlagSub LDFLAGS "$@"; FlagSub OPTLDFLAGS "$@" } FlagSubCFlags () { FlagSub CFLAGS "$@"; FlagSub CXXFLAGS "$@"; FlagSub CPPFLAGS "$@"; FlagSub OPTCFLAGS "$@"; FlagSub OPTCXXFLAGS "$@"; FlagSub OPTCPPFLAGS "$@" } FlagSubFFlags () { FlagSub FFLAGS "$@"; FlagSub FCFLAGS "$@"; FlagSub F77FLAGS "$@" } LTOPatch () { if [[ -d $S ]]; then cd "${S}"; else if ___eapi_has_S_WORKDIR_fallback; then cd "${WORKDIR}"; else if [[ -z ${A} ]] && ! __has_phase_defined_up_to prepare; then cd "${WORKDIR}"; else die "The source directory '${S}' doesn't exist"; fi; fi; fi; local tagfile=${T}/.portage_lto_patches_applied; [[ -f ${tagfile} ]] && return; >> "${tagfile}"; local lto_overlay_dir="$(portageq get_repo_path ${PORTAGE_CONFIGROOT} lto-overlay)"; local basedir="${lto_overlay_dir%/}/sys-config/ltoize/files/patches"; local applied d f; local -A _eapply_lto_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_lto_patches[${f##*/}]} ]]; then _eapply_lto_patches[${f##*/}]=${f}; fi; done; done; local lto_patch_cmd; if [[ "${EAPI}" -ge 6 ]]; then lto_patch_cmd=eapply; else lto_patch_cmd=epatch; fi; if [[ ${#_eapply_lto_patches[@]} -gt 0 ]]; then while read -r -d '' f; do f=${_eapply_lto_patches[${f}]}; if [[ -s ${f} ]]; then ${lto_patch_cmd} "${f}"; applied=1; fi; done < <(printf -- '%s\0' "${!_eapply_lto_patches[@]}" | LC_ALL=C sort -z); fi; ${prev_shopt}; [[ -n ${applied} ]] && ewarn "lto-overlay: LTO patches applied." } LocalePurge () { if BashrcdTrue $NOLOCALEPURGE || { ! BashrcdTrue $LOCALEPURGE && ! BashrcdTrue $MANPURGE } || [ -z "${KEEP_LOCALES++}" ]; then return 0; fi; case $- in *f*) LocalePurgeMain ;; *) set -f; LocalePurgeMain; set +f ;; esac } LocalePurgeMain () { local locale_list locale_item locale_cmd; locale_list=; for locale_item in $ALL_LOCALES ${ALL_LOCALES_ADD-}; do [ -n "$locale_item" ] && LocalePurgeNokeep "$locale_item" && locale_list=$locale_list' '$locale_item; done; locale_cmd='for d do for l in $locale_list do if test -d "$d/$l$k" then rm -rvf -- "$d/$l" fi done done'; export locale_list; shell=`command -v sh` || shell=; : ${shell:=/bin/sh}; if BashrcdTrue $LOCALEPURGE; then einfo 'removing undesired locales'; find "$ED" -name locale -type d -exec "$shell" -c "k='/LC_MESSAGES' $locale_cmd" sh '{}' '+'; fi; if BashrcdTrue $MANPURGE; then einfo 'removing undesired manpages'; find "$ED" -name man -type d -exec "$shell" -c "k= $locale_cmd" sh '{}' '+'; fi; unset locale_list } LocalePurgeNokeep () { local locale_keep; for locale_keep in $KEEP_LOCALES; do case $1 in $locale_keep) return 1 ;; esac; done } QlopSetup () { local num sec hour min date; ! BashrcdTrue "${NOQLOP-}" && command -v qlop > /dev/null 2>&1 || return 0; qlop -amH -- "$CATEGORY/$PN"; qlop -tmH -- "$CATEGORY/$PN"; command -v title > /dev/null 2>&1 || return 0; num=$(tail -n1 /var/log/emerge.log | sed -e 's/^.*(\([0-9]*\) of \([0-9]*\)).*$/\1|\2/') && [ -n "$num" ] || { date=$(date +%T); title "emerge $date $PN"; return }; case ${QLOPCOUNT:-1} in *[!0123456789]*) sec=$(qlop -ACMm -- "$CATEGORY/$PN" | awk '/[[:space:]][0123456789]+$/{a=$NF} END{if(a!=""){print a}}') ;; [123456789]*) sec=$(qlop -tCMm -- "$CATEGORY/$PN" | awk -v 'i=0' -v 'm=0' -v "n=${QLOPCOUNT:-3}" '/[[:space:]][0123456789]+$/{a[i++]=$NF;if(i>m){m=i};if(i>=n){i=0}} END{s=0;for(i=m;i>0;){s+=a[--i]};if(m>0){print int(s/m+1/2)}}') ;; *) false ;; esac && [ -n "$sec" ] || { date=$(date +%T); title "emerge $date $num $PN"; return }; hour=$(( $sec / 3600 )); [ "$hour" -gt 0 ] || hour=; hour=$hour${hour:+:}; sec=$(( $sec % 3600 )); min=$(( $sec / 60 )); sec=$(( $sec % 60 )); [ "$min" -gt 9 ] || min=0$min; [ "$sec" -gt 9 ] || sec=0$sec; date=$(date +%T); title "emerge $date $num $PN $hour$min:$sec" } Remove_la () { BashrcdTrue $NOLAFILEREMOVE && return; case "$CATEGORY/$PN" in 'media-libs/gst-plugins-base' | 'media-libs/libsidplay') return 0 ;; esac; einfo 'removing unneeded *.la files'; local shell; shell=`command -v sh` || shell=; : ${shell:=/bin/sh}; Dexport=$ED find "$ED" -name '*.la' '!' -name 'libltdl.la' -exec "$shell" -c "for i do if grep -q -- '^shouldnotlink=no\$' \"\$i\" then printf '\\t%s\\n' \"\${i#\$Dexport}\" rm -- \"\$i\" || echo 'removing failed!' fi done" sh '{}' '+' } __eapi6_src_install () { if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then emake DESTDIR="${D}" install; fi; einstalldocs } __eapi6_src_prepare () { if ___is_indexed_array_var PATCHES; then [[ ${#PATCHES[@]} -gt 0 ]] && eapply "${PATCHES[@]}"; else if [[ -n ${PATCHES} ]]; then eapply ${PATCHES}; fi; fi; eapply_user } __eapi7_ver_compare () { local va=${1} vb=${2} a an al as ar b bn bl bs br re LC_ALL=C; re="^([0-9]+(\.[0-9]+)*)([a-z]?)((_(alpha|beta|pre|rc|p)[0-9]*)*)(-r[0-9]+)?$"; [[ ${va} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${va}"; an=${BASH_REMATCH[1]}; al=${BASH_REMATCH[3]}; as=${BASH_REMATCH[4]}; ar=${BASH_REMATCH[7]}; [[ ${vb} =~ ${re} ]] || die "${FUNCNAME}: invalid version: ${vb}"; bn=${BASH_REMATCH[1]}; bl=${BASH_REMATCH[3]}; bs=${BASH_REMATCH[4]}; br=${BASH_REMATCH[7]}; __eapi7_ver_compare_int "${an%%.*}" "${bn%%.*}" || return; while [[ ${an} == *.* && ${bn} == *.* ]]; do an=${an#*.}; bn=${bn#*.}; a=${an%%.*}; b=${bn%%.*}; if [[ ${a} == 0* || ${b} == 0* ]]; then [[ ${a} =~ 0+$ ]] && a=${a%"${BASH_REMATCH[0]}"}; [[ ${b} =~ 0+$ ]] && b=${b%"${BASH_REMATCH[0]}"}; [[ ${a} > ${b} ]] && return 3; [[ ${a} < ${b} ]] && return 1; else __eapi7_ver_compare_int "${a}" "${b}" || return; fi; done; [[ ${an} == *.* ]] && return 3; [[ ${bn} == *.* ]] && return 1; [[ ${al} > ${bl} ]] && return 3; [[ ${al} < ${bl} ]] && return 1; as=${as#_}${as:+_}; bs=${bs#_}${bs:+_}; while [[ -n ${as} && -n ${bs} ]]; do a=${as%%_*}; b=${bs%%_*}; if [[ ${a%%[0-9]*} == "${b%%[0-9]*}" ]]; then __eapi7_ver_compare_int "${a##*[a-z]}" "${b##*[a-z]}" || return; else [[ ${a%%[0-9]*} == p ]] && return 3; [[ ${b%%[0-9]*} == p ]] && return 1; [[ ${a} > ${b} ]] && return 3 || return 1; fi; as=${as#*_}; bs=${bs#*_}; done; if [[ -n ${as} ]]; then [[ ${as} == p[_0-9]* ]] && return 3 || return 1; else if [[ -n ${bs} ]]; then [[ ${bs} == p[_0-9]* ]] && return 1 || return 3; fi; fi; __eapi7_ver_compare_int "${ar#-r}" "${br#-r}" || return; return 2 } __eapi7_ver_compare_int () { local a=$1 b=$2 d=$(( ${#1}-${#2} )); if [[ ${d} -gt 0 ]]; then printf -v b "%0${d}d%s" 0 "${b}"; else if [[ ${d} -lt 0 ]]; then printf -v a "%0$(( -d ))d%s" 0 "${a}"; fi; fi; [[ ${a} > ${b} ]] && return 3; [[ ${a} == "${b}" ]] } __eapi7_ver_parse_range () { local range=${1}; local max=${2}; [[ ${range} == [0-9]* ]] || die "${FUNCNAME}: range must start with a number"; start=${range%-*}; [[ ${range} == *-* ]] && end=${range#*-} || end=${start}; if [[ -n ${end} ]]; then [[ ${start} -le ${end} ]] || die "${FUNCNAME}: end of range must be >= start"; [[ ${end} -le ${max} ]] || end=${max}; else end=${max}; fi } __eapi7_ver_split () { local v=${1} LC_ALL=C; comp=(); local s c; while [[ -n ${v} ]]; do s=${v%%[a-zA-Z0-9]*}; v=${v:${#s}}; [[ ${v} == [0-9]* ]] && c=${v%%[^0-9]*} || c=${v%%[^a-zA-Z]*}; v=${v:${#c}}; comp+=("${s}" "${c}"); done } __eapi8_src_prepare () { local f; if ___is_indexed_array_var PATCHES; then [[ ${#PATCHES[@]} -gt 0 ]] && eapply -- "${PATCHES[@]}"; else if [[ -n ${PATCHES} ]]; then eapply -- ${PATCHES}; fi; fi; eapply_user } _clang_fullversion () { local ver="$1"; shift; set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__"); eval echo "$ver" } _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 } _filter-hardened () { local f; for f in "$@"; do case "${f}" in -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie) gcc-specs-pie || continue; if ! is-flagq -nopie && ! is-flagq -no-pie; then if test-flags -nopie > /dev/null; then append-flags -nopie; else append-flags -no-pie; fi; fi ;; -fstack-protector) gcc-specs-ssp || continue; is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector) ;; -fstack-protector-all) gcc-specs-ssp-to-all || continue; is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all) ;; -fno-strict-overflow) gcc-specs-nostrict || continue; is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow) ;; esac; done } _filter-var () { local f x var=$1 new=(); shift; for f in ${!var}; do for x in "$@"; do [[ ${f} == ${x} ]] && continue 2; done; new+=("${f}"); done; export ${var}="${new[*]}" } _gcc-install-dir () { echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')" } _gcc-specs-directive_raw () { local cc=$(tc-getCC); local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}'); ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 } $1=="*"directive":" { pspec=spec; spec=""; outside=0; next } outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next } spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next } { spec=spec $0 } END { print spec }'; return 0 } _gcc-specs-exists () { [[ -f $(_gcc-install-dir)/$1 ]] } _gcc_fullversion () { local ver="$1"; shift; set -- $($(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__"); eval echo "$ver" } _is_flagq () { local x var="$1[*]"; for x in ${!var}; do [[ ${x} == $2 ]] && return 0; done; return 1 } _multibuild_create_source_copy () { einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}"; cp -p -R "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die } _multibuild_run () { local i=1; while [[ ${!i} == _* ]]; do (( i += 1 )); done; [[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}"; "${@}" } _multilib_multibuild_wrapper () { debug-print-function ${FUNCNAME} "${@}"; local ABI=${MULTIBUILD_VARIANT#*.}; local -r MULTILIB_ABI_FLAG=${MULTIBUILD_VARIANT%.*}; multilib_toolchain_setup "${ABI}"; readonly ABI; "${@}" } _setup-allowed-flags () { ALLOWED_FLAGS=(-pipe -O '-O[12sg]' -mcpu -march -mtune '-fstack-protector*' '-fsanitize*' '-fno-sanitize*' '-fstack-check*' -fno-stack-check -fbounds-check -fbounds-checking -fno-strict-overflow -fno-PIE -fno-pie -nopie -no-pie -fno-unit-at-a-time -g '-g[0-9]' -ggdb '-ggdb[0-9]' -gdwarf '-gdwarf-*' -gstabs -gstabs+ -gz -fno-ident -fpermissive -frecord-gcc-switches '-fdiagnostics*' '-fplugin*' '-W*' -w '-[DUILR]*' '-Wl,*' '-fuse-ld'); ALLOWED_FLAGS+=('-fno-stack-protector*' '-fabi-version=*' -fno-strict-aliasing -fno-bounds-check -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer '-fno-builtin*'); ALLOWED_FLAGS+=(-mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow -mno-popcnt -mno-abm -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mfloat-gprs -mspe -mno-spe -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mx32 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt '-m*-toc' -mfloat-abi -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-rm7000 -mno-fix-rm7000 -mfix-r10000 -mno-fix-r10000 -mr10k-cache-barrier -mthumb -marm -mno-fma4 -mno-movbe -mno-xop -mno-lwp -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm -mno-avx2 -mno-bmi2 -mno-fma -mno-lzcnt -mno-fxsr -mno-hle -mno-rtm -mno-xsave -mno-xsaveopt -mno-avx512cd -mno-avx512er -mno-avx512f -mno-avx512pf -mno-sha); ALLOWED_FLAGS+=(-mstackrealign) } _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}" } _test-flag-PROG () { local comp=$1; local lang=$2; shift 2; if [[ -z ${comp} ]]; then return 1; fi; if [[ -z $1 ]]; then return 1; fi; comp=($(tc-get${comp})); if ! type -p ${comp[0]} > /dev/null; then return 1; fi; local in_src in_ext cmdline_extra=(); case "${lang}" in c) in_ext='c'; in_src='int main(void) { return 0; }'; cmdline_extra+=(-xc -c) ;; c++) in_ext='cc'; in_src='int main(void) { return 0; }'; cmdline_extra+=(-xc++ -c) ;; f77) in_ext='f'; in_src=' end'; cmdline_extra+=(-xf77 -c) ;; f95) in_ext='f90'; in_src='end'; cmdline_extra+=(-xf95 -c) ;; c+ld) in_ext='c'; in_src='int main(void) { return 0; }'; cmdline_extra+=(-xc) ;; esac; local test_in=${T}/test-flag.${in_ext}; local test_out=${T}/test-flag.exe; printf "%s\n" "${in_src}" > "${test_in}" || die "Failed to create '${test_in}'"; local cmdline=("${comp[@]}" -Werror "$@" "${cmdline_extra[@]}" "${test_in}" -o "${test_out}"); if ! "${cmdline[@]}" &> /dev/null; then cmdline+=(-Qunused-arguments); "${cmdline[@]}" &> /dev/null; fi } _test-flags-PROG () { local comp=$1; local flags=(); local x; shift; [[ -z ${comp} ]] && return 1; while (( $# )); do case "$1" in --param | -B) if test-flag-${comp} "$1" "$2"; then flags+=("$1" "$2"); fi; shift 2 ;; *) if test-flag-${comp} "$1"; then flags+=("$1"); fi; shift 1 ;; esac; done; echo "${flags[*]}"; [[ ${#flags[@]} -gt 0 ]] } all-flag-vars () { echo {ADA,C,CPP,CXX,CCAS,F,FC,LD}FLAGS } append-cflags () { [[ $# -eq 0 ]] && return 0; export CFLAGS+=" $*"; return 0 } append-cppflags () { [[ $# -eq 0 ]] && return 0; export CPPFLAGS+=" $*"; return 0 } append-cxxflags () { [[ $# -eq 0 ]] && return 0; export CXXFLAGS+=" $*"; return 0 } append-fflags () { [[ $# -eq 0 ]] && return 0; export FFLAGS+=" $*"; export FCFLAGS+=" $*"; return 0 } append-flags () { [[ $# -eq 0 ]] && return 0; case " $* " in *' '-[DIU]*) eqawarn 'please use append-cppflags for preprocessor flags' ;; *' '-L* | *' '-Wl,*) eqawarn 'please use append-ldflags for linker flags' ;; esac; append-cflags "$@"; append-cxxflags "$@"; append-fflags "$@"; return 0 } append-ldflags () { [[ $# -eq 0 ]] && return 0; local flag; for flag in "$@"; do [[ ${flag} == -l* ]] && eqawarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS"; done; export LDFLAGS="${LDFLAGS} $*"; return 0 } append-lfs-flags () { [[ $# -ne 0 ]] && die "append-lfs-flags takes no arguments"; append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE } append-libs () { [[ $# -eq 0 ]] && return 0; local flag; for flag in "$@"; do if [[ -z "${flag// }" ]]; then eqawarn "Appending an empty argument to LIBS is invalid! Skipping."; continue; fi; case $flag in -[lL]*) export LIBS="${LIBS} ${flag}" ;; -*) eqawarn "Appending non-library to LIBS (${flag}); Other linker flags should be passed via LDFLAGS"; export LIBS="${LIBS} ${flag}" ;; *) export LIBS="${LIBS} -l${flag}" ;; esac; done; return 0 } 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' "$@" } cleanup_chk () { local libdir="$1"; shift 1; local i; for i in ${NSS_CHK_SIGN_LIBS}; do local libfname="${libdir}/lib${i}.so"; [ ! -f "${libfname}" -a -f "${libfname}.chk" ] && rm -f "${libfname}.chk"; done } 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 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 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 ) } filter-flags () { _filter-hardened "$@"; local v; for v in $(all-flag-vars); do _filter-var ${v} "$@"; done; return 0 } filter-ldflags () { _filter-var LDFLAGS "$@"; return 0 } filter-lfs-flags () { [[ $# -ne 0 ]] && die "filter-lfs-flags takes no arguments"; filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE } filter-mfpmath () { local orig_mfpmath new_math prune_math; orig_mfpmath=$(get-flag -mfpmath); new_math=$(get-flag mfpmath); new_math=${new_math/both/387,sse}; new_math=" ${new_math//[,+]/ } "; prune_math=""; for prune_math in "$@"; do new_math=${new_math/ ${prune_math} / }; done; new_math=$(echo ${new_math}); new_math=${new_math// /,}; if [[ -z ${new_math} ]]; then filter-flags ${orig_mfpmath}; else replace-flags ${orig_mfpmath} -mfpmath=${new_math}; fi; return 0 } gcc-fullversion () { _gcc_fullversion '$1.$2.$3' "$@" } gcc-major-version () { _gcc_fullversion '$1' "$@" } gcc-micro-version () { _gcc_fullversion '$3' "$@" } gcc-minor-version () { _gcc_fullversion '$2' "$@" } gcc-specs-directive () { local directive subdname subdirective; directive="$(_gcc-specs-directive_raw $1)"; while [[ ${directive} == *%\(*\)* ]]; do subdname=${directive/*%\(}; subdname=${subdname/\)*}; subdirective="$(_gcc-specs-directive_raw ${subdname})"; directive="${directive//\%(${subdname})/${subdirective}}"; done; echo "${directive}"; return 0 } gcc-specs-nostrict () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]] } gcc-specs-now () { local directive; directive=$(gcc-specs-directive link_command); [[ "${directive/\{!nonow:}" != "${directive}" ]] } gcc-specs-pie () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/\{!nopie:}" != "${directive}" ]] } gcc-specs-relro () { local directive; directive=$(gcc-specs-directive link_command); [[ "${directive/\{!norelro:}" != "${directive}" ]] } gcc-specs-ssp () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]] } gcc-specs-ssp-to-all () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]] } gcc-specs-stack-check () { local directive; directive=$(gcc-specs-directive cc1); [[ "${directive/\{!fno-stack-check:}" != "${directive}" ]] } gcc-version () { _gcc_fullversion '$1.$2' "$@" } gen_usr_ldscript () { 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* | *-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 } generate_chk () { local shlibsign="$1"; local libdir="$2"; einfo "Resigning core NSS libraries for FIPS validation"; shift 2; local i; for i in ${NSS_CHK_SIGN_LIBS}; do local libname=lib${i}.so; local chkname=lib${i}.chk; "${shlibsign}" -i "${libdir}"/${libname} -o "${libdir}"/${chkname}.tmp && mv -f "${libdir}"/${chkname}.tmp "${libdir}"/${chkname} || die "Failed to sign ${libname}"; done } get-flag () { [[ $# -ne 1 ]] && die "usage: "; local f var findflag="$1"; for var in $(all-flag-vars); do for f in ${!var}; do if [ "${f/${findflag}}" != "${f}" ]; then printf "%s\n" "${f/-${findflag}=}"; return 0; fi; done; done; return 1 } get_abi_CFLAGS () { get_abi_var CFLAGS "$@" } get_abi_CHOST () { get_abi_var CHOST "$@" } get_abi_CTARGET () { get_abi_var CTARGET "$@" } get_abi_FAKE_TARGETS () { get_abi_var FAKE_TARGETS "$@" } get_abi_LDFLAGS () { get_abi_var LDFLAGS "$@" } get_abi_LIBDIR () { get_abi_var LIBDIR "$@" } get_abi_var () { local flag=$1; local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}}; local var="${flag}_${abi}"; echo ${!var} } get_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 " 1>&2; die "in_iuse() called without a parameter"; fi; local liuse=(${IUSE_EFFECTIVE}); has "${use}" "${liuse[@]#[+-]}" } is-flag () { is-flagq "$@" && echo true } is-flagq () { [[ -n $2 ]] && die "Usage: is-flag "; local var; for var in $(all-flag-vars); do _is_flagq ${var} "$1" && return 0; done; return 1 } is-ldflag () { is-ldflagq "$@" && echo true } is-ldflagq () { [[ -n $2 ]] && die "Usage: is-ldflag "; _is_flagq LDFLAGS $1 } 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_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-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} == 5 ]] || 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%%*-}; 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 ;; 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*) export CFLAGS_lp64d=${CFLAGS_lp64d--mabi=lp64d -march=rv64imafdc}; 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}; : ${MULTILIB_ABIS=lp64d lp64 ilp32d ilp32}; : ${DEFAULT_ABI=lp64d} ;; riscv32*) export CFLAGS_ilp32d=${CFLAGS_ilp32d--mabi=ilp32d}; 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}; : ${MULTILIB_ABIS=ilp32d ilp32}; : ${DEFAULT_ABI=ilp32d} ;; 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} == 5 ]] || 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__) || defined(__ppc__) # if defined(__powerpc64__) || defined(__ppc64__) # 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_compile () { local buildbits mybits; case "${ABI}" in n32) mybits="USE_N32=1" ;; x32) mybits="USE_X32=1" ;; s390x | *64) mybits="USE_64=1" ;; ${DEFAULT_ABI}) einfo "Running compilation test to determine bit'ness"; mybits=$(nssbits) ;; esac; if tc-is-cross-compiler; then buildbits=$(nssbits BUILD_); fi; local makeargs=(CC="$(tc-getCC)" CCC="$(tc-getCXX)" AR="$(tc-getAR) rc \$@" RANLIB="$(tc-getRANLIB)" OPTIMIZER= ${mybits}); local myCPPFLAGS="${CPPFLAGS} $($(tc-getPKG_CONFIG) nspr --cflags)"; unset NSPR_INCLUDE_DIR; export NSS_ALLOW_SSLKEYLOGFILE=1; export NSS_ENABLE_WERROR=0; export BUILD_OPT=1; export NSS_USE_SYSTEM_SQLITE=1; export NSDISTMODE=copy; export FREEBL_NO_DEPEND=1; export FREEBL_LOWHASH=1; export NSS_SEED_ONLY_DEV_URANDOM=1; export USE_SYSTEM_ZLIB=1; export ZLIB_LIBS=-lz; export ASFLAGS=""; export NS_USE_GCC=1; if tc-is-gcc; then export CC_IS_GCC=1; else if tc-is-clang; then export CC_IS_CLANG=1; fi; fi; case ${ARCH} in ppc*) use cpu_flags_ppc_altivec || export NSS_DISABLE_ALTIVEC=1; use cpu_flags_ppc_vsx || export NSS_DISABLE_CRYPTO_VSX=1 ;; esac; local d; LDFLAGS="${BUILD_LDFLAGS}" XCFLAGS="${BUILD_CFLAGS}" NSPR_LIB_DIR="${T}/fakedir" emake -j1 -C coreconf CC="$(tc-getBUILD_CC)" ${buildbits-${mybits}}; makeargs+=(NSINSTALL="${PWD}/$(find -type f -name nsinstall)"); for d in . lib/dbm; do CPPFLAGS="${myCPPFLAGS}" XCFLAGS="${CFLAGS} ${CPPFLAGS}" NSPR_LIB_DIR="${T}/fakedir" emake -j1 "${makeargs[@]}" -C ${d} OS_TEST="$(nssarch)"; done } multilib_src_configure () { sed -i -e "/@libdir@/ s:lib64:$(get_libdir):" config/Makefile || die } multilib_src_install () { pushd dist > /dev/null || die; dodir /usr/$(get_libdir); cp -L */lib/*$(get_libname) "${ED}"/usr/$(get_libdir) || die "copying shared libs failed"; local i; for i in crmf freebl nssb nssckfw; do cp -L */lib/lib${i}.a "${ED}"/usr/$(get_libdir) || die "copying libs failed"; done; dodir /usr/bin; cp -L */bin/nss-config "${ED}"/usr/bin || die; dodir /usr/$(get_libdir)/pkgconfig; cp -L */lib/pkgconfig/nss.pc "${ED}"/usr/$(get_libdir)/pkgconfig || die; sed -e 's#Libs:#Libs: -lfreebl#' -e 's#Cflags:#Cflags: -I${includedir}/private#' */lib/pkgconfig/nss.pc > "${ED}"/usr/$(get_libdir)/pkgconfig/nss-softokn.pc || die "could not create nss-softokn.pc"; insinto /usr/include/nss; doins public/nss/*.{h,api}; insinto /usr/include/nss/private; doins private/nss/{blapi,alghmac,cmac}.h; popd > /dev/null || die; local f nssutils; nssutils=(shlibsign); if multilib_is_native_abi; then if use utils; then nssutils+=(addbuiltin atob baddbdir btoa certutil cmsutil conflict crlutil derdump digest makepqg mangle modutil multinit nonspr10 ocspclnt oidcalc p7content p7env p7sign p7verify pk11mode pk12util pp rsaperf selfserv signtool signver ssltap strsclnt symkeyutil tstclnt vfychain vfyserv); doman doc/nroff/*.1; fi; pushd dist/*/bin > /dev/null || die; for f in ${nssutils[@]}; do dobin ${f}; done; popd > /dev/null || die; fi; dodir /etc/prelink.conf.d; printf -- "-b ${EPREFIX}/usr/$(get_libdir)/lib%s.so\n" ${NSS_CHK_SIGN_LIBS} > "${ED}"/etc/prelink.conf.d/nss.conf } 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 } no-as-needed () { [[ $# -ne 0 ]] && die "no-as-needed takes no arguments"; case $($(tc-getLD) -v 2>&1 "${T}"/test.c || die; ${cc} ${!cppflags} ${!cflags} -c "${T}"/test.c -o "${T}/${1}test.o" || die; case $(file "${T}/${1}test.o") in *32-bit*x86-64*) echo USE_X32=1 ;; *64-bit* | *ppc64* | *x86_64*) echo USE_64=1 ;; *32-bit* | *ppc* | *i386*) ;; *) die "Failed to detect whether ${cc} builds 64bits or 32bits, disable distcc if you're using it, please" ;; esac } number_abis () { set -- `get_install_abis`; echo $# } pkg_nofetch () { default } pkg_postinst () { function multilib_pkg_postinst () { local shlibsign="${EROOT}/usr/bin/shlibsign"; "${shlibsign}" -h &> /dev/null; if [[ $? -gt 1 ]]; then shlibsign="shlibsign"; fi; generate_chk "${shlibsign}" "${EROOT}"/usr/$(get_libdir) }; multilib_foreach_abi multilib_pkg_postinst } pkg_postrm () { function multilib_pkg_postrm () { cleanup_chk "${EROOT}"/usr/$(get_libdir) }; multilib_foreach_abi multilib_pkg_postrm } pre_pkg_setup () { /usr/bin/timeshift-autosnap "before:"$P } raw-ldflags () { local x input="$@"; [[ -z ${input} ]] && input=${LDFLAGS}; set --; for x in ${input}; do case ${x} in -Wl,*) x=${x#-Wl,}; set -- "$@" ${x//,/ } ;; *) ;; esac; done; echo "$@" } replace-cpu-flags () { local newcpu="$#"; newcpu="${!newcpu}"; while [ $# -gt 1 ]; do replace-flags "-march=${1}" "-march=${newcpu}"; replace-flags "-mcpu=${1}" "-mcpu=${newcpu}"; replace-flags "-mtune=${1}" "-mtune=${newcpu}"; shift; done; return 0 } replace-flags () { [[ $# != 2 ]] && die "Usage: replace-flags "; local f var new; for var in $(all-flag-vars); do new=(); for f in ${!var}; do [[ ${f} == ${1} ]] && f=${2}; new+=("${f}"); done; export ${var}="${new[*]}"; done; return 0 } replace-sparc64-flags () { [[ $# -ne 0 ]] && die "replace-sparc64-flags takes no arguments"; local SPARC64_CPUS="ultrasparc3 ultrasparc v9"; if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; export CFLAGS CXXFLAGS } 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} } setup-allowed-flags () { [[ ${EAPI} == [567] ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}."; _setup-allowed-flags "$@" } src_compile () { multilib-minimal_src_compile "$@" } src_configure () { multilib-minimal_src_configure "$@" } src_install () { multilib-minimal_src_install "$@" } src_prepare () { default; if use cacert; then eapply -p2 "${DISTDIR}"/nss-cacert-class1-class3-r2.patch; fi; pushd coreconf > /dev/null || die; echo 'INCLUDES += -I$(DIST)/include/dbm' >> headers.mk || die "failed to append include"; sed -e '/CORE_DEPTH/s:SOURCE_PREFIX.*$:SOURCE_PREFIX = $(CORE_DEPTH)/dist:' -i source.mk || die; sed -i -e 's/\$(MKSHLIB) -o/\$(MKSHLIB) \$(LDFLAGS) -o/g' rules.mk; popd > /dev/null || die; sed -i -e "/^PREFIX =/s:= /usr:= ${EPREFIX}/usr:" config/Makefile || die; if tc-is-cross-compiler; then sed -i -e 's:"${2}"/shlibsign:shlibsign:' cmd/shlibsign/sign.sh || die; fi; sed -i -e "/CRYPTOLIB/s:\$(SOFTOKEN_LIB_DIR):../freebl/\$(OBJDIR):" lib/ssl/config.mk || die; sed -i -e "/CRYPTOLIB/s:\$(SOFTOKEN_LIB_DIR):../../lib/freebl/\$(OBJDIR):" cmd/platlibs.mk || die; multilib_copy_sources; strip-flags } src_test () { multilib-minimal_src_test "$@" } src_unpack () { default } strip-flags () { [[ $# -ne 0 ]] && die "strip-flags takes no arguments"; local x y var; local ALLOWED_FLAGS; _setup-allowed-flags; set -f; for var in $(all-flag-vars); do local new=(); for x in ${!var}; do local flag=${x%%=*}; for y in "${ALLOWED_FLAGS[@]}"; do if [[ -z ${flag%%${y}} ]]; then new+=("${x}"); break; fi; done; done; if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then new+=(-O2); fi; if [[ ${!var} != "${new[*]}" ]]; then einfo "strip-flags: ${var}: changed '${!var}' to '${new[*]}'"; fi; export ${var}="${new[*]}"; done; set +f; return 0 } strip-unsupported-flags () { [[ $# -ne 0 ]] && die "strip-unsupported-flags takes no arguments"; export CFLAGS=$(test-flags-CC ${CFLAGS}); export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}); export FFLAGS=$(test-flags-F77 ${FFLAGS}); export FCFLAGS=$(test-flags-FC ${FCFLAGS}); export LDFLAGS=$(test-flags-CCLD ${LDFLAGS}) } 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-pie () { tc-cpp-is-true "defined(__PIE__)" ${CPPFLAGS} ${CFLAGS} } tc-enables-ssp () { tc-cpp-is-true "defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS} } tc-enables-ssp-all () { tc-cpp-is-true "defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS} } tc-enables-ssp-strong () { tc-cpp-is-true "defined(__SSP_STRONG__) || defined(__SSP_ALL__)" ${CPPFLAGS} ${CFLAGS} } tc-endian () { local host=$1; [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; host=${host%%-*}; case ${host} in aarch64*be) echo big ;; aarch64) echo little ;; alpha*) echo little ;; arm*b*) echo big ;; arm*) echo little ;; cris*) echo little ;; hppa*) echo big ;; i?86*) echo little ;; ia64*) echo little ;; m68*) echo big ;; mips*l*) echo little ;; mips*) echo big ;; powerpc*le) echo little ;; powerpc*) echo big ;; 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-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 () { 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-openmp () { local base="${T}/test-tc-openmp"; cat <<-EOF > "${base}.c" #include 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 <<-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-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=$(tc-getLD "$@"); local bfd_ld="${ld%% *}.bfd"; local path_ld=$(which "${bfd_ld}" 2>/dev/null); [[ -e ${path_ld} ]] && export LD=${bfd_ld}; local fallback="true"; if tc-is-gcc; then local major=$(gcc-major-version "$@"); local minor=$(gcc-minor-version "$@"); if [[ ${major} -gt 4 ]] || [[ ${major} -eq 4 && ${minor} -ge 8 ]]; then export LDFLAGS="${LDFLAGS} -fuse-ld=bfd"; fallback="false"; fi; else if tc-is-clang; then local major=$(clang-major-version "$@"); local minor=$(clang-minor-version "$@"); if [[ ${major} -gt 3 ]] || [[ ${major} -eq 3 && ${minor} -ge 5 ]]; then export LDFLAGS="${LDFLAGS} -fuse-ld=bfd"; fallback="false"; fi; fi; fi; if [[ ${fallback} == "true" ]]; 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"; fi; 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 <<-EOF > "${base}.c" 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-ld-is-lld () { local out; 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() { 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 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 } 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 } test-flag-CC () { _test-flag-PROG CC c "$@" } test-flag-CCLD () { _test-flag-PROG CC c+ld "$@" } test-flag-CXX () { _test-flag-PROG CXX c++ "$@" } test-flag-F77 () { _test-flag-PROG F77 f77 "$@" } test-flag-FC () { _test-flag-PROG FC f95 "$@" } test-flag-PROG () { [[ ${EAPI} == [567] ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}."; _test-flag-PROG "$@" } test-flags () { test-flags-CC "$@" } test-flags-CC () { _test-flags-PROG CC "$@" } test-flags-CCLD () { _test-flags-PROG CCLD "$@" } test-flags-CXX () { _test-flags-PROG CXX "$@" } test-flags-F77 () { _test-flags-PROG F77 "$@" } test-flags-FC () { _test-flags-PROG FC "$@" } test-flags-PROG () { [[ ${EAPI} == [567] ]] || die "Internal function ${FUNCNAME} is not available in EAPI ${EAPI}."; _test-flags-PROG "$@" } test_version_info () { if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then return 0; else return 1; fi } ver_cut () { local range=${1}; local v=${2:-${PV}}; local start end; local -a comp; __eapi7_ver_split "${v}"; local max=$((${#comp[@]}/2)); __eapi7_ver_parse_range "${range}" "${max}"; local IFS=; if [[ ${start} -gt 0 ]]; then start=$(( start*2 - 1 )); fi; echo "${comp[*]:start:end*2-start}" } ver_rs () { local v; (( ${#} & 1 )) && v=${@: -1} || v=${PV}; local start end i; local -a comp; __eapi7_ver_split "${v}"; local max=$((${#comp[@]}/2 - 1)); while [[ ${#} -ge 2 ]]; do __eapi7_ver_parse_range "${1}" "${max}"; for ((i = start*2; i <= end*2; i+=2 )) do [[ ${i} -eq 0 && -z ${comp[i]} ]] && continue; comp[i]=${2}; done; shift 2; done; local IFS=; echo "${comp[*]}" } ver_test () { local va op vb; if [[ $# -eq 3 ]]; then va=${1}; shift; else va=${PVR}; fi; [[ $# -eq 2 ]] || die "${FUNCNAME}: bad number of arguments"; op=${1}; vb=${2}; case ${op} in -eq | -ne | -lt | -le | -gt | -ge) ;; *) die "${FUNCNAME}: invalid operator: ${op}" ;; esac; __eapi7_ver_compare "${va}" "${vb}"; test $? "${op}" 2 }