From owner-freebsd-ports-bugs@FreeBSD.ORG Tue Apr 27 10:00:39 2004 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D75BC16A4CE for ; Tue, 27 Apr 2004 10:00:39 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id C0BB643D54 for ; Tue, 27 Apr 2004 10:00:39 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) i3RH0ddW025567 for ; Tue, 27 Apr 2004 10:00:39 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i3RH0dYn025566; Tue, 27 Apr 2004 10:00:39 -0700 (PDT) (envelope-from gnats) Resent-Date: Tue, 27 Apr 2004 10:00:39 -0700 (PDT) Resent-Message-Id: <200404271700.i3RH0dYn025566@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Oliver Eikemeier Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 71B3016A4CE for ; Tue, 27 Apr 2004 09:55:11 -0700 (PDT) Received: from fillmore.dyndns.org (port-212-202-49-130.reverse.qsc.de [212.202.49.130]) by mx1.FreeBSD.org (Postfix) with ESMTP id 87E1943D4C for ; Tue, 27 Apr 2004 09:55:10 -0700 (PDT) (envelope-from eikemeier@fillmore-labs.com) Received: from [172.16.0.2] (helo=fillmore-labs.com) by fillmore.dyndns.org with esmtp (Exim 4.32; FreeBSD) id 1BIVrP-000GfO-4y for FreeBSD-gnats-submit@FreeBSD.org; Tue, 27 Apr 2004 18:55:09 +0200 Message-Id: <408E906A.4010008@fillmore-labs.com> Date: Tue, 27 Apr 2004 18:55:06 +0200 From: Oliver Eikemeier To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/66032: [PATCH] bsd.port.mk: clean room installation X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Apr 2004 17:00:40 -0000 >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}/,@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}/,@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; qRelease-Note: >Audit-Trail: >Unformatted: