On Sun, 2019-03-24 at 18:17 +0100, Andreas Sturmlechner wrote: > --- > eclass/font.eclass | 57 +++++++++++++++++++++++----------------------- > 1 file changed, 28 insertions(+), 29 deletions(-) -U9999, please. This is a huge eclass and probably requires more work than you're showing us ;-). > > diff --git a/eclass/font.eclass b/eclass/font.eclass > index 58ec9e3..622f143 100644 > --- a/eclass/font.eclass > +++ b/eclass/font.eclass > @@ -1,4 +1,4 @@ > -# Copyright 1999-2015 Gentoo Foundation > +# Copyright 1999-2019 Gentoo Foundation > # Distributed under the terms of the GNU General Public License v2 > > # @ECLASS: font.eclass > @@ -7,12 +7,11 @@ > # @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 > @@ -68,12 +67,12 @@ font_xfont_config() { > if has X ${IUSE//+} && use X ; then > dir_name="${1:-${FONT_PN}}" > 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}/}" > + rm -f "${ED%/}/${FONTDIR}/${1//${S}/}"/{fonts.{dir,scale},encodings.dir} > + mkfontscale "${ED%/}/${FONTDIR}/${1//${S}/}" > mkfontdir \ > -e ${EPREFIX}/usr/share/fonts/encodings \ > -e ${EPREFIX}/usr/share/fonts/encodings/large \ > - "${ED}${FONTDIR}/${1//${S}/}" > + "${ED%/}/${FONTDIR}/${1//${S}/}" > eend $? > if [[ -e fonts.alias ]] ; then > doins fonts.alias Would it make sense to add some error handling? It seems silly to try to do a few things, then report one $? for the last of them, independently of whether previous actions succeeded or failed. > @@ -103,7 +102,7 @@ font_cleanup_dirs() { > 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 > + find -L "${EROOT%/}"/usr/share/fonts/ -type d -print0 | while read -d $'\0' d; do Move while to primary shell, and use < <(find ...). > candidate=false > otherfile=false > for f in "${d}"/*; do > @@ -160,7 +159,7 @@ font_pkg_setup() { > > # 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" > + [[ -e "${EROOT%/}/${FONTDIR}/fonts.cache-1" ]] && rm -f "${EROOT%/}/${FONTDIR}/fonts.cache-1" What's the point of checking the existence, if you pass '-f' to rm anyway? > } > > # @FUNCTION: font_src_install > @@ -202,36 +201,42 @@ font_src_install() { > done > } > > +# @FUNCTION: _update_fontcache > +# @DESCRIPTION: > +# Updates fontcache if !prefix and media-libs/fontconfig installed > +_update_fontcache() { > + # TODO: cleanup after + if has_version media-libs/fontconfig && { [[ -z ${ROOT} ]] || [[ ${ROOT} == / ]] ; } then [[ -z ${ROOT} || ${ROOT} == / ]] is valid in bash. [[ -z ${ROOT%/} ]] is shorter. > + ebegin "Updating global fontcache" > + fc-cache -fs > + eend $? > + else > + einfo "Skipping fontcache update (media-libs/fontconfig is not installed or 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 \ > + find "${EROOT%/}"/usr/share/fonts/ -type f '!' -perm 0644 -print0 \ > | xargs -0 chmod -v 0644 2>/dev/null find ... -exec chmod ... {} + > > 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 > + if [[ -e ${EROOT%/}/etc/fonts/conf.avail/$(basename ${conffile}) ]]; then Don't call basename if you can do the same via ${conffile##*/}. > elog " $(basename ${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 > @@ -241,14 +246,8 @@ font_pkg_postrm() { > font_cleanup_dirs > > # unreadable font files = fontconfig segfaults > - find "${EROOT}"usr/share/fonts/ -type f '!' -perm 0644 -print0 \ > + find "${EROOT%/}"/usr/share/fonts/ -type f '!' -perm 0644 -print0 \ > | xargs -0 chmod -v 0644 2>/dev/null Likewise. Also, wouldn't it make sense to put it inside _update_fontcache()? It seems identical here and in postinst. > > - 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