On Tue, 2019-04-09 at 21:41 +0200, Andreas Sturmlechner wrote: > On Sonntag, 24. März 2019 19:41:24 CEST Michał Górny wrote: > > -U9999, please. This is a huge eclass and probably requires more work > > than you're showing us ;-). > > As requested, without any changes to v2 - and if this does not receive > a reply I'll assume silent ack by fonts proj. > > > --- a/eclass/font.eclass 2019-04-04 08:28:12.336171811 +0200 > +++ b/eclass/font.eclass 2019-03-25 20:34:15.306062926 +0100 > @@ -1,254 +1,257 @@ > -# Copyright 1999-2015 Gentoo Foundation > +# Copyright 1999-2019 Gentoo Foundation > # Distributed under the terms of the GNU General Public License v2 > > # @ECLASS: font.eclass > # @MAINTAINER: > # [email protected] > # @BLURB: Eclass to make font installation uniform > > case ${EAPI:-0} in > - 0|1|2|3|4|5|6) ;; > - *) die "EAPI ${EAPI} is not supported by font.eclass." ;; > + 0|1|2|3|4|5|6) inherit eutils ;; > + 7) ;; > + *) die "EAPI ${EAPI} is not supported by font.eclass." ;; > esac > > -inherit eutils > - > EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst pkg_postrm > > # @ECLASS-VARIABLE: FONT_SUFFIX > # @DEFAULT_UNSET > # @REQUIRED > # @DESCRIPTION: > # Space delimited list of font suffixes to install. > FONT_SUFFIX=${FONT_SUFFIX:-} > > # @ECLASS-VARIABLE: FONT_S > # @REQUIRED > # @DESCRIPTION: > # Space delimited list of directories containing the fonts. > FONT_S=${FONT_S:-${S}} > > # @ECLASS-VARIABLE: FONT_PN > # @DESCRIPTION: > # Font name (ie. last part of FONTDIR). > FONT_PN=${FONT_PN:-${PN}} > > # @ECLASS-VARIABLE: FONTDIR > # @DESCRIPTION: > # Full path to installation directory. > FONTDIR=${FONTDIR:-/usr/share/fonts/${FONT_PN}} > > # @ECLASS-VARIABLE: FONT_CONF > # @DEFAULT_UNSET > # @DESCRIPTION: > # Array containing fontconfig conf files to install. > FONT_CONF=( "" ) > > # @ECLASS-VARIABLE: DOCS > # @DEFAULT_UNSET > # @DESCRIPTION: > # Space delimited list of docs to install. > # We always install these: > # COPYRIGHT README{,.txt} NEWS AUTHORS BUGS ChangeLog FONTLOG.txt > DOCS=${DOCS:-} > > IUSE="X" > > DEPEND="X? ( > || ( >=x11-apps/mkfontscale-1.2.0 x11-apps/mkfontdir ) > media-fonts/encodings > )" > RDEPEND="" > > # @FUNCTION: font_xfont_config > # @DESCRIPTION: > # Generate Xorg font files (mkfontscale/mkfontdir). > font_xfont_config() { > local dir_name > if has X ${IUSE//+} && use X ; then
Looks like in_iuse candidate.
> dir_name="${1:-${FONT_PN}}"
> + rm -f
> "${ED%/}/${FONTDIR}/${1//${S}/}"/{fonts.{dir,scale},encodings.dir} \
> + || die "failed to prepare ${FONTDIR}/${1//${S}/}"
> ebegin "Creating fonts.scale & fonts.dir in ${dir_name##*/}"
> - rm -f
> "${ED}${FONTDIR}/${1//${S}/}"/{fonts.{dir,scale},encodings.dir}
> - mkfontscale "${ED}${FONTDIR}/${1//${S}/}"
> + mkfontscale "${ED%/}/${FONTDIR}/${1//${S}/}" || eerror "failed
> to create fonts.scale"
> mkfontdir \
> -e ${EPREFIX}/usr/share/fonts/encodings \
> -e ${EPREFIX}/usr/share/fonts/encodings/large \
> - "${ED}${FONTDIR}/${1//${S}/}"
> - eend $?
> - if [[ -e fonts.alias ]] ; then
> - doins fonts.alias
> + "${ED%/}/${FONTDIR}/${1//${S}/}" || eerror "failed to
> create fonts.dir"
> + if ! eend $? ; then
> + die "failed to run mkfontscale or mkfontdir"
...but this doesn't catch failure from mkfontscale.
> fi
> + [[ -e fonts.alias ]] && doins fonts.alias
> fi
> }
>
> # @FUNCTION: font_fontconfig
> # @DESCRIPTION:
> # Install fontconfig conf files given in FONT_CONF.
> font_fontconfig() {
> local conffile
> if [[ -n ${FONT_CONF[@]} ]]; then
> insinto /etc/fonts/conf.avail/
> for conffile in "${FONT_CONF[@]}"; do
> [[ -e ${conffile} ]] && doins ${conffile}
> done
> fi
> }
>
> # @FUNCTION: font_cleanup_dirs
> # @DESCRIPTION:
> # Remove font directories containing only generated files.
> font_cleanup_dirs() {
> local genfiles="encodings.dir fonts.alias fonts.cache-1 fonts.dir
> fonts.scale"
> # fonts.alias isn't generated but it's a special case (see below).
> local d f g generated candidate otherfile
>
> ebegin "Cleaning up font directories"
> - find -L "${EROOT}"usr/share/fonts/ -type d -print0 | while read -d
> $'\0' d; do
> + while read d; do
read -d $'\0' -r
> candidate=false
> otherfile=false
> for f in "${d}"/*; do
> generated=false
> # make sure this is a file and not a subdir
> [[ -e ${f} || -L ${f} ]] || continue
> for g in ${genfiles}; do
Could you use 'has' here?
> if [[ ${f##*/} == ${g} ]]; then
> # this is a generated file
> generated=true
> break
> fi
> done
> # if the file is a generated file then we know this is
> a font dir (as
> # opposed to something like encodings or util) and a
> candidate for
> # removal. if it's not generated then it's an
> "otherfile".
> ${generated} && candidate=true || otherfile=true
> # if the directory is both a candidate for removal and
> contains at
> # least one "otherfile" then don't remove it.
> [[ ${candidate} == ${otherfile} ]] && break
> done
> # if in the end we only have generated files, purge the
> directory.
> if [[ ${candidate} == true && ${otherfile} == false ]]; then
> # we don't want to remove fonts.alias files that were
> installed by
> # media-fonts/font-alias. any other fonts.alias files
> will have
> # already been unmerged with their packages.
> for g in ${genfiles}; do
> - [[ ${g} != fonts.alias && ( -e ${d}/${g} || -L
> ${d}/${g} ) ]] \
> - && rm "${d}"/${g}
> + if [[ ${g} != fonts.alias && ( -e ${d}/${g} ||
> -L ${d}/${g} ) ]] ; then
> + rm "${d}"/${g} || eerror "failed to
> remove ${d}/${g}"
> + fi
> done
> # if there's nothing left remove the directory
> - find "${d}" -maxdepth 0 -type d -empty -exec rmdir '{}'
> \;
> + find "${d}" -maxdepth 0 -type d -empty -delete ||
> eerror "failed to purge ${d}"
> fi
> - done
> + done < <(find -L "${EROOT%/}"/usr/share/fonts/ -type d -print0)
> eend 0
> }
>
> # @FUNCTION: font_pkg_setup
> # @DESCRIPTION:
> # The font pkg_setup function.
> # Collision protection and Prefix compat for eapi < 3.
> font_pkg_setup() {
> # Prefix compat
> case ${EAPI:-0} in
> 0|1|2)
> if ! use prefix; then
> EPREFIX=
> ED=${D}
> EROOT=${ROOT}
> [[ ${EROOT} = */ ]] || EROOT+="/"
> fi
> ;;
> esac
This is really ugly but I guess you can ignore it.
>
> # make sure we get no collisions
> # setup is not the nicest place, but preinst doesn't cut it
> - [[ -e "${EROOT}/${FONTDIR}/fonts.cache-1" ]] && rm -f
> "${EROOT}/${FONTDIR}/fonts.cache-1"
> + if [[ -e "${EROOT%/}/${FONTDIR}/fonts.cache-1" ]] ; then
> + rm "${EROOT%/}/${FONTDIR}/fonts.cache-1" || die "failed to
> remove fonts.cache-1"
> + fi
> }
>
> # @FUNCTION: font_src_install
> # @DESCRIPTION:
> # The font src_install function.
> font_src_install() {
> local dir suffix commondoc
>
> set -- ${FONT_S:-${S}}
> if [[ $# -gt 1 ]]; then
> # if we have multiple FONT_S elements then we want to recreate
> the dir
> # structure
> for dir in ${FONT_S}; do
> pushd "${dir}" > /dev/null
> insinto "${FONTDIR}/${dir//${S}/}"
> for suffix in ${FONT_SUFFIX}; do
> doins *.${suffix}
Old EAPIs need ||die.
> done
> font_xfont_config "${dir}"
> popd > /dev/null
> done
> else
> pushd "${FONT_S}" > /dev/null
> insinto "${FONTDIR}"
> for suffix in ${FONT_SUFFIX}; do
> doins *.${suffix}
Likewise.
> done
> font_xfont_config
> popd > /dev/null
> fi
>
> font_fontconfig
>
> - [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ;
> }
> + [[ -n ${DOCS} ]] && dodoc ${DOCS}
I suppose this kills proper support for old EAPIs.
>
> # install common docs
> for commondoc in COPYRIGHT README{,.txt} NEWS AUTHORS BUGS ChangeLog
> FONTLOG.txt; do
> [[ -s ${commondoc} ]] && dodoc ${commondoc}
> done
> }
>
> +# @FUNCTION: _update_fontcache
> +# @DESCRIPTION:
> +# Updates fontcache if !prefix and media-libs/fontconfig installed
> +_update_fontcache() {
> + # unreadable font files = fontconfig segfaults
> + find "${EROOT%/}"/usr/share/fonts/ -type f '!' -perm 0644 \
> + -exec chmod -v 0644 2>/dev/null {} + || die "failed to fix font
> files perms"
> +
> + if [[ -z ${ROOT%/} ]] ; then
> + if has_version media-libs/fontconfig ; then
> + ebegin "Updating global fontcache"
> + fc-cache -fs
> + if ! eend $? ; then
> + die "failed to update global fontcache"
> + fi
> + else
> + einfo "Skipping fontcache update (media-libs/fontconfig
> not installed)"
> + fi
> + else
> + einfo "Skipping fontcache update (ROOT != /)"
> + fi
> +}
> +
> # @FUNCTION: font_pkg_postinst
> # @DESCRIPTION:
> # The font pkg_postinst function.
> font_pkg_postinst() {
> - # unreadable font files = fontconfig segfaults
> - find "${EROOT}"usr/share/fonts/ -type f '!' -perm 0644 -print0 \
> - | xargs -0 chmod -v 0644 2>/dev/null
> -
> if [[ -n ${FONT_CONF[@]} ]]; then
> local conffile
> - echo
> elog "The following fontconfig configuration files have been
> installed:"
> elog
> for conffile in "${FONT_CONF[@]}"; do
> - if [[ -e ${EROOT}etc/fonts/conf.avail/$(basename
> ${conffile}) ]]; then
> - elog " $(basename ${conffile})"
> + if [[ -e
> "${EROOT%/}"/etc/fonts/conf.avail/${conffile##*/} ]]; then
> + elog " ${conffile##*/}"
> fi
> done
> elog
> elog "Use \`eselect fontconfig\` to enable/disable them."
> - echo
> fi
>
> - if has_version media-libs/fontconfig && [[ ${ROOT} == / ]]; then
> - ebegin "Updating global fontcache"
> - fc-cache -fs
> - eend $?
> - else
> - einfo "Skipping fontcache update (media-libs/fontconfig is not
> installed or ROOT != /)"
> - fi
> + _update_fontcache
> }
>
> # @FUNCTION: font_pkg_postrm
> # @DESCRIPTION:
> # The font pkg_postrm function.
> font_pkg_postrm() {
> font_cleanup_dirs
> -
> - # unreadable font files = fontconfig segfaults
> - find "${EROOT}"usr/share/fonts/ -type f '!' -perm 0644 -print0 \
> - | xargs -0 chmod -v 0644 2>/dev/null
> -
> - if has_version media-libs/fontconfig && [[ ${ROOT} == / ]]; then
> - ebegin "Updating global fontcache"
> - fc-cache -fs
> - eend $?
> - else
> - einfo "Skipping fontcache update (media-libs/fontconfig is not
> installed or ROOT != /)"
> - fi
> + _update_fontcache
> }
>
>
>
>
--
Best regards,
Michał Górny
signature.asc
Description: This is a digitally signed message part
