Index: bsd.licenses.mk =================================================================== diff --git a/head/Mk/bsd.licenses.mk b/head/Mk/bsd.licenses.mk --- a/head/Mk/bsd.licenses.mk (revision 321142) +++ b/head/Mk/bsd.licenses.mk (working copy) @@ -749,14 +749,14 @@ .endif install-license: - @${MKDIR} ${_LICENSE_DIR} - @${INSTALL_DATA} ${_LICENSE_CATALOG_TMP} ${_LICENSE_CATALOG} - @${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${_LICENSE_REPORT} + @${MKDIR} ${STAGEDIR}${_LICENSE_DIR} + @${INSTALL_DATA} ${_LICENSE_CATALOG_TMP} ${STAGEDIR}${_LICENSE_CATALOG} + @${INSTALL_DATA} ${_LICENSE_REPORT_TMP} ${STAGEDIR}${_LICENSE_REPORT} .if ${_LICENSE_COMB} == "single" @${INSTALL_DATA} ${_LICENSE_FILE} ${_LICENSE_DIR}/${_LICENSE} .else . for lic in ${_LICENSE} - @${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${_LICENSE_DIR}/${lic} + @${INSTALL_DATA} ${_LICENSE_FILE_${lic}} ${STAGEDIR}${_LICENSE_DIR}/${lic} . endfor .endif # XXX @dirrmtry entry must be here (no way to do with PLIST_* vars) Index: bsd.pkgng.mk =================================================================== diff --git a/head/Mk/bsd.pkgng.mk b/head/Mk/bsd.pkgng.mk --- a/head/Mk/bsd.pkgng.mk (revision 321142) +++ b/head/Mk/bsd.pkgng.mk (working copy) @@ -38,6 +38,16 @@ .if !target(fake-pkg) +.if defined(NO_STAGE) +STAGE_ARGS= -l +.else +STAGE_ARGS= -i ${STAGEDIR} +.endif + +.if defined(WITHOUT_PKGNG) +STAGE_ARGS+= -O +.endif + fake-pkg: .if !defined(NO_PKG_REGISTER) .if defined(INSTALLS_DEPENDS) @@ -104,9 +114,9 @@ @[ -f ${MTREE_FILE} ] && ${CP} ${MTREE_FILE} ${METADIR}/+MTREE_DIRS || return 0 .endif .if defined(INSTALLS_DEPENDS) - @${SETENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_CMD} -d -l -m ${METADIR} -f ${TMPPLIST} + @${SETENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_CMD} -d ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST} .else - @${SETENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_CMD} -l -m ${METADIR} -f ${TMPPLIST} + @${SETENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_CMD} ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST} .endif @${RM} -rf ${METADIR} .else @@ -114,6 +124,7 @@ .endif .endif +.if defined(WITH_PKGNG) .if !target(check-build-conflicts) check-build-conflicts: .if ( defined(CONFLICTS) || defined(CONFLICTS_BUILD) ) && !defined(DISABLE_CONFLICTS) && !defined(DEFER_CONFLICTS_CHECK) @@ -205,9 +216,68 @@ .endif # defined(DEFER_CONFLICTS_CHECK) .endif .endif +.endif .if !target(do-package) do-package: ${TMPPLIST} + @${MKDIR} ${METADIR} + @${ECHO_CMD} "name: ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}" > ${MANIFESTF} + @${ECHO_CMD} "version: ${PKGVERSION}" >> ${MANIFESTF} + @${ECHO_CMD} "origin: ${PKGORIGIN}" >> ${MANIFESTF} + @${ECHO_CMD} "comment: |" >> ${MANIFESTF} + @${ECHO_CMD} " "${COMMENT:Q} >> ${MANIFESTF} + @${ECHO_CMD} "maintainer: ${MAINTAINER}" >> ${MANIFESTF} + @${ECHO_CMD} "prefix: ${PREFIX}" >> ${MANIFESTF} +.if defined(WWW) + @${ECHO_CMD} "www: ${WWW}" >> ${MANIFESTF} +.endif + @${ECHO_CMD} "deps: " >> ${MANIFESTF} + @${ACTUAL-PACKAGE-DEPENDS} | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u | ${SED} 's/^/ /' >> ${MANIFESTF} + @${ECHO_CMD} -n "categories: [" >> ${MANIFESTF} +.for cat in ${CATEGORIES:u} + @${ECHO_CMD} -n "${cat}," >> ${MANIFESTF} +.endfor + @${ECHO_CMD} "]" >> ${MANIFESTF} +.if defined(LICENSE_COMB) + @${ECHO_CMD} "licenselogic: ${LICENSE_COMB}" >> ${MANIFESTF} +.else + @${ECHO_CMD} "licenselogic: single" >> ${MANIFESTF} +.endif + @${ECHO_CMD} -n "licenses: [" >> ${MANIFESTF} +.for lic in ${LICENSE:u} + @${ECHO_CMD} -n "${lic}," >> ${MANIFESTF} +.endfor + @${ECHO_CMD} "]" >> ${MANIFESTF} + @${ECHO_CMD} -n "users: [" >> ${MANIFESTF} +.for user in ${USERS:u} + @${ECHO_CMD} -n "${user}, " >> ${MANIFESTF} +.endfor + @${ECHO_CMD} "]" >> ${MANIFESTF} + @${ECHO_CMD} -n "groups: [" >> ${MANIFESTF} +.for group in ${GROUPS:u} + @${ECHO_CMD} -n "${group}, " >> ${MANIFESTF} +.endfor + @${ECHO_CMD} "]" >> ${MANIFESTF} + @${ECHO_CMD} -n "options: {" >> ${MANIFESTF} +.for opt in ${COMPLETE_OPTIONS_LIST} + @[ -z "${PORT_OPTIONS:M${opt}}" ] || match="on" ; ${ECHO_MSG} -n " ${opt}: $${match:-off}," >> ${MANIFESTF} +.endfor +.undef opt + @${ECHO_CMD} "}" >> ${MANIFESTF} + @[ -f ${PKGINSTALL} ] && ${CP} ${PKGINSTALL} ${METADIR}/+INSTALL; \ + [ -f ${PKGPREINSTALL} ] && ${CP} ${PKGPREINSTALL} ${METADIR}/+PRE_INSTALL; \ + [ -f ${PKGPOSTINSTALL} ] && ${CP} ${PKGPOSTINSTALL} ${METADIR}/+POST_INSTALL; \ + [ -f ${PKGDEINSTALL} ] && ${CP} ${PKGDEINSTALL} ${METADIR}/+DEINSTALL; \ + [ -f ${PKGPREDEINSTALL} ] && ${CP} ${PKGPREDEINSTALL} ${METADIR}/+PRE_DEINSTALL; \ + [ -f ${PKGPOSTDEINSTALL} ] && ${CP} ${PKGPOSTDEINSTALL} ${METADIR}/+POST_DEINSTALL; \ + [ -f ${PKGUPGRADE} ] && ${CP} ${PKGUPGRADE} ${METADIR}/+UPGRADE; \ + [ -f ${PKGPREUPGRADE} ] && ${CP} ${PKGPREUPGRADE} ${METADIR}/+PRE_UPGRADE; \ + [ -f ${PKGPOSTUPGRADE} ] && ${CP} ${PKGPOSTUPGRADE} ${METADIR}/+POST_UPGRADE; \ + ${CP} ${DESCR} ${METADIR}/+DESC; \ + [ -f ${PKGMESSAGE} ] && ${CP} ${PKGMESSAGE} ${METADIR}/+DISPLAY || return 0 +.if !defined(NO_MTREE) + @[ -f ${MTREE_FILE} ] && ${CP} ${MTREE_FILE} ${METADIR}/+MTREE_DIRS || return 0 +.endif @if [ -d ${PACKAGES} ]; then \ if [ ! -d ${PKGREPOSITORY} ]; then \ if ! ${MKDIR} ${PKGREPOSITORY}; then \ @@ -220,21 +290,28 @@ ${RM} -f ${PACKAGES}/$$cat/${PKGNAMEPREFIX}${PORTNAME}*${PKG_SUFX} ; \ done @if ${PKG_CREATE} -o ${PKGREPOSITORY} ${PKGNAME}; then \ - if [ "${PKGORIGIN}" = "ports-mgmt/pkg" -o "${PKGORIGIN}" = "ports-mgmt/pkg-devel" ]; then \ - if [ ! -d ${PKGLATESTREPOSITORY} ]; then \ - if ! ${MKDIR} ${PKGLATESTREPOSITORY}; then \ - ${ECHO_MSG} "=> Can't create directory ${PKGLATESTREPOSITORY}."; \ - exit 1; \ + if [ -n "${WITH_PKGNG}" ]; then + if [ "${PKGORIGIN}" = "ports-mgmt/pkg" -o "${PKGORIGIN}" = "ports-mgmt/pkg-devel" ]; then \ + if [ ! -d ${PKGLATESTREPOSITORY} ]; then \ + if ! ${MKDIR} ${PKGLATESTREPOSITORY}; then \ + ${ECHO_MSG} "=> Can't create directory ${PKGLATESTREPOSITORY}."; \ + exit 1; \ + fi; \ + fi ; \ + ${LN} -sf ../${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PKGLATESTFILE} ; \ + fi; \ + else \ + if [ -d ${PACKAGES} ]; then \ + cd ${.CURDIR} && eval ${MAKE} package-links; \ fi; \ - fi ; \ - ${LN} -sf ../${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PKGLATESTFILE} ; \ - fi; \ + fi ; \ else \ cd ${.CURDIR} && eval ${MAKE} delete-package; \ exit 1; \ fi .endif +.if defined(WITH_PKGNG) .if !target(check-already-installed) check-already-installed: .if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER) @@ -272,5 +349,6 @@ fi @${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE} .endif +.endif .endif # defined(_POSTMKINCLUDED) Index: bsd.port.mk =================================================================== diff --git a/head/Mk/bsd.port.mk b/head/Mk/bsd.port.mk --- a/head/Mk/bsd.port.mk (revision 321142) +++ b/head/Mk/bsd.port.mk (working copy) @@ -1134,6 +1134,9 @@ INDEXDIR?= ${PORTSDIR} SRC_BASE?= /usr/src USESDIR?= ${PORTSDIR}/Mk/Uses +.if defined(FORCE_STAGE) +.undef NO_STAGE +.endif # make sure bmake treats -V as expected .MAKE.EXPAND_VARIABLES= yes @@ -1959,9 +1962,14 @@ . endfor .endif -.if defined(WITH_PKGNG) +.if defined(WITH_PKGNG) || !defined(NO_STAGE) .include "${PORTSDIR}/Mk/bsd.pkgng.mk" .endif + +.if !defined(NO_STAGE) +.include "${PORTSDIR}/Mk/bsd.stage.mk" +.endif + .if defined(USE_LOCAL_MK) .include "${PORTSDIR}/Mk/bsd.local.mk" .endif @@ -2133,6 +2141,7 @@ BUILD_COOKIE?= ${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S/\//_/g} PATCH_COOKIE?= ${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S/\//_/g} PACKAGE_COOKIE?= ${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S/\//_/g} +STAGE_COOKIE?= ${WRKDIR}/.stage_done.${PORTNAME}.${PREFIX:S/\//_/g} # How to do nothing. Override if you, for some strange reason, would rather # do something. @@ -3171,7 +3180,12 @@ IGNORECMD= ${ECHO_MSG} "===> ${PKGNAME} "${IGNORE:Q}.;exit 1 .endif -.for target in check-sanity fetch checksum extract patch configure all build install reinstall package +.if !defined(NO_STAGE) +_TARGETS= check-sanity fetch checksum extract patch configure all build stage restage install reinstall package +.else +_TARGETS= check-sanity fetch checksum extract patch configure all build install reinstall package +.endif +.for target in ${_TARGETS} .if !target(${target}) ${target}: @${IGNORECMD} @@ -4040,9 +4054,12 @@ .if defined(USE_LDCONFIG) || defined(USE_LDCONFIG32) .if defined(USE_LDCONFIG) .if defined(USE_LINUX_PREFIX) +.if defined(NO_STAGE} @${ECHO_MSG} "===> Running linux ldconfig" ${LDCONFIG_CMD} +.endif .else +.if defined(NO_STAGE) .if !defined(INSTALL_AS_USER) @${ECHO_MSG} "===> Running ldconfig" ${LDCONFIG} -m ${USE_LDCONFIG} @@ -4050,13 +4067,14 @@ @${ECHO_MSG} "===> Running ldconfig (errors are ignored)" -${LDCONFIG} -m ${USE_LDCONFIG} .endif +.endif .if ${USE_LDCONFIG} != "${PREFIX}/lib" && !defined(INSTALL_AS_USER) @${ECHO_MSG} "===> Installing ldconfig configuration file" .if defined(NO_LDCONFIG_MTREE) - @${MKDIR} ${PREFIX}/${LDCONFIG_DIR} + @${MKDIR} ${STAGEDIR}${PREFIX}/${LDCONFIG_DIR} .endif @${ECHO_CMD} ${USE_LDCONFIG} | ${TR} ' ' '\n' \ - > ${PREFIX}/${LDCONFIG_DIR}/${UNIQUENAME} + > ${STAGEDIR}${PREFIX}/${LDCONFIG_DIR}/${UNIQUENAME} @${ECHO_CMD} "@cwd" >> ${TMPPLIST} @${ECHO_CMD} ${LDCONFIG_DIR}/${UNIQUENAME} >> ${TMPPLIST} .if defined(NO_LDCONFIG_MTREE) @@ -4066,6 +4084,7 @@ .endif .endif .if defined(USE_LDCONFIG32) +.if defined(NO_STAGE) .if !defined(INSTALL_AS_USER) @${ECHO_MSG} "===> Running ldconfig" ${LDCONFIG} -32 -m ${USE_LDCONFIG32} @@ -4073,10 +4092,11 @@ @${ECHO_MSG} "===> Running ldconfig (errors are ignored)" -${LDCONFIG} -32 -m ${USE_LDCONFIG32} .endif +.endif .if !defined(INSTALL_AS_USER) @${ECHO_MSG} "===> Installing 32-bit ldconfig configuration file" .if defined(NO_LDCONFIG_MTREE) - @${MKDIR} ${PREFIX}/${LDCONFIG_32DIR} + @${MKDIR} ${STAGEDIR}${PREFIX}/${LDCONFIG_32DIR} .endif @${ECHO_CMD} ${USE_LDCONFIG32} | ${TR} ' ' '\n' \ > ${PREFIX}/${LDCONFIG32_DIR}/${UNIQUENAME} @@ -4287,6 +4307,20 @@ _BUILD_DEP= configure _BUILD_SEQ= build-message pre-build pre-build-script do-build \ post-build post-build-script +.if !defined(NO_STAGE) +_STAGE_DEP= build +_STAGE_SEQ= stage-message stage-dir apply-slist pre-install generate-plist pre-su-install \ + create-users-groups do-install post-install post-stage compress-man install-rc-script \ + install-ldconfig-file install-license \ + install-desktop-entries add-plist-info add-plist-docs add-plist-examples \ + add-plist-data add-plist-post fix-plist-sequence +_INSTALL_DEP= stage +_INSTALL_SEQ= install-message sync-from-stage run-depends lib-depends fake-pkg security-check + +_PACKAGE_DEP= stage +_PACKAGE_SEQ= package-message pre-package pre-package-script do-package post-package-script +.else + _INSTALL_DEP= build _INSTALL_SEQ= install-message check-install-conflicts run-depends lib-depends apply-slist pre-install \ pre-install-script generate-plist check-already-installed @@ -4300,6 +4334,7 @@ _PACKAGE_DEP= install _PACKAGE_SEQ= package-message pre-package pre-package-script \ do-package post-package-script +.endif .if !target(post-chroot) post-chroot: @@ -4322,7 +4357,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 stage install package .if !target(${target}) && defined(_OPTIONS_OK) ${target}: ${${target:U}_COOKIE} @@ -4376,6 +4411,9 @@ .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ} .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ} .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ} +.if !defined(NO_STAGE) +.ORDER: ${_STAGE_DEP} ${_STAGE_SEQ} +.endif .ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ} .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ} @@ -4387,6 +4425,8 @@ @${ECHO_MSG} "===> Configuring for ${PKGNAME}" build-message: @${ECHO_MSG} "===> Building for ${PKGNAME}" +stage-message: + @${ECHO_MSG} "===> Staging for ${PKGNAME}" install-message: @${ECHO_MSG} "===> Installing for ${PKGNAME}" package-message: @@ -4395,7 +4435,7 @@ # Empty pre-* and post-* targets .for stage in pre post -.for name in pkg check-sanity fetch extract patch configure build install package +.for name in pkg check-sanity fetch extract patch configure build stage install package .if !target(${stage}-${name}) ${stage}-${name}: @@ -4458,6 +4498,12 @@ @cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} -DFORCE_PKG_REGISTER install .endif +.if !target(restage) +restage: + @${RM} -rf ${STAGE_DESTDIR} ${STAGE_COOKIE} ${INSTALL_COOKIE} ${PACKAGE_COOKIE} + @cd ${.CURDIR} && ${MAKE} stage +.endif + # Deinstall # # Special target to remove installation @@ -5641,6 +5687,7 @@ @for file in ${PLIST_FILES}; do \ ${ECHO_CMD} $${file} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} >> ${TMPPLIST}; \ done +.if !defined(NO_STAGE) @for man in ${__MANPAGES}; do \ ${ECHO_CMD} $${man} >> ${TMPPLIST}; \ done @@ -5658,6 +5705,7 @@ @${ECHO_CMD} '@cwd ${PREFIX}' >> ${TMPPLIST} .endif .endfor +.endif @if [ -f ${PLIST} ]; then \ ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} ${PLIST} >> ${TMPPLIST}; \ fi @@ -5720,14 +5768,14 @@ fi .for x in ${PORTDOCS} @if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \ - if [ ! -e ${DOCSDIR}/${x} ]; then \ + if [ ! -e ${STAGEDIR}${DOCSDIR}/${x} ]; then \ ${ECHO_CMD} ${DOCSDIR_REL}/${x} >> ${TMPPLIST}; \ fi;fi .endfor - @${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} + @${FIND} -P ${STAGEDIR}${PORTDOCS:S/^/${STAGEDIR}${DOCSDIR}\//} ! -type d 2>/dev/null | \ + ${SED} -ne 's,^${STAGEDIR}${PREFIX}/,,p' >> ${TMPPLIST} + @${FIND} -P -d ${STAGEDIR}${PORTDOCS:S/^/${STAGEDIR}${DOCSDIR}\//} -type d 2>/dev/null | \ + ${SED} -ne 's,^${STAGEDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST} @${ECHO_CMD} "@dirrm ${DOCSDIR_REL}" >> ${TMPPLIST} .else @${DO_NADA} @@ -5743,16 +5791,16 @@ fi .for x in ${PORTEXAMPLES} @if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \ - if [ ! -e ${EXAMPLESDIR}/${x} ]; then \ + if [ ! -e ${STAGEDIR}${EXAMPLESDIR}/${x} ]; then \ ${ECHO_CMD} ${EXAMPLESDIR}/${x} | \ ${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \ fi;fi .endfor - @${FIND} -P ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \ - ${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST} - @${FIND} -P -d ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d 2>/dev/null | \ - ${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST} - @${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${PREFIX}/,,}" >> ${TMPPLIST} + @${FIND} -P ${STAGEDIR}${PORTEXAMPLES:S/^/${STAGEDIR}${EXAMPLESDIR}\//} ! -type d 2>/dev/null | \ + ${SED} -ne 's,^${STAGEDIR}${PREFIX}/,,p' >> ${TMPPLIST} + @${FIND} -P -d ${STAGEDIR}${PORTEXAMPLES:S/^/${STAGEDIR}${EXAMPLESDIR}\//} -type d 2>/dev/null | \ + ${SED} -ne 's,^${STAGEDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST} + @${ECHO_CMD} "@dirrm ${EXAMPLESDIR:S,^${STAGEDIR}${PREFIX}/,,}" >> ${TMPPLIST} .else @${DO_NADA} .endif @@ -5767,16 +5815,16 @@ fi .for x in ${PORTDATA} @if ${ECHO_CMD} "${x}"| ${AWK} '$$1 ~ /(\*|\||\[|\]|\?|\{|\}|\$$)/ { exit 1};'; then \ - if [ ! -e ${DATADIR}/${x} ]; then \ + if [ ! -e ${STAGEDIR}${DATADIR}/${x} ]; then \ ${ECHO_CMD} ${DATADIR}/${x} | \ ${SED} -e 's,^${PREFIX}/,,' >> ${TMPPLIST}; \ fi;fi .endfor - @${FIND} -P ${PORTDATA:S/^/${DATADIR}\//} ! -type d 2>/dev/null | \ - ${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST} - @${FIND} -P -d ${PORTDATA:S/^/${DATADIR}\//} -type d 2>/dev/null | \ - ${SED} -ne 's,^${PREFIX}/,@dirrm ,p' >> ${TMPPLIST} - @${ECHO_CMD} "@dirrm ${DATADIR:S,^${PREFIX}/,,}" >> ${TMPPLIST} + @${FIND} -P ${STAGEDIR}${PORTDATA:S/^/${STAGEDIR}${DATADIR}\//} ! -type d 2>/dev/null | \ + ${SED} -ne 's,^${STAGEDIR}${PREFIX}/,,p' >> ${TMPPLIST} + @${FIND} -P -d ${STAGEDIR}${PORTDATA:S/^/${STAGEDIR}${DATADIR}\//} -type d 2>/dev/null | \ + ${SED} -ne 's,^${STAGEDIR}${PREFIX}/,@dirrm ,p' >> ${TMPPLIST} + @${ECHO_CMD} "@dirrm ${DATADIR:S,^${STAGEDIR}${PREFIX}/,,}" >> ${TMPPLIST} .else @${DO_NADA} .endif @@ -5832,19 +5880,19 @@ install-rc-script: .if defined(USE_RCORDER) || defined(USE_RC_SUBR) && ${USE_RC_SUBR:U} != "YES" .if defined(USE_RCORDER) - @${ECHO_MSG} "===> Installing early rc.d startup script(s)" + @${ECHO_MSG} "===> Staging early rc.d startup script(s)" @${ECHO_CMD} "@cwd /" >> ${TMPPLIST} @for i in ${USE_RCORDER}; do \ - ${INSTALL_SCRIPT} ${WRKDIR}/$${i} /etc/rc.d/$${i%.sh}; \ + ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${STAGEDIR}/etc/rc.d/$${i%.sh}; \ ${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \ done @${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST} .endif .if defined(USE_RC_SUBR) && ${USE_RC_SUBR:U} != "YES" - @${ECHO_MSG} "===> Installing rc.d startup script(s)" + @${ECHO_MSG} "===> Staging rc.d startup script(s)" @${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST} @for i in ${USE_RC_SUBR}; do \ - ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${PREFIX}/etc/rc.d/$${i%.sh}; \ + ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${STAGEDIR}${PREFIX}/etc/rc.d/$${i%.sh}; \ ${ECHO_CMD} "etc/rc.d/$${i%.sh}" >> ${TMPPLIST}; \ done .endif @@ -6445,7 +6493,7 @@ .if !target(install-desktop-entries) install-desktop-entries: .if defined(DESKTOP_ENTRIES) - @(${MKDIR} "${DESKTOPDIR}" 2> /dev/null) || \ + @(${MKDIR} "${STAGEDIR}${DESKTOPDIR}" 2> /dev/null) || \ (${ECHO_MSG} "===> Cannot create ${DESKTOPDIR}, check permissions"; exit 1) @set -- ${DESKTOP_ENTRIES} XXX; \ if [ -z "${_DESKTOPDIR_REL}" ]; then \ Index: bsd.python.mk =================================================================== diff --git a/head/Mk/bsd.python.mk b/head/Mk/bsd.python.mk --- a/head/Mk/bsd.python.mk (revision 321142) +++ b/head/Mk/bsd.python.mk (working copy) @@ -517,6 +517,9 @@ PYDISTUTILS_CONFIGUREARGS?= PYDISTUTILS_BUILDARGS?= PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX} +.if !defined(NO_STAGE) +PYDISTUTILS_INSTALLARGS+= --root=${STAGEDIR} +.endif PYDISTUTILS_PKGNAME?= ${PORTNAME} PYDISTUTILS_PKGVERSION?=${PORTVERSION} PYDISTUTILS_EGGINFO?= ${PYDISTUTILS_PKGNAME:C/[^A-Za-z0-9.]+/_/g}-${PYDISTUTILS_PKGVERSION:C/[^A-Za-z0-9.]+/_/g}-py${PYTHON_VER}.egg-info Index: bsd.stage.mk =================================================================== diff --git a/head/Mk/bsd.stage.mk b/head/Mk/bsd.stage.mk new file mode 10644 --- /dev/null (revision 0) +++ b/head/Mk/bsd.stage.mk (working copy) @@ -0,0 +1,81 @@ +#-*- tab-width: 4; -*- +# ex:ts=4 +# +# $FreeBSD$ +# + +STAGEDIR?= ${WRKDIR}/stage +DESTDIRNAME?= DESTDIR + +MAKE_ARGS+= ${DESTDIRNAME}=${STAGEDIR} + +.if !target(stage-dir) +stage-dir: + @${MKDIR} ${STAGEDIR}${PREFIX} +.if !defined(NO_MTREE) + @${MTREE_CMD} ${MTREE_ARGS} ${STAGEDIR}${PREFIX} > /dev/null +.if defined(USE_LINUX) && ${PREFIX} != ${LINUXBASE_REL} + @${MKDIR} ${STAGEDIR}${LINUXBASE_REL} + @${MTREE_CMD} ${MTREE_LINUX_ARGS} ${STAGEDIR}${LINUXBASE_REL} > /dev/null +.endif +.endif +.endif + +.if !target(compress-man) +compress-man: + @${FIND} ${STAGEDIR}${MANPREFIX} -type f \! -name "*.gz" -links 1 -exec ${GZIP} {} \; + @${FIND} ${STAGEDIR}${MANPREFIX} -type f \! -name "*.gz" \! -links 1 -print -exec ${STAT} -f '%i' {} \; | \ + ${SORT} -u | while read inode ; do \ + unset ref ; \ + for f in $$(${FIND} -type f -inum $${inode} -print); do \ + if [ -z $$ref ]; then \ + ref=$${f}.gz ; \ + ${GZIP} $${f} ; \ + continue ; \ + fi ; \ + ${RM} -f $${f} ; \ + (cd $${f%/*}; ${LN} -f $${ref##*/} $${f##*/}.gz) ; \ + done ; \ + done + @${FIND} ${STAGEDIR}${MANPREFIX} -type l \! -name "*.gz" | while read link ; do \ + dest=$$(readlink $$link) ; \ + rm -f $$link ; \ + (cd $${link%/*} ; ${LN} -sf $${dest##*/}.gz $${link##*/}.gz) ;\ + done +.endif + +.if !target(add-plist-info) +add-plist-info: +.for i in ${INFO} + @${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/:@info\ :g >> ${TMPPLIST} +.endfor +.endif + +.if !target(genplist) +genplist: stage + @{ ${ECHO_CMD} "#mtree"; ${CAT} ${MTREE_FILE}; } | ${TAR} tf - | \ + awk '{ sub(/^\.$$/, "", $$1); \ + if ($$1 == "") print "${PREFIX}"; else print "${PREFIX}/"$$1; }' \ + > ${WRKDIR}/.mtree + @a=${PREFIX}; \ + while :; do \ + a=$${a%/*} ; \ + [ -z "$${a}" ] && break ; \ + ${ECHO_CMD} $${a} >> ${WRKDIR}/.mtree ; \ + done + @${FIND} ${STAGEDIR} -type f -o -type l | ${SED} -e "s,${STAGEDIR},,g" \ + -e "s,${DOCSDIR},%%PORTDOCS%%%%DOCSDIR%%,g" \ + -e "s,${EXAMPLESDIR},%%PORTEXAMPLES%%%%EXAMPLESDIR%%,g" \ + -e "s,${DATADIR},%%DATADIR%%,g" \ + -e "s,${PREFIX}/,,g" | sort + @${FIND} ${STAGEDIR} -type d | sed -e "s,${STAGEDIR},,g" \ + | while read line; do \ + ${GREP} -qw "^$${line}$$" ${WRKDIR}/.mtree || { \ + [ -n "$${line}" ] && ${ECHO_CMD} "@dirrm $${line}"; \ + }; \ + done | ${SORT} -r | ${SED} \ + -e "s,\(.*\)${DOCSDIR},%%PORTDOCS%%\1%%DOCSDIR%%,g" \ + -e "s,\(.*\)${EXAMPLESDIR},%%PORTEXAMPLES%%\1%%EXAMPLESDIR%%,g" \ + -e "s,${DATADIR},%%DATADIR%%,g" \ + -e "s,${PREFIX},,g" +.endif