ports/66032: [PATCH] bsd.port.mk: clean room installation

Oliver Eikemeier eikemeier at fillmore-labs.com
Tue Apr 27 17:00:40 UTC 2004


>Number:         66032
>Category:       ports
>Synopsis:       [PATCH] bsd.port.mk: clean room installation
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Apr 27 10:00:39 PDT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Oliver Eikemeier
>Release:        FreeBSD 4.10-STABLE i386
>Organization:
Fillmore Labs - http://www.fillmore-labs.com
>Environment:
System: FreeBSD nuuk.fillmore-labs.com 4.10-STABLE

>Description:

The attached patch is a proposal for a new installation procedure,
triggered by
  CLEANROOM_INSTALL=	yes
in a ports Makefile. If this variable is not present, everything
proceed as normal. Otherwise, the package installs into WRKINST
(default ${WRKDIR}/.inst), build a package from this installation
and in installs this package. This is accomplished by installing
with DESTDIR set, a procedure already supported by the Makefiles
of many ports.

Advantages of this approach are:

- the packing list is always correct, since the real installation
  is done from the package

- if a port installs unwanted files, they can just be omitted from
  the packing list without patching anything.

- files can easily renamed before installation without conflicting
  with existing files (configuration files, man pages etc.)

- splitting a port into multiple parts (like client and server)
  becomes trivial.

- packages can be build without influencing installed ports, making
  upgrades faster (build a package first, then deinstall the old
  package and immediately install the new one) and enabling building
  multiple versions of a port (eg. with and without LDAP) without
  constantly installing and deinstalling them.

future benefits may be:

- automatic packing list generation, even for manual pages

- building of multiple packages (client and server) in one step

I used port net/rsync as a test case, simply insert
  CLEANROOM_INSTALL=	yes
in the ports Makefile and do
  sed -i '.bak' -Ee '/^(pre-|do-|post-)?install:/,/^$/s/\${(DOCSDIR|EXAMPLESDIR|PREFIX)}/${DESTDIR}&/g' Makefile

This procedure should work as a starting point for many ports.

>How-To-Repeat:
>Fix:

The patch needs an updated version of pkg_create which understands
`-S basedir'. It is available by installing pkg_install-devel
version 20040426. Since I can't upgrade pkg_install-devel now (ports
freeze), a patch for this port is attached. pkg_install on older systems
could be upgraded with the mechanism already present in bsd.port.mk
for CONFLICTS.

Index: Mk/bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.488
diff -u -r1.488 bsd.port.mk
--- Mk/bsd.port.mk	19 Apr 2004 23:39:52 -0000	1.488
+++ Mk/bsd.port.mk	27 Apr 2004 15:48:54 -0000
@@ -993,9 +994,9 @@
 # tree we are and thus can't go relative.  They can, of course, be overridden
 # by individual Makefiles or local system make configuration.
 PORTSDIR?=		/usr/ports
-LOCALBASE?=		${DESTDIR}/usr/local
-X11BASE?=		${DESTDIR}/usr/X11R6
-LINUXBASE?=		${DESTDIR}/compat/linux
+LOCALBASE?=		/usr/local
+X11BASE?=		/usr/X11R6
+LINUXBASE?=		/compat/linux
 DISTDIR?=		${PORTSDIR}/distfiles
 _DISTDIR?=		${DISTDIR}/${DIST_SUBDIR}
 .if ${OSVERSION} >= 500036
@@ -1193,6 +1194,12 @@
 
 _POSTMKINCLUDED=	yes
 
+.if defined(DESTDIR)
+check-makevars::
+	@${ECHO_CMD} "${PKGNAME}: Makefile error: DESTDIR is not user settable"
+	@${FALSE}
+.endif
+
 WRKDIR?=		${WRKDIRPREFIX}${.CURDIR}/work
 .if defined(NO_WRKSUBDIR)
 WRKSRC?=		${WRKDIR}
@@ -1205,6 +1212,16 @@
 BUILD_WRKSRC?=	${WRKSRC}
 INSTALL_WRKSRC?=${WRKSRC}
 
+WRKINST?=	${WRKDIR}/.inst
+
+.if defined(CLEANROOM_INSTALL)
+DESTDIR=	${WRKINST}
+INSTALL_ENV+=	DESTDIR="${WRKINST}"
+SCRIPTS_ENV+=	DESTDIR="${WRKINST}"
+.else
+DESTDIR=
+.endif
+
 PLIST_SUB+=	OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE} X11BASE=${X11BASE}
 
 .if defined(WITHOUT_CPU_CFLAGS)
@@ -1576,12 +1595,9 @@
 .endif
 
 # Names of cookies used to skip already completed stages
-EXTRACT_COOKIE?=	${WRKDIR}/.extract_done.${PKGNAME}.${PREFIX:S/\//_/g}
-CONFIGURE_COOKIE?=	${WRKDIR}/.configure_done.${PKGNAME}.${PREFIX:S/\//_/g}
-INSTALL_COOKIE?=	${WRKDIR}/.install_done.${PKGNAME}.${PREFIX:S/\//_/g}
-BUILD_COOKIE?=		${WRKDIR}/.build_done.${PKGNAME}.${PREFIX:S/\//_/g}
-PATCH_COOKIE?=		${WRKDIR}/.patch_done.${PKGNAME}.${PREFIX:S/\//_/g}
-PACKAGE_COOKIE?=	${WRKDIR}/.package_done.${PKGNAME}.${PREFIX:S/\//_/g}
+.for target in extract patch configure build pkgbuild install package
+${target:U}_COOKIE?=	${WRKDIR}/.${target}_done.${PKGNAME}.${PREFIX:S/\//_/g}
+.endfor
 
 # How to do nothing.  Override if you, for some strange reason, would rather
 # do something.
@@ -2318,6 +2334,12 @@
 PKGFILE?=		${.CURDIR}/${PKGNAME}${PKG_SUFX}
 .endif
 
+.if defined(CLEANROOM_INSTALL)
+_PKGFILE?=		${WRKDIR}/${PKGNAME}${PKG_SUFX}
+.else
+_PKGFILE?=		${PKGFILE}
+.endif
+
 # The "latest version" link -- ${PKGNAME} minus everthing after the last '-'
 PKGLATESTREPOSITORY?=	${PACKAGES}/Latest
 PKGBASE?=			${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}
@@ -2580,7 +2604,7 @@
 IGNORECMD=	${ECHO_MSG} "===>  ${PKGNAME} ${IGNORE}."
 .endif
 
-.for target in check-sanity fetch checksum extract patch configure all build install reinstall package
+.for target in check-sanity fetch checksum extract patch configure all build pkgbuild install reinstall package
 ${target}:
 	@${IGNORECMD}
 .if defined(INSTALLS_DEPENDS)
@@ -3110,23 +3134,29 @@
 
 # Install
 
+.if defined(CLEANROOM_INSTALL) && ${PKGINSTALLVER} < 20040426
+check-makefile::
+	@${ECHO_CMD} "${PKGNAME}: Makefile error: please upgrade pkg_install to use CLEANROOM_INSTALL"
+	@${FALSE}
+.endif
+
 .if !target(do-install)
 do-install:
 .if defined(USE_GMAKE)
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${INSTALL_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
 .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${INSTALL_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
 .if ${XFREE86_HTML_MAN:L} == yes
 	@${MKHTMLINDEX} ${PREFIX}/lib/X11/doc/html
 .endif
 .endif
 .else # !defined(USE_GMAKE)
 .if defined(PERL_MODBUILD)
-	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
+	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${INSTALL_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
 .else
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${INSTALL_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
 .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
-	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
+	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${INSTALL_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
 .if ${XFREE86_HTML_MAN:L} == yes
 	@${MKHTMLINDEX} ${PREFIX}/lib/X11/doc/html
 .endif
@@ -3135,10 +3165,16 @@
 .endif
 .endif
 
+.if !target(install-package)
+install-package: pkgbuild
+	@${PKG_ADD} ${_PKGFILE}
+.endif
+
 # Package
 
 .if !target(do-package)
 do-package: ${TMPPLIST}
+.if !defined(CLEANROOM_INSTALL)
 	@if [ -d ${PACKAGES} ]; then \
 		if [ ! -d ${PKGREPOSITORY} ]; then \
 			if ! ${MKDIR} ${PKGREPOSITORY}; then \
@@ -3161,7 +3197,41 @@
 	if [ -f ${PKGMESSAGE} ]; then \
 		_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -D ${PKGMESSAGE}"; \
 	fi; \
-	if ${PKG_CMD} ${PKG_ARGS} ${PKGFILE}; then \
+	if [ -n "${DESTDIR}" ]; then \
+		_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -S ${DESTDIR}"; \
+	fi; \
+	if ${PKG_CMD} ${PKG_ARGS} ${_PKGFILE}; then \
+		if [ -d ${PACKAGES} ]; then \
+			cd ${.CURDIR} && eval ${MAKE} $${__softMAKEFLAGS} package-links; \
+		fi; \
+	else \
+		cd ${.CURDIR} && eval ${MAKE} $${__softMAKEFLAGS} delete-package; \
+		exit 1; \
+	fi
+.else
+	@_LATE_PKG_ARGS=""; \
+	if [ -f ${PKGINSTALL} ]; then \
+		_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -i ${PKGINSTALL}"; \
+	fi; \
+	if [ -f ${PKGDEINSTALL} ]; then \
+		_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -k ${PKGDEINSTALL}"; \
+	fi; \
+	if [ -f ${PKGREQ} ]; then \
+		_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -r ${PKGREQ}"; \
+	fi; \
+	if [ -f ${PKGMESSAGE} ]; then \
+		_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -D ${PKGMESSAGE}"; \
+	fi; \
+	if [ -n "${DESTDIR}" ]; then \
+		_LATE_PKG_ARGS="$${_LATE_PKG_ARGS} -S ${DESTDIR}"; \
+	fi; \
+	${PKG_CMD} ${PKG_ARGS} ${_PKGFILE}
+.endif
+.endif
+
+.if !target(copy-package)
+copy-package:
+	@if ${CP} -f ${_PKGFILE} ${PKGFILE}; then \
 		if [ -d ${PACKAGES} ]; then \
 			cd ${.CURDIR} && eval ${MAKE} $${__softMAKEFLAGS} package-links; \
 		fi; \
@@ -3274,12 +3344,12 @@
 
 .if !target(install-mtree)
 install-mtree:
-	@${MKDIR} ${PREFIX}
+	@${MKDIR} ${DESTDIR}${PREFIX}
 	@if [ `${ID} -u` != 0 ]; then \
-		if [ -w ${PREFIX}/ ]; then \
+		if [ -w ${DESTDIR}${PREFIX}/ ]; then \
 			${ECHO_MSG} "Warning: not superuser, you may get some errors during installation."; \
 		else \
-			${ECHO_MSG} "Error: ${PREFIX}/ not writable."; \
+			${ECHO_MSG} "Error: ${DESTDIR}${PREFIX}/ not writable."; \
 			${FALSE}; \
 		fi; \
 	fi
@@ -3290,9 +3360,9 @@
 			${ECHO_CMD} "Copy it from a suitable location (e.g., /usr/src/etc/mtree) and try again."; \
 			exit 1; \
 		else \
-			${MTREE_CMD} ${MTREE_ARGS} ${PREFIX}/ >/dev/null; \
+			${MTREE_CMD} ${MTREE_ARGS} ${DESTDIR}${PREFIX}/ >/dev/null; \
 			if [ ${MTREE_FILE} = "/etc/mtree/BSD.local.dist" ]; then \
-				cd ${PREFIX}/share/nls; \
+				cd ${DESTDIR}${PREFIX}/share/nls; \
 				${LN} -shf C POSIX; \
 				${LN} -shf C en_US.US-ASCII; \
 			fi; \
@@ -3486,17 +3556,37 @@
 _BUILD_DEP=		configure
 _BUILD_SEQ=		build-message pre-build pre-build-script do-build \
 				post-build post-build-script
+.if !defined(CLEANROOM_INSTALL)
 _INSTALL_DEP=	build
 _INSTALL_SEQ=	install-message check-conflicts \
 			    run-depends lib-depends pre-install pre-install-script \
 				generate-plist check-already-installed
 _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
 				pre-su-install-script do-install post-install add-plist-info \
-				post-install-script add-plist-docs compress-man run-ldconfig fake-pkg \
-				security-check
+				post-install-script add-plist-docs compress-man run-ldconfig fake-pkg
+_INSTALL_SEQ2=	security-check
 _PACKAGE_DEP=	install
 _PACKAGE_SEQ=	package-message pre-package pre-package-script \
-				do-package post-package-script
+				do-package post-package post-package-script
+.else
+_PKGBUILD_DEP=	build
+_PKGBUILD_SEQ=	pkgbuild-message pre-pkgbuild pre-pkgbuild-script \
+				pre-install pre-install-script \
+				generate-plist
+_PKGBUILD_SUSEQ= check-umask install-mtree pre-su-install \
+				pre-su-install-script do-install post-install add-plist-info \
+				post-install-script add-plist-docs compress-man \
+				post-pkgbuild post-pkgbuild-script
+_PKGBUILD_SEQ2=	pkgbuild2-message pre-package pre-package-script \
+				do-package post-package post-package-script
+_INSTALL_DEP=	pkgbuild
+_INSTALL_SEQ=	install-message check-conflicts run-depends lib-depends check-already-installed
+_INSTALL_SUSEQ=	install-package run-ldconfig
+_INSTALL_SEQ2=	security-check
+_PACKAGE_DEP=	pkgbuild
+_PACKAGE_SEQ=	package-message copy-package
+
+.endif
 
 .if !target(check-sanity)
 check-sanity: ${_SANITY_SEQ}
@@ -3510,7 +3600,7 @@
 # Main logic. The loop generates 6 main targets and using cookies
 # ensures that those already completed are skipped.
 
-.for target in extract patch configure build install package
+.for target in extract patch configure build pkgbuild install package
 
 .if !target(${target}) && defined(_OPTIONS_OK)
 ${target}: ${${target:U}_COOKIE}
@@ -3533,14 +3623,18 @@
 	@cd ${.CURDIR} && \
 		${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SUSEQ}"
 	@${ECHO_MSG} "===>  Returning to user credentials"
+.if defined(_${target:U}_SEQ2)
+	@cd ${.CURDIR} && \
+		${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SEQ2}
+.endif
 	@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
 .elif defined(USE_SUBMAKE)
 ${${target:U}_COOKIE}: ${_${target:U}_DEP}
 	@cd ${.CURDIR} && \
-		${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
+		${MAKE} ${__softMAKEFLAGS} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ} ${_${target:U}_SEQ2}
 	@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
 .else
-${${target:U}_COOKIE}: ${_${target:U}_DEP} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ}
+${${target:U}_COOKIE}: ${_${target:U}_DEP} ${_${target:U}_SEQ} ${_${target:U}_SUSEQ} ${_${target:U}_SEQ2}
 	@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
 .endif
 
@@ -3563,7 +3657,10 @@
 .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ}
 .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ}
 .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ}
-.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ}
+.if defined(CLEANROOM_INSTALL)
+.ORDER:	${_PKGBUILD_DEP} ${_PKGBUILD_SEQ} ${_PKGBUILD_SUSEQ} ${_PKGBUILD_SEQ2}
+.endif
+.ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ} ${_INSTALL_SUSEQ} ${_INSTALL_SEQ2}
 .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ}
 
 extract-message:
@@ -3574,15 +3671,26 @@
 	@${ECHO_MSG} "===>  Configuring for ${PKGNAME}"
 build-message:
 	@${ECHO_MSG} "===>  Building for ${PKGNAME}"
+.if !defined(CLEANROOM_INSTALL)
 install-message:
 	@${ECHO_MSG} "===>  Installing for ${PKGNAME}"
 package-message:
 	@${ECHO_MSG} "===>  Building package for ${PKGNAME}"
+.else
+pkgbuild-message:
+	@${ECHO_MSG} "===>  Clean room installation for ${PKGNAME}"
+pkgbuild2-message:
+	@${ECHO_MSG} "===>  Building package for ${PKGNAME}"
+install-message:
+	@${ECHO_MSG} "===>  Installing package for ${PKGNAME}"
+package-message:
+	@${ECHO_MSG} "===>  Archiving package for ${PKGNAME}"
+.endif
 
 # Empty pre-* and post-* targets
 
 .for stage in pre post
-.for name in check-sanity fetch extract patch configure build install package
+.for name in check-sanity fetch extract patch configure build pkgbuild install package
 
 .if !target(${stage}-${name})
 ${stage}-${name}:
@@ -3719,6 +3827,12 @@
 
 .if !target(clean)
 clean:
+.if ${UID} != 0 && !defined(INSTALL_AS_USER) && defined(CLEANROOM_INSTALL)
+	@${ECHO_MSG} "===>  Switching to root credentials for '${.TARGET}' target"
+	@cd ${.CURDIR} && \
+		${SU_CMD} "${MAKE} ${__softMAKEFLAGS} ${.TARGET}"
+	@${ECHO_MSG} "===>  Returning to user credentials"
+.else
 .if !defined(NOCLEANDEPENDS)
 	@cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} clean-depends
 .endif
@@ -3731,6 +3845,7 @@
 	@cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} post-clean
 .endif
 .endif
+.endif
 
 .if !target(pre-distclean)
 pre-distclean:
@@ -3978,7 +4093,7 @@
 package-noinstall:
 	@${MKDIR} ${WRKDIR}
 	@cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} pre-package \
-		pre-package-script do-package post-package-script
+		pre-package-script do-package post-package post-package-script
 	@${RM} -f ${TMPPLIST}
 	-@${RMDIR} ${WRKDIR}
 .endif
@@ -4562,11 +4677,11 @@
 		[ "`${SED} -En -e '/^@cw?d[ 	]*/s,,,p' ${TMPPLIST} | ${TAIL} -n 1`" != "${PREFIX}" ]; then \
 		${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
 	fi
-	@${FIND} -P ${PORTDOCS:S/^/${DOCSDIR}\//} ! -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
-	@${FIND} -P -d ${PORTDOCS:S/^/${DOCSDIR}\//} -type d 2>/dev/null | \
-		${SED} -ne 's,^${PREFIX}/, at dirrm ,p' >> ${TMPPLIST}
-	@if [ -d "${DOCSDIR}" ]; then \
+	@${FIND} -P ${PORTDOCS:S/^/${DESTDIR}${DOCSDIR}\//} ! -type d 2>/dev/null | \
+		${SED} -ne 's,^${DESTDIR}${PREFIX}/,,p' >> ${TMPPLIST}
+	@${FIND} -P -d ${PORTDOCS:S/^/${DESTDIR}${DOCSDIR}\//} -type d 2>/dev/null | \
+		${SED} -ne 's,^${DESTDIR}${PREFIX}/, at dirrm ,p' >> ${TMPPLIST}
+	@if [ -d "${DESTDIR}${DOCSDIR}" ]; then \
 		${ECHO_CMD} "@unexec rmdir %D/${DOCSDIR:S,^${PREFIX}/,,} 2>/dev/null || true" >> ${TMPPLIST}; \
 	fi
 .else
@@ -4579,7 +4694,7 @@
 .for i in ${INFO}
 	@${ECHO_CMD} "@unexec install-info --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
 		>> ${TMPPLIST}
-	@${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST}
+	@${LS} ${DESTDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${DESTDIR}${PREFIX}/::g >> ${TMPPLIST}
 	@${ECHO_CMD} "@exec install-info %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
 		>> ${TMPPLIST}
 .endfor
@@ -4590,21 +4705,21 @@
 .if defined(_MANPAGES) || defined(_MLINKS)
 .if ${MANCOMPRESSED} == yes && defined(NOMANCOMPRESS)
 	@${ECHO_MSG} "===>   Uncompressing manual pages for ${PKGNAME}"
-	@_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
+	@_manpages='${_MANPAGES:S/^/${DESTDIR}/:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GUNZIP_CMD} $${_manpages} ) || ${TRUE}
 .elif ${MANCOMPRESSED} == no && !defined(NOMANCOMPRESS)
 	@${ECHO_MSG} "===>   Compressing manual pages for ${PKGNAME}"
-	@_manpages='${_MANPAGES:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
+	@_manpages='${_MANPAGES:S/^/${DESTDIR}/:S/'/'\''/g}' && [ "$${_manpages}" != "" ] && ( eval ${GZIP_CMD} $${_manpages} ) || ${TRUE}
 .endif
 .if defined(_MLINKS)
 	@set ${_MLINKS}; \
 	while :; do \
 		[ $$# -eq 0 ] && break || ${TRUE}; \
-		${RM} -f $${2%.gz}; ${RM} -f $$2.gz; \
+		${RM} -f ${DESTDIR}$${2%.gz}; ${RM} -f ${DESTDIR}$$2.gz; \
 		${LN} -fs `${ECHO_CMD} $$1 $$2 | ${AWK} '{ \
 					z=split($$1, a, /\//); x=split($$2, b, /\//); \
 					while (a[i] == b[i]) i++; \
 					for (q=i; q<x; q++) printf "../"; \
-					for (; i<z; i++) printf a[i] "/"; printf a[z]; }'` $$2; \
+					for (; i<z; i++) printf a[i] "/"; printf a[z]; }'` ${DESTDIR}$$2; \
 		shift; shift; \
 	done
 .endif


Index: sysutils/pkg_install-devel/Makefile
===================================================================
RCS file: /home/ncvs/ports/sysutils/pkg_install-devel/Makefile,v
retrieving revision 1.4
diff -u -r1.4 Makefile
--- sysutils/pkg_install-devel/Makefile	16 Apr 2004 01:24:46 -0000	1.4
+++ sysutils/pkg_install-devel/Makefile	26 Apr 2004 18:38:11 -0000
@@ -6,7 +6,7 @@
 #
 
 PORTNAME=		pkg_install
-PORTVERSION=		20040412
+PORTVERSION=		20040426
 CATEGORIES=		sysutils
 MASTER_SITES=		${MASTER_SITE_LOCAL}
 MASTER_SITE_SUBDIR=	eik
Index: sysutils/pkg_install-devel/distinfo
===================================================================
RCS file: /home/ncvs/ports/sysutils/pkg_install-devel/distinfo,v
retrieving revision 1.3
diff -u -r1.3 distinfo
--- sysutils/pkg_install-devel/distinfo	16 Apr 2004 01:24:46 -0000	1.3
+++ sysutils/pkg_install-devel/distinfo	27 Apr 2004 08:38:06 -0000
@@ -1,2 +1,2 @@
-MD5 (pkg_install-20040412.tar.gz) = 54907f84cdb56797057fff2281db983f
-SIZE (pkg_install-20040412.tar.gz) = 84332
+MD5 (pkg_install-20040426.tar.gz) = 7968e960cc3695759554dd50820f8455
+SIZE (pkg_install-20040426.tar.gz) = 368640

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list