From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 0E83A138334 for ; Wed, 10 Apr 2019 13:21:48 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9CD92E0999; Wed, 10 Apr 2019 13:21:43 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 3A89AE0933 for ; Wed, 10 Apr 2019 13:21:43 +0000 (UTC) Received: from pomiot (d202-252.icpnet.pl [109.173.202.252]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: mgorny) by smtp.gentoo.org (Postfix) with ESMTPSA id A4FB3340B29; Wed, 10 Apr 2019 13:21:39 +0000 (UTC) Message-ID: Subject: Re: [gentoo-dev] [PATCH] font.eclass: Port to EAPI-7 From: =?UTF-8?Q?Micha=C5=82_G=C3=B3rny?= To: gentoo-dev@lists.gentoo.org Date: Wed, 10 Apr 2019 15:21:35 +0200 In-Reply-To: <4600891.LxcutymfD9@tuxbrain> References: <9898161.uzqcMZjEFU@tuxk10> <5ccc85650ff65a817046f5d81dd3ba20b3968158.camel@gentoo.org> <4600891.LxcutymfD9@tuxbrain> Organization: Gentoo Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-D9w94gCpyKgIjMpjEACA" User-Agent: Evolution 3.30.5 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 X-Archives-Salt: 52f23024-bd0d-4506-8e52-18073b8b8660 X-Archives-Hash: 1434a1e0549ff53b7863e4bfc990162b --=-D9w94gCpyKgIjMpjEACA Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 2019-04-09 at 21:41 +0200, Andreas Sturmlechner wrote: > On Sonntag, 24. M=C3=A4rz 2019 19:41:24 CEST Micha=C5=82 G=C3=B3rny wrote= : > > -U9999, please. This is a huge eclass and probably requires more work > > than you're showing us ;-). >=20 > As requested, without any changes to v2 - and if this does not receive > a reply I'll assume silent ack by fonts proj. >=20 >=20 > --- 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 > =20 > # @ECLASS: font.eclass > # @MAINTAINER: > # fonts@gentoo.org > # @BLURB: Eclass to make font installation uniform > =20 > 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 > =20 > -inherit eutils > - > EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst pkg_postrm > =20 > # @ECLASS-VARIABLE: FONT_SUFFIX > # @DEFAULT_UNSET > # @REQUIRED > # @DESCRIPTION: > # Space delimited list of font suffixes to install. > FONT_SUFFIX=3D${FONT_SUFFIX:-} > =20 > # @ECLASS-VARIABLE: FONT_S > # @REQUIRED > # @DESCRIPTION: > # Space delimited list of directories containing the fonts. > FONT_S=3D${FONT_S:-${S}} > =20 > # @ECLASS-VARIABLE: FONT_PN > # @DESCRIPTION: > # Font name (ie. last part of FONTDIR). > FONT_PN=3D${FONT_PN:-${PN}} > =20 > # @ECLASS-VARIABLE: FONTDIR > # @DESCRIPTION: > # Full path to installation directory. > FONTDIR=3D${FONTDIR:-/usr/share/fonts/${FONT_PN}} > =20 > # @ECLASS-VARIABLE: FONT_CONF > # @DEFAULT_UNSET > # @DESCRIPTION: > # Array containing fontconfig conf files to install. > FONT_CONF=3D( "" ) > =20 > # @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=3D${DOCS:-} > =20 > IUSE=3D"X" > =20 > DEPEND=3D"X? ( > || ( >=3Dx11-apps/mkfontscale-1.2.0 x11-apps/mkfontdir ) > media-fonts/encodings > )" > RDEPEND=3D"" > =20 > # @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=3D"${1:-${FONT_PN}}" > + rm -f "${ED%/}/${FONTDIR}/${1//${S}/}"/{fonts.{dir,scale},encodings.di= r} \ > + || 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 crea= te 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.di= r" > + 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 > } > =20 > # @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 > } > =20 > # @FUNCTION: font_cleanup_dirs > # @DESCRIPTION: > # Remove font directories containing only generated files. > font_cleanup_dirs() { > local genfiles=3D"encodings.dir fonts.alias fonts.cache-1 fonts.dir fon= ts.scale" > # fonts.alias isn't generated but it's a special case (see below). > local d f g generated candidate otherfile > =20 > 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=3Dfalse > otherfile=3Dfalse > for f in "${d}"/*; do > generated=3Dfalse > # 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##*/} =3D=3D ${g} ]]; then > # this is a generated file > generated=3Dtrue > 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=3Dtrue || otherfile=3Dtrue > # if the directory is both a candidate for removal and contains at > # least one "otherfile" then don't remove it. > [[ ${candidate} =3D=3D ${otherfile} ]] && break > done > # if in the end we only have generated files, purge the directory. > if [[ ${candidate} =3D=3D true && ${otherfile} =3D=3D 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} !=3D fonts.alias && ( -e ${d}/${g} || -L ${d}/${g} ) ]] \ > - && rm "${d}"/${g} > + if [[ ${g} !=3D 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 p= urge ${d}" > fi > - done > + done < <(find -L "${EROOT%/}"/usr/share/fonts/ -type d -print0) > eend 0 > } > =20 > # @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=3D > ED=3D${D} > EROOT=3D${ROOT} > [[ ${EROOT} =3D */ ]] || EROOT+=3D"/" > fi > ;; > esac This is really ugly but I guess you can ignore it. > =20 > # 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}/${FONTD= IR}/fonts.cache-1" > + if [[ -e "${EROOT%/}/${FONTDIR}/fonts.cache-1" ]] ; then > + rm "${EROOT%/}/${FONTDIR}/fonts.cache-1" || die "failed to remove font= s.cache-1" > + fi > } > =20 > # @FUNCTION: font_src_install > # @DESCRIPTION: > # The font src_install function. > font_src_install() { > local dir suffix commondoc > =20 > 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 > =20 > font_fontconfig > =20 > - [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ;= } > + [[ -n ${DOCS} ]] && dodoc ${DOCS} I suppose this kills proper support for old EAPIs. > =20 > # install common docs > for commondoc in COPYRIGHT README{,.txt} NEWS AUTHORS BUGS ChangeLog FO= NTLOG.txt; do > [[ -s ${commondoc} ]] && dodoc ${commondoc} > done > } > =20 > +# @FUNCTION: _update_fontcache > +# @DESCRIPTION: > +# Updates fontcache if !prefix and media-libs/fontconfig installed > +_update_fontcache() { > + # unreadable font files =3D 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 !=3D /)" > + fi > +} > + > # @FUNCTION: font_pkg_postinst > # @DESCRIPTION: > # The font pkg_postinst function. > font_pkg_postinst() { > - # unreadable font files =3D 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}) ]]; the= n > - 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 > =20 > - if has_version media-libs/fontconfig && [[ ${ROOT} =3D=3D / ]]; then > - ebegin "Updating global fontcache" > - fc-cache -fs > - eend $? > - else > - einfo "Skipping fontcache update (media-libs/fontconfig is not install= ed or ROOT !=3D /)" > - fi > + _update_fontcache > } > =20 > # @FUNCTION: font_pkg_postrm > # @DESCRIPTION: > # The font pkg_postrm function. > font_pkg_postrm() { > font_cleanup_dirs > - > - # unreadable font files =3D 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} =3D=3D / ]]; then > - ebegin "Updating global fontcache" > - fc-cache -fs > - eend $? > - else > - einfo "Skipping fontcache update (media-libs/fontconfig is not install= ed or ROOT !=3D /)" > - fi > + _update_fontcache > } >=20 >=20 >=20 >=20 --=20 Best regards, Micha=C5=82 G=C3=B3rny --=-D9w94gCpyKgIjMpjEACA Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iQKTBAABCgB9FiEEXr8g+Zb7PCLMb8pAur8dX/jIEQoFAlyt7eBfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDVF QkYyMEY5OTZGQjNDMjJDQzZGQ0E0MEJBQkYxRDVGRjhDODExMEEACgkQur8dX/jI EQqQUhAAkIDEkeflo0yWHQ+BChRpqqI/RqpZ45Z22QqVDbvkDMvpusPHnzZY0jlB uwswzgZgUQIkk12Hrvx8OxKSHD0uE4k0eYEed1hIWn0F1mET4KpFZvmbP2fu8gKI 3jbaZFi4WQwRCzplA5Jnep89q8JSB6bAe79K3rRkXP5zumiAKTApW7Jq2ex/B+ed V9LmzUqJDR9j2ePCdmX6tKo676kqQhE/f0dMrHCaU1IesKH6Xej2udWHLeUgdpVr yGk5wXDYWKJ0qHven117s02eG2Gl8LnqjiIcgD3/3S9my0y2oIqGLY0bOeI/KjqB Av6x9aHOKXjC7RiXiro+aL64m4B6Wvi/edg8yIcHxkAVZZuXi05kk0F4Fa0xkY0w TCX0Jfh5vFSDD+C1JfwOmn0WXvHBlzlNCy31UgUbLFFEtLchWOQV9JmV38N+CGjj PTPNA3B6L4Hg9qKMhsst3fPp67aXpvB9tXoRag03NRlGuNwI2g4W5HR3yE/T6r+Z 1H5VyYRToSwzgy03ByeNzSSFEQ9O1+C49kV9oD61uZxxslgC7TVyEoIx0dkV2KY3 2lx21rZQ2939UQGK/0DEGjzOxtq8sGsCIrKYVqxOUwXKno6Tz6iHXl1qQ7CEiPMl 0gVDcvBDsWFk+ceUV+/N1wHX3WbGqpeAnRcZZh0nFlspvzexHKA= =1wCF -----END PGP SIGNATURE----- --=-D9w94gCpyKgIjMpjEACA--