(ignore previous mail, this time hopefully not scrambled)

--- a/eclass/font.eclass
+++ b/eclass/font.eclass
@@ -4,16 +4,15 @@
 # @ECLASS: font.eclass
 # @MAINTAINER:
 # [email protected]
-# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6
+# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6 7
 # @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
@@ -67,18 +66,18 @@ fi
 # Generate Xorg font files (mkfontscale/mkfontdir).
 font_xfont_config() {
        local dir_name
-       if has X ${IUSE//+} && use X ; then
+       if in_iuse X && 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} \
+                       || die "failed to prepare ${FONTDIR}/${1//${S}/}"
+               einfo "Creating fonts.scale & fonts.dir in ${dir_name##*/}"
+               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 [[ -e fonts.alias ]]; then
+                       doins fonts.alias || die "failed to install 
fonts.alias" # TODO old EAPI cleanup
                fi
        fi
 }
@@ -91,7 +90,9 @@ font_fontconfig() {
        if [[ -n ${FONT_CONF[@]} ]]; then
                insinto /etc/fonts/conf.avail/
                for conffile in "${FONT_CONF[@]}"; do
-                       [[ -e  ${conffile} ]] && doins ${conffile}
+                       if [[ -e  ${conffile} ]]; then
+                               doins ${conffile} || die "failed to install 
conf file" # TODO old EAPI cleanup
+                       fi
                done
        fi
 }
@@ -105,20 +106,18 @@ 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
+       while read -d $'\0' -r; do
                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
-                               if [[ ${f##*/} == ${g} ]]; then
-                                       # this is a generated file
-                                       generated=true
-                                       break
-                               fi
-                       done
+                       if has ${f##*/} ${genfiles}; then
+                               # this is a generated file
+                               generated=true
+                               break
+                       fi
                        # 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".
@@ -133,13 +132,14 @@ font_cleanup_dirs() {
                        # 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
 }
 
@@ -162,7 +162,9 @@ 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"
+       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
@@ -179,7 +181,7 @@ font_src_install() {
                        pushd "${dir}" > /dev/null
                        insinto "${FONTDIR}/${dir//${S}/}"
                        for suffix in ${FONT_SUFFIX}; do
-                               doins *.${suffix}
+                               doins *.${suffix} || die "font installation 
failed" # TODO old EAPI cleanup
                        done
                        font_xfont_config "${dir}"
                        popd > /dev/null
@@ -188,7 +190,7 @@ font_src_install() {
                pushd "${FONT_S}" > /dev/null
                insinto "${FONTDIR}"
                for suffix in ${FONT_SUFFIX}; do
-                       doins *.${suffix}
+                       doins *.${suffix} || die "font installation failed" # 
TODO old EAPI cleanup
                done
                font_xfont_config
                popd > /dev/null
@@ -196,7 +198,7 @@ font_src_install() {
 
        font_fontconfig
 
-       [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; 
}
+       [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; 
} # TODO old EAPI cleanup
 
        # install common docs
        for commondoc in COPYRIGHT README{,.md,.txt} NEWS AUTHORS BUGS 
ChangeLog FONTLOG.txt; do
@@ -204,36 +206,47 @@ font_src_install() {
        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
@@ -241,16 +254,5 @@ font_pkg_postinst() {
 # 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
 }




Reply via email to