Skip to content

Instantly share code, notes, and snippets.

@baybal
Created May 23, 2021 11:58
Show Gist options
  • Save baybal/d94e0c16bf799b82bb4cddb7f7eb81d2 to your computer and use it in GitHub Desktop.
Save baybal/d94e0c16bf799b82bb4cddb7f7eb81d2 to your computer and use it in GitHub Desktop.
declare -x ABI="amd64"
declare -x ABI_MIPS=""
declare -x ABI_PPC=""
declare -x ABI_S390=""
declare -x ABI_X86="64"
declare -x ADA_TARGET=""
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 ANT_HOME="/usr/share/ant"
declare -x APACHE2_MODULES=""
declare -x APACHE2_MPMS=""
declare -x ARCH="amd64"
declare -- BASHRCD_CCACHE_BASEDIR="/var/tmp/portage"
declare -- BASHRCD_CCACHE_COMPRESS="true"
declare -- BASHRCD_CCACHE_DEPEND="true"
declare -- BASHRCD_CCACHE_DIR="/var/cache/ccache"
declare -- BASHRCD_CCACHE_NOHASHDIR="true"
declare -- BASHRCD_CCACHE_PREFIX="icecc"
declare -- BASHRCD_CCACHE_PREFIX_CPP="icecc"
declare BDEPEND="dev-util/ninja dev-util/cmake test? (
x11-base/xorg-server[xvfb]
x11-apps/xhost
)"
declare -x BOOTSTRAP_USE="unicode internal-glib pkg-config split-usr python_targets_python3_8 multilib"
declare -- BUILD_DIR="/var/tmp/portage/dev-python/pyside2-5.15.1/work/pyside2-5.15.1_build"
declare -x CALLIGRA_FEATURES=""
declare -x CAMERAS=""
declare -x CBUILD="x86_64-pc-linux-gnu"
declare -x CFLAGS="-O3 -pipe -march=skylake -mabm -msgx -mavx256-split-unaligned-load -mavx256-split-unaligned-store -fomit-frame-pointer -fgraphite-identity -floop-nest-optimize -fipa-pta -fdevirtualize-at-ltrans -fno-semantic-interposition -flto=6 -fuse-linker-plugin -Wl,-O1 -Wl,--as-needed -Wl,-O2 -Wl,--hash-style=gnu -Wl,--relax -Wl,--sort-common"
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 -- CMAKE_BINARY="cmake"
declare -- CMAKE_BUILD_TYPE="Gentoo"
declare -x CMAKE_MAKEFILE_GENERATOR="ninja"
declare -- CMAKE_REMOVE_MODULES_LIST="FindBLAS FindLAPACK"
declare -- CMAKE_USE_DIR="/var/tmp/portage/dev-python/pyside2-5.15.1/work/pyside-setup-opensource-src-5.15.1/sources/pyside2"
declare -- CMAKE_VERBOSE="ON"
declare -- CMAKE_WARN_UNUSED_CLI="yes"
declare -x COLLECTD_PLUGINS=""
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="-O3 -pipe -march=skylake -mabm -msgx -mavx256-split-unaligned-load -mavx256-split-unaligned-store -fomit-frame-pointer -fgraphite-identity -floop-nest-optimize -fipa-pta -fdevirtualize-at-ltrans -fno-semantic-interposition -flto=6 -fuse-linker-plugin -Wl,-O1 -Wl,--as-needed -Wl,-O2 -Wl,--hash-style=gnu -Wl,--relax -Wl,--sort-common"
declare -x DEFAULT_ABI="amd64"
declare -x DEFINED_PHASES=" compile configure install prepare test"
declare DEPEND="python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) >=dev-lang/python-exec-2:=[python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_7(-),-python_single_target_python3_8(-)]
>=dev-python/shiboken2-5.15.1[python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_7(-),-python_single_target_python3_8(-)]
dev-qt/qtcore:5=
dev-qt/qtopengl:5=
dev-qt/qtserialport:5=
3d? ( >=dev-qt/qt3d-5.15:5[qml?] )
charts? ( >=dev-qt/qtcharts-5.15:5[qml?] )
concurrent? ( >=dev-qt/qtconcurrent-5.15:5 )
datavis? ( >=dev-qt/qtdatavis3d-5.15:5[qml?] )
designer? ( >=dev-qt/designer-5.15:5 )
gui? ( >=dev-qt/qtgui-5.15:5[gles2-only?] )
help? ( >=dev-qt/qthelp-5.15:5 )
location? ( >=dev-qt/qtlocation-5.15:5 )
multimedia? ( >=dev-qt/qtmultimedia-5.15:5[qml?,widgets?] )
network? ( >=dev-qt/qtnetwork-5.15:5 )
positioning? ( >=dev-qt/qtpositioning-5.15:5[qml?] )
printsupport? ( >=dev-qt/qtprintsupport-5.15:5 )
qml? ( >=dev-qt/qtdeclarative-5.15:5[widgets?] )
script? ( >=dev-qt/qtscript-5.15:5 )
scxml? ( >=dev-qt/qtscxml-5.15:5 )
sensors? ( >=dev-qt/qtsensors-5.15:5[qml?] )
speech? ( >=dev-qt/qtspeech-5.15:5 )
sql? ( >=dev-qt/qtsql-5.15:5 )
svg? ( >=dev-qt/qtsvg-5.15:5 )
testlib? ( >=dev-qt/qttest-5.15:5 )
webchannel? ( >=dev-qt/qtwebchannel-5.15:5[qml?] )
webengine? ( >=dev-qt/qtwebengine-5.15:5[widgets?] )
websockets? ( >=dev-qt/qtwebsockets-5.15:5[qml?] )
widgets? ( >=dev-qt/qtwidgets-5.15:5 )
x11extras? ( >=dev-qt/qtx11extras-5.15:5 )
xml? ( >=dev-qt/qtxml-5.15:5 )
xmlpatterns? ( >=dev-qt/qtxmlpatterns-5.15:5[qml?] )
test? ( x11-misc/xvfb-run )
"
declare DESCRIPTION="Python bindings for the Qt framework"
declare -- DESKTOP_DATABASE_DIR="/usr/share/applications"
declare -x DEVIRTLTO="-fdevirtualize-at-ltrans"
declare -x DIROPTIONS="-m0755"
declare -x EAPI="7"
declare -x ELIBC="glibc"
declare -x ENLIGHTENMENT_MODULES=""
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="1621770957.787212"
declare -- EPOCHSECONDS="1621770957"
declare -x EXEOPTIONS="-m0755"
declare -x F77FLAGS="-O3 -pipe -march=skylake -mabm -msgx -mavx256-split-unaligned-load -mavx256-split-unaligned-store -fomit-frame-pointer -fgraphite-identity -floop-nest-optimize -fipa-pta -fdevirtualize-at-ltrans -fno-semantic-interposition -flto=6 -fuse-linker-plugin -Wl,-O1 -Wl,--as-needed -Wl,-O2 -Wl,--hash-style=gnu -Wl,--relax -Wl,--sort-common"
declare -x FCFLAGS="-O3 -pipe -march=skylake -mabm -msgx -mavx256-split-unaligned-load -mavx256-split-unaligned-store -fomit-frame-pointer -fgraphite-identity -floop-nest-optimize -fipa-pta -fdevirtualize-at-ltrans -fno-semantic-interposition -flto=6 -fuse-linker-plugin -Wl,-O1 -Wl,--as-needed -Wl,-O2 -Wl,--hash-style=gnu -Wl,--relax -Wl,--sort-common"
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="-O3 -pipe -march=skylake -mabm -msgx -mavx256-split-unaligned-load -mavx256-split-unaligned-store -fomit-frame-pointer -fgraphite-identity -floop-nest-optimize -fipa-pta -fdevirtualize-at-ltrans -fno-semantic-interposition -flto=6 -fuse-linker-plugin -Wl,-O1 -Wl,--as-needed -Wl,-O2 -Wl,--hash-style=gnu -Wl,--relax -Wl,--sort-common"
declare -x FFTOOLS=""
declare -a FLAG_FILTER_CFLAGS=()
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]="-fstack-clash-protection" [33]="-ftree*" [34]="-funsafe-loop*" [35]="-fuse-linker-plugin" [36]="-fvect-cost-model" [37]="-fweb" [38]="-fwhole-program" [39]="-malign-data*" [40]="-mfunction-return*" [41]="-mindirect-branch*" [42]="-mvectorize*" [43]="-Wl,-z,retpolineplt")
declare -x FLTO="-flto=6"
declare -x GCC_SPECS=""
declare -x GPSD_PROTOCOLS=""
declare -x GRAPHITE="-fgraphite-identity -floop-nest-optimize"
declare -x GRUB_PLATFORMS=""
declare -x GSETTINGS_BACKEND="dconf"
declare -x GST_VAAPI_ALL_DRIVERS="1"
declare -x GTK_IM_MODULE="ibus"
declare HOMEPAGE="https://wiki.qt.io/PySide2"
declare -x ICECC_ENV_COMPRESSION="zstd"
declare -x ICECC_REMOTE_CPP="1"
declare -x ICECC_VERSION="/var/lib/icecream/75c8ef08387e6b9e494a4ce78dd6ac99.tar.zst"
declare -x INHERITED=" toolchain-funcs multilib multiprocessing ninja-utils edos2unix l10n wrapper eutils flag-o-matic xdg-utils cmake multibuild python-utils-r1 python-r1 virtualx"
declare -x INPUT_DEVICES=""
declare -x INSOPTIONS="-m0644"
declare -x IPAPTA="-fipa-pta"
declare IUSE="
3d charts concurrent datavis designer gles2-only +gui help location
multimedia +network positioning printsupport qml quick script scripttools
scxml sensors speech sql svg test testlib webchannel webengine websockets
+widgets x11extras xml xmlpatterns
python_targets_python3_7 python_targets_python3_8 test"
declare -x IUSE_EFFECTIVE="3d abi_x86_64 alpha amd64 amd64-fbsd amd64-linux arm arm64 arm64-macos charts concurrent datavis designer 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 gles2-only gui help hppa ia64 kernel_AIX kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux location m68k mips multimedia network positioning ppc ppc-macos ppc64 ppc64-linux prefix prefix-guest prefix-stack printsupport python_targets_python3_7 python_targets_python3_8 qml quick riscv s390 script scripttools scxml sensors sparc sparc-solaris sparc64-solaris speech sql svg test testlib userland_BSD userland_GNU webchannel webengine websockets widgets x11extras x64-cygwin x64-macos x64-solaris x64-winnt x86 x86-fbsd x86-linux x86-solaris x86-winnt xml xmlpatterns"
declare -x IUSE_IMPLICIT="abi_x86_64 prefix prefix-guest prefix-stack"
declare -- KEEPPGO=":"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="amd64"
declare -x KEYWORDS="~amd64 ~arm64 x86"
declare -x L10N=""
declare -x LANG="en_IN.utf8"
declare -x LANGUAGE="en_GB.utf8"
declare -x LCD_DEVICES=""
declare -x LC_COLLATE="C"
declare -x LC_MESSAGES="en_GB.utf8"
declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--as-needed -Wl,-O2 -Wl,--hash-style=gnu -Wl,--relax -Wl,--sort-common -O3 -pipe -march=skylake -mabm -msgx -mavx256-split-unaligned-load -mavx256-split-unaligned-store -fomit-frame-pointer -fgraphite-identity -floop-nest-optimize -fipa-pta -fdevirtualize-at-ltrans -fno-semantic-interposition -flto=6 -fuse-linker-plugin"
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 LESSCOLOR="yes"
declare -x LESSCOLORIZER="highlight --force -O truecolor --style aiseered"
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 LIBVA_DRIVER_NAME="iHD"
declare -x LICENSE="|| ( GPL-2 GPL-3+ LGPL-3 )"
declare -x LIRC_DEVICES=""
declare -x LLVM_TARGETS=""
declare -x LUA_SINGLE_TARGET=""
declare -x LUA_TARGETS=""
declare -x MAIL="/var/mail/root"
declare -x MAKEOPTS="-j36 --load-average=16"
declare -x MANPAGER="manpager"
declare -x MESA_LOADER_DRIVER_OVERRIDE="iris"
declare -x MICROCODE_SIGNATURES="-S"
declare -- MIMEINFO_DATABASE_DIR="/usr/share/mime"
declare -x MONKEYD_PLUGINS=""
declare -x MULTILIB_ABIS="amd64"
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 -- MY_P="pyside-setup-opensource-src-5.15.1"
declare -x NGINX_MODULES_HTTP=""
declare -x NGINX_MODULES_MAIL=""
declare -x NGINX_MODULES_STREAM=""
declare -x NINJAFLAGS="-j36 --load-average=16"
declare -x NOCOMMON="-fno-common"
declare -x NOPLT="-fno-plt"
declare -x NTHREADS="6"
declare -x OFED_DRIVERS=""
declare -x OFFICE_IMPLEMENTATION=""
declare -x OPENCL_PROFILE="ocl-icd"
declare -x OPENGL_PROFILE="xorg-x11"
declare -x OPENMPI_FABRICS=""
declare -x OPENMPI_OFED_FEATURES=""
declare -x OPENMPI_RM=""
declare -x PATH="/usr/lib/ccache/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/11/bin"
declare PDEPEND=""
declare -- PGO_DIR="/var/cache/pgo/dev-python:pyside2-5.15.1"
declare -- PGO_PARENT="/var/cache/pgo"
declare -x PGSSLROOTCERT="/etc/ssl/cert.pem"
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/pyside2-5.15.1/html")
declare -a PORTAGE_DOSTRIP=([0]="/")
declare -a PORTAGE_DOSTRIP_SKIP=()
declare -x PORTAGE_NICENESS="15"
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 -x PROPERTIES=""
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -a PYTHON_COMPAT=([0]="python3_7" [1]="python3_8")
declare -- PYTHON_DEPS="python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) >=dev-lang/python-exec-2:=[python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_7(-),-python_single_target_python3_8(-)]"
declare -- PYTHON_REQUIRED_USE="|| ( python_targets_python3_7 python_targets_python3_8 )"
declare -x PYTHON_SINGLE_TARGET=""
declare -x PYTHON_TARGETS="python3_8"
declare -- PYTHON_USEDEP="python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_7(-),-python_single_target_python3_8(-)"
declare -x QEMU_SOFTMMU_TARGETS=""
declare -x QEMU_USER_TARGETS=""
declare -x QT_AUTO_SCREEN_SCALE_FACTOR="0"
declare -x QT_IM_MODULE="ibus"
declare -- QT_PV="5.15:5"
declare -x QT_SCALE_FACTOR="1"
declare RDEPEND="python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) >=dev-lang/python-exec-2:=[python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_7(-),-python_single_target_python3_8(-)]
>=dev-python/shiboken2-5.15.1[python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_7(-),-python_single_target_python3_8(-)]
dev-qt/qtcore:5=
dev-qt/qtopengl:5=
dev-qt/qtserialport:5=
3d? ( >=dev-qt/qt3d-5.15:5[qml?] )
charts? ( >=dev-qt/qtcharts-5.15:5[qml?] )
concurrent? ( >=dev-qt/qtconcurrent-5.15:5 )
datavis? ( >=dev-qt/qtdatavis3d-5.15:5[qml?] )
designer? ( >=dev-qt/designer-5.15:5 )
gui? ( >=dev-qt/qtgui-5.15:5[gles2-only?] )
help? ( >=dev-qt/qthelp-5.15:5 )
location? ( >=dev-qt/qtlocation-5.15:5 )
multimedia? ( >=dev-qt/qtmultimedia-5.15:5[qml?,widgets?] )
network? ( >=dev-qt/qtnetwork-5.15:5 )
positioning? ( >=dev-qt/qtpositioning-5.15:5[qml?] )
printsupport? ( >=dev-qt/qtprintsupport-5.15:5 )
qml? ( >=dev-qt/qtdeclarative-5.15:5[widgets?] )
script? ( >=dev-qt/qtscript-5.15:5 )
scxml? ( >=dev-qt/qtscxml-5.15:5 )
sensors? ( >=dev-qt/qtsensors-5.15:5[qml?] )
speech? ( >=dev-qt/qtspeech-5.15:5 )
sql? ( >=dev-qt/qtsql-5.15:5 )
svg? ( >=dev-qt/qtsvg-5.15:5 )
testlib? ( >=dev-qt/qttest-5.15:5 )
webchannel? ( >=dev-qt/qtwebchannel-5.15:5[qml?] )
webengine? ( >=dev-qt/qtwebengine-5.15:5[widgets?] )
websockets? ( >=dev-qt/qtwebsockets-5.15:5[qml?] )
widgets? ( >=dev-qt/qtwidgets-5.15:5 )
x11extras? ( >=dev-qt/qtx11extras-5.15:5 )
xml? ( >=dev-qt/qtxml-5.15:5 )
xmlpatterns? ( >=dev-qt/qtxmlpatterns-5.15:5[qml?] )
"
declare REPOSITORY
declare REQUIRED_USE="|| ( python_targets_python3_7 python_targets_python3_8 )
3d? ( gui network )
charts? ( widgets )
datavis? ( gui )
designer? ( widgets xml )
gles2-only? ( gui )
help? ( widgets )
location? ( positioning )
multimedia? ( gui network )
printsupport? ( widgets )
qml? ( gui network )
quick? ( qml )
scripttools? ( gui script widgets )
speech? ( multimedia )
sql? ( widgets )
svg? ( widgets )
testlib? ( widgets )
webengine? (
location quick
widgets? ( gui network printsupport webchannel )
)
websockets? ( network )
widgets? ( gui )
x11extras? ( gui )
"
declare -x 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 -x RUBY_TARGETS=""
declare -x S="/var/tmp/portage/dev-python/pyside2-5.15.1/work/pyside-setup-opensource-src-5.15.1/sources/pyside2"
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_PREDICT="/var/tmp/portage/dev-python/pyside2-5.15.1/homedir:/dev/crypto:/var/cache/man:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/dev/random:/proc/self/coredump_filter:/var/cache/fontconfig:/dev/nvidiactl:/dev/nvidia-uvm:/dev/ati/card:/dev/dri/card:/dev/dri/card0:/dev/dri/renderD128"
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/cache/sccache/:/var/tmp/:/var/tmp/portage:/var/tmp/portage/dev-python/pyside2-5.15.1/homedir/.bash_history"
declare -x SANE_BACKENDS=""
declare -x SEMINTERPOS="-fno-semantic-interposition"
declare -x SHELL="/bin/bash"
declare -x SLOT="0"
declare SRC_URI="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-5.15.1-src/pyside-setup-opensource-src-5.15.1.tar.xz"
declare -x SUDO_COMMAND="/usr/bin/emerge freecad -va"
declare -x SUDO_GID="100"
declare -x SUDO_UID="1000"
declare -x SUDO_USER="baybal"
declare -x SYMLINK_LIB="no"
declare -x TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1"
declare -x USE="abi_x86_64 amd64 elibc_glibc gles2-only gui kernel_linux network python_targets_python3_8 svg userland_GNU widgets"
declare -x USERLAND="GNU"
declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
declare -x USE_EXPAND_UNPREFIXED="ARCH"
declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm 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 UWSGI_PLUGINS=""
declare -x VIDEO_CARDS=""
declare -- VIRTUALX_COMMAND="emake"
declare -- VIRTUALX_DEPEND="
x11-base/xorg-server[xvfb]
x11-apps/xhost
"
declare -- VIRTUALX_REQUIRED="test"
declare -x VISUAL="/bin/nano"
declare -x VOICEMAIL_STORAGE=""
declare -x VTKHOME="/usr"
declare -x VTK_DATA_ROOT="/usr/share/vtk/data"
declare -x VTK_DIR="/usr/lib64/vtk-8.2"
declare -x XDG_CACHE_HOME="/var/tmp/portage/dev-python/pyside2-5.15.1/homedir/.cache"
declare -x XDG_CONFIG_DIRS="/etc/xdg"
declare -x XDG_CONFIG_HOME="/var/tmp/portage/dev-python/pyside2-5.15.1/homedir/.config"
declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share"
declare -x XDG_DATA_HOME="/var/tmp/portage/dev-python/pyside2-5.15.1/homedir/.local/share"
declare -x XDG_RUNTIME_DIR="/var/tmp/portage/dev-python/pyside2-5.15.1/temp/run"
declare -x XFCE_PLUGINS=""
declare -x XMODIFIERS="@im-ibus"
declare -x XSESSION="Xfce Session"
declare -x XTABLES_ADDONS=""
declare -- _CMAKE_ECLASS="1"
declare -- _CMAKE_SRC_PREPARE_HAS_RUN="1"
declare -- _EUTILS_ECLASS="1"
declare -x _E_DESTTREE_="/usr"
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -x _E_INSDESTTREE_=""
declare -- _FLAG_O_MATIC_ECLASS="1"
declare -- _L10N_ECLASS="1"
declare -- _MULTIBUILD="1"
declare -- _MULTILIB_ECLASS="1"
declare -- _MULTIPROCESSING_ECLASS="1"
declare -- _NINJA_UTILS_ECLASS="1"
declare -a _PYTHON_ALL_IMPLS=([0]="pypy3" [1]="python3_7" [2]="python3_8" [3]="python3_9" [4]="python3_10")
declare -a _PYTHON_HISTORICAL_IMPLS=([0]="jython2_7" [1]="pypy" [2]="pypy1_8" [3]="pypy1_9" [4]="pypy2_0" [5]="python2_5" [6]="python2_6" [7]="python2_7" [8]="python3_1" [9]="python3_2" [10]="python3_3" [11]="python3_4" [12]="python3_5" [13]="python3_6")
declare -- _PYTHON_R1="1"
declare -a _PYTHON_SUPPORTED_IMPLS=([0]="python3_7" [1]="python3_8")
declare -a _PYTHON_UNSUPPORTED_IMPLS=([0]="pypy3" [1]="python3_9" [2]="python3_10")
declare -- _PYTHON_UTILS_R1="1"
declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
declare -- _VIRTUAL_X="1"
declare -- _WRAPPER_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'
}
FlagSetUseNonGNU ()
{
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
}
_clang_fullversion ()
{
local ver="$1";
shift;
set -- $($(tc-getCPP "$@") -E -P - <<<"__clang_major__ __clang_minor__ __clang_patchlevel__");
eval echo "$ver"
}
_cmake_banned_func ()
{
die "${FUNCNAME[1]} is banned. use -D$1<related_CMake_variable>=\"\$(usex $2)\" instead"
}
_cmake_check_build_dir ()
{
: ${CMAKE_USE_DIR:=${S}};
if [[ -n ${CMAKE_IN_SOURCE_BUILD} ]]; then
BUILD_DIR="${CMAKE_USE_DIR}";
fi;
mkdir -p "${BUILD_DIR}" || die;
einfo "Working in BUILD_DIR: \"$BUILD_DIR\""
}
_cmake_modify-cmakelists ()
{
debug-print-function ${FUNCNAME} "$@";
grep -qs "<<< Gentoo configuration >>>" "${CMAKE_USE_DIR}"/CMakeLists.txt && return 0;
find "${CMAKE_USE_DIR}" -name CMakeLists.txt -exec sed -e '/^[[:space:]]*set[[:space:]]*([[:space:]]*CMAKE_BUILD_TYPE\([[:space:]].*)\|)\)/I{s/^/#_cmake_modify_IGNORE /g}' -e '/^[[:space:]]*set[[:space:]]*([[:space:]]*CMAKE_COLOR_MAKEFILE[[:space:]].*)/I{s/^/#_cmake_modify_IGNORE /g}' -e '/^[[:space:]]*set[[:space:]]*([[:space:]]*CMAKE_INSTALL_PREFIX[[:space:]].*)/I{s/^/#_cmake_modify_IGNORE /g}' -e '/^[[:space:]]*set[[:space:]]*([[:space:]]*CMAKE_VERBOSE_MAKEFILE[[:space:]].*)/I{s/^/#_cmake_modify_IGNORE /g}' -i {} + || die "${LINENO}: failed to disable hardcoded settings";
local x;
for x in $(find "${CMAKE_USE_DIR}" -name CMakeLists.txt -exec grep -l "^#_cmake_modify_IGNORE" {} +;);
do
einfo "Hardcoded definition(s) removed in $(echo "${x}" | cut -c $((${#CMAKE_USE_DIR}+2))-):";
einfo "$(grep -se '^#_cmake_modify_IGNORE' ${x} | cut -c 22-99)";
done;
cat >> "${CMAKE_USE_DIR}"/CMakeLists.txt <<-_EOF_ ||
message(STATUS "<<< Gentoo configuration >>>
Build type \${CMAKE_BUILD_TYPE}
Install path \${CMAKE_INSTALL_PREFIX}
Compiler flags:
C \${CMAKE_C_FLAGS}
C++ \${CMAKE_CXX_FLAGS}
Linker flags:
Executable \${CMAKE_EXE_LINKER_FLAGS}
Module \${CMAKE_MODULE_LINKER_FLAGS}
Shared \${CMAKE_SHARED_LINKER_FLAGS}\n")
_EOF_
die
}
_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_run ()
{
local i=1;
while [[ ${!i} == _* ]]; do
(( i += 1 ));
done;
[[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}";
"${@}"
}
_python_check_locale_sanity ()
{
local -x LC_ALL=${1};
local IFS=;
local lc=({a..z});
local uc=({A..Z});
local input="${lc[*]}${uc[*]}";
local output=$(tr '[:lower:][:upper:]' '[:upper:][:lower:]' <<<"${input}");
[[ ${output} == "${uc[*]}${lc[*]}" ]]
}
_python_export ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl var;
case "${1}" in
python* | jython*)
impl=${1/_/.};
shift
;;
pypy | pypy3)
impl=${1};
shift
;;
*)
impl=${EPYTHON};
if [[ -z ${impl} ]]; then
die "_python_export called without a python implementation and EPYTHON is unset";
fi
;;
esac;
debug-print "${FUNCNAME}: implementation: ${impl}";
for var in "$@";
do
case "${var}" in
EPYTHON)
export EPYTHON=${impl};
debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
;;
PYTHON)
export PYTHON=${EPREFIX}/usr/bin/${impl};
debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
;;
PYTHON_SITEDIR)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
PYTHON_SITEDIR=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_path("purelib"))') || die;
export PYTHON_SITEDIR;
debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
;;
PYTHON_INCLUDEDIR)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
PYTHON_INCLUDEDIR=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_path("platinclude"))') || die;
export PYTHON_INCLUDEDIR;
debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}";
if [[ ! -d ${PYTHON_INCLUDEDIR} ]]; then
die "${impl} does not install any header files!";
fi
;;
PYTHON_LIBPATH)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
PYTHON_LIBPATH=$("${PYTHON}" -c 'import os.path, sysconfig; print(os.path.join(sysconfig.get_config_var("LIBDIR"), sysconfig.get_config_var("LDLIBRARY")) if sysconfig.get_config_var("LDLIBRARY") else "")') || die;
export PYTHON_LIBPATH;
debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}";
if [[ ! -n ${PYTHON_LIBPATH} ]]; then
die "${impl} lacks a (usable) dynamic library";
fi
;;
PYTHON_CFLAGS)
local val;
case "${impl}" in
python*)
val=$($(tc-getPKG_CONFIG) --cflags ${impl/n/n-}) || die
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_CFLAGS=${val};
debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}"
;;
PYTHON_LIBS)
local val;
case "${impl}" in
python2* | python3.6 | python3.7*)
val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}) || die
;;
python*)
val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-}-embed) || die
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_LIBS=${val};
debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}"
;;
PYTHON_CONFIG)
local flags val;
case "${impl}" in
python*)
[[ -n ${PYTHON} ]] || die "PYTHON needs to be set for ${var} to be exported, or requested before it";
flags=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_config_var("ABIFLAGS") or "")') || die;
val=${PYTHON}${flags}-config
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_CONFIG=${val};
debug-print "${FUNCNAME}: PYTHON_CONFIG = ${PYTHON_CONFIG}"
;;
PYTHON_PKG_DEP)
local d;
case ${impl} in
python2.7)
PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7'
;;
python*)
PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
;;
pypy)
PYTHON_PKG_DEP='>=dev-python/pypy-7.3.0:0='
;;
pypy3)
PYTHON_PKG_DEP='>=dev-python/pypy3-7.3.0:0='
;;
*)
die "Invalid implementation: ${impl}"
;;
esac;
if [[ -n ${PYTHON_REQ_USE} ]]; then
PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}];
fi;
export PYTHON_PKG_DEP;
debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}"
;;
PYTHON_SCRIPTDIR)
local dir;
export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl};
debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}"
;;
*)
die "_python_export: unknown variable ${var}"
;;
esac;
done
}
_python_gen_usedep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
_python_verify_patterns "${@}";
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${@}"; then
matches+=("python_targets_${impl}(-)?" "-python_single_target_${impl}(-)");
fi;
done;
[[ -n ${matches[@]} ]] || die "No supported implementations match python_gen_usedep patterns: ${@}";
local out=${matches[@]};
echo "${out// /,}"
}
_python_impl_matches ()
{
[[ ${#} -ge 1 ]] || die "${FUNCNAME}: takes at least 1 parameter";
[[ ${#} -eq 1 ]] && return 0;
local impl=${1} pattern;
shift;
for pattern in "$@";
do
if [[ ${pattern} == -2 ]]; then
python_is_python3 "${impl}" || return 0;
else
if [[ ${pattern} == -3 ]]; then
python_is_python3 "${impl}" && return 0;
return;
else
if [[ ${impl/./_} == ${pattern/./_} ]]; then
return 0;
fi;
fi;
fi;
done;
return 1
}
_python_ln_rel ()
{
debug-print-function ${FUNCNAME} "${@}";
local target=${1};
local symname=${2};
local tgpath=${target%/*}/;
local sympath=${symname%/*}/;
local rel_target=;
while [[ -n ${sympath} ]]; do
local tgseg= symseg=;
while [[ ! -n ${tgseg} && -n ${tgpath} ]]; do
tgseg=${tgpath%%/*};
tgpath=${tgpath#${tgseg}/};
done;
while [[ ! -n ${symseg} && -n ${sympath} ]]; do
symseg=${sympath%%/*};
sympath=${sympath#${symseg}/};
done;
if [[ ${tgseg} != ${symseg} ]]; then
rel_target=../${rel_target}${tgseg:+${tgseg}/};
fi;
done;
rel_target+=${tgpath}${target##*/};
debug-print "${FUNCNAME}: ${symname} -> ${target}";
debug-print "${FUNCNAME}: rel_target = ${rel_target}";
ln -fs "${rel_target}" "${symname}"
}
_python_multibuild_wrapper ()
{
debug-print-function ${FUNCNAME} "${@}";
local -x EPYTHON PYTHON;
local -x PATH=${PATH} PKG_CONFIG_PATH=${PKG_CONFIG_PATH};
_python_export "${MULTIBUILD_VARIANT}" EPYTHON PYTHON;
_python_wrapper_setup;
"${@}"
}
_python_obtain_impls ()
{
_python_validate_useflags;
if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
MULTIBUILD_VARIANTS=(${PYTHON_COMPAT_OVERRIDE});
return;
fi;
MULTIBUILD_VARIANTS=();
local impl;
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
has "${impl}" "${PYTHON_COMPAT[@]}" && use "python_targets_${impl}" && MULTIBUILD_VARIANTS+=("${impl}");
done
}
_python_set_impls ()
{
local i;
if ! declare -p PYTHON_COMPAT &> /dev/null; then
die 'PYTHON_COMPAT not declared.';
fi;
if [[ $(declare -p PYTHON_COMPAT) != "declare -a"* ]]; then
die 'PYTHON_COMPAT must be an array.';
fi;
if [[ ! -n ${PYTHON_COMPAT_NO_STRICT} ]]; then
for i in "${PYTHON_COMPAT[@]}";
do
case ${i} in
jython2_7 | pypy | pypy1_[89] | pypy2_0 | pypy3 | python2_[5-7] | python3_[1-9] | python3_10)
;;
*)
if has "${i}" "${_PYTHON_ALL_IMPLS[@]}" "${_PYTHON_HISTORICAL_IMPLS[@]}"; then
die "Mis-synced patterns in _python_set_impls: missing ${i}";
else
die "Invalid implementation in PYTHON_COMPAT: ${i}";
fi
;;
esac;
done;
fi;
local supp=() unsupp=();
for i in "${_PYTHON_ALL_IMPLS[@]}";
do
if has "${i}" "${PYTHON_COMPAT[@]}"; then
supp+=("${i}");
else
unsupp+=("${i}");
fi;
done;
if [[ ! -n ${supp[@]} ]]; then
if [[ -n ${_PYTHON_ALLOW_PY27} ]] && has python2_7 "${PYTHON_COMPAT[@]}"; then
supp+=(python2_7);
else
die "No supported implementation in PYTHON_COMPAT.";
fi;
fi;
if [[ -n ${_PYTHON_SUPPORTED_IMPLS[@]} ]]; then
if [[ ${_PYTHON_SUPPORTED_IMPLS[@]} != ${supp[@]} ]]; then
eerror "Supported impls (PYTHON_COMPAT) changed between inherits!";
eerror "Before: ${_PYTHON_SUPPORTED_IMPLS[*]}";
eerror "Now : ${supp[*]}";
die "_PYTHON_SUPPORTED_IMPLS integrity check failed";
fi;
if [[ ${_PYTHON_UNSUPPORTED_IMPLS[@]} != ${unsupp[@]} ]]; then
eerror "Unsupported impls changed between inherits!";
eerror "Before: ${_PYTHON_UNSUPPORTED_IMPLS[*]}";
eerror "Now : ${unsupp[*]}";
die "_PYTHON_UNSUPPORTED_IMPLS integrity check failed";
fi;
else
_PYTHON_SUPPORTED_IMPLS=("${supp[@]}");
_PYTHON_UNSUPPORTED_IMPLS=("${unsupp[@]}");
readonly _PYTHON_SUPPORTED_IMPLS _PYTHON_UNSUPPORTED_IMPLS;
fi
}
_python_validate_useflags ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
if [[ ! -n ${_PYTHON_COMPAT_OVERRIDE_WARNED} ]]; then
ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python";
ewarn "implementations will be enabled:";
ewarn;
ewarn " ${PYTHON_COMPAT_OVERRIDE}";
ewarn;
ewarn "Dependencies won't be satisfied, and PYTHON_TARGETS will be ignored.";
_PYTHON_COMPAT_OVERRIDE_WARNED=1;
fi;
return;
fi;
local i;
for i in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
use "python_targets_${i}" && return 0;
done;
eerror "No Python implementation selected for the build. Please add one";
eerror "of the following values to your PYTHON_TARGETS (in make.conf):";
eerror;
eerror "${PYTHON_COMPAT[@]}";
echo;
die "No supported Python implementation in PYTHON_TARGETS."
}
_python_verify_patterns ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl pattern;
for pattern in "$@";
do
[[ ${pattern} == -[23] ]] && continue;
for impl in "${_PYTHON_ALL_IMPLS[@]}" "${_PYTHON_HISTORICAL_IMPLS[@]}";
do
[[ ${impl} == ${pattern/./_} ]] && continue 2;
done;
die "Invalid implementation pattern: ${pattern}";
done
}
_python_wrapper_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
local workdir=${1:-${T}/${EPYTHON}};
local impl=${2:-${EPYTHON}};
[[ -n ${workdir} ]] || die "${FUNCNAME}: no workdir specified.";
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified.";
if [[ ! -x ${workdir}/bin/python ]]; then
mkdir -p "${workdir}"/{bin,pkgconfig} || die;
rm -f "${workdir}"/bin/python{,2,3}{,-config} || die;
rm -f "${workdir}"/bin/2to3 || die;
rm -f "${workdir}"/pkgconfig/python{2,3}{,-embed}.pc || die;
local EPYTHON PYTHON;
_python_export "${impl}" EPYTHON PYTHON;
local pyver pyother;
if python_is_python3; then
pyver=3;
pyother=2;
else
pyver=2;
pyother=3;
fi;
cat > "${workdir}/bin/python" <<-_EOF_ ||
#!/bin/sh
exec "${PYTHON}" "\${@}"
_EOF_
die
cp "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die;
chmod +x "${workdir}/bin/python" "${workdir}/bin/python${pyver}" || die;
local nonsupp=("python${pyother}" "python${pyother}-config");
if [[ ${EPYTHON} == python* ]]; then
cat > "${workdir}/bin/python-config" <<-_EOF_ ||
#!/bin/sh
exec "${PYTHON}-config" "\${@}"
_EOF_
die
cp "${workdir}/bin/python-config" "${workdir}/bin/python${pyver}-config" || die;
chmod +x "${workdir}/bin/python-config" "${workdir}/bin/python${pyver}-config" || die;
ln -s "${PYTHON/python/2to3-}" "${workdir}"/bin/2to3 || die;
ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}.pc "${workdir}"/pkgconfig/python${pyver}.pc || die;
if [[ ${EPYTHON} != python[23].[67] ]]; then
ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}-embed.pc "${workdir}"/pkgconfig/python${pyver}-embed.pc || die;
fi;
else
nonsupp+=(2to3 python-config "python${pyver}-config");
fi;
local x;
for x in "${nonsupp[@]}";
do
cat > "${workdir}"/bin/${x} <<-_EOF_ ||
#!/bin/sh
echo "${ECLASS}: ${FUNCNAME}: ${x} is not supported by ${EPYTHON} (PYTHON_COMPAT)" >&2
exit 127
_EOF_
die
chmod +x "${workdir}"/bin/${x} || die;
done;
fi;
if [[ ${PATH##:*} != ${workdir}/bin ]]; then
PATH=${workdir}/bin${PATH:+:${PATH}};
fi;
if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then
PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}};
fi;
export PATH PKG_CONFIG_PATH
}
_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
}
build_sphinx ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${#} -eq 1 ]] || die "${FUNCNAME} takes 1 arg: <directory>";
local dir=${1};
sed -i -e 's:^intersphinx_mapping:disabled_&:' "${dir}"/conf.py || die;
sphinx-build -b html -d "${dir}"/_build/doctrees "${dir}" "${dir}"/_build/html || die;
HTML_DOCS+=("${dir}/_build/html/.")
}
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' "$@"
}
cmake-utils_src_make ()
{
die "cmake-utils_src_make is banned. Use cmake_build instead"
}
cmake-utils_use ()
{
_cmake_banned_func "" "$@"
}
cmake-utils_use_build ()
{
_cmake_banned_func BUILD_ "$@"
}
cmake-utils_use_disable ()
{
_cmake_banned_func DISABLE_ "$@"
}
cmake-utils_use_enable ()
{
_cmake_banned_func ENABLE_ "$@"
}
cmake-utils_use_has ()
{
_cmake_banned_func HAVE_ "$@"
}
cmake-utils_use_no ()
{
_cmake_banned_func NO_ "$@"
}
cmake-utils_use_use ()
{
_cmake_banned_func USE_ "$@"
}
cmake-utils_use_want ()
{
_cmake_banned_func WANT_ "$@"
}
cmake-utils_use_with ()
{
_cmake_banned_func WITH_ "$@"
}
cmake-utils_useno ()
{
_cmake_banned_func "" "$@"
}
cmake_build ()
{
debug-print-function ${FUNCNAME} "$@";
_cmake_check_build_dir;
pushd "${BUILD_DIR}" > /dev/null || die;
case ${CMAKE_MAKEFILE_GENERATOR} in
emake)
[[ -e Makefile ]] || die "Makefile not found. Error during configure stage.";
case ${CMAKE_VERBOSE} in
OFF)
emake "$@"
;;
*)
emake VERBOSE=1 "$@"
;;
esac
;;
ninja)
[[ -e build.ninja ]] || die "build.ninja not found. Error during configure stage.";
eninja "$@"
;;
esac;
popd > /dev/null || die
}
cmake_comment_add_subdirectory ()
{
if [[ -z ${1} ]]; then
die "${FUNCNAME[0]} must be passed at least one directory name to comment";
fi;
[[ -e "CMakeLists.txt" ]] || return;
local d;
for d in $@;
do
d=${d//\//\\/};
sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${d}[[:space:]]*)/I s/^/#DONOTCOMPILE /" -i CMakeLists.txt || die "failed to comment add_subdirectory(${d})";
done
}
cmake_run_in ()
{
if [[ -z ${2} ]]; then
die "${FUNCNAME[0]} must be passed at least two arguments";
fi;
[[ -e ${1} ]] || die "${FUNCNAME[0]}: Nonexistent path: ${1}";
pushd ${1} > /dev/null || die;
"${@:2}";
popd > /dev/null || die
}
cmake_src_compile ()
{
debug-print-function ${FUNCNAME} "$@";
cmake_build "$@"
}
cmake_src_configure ()
{
debug-print-function ${FUNCNAME} "$@";
[[ -n ${_CMAKE_SRC_PREPARE_HAS_RUN} ]] || die "FATAL: cmake_src_prepare has not been run";
_cmake_check_build_dir;
xdg_environment_reset;
local build_rules=${BUILD_DIR}/gentoo_rules.cmake;
cat > "${build_rules}" <<-_EOF_ ||
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "ASM compile command" FORCE)
set(CMAKE_ASM-ATT_COMPILE_OBJECT "<CMAKE_ASM-ATT_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c -x assembler <SOURCE>" CACHE STRING "ASM-ATT compile command" FORCE)
set(CMAKE_ASM-ATT_LINK_FLAGS "-nostdlib" CACHE STRING "ASM-ATT link flags" FORCE)
set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" FORCE)
set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> ${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" FORCE)
set(CMAKE_Fortran_COMPILE_OBJECT "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> ${FCFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "Fortran compile command" FORCE)
_EOF_
die
local myCC=$(tc-getCC) myCXX=$(tc-getCXX) myFC=$(tc-getFC);
local toolchain_file=${BUILD_DIR}/gentoo_toolchain.cmake;
cat > ${toolchain_file} <<-_EOF_ ||
set(CMAKE_ASM_COMPILER "${myCC/ /;}")
set(CMAKE_ASM-ATT_COMPILER "${myCC/ /;}")
set(CMAKE_C_COMPILER "${myCC/ /;}")
set(CMAKE_CXX_COMPILER "${myCXX/ /;}")
set(CMAKE_Fortran_COMPILER "${myFC/ /;}")
set(CMAKE_AR $(type -P $(tc-getAR)) CACHE FILEPATH "Archive manager" FORCE)
set(CMAKE_RANLIB $(type -P $(tc-getRANLIB)) CACHE FILEPATH "Archive index generator" FORCE)
set(CMAKE_SYSTEM_PROCESSOR "${CHOST%%-*}")
_EOF_
die
local -x ASMFLAGS=${CFLAGS};
local -x PKG_CONFIG=$(tc-getPKG_CONFIG);
if tc-is-cross-compiler; then
local sysname;
case "${KERNEL:-linux}" in
Cygwin)
sysname="CYGWIN_NT-5.1"
;;
HPUX)
sysname="HP-UX"
;;
linux)
sysname="Linux"
;;
Winnt)
sysname="Windows";
cat >> "${toolchain_file}" <<-_EOF_ ||
set(CMAKE_RC_COMPILER $(tc-getRC))
_EOF_
die
;;
*)
sysname="${KERNEL}"
;;
esac
cat >> "${toolchain_file}" <<-_EOF_ ||
set(CMAKE_SYSTEM_NAME "${sysname}")
_EOF_
die
if [ "${SYSROOT:-/}" != "/" ]; then
cat >> "${toolchain_file}" <<-_EOF_ ||
set(CMAKE_FIND_ROOT_PATH "${SYSROOT}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
_EOF_
die;
fi;
fi
if use prefix-guest; then
cat >> "${build_rules}" <<-_EOF_ ||
# in Prefix we need rpath and must ensure cmake gets our default linker path
# right ... except for Darwin hosts
if(NOT APPLE)
set(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
set(CMAKE_PLATFORM_REQUIRED_RUNTIME_PATH "${EPREFIX}/usr/${CHOST}/lib/gcc;${EPREFIX}/usr/${CHOST}/lib;${EPREFIX}/usr/$(get_libdir);${EPREFIX}/$(get_libdir)" CACHE STRING "" FORCE)
else()
set(CMAKE_PREFIX_PATH "${EPREFIX}/usr" CACHE STRING "" FORCE)
set(CMAKE_MACOSX_RPATH ON CACHE BOOL "" FORCE)
set(CMAKE_SKIP_BUILD_RPATH OFF CACHE BOOL "" FORCE)
set(CMAKE_SKIP_RPATH OFF CACHE BOOL "" FORCE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE CACHE BOOL "" FORCE)
endif()
_EOF_
die;
fi
local common_config=${BUILD_DIR}/gentoo_common_config.cmake;
local libdir=$(get_libdir);
cat > "${common_config}" <<-_EOF_ ||
set(CMAKE_GENTOO_BUILD ON CACHE BOOL "Indicate Gentoo package build")
set(LIB_SUFFIX ${libdir/lib} CACHE STRING "library path suffix" FORCE)
set(CMAKE_INSTALL_LIBDIR ${libdir} CACHE PATH "Output directory for libraries")
set(CMAKE_INSTALL_INFODIR "${EPREFIX}/usr/share/info" CACHE PATH "")
set(CMAKE_INSTALL_MANDIR "${EPREFIX}/usr/share/man" CACHE PATH "")
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${build_rules}" CACHE FILEPATH "Gentoo override rules")
set(CMAKE_INSTALL_DOCDIR "${EPREFIX}/usr/share/doc/${PF}" CACHE PATH "")
set(BUILD_SHARED_LIBS ON CACHE BOOL "")
_EOF_
die
if [[ -n ${_ECM_ECLASS} ]]; then
echo 'set(ECM_DISABLE_QMLPLUGINDUMP ON CACHE BOOL "")' >> "${common_config}" || die;
fi;
if [[ "${ARCH}" == riscv ]]; then
echo 'set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX '"${libdir#lib}"' CACHE STRING "library search suffix" FORCE)' >> "${common_config}" || die;
fi;
if [[ "${NOCOLOR}" = true || "${NOCOLOR}" = yes ]]; then
echo 'set(CMAKE_COLOR_MAKEFILE OFF CACHE BOOL "pretty colors during make" FORCE)' >> "${common_config}" || die;
fi;
if [[ ${CMAKE_BUILD_TYPE} != Gentoo ]]; then
cat >> ${common_config} <<-_EOF_ ||
set(CMAKE_ASM_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_ASM-ATT_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_MODULE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
set(CMAKE_STATIC_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
_EOF_
die;
fi
[[ -z ${mycmakeargs} ]] && declare -a mycmakeargs=();
local mycmakeargstype=$(declare -p mycmakeargs 2>&-);
if [[ "${mycmakeargstype}" != "declare -a mycmakeargs="* ]]; then
die "mycmakeargs must be declared as array";
fi;
local mycmakeargs_local=("${mycmakeargs[@]}");
local warn_unused_cli="";
if [[ ${CMAKE_WARN_UNUSED_CLI} == no ]]; then
warn_unused_cli="--no-warn-unused-cli";
fi;
local generator_name;
case ${CMAKE_MAKEFILE_GENERATOR} in
ninja)
generator_name="Ninja"
;;
emake)
generator_name="Unix Makefiles"
;;
esac;
local cmakeargs=(${warn_unused_cli} -C "${common_config}" -G "${generator_name}" -DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr" "${mycmakeargs_local[@]}" -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}" "${MYCMAKEARGS}");
if [[ -n "${CMAKE_EXTRA_CACHE_FILE}" ]]; then
cmakeargs+=(-C "${CMAKE_EXTRA_CACHE_FILE}");
fi;
pushd "${BUILD_DIR}" > /dev/null || die;
debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is ${mycmakeargs_local[*]}";
echo "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}";
"${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}" || die "cmake failed";
popd > /dev/null || die
}
cmake_src_install ()
{
debug-print-function ${FUNCNAME} "$@";
_cmake_check_build_dir;
pushd "${BUILD_DIR}" > /dev/null || die;
DESTDIR="${D}" ${CMAKE_MAKEFILE_GENERATOR} install "$@" || die "died running ${CMAKE_MAKEFILE_GENERATOR} install";
popd > /dev/null || die;
pushd "${S}" > /dev/null || die;
einstalldocs;
popd > /dev/null || die
}
cmake_src_prepare ()
{
debug-print-function ${FUNCNAME} "$@";
pushd "${S}" > /dev/null || die;
default_src_prepare;
_cmake_check_build_dir;
if [[ ! -e ${CMAKE_USE_DIR}/CMakeLists.txt ]]; then
eerror "Unable to locate CMakeLists.txt under:";
eerror "\"${CMAKE_USE_DIR}/CMakeLists.txt\"";
eerror "Consider not inheriting the cmake eclass.";
die "FATAL: Unable to find CMakeLists.txt";
fi;
if [[ ${CMAKE_MAKEFILE_GENERATOR} == ninja ]] && ! has_version -b dev-util/ninja; then
eerror "CMAKE_MAKEFILE_GENERATOR is set to ninja, but ninja is not installed.";
die "Please install dev-util/ninja or unset CMAKE_MAKEFILE_GENERATOR.";
fi;
local modules_list;
if [[ $(declare -p CMAKE_REMOVE_MODULES_LIST) == "declare -a"* ]]; then
modules_list=("${CMAKE_REMOVE_MODULES_LIST[@]}");
else
modules_list=(${CMAKE_REMOVE_MODULES_LIST});
fi;
local name;
for name in "${modules_list[@]}";
do
find "${S}" -name ${name}.cmake -exec rm -v {} + || die;
done;
_cmake_modify-cmakelists;
popd > /dev/null || die;
if [[ -n ${CMAKE_QA_SRC_DIR_READONLY} && ! -n ${CMAKE_IN_SOURCE_BUILD} ]]; then
chmod -R a-w "${S}";
fi;
_CMAKE_SRC_PREPARE_HAS_RUN=1
}
cmake_src_test ()
{
debug-print-function ${FUNCNAME} "$@";
_cmake_check_build_dir;
pushd "${BUILD_DIR}" > /dev/null || die;
[[ -e CTestTestfile.cmake ]] || {
echo "No tests found. Skipping.";
return 0
};
[[ -n ${TEST_VERBOSE} ]] && myctestargs+=(--extra-verbose --output-on-failure);
set -- ctest -j "$(makeopts_jobs)" --test-load "$(makeopts_loadavg)" "${myctestargs[@]}" "$@";
echo "$@" 1>&2;
if "$@"; then
einfo "Tests succeeded.";
popd > /dev/null || die;
return 0;
else
if [[ -n "${CMAKE_YES_I_WANT_TO_SEE_THE_TEST_LOG}" ]]; then
eerror "Tests failed. Test log ${BUILD_DIR}/Testing/Temporary/LastTest.log follows:";
eerror "--START TEST LOG--------------------------------------------------------------";
cat "${BUILD_DIR}/Testing/Temporary/LastTest.log";
eerror "--END TEST LOG----------------------------------------------------------------";
die "Tests failed.";
else
die "Tests failed. When you file a bug, please attach the following file: \n\t${BUILD_DIR}/Testing/Temporary/LastTest.log";
fi;
popd > /dev/null || die;
return 1;
fi
}
cmake_use_find_package ()
{
debug-print-function ${FUNCNAME} "$@";
if [[ "$#" != 2 || -z $1 ]]; then
die "Usage: cmake_use_find_package <USE flag> <package name>";
fi;
echo "-DCMAKE_DISABLE_FIND_PACKAGE_$2=$(use $1 && echo OFF || echo ON)"
}
comment_add_subdirectory ()
{
die "comment_add_subdirectory is banned. Use cmake_comment_add_subdirectory instead"
}
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} "$@"
}
edos2unix ()
{
[[ $# -eq 0 ]] && return 0;
sed -i 's/\r$//' -- "$@" || die
}
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 )
}
emktemp ()
{
eqawarn "emktemp is deprecated. Create a temporary file in \${T} instead.";
local exe="touch";
[[ $1 == -d ]] && exe="mkdir" && shift;
local topdir=$1;
if [[ -z ${topdir} ]]; then
[[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
fi;
if ! type -P mktemp > /dev/null; then
local tmp=/;
while [[ -e ${tmp} ]]; do
tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
done;
${exe} "${tmp}" || ${exe} -p "${tmp}";
echo "${tmp}";
else
if [[ ${exe} == "touch" ]]; then
TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
else
TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
fi;
fi
}
eninja ()
{
local nonfatal_args=();
[[ ${EAPI:-0} != [245] ]] && nonfatal_args+=(-n);
if [[ -z ${NINJAOPTS+set} ]]; then
NINJAOPTS="-j$(makeopts_jobs) -l$(makeopts_loadavg "${MAKEOPTS}" 0)";
fi;
set -- ninja -v ${NINJAOPTS} "$@";
echo "$@" 1>&2;
"$@" || die "${nonfatal_args[@]}" "${*} failed"
}
epytest ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die "EPYTHON unset, invalid call context";
local args=(-vv -ra -l);
set -- "${EPYTHON}" -m pytest "${args[@]}" "${@}";
echo "${@}" 1>&2;
"${@}" || die -n "pytest failed with ${EPYTHON}";
return ${?}
}
eunittest ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die "EPYTHON unset, invalid call context";
set -- "${EPYTHON}" -m unittest_or_fail discover -v "${@}";
echo "${@}" 1>&2;
"${@}" || die -n "Tests failed with ${EPYTHON}";
return ${?}
}
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
}
get-flag ()
{
[[ $# -ne 1 ]] && die "usage: <flag>";
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}"
}
get_nproc ()
{
local nproc;
if type -P nproc &> /dev/null; then
nproc=$(nproc);
fi;
if [[ -z ${nproc} ]] && type -P sysctl &> /dev/null; then
nproc=$(sysctl -n hw.ncpu 2>/dev/null);
fi;
if [[ -z ${nproc} ]] && type -P python &> /dev/null; then
nproc=$(python -c 'import multiprocessing; print(multiprocessing.cpu_count());' 2>/dev/null);
fi;
if [[ -n ${nproc} ]]; then
echo "${nproc}";
else
echo "${1:-1}";
fi
}
has_multilib_profile ()
{
[ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
}
in_iuse ()
{
local use=${1};
if [[ -z "${use}" ]]; then
echo "!!! in_iuse() called without a parameter." 1>&2;
echo "!!! in_iuse <USEFLAG>" 1>&2;
die "in_iuse() called without a parameter";
fi;
local liuse=(${IUSE_EFFECTIVE});
has "${use}" "${liuse[@]#[+-]}"
}
is-flag ()
{
is-flagq "$@" && echo true
}
is-flagq ()
{
[[ -n $2 ]] && die "Usage: is-flag <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 <flag>";
_is_flagq LDFLAGS $1
}
is_final_abi ()
{
has_multilib_profile || return 0;
set -- $(get_install_abis);
local LAST_ABI=$#;
[[ ${!LAST_ABI} == ${ABI} ]]
}
l10n_find_plocales_changes ()
{
[[ $# -ne 3 ]] && die "Exactly 3 arguments are needed!";
ebegin "Looking in ${1} for new locales";
pushd "${1}" > /dev/null || die "Cannot access ${1}";
local current= x=;
for x in ${2}*${3};
do
x=${x#"${2}"};
x=${x%"${3}"};
current+="${x} ";
done;
popd > /dev/null;
if [[ "$(printf '%s\n' ${PLOCALES} | LC_ALL=C sort)" != "$(printf '%s\n' ${current} | LC_ALL=C sort)" ]]; then
eend 1 "There are changes in locales! This ebuild should be updated to:";
eerror "PLOCALES=\"${current%[[:space:]]}\"";
return 1;
else
eend 0;
fi
}
l10n_for_each_disabled_locale_do ()
{
local locs x;
locs=$(l10n_get_locales disabled);
for x in ${locs};
do
"${@}" ${x} || die "failed to process disabled ${x} locale";
done
}
l10n_for_each_locale_do ()
{
local locs x;
locs=$(l10n_get_locales);
for x in ${locs};
do
"${@}" ${x} || die "failed to process enabled ${x} locale";
done
}
l10n_get_locales ()
{
local loc locs;
if [[ -z ${LINGUAS+set} ]]; then
locs=${PLOCALES};
else
for loc in ${LINGUAS};
do
has ${loc} ${PLOCALES} && locs+="${loc} ";
done;
fi;
[[ -z ${locs} ]] && locs=${PLOCALE_BACKUP};
if [[ ${1} == disabled ]]; then
local disabled_locs;
for loc in ${PLOCALES};
do
has ${loc} ${locs} || disabled_locs+="${loc} ";
done;
locs=${disabled_locs};
fi;
printf "%s" "${locs}"
}
make_wrapper ()
{
local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
local tmpwrapper="${T}/tmp.wrapper.${wrapper##*/}";
has "${EAPI:-0}" 0 1 2 && local EPREFIX="";
( echo '#!/bin/sh';
if [[ -n ${libdir} ]]; then
local var;
if [[ ${CHOST} == *-darwin* ]]; then
var=DYLD_LIBRARY_PATH;
else
var=LD_LIBRARY_PATH;
fi;
cat <<-EOF
if [ "\${${var}+set}" = "set" ] ; then
export ${var}="\${${var}}:${EPREFIX}${libdir}"
else
export ${var}="${EPREFIX}${libdir}"
fi
EOF
fi
[[ -n ${chdir} ]] && printf 'cd "%s" &&\n' "${EPREFIX}${chdir}";
printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
chmod go+rx "${tmpwrapper}";
if [[ -n ${path} ]]; then
( exeopts -m 0755;
exeinto "${path}";
newexe "${tmpwrapper}" "${wrapper}" ) || die;
else
newbin "${tmpwrapper}" "${wrapper}" || die;
fi
}
makeopts_jobs ()
{
[[ $# -eq 0 ]] && set -- "${MAKEOPTS}";
local jobs=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' -e "s:.*[[:space:]](-[a-z]*j|--jobs)[[:space:]].*:${2:-999}:p");
echo ${jobs:-1}
}
makeopts_loadavg ()
{
[[ $# -eq 0 ]] && set -- "${MAKEOPTS}";
local lavg=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-[a-z]*l|--(load-average|max-load)[=[:space:]])[[:space:]]*([0-9]+(\.[0-9]+)?)[[:space:]].*:\3:p' -e "s:.*[[:space:]](-[a-z]*l|--(load-average|max-load))[[:space:]].*:${2:-999}:p");
echo ${lavg:-${2:-999}}
}
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_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="lib64/lp64d";
export CFLAGS_lp64=${CFLAGS_lp64--mabi=lp64 -march=rv64imac};
export CHOST_lp64=${CTARGET};
export CTARGET_lp64=${CTARGET};
export 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="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="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="lib32/ilp32d";
export CFLAGS_ilp32=${CFLAGS_ilp32--mabi=ilp32 -march=rv32imac};
export CHOST_ilp32=${CTARGET};
export CTARGET_ilp32=${CTARGET};
export 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_toolchain_setup ()
{
local v vv;
export ABI=$1;
local save_restore_variables=(CBUILD CHOST AR CC CXX F77 FC LD NM 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 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 </dev/null) in
*GNU*)
echo "-Wl,--no-as-needed"
;;
esac
}
nocommon_configure ()
{
if [[ "${NOCOMMON_OVERRIDE_LIBTOOL}" == "yes" ]]; then
ewarn "lto-overlay: libtool global_symbol_pipe and global_symbol_to_cdecl OVERRIDDEN";
lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p' | sed '/ __gnu_lto/d'";
export lt_cv_sys_global_symbol_pipe;
lt_cv_sys_global_symbol_to_cdecl="";
export lt_cv_sys_global_symbol_to_cdecl;
fi
}
number_abis ()
{
set -- `get_install_abis`;
echo $#
}
path_exists ()
{
eerror "path_exists has been removed. Please see the following post";
eerror "for a replacement snippet:";
eerror "https://blogs.gentoo.org/mgorny/2018/08/09/inlining-path_exists/";
die "path_exists is banned"
}
pkg_nofetch ()
{
default
}
pyside2_configure ()
{
local mycmakeargs=("${mycmakeargs[@]}" -DPYTHON_CONFIG_SUFFIX="-${EPYTHON}" -DPYTHON_EXECUTABLE="${PYTHON}" -DPYTHON_SITE_PACKAGES="$(python_get_sitedir)" -DSHIBOKEN_PYTHON_SHARED_LIBRARY_SUFFIX="-${EPYTHON}");
cmake_src_configure
}
python_copy_sources ()
{
debug-print-function ${FUNCNAME} "${@}";
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_copy_sources
}
python_doexe ()
{
debug-print-function ${FUNCNAME} "${@}";
local f;
for f in "$@";
do
python_newexe "${f}" "${f##*/}";
done
}
python_doheader ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local includedir=$(python_get_includedir);
local d=${includedir#${EPREFIX}};
( insopts -m 0644;
insinto "${d}";
doins -r "${@}" || return ${?} )
}
python_domodule ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local d;
if [[ ${python_moduleroot} == /* ]]; then
d=${python_moduleroot};
else
local sitedir=$(python_get_sitedir);
d=${sitedir#${EPREFIX}}/${python_moduleroot//.//};
fi;
( insopts -m 0644;
insinto "${d}";
doins -r "${@}" || return ${?} );
python_optimize "${ED%/}/${d}"
}
python_doscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_doexe "${@}"
}
python_export ()
{
debug-print-function ${FUNCNAME} "${@}";
eqawarn "python_export() is part of private eclass API.";
eqawarn "Please call python_get*() instead.";
_python_export "${@}"
}
python_export_utf8_locale ()
{
debug-print-function ${FUNCNAME} "${@}";
type locale > /dev/null || return 0;
if [[ $(locale charmap) != UTF-8 ]]; then
local lang locales="C.UTF-8 en_US.UTF-8 en_GB.UTF-8 $(locale -a)";
for lang in ${locales};
do
if [[ $(LC_ALL=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then
if _python_check_locale_sanity "${lang}"; then
export LC_CTYPE=${lang};
if [[ -n ${LC_ALL} ]]; then
export LC_NUMERIC=${LC_ALL};
export LC_TIME=${LC_ALL};
export LC_COLLATE=${LC_ALL};
export LC_MONETARY=${LC_ALL};
export LC_MESSAGES=${LC_ALL};
export LC_PAPER=${LC_ALL};
export LC_NAME=${LC_ALL};
export LC_ADDRESS=${LC_ALL};
export LC_TELEPHONE=${LC_ALL};
export LC_MEASUREMENT=${LC_ALL};
export LC_IDENTIFICATION=${LC_ALL};
export LC_ALL=;
fi;
return 0;
fi;
fi;
done;
ewarn "Could not find a UTF-8 locale. This may trigger build failures in";
ewarn "some python packages. Please ensure that a UTF-8 locale is listed in";
ewarn "/etc/locale.gen and run locale-gen.";
return 1;
fi;
return 0
}
python_fix_shebang ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)";
local force quiet;
while [[ -n ${@} ]]; do
case "${1}" in
-f | --force)
force=1;
shift
;;
-q | --quiet)
quiet=1;
shift
;;
--)
shift;
break
;;
*)
break
;;
esac;
done;
[[ -n ${1} ]] || die "${FUNCNAME}: no paths given";
local path f;
for path in "$@";
do
local any_correct any_fixed is_recursive;
[[ -d ${path} ]] && is_recursive=1;
while IFS= read -r -d '' f; do
local shebang i;
local error= from=;
IFS= read -r shebang < "${f}";
if [[ ${shebang} == '#!'* ]]; then
local split_shebang=();
read -r -a split_shebang <<< ${shebang} || die;
for i in "${split_shebang[@]}";
do
case "${i}" in
*"${EPYTHON}")
debug-print "${FUNCNAME}: in file ${f#${D%/}}";
debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}";
any_correct=1;
from=${EPYTHON};
break
;;
*python | *python[23])
debug-print "${FUNCNAME}: in file ${f#${D%/}}";
debug-print "${FUNCNAME}: rewriting shebang: ${shebang}";
if [[ ${i} == *python2 ]]; then
from=python2;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" && error=1;
fi;
else
if [[ ${i} == *python3 ]]; then
from=python3;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" || error=1;
fi;
else
from=python;
fi;
fi;
break
;;
*python[23].[0123456789] | *pypy | *pypy3 | *jython[23].[0123456789])
if [[ ! -n ${force} ]]; then
error=1;
else
case "${i}" in
*python[23].[0123456789])
from="python[23].[0123456789]"
;;
*pypy)
from="pypy"
;;
*pypy3)
from="pypy3"
;;
*jython[23].[0123456789])
from="jython[23].[0123456789]"
;;
*)
die "${FUNCNAME}: internal error in 2nd pattern match"
;;
esac;
fi;
break
;;
esac;
done;
fi;
if [[ ! -n ${error} && ! -n ${from} ]]; then
[[ -n ${is_recursive} ]] && continue;
error=1;
fi;
if [[ ! -n ${quiet} ]]; then
einfo "Fixing shebang in ${f#${D%/}}.";
fi;
if [[ ! -n ${error} ]]; then
if [[ ${shebang} == *${from}" "* ]]; then
sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die;
else
sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die;
fi;
any_fixed=1;
else
eerror "The file has incompatible shebang:";
eerror " file: ${f#${D%/}}";
eerror " current shebang: ${shebang}";
eerror " requested impl: ${EPYTHON}";
die "${FUNCNAME}: conversion of incompatible shebang requested";
fi;
done < <(find -H "${path}" -type f -print0 || die);
if [[ ! -n ${any_fixed} ]]; then
eerror "QA error: ${FUNCNAME}, ${path#${D%/}} did not match any fixable files.";
if [[ -n ${any_correct} ]]; then
eerror "All files have ${EPYTHON} shebang already.";
else
eerror "There are no Python files in specified directory.";
fi;
die "${FUNCNAME} did not match any fixable files";
fi;
done
}
python_foreach_impl ()
{
debug-print-function ${FUNCNAME} "${@}";
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_foreach_variant _python_multibuild_wrapper "${@}"
}
python_gen_any_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local depstr=${1};
shift;
local i PYTHON_PKG_DEP out=;
_python_verify_patterns "${@}";
for i in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${i}" "${@}"; then
local PYTHON_USEDEP="python_targets_${i}(-),-python_single_target_${i}(-)";
local PYTHON_SINGLE_USEDEP="python_single_target_${i}(-)";
_python_export "${i}" PYTHON_PKG_DEP;
local i_depstr=${depstr//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}};
i_depstr=${i_depstr//\$\{PYTHON_SINGLE_USEDEP\}/${PYTHON_SINGLE_USEDEP}};
out="( ${PYTHON_PKG_DEP/:0=/:0} ${i_depstr} ) ${out}";
fi;
done;
echo "|| ( ${out})"
}
python_gen_cond_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
local dep=${1};
shift;
_python_verify_patterns "${@}";
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${@}"; then
if [[ ${dep} == *'${PYTHON_USEDEP}'* ]]; then
local usedep=$(_python_gen_usedep "${@}");
dep=${dep//\$\{PYTHON_USEDEP\}/${usedep}};
fi;
matches+=("python_targets_${impl}? ( ${dep} )");
fi;
done;
echo "${matches[@]}"
}
python_gen_impl_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
local PYTHON_REQ_USE=${1};
shift;
_python_verify_patterns "${@}";
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${@}"; then
local PYTHON_PKG_DEP;
_python_export "${impl}" PYTHON_PKG_DEP;
matches+=("python_targets_${impl}? ( ${PYTHON_PKG_DEP} )");
fi;
done;
echo "${matches[@]}"
}
python_gen_usedep ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ ${EBUILD_PHASE} == setup ]]; then
eqawarn "python_gen_usedep() is deprecated. Please use python_gen_cond_dep instead.";
fi;
_python_gen_usedep "${@}"
}
python_gen_useflags ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl matches=();
_python_verify_patterns "${@}";
for impl in "${_PYTHON_SUPPORTED_IMPLS[@]}";
do
if _python_impl_matches "${impl}" "${@}"; then
matches+=("python_targets_${impl}");
fi;
done;
echo "${matches[@]}"
}
python_get_CFLAGS ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_export "${@}" PYTHON_CFLAGS;
echo "${PYTHON_CFLAGS}"
}
python_get_LIBS ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_export "${@}" PYTHON_LIBS;
echo "${PYTHON_LIBS}"
}
python_get_PYTHON_CONFIG ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_export "${@}" PYTHON_CONFIG;
echo "${PYTHON_CONFIG}"
}
python_get_includedir ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_export "${@}" PYTHON_INCLUDEDIR;
echo "${PYTHON_INCLUDEDIR}"
}
python_get_library_path ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_export "${@}" PYTHON_LIBPATH;
echo "${PYTHON_LIBPATH}"
}
python_get_scriptdir ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_export "${@}" PYTHON_SCRIPTDIR;
echo "${PYTHON_SCRIPTDIR}"
}
python_get_sitedir ()
{
debug-print-function ${FUNCNAME} "${@}";
_python_export "${@}" PYTHON_SITEDIR;
echo "${PYTHON_SITEDIR}"
}
python_is_installed ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON";
local hasv_args=(-b);
[[ ${EAPI} == 6 ]] && hasv_args=(--host-root);
local PYTHON_PKG_DEP;
_python_export "${impl}" PYTHON_PKG_DEP;
has_version "${hasv_args[@]}" "${PYTHON_PKG_DEP}"
}
python_is_python3 ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON";
[[ ${impl} == python3* || ${impl} == pypy3 ]]
}
python_moduleinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_moduleroot=${1}
}
python_newexe ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
[[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} <path> <new-name>";
local wrapd=${python_scriptroot:-/usr/bin};
local f=${1};
local newfn=${2};
local scriptdir=$(python_get_scriptdir);
local d=${scriptdir#${EPREFIX}};
( dodir "${wrapd}";
exeopts -m 0755;
exeinto "${d}";
newexe "${f}" "${newfn}" || return ${?} );
_python_ln_rel "${ED%/}"/usr/lib/python-exec/python-exec2 "${ED%/}/${wrapd}/${newfn}" || die;
if [[ -n ${_PYTHON_REWRITE_SHEBANG} ]]; then
python_fix_shebang -q "${ED%/}/${d}/${newfn}";
fi
}
python_newscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_newexe "${@}"
}
python_optimize ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then
eerror "The new Python eclasses expect the compiled Python files to";
eerror "be controlled by the Package Manager. For this reason,";
eerror "the python_optimize function can be used only during src_* phases";
eerror "(src_install most commonly) and not during pkg_* phases.";
echo;
die "python_optimize is not to be used in pre/post* phases";
fi;
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local PYTHON=${PYTHON};
[[ -n ${PYTHON} ]] || _python_export PYTHON;
[[ -x ${PYTHON} ]] || die "PYTHON (${PYTHON}) is not executable";
if [[ ${#} -eq 0 ]]; then
local f;
while IFS= read -r -d '' f; do
if [[ ${f} == /* && -d ${D%/}${f} ]]; then
set -- "${D%/}${f}" "${@}";
fi;
done < <("${PYTHON}" -c 'import sys; print("".join(x + "\0" for x in sys.path))' || die);
debug-print "${FUNCNAME}: using sys.path: ${*/%/;}";
fi;
local d;
for d in "$@";
do
local instpath=${d#${D%/}};
instpath=/${instpath##/};
case "${EPYTHON}" in
python2.7 | python3.[34])
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
;;
python* | pypy3)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -O -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
;;
*)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
;;
esac;
done
}
python_replicate_script ()
{
debug-print-function ${FUNCNAME} "${@}";
function _python_replicate_script ()
{
local _PYTHON_FIX_SHEBANG_QUIET=1;
local PYTHON_SCRIPTDIR;
_python_export PYTHON_SCRIPTDIR;
( exeopts -m 0755;
exeinto "${PYTHON_SCRIPTDIR#${EPREFIX}}";
doexe "${files[@]}" );
python_fix_shebang -q "${files[@]/*\//${D%/}/${PYTHON_SCRIPTDIR}/}"
};
local files=("${@}");
python_foreach_impl _python_replicate_script;
unset -f _python_replicate_script;
local f;
for f in "$@";
do
_python_ln_rel "${ED%/}/usr/lib/python-exec/python-exec2" "${f}" || die;
done
}
python_scriptinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_scriptroot=${1}
}
python_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
local has_check_deps;
declare -f python_check_deps > /dev/null && has_check_deps=1;
if [[ ! -n ${has_check_deps} ]]; then
_python_validate_useflags;
fi;
local pycompat=("${PYTHON_COMPAT[@]}");
if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
pycompat=(${PYTHON_COMPAT_OVERRIDE});
fi;
local found;
_python_verify_patterns "${@}";
for ((i = ${#_PYTHON_SUPPORTED_IMPLS[@]} - 1; i >= 0; i-- ))
do
local impl=${_PYTHON_SUPPORTED_IMPLS[i]};
has "${impl}" "${pycompat[@]}" || continue;
if [[ ! -n ${PYTHON_COMPAT_OVERRIDE} && ! -n ${has_check_deps} ]]; then
use "python_targets_${impl}" || continue;
fi;
_python_impl_matches "${impl}" "${@}" || continue;
_python_export "${impl}" EPYTHON PYTHON;
if [[ -n ${has_check_deps} ]]; then
python_is_installed "${impl}" || continue;
local PYTHON_USEDEP="python_targets_${impl}(-),-python_single_target_${impl}(-)";
local PYTHON_SINGLE_USEDEP="python_single_target_${impl}(-)";
python_check_deps || continue;
fi;
found=1;
break;
done;
if [[ ! -n ${found} ]]; then
eerror "${FUNCNAME}: none of the enabled implementation matched the patterns.";
eerror " patterns: ${@-'(*)'}";
eerror "Likely a REQUIRED_USE constraint (possibly USE-conditional) is missing.";
eerror " suggested: || ( \$(python_gen_useflags ${@}) )";
eerror "(remember to quote all the patterns with '')";
die "${FUNCNAME}: no enabled implementation satisfy requirements";
fi;
_python_wrapper_setup;
einfo "Using ${EPYTHON} in global scope"
}
python_wrapper_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
eqawarn "python_wrapper_setup() is part of private eclass API.";
eqawarn "Please call python_setup() instead.";
_python_wrapper_setup "${@}"
}
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 <old flag> <new flag>";
local f var new;
for var in $(all-flag-vars);
do
new=();
for f in ${!var};
do
[[ ${f} == ${1} ]] && f=${2};
new+=("${f}");
done;
export ${var}="${new[*]}";
done;
return 0
}
replace-sparc64-flags ()
{
[[ $# -ne 0 ]] && die "replace-sparc64-flags takes no arguments";
local SPARC64_CPUS="ultrasparc3 ultrasparc v9";
if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then
for x in ${SPARC64_CPUS};
do
CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}";
done;
else
for x in ${SPARC64_CPUS};
do
CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
done;
fi;
if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then
for x in ${SPARC64_CPUS};
do
CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}";
done;
else
for x in ${SPARC64_CPUS};
do
CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
done;
fi;
export CFLAGS CXXFLAGS
}
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 ()
{
python_foreach_impl cmake_src_compile
}
src_configure ()
{
local mycmakeargs=(-DBUILD_TESTS=$(usex test) -DCMAKE_DISABLE_FIND_PACKAGE_Qt53DAnimation=$(usex !3d) -DCMAKE_DISABLE_FIND_PACKAGE_Qt53DCore=$(usex !3d) -DCMAKE_DISABLE_FIND_PACKAGE_Qt53DExtras=$(usex !3d) -DCMAKE_DISABLE_FIND_PACKAGE_Qt53DInput=$(usex !3d) -DCMAKE_DISABLE_FIND_PACKAGE_Qt53DLogic=$(usex !3d) -DCMAKE_DISABLE_FIND_PACKAGE_Qt53DRender=$(usex !3d) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Charts=$(usex !charts) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Concurrent=$(usex !concurrent) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5DataVisualization=$(usex !datavis) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Designer=$(usex !designer) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Gui=$(usex !gui) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Help=$(usex !help) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Location=$(usex !location) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Multimedia=$(usex !multimedia) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5MultimediaWidgets=$(usex !multimedia yes $(usex !widgets)) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Network=$(usex !network) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Positioning=$(usex !positioning) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5PrintSupport=$(usex !printsupport) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Qml=$(usex !qml) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Quick=$(usex !quick) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5QuickWidgets=$(usex !quick yes $(usex !widgets)) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Script=$(usex !script) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5ScriptTools=$(usex !scripttools) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Scxml=$(usex !scxml) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Sensors=$(usex !sensors) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5TextToSpeech=$(usex !speech) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Sql=$(usex !sql) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Svg=$(usex !svg) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Test=$(usex !testlib) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5UiTools=$(usex !designer) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5WebChannel=$(usex !webchannel) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5WebEngine=$(usex !webengine) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5WebEngineCore=$(usex !webengine) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5WebEngineWidgets=$(usex !webengine yes $(usex !widgets)) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5WebSockets=$(usex !websockets) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Widgets=$(usex !widgets) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5X11Extras=$(usex !x11extras) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Xml=$(usex !xml) -DCMAKE_DISABLE_FIND_PACKAGE_Qt5XmlPatterns=$(usex !xmlpatterns));
function pyside2_configure ()
{
local mycmakeargs=("${mycmakeargs[@]}" -DPYTHON_CONFIG_SUFFIX="-${EPYTHON}" -DPYTHON_EXECUTABLE="${PYTHON}" -DPYTHON_SITE_PACKAGES="$(python_get_sitedir)" -DSHIBOKEN_PYTHON_SHARED_LIBRARY_SUFFIX="-${EPYTHON}");
cmake_src_configure
};
python_foreach_impl pyside2_configure
}
src_install ()
{
function pyside2_install ()
{
cmake_src_install;
python_optimize;
sed -i -e 's~^Requires: shiboken2$~&-'${EPYTHON}'~' "${ED}/usr/$(get_libdir)"/pkgconfig/${PN}.pc || die;
cp "${ED}/usr/$(get_libdir)"/pkgconfig/${PN}{,-${EPYTHON}}.pc || die
};
python_foreach_impl pyside2_install;
sed -i -e 's~pyside2-python[[:digit:]]\+\.[[:digit:]]\+~pyside2${PYTHON_CONFIG_SUFFIX}~g' "${ED}/usr/$(get_libdir)/cmake/PySide2-${PV}/PySide2Targets-gentoo.cmake" || die
}
src_prepare ()
{
cmake_src_prepare "$@"
}
src_test ()
{
local -x PYTHONDONTWRITEBYTECODE;
python_foreach_impl virtx cmake_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-linguas ()
{
local ls newls nols;
if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
local op=$1;
shift;
ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
shift;
local d f;
for d in "$@";
do
if [[ ${op} == "-u" ]]; then
newls=${ls};
else
newls="";
fi;
for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
do
if [[ ${op} == "-i" ]]; then
has ${f} ${ls} && newls="${newls} ${f}";
else
has ${f} ${ls} || newls="${newls} ${f}";
fi;
done;
ls=${newls};
done;
else
ls="$@";
fi;
nols="";
newls="";
for f in ${LINGUAS};
do
if has ${f} ${ls}; then
newls="${newls} ${f}";
else
nols="${nols} ${f}";
fi;
done;
[[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
export LINGUAS=${newls:1}
}
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 <omp.h>
int main() {
int nthreads, tid, ret = 0;
#pragma omp parallel private(nthreads, tid)
{
tid = omp_get_thread_num();
nthreads = omp_get_num_threads(); ret += tid + nthreads;
}
return ret;
}
EOF
$(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &> /dev/null;
local ret=$?;
rm -f "${base}"*;
return ${ret}
}
tc-has-tls ()
{
local base="${T}/test-tc-tls";
cat <<-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
}
use_if_iuse ()
{
eqawarn "use_if_iuse is deprecated.";
eqawarn "Define it as a local function, or inline it:";
eqawarn " in_iuse foo && use foo";
in_iuse $1 || return 1;
use $1
}
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
}
virtx ()
{
debug-print-function ${FUNCNAME} "$@";
[[ $# -lt 1 ]] && die "${FUNCNAME} needs at least one argument";
local i=0;
local retval=0;
local OLD_SANDBOX_ON="${SANDBOX_ON}";
local XVFB XHOST XDISPLAY;
local xvfbargs="-screen 0 1280x1024x24 +extension RANDR";
XVFB=$(type -p Xvfb) || die;
XHOST=$(type -p xhost) || die;
debug-print "${FUNCNAME}: running Xvfb hack";
export XAUTHORITY=;
einfo "Scanning for an open DISPLAY to start Xvfb ...";
XDISPLAY=$(i=1; while [[ -f /tmp/.X${i}-lock ]] ; do ((i++));done; echo ${i});
debug-print "${FUNCNAME}: XDISPLAY=${XDISPLAY}";
export SANDBOX_ON="0";
debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2;
local start=${XDISPLAY};
while [[ ! -f /tmp/.X${XDISPLAY}-lock ]]; do
if ((XDISPLAY - start > 15)); then
eerror "'${XVFB} :${XDISPLAY} ${xvfbargs}' returns:";
echo;
${XVFB} :${XDISPLAY} ${xvfbargs};
echo;
eerror "If possible, correct the above error and try your emerge again.";
die "Unable to start Xvfb";
fi;
((XDISPLAY++));
debug-print "${FUNCNAME}: ${XVFB} :${XDISPLAY} ${xvfbargs}";
${XVFB} :${XDISPLAY} ${xvfbargs} &> /dev/null & sleep 2;
done;
export SANDBOX_ON="${OLD_SANDBOX_ON}";
einfo "Starting Xvfb on \$DISPLAY=${XDISPLAY} ...";
export DISPLAY=:${XDISPLAY};
debug-print "${FUNCNAME}: $@";
nonfatal "$@";
retval=$?;
kill $(cat /tmp/.X${XDISPLAY}-lock);
[[ ${retval} -ne 0 ]] && die "Failed to run '$@'";
return 0
}
xdg_desktop_database_update ()
{
if [[ ${EBUILD_PHASE} != post* ]]; then
die "xdg_desktop_database_update must be used in pkg_post* phases.";
fi;
if ! type update-desktop-database &> /dev/null; then
debug-print "update-desktop-database is not found";
return;
fi;
ebegin "Updating .desktop files database";
update-desktop-database -q "${EROOT%/}${DESKTOP_DATABASE_DIR}";
eend $?
}
xdg_environment_reset ()
{
export XDG_DATA_HOME="${HOME}/.local/share";
export XDG_CONFIG_HOME="${HOME}/.config";
export XDG_CACHE_HOME="${HOME}/.cache";
export XDG_RUNTIME_DIR="${T}/run";
mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" "${XDG_RUNTIME_DIR}" || die;
chmod 0700 "${XDG_RUNTIME_DIR}" || die;
unset DBUS_SESSION_BUS_ADDRESS
}
xdg_icon_cache_update ()
{
if [[ ${EBUILD_PHASE} != post* ]]; then
die "xdg_icon_cache_update must be used in pkg_post* phases.";
fi;
if ! type gtk-update-icon-cache &> /dev/null; then
debug-print "gtk-update-icon-cache is not found";
return;
fi;
ebegin "Updating icons cache";
local dir f retval=0;
local fails=();
for dir in "${EROOT%/}"/usr/share/icons/*;
do
if [[ -f "${dir}/index.theme" ]]; then
local rv=0;
gtk-update-icon-cache -qf "${dir}";
rv=$?;
if [[ ! $rv -eq 0 ]]; then
debug-print "Updating cache failed on ${dir}";
fails+=("${dir}");
retval=2;
fi;
else
if [[ $(ls "${dir}") = "icon-theme.cache" ]]; then
rm "${dir}/icon-theme.cache";
fi;
fi;
if [[ -z $(ls "${dir}") ]]; then
rmdir "${dir}";
fi;
done;
eend ${retval};
for f in "${fails[@]}";
do
eerror "Failed to update cache with icon $f";
done
}
xdg_mimeinfo_database_update ()
{
if [[ ${EBUILD_PHASE} != post* ]]; then
die "xdg_mimeinfo_database_update must be used in pkg_post* phases.";
fi;
if ! type update-mime-database &> /dev/null; then
debug-print "update-mime-database is not found";
return;
fi;
ebegin "Updating shared mime info database";
update-mime-database "${EROOT%/}${MIMEINFO_DATABASE_DIR}";
eend $?
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment