diff --git a/mk/fonts.mk b/mk/fonts.mk index b2ab1d02d954..39bfc1c98a37 100644 --- a/mk/fonts.mk +++ b/mk/fonts.mk @@ -1,61 +1,20 @@ -# $NetBSD: fonts.mk,v 1.8 2005/12/28 17:54:20 joerg Exp $ +# $NetBSD: fonts.mk,v 1.9 2005/12/29 03:44:38 jlam Exp $ # -# This Makefile fragment is intended to be included by packages that install -# fonts (most of them in the fonts category). It takes care of updating the -# fonts.dir files at install/deinstall time. -# -# The following variables need to be defined by packages using fonts.mk: -# -# FONTS__DIRS - Whitespaced list of directories where the font database -# is updated. If empty, nothing is done for this TYPE. -# -# Supported TYPEs: TTF, TYPE1, X11. +# XXX This file's use is deprecated. This is here temporarily to help +# XXX packages transition to using the new fonts capability of the +# XXX pkginstall framework. # .if !defined(FONTS_MK) FONTS_MK= # defined -# TrueType fonts -FONTS_TTF_DIRS?= -# Type1 fonts -FONTS_TYPE1_DIRS?= -# Generic X fonts (PCF, SNF, BDF) -FONTS_X11_DIRS?= - -.if !empty(FONTS_TTF_DIRS) || !empty(FONTS_TYPE1_DIRS) || !empty(FONTS_X11_DIRS) +# Support the old FONTS__DIRS variables for a while until we can +# nuke them. +# +FONTS_DIRS.ttf+= ${FONTS_TTF_DIRS} +FONTS_DIRS.type1+= ${FONTS_TYPE1_DIRS} +FONTS_DIRS.x11+= ${FONTS_X11_DIRS} USE_PKGINSTALL= YES -HEADER_EXTRA_TMPL+= ${.CURDIR}/../../mk/install/fonts - -.if !empty(FONTS_TTF_DIRS) -EVAL_PREFIX+= TTMKFDIR_PREFIX=ttmkfdir -TTMKFDIR_PREFIX_DEFAULT= ${LOCALBASE} -FILES_SUBST+= FONTS_TTF="YES" -FILES_SUBST+= FONTS_TTF_DIRS=${FONTS_TTF_DIRS:Q} -FILES_SUBST+= TTMKFDIR="${TTMKFDIR_PREFIX}/bin/ttmkfdir" -DEPENDS+= ttmkfdir2>=20021109:../../fonts/ttmkfdir2 -# also need to run mkfontdir there -FONTS_X11_DIRS+= ${FONTS_TTF_DIRS} -.endif - -.if !empty(FONTS_TYPE1_DIRS) -EVAL_PREFIX+= TYPE1INST_PREFIX=type1inst -TYPE1INST_PREFIX_DEFAULT= ${LOCALBASE} -FILES_SUBST+= FONTS_TYPE1="YES" -FILES_SUBST+= FONTS_TYPE1_DIRS=${FONTS_TYPE1_DIRS:Q} -FILES_SUBST+= TYPE1INST="${TYPE1INST_PREFIX}/bin/type1inst" -DEPENDS+= type1inst>=0.6.1:../../fonts/type1inst -# also need to run mkfontdir there -FONTS_X11_DIRS+= ${FONTS_TYPE1_DIRS} -.endif - -.if !empty(FONTS_X11_DIRS) -FILES_SUBST+= FONTS_X11="YES" -FILES_SUBST+= FONTS_X11_DIRS=${FONTS_X11_DIRS:Q} -FILES_SUBST+= MKFONTDIR="${X11BASE}/bin/mkfontdir" -USE_TOOLS+= mkfontdir -.endif - -.endif .endif # FONTS_MK diff --git a/mk/install/bsd.pkginstall.mk b/mk/install/bsd.pkginstall.mk index 0a43ebeded24..844a5968ae67 100644 --- a/mk/install/bsd.pkginstall.mk +++ b/mk/install/bsd.pkginstall.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.pkginstall.mk,v 1.30 2005/12/05 22:07:07 rillig Exp $ +# $NetBSD: bsd.pkginstall.mk,v 1.31 2005/12/29 03:44:38 jlam Exp $ # # This Makefile fragment is included by bsd.pkg.mk to use the common # INSTALL/DEINSTALL scripts. To use this Makefile fragment, simply: @@ -541,6 +541,87 @@ ${INSTALL_SHELL_FILE}: ../../mk/install/shell ${MV} -f ${.TARGET}.tmp ${.TARGET} .endif +# FONTS_DIRS. are lists of directories in which the font databases +# are updated. If this is non-empty, then the appropriate tools is +# used to update the fonts database for the font type. The supported +# types are: +# +# ttf TrueType fonts +# type1 Type1 fonts +# x11 Generic X fonts, e.g. PCF, SNF, BDF, etc. +# +FONTS_DIRS.ttf?= # empty +FONTS_DIRS.type1?= # empty +FONTS_DIRS.x11?= # empty + +INSTALL_FONTS_FILE= ${WRKDIR}/.install-fonts +INSTALL_FONTS_MEMBERS= ${FONTS_DIRS.ttf} ${FONTS_DIRS.type1} ${FONTS_DIRS.x11} +INSTALL_UNPACK_TMPL+= ${INSTALL_FONTS_FILE} + +# Directories with TTF and Type1 fonts also need to run mkfontdir, so +# list them as "x11" font directories as well. +# +.if !empty(FONTS_DIRS.ttf:M*) +USE_TOOLS+= ttmkfdir:run +FILES_SUBST+= TTMKFDIR=${TOOLS_PATH.ttmkfdir:Q} +FONTS_DIRS.x11+= ${FONTS_DIRS.ttf} +.endif +.if !empty(FONTS_DIRS.type1:M*) +USE_TOOLS+= type1inst:run +FILES_SUBST+= TYPE1INST=${TOOLS_PATH.type1inst:Q} +FONTS_DIRS.x11+= ${FONTS_DIRS.type1} +.endif +.if !empty(FONTS_DIRS.x11:M*) +USE_TOOLS+= mkfontdir:run +FILES_SUBST+= MKFONTDIR=${TOOLS_PATH.mkfontdir:Q} +.endif + +.if empty(INSTALL_FONTS_MEMBERS:M*) +${INSTALL_FONTS_FILE}: + ${_PKG_SILENT}${_PKG_DEBUG}${TOUCH} ${TOUCH_FLAGS} ${.TARGET} +.else +${INSTALL_FONTS_FILE}: ../../mk/install/fonts + ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${.TARGET} ${.TARGET}.tmp + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${_FUNC_STRIP_PREFIX}; \ + exec 1>>${.TARGET}.tmp; \ + ${ECHO} "# start of install-fonts"; \ + ${ECHO} "#"; \ + ${ECHO} "# Generate a +FONTS script that updates fonts databases."; \ + ${ECHO} "#"; \ + ${ECHO} "case \$${STAGE} in"; \ + ${ECHO} "PRE-INSTALL|UNPACK)"; \ + ${ECHO} " \$${CAT} > ./+FONTS << 'EOF_FONTS'"; \ + ${SED} ${FILES_SUBST_SED} ../../mk/install/fonts; \ + ${ECHO} ""; \ + set -- dummy ${FONTS_DIRS.ttf}; shift; \ + while ${TEST} $$# -gt 0; do \ + dir="$$1"; shift; \ + dir=`strip_prefix "$$dir"`; \ + ${ECHO} "# FONTS: $$dir ttf"; \ + done; \ + set -- dummy ${FONTS_DIRS.type1}; shift; \ + while ${TEST} $$# -gt 0; do \ + dir="$$1"; shift; \ + dir=`strip_prefix "$$dir"`; \ + ${ECHO} "# FONTS: $$dir type1"; \ + done; \ + set -- dummy ${FONTS_DIRS.x11}; shift; \ + while ${TEST} $$# -gt 0; do \ + dir="$$1"; shift; \ + dir=`strip_prefix "$$dir"`; \ + ${ECHO} "# FONTS: $$dir x11"; \ + done; \ + ${ECHO} "EOF_FONTS"; \ + ${ECHO} " \$${CHMOD} +x ./+FONTS"; \ + ${ECHO} " ;;"; \ + ${ECHO} "esac"; \ + ${ECHO} ""; \ + ${ECHO} "# end of install-fonts"; \ + exec 1>/dev/null; \ + ${MV} -f ${.TARGET}.tmp ${.TARGET} +.endif + # PKG_CREATE_USERGROUP indicates whether the INSTALL script should # automatically add any needed users/groups to the system using # useradd/groupadd. It is either YES or NO and defaults to YES. diff --git a/mk/install/deinstall b/mk/install/deinstall index fb451e9907f1..ec75988d222e 100644 --- a/mk/install/deinstall +++ b/mk/install/deinstall @@ -1,7 +1,7 @@ # -*- sh -*- # start of deinstall # -# $NetBSD: deinstall,v 1.36 2005/08/19 22:24:10 jlam Exp $ +# $NetBSD: deinstall,v 1.37 2005/12/29 03:44:38 jlam Exp $ case ${STAGE} in VIEW-DEINSTALL) @@ -48,6 +48,11 @@ POST-DEINSTALL) ${RMDIR} -p `${DIRNAME} ${PKG_SYSCONFDIR}` 2>/dev/null || ${TRUE} fi # + # Update any fonts databases. + # + ${TEST} ! -x ./+FONTS || + ./+FONTS ${PKG_METADATA_DIR} + # # Remove empty directories and unused users/groups. # ${TEST} ! -x ./+DIRS || diff --git a/mk/install/fonts b/mk/install/fonts index 1ec70710f902..5501c8a1c8e2 100644 --- a/mk/install/fonts +++ b/mk/install/fonts @@ -1,47 +1,77 @@ -# $NetBSD: fonts,v 1.6 2004/12/28 14:38:03 wiz Exp $ +#!@SH@ # -# Handle font databases; used by fonts.mk. +# $NetBSD: fonts,v 1.7 2005/12/29 03:44:38 jlam Exp $ +# +# +FONTS - font database management script +# +# Usage: ./+FONTS [metadatadir] +# +# This scripts rebuilds font databases needed by the package associated +# with . +# +# Lines starting with "# FONTS: " are data read by this script that name +# the directories in which the font database will be rebuilt. +# +# # FONTS: /usr/pkg/lib/X11/fonts/TTF ttf +# # FONTS: /usr/pkg/lib/X11/fonts/Type1 type1 +# # FONTS: /usr/pkg/lib/X11/fonts/misc x11 +# +# For each FONTS entry, if the path is relative, that it is taken to be +# relative to ${PKG_PREFIX}. # -FONTS_TTF="@FONTS_TTF@" -FONTS_TTF_DIRS="@FONTS_TTF_DIRS@" -FONTS_TYPE1="@FONTS_TYPE1@" -FONTS_TYPE1_DIRS="@FONTS_TYPE1_DIRS@" -FONTS_X11="@FONTS_X11@" -FONTS_X11_DIRS="@FONTS_X11_DIRS@" +ECHO="@ECHO@" +GREP="@GREP@" +LS="@LS@" +MKFONTDIR="@MKFONTDIR@" +PWD_CMD="@PWD_CMD@" +RM="@RM@" +SED="@SED@" +SORT="@SORT@" +TEST="@TEST@" +TRUE="@TRUE@" TTMKFDIR="@TTMKFDIR@" TYPE1INST="@TYPE1INST@" -MKFONTDIR="@MKFONTDIR@" -case ${STAGE} in -POST-INSTALL|POST-DEINSTALL) - ${ECHO} "===> Updating font databases" - if [ "${FONTS_TTF}" = "YES" ]; then - for d in ${FONTS_TTF_DIRS}; do - if [ -z "`cd $d ; ${LS} | ${GREP} -v .pkgsrc | ${GREP} -v ^fonts | ${GREP} -v ^Fontmap`" ]; then - ${RM} -f $d/fonts* $d/Fontmap* - else - ( cd $d && ${TTMKFDIR} >/dev/null 2>&1 ) - fi - done - fi - if [ "${FONTS_TYPE1}" = "YES" ]; then - for d in ${FONTS_TYPE1_DIRS}; do - if [ -z "`cd $d ; ${LS} | ${GREP} -v .pkgsrc | ${GREP} -v ^fonts | ${GREP} -v ^Fontmap`" ]; then - ${RM} -f $d/fonts* $d/Fontmap* - else - ( cd $d && ${TYPE1INST} >/dev/null 2>&1 ) - fi - done - fi - if [ "${FONTS_X11}" = "YES" ]; then - for d in ${FONTS_X11_DIRS}; do - if [ -z "`cd $d ; ${LS} | ${GREP} -v .pkgsrc | ${GREP} -v ^fonts | ${GREP} -v ^Fontmap`" ]; then - ${RM} -f $d/fonts* $d/Fontmap* - else - ${MKFONTDIR} $d >/dev/null 2>&1 - fi - done - fi +SELF=$0 +PKG_METADATA_DIR="${1-`${PWD_CMD}`}" +: ${PKGNAME=${PKG_METADATA_DIR##*/}} +: ${PKG_PREFIX=@PREFIX@} + +${SED} -n "/^\# FONTS: /{s/^\# FONTS: //;p;}" ${SELF} | ${SORT} -u | +{ while read dir font_type; do + case $dir in + "") continue ;; + [!/]*) dir="${PKG_PREFIX}/$dir" ;; + esac + ${TEST} -d "$dir" || continue + case "$printed_header" in + yes) ;; + *) printed_header=yes + ${ECHO} "===========================================================================" + ${ECHO} "Updating font databases in the following directories:" + ${ECHO} "" + ;; + esac + ( ${ECHO} " $dir ($font_type)" + cd $dir + case $font_type in + [tT][tT][fF]) update_cmd="${TTMKFDIR}" ;; + [tT][yY][pP][eE]1) update_cmd="${TYPE1INST}" ;; + [xX]11) update_cmd="${MKFONTDIR}" ;; + esac + ${TEST} -f "$update_cmd" || update_cmd="${TRUE}" + $update_cmd >/dev/null + # + # Remove fonts databases if there are no fonts in the directory. + # We filter out the encodings.dir, fonts.{alias,dirs,scale}, and + # Fontmap database files from the directory listing. + # + ${LS} | ${GREP} -v "^encodings.dir" | ${GREP} -v "^fonts\." | ${GREP} -v "^Fontmap" >/dev/null || ${RM} -f fonts.* Fontmap* + ) +done +case "$printed_header" in +yes) ${ECHO} "" + ${ECHO} "===========================================================================" ;; -esac +esac; } diff --git a/mk/install/install b/mk/install/install index 3fa0182ed9c4..0a701413846d 100644 --- a/mk/install/install +++ b/mk/install/install @@ -1,7 +1,7 @@ # -*- sh -*- # start of install # -# $NetBSD: install,v 1.41 2005/08/19 22:24:10 jlam Exp $ +# $NetBSD: install,v 1.42 2005/12/29 03:44:38 jlam Exp $ case ${STAGE} in PRE-INSTALL) @@ -50,6 +50,11 @@ POST-INSTALL) # ${TEST} ! -x ./+PERMS || ./+PERMS ${PKG_METADATA_DIR} + # + # Update any fonts databases. + # + ${TEST} ! -x ./+FONTS || + ./+FONTS ${PKG_METADATA_DIR} # Check for any missing bits after we're finished installing. #