768
bashrc.d/10-flag.sh
Normal file
768
bashrc.d/10-flag.sh
Normal file
@@ -0,0 +1,768 @@
|
||||
#!/bin/bash
|
||||
# (C) Martin V\"ath <martin at mvath.de>
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
FLAG_FILTER_C_CXX=(
|
||||
'-fall-intrinsics'
|
||||
'-fbackslash'
|
||||
'-fcray-pointer'
|
||||
'-fd-lines-as-*'
|
||||
'-fdec*'
|
||||
'-fdefault-*'
|
||||
'-fdollar-ok'
|
||||
'-ffixed-*'
|
||||
'-ffree-*'
|
||||
'-fimplicit-none'
|
||||
'-finteger-4-integer-8'
|
||||
'-fmax-identifier-length*'
|
||||
'-fmodule-private'
|
||||
'-fno-range-check'
|
||||
'-freal-*'
|
||||
'-ftest-forall-temp'
|
||||
'-std=f*'
|
||||
'-std=gnu'
|
||||
'-std=legacy'
|
||||
)
|
||||
|
||||
FLAG_FILTER_CXX_FORTRAN=(
|
||||
'-std=c1*'
|
||||
'-std=c8*'
|
||||
'-std=c9*'
|
||||
'-std=gnu1*'
|
||||
'-std=gnu8*'
|
||||
'-std=gnu9*'
|
||||
'-std=iso*'
|
||||
'-Wimplicit-function-declaration'
|
||||
)
|
||||
|
||||
FLAG_FILTER_C_FORTRAN=(
|
||||
'-fabi-*'
|
||||
'-faligned-new'
|
||||
'-fcheck-new'
|
||||
'-fconcepts'
|
||||
'-fconstexpr-*'
|
||||
'-fdeduce-init-list'
|
||||
'-fext*'
|
||||
'-ffor-scope'
|
||||
'-ffriend-injection'
|
||||
'-fms-extensions'
|
||||
'-fnew-inheriting-ctors'
|
||||
'-fnew-ttp-matching'
|
||||
'-fno-access-control'
|
||||
'-fno-elide-constructors'
|
||||
'-fno-enforce-eh-specs'
|
||||
'-fno-extern-tls-init'
|
||||
'-fno-for-scope'
|
||||
'-fno-gnu-keywords'
|
||||
'-fno-implement-inlines'
|
||||
'-fno-implicit-*'
|
||||
'-fno-nonansi-builtins'
|
||||
'-fno-operator-names'
|
||||
'-fno-optional-diags'
|
||||
'-fno-pretty-templates'
|
||||
'-fno-rtti'
|
||||
'-fno-threadsafe-statics'
|
||||
'-fno-use-cxa-get-exception-ptr'
|
||||
'-fno-weak'
|
||||
'-fnothrow-opt'
|
||||
'-fpermissive'
|
||||
'-frepo'
|
||||
'-fsized-deallocation'
|
||||
'-fstrict-enums'
|
||||
'-fstrong-eval-order'
|
||||
'-ftemplate-*'
|
||||
'-fuse-cxa-atexit'
|
||||
'-fvisibility-*'
|
||||
'-nostdinc++'
|
||||
'-std=c++*'
|
||||
'-std=gnu++*'
|
||||
'-Wabi*'
|
||||
'-Wctor-dtor-privacy'
|
||||
'-Wdelete-non-virtual-dtor'
|
||||
'-Weffc++'
|
||||
'-Wliteral-suffix'
|
||||
'-Wlto-type-mismatch'
|
||||
'-Wmultiple-inheritance'
|
||||
'-Wnamespaces'
|
||||
'-Wno-narrowing'
|
||||
'-Wno-non-template-friend'
|
||||
'-Wno-pmf-conversions'
|
||||
'-Wno-terminate'
|
||||
'-Wnoexcept'
|
||||
'-Wnon-virtual-dtor'
|
||||
'-Wold-style-cast'
|
||||
'-Woverloaded-virtual'
|
||||
'-Wregister'
|
||||
'-Wreorder'
|
||||
'-Wsign-promo'
|
||||
'-Wstrict-null-sentinel'
|
||||
'-Wtemplates'
|
||||
'-Wvirtual-inheritance'
|
||||
)
|
||||
|
||||
FLAG_FILTER_CFLAGS=(
|
||||
)
|
||||
|
||||
FLAG_FILTER_CXXFLAGS=(
|
||||
)
|
||||
|
||||
FLAG_FILTER_FORTRAN=(
|
||||
'-ansi'
|
||||
'-fallow-parameterless-variadic-functions'
|
||||
'-fcilkplus'
|
||||
'-fcond-mismatch'
|
||||
'-fdirectives-only'
|
||||
'-ffreestanding'
|
||||
'-fgimple'
|
||||
'-fgnu-tm'
|
||||
'-fgnu89-inline'
|
||||
'-fhosted'
|
||||
'-flax-vector-conversions'
|
||||
'-fms-extensions'
|
||||
'-fno-asm'
|
||||
'-fno-builtin*'
|
||||
'-fno-signed-bitfields'
|
||||
'-fno-unsigned-bitfields'
|
||||
'-fpermitted-flt-eval-methods*'
|
||||
'-fplan9-extensions'
|
||||
'-fsigned-*'
|
||||
'-fsso-struct*'
|
||||
'-funsigned-*'
|
||||
'-Wchkp'
|
||||
'-Wclobbered'
|
||||
'-Wformat*'
|
||||
'-Wvolatile-register-var'
|
||||
)
|
||||
|
||||
FLAG_FILTER_FFLAGS=(
|
||||
)
|
||||
|
||||
FLAG_FILTER_FCFLAGS=(
|
||||
)
|
||||
|
||||
FLAG_FILTER_F77FLAGS=(
|
||||
)
|
||||
|
||||
FLAG_FILTER_NONGNU=(
|
||||
'-fcf-protection*'
|
||||
'-fdevirtualize-at-ltrans'
|
||||
'-fdevirtualize-speculatively'
|
||||
'-fdirectives-only'
|
||||
'-ffat-lto-objects'
|
||||
'-fgcse*'
|
||||
'-fgraphite*'
|
||||
'-finline-functions'
|
||||
'-fipa-pta'
|
||||
'-fira-loop-pressure'
|
||||
'-fisolate-erroneous-paths-attribute'
|
||||
'-fivopts'
|
||||
'-flimit-function-alignment'
|
||||
'-floop*'
|
||||
'-flto=[0-9]*'
|
||||
'-flto=auto'
|
||||
'-flto=jobserver'
|
||||
'-flto-partition=*'
|
||||
'-flto-compression-level=*'
|
||||
'-fmodulo*'
|
||||
'-fno-enforce-eh-specs'
|
||||
'-fno-ident'
|
||||
'-fno-ipa-cp-clone'
|
||||
'-fno-plt' # causes various runtime segfaults for clang:6 compiled code
|
||||
'-fno-semantic-interposition'
|
||||
'-fnothrow-opt'
|
||||
'-fpredictive-commoning'
|
||||
'-frename-registers'
|
||||
'-freorder-functions'
|
||||
'-frerun-cse-after-loop'
|
||||
'-fsched*'
|
||||
'-fsection-anchors'
|
||||
'-fstack-clash-protection'
|
||||
'-ftree*'
|
||||
'-funsafe-loop*'
|
||||
'-fuse-linker-plugin'
|
||||
'-fvect-cost-model'
|
||||
'-fweb'
|
||||
'-fwhole-program'
|
||||
'-malign-data*'
|
||||
'-mfunction-return*'
|
||||
'-mindirect-branch*'
|
||||
'-mvectorize*'
|
||||
'-Wl,-z,retpolineplt' # does not work, currently
|
||||
)
|
||||
|
||||
FLAG_FILTER_GNU=(
|
||||
'-emit-llvm'
|
||||
'-flto=full'
|
||||
'-flto=thin'
|
||||
'-flto-jobs=*'
|
||||
'-fopenmp=*'
|
||||
'-frewrite-includes'
|
||||
'-fsanitize=cfi'
|
||||
'-fsanitize=safe-stack'
|
||||
'-mllvm'
|
||||
'-mretpoline*'
|
||||
'-polly*'
|
||||
'-Wl,-z,retpolineplt'
|
||||
)
|
||||
|
||||
FlagEval() {
|
||||
case $- in
|
||||
*f*) eval "$*";;
|
||||
*) set -f
|
||||
eval "$*"
|
||||
set +f;;
|
||||
esac
|
||||
}
|
||||
|
||||
FlagNodupAdd() {
|
||||
local addres addf addvar dups
|
||||
dups=$1
|
||||
shift
|
||||
addvar=$1
|
||||
shift
|
||||
eval addres=\$$addvar
|
||||
for addf
|
||||
do case " $addres $dups " in
|
||||
*[[:space:]]"$addf"[[:space:]]*)
|
||||
continue;;
|
||||
esac
|
||||
addres=$addres${addres:+\ }$addf
|
||||
done
|
||||
eval $addvar=\$addres
|
||||
}
|
||||
|
||||
FlagAdd() {
|
||||
FlagNodupAdd '' "$@"
|
||||
}
|
||||
|
||||
FlagSub() {
|
||||
local subres subpat subf subvar sublist
|
||||
subvar=$1
|
||||
shift
|
||||
subres=
|
||||
eval sublist=\$$subvar
|
||||
for subf in $sublist
|
||||
do for subpat
|
||||
do [ -n "${subpat:++}" ] || continue
|
||||
case $subf in
|
||||
$subpat)
|
||||
subf=
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
[ -z "${subf:++}" ] || subres=$subres${subres:+\ }$subf
|
||||
done
|
||||
eval $subvar=\$subres
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
FlagSet() {
|
||||
local setvar
|
||||
setvar=$1
|
||||
shift
|
||||
eval $setvar=\$*
|
||||
}
|
||||
|
||||
FlagAddCFlags() {
|
||||
FlagAdd CFLAGS "$@"
|
||||
FlagAdd CXXFLAGS "$@"
|
||||
}
|
||||
|
||||
FlagSubCFlags() {
|
||||
FlagSub CFLAGS "$@"
|
||||
FlagSub CXXFLAGS "$@"
|
||||
FlagSub CPPFLAGS "$@"
|
||||
FlagSub OPTCFLAGS "$@"
|
||||
FlagSub OPTCXXFLAGS "$@"
|
||||
FlagSub OPTCPPFLAGS "$@"
|
||||
}
|
||||
|
||||
FlagReplaceCFlags() {
|
||||
FlagReplace CFLAGS "$@"
|
||||
FlagReplace CXXFLAGS "$@"
|
||||
FlagReplace CPPFLAGS "$@"
|
||||
FlagSub OPTCFLAGS "$1"
|
||||
FlagSub OPTCXXFLAGS "$1"
|
||||
FlagSub OPTCPPFLAGS "$1"
|
||||
}
|
||||
|
||||
FlagSetCFlags() {
|
||||
FlagSet CFLAGS "$@"
|
||||
CXXFLAGS=$CFLAGS
|
||||
CPPFLAGS=
|
||||
OPTCFLAGS=
|
||||
OPTCXXFLAGS=
|
||||
OPTCPPFLAGS=
|
||||
}
|
||||
|
||||
FlagAddFFlags() {
|
||||
FlagAdd FFLAGS "$@"
|
||||
FlagAdd FCFLAGS "$@"
|
||||
FlagAdd F77FLAGS "$@"
|
||||
}
|
||||
|
||||
FlagSubFFlags() {
|
||||
FlagSub FFLAGS "$@"
|
||||
FlagSub FCFLAGS "$@"
|
||||
FlagSub F77FLAGS "$@"
|
||||
}
|
||||
|
||||
FlagReplaceFFlags() {
|
||||
FlagReplace FFLAGS "$@"
|
||||
FlagReplace FCFLAGS "$@"
|
||||
FlagReplace F77FLAGS "$@"
|
||||
}
|
||||
|
||||
FlagSetFFlags() {
|
||||
FlagSet FFLAGS "$@"
|
||||
FlagSet FCFLAGS "$@"
|
||||
FlagSet F77FLAGS "$@"
|
||||
}
|
||||
|
||||
FlagAddAllFlags() {
|
||||
FlagAddCFlags "$@"
|
||||
FlagAddFFlags "$@"
|
||||
}
|
||||
|
||||
FlagSubAllFlags() {
|
||||
FlagSubCFlags "$@"
|
||||
FlagSubFFlags "$@"
|
||||
FlagSub LDFLAGS "$@"
|
||||
FlagSub OPTLDFLAGS "$@"
|
||||
}
|
||||
|
||||
FlagReplaceAllFlags() {
|
||||
FlagReplaceCFlags "$@"
|
||||
FlagReplaceFFlags "$@"
|
||||
FlagSub LDFLAGS "$1"
|
||||
FlagSub OPTLDFLAGS "$1"
|
||||
}
|
||||
|
||||
FlagSetAllFlags() {
|
||||
FlagSetCFlags "$@"
|
||||
FlagSetFFlags "$@"
|
||||
LDFLAGS=
|
||||
OPTLDFLAGS=
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
FlagExecute() {
|
||||
local ex exy excurr
|
||||
for excurr
|
||||
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
|
||||
}
|
||||
|
||||
FlagMask() {
|
||||
if command -v masked-packages >/dev/null 2>&1
|
||||
then
|
||||
FlagMask() {
|
||||
masked-packages -qm "$1" -- "$CATEGORY/$PF:${SLOT:-0}${PORTAGE_REPO_NAME:+::}${PORTAGE_REPO_NAME-}"
|
||||
}
|
||||
else
|
||||
FlagMask() {
|
||||
local add=
|
||||
case ${1%::*} in
|
||||
*':'*)
|
||||
add=:${SLOT:-0};;
|
||||
esac
|
||||
case $1 in
|
||||
*'::'*)
|
||||
add=$add::$PORTAGE_REPO_NAME;;
|
||||
esac
|
||||
case $1 in
|
||||
'~'*)
|
||||
case "~$CATEGORY/$PN-$PV$add" in
|
||||
$1)
|
||||
return;;
|
||||
esac;;
|
||||
'='*)
|
||||
case "=$CATEGORY/$PF$add" in
|
||||
$1)
|
||||
return;;
|
||||
esac;;
|
||||
*)
|
||||
case "$CATEGORY/$PN$add" in
|
||||
$1)
|
||||
return;;
|
||||
esac;;
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
fi
|
||||
FlagMask "$@"
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
FlagScanFiles() {
|
||||
local scanfile scanl oldifs scanifs
|
||||
scanifs=$IFS
|
||||
IFS=
|
||||
for scanfile
|
||||
do [ -z "${scanfile:++}" ] && continue
|
||||
test -r "$scanfile" || continue
|
||||
while read -r scanl
|
||||
do FlagParseLine "$scanifs" "$scanl"
|
||||
done <"$scanfile"
|
||||
done
|
||||
IFS=$scanifs
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
FlagSetUseNonGNU() {
|
||||
case $CC$CXX in
|
||||
*clang*)
|
||||
return 0;;
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
|
||||
FlagSetNonGNU() {
|
||||
: ${NOLDADD:=1}
|
||||
FlagSubAllFlags "${FLAG_FILTER_NONGNU[@]}"
|
||||
FlagReplaceAllFlags '-fstack-check*' '-fstack-check'
|
||||
# FlagAddCFlags '-flto' '-emit-llvm'
|
||||
}
|
||||
|
||||
FlagSetGNU() {
|
||||
FlagSubAllFlags "${FLAG_FILTER_GNU[@]}"
|
||||
}
|
||||
|
||||
FlagMesonDedup() {
|
||||
local newld=
|
||||
FlagNodupAdd "$CFLAGS $CXXFLAGS $CPPFLAGS $FFLAGS $FCFLAGS $F77FLAGS" \
|
||||
newld $LDFLAGS
|
||||
LDFLAGS=$newld
|
||||
}
|
||||
|
||||
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"
|
||||
elif $use_pgo
|
||||
then FlagAddCFlags "-fprofile-use=$PGO_DIR" \
|
||||
-fvpt -fbranch-probabilities -fprofile-correction
|
||||
else : ${KEEPPGO:=:}
|
||||
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
|
||||
}
|
||||
|
||||
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"
|
||||
elif $use_pgo
|
||||
then BashrcdEcho "Using PGO from $PGO_DIR"
|
||||
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`"
|
||||
}
|
||||
|
||||
FlagCompile() {
|
||||
eerror \
|
||||
"${PORTAGE_CONFIGROOT%/}/etc/portage/bashrc.d/*flag.sh strange order of EBUILD_PHASE:"
|
||||
die "compile or preinst before setup"
|
||||
exit 2
|
||||
}
|
||||
|
||||
FlagPreinst() {
|
||||
FlagCompile
|
||||
}
|
||||
|
||||
FlagSetup() {
|
||||
FlagCompile() {
|
||||
:
|
||||
}
|
||||
local use_pgo
|
||||
FlagSetFlags
|
||||
if BashrcdTrue $PGO
|
||||
then
|
||||
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'
|
||||
}
|
||||
elif BashrcdTrue $KEEPPGO
|
||||
then
|
||||
FlagPreinst() {
|
||||
:
|
||||
}
|
||||
else
|
||||
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
|
||||
FlagInfoExport
|
||||
}
|
||||
|
||||
BashrcdPhase compile FlagCompile
|
||||
BashrcdPhase preinst FlagPreinst
|
||||
BashrcdPhase setup FlagSetup
|
47
bashrc.d/20-title.sh
Normal file
47
bashrc.d/20-title.sh
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
# (C) Martin V\"ath <martin at mvath.de>
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
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"
|
||||
}
|
||||
|
||||
BashrcdPhase setup QlopSetup
|
1
bashrc.d/41-lto-patch.sh
Symbolic link
1
bashrc.d/41-lto-patch.sh
Symbolic link
@@ -0,0 +1 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/bashrc.d/41-lto-patch.sh
|
1
bashrc.d/43-lto-no-common.sh
Symbolic link
1
bashrc.d/43-lto-no-common.sh
Symbolic link
@@ -0,0 +1 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/bashrc.d/43-lto-no-common.sh
|
42
bashrc.d/50-ccache.sh
Normal file
42
bashrc.d/50-ccache.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
# (C) Martin V\"ath <martin at mvath.de>
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
# Portage explicitly unsets all CCACHE_* variables in each phase.
|
||||
# Therefore, we save them to BASHRCD_CCACHE_* in the setup phase;
|
||||
# in all later phases, we restore CCACHE_* from these variables
|
||||
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
|
||||
# Default to NOHASHDIR unless contrary is specified
|
||||
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
|
||||
CcacheRestore() {
|
||||
local i j
|
||||
unset ${!CCACHE_*}
|
||||
for i in ${!BASHRCD_CCACHE_*}
|
||||
do j=${i##BASHRCD_}
|
||||
eval $j=\$$i
|
||||
export $j
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
CcacheRestore() {
|
||||
:
|
||||
}
|
||||
|
||||
# Register CcacheRestore before CcacheSetup to save time in setup phase
|
||||
BashrcdPhase all CcacheRestore
|
||||
BashrcdPhase setup CcacheSetup
|
412
bashrc.d/80-localepurge.sh
Normal file
412
bashrc.d/80-localepurge.sh
Normal file
@@ -0,0 +1,412 @@
|
||||
#!/bin/bash
|
||||
# (C) Martin V\"ath <martin at mvath.de>
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
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
|
||||
"
|
||||
|
||||
LocalePurgeNokeep() {
|
||||
local locale_keep
|
||||
for locale_keep in $KEEP_LOCALES
|
||||
do case $1 in
|
||||
$locale_keep)
|
||||
return 1;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
BashrcdPhase preinst LocalePurge
|
25
bashrc.d/80-remove_la.sh
Normal file
25
bashrc.d/80-remove_la.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# (C) Martin V\"ath <martin at mvath.de>
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
Remove_la() {
|
||||
BashrcdTrue $NOLAFILEREMOVE && return
|
||||
# Some packages are known to rely on .la files (e.g. for building of plugins):
|
||||
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 '{}' '+'
|
||||
}
|
||||
|
||||
BashrcdPhase preinst Remove_la
|
BIN
bashrc.d/README.bz2
Normal file
BIN
bashrc.d/README.bz2
Normal file
Binary file not shown.
86
bashrc.d/bashrcd.sh
Normal file
86
bashrc.d/bashrcd.sh
Normal file
@@ -0,0 +1,86 @@
|
||||
#!/bin/bash
|
||||
# (C) Martin V\"ath <martin at mvath.de>
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
BashrcdTrue() {
|
||||
case ${1:-n} in
|
||||
[nNfF]*|[oO][fF]*|0|-)
|
||||
return 1;;
|
||||
esac
|
||||
:
|
||||
}
|
||||
|
||||
BashrcdLog() {
|
||||
local i m=elog
|
||||
BashrcdTrue $BASHRCDNOLOG && m=einfo
|
||||
for i
|
||||
do $m "$i"
|
||||
done
|
||||
}
|
||||
|
||||
BashrcdEcho() {
|
||||
local i m=einfo
|
||||
BashrcdTrue $BASHRCDLOG && m=elog
|
||||
for i
|
||||
do $m "$i"
|
||||
done
|
||||
}
|
||||
|
||||
BashrcdPhase() {
|
||||
local c
|
||||
eval c=\${bashrcd_phases_c_$1}
|
||||
if [ -n "${c:++}" ]
|
||||
then c=$(( $c + 1 ))
|
||||
else c=0
|
||||
fi
|
||||
eval "bashrcd_phases_c_$1=\$c
|
||||
bashrcd_phases_${c}_$1=\$2"
|
||||
}
|
||||
|
||||
BashrcdMain() {
|
||||
local bashrcd
|
||||
for bashrcd in "${PORTAGE_CONFIGROOT%/}/etc/portage/bashrc.d/"*.sh
|
||||
do case $bashrcd in
|
||||
*'/bashrcd.sh')
|
||||
continue;;
|
||||
esac
|
||||
test -r "$bashrcd" || continue
|
||||
. "$bashrcd"
|
||||
BashrcdTrue $BASHRCD_DEBUG && BashrcdEcho "$bashrcd sourced"
|
||||
done
|
||||
unset -f BashrcdPhase
|
||||
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
|
||||
}
|
||||
BashrcdMain "$@"
|
||||
}
|
Reference in New Issue
Block a user