public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Andreas Sturmlechner <asturm@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Subject: Re: [gentoo-dev] [PATCH] font.eclass: Port to EAPI-7
Date: Tue, 09 Apr 2019 21:41:41 +0200	[thread overview]
Message-ID: <4600891.LxcutymfD9@tuxbrain> (raw)
In-Reply-To: <5ccc85650ff65a817046f5d81dd3ba20b3968158.camel@gentoo.org>

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:
 # fonts@gentoo.org
 # @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
 		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"
 		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
 		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 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
 
 	# 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}
 			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}
 		done
 		font_xfont_config
 		popd > /dev/null
 	fi
 
 	font_fontconfig
 
-	[[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; }
+	[[ -n ${DOCS} ]] && dodoc ${DOCS}
 
 	# 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
 }





  reply	other threads:[~2019-04-09 19:42 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-24 17:17 [gentoo-dev] [PATCH] font.eclass: Port to EAPI-7 Andreas Sturmlechner
2019-03-24 18:41 ` Michał Górny
2019-04-09 19:41   ` Andreas Sturmlechner [this message]
2019-04-10 13:21     ` Michał Górny
2019-10-15 21:58       ` [gentoo-dev] [PATCH v2] " Andreas Sturmlechner
2019-10-15 22:05       ` Andreas Sturmlechner
2019-10-16  6:52         ` Michał Górny
2019-10-16 12:01       ` [gentoo-dev] [PATCH 1/2] kde.org.eclass: New eclass, split from kde5.eclass Andreas Sturmlechner
2019-10-16 12:01       ` [gentoo-dev] [PATCH 2/2] kde5.eclass: Inherit kde.org.eclass and drop moved functions/vars Andreas Sturmlechner
2019-11-04 23:30       ` [gentoo-dev] [PATCH 1/3] ecm-utils.eclass: New eclass Andreas Sturmlechner
2019-11-04 23:37         ` [gentoo-dev] [PATCH 2/3] kde5.eclass: Inherit ecm-utils.eclass and drop moved functions/vars Andreas Sturmlechner
2019-11-04 23:42           ` [gentoo-dev] [PATCH 3/3] kde5-functions.eclass: Drop functions/vars moved to ecm-utils Andreas Sturmlechner
2019-11-05 21:20         ` [gentoo-dev] [PATCH 1/3] ecm-utils.eclass: New eclass Michał Górny
2019-11-06  1:19           ` Andreas Sturmlechner
2019-11-06  7:15             ` Michał Górny
2019-11-10 13:27               ` [gentoo-dev] [PATCH v2 1/3] ecm.eclass: " Andreas Sturmlechner
2019-11-10 16:26                 ` Gokturk Yuksek
2019-07-08 20:14   ` [gentoo-dev] [PATCH] profiles: desktop: Add USE icu to make.defaults Andreas Sturmlechner
2019-07-08 20:14   ` Andreas Sturmlechner
2019-07-08 20:14   ` Andreas Sturmlechner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4600891.LxcutymfD9@tuxbrain \
    --to=asturm@gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox