Compare commits
15 Commits
master
..
730d80bd2d
| Author | SHA1 | Date | |
|---|---|---|---|
|
730d80bd2d
|
|||
|
ecd962a3d3
|
|||
|
b94b61afa4
|
|||
|
036fe9477e
|
|||
|
3adcc7f765
|
|||
|
b025187078
|
|||
|
fca9521774
|
|||
|
8c16d3b774
|
|||
|
cd3e6aa5ba
|
|||
|
a63483ec1a
|
|||
|
4630af1b0a
|
|||
|
34a40aebc8
|
|||
|
a9e20548a3
|
|||
|
84ee4888cf
|
|||
|
a9184e9bdf
|
@@ -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
|
||||
@@ -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 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/bashrc.d/41-lto-patch.sh
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/bashrc.d/43-lto-no-common.sh
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
@@ -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 "$@"
|
||||
}
|
||||
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
-6
@@ -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"
|
||||
Vendored
-5
@@ -1,5 +0,0 @@
|
||||
COMMON_FLAGS="-march=native -O2 -pipe"
|
||||
CFLAGS="${COMMON_FLAGS}"
|
||||
CXXFLAGS="${COMMON_FLAGS}"
|
||||
FCFLAGS="${COMMON_FLAGS}"
|
||||
FFLAGS="${COMMON_FLAGS}"
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
CFLAGS="${CFLAGS} -fno-lto"
|
||||
Vendored
-5
@@ -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}"
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
PORTAGE_TMPDIR="/var/tmpnotmpfs"
|
||||
Vendored
-6
@@ -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
File diff suppressed because it is too large
Load Diff
+137
-505
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
EMERGE_DEFAULT_OPTS="--jobs=4 --load-average=3.4 --with-bdeps=y --keep-going=y --quiet-build"
|
||||
#MAKEOPTS="-j8 --load-average=6.4"
|
||||
#EMERGE_DEFAULT_OPTS="--jobs=8 --load-average=6.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 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/make.conf.lto
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/make.conf.lto.defines
|
||||
+1
-1
@@ -1 +1 @@
|
||||
../../var/db/repos/gentoo/profiles/default/linux/amd64/17.1
|
||||
../../usr/portage/profiles/default/linux/amd64/17.1
|
||||
+4
-10
@@ -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 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/clang.conf
|
||||
@@ -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 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/graphite.conf
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/ipa-pta.conf
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/lto.conf
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/no-common-libtool.conf
|
||||
@@ -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 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/optimizations.conf
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/portage-bashrc-mv.conf
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/tls-dialect.conf
|
||||
@@ -1 +0,0 @@
|
||||
/var/db/repos/lto-overlay/sys-config/ltoize/files/package.cflags/use-ld.conf
|
||||
-19
@@ -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
@@ -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
|
||||
|
||||
+141
-297
@@ -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,56 @@ 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 +81,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 +92,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 +111,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 +140,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 +161,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 +174,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,14 +201,14 @@ 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
|
||||
@@ -233,100 +222,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 +321,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 +338,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
|
||||
|
||||
+31
-39
@@ -1,79 +1,71 @@
|
||||
[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
|
||||
location = /usr/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,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
@@ -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
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user