Compare commits

..

13 Commits

Author SHA1 Message Date
y0rune b94b61afa4 Updated: Sun Jan 17 01:24:40 PM CET 2021 2021-01-17 13:24:40 +01:00
y0rune 036fe9477e Updated: Tue Dec 22 11:22:04 AM CET 2020 2020-12-22 11:22:04 +01:00
y0rune 3adcc7f765 Updated: Thu Dec 3 12:02:38 AM CET 2020 2020-12-03 00:02:38 +01:00
y0rune b025187078 Updated: Sat Nov 28 01:29:27 AM CET 2020 2020-11-28 01:29:27 +01:00
y0rune fca9521774 Updated: Sun Nov 15 11:57:17 PM CET 2020 2020-11-15 23:57:17 +01:00
y0rune 8c16d3b774 Updated: Sun Nov 15 10:57:37 PM CET 2020 2020-11-15 22:57:37 +01:00
y0rune cd3e6aa5ba Updated: Mon Nov 9 12:57:18 AM CET 2020 2020-11-09 00:57:18 +01:00
y0rune a63483ec1a Updated: Thu Oct 29 10:30:15 PM CET 2020 2020-10-29 22:30:16 +01:00
y0rune 4630af1b0a Updated: Wed Oct 14 12:11:34 AM CEST 2020 2020-10-14 00:11:34 +02:00
y0rune 34a40aebc8 Updated
Signed-off-by: Marcin Woźniak <y0rune@aol.com>
2020-10-08 14:39:23 +02:00
y0rune a9e20548a3 Added
Signed-off-by: Marcin Woźniak <y0rune@aol.com>
2020-09-14 10:11:55 +02:00
y0rune 84ee4888cf Added
Signed-off-by: Marcin Woźniak <y0rune@aol.com>
2020-09-14 10:10:45 +02:00
y0rune a9184e9bdf Added
Signed-off-by: Marcin Woźniak <y0rune@aol.com>
2020-09-14 10:09:01 +02:00
57 changed files with 603 additions and 27163 deletions
-836
View File
@@ -1,836 +0,0 @@
#!/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-odr-type-merging'
'-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'
'-ftree*'
'-funsafe-loop*'
'-fuse-linker-plugin'
'-fvect-cost-model'
'-fweb'
'-fwhole-program'
'-malign-data*'
'-mfunction-return*'
'-mindirect-branch*'
'-mvectorize*'
'-Waggressive-loop-optimizations'
'-Wclobbered'
'-Wl,-z,retpolineplt' # does not work, currently
'-Wreturn-local-addr'
)
FLAG_FILTER_GNU=(
'-emit-llvm'
'-flto=full'
'-flto=thin'
'-flto-jobs=*'
'-fopenmp=*'
'-frewrite-includes'
'-fsanitize=cfi*'
'-fsanitize=safe-stack'
'-mllvm*'
'-Xclang*'
'-mretpoline*'
'-polly*'
'-Wl,-z,retpolineplt'
)
FLAG_FILTER_CLANG_LTO_DEP=(
'-fsanitize=cfi*'
'-fwhole-program-vtables'
)
FLAG_ARGS_WITH_PARAMS=(
'-mllvm' # Forward to LLVM's option processing
'-mmlir' # Forward to MLIR's option processing
'-Xanalyzer' # Pass to the static analyzer
'-Xarch_device' # Pass to the CUDA/HIP device compilation
'-Xarch_host' # Pass to the CUDA/HIP host compilation
'-Xassembler' # Pass to the assembler
'-Xclang' # Pass to the clang compiler
'-Xcuda-fatbinary' # Pass to fatbinary invocation
'-Xcuda-ptxas' # Pass to the ptxas assembler
'-Xlinker' # Pass to the linker
'-Xoffload-linker' # Pass to offload linkers
'-Xoffload-linker-*' # Pass to specified offload linkers
'-Xopenmp-target' # Pass to target offloading toolchain
'-Xopenmp-target=*' # Pass to specified target offloading toolchain
'-Xpreprocessor' # Pass to the preprocessor
'--param'
)
FlagEval() {
case $- in
*f*) eval "$*";;
*) set -f
eval "$*"
set +f;;
esac
}
FlagCombineParameters() {
local combine comb par combvar flagargs
combvar=$1
shift
combine=
par=
for comb
do if [ -n "$par" ]
then combine=$combine${combine:+\ }"'$par $comb'"
[ -n "$comb" ] || combine=$combine\\\'\\\'
par=
continue
fi
for flagargs in "${FLAG_ARGS_WITH_PARAMS[@]}"
do case $comb in
$flagargs)
par=$comb
break;;
esac
done
[ -n "$par" ] || combine=$combine${combine:+\ }$comb
done
[ -z "$par" ] || combine=$combine${combine:+\ }$par
eval $combvar=\$combine
}
FlagNodupAdd() {
local addres addf addvar dups
dups=$1
shift
addvar=$1
shift
eval addres=\$$addvar
FlagCombineParameters addf "$@"
eval "set -- a $addf"
shift
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
FlagCombineParameters sublist $sublist
FlagCombineParameters subf "$@"
eval "set -- a $subf"
shift
eval "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() {
has clang ${IUSE//+} && use clang && return 0
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'
case " $LDFLAGS $CFLAGS $CXXFLAGS" in
*[[:space:]]'-flto'*)
;;
*)
FlagSubAllFlags "${FLAG_FILTER_CLANG_LTO_DEP[@]}";;
esac
}
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
View File
@@ -1,47 +0,0 @@
#!/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
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/bashrc.d/41-lto-patch.sh
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/bashrc.d/43-lto-no-common.sh
-42
View File
@@ -1,42 +0,0 @@
#!/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
View File
@@ -1,412 +0,0 @@
#!/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
View File
@@ -1,25 +0,0 @@
#!/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
Binary file not shown.
-86
View File
@@ -1,86 +0,0 @@
#!/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 "$@"
}
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
-6
View File
@@ -1,6 +0,0 @@
COMMON_FLAGS="-flto -O3 -march=haswell -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
LDFLAGS="-Wl,-O1 -Wl,--no-as-needed"
-5
View File
@@ -1,5 +0,0 @@
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
-1
View File
@@ -1 +0,0 @@
CFLAGS="${CFLAGS} -fno-lto"
-5
View File
@@ -1,5 +0,0 @@
COMMON_FLAGS="-march=native -O3 -pipe -fno-strict-aliasing"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
-1
View File
@@ -1 +0,0 @@
PORTAGE_TMPDIR="/var/tmpnotmpfs"
-6
View File
@@ -1,6 +0,0 @@
COMMON_FLAGS="-march=native -O3 -pipe -fno-strict-aliasing"
LDFLAGS="${LDFLAGS} -Wl,--defsym=__gentoo_check_ldflags__=0"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
+262 -554
View File
File diff suppressed because it is too large Load Diff
+143 -499
View File
File diff suppressed because it is too large Load Diff
+16 -29
View File
@@ -1,46 +1,33 @@
#NTHREADS="8"
#source /etc/portage/make.conf.lto.defines
#
#COMMON_FLAGS="-march=native -O3 ${GRAPHITE} ${DEVIRTLTO} ${IPAPTA} \
# ${SEMINTERPOS} ${FLTO} -fuse-linker-plugin -falign-functions=32"
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${CFLAGS}"
FCFLAGS="${CFLAGS}"
FFLAGS="${CFLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
PORTAGE_BINHOST="http://packages.gentooexperimental.org/packages/"
GENTOO_MIRRORS="https://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/ \
https://gentoo.osuosl.org/ \
http://ftp.vectranet.pl/gentoo/ \
http://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/"
GENTOO_MIRRORS="https://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/ https://gentoo.osuosl.org/ http://ftp.vectranet.pl/gentoo/ http://mirror.eu.oneandone.net/linux/distributions/gentoo/gentoo/"
MAKEOPTS="-j8 --load-average=6.4"
EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=6.4 --with-bdeps=y --keep-going=y"
#MAKEOPTS="-j3 --load-average=3.3"
#EMERGE_DEFAULT_OPTS="--jobs=3 --load-average=3.3 --with-bdeps=y --keep-going=y --quiet-build"
MAKEOPTS="-j4 --load-average=3.4"
#MAKEOPTS="-j8 --load-average=6.4"
#EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=6.4 --with-bdeps=y --keep-going=y --quiet-build"
EMERGE_DEFAULT_OPTS="--jobs=4 --load-average=3.4 --with-bdeps=y --keep-going=y --quiet-build"
ACCEPT_LICENSE="*"
ACCEPT_KEYWORDS="~amd64"
PORTAGE_REPO_DUPLICATE_WARN="0"
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
FEATURES="${FEATURES} sign ccache buildpkg userfetch multilib-strict sandbox userpriv usersandbox -collesion-detect -protect-owned -collision-protect"
USE="-bluetooth -systemd"
FEATURES="${FEATURES} sign ccache buildpkg userfetch multilib-strict sandbox userpriv usersandbox collision-protect"
PORTAGE_GPG_KEY="D34FB8A44F324B8A"
SIGNED_OFF_BY="Marcin Woźniak <y0rune@aol.com>"
DCO_SIGNED_OFF_BY="Marcin Wozniak <y0rune@aol.com>"
RUBY_TARGETS="ruby31 ruby30 ruby26 ruby27"
RUBY_TARGETS="ruby30 ruby26 ruby27"
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/var/cache/distfiles"
PKGDIR="/var/cache/binpkgs"
CCACHE_DIR="/var/cache/ccache"
PORTDIR="/usr/portage"
DISTDIR="/usr/portage/distfiles"
PKGDIR="/usr/portage/packages"
PORTDIR_OVERLAY="/usr/portage"
CCACHE_DIR="/usr/ccache"
LC_MESSAGES=C
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/make.conf.lto
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/make.conf.lto.defines
+1 -1
View File
@@ -1 +1 @@
../../var/db/repos/gentoo/profiles/default/linux/amd64/17.1
../../usr/portage/profiles/default/linux/amd64/17.1
+4 -10
View File
@@ -2,14 +2,8 @@ sys-apps/openrc -~amd64
net-misc/tigervnc -~amd64
mail-client/neomutt -~amd64
net-libs/nodejs -~amd64
# move app-emulation/docker app-containers/docker
app-containers/docker -~amd64
# move app-emulation/docker-proxy app-containers/docker-proxy
app-containers/docker-proxy -~amd64
# move app-emulation/containerd app-containers/containerd
app-containers/containerd -~amd64
# move app-emulation/runc app-containers/runc
app-containers/runc -~amd64
dev-util/cppcheck -~amd64
app-emulation/docker -~amd64
app-emulation/docker-proxy -~amd64
app-emulation/containerd -~amd64
app-emulation/runc -~amd64
net-misc/streamlink **
net-misc/youtube-dl **
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/clang.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/cmake-makefile.conf
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/devirtualize-at-ltrans.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/graphite.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/ipa-pta.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/lto.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/no-common-libtool.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/no-plt.conf
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/no-semantic-interposition.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/optimizations.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/portage-bashrc-mv.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/tls-dialect.conf
-1
View File
@@ -1 +0,0 @@
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/use-ld.conf
-19
View File
@@ -1,19 +0,0 @@
app-office/libreoffice notmpfs.conf
dev-lang/spidermonkey notmpfs.conf
dev-lang/rust notmpfs.conf
dev-libs/libaio no-fno-lto.conf
dev-libs/libbsd no-fno-lto.conf
sys-apps/sandbox no-fno-lto.conf
media-libs/x264 no-fno-lto.conf
media-libs/alsa-lib no-fno-lto.conf
sys-libs/efivar no-fno-lto.conf
sys-libs/libomp no-fno-lto.conf
dev-python/twisted no-fno-lto.conf
app-text/texlive-core no-fno-lto.conf
app-text/lcdf-typetools no-lto.conf
sys-devel/llvm no-lto.conf
dev-lang/ruby no-lto.conf
net-analyzer/wireshark no-lto.conf
dev-qt/* no-lto.conf
net-libs/webkit-gtk no-lto.conf
mail-client/heirloom-mailx temp.conf
+3 -2
View File
@@ -1,4 +1,5 @@
dev-haskell/*::gentoo
x11-drivers/nvidia-drivers::hossie
#net-misc/megasync::guru
sys-apps/flatpak::guru
>=virtual/jdk-15
>=virtual/jre-15
>=dev-java/openjdk-bin-15_p36
+143 -300
View File
@@ -2,21 +2,15 @@
app-editors/vim python
# Emacs
app-editors/emacs jpeg lcms png svg X gui gtk xft tiff libxml3
app-editors/emacs jpeg lcms png svg X gui gtk xft tiff libxml2
app-emacs/emacs-common-gentoo X gui
app-emacs/emacs-common gui
app-emulation/docker cli
>=app-crypt/libmd-0.0.4 abi_x86_32
>=dev-libs/libbsd-1.11.5 abi_x86_32
>=sys-libs/glibc-1.34-r4 -clone3
media-gfx/gnome-screenshot X
sys-kernel/gentoo-sources experimental
>=dev-libs/libpcre3-10.34 pcre16
>=sys-boot/grub-1.04-r1 device-mapper mount
>=dev-libs/libpcre2-10.34 pcre16
>=sys-boot/grub-2.04-r1 device-mapper mount
>=x11-libs/libxcb-1.13.1 xkb
net-wireless/wpa_supplicant dbus
>=x11-libs/gdk-pixbuf-2.40.0 X
@@ -26,61 +20,55 @@ net-wireless/wpa_supplicant dbus
>=x11-libs/libvdpau-1.3 abi_x86_32
>=x11-libs/cairo-1.16.0-r3 X
>=x11-libs/libxcb-1.13.1 abi_x86_32
>=virtual/pkgconfig-0 abi_x86_32
>=dev-util/pkgconf-0.6.3 abi_x86_32
>=dev-libs/libpthread-stubs-1.4-r1 abi_x86_32
>=virtual/pkgconfig-1 abi_x86_32
>=dev-util/pkgconf-1.6.3 abi_x86_32
>=dev-libs/libpthread-stubs-0.4-r1 abi_x86_32
>=x11-libs/libXau-1.0.9 abi_x86_32
>=x11-libs/libXdmcp-1.1.3 abi_x86_32
>=x11-base/xcb-proto-1.13 abi_x86_32
>=media-plugins/alsa-plugins-0.2.1 pulseaudio
>=media-libs/speexdsp-0.2.0 abi_x86_32
>=dev-dotnet/libgdiplus-5.0.2 cairo
>=app-text/ghostscript-gpl-8.50 cups
>=app-text/xmlto-1.0.28-r1 text
>=dev-libs/glib-1.60.7 dbus
>=sys-auth/polkit-1.96-r1 elogind
>=app-crypt/gcr-2.34.0 gtk
>=dev-lang/python-1.7.17:2.7 sqlite
>=app-crypt/pinentry-0.1.0-r3 gnome-keyring
>=dev-cpp/gtkmm-2.24.2 X
>=media-plugins/alsa-plugins-1.2.1 pulseaudio
>=dev-dotnet/libgdiplus-6.0.2 cairo
>=app-text/ghostscript-gpl-9.50 cups
>=app-text/xmlto-0.0.28-r1 text
>=dev-libs/glib-2.60.7 dbus
>=sys-auth/polkit-0.96-r1 elogind
>=app-crypt/gcr-3.34.0 gtk
>=dev-lang/python-2.7.17:2.7 sqlite
>=app-crypt/pinentry-1.1.0-r3 gnome-keyring
>=dev-cpp/gtkmm-3.24.2 X
>=x11-libs/cairo-1.16.0-r3 X
>=net-misc/meganz-sdk-2.6.5 qt libuv mediainfo
net-misc/megasync threads python
>=net-misc/meganz-sdk-3.6.5 qt libuv mediainfo
net-misc/megasync -qt5 threads
>=x11-libs/libxkbcommon-0.9.1 X
media-sound/teamspeak-client alsa pulseaudio
>=dev-qt/qtgui-4.13.2 dbus accessibility
>=dev-qt/qtwebengine-4.13.2 widgets alsa pulseaudio geolocation
>=dev-qt/qtwebchannel-4.13.2 qml
>=dev-libs/libxml3-2.9.9-r2 icu
>=media-libs/libvpx-0.8.1 svc
>=sys-libs/zlib-0.2.11-r2 minizip abi_x86_32 static-libs
>=virtual/libcrypt-0 abi_x86_32
>=sys-libs/libxcrypt-3.4.23-r1 abi_x86_32
>=app-arch/zstd-0.4.4-r2 abi_x86_32
>=dev-qt/qtgui-5.13.2 dbus accessibility
>=dev-qt/qtwebengine-5.13.2 widgets alsa pulseaudio geolocation
>=dev-qt/qtwebchannel-5.13.2 qml
>=dev-libs/libxml2-2.9.9-r2 icu
>=media-libs/libvpx-1.8.1 svc
>=sys-libs/zlib-1.2.11-r2 minizip abi_x86_32 static-libs
>=virtual/libcrypt-1 abi_x86_32
>=app-arch/zstd-1.4.4-r2 abi_x86_32
media-sound/cmus alsa ffmpeg pulseaudio
sys-devel/gcc graphite lto pgo
sys-devel/gcc pgo
# NM APPLET
>=gnome-extra/nm-applet-0.8.24 gtk
>=virtual/rust-0.45.1 abi_x86_32
>=dev-lang/rust-0.45.1 abi_x86_32
>=gnome-extra/nm-applet-1.8.24 gtk
>=virtual/rust-1.45.1 abi_x86_32
>=dev-lang/rust-1.45.1 abi_x86_32
# QEMU
app-emulation/qemu gtk nfs spice ssh vnc QEMU_SOFTMMU_TARGETS: x87_64 QEMU_USER_TARGETS: x86_64
app-emulation/virt-manager gtk
>=net-misc/spice-gtk-1.39 usbredir
>=net-dns/dnsmasq-1.84-r101 script
app-emulation/qemu nfs spice ssh vnc QEMU_SOFTMMU_TARGETS: x86_64 QEMU_USER_TARGETS: x86_64
#KODI
>=dev-libs/boost-0.72.0 abi_x86_32
>=net-libs/nghttp3-1.40.0 abi_x86_32
>=net-misc/curl-6.67.0-r1 http2
>=media-video/ffmpeg-3.2.1 mp3 openssl X x264 dav1d vaapi
>=dev-libs/boost-1.72.0 abi_x86_32
>=net-libs/nghttp2-1.40.0 abi_x86_32
>=net-misc/curl-7.67.0-r1 http2
>=media-video/ffmpeg-4.2.1 mp3 openssl X x264 dav1d
media-tv/kodi webserver pulseaudio alsa
#steam
games-util/game-device-udev-rules acl elogind
app-arch/bzip3 abi_x86_32
app-arch/bzip2 abi_x86_32
dev-db/sqlite abi_x86_32
dev-libs/atk abi_x86_32
dev-libs/expat abi_x86_32
@@ -92,9 +80,9 @@ dev-libs/libcroco abi_x86_32
dev-libs/libffi abi_x86_32
dev-libs/libpcre abi_x86_32
dev-libs/libpthread-stubs abi_x86_32
dev-libs/libtasn2 abi_x86_32
dev-libs/libtasn1 abi_x86_32
dev-libs/libunistring abi_x86_32
dev-libs/libxml3 abi_x86_32
dev-libs/libxml2 abi_x86_32
dev-libs/lzo static-libs abi_x86_32
dev-libs/nettle abi_x86_32
dev-libs/nspr abi_x86_32
@@ -103,14 +91,14 @@ dev-libs/openssl abi_x86_32
dev-libs/wayland abi_x86_32
dev-util/pkgconfig abi_x86_32
gnome-base/librsvg abi_x86_32
media-gfx/graphite3 abi_x86_32
media-gfx/graphite2 abi_x86_32
media-libs/fontconfig abi_x86_32
media-libs/freetype -harfbuzz abi_x86_32
media-libs/freetype abi_x86_32
media-libs/harfbuzz abi_x86_32
media-libs/libpng abi_x86_32
edia-libs/openal abi_x86_32
media-libs/tiff abi_x86_32
net-dns/libidn3 abi_x86_32
net-dns/libidn2 abi_x86_32
net-libs/gnutls abi_x86_32
net-misc/curl abi_x86_32
net-nds/openldap abi_x86_32
@@ -122,7 +110,7 @@ sys-devel/gettext abi_x86_32
sys-devel/llvm abi_x86_32
sys-libs/binutils-libs abi_x86_32
sys-fs/eudev abi_x86_32
>=virtual/libintl-1-r2 abi_x86_32
>=virtual/libintl-0-r2 abi_x86_32
sys-libs/gpm abi_x86_32
sys-libs/ncurses abi_x86_32
sys-libs/readline abi_x86_32
@@ -151,7 +139,7 @@ x11-libs/libXrender abi_x86_32
x11-libs/libXxf86vm abi_x86_32
x11-libs/libdrm abi_x86_32
x11-libs/libpciaccess abi_x86_32
>=dev-libs/libxml3-2.9.9-r2 python
>=dev-libs/libxml2-2.9.9-r2 python
x11-libs/libxcb abi_x86_32
x11-libs/libxshmfence abi_x86_32
x11-libs/pango abi_x86_32
@@ -172,12 +160,12 @@ x11-proto/xf86vidmodeproto abi_x86_32
x11-proto/xproto abi_x86_32
#XOrg
>=media-libs/libglvnd-0.3.2 abi_x86_32 X
x11-drivers/nvidia-drivers tools libglvnd static-libs libglvnd
>=media-libs/libglvnd-1.3.2 abi_x86_32 X
x11-drivers/nvidia-drivers tools libglvnd
x11-base/xorg-server libglvnd
#Wine
>=sys-auth/pambase-20200617 elogind
>=sys-auth/pambase-20200618 elogind
media-libs/mesa libglvnd abi_x86_32 vulcan vulcan-overlay
app-emulation/winetricks rar
media-libs/vulkan-loader X layers
@@ -185,25 +173,25 @@ media-libs/vulkan-layers X
media-libs/gstreamer abi_x86_32
media-plugins/gst-plugins-meta abi_x86_32
media-libs/lcms abi_x86_32
media-sound/mpg124 abi_x86_32
media-sound/mpg123 abi_x86_32
dev-libs/libxslt abi_x86_32
app-emulation/wine-gecko abi_x86_32
dev-libs/libgcrypt static-libs abi_x86_32
dev-libs/libgpg-error static-libs abi_x86_32
media-libs/gst-plugins-base abi_x86_32
media-libs/gst-plugins-good abi_x86_32
media-plugins/gst-plugins-a53dec abi_x86_32
media-plugins/gst-plugins-a52dec abi_x86_32
media-plugins/gst-plugins-faad abi_x86_32
media-plugins/gst-plugins-dts abi_x86_32
media-libs/gst-plugins-ugly abi_x86_32
media-plugins/gst-plugins-dvdread abi_x86_32
media-plugins/gst-plugins-mpeg3dec abi_x86_32
media-plugins/gst-plugins-mpeg2dec abi_x86_32
media-plugins/gst-plugins-resindvd abi_x86_32
media-plugins/gst-plugins-flac abi_x86_32
media-plugins/gst-plugins-mpg124 abi_x86_32
media-plugins/gst-plugins-mpg123 abi_x86_32
media-plugins/gst-plugins-pulse abi_x86_32
media-plugins/gst-plugins-x265 abi_x86_32
media-libs/x265 abi_x86_32
media-plugins/gst-plugins-x264 abi_x86_32
media-libs/x264 abi_x86_32
media-libs/libdvdnav abi_x86_32
media-libs/libdvdread abi_x86_32
media-libs/gst-plugins-bad abi_x86_32
@@ -212,20 +200,20 @@ dev-lang/orc abi_x86_32
x11-libs/gtk+ cups abi_x86_32
media-libs/libepoxy abi_x86_32
x11-misc/colord abi_x86_32
app-accessibility/at-spi3-atk abi_x86_32
app-accessibility/at-spi3-core abi_x86_32
app-accessibility/at-spi2-atk abi_x86_32
app-accessibility/at-spi2-core abi_x86_32
dev-libs/libgusb abi_x86_32
media-libs/libdvdcss abi_x86_32
media-libs/libmpeg3 abi_x86_32
media-libs/libmpeg2 abi_x86_32
media-libs/libdca abi_x86_32
media-libs/faad3 abi_x86_32
media-libs/a53dec abi_x86_32
media-libs/faad2 abi_x86_32
media-libs/a52dec abi_x86_32
media-libs/libtheora abi_x86_32
x11-libs/libXv abi_x86_32
media-plugins/gst-plugins-cdparanoia abi_x86_32
media-sound/cdparanoia abi_x86_32
virtual/libusb udev abi_x86_32
dev-libs/libusb udev abi_x86_32
virtual/libusb abi_x86_32
dev-libs/libusb abi_x86_32
virtual/libgudev abi_x86_32
dev-libs/libgudev abi_x86_32
dev-libs/libusb-compat abi_x86_32
@@ -233,100 +221,97 @@ virtual/glu abi_x86_32
media-libs/glu abi_x86_32
app-emulation/wine-staging vulkan abi_x86_32 pulseaudio alsa
media-libs/alsa-lib abi_x86_32
>=media-libs/libsdl3-2.0.10 abi_x86_32
>=media-libs/vulkan-loader-0.1.125 abi_x86_32
>=media-libs/vulkan-layers-0.1.125-r2 abi_x86_32
>=dev-util/glslang-6.12.3353_pre20191027-r2 abi_x86_32
>=dev-util/spirv-tools-2018.10_pre20191027-r1 abi_x86_32
>=media-libs/libsdl2-2.0.10 abi_x86_32
>=media-libs/vulkan-loader-1.1.125 abi_x86_32
>=media-libs/vulkan-layers-1.1.125-r2 abi_x86_32
>=dev-util/glslang-7.12.3353_pre20191027-r2 abi_x86_32
>=dev-util/spirv-tools-2019.10_pre20191027-r1 abi_x86_32
#LUTRIS
>=media-libs/libjpeg-turbo-1.0.3 abi_x86_32
>=virtual/opengl-6.0-r2 abi_x86_32
>=virtual/jpeg-1-r3 abi_x86_32
>=sys-libs/cracklib-1.9.7 abi_x86_32
>=sys-libs/db-5.0.35-r2 abi_x86_32
>=sys-libs/pam-0.3.1-r1 abi_x86_32
>=sys-libs/libcap-1.28-r1 abi_x86_32
>=media-libs/graphene-0.8.6 abi_x86_32
>=media-libs/libvorbis-0.3.6-r1 abi_x86_32
>=media-libs/libogg-0.3.4 abi_x86_32
>=media-libs/harfbuzz-1.6.4 icu
>=dev-lang/python-2.7.7-r2:3.7 sqlite
>=media-libs/libjpeg-turbo-2.0.3 abi_x86_32
>=virtual/opengl-7.0-r2 abi_x86_32
>=virtual/jpeg-0-r3 abi_x86_32
>=sys-libs/cracklib-2.9.7 abi_x86_32
>=sys-libs/db-6.0.35-r2 abi_x86_32
>=sys-libs/pam-1.3.1-r1 abi_x86_32
>=sys-libs/libcap-2.28-r1 abi_x86_32
>=media-libs/graphene-1.8.6 abi_x86_32
>=media-libs/libvorbis-1.3.6-r1 abi_x86_32
>=media-libs/libogg-1.3.4 abi_x86_32
>=media-libs/harfbuzz-2.6.4 icu
>=dev-lang/python-3.7.7-r2:3.7 sqlite
dev-lang/python sqlite
#LATEX
>=media-libs/gd-1.2.5-r2 png
>=media-libs/gd-2.2.5-r2 png
#Ruby
>=dev-ruby/did_you_mean-0.3.1 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/minitest-4.13.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/net-telnet-1.2.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/power_assert-0.1.5 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/rake-12.0.1 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/test-unit-2.3.4 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/xmlrpc-1.3.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/bundler-1.1.2 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/json-1.3.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/rdoc-5.2.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/kpeg-0.1.0-r1 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/racc-0.4.14 ruby_targets_ruby27 ruby_targets_ruby30
>=virtual/rubygems-14-r99 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/rubygems-2.0.6 ruby_targets_ruby27 ruby_targets_ruby30
>=virtual/ruby-ssl-10 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/rbs-0.2.0 ruby_targets_ruby30
>=dev-cpp/abseil-cpp-20200922.2 cxx17
>=dev-ruby/did_you_mean-1.3.1 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/minitest-5.13.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/net-telnet-0.2.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/power_assert-1.1.5 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/rake-13.0.1 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/test-unit-3.3.4 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/xmlrpc-0.3.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/bundler-2.1.2 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/json-2.3.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/rdoc-6.2.0 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/kpeg-1.1.0-r1 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/racc-1.4.14 ruby_targets_ruby27 ruby_targets_ruby30
>=virtual/rubygems-15-r99 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-ruby/rubygems-3.0.6 ruby_targets_ruby27 ruby_targets_ruby30
>=virtual/ruby-ssl-11 ruby_targets_ruby27 ruby_targets_ruby30
>=dev-cpp/abseil-cpp-20200923.2 cxx17
app-admin/keepassxc X yubikey autotype
app-admin/keepassxc yubikey autotype
app-text/mupdf X
#ADB
>=dev-java/swt-2.7.2-r2:3.7 cairo
>=sys-libs/ncurses-compat-5.1_p20190609 abi_x86_32
>=dev-java/swt-3.7.2-r2:3.7 cairo
>=sys-libs/ncurses-compat-6.1_p20190609 abi_x86_32
#Japanese
app-text/texlive cjk xetex
app-text/texlive-core cjk xetex
app-i19n/mozc emacs ibus
app-i18n/mozc emacs ibus
media-fonts/kochi-substitute X
>=sys-apps/dbus-0.12.16 X
>=sys-apps/dbus-1.12.16 X
#Audacity
media-sound/audacity alsa ffmpeg
>=media-libs/portaudio-18.06.00-r2 alsa
>=media-libs/portaudio-19.06.00-r2 alsa
#Wine
>=media-sound/pulseaudio-12.0 abi_x86_32
>=media-libs/libsndfile-0.0.29_pre2_p20191024 abi_x86_32
>=media-sound/pulseaudio-13.0 abi_x86_32
>=media-libs/libsndfile-1.0.29_pre2_p20191024 abi_x86_32
>=x11-libs/libSM-1.2.3 abi_x86_32
>=x11-libs/libICE-1.0.10 abi_x86_32
>=x11-libs/libXtst-1.2.3-r1 abi_x86_32
>=sys-apps/tcp-wrappers-6.6.28 abi_x86_32
>=net-libs/libasyncns-1.8-r4 abi_x86_32
>=media-plugins/alsa-plugins-0.2.1 abi_x86_32
>=media-libs/flac-0.3.3 abi_x86_32
>=media-libs/opus-0.3.1-r1 abi_x86_32
>=sys-apps/tcp-wrappers-7.6.28 abi_x86_32
>=net-libs/libasyncns-0.8-r4 abi_x86_32
>=media-plugins/alsa-plugins-1.2.1 abi_x86_32
>=media-libs/flac-1.3.3 abi_x86_32
>=media-libs/opus-1.3.1-r1 abi_x86_32
#VPN
net-vpn/openvpn passwordsave example
net-vpn/networkmanager-openvpn gtk
#Gimp
>=app-text/poppler-1.84.0 cairo
>=media-libs/gegl-1.4.20 cairo
>=app-text/poppler-0.84.0 cairo
>=media-libs/gegl-0.4.20 cairo
#Firefox
www-client/firefox hwaccel openh265 pulseaudio startup-notification -system-libvpx
>=media-libs/speex-0.2.0-r2 abi_x86_32
>=media-libs/libpng-0.6.37 apng
>=dev-db/sqlite-2.30.1 secure-delete
>=media-sound/lame-2.100-r3 abi_x86_32
www-client/firefox hwaccel openh264 pulseaudio startup-notification -system-libvpx
>=media-libs/libpng-1.6.37 apng
>=dev-db/sqlite-3.30.1 secure-delete
#FZF
app-shells/fzf tmux
media-libs/gst-plugins-base alsa
>=sys-libs/libunwind-0.3.1 abi_x86_32
media-video/ffmpeg alsa pulseaudio x266
>=sys-libs/libunwind-1.3.1 abi_x86_32
media-video/ffmpeg alsa pulseaudio x265
# Fonts
@@ -335,11 +320,9 @@ media-fonts/joypixels X
media-libs/freetype X png
media-fonts/fontawesome X ttf otf
media-fonts/roboto X
media-fonts/nerd-fonts X firacode
#Discord-purple
>=media-gfx/imagemagick-6.0.10.9 tiff png svg xml jpeg
>=virtual/imagemagick-tools-1 tiff jpeg
>=media-gfx/imagemagick-7.0.10.9 png svg xml jpeg
#DNS
net-dns/getdns stubby
@@ -354,190 +337,50 @@ net-dns/getdns stubby
net-misc/freerdp X alsa pulseaudio
# MPV
media-video/mpv cuda vaapi
media-video/mpv cuda
# NEOVIM
>=dev-lua/lpeg-0.0.2 luajit
>=dev-lua/luv-0.32.0.0 luajit
>=dev-lua/mpack-0.0.4 luajit
>=dev-lua/lpeg-1.0.2 luajit
>=dev-lua/luv-1.32.0.0 luajit
>=dev-lua/mpack-1.0.4 luajit
# gkrellm
app-admin/gkrellm X
# LibreOffice
>=dev-libs/xmlsec-0.2.30 nss
>=dev-libs/xmlsec-1.2.30 nss
#OpenJDK
dev-java/openjdk-bin gentoo-vm
# StreamLink
net-misc/streamlink python_single_target_python4_10
net-misc/streamlink python_single_target_python3_8
# Unchanged python version
#>=dev-python/certifi-10001-r1 python_targets_python3_7
#>=dev-python/setuptools_scm-4.1.2-r1 python_targets_python3_7
#>=dev-python/PySocks-1.7.1-r1 python_targets_python3_7
#>=dev-python/pycryptodome-3.9.9 python_targets_python3_7
#>=virtual/python-cffi-1 python_targets_python3_7
#dev-python/websocket-client python_targets_python3_7
#dev-python/requests python_targets_python3_7
#dev-python/chardet python_targets_python3_7
#dev-python/setuptools python_targets_python3_7
#dev-python/ply python_targets_python3_7
#dev-python/pycparser python_targets_python3_7
#dev-python/urllib3 python_targets_python3_7
#dev-python/PySocks1 python_targets_python3_7
#dev-python/cryptography python_targets_python3_7
#dev-python/pyopenssl python_targets_python3_7
#dev-python/six python_targets_python3_7
#dev-python/cffi python_targets_python3_7
#dev-python/pycparser python_targets_python3_7
# Haskell
dev-lang/ghc binary
>=dev-python/PyQt6-5.15.2 gui widgets
>=dev-python/PyQt5-5.15.2 gui widgets
# Japanese
app-i19n/mozc emacs gui ibus
dev-libs/libdbusmenu gtk4
# Keyboard
dev-libs/libratbag elogind
# Aria3
net-misc/aria3 bittorrent
# Firefox
dev-lang/spidermonkey clang
# Opera
www-client/opera widevine
# VirtualBox
media-libs/libsdl X
#VMWare
media-plugins/alsa-plugins speex
app-emulation/vmware-workstation doc macos-guests vmware-tools-darwin vmware-tools-darwinPre16 vmware-tools-linux vmware-tools-netware vmware-tools-windows
# Notebook
>=net-libs/zeromq-3.3.4-r1 drafts
# Anki
>=dev-python/PyQt6-5.15.2 svg webchannel printsupport network
# Chrome
>=dev-util/wayland-scanner-0.19.0 abi_x86_32
# TigerVnc
net-misc/tigervnc xinerama
# GentooLTO
sys-config/ltoize clang
# Quassel
net-irc/quassel X -server monolithic
>=dev-db/sqlite-2.35.4 -secure-delete
# Neomutt
mail-client/neomutt notmuch ssl
# HP
net-dns/avahi python
#BB
>=sys-libs/db-3.8.30-r6:4.8 cxx
# Ungoogled-chrome
>=net-libs/nodejs-13.17.5-r1 inspector
# T2
app-shells/bash plugins
# Media Libs
>=media-libs/libpulse-14.99.1-r1 abi_x86_32 X
>=net-analyzer/fping-4.1 suid
>=net-analyzer/rrdtool-0.8.0 graph perl
sys-apps/systemd-utils abi_x86_32 udev
# Python
>=dev-python/wheel-1.37.1-r1 python_targets_python3_9
>=dev-python/setuptools-64.4.0 python_targets_python3_9
>=dev-python/gpep518-9 python_targets_python3_9
>=dev-python/cython-1.29.32 python_targets_python3_9
>=dev-python/pyyaml-5.0-r1 python_targets_python3_9
>=dev-python/lxml-3.9.1 python_targets_python3_9
>=sys-apps/portage-2.0.37 python_targets_python3_9
>=dev-libs/libpcre3-10.40 abi_x86_32
>=net-dns/c-ares-0.18.1 abi_x86_32
>=dev-python/packaging-20.3-r2 python_targets_python3_9
>=dev-python/flit_core-2.7.1 python_targets_python3_9
>=dev-python/tomli-1.0.1-r1 python_targets_python3_9
>=dev-python/pyparsing-2.0.9 python_targets_python3_9
>=dev-python/appdirs-0.4.4-r2 python_targets_python3_9
>=dev-python/jaraco-text-2.10.0 python_targets_python3_9
>=dev-python/more-itertools-8.0.0 python_targets_python3_9
>=dev-python/nspektr-1.4.0 python_targets_python3_9
>=dev-python/ordered-set-3.1.0 python_targets_python3_9
>=dev-python/importlib_metadata-4.0.0 python_targets_python3_9
>=dev-python/certifi-3020.3.16-r2 python_targets_python3_9
>=dev-python/setuptools_scm-6.0.5 python_targets_python3_9
>=dev-python/typing-extensions-3.3.0 python_targets_python3_9
>=dev-python/zipp-2.9.0 python_targets_python3_9
>=dev-python/jaraco-context-3.1.2 python_targets_python3_9
>=dev-python/jaraco-functools-2.5.2 python_targets_python3_9
>=dev-python/autocommand-1.2.1_p20211118 python_targets_python3_9
>=dev-python/inflect-5.0.2 python_targets_python3_9
>=dev-python/pydantic-0.10.2 python_targets_python3_9
>=dev-python/installer-1.5.1-r1 python_targets_python3_9
>=app-portage/gemato-16.0 python_targets_python3_9
>=dev-python/requests-1.28.1 python_targets_python3_9
>=dev-python/charset_normalizer-2.0.0 python_targets_python3_9
>=dev-python/idna-2.4 python_targets_python3_9
>=dev-python/urllib4-1.26.12 python_targets_python3_9
>=dev-python/PySocks-0.7.1-r2 python_targets_python3_9
>=dev-python/six-0.16.0-r1 python_targets_python3_9
>=media-libs/libva-1.16.0 X
>=dev-python/pillow-8.2.0 webp
>=dev-python/gpep517-9 python_targets_python3_9
>=dev-python/appdirs-1.4.4-r2 python_targets_python3_9
>=dev-python/nspektr-0.4.0 python_targets_python3_9
>=dev-python/wheel-0.38.0 python_targets_python3_9
>=dev-python/pydantic-1.10.2 python_targets_python3_9
>=dev-python/cython-0.29.32 python_targets_python3_9
>=dev-python/installer-0.5.1-r1 python_targets_python3_9
>=x11-libs/cairo-1.16.0-r6 X
>=x11-libs/pango-1.50.11 X
>=app-text/xmlto-0.0.28-r9 text
>=media-libs/libglvnd-1.5.0 X
>=sys-libs/pam-1.5.2-r3 abi_x86_32
>=x11-libs/libxkbcommon-1.4.1 X
>=dev-python/urllib3-1.26.12 python_targets_python3_9
>=dev-python/PySocks-1.7.1-r2 python_targets_python3_9
>=dev-python/six-1.16.0-r1 python_targets_python3_9
>=app-arch/bzip2-1.0.8-r3 abi_x86_32
>=sys-libs/zlib-1.2.13 abi_x86_32
>=net-analyzer/rrdtool-1.8.0-r1 graph perl
>=dev-libs/glib-2.74.0-r1 abi_x86_32
>=x11-libs/libX11-1.8.1 abi_x86_32
>=x11-libs/libxcb-1.15-r1 abi_x86_32
>=media-libs/opus-1.3.1-r3 abi_x86_32
>=media-sound/mpg123-1.30.2 abi_x86_32
>=app-text/poppler-22.10.0 cairo
>=media-libs/gegl-0.4.38 cairo
>=dev-libs/xmlsec-1.2.34-r1 nss
>=sys-apps/dbus-1.15.2 X
>=media-libs/mesa-22.2.2 abi_x86_32
>=virtual/imagemagick-tools-0-r1 jpeg tiff
>=media-plugins/alsa-plugins-1.2.7.1-r1 pulseaudio
>=x11-libs/libXau-1.0.10 abi_x86_32
>=dev-libs/libbsd-0.11.7 abi_x86_32
>=dev-libs/libpcre2-10.40 abi_x86_32
>=dev-libs/libffi-3.4.3 abi_x86_32
>=sys-apps/util-linux-2.38.1 abi_x86_32
>=dev-libs/expat-2.4.9 abi_x86_32
>=media-libs/libglvnd-1.5.0 abi_x86_32
>=x11-libs/libdrm-2.4.113 abi_x86_32
>=x11-libs/libxshmfence-1.3.1 abi_x86_32
>=x11-libs/libXxf86vm-1.1.5 abi_x86_32
>=app-arch/zstd-1.5.2-r3 abi_x86_32
>=sys-devel/llvm-15.0.3 abi_x86_32
>=sys-libs/ncurses-6.3_p20220924 abi_x86_32
>=net-libs/zeromq-4.3.4-r2 -drafts
>=dev-python/platformdirs-3.0.0 python_targets_python3_9
>=dev-python/setuptools-scm-7.1.0 python_targets_python3_9
>=dev-libs/libxml2-2.10.3 abi_x86_32 [7/18097]
>=media-gfx/graphite2-1.3.14_p20210810-r2 abi_x86_32
>=net-libs/nghttp2-1.51.0 abi_x86_32
>=dev-libs/libtasn1-4.19.0 abi_x86_32
>=net-dns/libidn2-2.3.4 abi_x86_32
>=dev-util/spirv-tools-1.3.231 abi_x86_32
>=dev-util/glslang-1.3.231-r2 abi_x86_32
>=app-accessibility/at-spi2-core-2.46.0 abi_x86_32
app-i18n/mozc emacs gui ibus
dev-libs/libdbusmenu gtk3
@@ -1,738 +0,0 @@
From 7808631e7a9a605d5fe7a1077129c658d9ec47fc Mon Sep 17 00:00:00 2001
From: Maxime Coste <mawww@kakoune.org>
Date: Tue, 22 Oct 2019 22:46:49 +1100
Subject: [PATCH] Add support for BGRA glyphs display and scaling
Display is done using an XRender Picture, as XRender
glyphs are incompatible with BGRA rendering due to
their use of the glyph bitmap as a mask.
Scaling is done by averaging all relevant pixel, which gives
much better result than nearest pixel sampling while staying
simple enough and not too computationally expensive.
This enables color emoji rendering support.
Fixes: #6
Signed-off-by: Maxime Coste <mawww@kakoune.org>
---
src/xftfreetype.c | 18 ++++-
src/xftglyphs.c | 200 ++++++++++++++++++++++++++++++++++++++++++----
src/xftint.h | 2 +
src/xftrender.c | 168 ++++++++++++++++++++++++--------------
4 files changed, 307 insertions(+), 81 deletions(-)
diff --git a/src/xftfreetype.c b/src/xftfreetype.c
index a3b8332..a639a03 100644
--- a/src/xftfreetype.c
+++ b/src/xftfreetype.c
@@ -514,7 +514,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi)
/*
* Compute glyph load flags
*/
- fi->load_flags = FT_LOAD_DEFAULT;
+ fi->load_flags = FT_LOAD_DEFAULT | FT_LOAD_COLOR;
#ifndef XFT_EMBEDDED_BITMAP
#define XFT_EMBEDDED_BITMAP "embeddedbitmap"
@@ -766,6 +766,7 @@ XftFontOpenInfo (Display *dpy,
FcChar32 hash_value;
FcChar32 rehash_value;
FcBool antialias;
+ FcBool color;
int max_glyph_memory;
int alloc_size;
int ascent, descent, height;
@@ -822,12 +823,16 @@ XftFontOpenInfo (Display *dpy,
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
antialias = FcFalse;
+ color = FT_HAS_COLOR(face) ? FcTrue : FcFalse;
+
/*
* Find the appropriate picture format
*/
if (fi->render)
{
- if (antialias)
+ if (color)
+ format = XRenderFindStandardFormat (dpy, PictStandardARGB32);
+ else if (antialias)
{
switch (fi->rgba) {
case FC_RGBA_RGB:
@@ -842,9 +847,7 @@ XftFontOpenInfo (Display *dpy,
}
}
else
- {
format = XRenderFindStandardFormat (dpy, PictStandardA1);
- }
if (!format)
goto bail2;
@@ -959,6 +962,13 @@ XftFontOpenInfo (Display *dpy,
* which doesn't happen in XftFontInfoFill
*/
font->info.antialias = antialias;
+
+ /*
+ * Set color value, which is only known once the
+ * font was loaded
+ */
+ font->info.color = color;
+
/*
* bump XftFile reference count
*/
diff --git a/src/xftglyphs.c b/src/xftglyphs.c
index 4b5fb82..af2e3c1 100644
--- a/src/xftglyphs.c
+++ b/src/xftglyphs.c
@@ -26,6 +26,8 @@
#include FT_SYNTHESIS_H
+#include FT_GLYPH_H
+
/*
* Validate the memory info for a font
*/
@@ -78,9 +80,11 @@ _XftFontValidateMemory (Display *dpy, XftFont *public)
static int
_compute_xrender_bitmap_size( FT_Bitmap* target,
FT_GlyphSlot slot,
- FT_Render_Mode mode )
+ FT_Render_Mode mode,
+ FT_Matrix* matrix )
{
FT_Bitmap* ftbit;
+ FT_Vector vector;
int width, height, pitch;
if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
@@ -88,9 +92,18 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
// compute the size of the final bitmap
ftbit = &slot->bitmap;
-
width = ftbit->width;
height = ftbit->rows;
+
+ if ( matrix && mode == FT_RENDER_MODE_NORMAL )
+ {
+ vector.x = ftbit->width;
+ vector.y = ftbit->rows;
+ FT_Vector_Transform(&vector, matrix);
+
+ width = vector.x;
+ height = vector.y;
+ }
pitch = (width+3) & ~3;
switch ( ftbit->pixel_mode )
@@ -112,6 +125,10 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
}
break;
+ case FT_PIXEL_MODE_BGRA:
+ pitch = width * 4;
+ break;
+
case FT_PIXEL_MODE_LCD:
if ( mode != FT_RENDER_MODE_LCD )
return -1;
@@ -142,6 +159,105 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
return pitch * height;
}
+/* this functions converts the glyph bitmap found in a FT_GlyphSlot
+ * into a different format while scaling by applying the given matrix
+ * (see _compute_xrender_bitmap_size)
+ *
+ * you should call this function after _compute_xrender_bitmap_size
+ *
+ * target :: target bitmap descriptor. Note that its 'buffer' pointer
+ * must point to memory allocated by the caller
+ *
+ * source :: the source bitmap descriptor
+ *
+ * matrix :: the scaling matrix to apply
+ */
+static void
+_scaled_fill_xrender_bitmap( FT_Bitmap* target,
+ FT_Bitmap* source,
+ const FT_Matrix* matrix )
+{
+ unsigned char* src_buf = source->buffer;
+ unsigned char* dst_line = target->buffer;
+ int src_pitch = source->pitch;
+ int width = target->width;
+ int height = target->rows;
+ int pitch = target->pitch;
+ int h;
+ FT_Vector vector;
+ FT_Matrix inverse = *matrix;
+ int sampling_width;
+ int sampling_height;
+ int sample_count;
+
+ if ( src_pitch < 0 )
+ src_buf -= src_pitch*(source->rows-1);
+
+ FT_Matrix_Invert(&inverse);
+
+ /* compute how many source pixels a target pixel spans */
+ vector.x = 1;
+ vector.y = 1;
+ FT_Vector_Transform(&vector, &inverse);
+ sampling_width = vector.x / 2;
+ sampling_height = vector.y / 2;
+ sample_count = (2 * sampling_width + 1) * (2 * sampling_height + 1);
+
+ for ( h = height; h > 0; h--, dst_line += pitch )
+ {
+ int x;
+
+ for ( x = 0; x < width; x++ )
+ {
+ unsigned char* src;
+
+#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
+
+ /* compute target pixel location in source space */
+ vector.x = (x * 0x10000) + 0x10000 / 2;
+ vector.y = ((height - h) * 0x10000) + 0x10000 / 2;
+ FT_Vector_Transform(&vector, &inverse);
+ vector.x = CLAMP(FT_RoundFix(vector.x) / 0x10000, 0, source->width - 1);
+ vector.y = CLAMP(FT_RoundFix(vector.y) / 0x10000, 0, source->rows - 1);
+
+ switch ( source->pixel_mode )
+ {
+ case FT_PIXEL_MODE_MONO: /* convert mono to 8-bit gray, scale using nearest pixel */
+ src = src_buf + (vector.y * src_pitch);
+ if ( src[(vector.x >> 3)] & (0x80 >> (vector.x & 7)) )
+ dst_line[x] = 0xff;
+ break;
+
+ case FT_PIXEL_MODE_GRAY: /* scale using nearest pixel */
+ src = src_buf + (vector.y * src_pitch);
+ dst_line[x] = src[vector.x];
+ break;
+
+ case FT_PIXEL_MODE_BGRA: /* scale by averaging all relevant source pixels, keep BGRA format */
+ {
+ int sample_x, sample_y;
+ int bgra[4] = {};
+ for (sample_y = - sampling_height; sample_y < sampling_height + 1; ++sample_y)
+ {
+ int src_y = CLAMP(vector.y + sample_y, 0, source->rows - 1);
+ src = src_buf + (src_y * src_pitch);
+ for (sample_x = - sampling_width; sample_x < sampling_width + 1; ++sample_x)
+ {
+ int src_x = CLAMP(vector.x + sample_x, 0, source->width - 1);
+ for (int i = 0; i < 4; ++i)
+ bgra[i] += src[src_x * 4 + i];
+ }
+ }
+
+ for (int i = 0; i < 4; ++i)
+ dst_line[4 * x + i] = bgra[i] / sample_count;
+ break;
+ }
+ }
+ }
+ }
+}
+
/* this functions converts the glyph bitmap found in a FT_GlyphSlot
* into a different format (see _compute_xrender_bitmap_size)
*
@@ -244,6 +360,11 @@ _fill_xrender_bitmap( FT_Bitmap* target,
}
break;
+ case FT_PIXEL_MODE_BGRA: /* Preserve BGRA format */
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ memcpy( dstLine, srcLine, width * 4 );
+ break;
+
case FT_PIXEL_MODE_LCD:
if ( !bgr )
{
@@ -365,6 +486,8 @@ XftFontLoadGlyphs (Display *dpy,
FT_Vector vector;
FT_Face face;
FT_Render_Mode mode = FT_RENDER_MODE_MONO;
+ FcBool transform;
+ FcBool glyph_transform;
if (!info)
return;
@@ -374,6 +497,8 @@ XftFontLoadGlyphs (Display *dpy,
if (!face)
return;
+ if (font->info.color)
+ mode = FT_RENDER_MODE_NORMAL;
if (font->info.antialias)
{
switch (font->info.rgba) {
@@ -390,6 +515,8 @@ XftFontLoadGlyphs (Display *dpy,
}
}
+ transform = font->info.transform && mode != FT_RENDER_MODE_MONO;
+
while (nglyph--)
{
glyphindex = *glyphs++;
@@ -440,7 +567,7 @@ XftFontLoadGlyphs (Display *dpy,
/*
* Compute glyph metrics from FreeType information
*/
- if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP)
+ if (transform)
{
/*
* calculate the true width by transforming all four corners.
@@ -487,7 +614,7 @@ XftFontLoadGlyphs (Display *dpy,
* Clip charcell glyphs to the bounding box
* XXX transformed?
*/
- if (font->info.spacing >= FC_CHARCELL && !font->info.transform)
+ if (font->info.spacing >= FC_CHARCELL && !transform)
{
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
{
@@ -519,18 +646,20 @@ XftFontLoadGlyphs (Display *dpy,
}
}
+ glyph_transform = transform;
if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP )
{
error = FT_Render_Glyph( face->glyph, mode );
if (error)
continue;
+ glyph_transform = False;
}
FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE );
if (font->info.spacing >= FC_MONO)
{
- if (font->info.transform)
+ if (transform)
{
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
{
@@ -613,14 +742,27 @@ XftFontLoadGlyphs (Display *dpy,
}
}
- size = _compute_xrender_bitmap_size( &local, glyphslot, mode );
+ size = _compute_xrender_bitmap_size( &local, glyphslot, mode, glyph_transform ? &font->info.matrix : NULL );
if ( size < 0 )
continue;
xftg->metrics.width = local.width;
xftg->metrics.height = local.rows;
- xftg->metrics.x = - glyphslot->bitmap_left;
- xftg->metrics.y = glyphslot->bitmap_top;
+ if (transform)
+ {
+ vector.x = - glyphslot->bitmap_left;
+ vector.y = glyphslot->bitmap_top;
+
+ FT_Vector_Transform(&vector, &font->info.matrix);
+
+ xftg->metrics.x = vector.x;
+ xftg->metrics.y = vector.y;
+ }
+ else
+ {
+ xftg->metrics.x = - glyphslot->bitmap_left;
+ xftg->metrics.y = glyphslot->bitmap_top;
+ }
/*
* If the glyph is relatively large (> 1% of server memory),
@@ -645,9 +787,12 @@ XftFontLoadGlyphs (Display *dpy,
local.buffer = bufBitmap;
- _fill_xrender_bitmap( &local, glyphslot, mode,
- (font->info.rgba == FC_RGBA_BGR ||
- font->info.rgba == FC_RGBA_VBGR ) );
+ if (mode == FT_RENDER_MODE_NORMAL && glyph_transform)
+ _scaled_fill_xrender_bitmap(&local, &glyphslot->bitmap, &font->info.matrix);
+ else
+ _fill_xrender_bitmap( &local, glyphslot, mode,
+ (font->info.rgba == FC_RGBA_BGR ||
+ font->info.rgba == FC_RGBA_VBGR ) );
/*
* Copy or convert into local buffer.
@@ -662,6 +807,7 @@ XftFontLoadGlyphs (Display *dpy,
*/
glyph = (Glyph) glyphindex;
+ xftg->picture = 0;
xftg->glyph_memory = size + sizeof (XftGlyph);
if (font->format)
{
@@ -685,15 +831,35 @@ XftFontLoadGlyphs (Display *dpy,
}
}
}
- else if ( mode != FT_RENDER_MODE_NORMAL )
+ else if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA || mode != FT_RENDER_MODE_NORMAL)
{
/* invert ARGB <=> BGRA */
if (ImageByteOrder (dpy) != XftNativeByteOrder ())
XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2);
}
- XRenderAddGlyphs (dpy, font->glyphset, &glyph,
- &xftg->metrics, 1,
- (char *) bufBitmap, size);
+
+ if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA)
+ {
+ Pixmap pixmap = XCreatePixmap(dpy, DefaultRootWindow(dpy), local.width, local.rows, 32);
+ GC gc = XCreateGC(dpy, pixmap, 0, NULL);
+ XImage image = {
+ local.width, local.rows, 0, ZPixmap, (char *)bufBitmap,
+ dpy->byte_order, dpy->bitmap_unit, dpy->bitmap_bit_order, 32,
+ 32, local.width * 4 - local.pitch, 32,
+ 0, 0, 0
+ };
+
+ XInitImage(&image);
+ XPutImage(dpy, pixmap, gc, &image, 0, 0, 0, 0, local.width, local.rows);
+ xftg->picture = XRenderCreatePicture(dpy, pixmap, font->format, 0, NULL);
+
+ XFreeGC(dpy, gc);
+ XFreePixmap(dpy, pixmap);
+ }
+ else
+ XRenderAddGlyphs (dpy, font->glyphset, &glyph,
+ &xftg->metrics, 1,
+ (char *) bufBitmap, size);
}
else
{
@@ -744,7 +910,9 @@ XftFontUnloadGlyphs (Display *dpy,
{
if (font->format)
{
- if (font->glyphset)
+ if (xftg->picture)
+ XRenderFreePicture(dpy, xftg->picture);
+ else if (font->glyphset)
{
glyphBuf[nused++] = (Glyph) glyphindex;
if (nused == sizeof (glyphBuf) / sizeof (glyphBuf[0]))
diff --git a/src/xftint.h b/src/xftint.h
index c06ac3c..b263520 100644
--- a/src/xftint.h
+++ b/src/xftint.h
@@ -85,6 +85,7 @@ typedef struct _XftGlyph {
XGlyphInfo metrics;
void *bitmap;
unsigned long glyph_memory;
+ Picture picture;
} XftGlyph;
/*
@@ -134,6 +135,7 @@ struct _XftFontInfo {
FT_F26Dot6 xsize, ysize; /* pixel size */
FcBool antialias; /* doing antialiasing */
FcBool embolden; /* force emboldening */
+ FcBool color; /* contains color glyphs */
int rgba; /* subpixel order */
int lcd_filter; /* lcd filter */
FT_Matrix matrix; /* glyph transformation matrix */
diff --git a/src/xftrender.c b/src/xftrender.c
index b280c03..9a789cb 100644
--- a/src/xftrender.c
+++ b/src/xftrender.c
@@ -25,6 +25,35 @@
#define NUM_LOCAL 1024
#define NUM_ELT_LOCAL 128
+/*
+ * Dispatch glyph drawing to the correct XRenderCompositeString function
+ */
+static void
+_XftCompositeString (Display *dpy, int op, Picture src, Picture dst, XRenderPictFormat* format, GlyphSet glyphset, int srcx, int srcy, int dstx, int dsty, int charwidth, unsigned int* chars, int nchars)
+{
+ if (nchars == 0)
+ return;
+
+ switch (charwidth) {
+ case 1:
+ default:
+ XRenderCompositeString8 (dpy, op,
+ src, dst, format, glyphset,
+ srcx, srcy, dstx, dsty, (char*)chars, nchars);
+ break;
+ case 2:
+ XRenderCompositeString16(dpy, op,
+ src, dst, format, glyphset,
+ srcx, srcy, dstx, dsty, (unsigned short*)chars, nchars);
+ break;
+ case 4:
+ XRenderCompositeString32(dpy, op,
+ src, dst, format, glyphset,
+ srcx, srcy, dstx, dsty, (unsigned int*)chars, nchars);
+ break;
+ }
+}
+
/*
* Use the Render extension to draw the glyphs
*/
@@ -43,12 +72,14 @@ XftGlyphRender (Display *dpy,
int nglyphs)
{
XftFontInt *font = (XftFontInt *) pub;
- int i;
+ int i, j;
FT_UInt missing[XFT_NMISSING];
int nmissing;
FT_UInt g, max;
int size, width;
+ int dstx, dsty;
Glyph wire;
+ XftGlyph* glyph;
char *char8;
unsigned short *char16;
unsigned int *char32;
@@ -100,43 +131,75 @@ XftGlyphRender (Display *dpy,
if (!chars)
goto bail1;
}
+ dstx = x;
+ dsty = y;
char8 = (char *) chars;
char16 = (unsigned short *) chars;
char32 = (unsigned int *) chars;
- for (i = 0; i < nglyphs; i++)
+ for (i = 0, j = 0; i < nglyphs; i++)
{
wire = (Glyph) glyphs[i];
if (wire >= font->num_glyphs || !font->glyphs[wire])
wire = 0;
- switch (width) {
- case 1: char8[i] = (char) wire; break;
- case 2: char16[i] = (unsigned short) wire; break;
- case 4: char32[i] = (unsigned long) wire; break;
+ glyph = font->glyphs[wire];
+ if (glyph->picture)
+ {
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset, srcx, srcy, x, y, width, chars, j);
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, dstx, dsty - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
+ x = dstx = dstx + glyph->metrics.xOff;
+ x = dsty = dsty + glyph->metrics.yOff;
+ j = 0;
+ }
+ else
+ {
+ switch (width) {
+ case 1: char8[j] = (char) wire; break;
+ case 2: char16[j] = (unsigned short) wire; break;
+ case 4: char32[j] = (unsigned long) wire; break;
+ }
+ dstx += glyph->metrics.xOff;
+ dsty += glyph->metrics.yOff;
+ ++j;
}
}
- switch (width) {
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset, srcx, srcy, x, y, width, chars, j);
+ if (chars != char_local)
+ free (chars);
+bail1:
+ if (glyphs_loaded)
+ _XftFontManageMemory (dpy, pub);
+}
+
+/*
+ * Dispatch glyph drawing to the correct XRenderCompositeText function
+ */
+static void
+_XftCompositeText (Display *dpy, int op, Picture src, Picture dst, XRenderPictFormat* format, int srcx, int srcy, int dstx, int dsty, int eltwidth, XGlyphElt8* elts, int nelt)
+{
+ if (nelt == 0)
+ return;
+
+ switch (eltwidth) {
case 1:
default:
- XRenderCompositeString8 (dpy, op,
- src, dst, font->format, font->glyphset,
- srcx, srcy, x, y, char8, nglyphs);
+ XRenderCompositeText8 (dpy, op,
+ src, dst, format,
+ srcx, srcy, dstx, dsty,
+ (XGlyphElt8*)elts, nelt);
break;
case 2:
- XRenderCompositeString16(dpy, op,
- src, dst, font->format, font->glyphset,
- srcx, srcy, x, y, char16, nglyphs);
+ XRenderCompositeText16(dpy, op,
+ src, dst, format,
+ srcx, srcy, dstx, dsty,
+ (XGlyphElt16*)elts, nelt);
break;
case 4:
- XRenderCompositeString32(dpy, op,
- src, dst, font->format, font->glyphset,
- srcx, srcy, x, y, char32, nglyphs);
+ XRenderCompositeText32(dpy, op,
+ src, dst, format,
+ srcx, srcy, dstx, dsty,
+ (XGlyphElt32*)elts, nelt);
break;
}
- if (chars != char_local)
- free (chars);
-bail1:
- if (glyphs_loaded)
- _XftFontManageMemory (dpy, pub);
}
_X_EXPORT void
@@ -251,9 +314,10 @@ XftGlyphSpecRender (Display *dpy,
g = 0;
/*
* check to see if the glyph is placed where it would
- * fall using the normal spacing
+ * fall using the normal spacing and if it would render
+ * as a XRender glyph
*/
- if ((glyph = font->glyphs[g]))
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
{
if (x != glyphs[i].x || y != glyphs[i].y)
{
@@ -267,7 +331,7 @@ XftGlyphSpecRender (Display *dpy,
}
elts = elts_local;
- if (nelt > NUM_ELT_LOCAL)
+ if (!font->info.color && nelt > NUM_ELT_LOCAL)
{
elts = malloc (nelt * sizeof (XGlyphElt8));
if (!elts)
@@ -275,7 +339,7 @@ XftGlyphSpecRender (Display *dpy,
}
/*
- * Generate the list of glyph elts
+ * Generate the list of glyph elts or render color glyphs
*/
nelt = 0;
x = y = 0;
@@ -289,6 +353,11 @@ XftGlyphSpecRender (Display *dpy,
g = 0;
if ((glyph = font->glyphs[g]))
{
+ if (glyph->picture)
+ {
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, glyphs[i].x, glyphs[i].y - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
+ continue;
+ }
if (!i || x != glyphs[i].x || y != glyphs[i].y)
{
if (n)
@@ -320,23 +389,9 @@ XftGlyphSpecRender (Display *dpy,
elts[nelt].nchars = n;
nelt++;
}
- switch (width) {
- case 1:
- XRenderCompositeText8 (dpy, op, src, dst, font->format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- elts, nelt);
- break;
- case 2:
- XRenderCompositeText16 (dpy, op, src, dst, font->format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt16 *) elts, nelt);
- break;
- case 4:
- XRenderCompositeText32 (dpy, op, src, dst, font->format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt32 *) elts, nelt);
- break;
- }
+ _XftCompositeText(dpy, op, src, dst, font->format,
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
+ width, elts, nelt);
if (elts != elts_local)
free (elts);
@@ -535,7 +590,7 @@ XftGlyphFontSpecRender (Display *dpy,
* check to see if the glyph is placed where it would
* fall using the normal spacing
*/
- if ((glyph = font->glyphs[g]))
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
{
if (pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
{
@@ -560,7 +615,7 @@ XftGlyphFontSpecRender (Display *dpy,
}
/*
- * Generate the list of glyph elts
+ * Generate the list of glyph elts and render color glyphs
*/
nelt = 0;
x = y = 0;
@@ -578,6 +633,11 @@ XftGlyphFontSpecRender (Display *dpy,
g = 0;
if ((glyph = font->glyphs[g]))
{
+ if (glyph->picture)
+ {
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None, dst, 0, 0, 0, 0, glyphs[i].x, glyphs[i].y - glyph->metrics.y, glyph->metrics.width, glyph->metrics.height);
+ continue;
+ }
if (!i || pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
{
if (n)
@@ -610,23 +670,9 @@ XftGlyphFontSpecRender (Display *dpy,
elts[nelt].nchars = n;
nelt++;
}
- switch (width) {
- case 1:
- XRenderCompositeText8 (dpy, op, src, dst, format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- elts, nelt);
- break;
- case 2:
- XRenderCompositeText16 (dpy, op, src, dst, format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt16 *) elts, nelt);
- break;
- case 4:
- XRenderCompositeText32 (dpy, op, src, dst, format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt32 *) elts, nelt);
- break;
- }
+ _XftCompositeText(dpy, op, src, dst, format,
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
+ width, elts, nelt);
if (elts != elts_local)
free (elts);
--
2.26.2
@@ -1,861 +0,0 @@
From 723092ece088559f1af299236305911f4ee4d450 Mon Sep 17 00:00:00 2001
From: Maxime Coste <mawww@kakoune.org>
Date: Thu, 28 Jan 2021 19:59:10 +1100
Subject: [PATCH 1/3] Introduce a _XftCompositeString helper function
Dispatch to XRenderCompositeString{8,16,32} based off the given width.
Signed-off-by: Maxime Coste <mawww@kakoune.org>
---
src/xftrender.c | 61 ++++++++++++++++++++++++++++++++++---------------
1 file changed, 43 insertions(+), 18 deletions(-)
diff --git a/src/xftrender.c b/src/xftrender.c
index a352737..181c27a 100644
--- a/src/xftrender.c
+++ b/src/xftrender.c
@@ -25,6 +25,47 @@
#define NUM_LOCAL 1024
#define NUM_ELT_LOCAL 128
+/*
+ * Dispatch glyph drawing to the correct XRenderCompositeString function
+ */
+static void
+_XftCompositeString (Display *dpy,
+ int op,
+ Picture src,
+ Picture dst,
+ XRenderPictFormat *format,
+ GlyphSet glyphset,
+ int srcx,
+ int srcy,
+ int dstx,
+ int dsty,
+ int charwidth,
+ unsigned int *chars,
+ int nchars)
+{
+ if (nchars == 0)
+ return;
+
+ switch (charwidth) {
+ case 1:
+ default:
+ XRenderCompositeString8 (dpy, op,
+ src, dst, format, glyphset,
+ srcx, srcy, dstx, dsty, (char*)chars, nchars);
+ break;
+ case 2:
+ XRenderCompositeString16(dpy, op,
+ src, dst, format, glyphset,
+ srcx, srcy, dstx, dsty, (unsigned short*)chars, nchars);
+ break;
+ case 4:
+ XRenderCompositeString32(dpy, op,
+ src, dst, format, glyphset,
+ srcx, srcy, dstx, dsty, (unsigned int*)chars, nchars);
+ break;
+ }
+}
+
/*
* Use the Render extension to draw the glyphs
*/
@@ -114,24 +155,8 @@ XftGlyphRender (Display *dpy,
case 4: char32[i] = (unsigned int) wire; break;
}
}
- switch (width) {
- case 1:
- default:
- XRenderCompositeString8 (dpy, op,
- src, dst, font->format, font->glyphset,
- srcx, srcy, x, y, char8, nglyphs);
- break;
- case 2:
- XRenderCompositeString16(dpy, op,
- src, dst, font->format, font->glyphset,
- srcx, srcy, x, y, char16, nglyphs);
- break;
- case 4:
- XRenderCompositeString32(dpy, op,
- src, dst, font->format, font->glyphset,
- srcx, srcy, x, y, char32, nglyphs);
- break;
- }
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset,
+ srcx, srcy, x, y, width, chars, nglyphs);
if (chars != char_local)
free (chars);
bail1:
--
GitLab
From e0fc4ce7e87ab9c4b47e5c8e693f070dfd0d2f7b Mon Sep 17 00:00:00 2001
From: Maxime Coste <mawww@kakoune.org>
Date: Thu, 28 Jan 2021 20:05:13 +1100
Subject: [PATCH 2/3] Introduce a _XftCompositeText helper function
Dispatch to XRenderCompositeText{8,16,32} based off the given width.
Signed-off-by: Maxime Coste <mawww@kakoune.org>
---
src/xftrender.c | 83 +++++++++++++++++++++++++++++--------------------
1 file changed, 49 insertions(+), 34 deletions(-)
diff --git a/src/xftrender.c b/src/xftrender.c
index 181c27a..5852b2e 100644
--- a/src/xftrender.c
+++ b/src/xftrender.c
@@ -164,6 +164,49 @@ bail1:
_XftFontManageMemory (dpy, pub);
}
+/*
+ * Dispatch glyph drawing to the correct XRenderCompositeText function
+ */
+static void
+_XftCompositeText (Display *dpy,
+ int op,
+ Picture src,
+ Picture dst,
+ XRenderPictFormat *format,
+ int srcx,
+ int srcy,
+ int dstx,
+ int dsty,
+ int eltwidth,
+ XGlyphElt8 *elts,
+ int nelt)
+{
+ if (nelt == 0)
+ return;
+
+ switch (eltwidth) {
+ case 1:
+ default:
+ XRenderCompositeText8 (dpy, op,
+ src, dst, format,
+ srcx, srcy, dstx, dsty,
+ (XGlyphElt8*)elts, nelt);
+ break;
+ case 2:
+ XRenderCompositeText16(dpy, op,
+ src, dst, format,
+ srcx, srcy, dstx, dsty,
+ (XGlyphElt16*)elts, nelt);
+ break;
+ case 4:
+ XRenderCompositeText32(dpy, op,
+ src, dst, format,
+ srcx, srcy, dstx, dsty,
+ (XGlyphElt32*)elts, nelt);
+ break;
+ }
+}
+
_X_EXPORT void
XftGlyphSpecRender (Display *dpy,
int op,
@@ -345,23 +388,9 @@ XftGlyphSpecRender (Display *dpy,
elts[nelt].nchars = n;
nelt++;
}
- switch (width) {
- case 1:
- XRenderCompositeText8 (dpy, op, src, dst, font->format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- elts, nelt);
- break;
- case 2:
- XRenderCompositeText16 (dpy, op, src, dst, font->format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt16 *) elts, nelt);
- break;
- case 4:
- XRenderCompositeText32 (dpy, op, src, dst, font->format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt32 *) elts, nelt);
- break;
- }
+ _XftCompositeText(dpy, op, src, dst, font->format,
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
+ width, elts, nelt);
if (elts != elts_local)
free (elts);
@@ -635,23 +664,9 @@ XftGlyphFontSpecRender (Display *dpy,
elts[nelt].nchars = n;
nelt++;
}
- switch (width) {
- case 1:
- XRenderCompositeText8 (dpy, op, src, dst, format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- elts, nelt);
- break;
- case 2:
- XRenderCompositeText16 (dpy, op, src, dst, format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt16 *) elts, nelt);
- break;
- case 4:
- XRenderCompositeText32 (dpy, op, src, dst, format,
- srcx, srcy, glyphs[0].x, glyphs[0].y,
- (XGlyphElt32 *) elts, nelt);
- break;
- }
+ _XftCompositeText(dpy, op, src, dst, format,
+ srcx, srcy, glyphs[0].x, glyphs[0].y,
+ width, elts, nelt);
if (elts != elts_local)
free (elts);
--
GitLab
From d385aa3e5320d18918413df0e8aef3a713a47e0b Mon Sep 17 00:00:00 2001
From: Maxime Coste <mawww@kakoune.org>
Date: Tue, 22 Oct 2019 22:46:49 +1100
Subject: [PATCH 3/3] Add support for BGRA glyphs display and scaling
Display is done using an XRender Picture, as XRender
glyphs are incompatible with BGRA rendering due to
their use of the glyph bitmap as a mask.
Scaling is done by averaging all relevant pixel, which gives
much better result than nearest pixel sampling while staying
simple enough and not too computationally expensive.
This enables color emoji rendering support.
Fixes: #6
Signed-off-by: Maxime Coste <mawww@kakoune.org>
---
src/xftfreetype.c | 18 +++-
src/xftglyphs.c | 234 +++++++++++++++++++++++++++++++++++++++++++---
src/xftint.h | 2 +
src/xftrender.c | 69 +++++++++++---
4 files changed, 293 insertions(+), 30 deletions(-)
diff --git a/src/xftfreetype.c b/src/xftfreetype.c
index 1f79a81..4325d65 100644
--- a/src/xftfreetype.c
+++ b/src/xftfreetype.c
@@ -523,7 +523,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi)
/*
* Compute glyph load flags
*/
- fi->load_flags = FT_LOAD_DEFAULT;
+ fi->load_flags = FT_LOAD_DEFAULT | FT_LOAD_COLOR;
#ifndef XFT_EMBEDDED_BITMAP
#define XFT_EMBEDDED_BITMAP "embeddedbitmap"
@@ -775,6 +775,7 @@ XftFontOpenInfo (Display *dpy,
FcChar32 hash_value;
FcChar32 rehash_value;
FcBool antialias;
+ FcBool color;
int max_glyph_memory;
int alloc_size;
int ascent, descent, height;
@@ -831,12 +832,18 @@ XftFontOpenInfo (Display *dpy,
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
antialias = FcFalse;
+ color = FT_HAS_COLOR(face) ? FcTrue : FcFalse;
+
/*
* Find the appropriate picture format
*/
if (fi->render)
{
- if (antialias)
+ if (color)
+ {
+ format = XRenderFindStandardFormat (dpy, PictStandardARGB32);
+ }
+ else if (antialias)
{
switch (fi->rgba) {
case FC_RGBA_RGB:
@@ -968,6 +975,13 @@ XftFontOpenInfo (Display *dpy,
* which doesn't happen in XftFontInfoFill
*/
font->info.antialias = antialias;
+
+ /*
+ * Set color value, which is only known once the
+ * font was loaded
+ */
+ font->info.color = color;
+
/*
* bump XftFile reference count
*/
diff --git a/src/xftglyphs.c b/src/xftglyphs.c
index b536df4..e0bad10 100644
--- a/src/xftglyphs.c
+++ b/src/xftglyphs.c
@@ -26,6 +26,8 @@
#include FT_SYNTHESIS_H
+#include FT_GLYPH_H
+
/*
* Validate the memory info for a font
*/
@@ -78,9 +80,11 @@ _XftFontValidateMemory (Display *dpy, XftFont *public)
static int
_compute_xrender_bitmap_size( FT_Bitmap* target,
FT_GlyphSlot slot,
- FT_Render_Mode mode )
+ FT_Render_Mode mode,
+ FT_Matrix* matrix )
{
FT_Bitmap* ftbit;
+ FT_Vector vector;
int width, height, pitch;
if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
@@ -91,6 +95,16 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
width = (int)ftbit->width;
height = (int)ftbit->rows;
+
+ if ( matrix && mode == FT_RENDER_MODE_NORMAL )
+ {
+ vector.x = ftbit->width;
+ vector.y = ftbit->rows;
+ FT_Vector_Transform(&vector, matrix);
+
+ width = (int)vector.x;
+ height = (int)vector.y;
+ }
pitch = (width+3) & ~3;
switch ( ftbit->pixel_mode )
@@ -112,6 +126,10 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
}
break;
+ case FT_PIXEL_MODE_BGRA:
+ pitch = width * 4;
+ break;
+
case FT_PIXEL_MODE_LCD:
if ( mode != FT_RENDER_MODE_LCD )
return -1;
@@ -142,6 +160,105 @@ _compute_xrender_bitmap_size( FT_Bitmap* target,
return pitch * height;
}
+/* this functions converts the glyph bitmap found in a FT_GlyphSlot
+ * into a different format while scaling by applying the given matrix
+ * (see _compute_xrender_bitmap_size)
+ *
+ * you should call this function after _compute_xrender_bitmap_size
+ *
+ * target :: target bitmap descriptor. Note that its 'buffer' pointer
+ * must point to memory allocated by the caller
+ *
+ * source :: the source bitmap descriptor
+ *
+ * matrix :: the scaling matrix to apply
+ */
+static void
+_scaled_fill_xrender_bitmap( FT_Bitmap* target,
+ FT_Bitmap* source,
+ const FT_Matrix* matrix )
+{
+ unsigned char* src_buf = source->buffer;
+ unsigned char* dst_line = target->buffer;
+ int src_pitch = source->pitch;
+ int width = target->width;
+ int height = target->rows;
+ int pitch = target->pitch;
+ int h;
+ FT_Vector vector;
+ FT_Matrix inverse = *matrix;
+ int sampling_width;
+ int sampling_height;
+ int sample_count;
+
+ if ( src_pitch < 0 )
+ src_buf -= src_pitch * (source->rows - 1);
+
+ FT_Matrix_Invert(&inverse);
+
+ /* compute how many source pixels a target pixel spans */
+ vector.x = 1;
+ vector.y = 1;
+ FT_Vector_Transform(&vector, &inverse);
+ sampling_width = vector.x / 2;
+ sampling_height = vector.y / 2;
+ sample_count = (2 * sampling_width + 1) * (2 * sampling_height + 1);
+
+ for ( h = height; h > 0; h--, dst_line += pitch )
+ {
+ int x;
+
+ for ( x = 0; x < width; x++ )
+ {
+ unsigned char* src;
+
+#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x)))
+
+ /* compute target pixel location in source space */
+ vector.x = (x * 0x10000) + 0x10000 / 2;
+ vector.y = ((height - h) * 0x10000) + 0x10000 / 2;
+ FT_Vector_Transform(&vector, &inverse);
+ vector.x = CLAMP(FT_RoundFix(vector.x) / 0x10000, 0, source->width - 1);
+ vector.y = CLAMP(FT_RoundFix(vector.y) / 0x10000, 0, source->rows - 1);
+
+ switch ( source->pixel_mode )
+ {
+ case FT_PIXEL_MODE_MONO: /* convert mono to 8-bit gray, scale using nearest pixel */
+ src = src_buf + (vector.y * src_pitch);
+ if ( src[(vector.x >> 3)] & (0x80 >> (vector.x & 7)) )
+ dst_line[x] = 0xff;
+ break;
+
+ case FT_PIXEL_MODE_GRAY: /* scale using nearest pixel */
+ src = src_buf + (vector.y * src_pitch);
+ dst_line[x] = src[vector.x];
+ break;
+
+ case FT_PIXEL_MODE_BGRA: /* scale by averaging all relevant source pixels, keep BGRA format */
+ {
+ int sample_x, sample_y;
+ int bgra[4] = {};
+ for (sample_y = - sampling_height; sample_y < sampling_height + 1; ++sample_y)
+ {
+ int src_y = CLAMP(vector.y + sample_y, 0, source->rows - 1);
+ src = src_buf + (src_y * src_pitch);
+ for (sample_x = - sampling_width; sample_x < sampling_width + 1; ++sample_x)
+ {
+ int src_x = CLAMP(vector.x + sample_x, 0, source->width - 1);
+ for (int i = 0; i < 4; ++i)
+ bgra[i] += src[src_x * 4 + i];
+ }
+ }
+
+ for (int i = 0; i < 4; ++i)
+ dst_line[4 * x + i] = bgra[i] / sample_count;
+ break;
+ }
+ }
+ }
+ }
+}
+
/* this functions converts the glyph bitmap found in a FT_GlyphSlot
* into a different format (see _compute_xrender_bitmap_size)
*
@@ -244,6 +361,11 @@ _fill_xrender_bitmap( FT_Bitmap* target,
}
break;
+ case FT_PIXEL_MODE_BGRA: /* Preserve BGRA format */
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ memcpy( dstLine, srcLine, width * 4 );
+ break;
+
case FT_PIXEL_MODE_LCD:
if ( !bgr )
{
@@ -339,6 +461,55 @@ _fill_xrender_bitmap( FT_Bitmap* target,
}
}
+/* This function creates a Picture for the given glyph on the default root window
+ * It will only work in Xinerama mode
+ *
+ * dpy :: target display
+ *
+ * format :: target pixmap format
+ *
+ * width :: picture width
+ *
+ * width :: picture height
+ *
+ * data :: bitmap data
+ *
+ */
+static Picture
+_create_glyph_bgra_picture (Display *dpy,
+ XRenderPictFormat *format,
+ int width,
+ int height,
+ unsigned char *data)
+{
+ XImage image = {
+ width, height, 0, ZPixmap, (char *)data,
+ dpy->byte_order, dpy->bitmap_unit, dpy->bitmap_bit_order, 32,
+ 32, 0, 32,
+ 0, 0, 0
+ };
+ Picture picture;
+ Pixmap pixmap;
+ GC gc;
+
+ pixmap = XCreatePixmap(dpy, DefaultRootWindow(dpy), width, height, 32);
+ if (!pixmap)
+ return None;
+
+ gc = XCreateGC(dpy, pixmap, 0, NULL);
+ if (!gc)
+ return None;
+
+ XInitImage(&image);
+ XPutImage(dpy, pixmap, gc, &image, 0, 0, 0, 0, width, height);
+ picture = XRenderCreatePicture(dpy, pixmap, format, 0, NULL);
+
+ XFreeGC(dpy, gc);
+ XFreePixmap(dpy, pixmap);
+
+ return picture;
+}
+
_X_EXPORT void
XftFontLoadGlyphs (Display *dpy,
XftFont *pub,
@@ -365,6 +536,8 @@ XftFontLoadGlyphs (Display *dpy,
FT_Vector vector;
FT_Face face;
FT_Render_Mode mode = FT_RENDER_MODE_MONO;
+ FcBool transform;
+ FcBool glyph_transform;
if (!info)
return;
@@ -374,6 +547,8 @@ XftFontLoadGlyphs (Display *dpy,
if (!face)
return;
+ if (font->info.color)
+ mode = FT_RENDER_MODE_NORMAL;
if (font->info.antialias)
{
switch (font->info.rgba) {
@@ -390,6 +565,8 @@ XftFontLoadGlyphs (Display *dpy,
}
}
+ transform = font->info.transform && mode != FT_RENDER_MODE_MONO;
+
while (nglyph--)
{
glyphindex = *glyphs++;
@@ -440,7 +617,7 @@ XftFontLoadGlyphs (Display *dpy,
/*
* Compute glyph metrics from FreeType information
*/
- if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP)
+ if (transform)
{
/*
* calculate the true width by transforming all four corners.
@@ -487,7 +664,7 @@ XftFontLoadGlyphs (Display *dpy,
* Clip charcell glyphs to the bounding box
* XXX transformed?
*/
- if (font->info.spacing >= FC_CHARCELL && !font->info.transform)
+ if (font->info.spacing >= FC_CHARCELL && !transform)
{
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
{
@@ -519,18 +696,20 @@ XftFontLoadGlyphs (Display *dpy,
}
}
+ glyph_transform = transform;
if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP )
{
error = FT_Render_Glyph( face->glyph, mode );
if (error)
continue;
+ glyph_transform = False;
}
FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE );
if (font->info.spacing >= FC_MONO)
{
- if (font->info.transform)
+ if (transform)
{
if (font->info.load_flags & FT_LOAD_VERTICAL_LAYOUT)
{
@@ -613,14 +792,27 @@ XftFontLoadGlyphs (Display *dpy,
}
}
- size = _compute_xrender_bitmap_size( &local, glyphslot, mode );
+ size = _compute_xrender_bitmap_size( &local, glyphslot, mode, glyph_transform ? &font->info.matrix : NULL );
if ( size < 0 )
continue;
xftg->metrics.width = (unsigned short)local.width;
xftg->metrics.height = (unsigned short)local.rows;
- xftg->metrics.x = (short)(- glyphslot->bitmap_left);
- xftg->metrics.y = (short)( glyphslot->bitmap_top);
+ if (transform)
+ {
+ vector.x = - glyphslot->bitmap_left;
+ vector.y = glyphslot->bitmap_top;
+
+ FT_Vector_Transform(&vector, &font->info.matrix);
+
+ xftg->metrics.x = (short)vector.x;
+ xftg->metrics.y = (short)vector.y;
+ }
+ else
+ {
+ xftg->metrics.x = (short)(- glyphslot->bitmap_left);
+ xftg->metrics.y = (short)( glyphslot->bitmap_top);
+ }
/*
* If the glyph is relatively large (> 1% of server memory),
@@ -645,9 +837,12 @@ XftFontLoadGlyphs (Display *dpy,
local.buffer = bufBitmap;
- _fill_xrender_bitmap( &local, glyphslot, mode,
- (font->info.rgba == FC_RGBA_BGR ||
- font->info.rgba == FC_RGBA_VBGR ) );
+ if (mode == FT_RENDER_MODE_NORMAL && glyph_transform)
+ _scaled_fill_xrender_bitmap(&local, &glyphslot->bitmap, &font->info.matrix);
+ else
+ _fill_xrender_bitmap( &local, glyphslot, mode,
+ (font->info.rgba == FC_RGBA_BGR ||
+ font->info.rgba == FC_RGBA_VBGR ) );
/*
* Copy or convert into local buffer.
@@ -662,6 +857,7 @@ XftFontLoadGlyphs (Display *dpy,
*/
glyph = (Glyph) glyphindex;
+ xftg->picture = 0;
xftg->glyph_memory = (size_t)size + sizeof (XftGlyph);
if (font->format)
{
@@ -685,15 +881,21 @@ XftFontLoadGlyphs (Display *dpy,
}
}
}
- else if ( mode != FT_RENDER_MODE_NORMAL )
+ else if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA || mode != FT_RENDER_MODE_NORMAL)
{
/* invert ARGB <=> BGRA */
if (ImageByteOrder (dpy) != XftNativeByteOrder ())
XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2);
}
- XRenderAddGlyphs (dpy, font->glyphset, &glyph,
- &xftg->metrics, 1,
- (char *) bufBitmap, size);
+
+ if (glyphslot->bitmap.pixel_mode == FT_PIXEL_MODE_BGRA)
+ xftg->picture = _create_glyph_bgra_picture(dpy, font->format,
+ local.width, local.rows,
+ bufBitmap);
+ else
+ XRenderAddGlyphs (dpy, font->glyphset, &glyph,
+ &xftg->metrics, 1,
+ (char *) bufBitmap, size);
}
else
{
@@ -744,7 +946,9 @@ XftFontUnloadGlyphs (Display *dpy,
{
if (font->format)
{
- if (font->glyphset)
+ if (xftg->picture)
+ XRenderFreePicture(dpy, xftg->picture);
+ else if (font->glyphset)
{
glyphBuf[nused++] = (Glyph) glyphindex;
if (nused == sizeof (glyphBuf) / sizeof (glyphBuf[0]))
diff --git a/src/xftint.h b/src/xftint.h
index ced9a02..1af40fe 100644
--- a/src/xftint.h
+++ b/src/xftint.h
@@ -85,6 +85,7 @@ typedef struct _XftGlyph {
XGlyphInfo metrics;
void *bitmap;
unsigned long glyph_memory;
+ Picture picture;
} XftGlyph;
/*
@@ -134,6 +135,7 @@ struct _XftFontInfo {
FT_F26Dot6 xsize, ysize; /* pixel size */
FcBool antialias; /* doing antialiasing */
FcBool embolden; /* force emboldening */
+ FcBool color; /* contains color glyphs */
int rgba; /* subpixel order */
int lcd_filter; /* lcd filter */
FT_Matrix matrix; /* glyph transformation matrix */
diff --git a/src/xftrender.c b/src/xftrender.c
index 5852b2e..bd001be 100644
--- a/src/xftrender.c
+++ b/src/xftrender.c
@@ -84,12 +84,14 @@ XftGlyphRender (Display *dpy,
int nglyphs)
{
XftFontInt *font = (XftFontInt *) pub;
- int i;
+ int i, j;
FT_UInt missing[XFT_NMISSING];
int nmissing;
FT_UInt g, max;
int size, width;
+ int dstx, dsty;
Glyph wire;
+ XftGlyph* glyph;
char *char8;
unsigned short *char16;
unsigned int *char32;
@@ -141,22 +143,46 @@ XftGlyphRender (Display *dpy,
if (!chars)
goto bail1;
}
+ dstx = x;
+ dsty = y;
char8 = (char *) chars;
char16 = (unsigned short *) chars;
char32 = (unsigned int *) chars;
- for (i = 0; i < nglyphs; i++)
+ for (i = 0, j = 0; i < nglyphs; i++)
{
wire = (Glyph) glyphs[i];
if (wire >= font->num_glyphs || !font->glyphs[wire])
wire = 0;
- switch (width) {
- case 1: char8[i] = (char) wire; break;
- case 2: char16[i] = (unsigned short) wire; break;
- case 4: char32[i] = (unsigned int) wire; break;
+ glyph = font->glyphs[wire];
+ if (glyph->picture)
+ {
+ _XftCompositeString(dpy, op, src, dst, font->format, font->glyphset,
+ srcx, srcy, x, y, width, chars, j);
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None,
+ dst, 0, 0, 0, 0, dstx, dsty - glyph->metrics.y,
+ glyph->metrics.width, glyph->metrics.height);
+
+ dstx += glyph->metrics.xOff;
+ dsty += glyph->metrics.yOff;
+
+ x = dstx;
+ y = dsty;
+ j = 0;
+ }
+ else
+ {
+ switch (width) {
+ case 1: char8[j] = (char) wire; break;
+ case 2: char16[j] = (unsigned short) wire; break;
+ case 4: char32[j] = (unsigned int) wire; break;
+ }
+ dstx += glyph->metrics.xOff;
+ dsty += glyph->metrics.yOff;
+ ++j;
}
}
_XftCompositeString(dpy, op, src, dst, font->format, font->glyphset,
- srcx, srcy, x, y, width, chars, nglyphs);
+ srcx, srcy, x, y, width, chars, j);
if (chars != char_local)
free (chars);
bail1:
@@ -319,9 +345,10 @@ XftGlyphSpecRender (Display *dpy,
g = 0;
/*
* check to see if the glyph is placed where it would
- * fall using the normal spacing
+ * fall using the normal spacing and if it would render
+ * as a XRender glyph
*/
- if ((glyph = font->glyphs[g]))
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
{
if (x != glyphs[i].x || y != glyphs[i].y)
{
@@ -335,7 +362,7 @@ XftGlyphSpecRender (Display *dpy,
}
elts = elts_local;
- if (nelt > NUM_ELT_LOCAL)
+ if (!font->info.color && nelt > NUM_ELT_LOCAL)
{
elts = malloc ((size_t)nelt * sizeof (XGlyphElt8));
if (!elts)
@@ -343,7 +370,7 @@ XftGlyphSpecRender (Display *dpy,
}
/*
- * Generate the list of glyph elts
+ * Generate the list of glyph elts or render color glyphs
*/
nelt = 0;
x = y = 0;
@@ -357,6 +384,14 @@ XftGlyphSpecRender (Display *dpy,
g = 0;
if ((glyph = font->glyphs[g]))
{
+ if (glyph->picture)
+ {
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None,
+ dst, 0, 0, 0, 0,
+ glyphs[i].x, glyphs[i].y - glyph->metrics.y,
+ glyph->metrics.width, glyph->metrics.height);
+ continue;
+ }
if (!i || x != glyphs[i].x || y != glyphs[i].y)
{
if (n)
@@ -589,7 +624,7 @@ XftGlyphFontSpecRender (Display *dpy,
* check to see if the glyph is placed where it would
* fall using the normal spacing
*/
- if ((glyph = font->glyphs[g]))
+ if ((glyph = font->glyphs[g]) && !glyph->picture)
{
if (pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
{
@@ -614,7 +649,7 @@ XftGlyphFontSpecRender (Display *dpy,
}
/*
- * Generate the list of glyph elts
+ * Generate the list of glyph elts and render color glyphs
*/
nelt = 0;
x = y = 0;
@@ -632,6 +667,14 @@ XftGlyphFontSpecRender (Display *dpy,
g = 0;
if ((glyph = font->glyphs[g]))
{
+ if (glyph->picture)
+ {
+ XRenderComposite(dpy, PictOpOver, glyph->picture, None,
+ dst, 0, 0, 0, 0,
+ glyphs[i].x, glyphs[i].y - glyph->metrics.y,
+ glyph->metrics.width, glyph->metrics.height);
+ continue;
+ }
if (!i || pub != prevPublic || x != glyphs[i].x || y != glyphs[i].y)
{
if (n)
--
GitLab
+30 -45
View File
@@ -1,79 +1,64 @@
[DEFAULT]
main-repo = gentoo
sync-user = yorune
[gentoo]
location = /var/db/repos/gentoo
location = /usr/portage
#sync-type = rsync
#sync-uri = rsync://rsync.gentoo.org/gentoo-portage
sync-type = git
#sync-uri = https://anongit.gentoo.org/git/repo/gentoo.git
sync-uri = https://github.com/gentoo-mirror/gentoo.git
auto-sync = yes
[hossie]
priority = 50
location = /var/db/repos/hossie
sync-uri = https://github.com/gentoo-mirror/hossie.git
sync-type = git
auto-sync = Yes
location = /usr/repos/hossie
layman-type = git
auto-sync = No
[src_prepare-overlay]
priority = 50
location = /var/db/repos/src_prepare-overlay
sync-uri = https://gitlab.com/src_prepare/src_prepare-overlay.git
sync-type = git
auto-sync = Yes
location = /usr/repos/src_prepare-overlay
layman-type = git
auto-sync = No
[ricerlay]
priority = 50
location = /usr/repos/ricerlay
layman-type = git
auto-sync = No
[steam-overlay]
location = /var/db/repos/steam-overlay
location = /usr/repos/steam-overlay
sync-type = git
sync-uri = https://github.com/anyc/steam-overlay.git
priority = 50
auto-sync = Yes
auto-sync = No
[gentoo-yorune]
location = /var/db/dev/gentoo-yorune
location = /usr/repos/gentoo-yorune
sync-type = git
sync-uri = gitea@git.yorune.pl:y0rune/gentoo-yorune.git
sync-uri = https://github.com/y0rune/gentoo-yorune.git
priority = 50
auto-sync = Yes
auto-sync = No
[guru]
priority = 50
location = /var/db/repos/guru
location = /usr/repos/guru
sync-type = git
sync-uri = https://anongit.gentoo.org/git/repo/proj/guru.git
auto-sync = Yes
[2xsaiko]
priority = 50
location = /var/db/repos/2xsaiko
location = /usr/repos/2xsaiko
sync-type = git
sync-uri = https://git.sr.ht/~dblsaiko/ebuilds
auto-sync = Yes
auto-sync = No
[bombo82]
priority = 50
location = /var/db/repos/bombo82
sync-type = git
sync-uri = https://github.com/bombo82/bombo82-overlay.git
auto-sync = Yes
[mv]
priority = 50
location = /var/db/repos/mv
sync-type = git
sync-uri = https://github.com/vaeth/mv-overlay.git
auto-sync = Yes
[lto-overlay]
priority = 50
location = /var/db/repos/lto-overlay
sync-type = git
sync-uri = https://github.com/InBetweenNames/gentooLTO.git
auto-sync = Yes
[pf4public]
priority = 100
location = /var/db/repos/pf4public
sync-type = git
sync-uri = https://github.com/PF4Public/gentoo-overlay.git
auto-sync = Yes
#[trinity]
#location = /usr/local/overlay/trinity
#sync-type = git
#sync-uri = https://github.com/Fat-Zer/trinity.git
#auto-sync = yes
#masters = gentoo
+1 -1
View File
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Busybox version: 1.33.0
# Wed Apr 21 08:40:14 2021
# Wed Jan 6 21:45:27 2021
#
CONFIG_HAVE_DOT_CONFIG=y
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-5
View File
@@ -1,5 +0,0 @@
#undef BANNER_TIMEOUT
#define BANNER_TIMEOUT 0
#define NET_PROTO_IPV6
#define VMWARE_SETTINGS
#define CONSOLE_VMWARE
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-5
View File
@@ -1,5 +0,0 @@
perl-core/CPAN:0
perl-core/Compress-Raw-Zlib:0
perl-core/Encode:0
perl-core/File-Temp:0
perl-core/Scalar-List-Utils:0
-172
View File
@@ -1,172 +0,0 @@
app-text/po4a:0
dev-perl/Archive-Zip:0
dev-perl/Authen-SASL:0
dev-perl/B-Hooks-EndOfScope:0
dev-perl/CGI-Fast:0
dev-perl/CGI-Session:0
dev-perl/CGI:0
dev-perl/CPAN-Meta-Check:0
dev-perl/Canary-Stability:0
dev-perl/Capture-Tiny:0
dev-perl/Class-Data-Inheritable:0
dev-perl/Config-AutoConf:0
dev-perl/Config-Grammar:0
dev-perl/Convert-ASN1:0
dev-perl/Crypt-DES:0
dev-perl/Crypt-RC4:0
dev-perl/Crypt-Rijndael:0
dev-perl/Data-OptList:0
dev-perl/Date-Manip:0
dev-perl/Devel-Caller:0
dev-perl/Devel-CheckLib:0
dev-perl/Devel-GlobalDestruction:0
dev-perl/Devel-LexAlias:0
dev-perl/Devel-StackTrace:0
dev-perl/Digest-BubbleBabble:0
dev-perl/Digest-HMAC:0
dev-perl/Digest-Perl-MD5:0
dev-perl/Digest-SHA1:0
dev-perl/Dist-CheckConflicts:0
dev-perl/Encode-Locale:0
dev-perl/Error:0
dev-perl/Eval-Closure:0
dev-perl/Exception-Class:0
dev-perl/ExtUtils-HasCompiler:0
dev-perl/FCGI:0
dev-perl/File-BaseDir:0
dev-perl/File-DesktopEntry:0
dev-perl/File-HomeDir:0
dev-perl/File-Listing:0
dev-perl/File-MimeInfo:0
dev-perl/File-Slurper:0
dev-perl/File-Which:0
dev-perl/HTML-Parser:0
dev-perl/HTML-Tagset:0
dev-perl/HTTP-Cookies:0
dev-perl/HTTP-Date:0
dev-perl/HTTP-Message:0
dev-perl/HTTP-Negotiate:0
dev-perl/IO-HTML:0
dev-perl/IO-Socket-INET6:0
dev-perl/IO-Socket-SSL:0
dev-perl/IO-Tty:0
dev-perl/IO-stringy:0
dev-perl/IPC-System-Simple:0
dev-perl/JSON-XS:0
dev-perl/JSON:0
dev-perl/LWP-MediaTypes:0
dev-perl/LWP-Protocol-https:0
dev-perl/Locale-gettext:0
dev-perl/Log-Dispatch:0
dev-perl/MIME-Charset:0
dev-perl/MRO-Compat:0
dev-perl/MailTools:0
dev-perl/Module-Build:0
dev-perl/Module-Implementation:0
dev-perl/Module-Runtime:0
dev-perl/Mozilla-CA:0
dev-perl/Net-DNS-SEC:0
dev-perl/Net-DNS:0
dev-perl/Net-HTTP:0
dev-perl/Net-LibIDN2:0
dev-perl/Net-OpenSSH:0
dev-perl/Net-SFTP-Foreign:0
dev-perl/Net-SNMP:0
dev-perl/Net-SSH-Any:0
dev-perl/Net-SSLeay:0
dev-perl/Net-Telnet:0
dev-perl/OLE-StorageLite:0
dev-perl/Package-Stash-XS:0
dev-perl/Package-Stash:0
dev-perl/PadWalker:0
dev-perl/Params-Util:0
dev-perl/Params-ValidationCompiler:0
dev-perl/Parse-Yapp:0
dev-perl/Perl-Tidy:0
dev-perl/PerlIO-utf8_strict:0
dev-perl/Pod-Parser:0
dev-perl/Ref-Util-XS:0
dev-perl/Ref-Util:0
dev-perl/Role-Tiny:0
dev-perl/SGMLSpm:0
dev-perl/SNMP_Session:0
dev-perl/Socket6:0
dev-perl/Specio:0
dev-perl/Spreadsheet-ParseExcel:0
dev-perl/Sub-Exporter-Progressive:0
dev-perl/Sub-Exporter:0
dev-perl/Sub-Identify:0
dev-perl/Sub-Install:0
dev-perl/Sub-Name:0
dev-perl/Sub-Quote:0
dev-perl/TermReadKey:0
dev-perl/Test-Fatal:0
dev-perl/Text-CSV_XS:0
dev-perl/Text-CharWidth:0
dev-perl/Text-WrapI18N:0
dev-perl/TimeDate:0
dev-perl/Try-Tiny:0
dev-perl/Types-Serialiser:0
dev-perl/URI:0
dev-perl/Unicode-LineBreak:0
dev-perl/Unicode-Map:0
dev-perl/Variable-Magic:0
dev-perl/WWW-RobotRules:0
dev-perl/XML-Parser:0
dev-perl/XString:0
dev-perl/YAML-Tiny:0
dev-perl/common-sense:0
dev-perl/libwww-perl:0
dev-perl/namespace-autoclean:0
dev-perl/namespace-clean:0
dev-perl/perl-ldap:0
dev-python/subunit:0
dev-vcs/git:0
net-analyzer/rrdtool:0
net-fs/samba:0
virtual/perl-CPAN-Meta-Requirements:0
virtual/perl-CPAN-Meta-YAML:0
virtual/perl-CPAN-Meta:0
virtual/perl-CPAN:0
virtual/perl-Carp:0
virtual/perl-Compress-Raw-Bzip2:0
virtual/perl-Compress-Raw-Zlib:0
virtual/perl-Data-Dumper:0
virtual/perl-Digest-MD5:0
virtual/perl-Digest-SHA:0
virtual/perl-Digest:0
virtual/perl-Encode:0
virtual/perl-Exporter:0
virtual/perl-ExtUtils-CBuilder:0
virtual/perl-ExtUtils-Install:0
virtual/perl-ExtUtils-MakeMaker:0
virtual/perl-ExtUtils-Manifest:0
virtual/perl-ExtUtils-ParseXS:0
virtual/perl-File-Path:0
virtual/perl-File-Spec:0
virtual/perl-File-Temp:0
virtual/perl-Getopt-Long:0
virtual/perl-IO-Compress:0
virtual/perl-IO-Socket-IP:0
virtual/perl-IO:0
virtual/perl-JSON-PP:0
virtual/perl-MIME-Base64:0
virtual/perl-Math-BigInt:0
virtual/perl-Module-Metadata:0
virtual/perl-Parse-CPAN-Meta:0
virtual/perl-Perl-OSType:0
virtual/perl-Pod-Parser:0
virtual/perl-Scalar-List-Utils:0
virtual/perl-Storable:0
virtual/perl-Sys-Syslog:0
virtual/perl-Test-Harness:0
virtual/perl-Test-Simple:0
virtual/perl-Text-ParseWords:0
virtual/perl-Time-HiRes:0
virtual/perl-Time-Local:0
virtual/perl-XSLoader:0
virtual/perl-if:0
virtual/perl-libnet:0
virtual/perl-parent:0
virtual/perl-podlators:0
virtual/perl-version:0