Font eclass EAPI update and design
Hi guys,
As I was reworking the x-modular-r2 eclass I found out that most of the slowdowns for fonts were produced in fonts eclass. Since we were the guys who are supposed to update it, I redesign it to be bit faster and also to support all known eapis. I would like to ask you to review the changes and spot anything that might slipped my sight. (Diff and full eclass attached) Expected addition to main tree: if nothing huge is found after fosdem, otherwise in 3 weeks Cheers Tomas # Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ # @ECLASS: font.eclass # @MAINTAINER: # fonts@gentoo.org # Author: Tomáš Chvátal <scarabeus@gentoo.org> # Author: foser <foser@gentoo.org> # @BLURB: Eclass to make font installation uniform inherit eutils EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst pkg_postrm # @ECLASS-VARIABLE: FONT_SUFFIX # @DESCRIPTION: # Space delimited list of font suffixes to install : ${FONT_SUFFIX:=} # @ECLASS-VARIABLE: FONT_S # @DESCRIPTION: # Dir containing the fonts : ${FONT_S:=${S}} # @ECLASS-VARIABLE: FONT_PN # @DESCRIPTION: # Last part of $FONTDIR : ${FONT_PN:=${PN}} # @ECLASS-VARIABLE: FONTDIR # @DESCRIPTION: # This is where the fonts are installed : ${FONTDIR:-/usr/share/fonts/${FONT_PN}} # @ECLASS-VARIABLE: FONT_CONF # @DESCRIPTION: # Array, which element(s) is(are) path(s) of fontconfig-2.4 file(s) to install FONT_CONF=( "" ) # @ECLASS-VARIABLE: DOCS # @DESCRIPTION: # Docs to install : ${DOCS:-} IUSE="X" DEPEND="X? ( x11-apps/mkfontdir media-fonts/encodings ) media-libs/fontconfig" # @FUNCTION: font_xfont_config # @DESCRIPTION: # Creates the Xfont files. font_xfont_config() { # create Xfont files if has X ${IUSE//+} && use X ; then ebegin "Creating fonts.scale & fonts.dir" rm -f "${ED}${FONTDIR}"/fonts.{dir,scale} mkfontscale "${ED}${FONTDIR}" mkfontdir -e ${EPREFIX}/usr/share/fonts/encodings -e ${EPREFIX}/usr/share/fonts/encodings/large "${ED}${FONTDIR}" eend $? if [ -e "${FONT_S}/fonts.alias" ] ; then doins "${FONT_S}/fonts.alias" fi fi } # @FUNCTION: font_xft_config # @DESCRIPTION: # Creates the fontconfig cache if necessary. font_xft_config() { # create fontconfig cache ebegin "Creating fontconfig cache" fc-cache -sf "${ED}${FONTDIR}" eend $? } # @FUNCTION: font_fontconfig # @DESCRIPTION: # Installs the fontconfig config files of 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_src_install # @DESCRIPTION: # The font src_install function. font_src_install() { local suffix commondoc pushd "${FONT_S}" > /dev/null insinto "${FONTDIR}" for suffix in ${FONT_SUFFIX}; do doins *.${suffix} done rm -f fonts.{dir,scale} encodings.dir font_xfont_config font_xft_config font_fontconfig popd > /dev/null [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; } # install common docs for commondoc in COPYRIGHT README{,.txt} NEWS AUTHORS BUGS ChangeLog FONTLOG.txt; do [[ -s ${commondoc} ]] && dodoc ${commondoc} done } # @FUNCTION: font_pkg_setup # @DESCRIPTION: # The font pkg_setup function. # Collision portection and Prefix compat for eapi < 3. font_pkg_setup() { # make sure we get no collisions # setup is not the nicest place, but preinst doesn't cut it [[ -e "${FONTDIR}/fonts.cache-1" ]] && rm -f "${FONTDIR}/fonts.cache-1" # Prefix compat case ${EAPI:-0} in 0|1|2) if ! use prefix; then EPREFIX= ED=${D} EROOT=${ROOT} [[ ${EROOT} = */ ]] || EROOT+="/" fi ;; esac } # @FUNCTION: font_pkg_postinst # @DESCRIPTION: # The font pkg_postinst function. # Update global font cache and fix permissions. 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})" fi done elog elog "Use `eselect fontconfig` to enable/disable them." echo fi if [[ ${ROOT} == / ]]; then ebegin "Updating global fontcache" fc-cache -fs eend $? fi } # @FUNCTION: font_pkg_postrm # @DESCRIPTION: # The font pkg_postrm function. # Updates global font cache font_pkg_postrm() { # unreadable font files = fontconfig segfaults find "${EROOT}"usr/share/fonts/ -type f '!' -perm 0644 -print0 | xargs -0 chmod -v 0644 2>/dev/null if [[ ${ROOT} == / ]]; then ebegin "Updating global fontcache" fc-cache -fs eend $? fi } --- gentoo/gentoo-x86/eclass/font.eclass 2009-10-11 21:26:11.000000000 +0200 +++ /usr/local/portage/x11/eclass/font.eclass 2010-01-31 18:38:19.000000000 +0100 @@ -1,42 +1,38 @@ -# Copyright 1999-2007 Gentoo Foundation +# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/font.eclass,v 1.47 2009/10/11 11:44:42 maekke Exp $ +# $Header: $ # @ECLASS: font.eclass # @MAINTAINER: # fonts@gentoo.org -# + +# Author: Tomáš Chvátal <scarabeus@gentoo.org> # Author: foser <foser@gentoo.org> # @BLURB: Eclass to make font installation uniform inherit eutils - EXPORT_FUNCTIONS pkg_setup src_install pkg_postinst pkg_postrm -# -# Variable declarations -# - # @ECLASS-VARIABLE: FONT_SUFFIX # @DESCRIPTION: # Space delimited list of font suffixes to install -FONT_SUFFIX=${FONT_SUFFIX:-} +: ${FONT_SUFFIX:=} # @ECLASS-VARIABLE: FONT_S # @DESCRIPTION: # Dir containing the fonts -FONT_S=${S} +: ${FONT_S:=${S}} # @ECLASS-VARIABLE: FONT_PN # @DESCRIPTION: # Last part of $FONTDIR -FONT_PN=${FONT_PN:-${PN}} +: ${FONT_PN:=${PN}} # @ECLASS-VARIABLE: FONTDIR # @DESCRIPTION: # This is where the fonts are installed -FONTDIR=${FONTDIR:-/usr/share/fonts/${FONT_PN}} +: ${FONTDIR:-/usr/share/fonts/${FONT_PN}} # @ECLASS-VARIABLE: FONT_CONF # @DESCRIPTION: @@ -46,31 +42,30 @@ # @ECLASS-VARIABLE: DOCS # @DESCRIPTION: # Docs to install -DOCS=${DOCS:-} +: ${DOCS:-} IUSE="X" -DEPEND="X? ( x11-apps/mkfontdir - media-fonts/encodings ) - media-libs/fontconfig" - -# -# Public functions -# +DEPEND="X? ( + x11-apps/mkfontdir + media-fonts/encodings + ) + media-libs/fontconfig" # @FUNCTION: font_xfont_config # @DESCRIPTION: # Creates the Xfont files. font_xfont_config() { # create Xfont files - if use X ; then - einfo "Creating fonts.scale & fonts.dir ..." - rm -f "${D}${FONTDIR}"/fonts.{dir,scale} - mkfontscale "${D}${FONTDIR}" + if has X ${IUSE//+} && use X ; then + ebegin "Creating fonts.scale & fonts.dir" + rm -f "${ED}${FONTDIR}"/fonts.{dir,scale} + mkfontscale "${ED}${FONTDIR}" mkfontdir - -e /usr/share/fonts/encodings - -e /usr/share/fonts/encodings/large - "${D}${FONTDIR}" + -e ${EPREFIX}/usr/share/fonts/encodings + -e ${EPREFIX}/usr/share/fonts/encodings/large + "${ED}${FONTDIR}" + eend $? if [ -e "${FONT_S}/fonts.alias" ] ; then doins "${FONT_S}/fonts.alias" fi @@ -81,11 +76,10 @@ # @DESCRIPTION: # Creates the fontconfig cache if necessary. font_xft_config() { - if ! has_version '>=media-libs/fontconfig-2.4'; then - # create fontconfig cache - einfo "Creating fontconfig cache ..." - fc-cache -sf "${D}${FONTDIR}" - fi + # create fontconfig cache + ebegin "Creating fontconfig cache" + fc-cache -sf "${ED}${FONTDIR}" + eend $? } # @FUNCTION: font_fontconfig @@ -94,26 +88,20 @@ font_fontconfig() { local conffile if [[ -n ${FONT_CONF[@]} ]]; then - if has_version '>=media-libs/fontconfig-2.4'; then - insinto /etc/fonts/conf.avail/ - for conffile in "${FONT_CONF[@]}"; do - [[ -e ${conffile} ]] && doins ${conffile} - done - fi + insinto /etc/fonts/conf.avail/ + for conffile in "${FONT_CONF[@]}"; do + [[ -e ${conffile} ]] && doins ${conffile} + done fi } -# -# Public inheritable functions -# - # @FUNCTION: font_src_install # @DESCRIPTION: -# The font src_install function, which is exported. +# The font src_install function. font_src_install() { local suffix commondoc - cd "${FONT_S}" + pushd "${FONT_S}" > /dev/null insinto "${FONTDIR}" @@ -127,8 +115,9 @@ font_xft_config font_fontconfig - cd "${S}" - dodoc ${DOCS} 2> /dev/null + popd > /dev/null + + [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; } # install common docs for commondoc in COPYRIGHT README{,.txt} NEWS AUTHORS BUGS ChangeLog FONTLOG.txt; do @@ -138,60 +127,69 @@ # @FUNCTION: font_pkg_setup # @DESCRIPTION: -# The font pkg_setup function, which is exported. +# The font pkg_setup function. +# Collision portection and Prefix compat for eapi < 3. font_pkg_setup() { # make sure we get no collisions # setup is not the nicest place, but preinst doesn't cut it [[ -e "${FONTDIR}/fonts.cache-1" ]] && rm -f "${FONTDIR}/fonts.cache-1" + + # Prefix compat + case ${EAPI:-0} in + 0|1|2) + if ! use prefix; then + EPREFIX= + ED=${D} + EROOT=${ROOT} + [[ ${EROOT} = */ ]] || EROOT+="/" + fi + ;; + esac } # @FUNCTION: font_pkg_postinst # @DESCRIPTION: -# The font pkg_postinst function, which is exported. +# The font pkg_postinst function. +# Update global font cache and fix permissions. font_pkg_postinst() { # unreadable font files = fontconfig segfaults - find "${ROOT}"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 if [[ -n ${FONT_CONF[@]} ]]; then - if has_version '>=media-libs/fontconfig-2.4'; then - local conffile - echo - elog "The following fontconfig configuration files have been installed:" - elog - for conffile in "${FONT_CONF[@]}"; do - if [[ -e ${ROOT}etc/fonts/conf.avail/$(basename ${conffile}) ]]; then - elog " $(basename ${conffile})" - fi - done - elog - elog "Use `eselect fontconfig` to enable/disable them." - echo - fi - fi - - if has_version '>=media-libs/fontconfig-2.4'; then - if [[ ${ROOT} == "/" ]]; then - ebegin "Updating global fontcache" - fc-cache -fs - eend $? - fi + 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})" + fi + done + elog + elog "Use `eselect fontconfig` to enable/disable them." + echo + fi + + if [[ ${ROOT} == / ]]; then + ebegin "Updating global fontcache" + fc-cache -fs + eend $? fi } # @FUNCTION: font_pkg_postrm # @DESCRIPTION: -# The font pkg_postrm function, which is exported. +# The font pkg_postrm function. +# Updates global font cache font_pkg_postrm() { # unreadable font files = fontconfig segfaults - find "${ROOT}"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 - if has_version '>=media-libs/fontconfig-2.4'; then - if [[ ${ROOT} == "/" ]]; then - ebegin "Updating global fontcache" - fc-cache -fs - eend $? - fi + if [[ ${ROOT} == / ]]; then + ebegin "Updating global fontcache" + fc-cache -fs + eend $? fi } |
Font eclass EAPI update and design
В Пнд, 01/02/2010 в 11:35 +0100, Tomáš Chvátal пишет:
> As I was reworking the x-modular-r2 eclass I found out that most of the > slowdowns for fonts were produced in fonts eclass. Exactly what slowdowns are you talking about? I've reviewed all changes and I don't see any noticeable performance improvements anywhere. Or what do you mean? > I would like to ask you to review the changes and spot anything that > might slipped my sight. 1. -FONT_SUFFIX=${FONT_SUFFIX:-} +: ${FONT_SUFFIX:=} What are the benefits of this change? Personally I prefer first syntax more since it's more evident and does not need to run empty command : 2. if has X ${IUSE//+} && use X ; then I'm not sure. With this change should we update all packages depending on font.eclass to have X in IUSE? 3. If you dropped if has_version '>=media-libs/fontconfig-2.4'; then then >=media-libs/fontconfig-2.4 should be in DEPEND. 4. + [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation failed" ; } This should be non fatal, until somebody installs all packages that inherit font.eclass and assures us that nothing broke with this change. -- Peter. h |
Font eclass EAPI update and design
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 Dne 1.2.2010 14:14, Peter Volkov napsal(a): > В Пнд, 01/02/2010 в 11:35 +0100, Tomáš Chvátal пишет: >> As I was reworking the x-modular-r2 eclass I found out that most of the >> slowdowns for fonts were produced in fonts eclass. > > Exactly what slowdowns are you talking about? I've reviewed all changes > and I don't see any noticeable performance improvements anywhere. Or > what do you mean? Well it might be visible if you use some font from overlay and from main tree (overlay use also the x-modular-r2) not sure which changes helped it more :P > >> I would like to ask you to review the changes and spot anything that >> might slipped my sight. > > 1. > -FONT_SUFFIX=${FONT_SUFFIX:-} > +: ${FONT_SUFFIX:=} > > What are the benefits of this change? Personally I prefer first syntax > more since it's more evident and does not need to run empty command : I am just used to this syntax. I dont think it is so huge issue that it would need revert. > > 2. > if has X ${IUSE//+} && use X ; then > > I'm not sure. With this change should we update all packages depending > on font.eclass to have X in IUSE? Nak this specialy allows that you dont have to keep X in iuse. But it does not matter anyway because it is and was always defined by eclass. But with this syntax it allows us to remove that IUSE="X" from eclass global scope at some point. > > 3. > If you dropped > > if has_version '>=media-libs/fontconfig-2.4'; then > > then >=media-libs/fontconfig-2.4 should be in DEPEND. Probably yes, but think when was the 2.3 removed from portage :] (Jul 2007). Dep added. > > 4. > + [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation > failed" ; } > > This should be non fatal, until somebody installs all packages that > inherit font.eclass and assures us that nothing broke with this change. > Actualy former behaviour was violating QA rules for dodoc, so it should be fixed anyway. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAktm1y8ACgkQHB6c3gNBRYe7GACfclA2J/2eMSw/wZJnfT9E2/4G uB0AnRhnJ9RoiaoMwTkPASFMSlEx4XkY =f/72 -----END PGP SIGNATURE----- |
Font eclass EAPI update and design
В Пнд, 01/02/2010 в 14:29 +0100, Tomáš Chvátal пишет:
> > 2. > > if has X ${IUSE//+} && use X ; then > > > > I'm not sure. With this change should we update all packages depending > > on font.eclass to have X in IUSE? > Nak this specialy allows that you dont have to keep X in iuse. > But it does not matter anyway because it is and was always defined by > eclass. But with this syntax it allows us to remove that IUSE="X" from > eclass global scope at some point. Do we have such goal? Where this is useful? > > 4. > > + [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation > > failed" ; } > > > > This should be non fatal, until somebody installs all packages that > > inherit font.eclass and assures us that nothing broke with this change. > Actualy former behaviour was violating QA rules for dodoc, so it should > be fixed anyway. And yet we have more strong policy that states "not to break the tree". Since previous version of eclass issued no warning about missed documentation, it's highly probable that lot's of font packages will fail to emerge after this change (we already had one report, while eclass is in x11 overlay only)... So this is no go, until somebody checks that no package (at least in stable tree) became broken by this change. -- Peter. |
Font eclass EAPI update and design
On Mon, 01 Feb 2010 14:29:19 +0100
Tomáš Chvátal <scarabeus@gentoo.org> wrote: > Dne 1.2.2010 14:14, Peter Volkov napsal(a): > > 1. > > -FONT_SUFFIX=${FONT_SUFFIX:-} > > +: ${FONT_SUFFIX:=} > > > > What are the benefits of this change? Personally I prefer first syntax > > more since it's more evident and does not need to run empty command : > I am just used to this syntax. I dont think it is so huge issue that it > would need revert. No thanks. The second form is unreadable. > > 4. > > + [[ -n ${DOCS} ]] && { dodoc ${DOCS} || die "docs installation > > failed" ; } > > > > This should be non fatal, until somebody installs all packages that > > inherit font.eclass and assures us that nothing broke with this change. > > > Actualy former behaviour was violating QA rules for dodoc, so it should > be fixed anyway. Well then the QA rules for dodoc are dumb. :P There is no reason for an ebuild to die when a generic doc file doesn't get installed. The prefix changes are welcome assuming they've been tested. -- fonts, by design, by neglect gcc-porting, for a fact or just for effect wxwidgets @ gentoo EFFD 380E 047A 4B51 D2BD C64F 8AA8 8346 F9A4 0662 |
Font eclass EAPI update and design
* Tomáš Chvátal <scarabeus@gentoo.org>:
> # @FUNCTION: font_pkg_setup > # @DESCRIPTION: > # The font pkg_setup function. > # Collision portection and Prefix compat for eapi < 3. > font_pkg_setup() { > # make sure we get no collisions > # setup is not the nicest place, but preinst doesn't cut it > [[ -e "${FONTDIR}/fonts.cache-1" ]] && rm -f "${FONTDIR}/fonts.cache-1" (E)ROOT is missing. > # Prefix compat > case ${EAPI:-0} in > 0|1|2) > if ! use prefix; then > EPREFIX= > ED=${D} > EROOT=${ROOT} > [[ ${EROOT} = */ ]] || EROOT+="/" > fi > ;; > esac Don't we need this for every eclass using EPREFIX, ED and EROOT independent of EAPI? Can't we move this to prefix.eclass and inherit it? Or is the EPREFIX setting in prefix.eclass already enough? |
Font eclass EAPI update and design
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 Dne 2.2.2010 11:18, Torsten Veller napsal(a): > * Tomáš Chvátal <scarabeus@gentoo.org>: >> # @FUNCTION: font_pkg_setup >> # @DESCRIPTION: >> # The font pkg_setup function. >> # Collision portection and Prefix compat for eapi < 3. >> font_pkg_setup() { >> # make sure we get no collisions >> # setup is not the nicest place, but preinst doesn't cut it >> [[ -e "${FONTDIR}/fonts.cache-1" ]] && rm -f "${FONTDIR}/fonts.cache-1" > > (E)ROOT is missing. Good spot. EFixed :] > >> # Prefix compat >> case ${EAPI:-0} in >> 0|1|2) >> if ! use prefix; then >> EPREFIX= >> ED=${D} >> EROOT=${ROOT} >> [[ ${EROOT} = */ ]] || EROOT+="/" >> fi >> ;; >> esac > > Don't we need this for every eclass using EPREFIX, ED and EROOT > independent of EAPI? > Can't we move this to prefix.eclass and inherit it? Or is the EPREFIX > setting in prefix.eclass already enough? > Actualy dunno, i did it this way because it is the way how other eclass were altered in this matter. Maybe we could add it to base eclass and then via proper inheritance it might work. Or to prefix eclass which would be inherited elsewhere. We would have to ask prefix mages, adding them to CC :] Tomas -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAktn/qgACgkQHB6c3gNBRYfwGwCdGqFw9sMuxbd3QxafWjY4i+me y/0AoJAoBg11gyZTBxIp9QyqFrK4c9pa =W3Rf -----END PGP SIGNATURE----- |
Font eclass EAPI update and design
On 02-02-2010 11:18:32 +0100, Torsten Veller wrote:
> > # Prefix compat > > case ${EAPI:-0} in > > 0|1|2) > > if ! use prefix; then > > EPREFIX= > > ED=${D} > > EROOT=${ROOT} > > [[ ${EROOT} = */ ]] || EROOT+="/" > > fi > > ;; > > esac > > Don't we need this for every eclass using EPREFIX, ED and EROOT > independent of EAPI? > Can't we move this to prefix.eclass and inherit it? Or is the EPREFIX > setting in prefix.eclass already enough? You cannot set EROOT and ED (reliably) from prefix.eclass, unless you wrap them in phase funcs for which ROOT and D are guaranteed to be defined. OIW: The logic can be moved but a simple "inherit prefix" won't be enough to use EROOT and ED. -- Fabian Groffen Gentoo on a different level |
| All times are GMT. The time now is 11:11 PM. |
VBulletin, Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.