diff options
author | seb <seb@pkgsrc.org> | 2003-06-19 21:41:13 +0000 |
---|---|---|
committer | seb <seb@pkgsrc.org> | 2003-06-19 21:41:13 +0000 |
commit | 5ab8be8066273669ac731b3a0f60adee2c6fa7d9 (patch) | |
tree | a2fb7483e3a18fa8f83edeb1496c00f88dff6039 /mk | |
parent | 4c7c717eed7b924103792374e8c81cc3608d302c (diff) | |
download | pkgsrc-5ab8be8066273669ac731b3a0f60adee2c6fa7d9.tar.gz |
Introduce a new framework to handle info files, install-info and
makeinfo commands.
The goal of the new framework is twofold:
- reduce the number of '@exec' and '@unexec' in PLIST by
using INSTALL/DEINSTALL scripts to handle entries addition/removal
Info directory file.
- achieve lighter dependencies by avoiding unnecessary run-time
dependency on the gtexinfo package and if needed with the help of the
standalone install-info command provided by the recently imported package
pkgtools/pkg_install-info.
A package must be sightly updated to use this new framework and
must define the variable USE_NEW_TEXINFO. This variable will
be removed from the pkgsrc tree when all package would have been
updated.
For details see section 10.24 of Packages.txt, comments in
mk/{texinfo.mk,buildlink2/bsd.buildlink2.mk} and upcoming mail to
<tech-pkg at netbsd dot org>.
Diffstat (limited to 'mk')
-rw-r--r-- | mk/bsd.pkg.mk | 20 | ||||
-rw-r--r-- | mk/buildlink2/bsd.buildlink2.mk | 53 | ||||
-rw-r--r-- | mk/install/install-info | 25 | ||||
-rw-r--r-- | mk/texinfo.mk | 135 |
4 files changed, 221 insertions, 12 deletions
diff --git a/mk/bsd.pkg.mk b/mk/bsd.pkg.mk index ccf96583ed7..51747854524 100644 --- a/mk/bsd.pkg.mk +++ b/mk/bsd.pkg.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.pkg.mk,v 1.1200 2003/06/17 14:33:17 abs Exp $ +# $NetBSD: bsd.pkg.mk,v 1.1201 2003/06/19 21:41:14 seb Exp $ # # This file is in the public domain. # @@ -496,6 +496,12 @@ PLIST_SUBST+= PERL5_SITEARCH=${PERL5_SITEARCH:S/^${LOCALBASE}\///} PLIST_SUBST+= PERL5_ARCHLIB=${PERL5_ARCHLIB:S/^${LOCALBASE}\///} .endif +.if defined(USE_NEW_TEXINFO) +. if defined(INFO_FILES) +. include "../../mk/texinfo.mk" +. endif +.endif + .if defined(USE_PKGINSTALL) && !empty(USE_PKGINSTALL:M[yY][eE][sS]) . include "../../mk/bsd.pkg.install.mk" .endif @@ -2317,11 +2323,13 @@ real-su-install: ${MESSAGE} ${_PKG_SILENT}${_PKG_DEBUG}cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} do-install ${_PKG_SILENT}${_PKG_DEBUG}cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} post-install ${_PKG_SILENT}${_PKG_DEBUG}cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} post-install-script -.for f in ${INFO_FILES} +.if !defined(USE_NEW_TEXINFO) +. for f in ${INFO_FILES} ${_PKG_SILENT}${_PKG_DEBUG}${ECHO} "${INSTALL_INFO} --info-dir=${PREFIX}/info ${PREFIX}/info/${f}"; \ ${INSTALL_INFO} --remove --info-dir=${PREFIX}/info ${PREFIX}/info/${f}; \ ${INSTALL_INFO} --info-dir=${PREFIX}/info ${PREFIX}/info/${f} -.endfor +. endfor +.endif # !USE_NEW_TEXINFO @# PLIST must be generated at this late point (instead of @# depending on it somewhere earlier), as the @# pre/do/post-install aren't run then yet: @@ -4096,11 +4104,7 @@ print-PLIST: next; \ } \ { \ - if (/\.info$$/) { \ - print "\@unexec $${INSTALL_INFO} --delete --info-dir=%D/info %D/" $$0; \ - print $$0; \ - print "\@exec $${INSTALL_INFO} --info-dir=%D/info %D/" $$0; \ - } else if (!/^info\/dir$$/) { \ + if (!/^info\/dir$$/) { \ print $$0; \ } \ }' diff --git a/mk/buildlink2/bsd.buildlink2.mk b/mk/buildlink2/bsd.buildlink2.mk index 0add32dfc3d..516105ab99d 100644 --- a/mk/buildlink2/bsd.buildlink2.mk +++ b/mk/buildlink2/bsd.buildlink2.mk @@ -1,4 +1,4 @@ -# $NetBSD: bsd.buildlink2.mk,v 1.85 2003/06/19 17:20:41 jschauma Exp $ +# $NetBSD: bsd.buildlink2.mk,v 1.86 2003/06/19 21:41:15 seb Exp $ # # An example package buildlink2.mk file: # @@ -1019,3 +1019,54 @@ ${BUILDLINK_DIR}/${_prog_}: ${_GNU_MISSING} ${_PKG_SILENT}${_PKG_DEBUG}${CHMOD} +x ${.TARGET} . endfor .endfor + +.if defined(USE_NEW_TEXINFO) +# install-info and makeinfo handling. +# +.if defined(INFO_FILES) +# Create an install-info script that is a "no operation" command +# as registration of info files is handled by the INSTALL script. +CONFIGURE_ENV+= INSTALL_INFO="${BUILDLINK_DIR}/bin/install-info" +MAKE_ENV+= INSTALL_INFO="${BUILDLINK_DIR}/bin/install-info" + +do-buildlink: hide-install-info + +hide-install-info: ${BUILDLINK_DIR}/bin/install-info +${BUILDLINK_DIR}/bin/install-info: + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} "#!${BUILDLINK_SHELL}" > ${.TARGET} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} '${ECHO} "==> Noop install-info $$*" >> ${_BLNK_WRAP_LOG}' >> ${.TARGET} + ${_PKG_SILENT}${_PKG_DEBUG}${CHMOD} +x ${.TARGET} + +# Create a makeinfo script that will invoke the right makeinfo +# command if USE_MAKEINFO is 'yes' or invoke the GNU missing script if not. +CONFIGURE_ENV+= MAKEINFO="${BUILDLINK_DIR}/bin/makeinfo" +MAKE_ENV+= MAKEINFO="${BUILDLINK_DIR}/bin/makeinfo" + +. if empty(USE_MAKEINFO:M[nN][oO]) +do-buildlink: makeinfo-wrapper +makeinfo-wrapper: ${BUILDLINK_DIR}/bin/makeinfo +${BUILDLINK_DIR}/bin/makeinfo: + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} "#!${BUILDLINK_SHELL}" > ${.TARGET} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} 'echo "${MAKEINFO} $$*" >> ${_BLNK_WRAP_LOG}' >> ${.TARGET} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} 'exec ${MAKEINFO} $$*' >> ${.TARGET} + ${_PKG_SILENT}${_PKG_DEBUG}${CHMOD} +x ${.TARGET} +. else # !USE_MAKEINFO +do-buildlink: hide-makeinfo +hide-makeinfo: ${BUILDLINK_DIR}/bin/makeinfo +${BUILDLINK_DIR}/bin/makeinfo: ${_GNU_MISSING} + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${.TARGET:H} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} "#!${BUILDLINK_SHELL}" > ${.TARGET} + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} 'exec ${_GNU_MISSING} makeinfo "$$*"' >> ${.TARGET} + ${_PKG_SILENT}${_PKG_DEBUG}${CHMOD} +x ${.TARGET} +. endif # USE_MAKEINFO +.endif # INFO_FILES +.endif # USE_NEW_TEXINFO diff --git a/mk/install/install-info b/mk/install/install-info new file mode 100644 index 00000000000..b55194c76a4 --- /dev/null +++ b/mk/install/install-info @@ -0,0 +1,25 @@ +# $NetBSD +# +# Handle registration of Info files; used by texinfo.mk. +# + +INFO_FILES="@INFO_FILES@" +INSTALL_INFO="@INSTALL_INFO@" +INFO_DIR="@INFO_DIR@" + +case ${STAGE} in +POST-INSTALL) + for f in ${INFO_FILES}; do + ${INSTALL_INFO} --delete --info-dir=${PKG_PREFIX}/${INFO_DIR} \ + ${PKG_PREFIX}/${INFO_DIR}/${f} 1>/dev/null 2>&1 + ${INSTALL_INFO} --info-dir=${PKG_PREFIX}/${INFO_DIR} \ + ${PKG_PREFIX}/${INFO_DIR}/${f} + done + ;; +DEINSTALL) + for f in ${INFO_FILES}; do + ${INSTALL_INFO} --delete --info-dir=${PKG_PREFIX}/${INFO_DIR} \ + ${PKG_PREFIX}/${INFO_DIR}/${f} 1>/dev/null 2>&1 + done + ;; +esac diff --git a/mk/texinfo.mk b/mk/texinfo.mk index ce0b05cea53..22f31764c90 100644 --- a/mk/texinfo.mk +++ b/mk/texinfo.mk @@ -1,11 +1,138 @@ -# $NetBSD: texinfo.mk,v 1.10 2003/05/06 23:43:53 seb Exp $ +# $NetBSD: texinfo.mk,v 1.11 2003/06/19 21:41:15 seb Exp $ # -# This Makefile fragment is included by packages that provide info files. +# This Makefile fragment is included by bsd.pkg.mk when INFO_FILES and +# USE_NEW_TEXINFO are defined. +# +# Or... +# +# This Makefile fragment is included by packages that provide info files +# and do not _yet_ use the new framework. # .if !defined(TEXINFO_MK) TEXINFO_MK= # defined +# +# This switch is here only until all packages are converted to use +# the new framework. +# +.if defined(USE_NEW_TEXINFO) +# +# Handle install-info. +# + +# Use bsd.pkg.install.mk framework i.e. INSTALL/DEINSTALL scripts +# to handle install-info execution. +USE_PKGINSTALL= YES + +# Pathname relative to ${PREFIX} of directory holding the info +# files and the Info dir file. +INFO_DIR?= info + +# Does the system have the install-info command? +# Any version will fit (really?). +_INSTALL_INFO= +.for _i_ in /usr/bin/install-info /sbin/install-info +. if exists(${_i_}) +_INSTALL_INFO= ${_i_} +. endif +.endfor + +# If no install-info was found provide one with the pkg_install-info package. +# And set INSTALL_INFO to the install-info command it provides. +.if empty(_INSTALL_INFO) +_PKG_INSTALL_INFO_PREFIX_DEFAULT= ${LOCALBASE} +DEPENDS+= pkg_install-info-[0-9]*:../../pkgtools/pkg_install-info +EVAL_PREFIX+= _PKG_INSTALL_INFO_PREFIX=pkg_install-info +INSTALL_INFO= ${_PKG_INSTALL_INFO_PREFIX}/bin/pkg_install-info +.else +INSTALL_INFO= ${_INSTALL_INFO} +.endif + +# Generate INSTALL/DEINSTALL scripts code for handling install-info. +INSTALL_EXTRA_TMPL+= ${.CURDIR}/../../mk/install/install-info +DEINSTALL_EXTRA_TMPL+= ${.CURDIR}/../../mk/install/install-info +FILES_SUBST+= INFO_FILES=${INFO_FILES:Q} +FILES_SUBST+= INSTALL_INFO=${INSTALL_INFO:Q} +FILES_SUBST+= INFO_DIR=${INFO_DIR:Q} + +# When not using buildlink2 set INSTALL_INFO in environment to ${ECHO} +# so the package build/install step does not register itself the info +# files as this is the job of the INSTALL script. +# WARNING: this is far from being failsafe. +# When not using buildlink2 patch files so that install-info is _not_ +# run are likely to be needed. +.if !empty(USE_BUILDLINK2:M[nN][oO]) +CONFIGURE_ENV+= INSTALL_INFO="${TRUE}" +MAKE_ENV+= INSTALL_INFO="${TRUE}" +.endif + +# +# Handle makeinfo if requested. +# + +# Minimum required version for the GNU makeinfo command. +TEXINFO_REQD?= 3.12 + +# By default makeinfo is not needed for building. +USE_MAKEINFO?= NO + +.if empty(USE_MAKEINFO:M[nN][oO]) + +# Does the system has a makeinfo command? +_MAKEINFO= +. for _i_ in /usr/bin/makeinfo +. if exists(${_i_}) +_MAKEINFO= ${_i_} +. endif +. endfor + +# Record makeinfo's version. +# If makeinfo's version contains useful information outside [0-9].[0-9], +# the following would have to be changed as well as the comparison below. +. if !empty(_MAKEINFO) && !defined(MAKEINFO_VERSION) +MAKEINFO_VERSION_OUTPUT!= ${_MAKEINFO} --version 2>/dev/null || ${ECHO} +MAKEINFO_VERSION=${MAKEINFO_VERSION_OUTPUT:M[0-9]*.[0-9]*:C/[^0-9.]//} +MAKEFLAGS+= MAKEINFO_VERSION=${MAKEINFO_VERSION} +. endif + +# Sort out if the version provided by devel/gtexinfo is needed. +# If it is add it as build time dependency and set MAKEINFO +# to the makeinfo it provides. +# Here it is assumed devel/gtexinfo's makeinfo version will be +# superior or equal to TEXINFO_REQD. +_NEED_TEXINFO= YES +. if defined(MAKEINFO_VERSION) && ${MAKEINFO_VERSION} >= ${TEXINFO_REQD} +_NEED_TEXINFO= NO +. endif +. if !empty(_NEED_TEXINFO:M[yY][eE][sS]) +BUILD_DEPENDS+= gtexinfo>=${TEXINFO_REQD}:../../devel/gtexinfo +_GTEXINFO_PREFIX_DEFAULT= ${LOCALBASE} +EVAL_PREFIX+= _GTEXINFO_PREFIX=gtexinfo +MAKEINFO= ${_GTEXINFO_PREFIX}/bin/makeinfo +. else +MAKEINFO= ${_MAKEINFO} +. endif + +# When not using buildlink2 set MAKEINFO in environment to the pathname +# of the right makeinfo command. +. if !empty(USE_BUILDLINK2:M[nN][oO]) +CONFIGURE_ENV+= MAKEINFO="${MAKEINFO}" +MAKE_ENV+= MAKEINFO="${MAKEINFO}" +. endif + +.else # !USE_MAKEINFO +# When not using buildlink2 set MAKEINFO in environment to ${FALSE} +. if !empty(USE_BUILDLINK2:M[nN][oO]) +CONFIGURE_ENV+= MAKEINFO="${FALSE}" +MAKE_ENV+= MAKEINFO="${FALSE}" +. endif +.endif # USE_MAKEINFO + +############################################################## +.else # !USE_NEW_TEXINFO +# Obsolete handling below... Will go away ASAP. + # Does the system have the GNU texinfo tools and if yes, what version are they? _INSTALL_INFO= .for _i_ in /usr/bin/install-info /sbin/install-info @@ -15,7 +142,7 @@ _INSTALL_INFO= ${_i_} .endfor .if !empty(_INSTALL_INFO) . if !defined(INSTALL_INFO_VERSION) -_INSTALL_INFO_VERSION_OUTPUT!= ${_INSTALL_INFO} --version 2>/dev/null +_INSTALL_INFO_VERSION_OUTPUT!= ${_INSTALL_INFO} --version 2>/dev/null || ${ECHO} # If the install-info version contains useful information outside [0-9].[0-9], # the following would have to be changed as well as the comparison below INSTALL_INFO_VERSION=${_INSTALL_INFO_VERSION_OUTPUT:M[0-9]*.[0-9]*:C/[^0-9.]//} @@ -87,4 +214,6 @@ texinfo-override: done ) .endif # TEXINFO_OVERRIDE +.endif # USE_NEW_TEXINFO + .endif # TEXINFO_MK |