? stage-support-step1.diff Index: Mk/bsd.pkgng.mk =================================================================== RCS file: /home/pcvs/ports/Mk/bsd.pkgng.mk,v retrieving revision 1.6 diff -u -r1.6 bsd.pkgng.mk --- Mk/bsd.pkgng.mk 3 Jun 2012 14:49:52 -0000 1.6 +++ Mk/bsd.pkgng.mk 8 Jun 2012 07:56:47 -0000 @@ -28,6 +28,14 @@ .if !target(fake-pkg) +.if ${USE_STAGE:L} == yes +STAGE_ARGS= -i ${STAGEDIR} +.else +# -l was legacy meaning to not execute the scripts neither show message needed +# only when not in stage mode +STAGE_ARGS= -l +.endif + fake-pkg: .if !defined(NO_PKG_REGISTER) @${ECHO_MSG} "===> Registering installation for ${PKGNAME}" @@ -115,9 +123,9 @@ @[ -f ${MTREE_FILE} ] && ${CP} ${MTREE_FILE} ${METADIR}/+MTREE_DIRS || return 0 .endif .if defined(INSTALLS_DEPENDS) - @${PKG_CMD} -d -l -m ${METADIR} -f ${TMPPLIST} + @${PKG_CMD} -d -m ${METADIR} -f ${TMPPLIST} ${STAGE_ARGS} .else - @${PKG_CMD} -l -m ${METADIR} -f ${TMPPLIST} + @${PKG_CMD} -m ${METADIR} -f ${TMPPLIST} ${STAGE_ARGS} .endif .else @${DO_NADA} @@ -217,7 +225,97 @@ .endif .if !target(do-package) +.if ${USE_STAGE:L} == yes +PKG_ARGS= -r ${STAGEDIR} -p ${TMPPLIST} -m ${METADIR} +.endif + do-package: ${TMPPLIST} +.if ${USE_STAGE:M} == yes + @${ECHO_MSG} "===> Registering installation for ${PKGNAME}" + @${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} + + @${MAKE} -C ${.CURDIR} actual-package-depends | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | sort -u >> ${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 ${ALL_OPTIONS} +.if empty(PORT_OPTIONS:M${opt}) + @${ECHO_CMD} -n "${opt}: off," >> ${MANIFESTF} +.else + @${ECHO_CMD} -n "${opt}: on," >> ${MANIFESTF} +.endif +.endfor +.for multi in ${OPTIONS_MULTI} +. for opt in ${OPTIONS_MULTI_${multi}} +. if empty(PORT_OPTIONS:M${opt}) + @${ECHO_MSG} -n "${opt}: off, " >> ${MANIFESTF} +. else + @${ECHO_MSG} -n "${opt}: on, " >> ${MANIFESTF} +. endif +. endfor +.endfor +.for single in ${OPTIONS_SINGLE} +. for opt in ${OPTIONS_SINGLE_${single}} +. if empty(PORT_OPTIONS:M${opt}) + @${ECHO_MSG} -n "${opt}: off, " >> ${MANIFESTF} +. else + @${ECHO_MSG} -n "${opt}: on, " >> ${MANIFESTF} +. endif +. endfor +.endfor +.undef multi +.undef single +.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 +.endif @if [ -d ${PACKAGES} ]; then \ if [ ! -d ${PKGREPOSITORY} ]; then \ if ! ${MKDIR} ${PKGREPOSITORY}; then \ @@ -226,7 +324,7 @@ fi; \ fi; \ fi; - @if ${PKG_CREATE} -o ${PKGREPOSITORY} ${PKGNAME}; then \ + @if ${PKG_CREATE} ${PKG_ARGS} -o ${PKGREPOSITORY} ${PKGNAME}; then \ if [ -d ${PACKAGES} ]; then \ cd ${.CURDIR} && eval ${MAKE} package-links; \ fi; \ Index: Mk/bsd.port.mk =================================================================== RCS file: /home/pcvs/ports/Mk/bsd.port.mk,v retrieving revision 1.725 diff -u -r1.725 bsd.port.mk --- Mk/bsd.port.mk 6 Jun 2012 14:23:17 -0000 1.725 +++ Mk/bsd.port.mk 8 Jun 2012 07:56:48 -0000 @@ -1138,6 +1138,10 @@ _DISTDIR?= ${DISTDIR}/${DIST_SUBDIR} INDEXDIR?= ${PORTSDIR} SRC_BASE?= /usr/src +USE_STAGE?= no +.if defined(FORCE_STAGE) +USE_STAGE= yes +.endif .include "${PORTSDIR}/Mk/bsd.commands.mk" @@ -1967,6 +1971,11 @@ .if defined(WITH_PKGNG) .include "${PORTSDIR}/Mk/bsd.pkgng.mk" .endif + +.if ${USE_STAGE:L} == yes +.include "${PORTSDIR}/Mk/bsd.stage.mk" +.endif + .if defined(USE_LOCAL_MK) .include "${PORTSDIR}/Mk/bsd.local.mk" .endif @@ -2157,6 +2166,9 @@ 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} +.if ${USE_STAGE:L} == yes +STAGE_COOKIE?= ${WRKDIR}/.stage_done.${PORTNAME}.${PREFIX:S/\//_/g} +.endif # How to do nothing. Override if you, for some strange reason, would rather # do something. @@ -2997,13 +3009,13 @@ # MAN${sect} is for man pages installed for all languages in MANLANG for a given # section. .if defined(MAN${sect}) -_MANPAGES+= ${MAN${sect}:S%^%${MAN${sect}PREFIX}/${manlang}/man${sect:L}/%} +_MANPAGES+= ${MAN${sect}:S%^%${STAGEDIR}${MAN${sect}PREFIX}/${manlang}/man${sect:L}/%} .endif # Language specific MAN${sect} variables are for man pages installed in that # language, but not necessarily all languages in MANLANG. .if defined(MAN${sect}_${manlang:S%^man/%%:U}) -_MANPAGES+= ${MAN${sect}_${manlang:S%^man/%%:U}:S%^%${MAN${sect}PREFIX}/${manlang}/man${sect:L}/%} +_MANPAGES+= ${MAN${sect}_${manlang:S%^man/%%:U}:S%^%${STAGEDIR}${MAN${sect}PREFIX}/${manlang}/man${sect:L}/%} .endif .endfor @@ -3015,7 +3027,7 @@ # of MAN${sect}PREFIX. .for sect in 1 2 3 4 5 6 7 8 9 L N .if defined(MAN${sect}_EN) -_MANPAGES+= ${MAN${sect}_EN:S%^%${MAN${sect}PREFIX}/man/man${sect:L}/%} +_MANPAGES+= ${MAN${sect}_EN:S%^%${STAGEDIR}${MAN${sect}PREFIX}/man/man${sect:L}/%} .endif .endfor @@ -3026,9 +3038,9 @@ .if defined(_MANPAGES) .if defined(NO_MANCOMPRESS) -__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%} +__MANPAGES:= ${_MANPAGES:S%^${STAGEDIR}${PREFIX}/%%} .else -__MANPAGES:= ${_MANPAGES:S%^${PREFIX}/%%:S%$%.gz%} +__MANPAGES:= ${_MANPAGES:S%^${STAGEDIR}${PREFIX}/%%:S%$%.gz%} .endif .if ${MANCOMPRESSED} == "yes" @@ -3174,7 +3186,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 ${USE_STAGE} == yes +_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} @@ -3302,6 +3319,14 @@ @${DO_NADA} .endif +# Disable stage +.if defined(NO_STAGE) && !target(stage) +.if ${USE_STAGE} == yes +stage: + @${TOUCH} ${TOUCH_FLAGS} ${STAGE_COOKIE} +.endif +.endif + # Disable package .if defined(NO_PACKAGE) && !target(package) package: @@ -3866,6 +3891,11 @@ # Package .if !target(do-package) +.if ${USE_STAGE:L} == yes +STAGE_ARGS= ${PKG_ARGS} -S ${STAGEDIR} +.else +STAGE_ARGS= -b ${PKGNAME} +.endif do-package: ${TMPPLIST} @if [ -d ${PACKAGES} ]; then \ if [ ! -d ${PKGREPOSITORY} ]; then \ @@ -3875,7 +3905,7 @@ fi; \ fi; \ fi - @if ${PKG_CMD} -b ${PKGNAME} ${PKGFILE}; then \ + @if ${PKG_CMD} ${STAGE_ARGS} ${PKGFILE}; then \ if [ -d ${PACKAGES} ]; then \ cd ${.CURDIR} && eval ${MAKE} package-links; \ fi; \ @@ -4028,9 +4058,12 @@ .if defined(USE_LDCONFIG) || defined(USE_LDCONFIG32) .if defined(USE_LDCONFIG) .if defined(USE_LINUX_PREFIX) +.if ${USE_STAGE:L} == no @${ECHO_MSG} "===> Running linux ldconfig" ${LDCONFIG_CMD} +.endif .else +.if ${USE_STAGE:L} == no .if !defined(INSTALL_AS_USER) @${ECHO_MSG} "===> Running ldconfig" ${LDCONFIG} -m ${USE_LDCONFIG} @@ -4038,13 +4071,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) @@ -4054,6 +4088,7 @@ .endif .endif .if defined(USE_LDCONFIG32) +.if ${USE_STAGE:L} == no .if !defined(INSTALL_AS_USER) @${ECHO_MSG} "===> Running ldconfig" ${LDCONFIG} -32 -m ${USE_LDCONFIG32} @@ -4061,13 +4096,14 @@ @${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} + > ${STAGEDIR}${PREFIX}/${LDCONFIG32_DIR}/${UNIQUENAME} @${ECHO_CMD} "@cwd" >> ${TMPPLIST} @${ECHO_CMD} ${LDCONFIG32_DIR}/${UNIQUENAME} >> ${TMPPLIST} .if defined(NO_LDCONFIG_MTREE) @@ -4275,12 +4311,27 @@ _BUILD_DEP= configure _BUILD_SEQ= build-message pre-build pre-build-script do-build \ post-build post-build-script + +.if ${USE_STAGE:L} == yes +_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 _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \ pre-su-install-script create-users-groups do-install \ - install-desktop-entries install-license install-rc-script \ + install-desktop-entries \ post-install post-install-script add-plist-info \ add-plist-docs add-plist-examples add-plist-data \ add-plist-post fix-plist-sequence compress-man \ @@ -4289,6 +4340,7 @@ _PACKAGE_SEQ= package-message pre-package pre-package-script \ do-package post-package-script +.endif .if !target(post-chroot) post-chroot: @${DO_NADA} @@ -4310,7 +4362,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} @@ -4364,6 +4416,9 @@ .ORDER: ${_PATCH_DEP} ${_PATCH_SEQ} .ORDER: ${_CONFIGURE_DEP} ${_CONFIGURE_SEQ} .ORDER: ${_BUILD_DEP} ${_BUILD_SEQ} +.if ${USE_STAGE:L} == yes +.ORDER: ${_STAGE_DEP} ${_STAGE_SEQ} +.endif .ORDER: ${_INSTALL_DEP} ${_INSTALL_SEQ} .ORDER: ${_PACKAGE_DEP} ${_PACKAGE_SEQ} @@ -4375,6 +4430,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: @@ -4383,7 +4440,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}: @@ -4446,6 +4503,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 @@ -5699,14 +5762,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} @@ -5722,16 +5785,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 @@ -5746,15 +5809,15 @@ 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} + @${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,^${PREFIX}/,,}" >> ${TMPPLIST} .else @${DO_NADA} @@ -5766,10 +5829,12 @@ # Process GNU INFO files at package install/deinstall time .if defined(INFO) .for i in ${INFO} +.if ${USE_STAGE:L} == no install-info --quiet ${PREFIX}/${INFO_PATH}/$i.info ${PREFIX}/${INFO_PATH}/dir +.endif @${ECHO_CMD} "@unexec install-info --quiet --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \ >> ${TMPPLIST} - @${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST} + @${LS} ${STAGEDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${STAGEDIR}${PREFIX}/::g >> ${TMPPLIST} @${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \ >> ${TMPPLIST} .endfor @@ -5800,19 +5865,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 @@ -6368,7 +6433,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 \ @@ -6376,7 +6441,7 @@ fi; \ while [ $$# -gt 6 ]; do \ filename="`${ECHO_CMD} "$$4" | ${TR} -cd [:alnum:]`.desktop"; \ - pathname="${DESKTOPDIR}/$$filename"; \ + pathname="${STAGEDIR}${DESKTOPDIR}/$$filename"; \ categories="$$5"; \ if [ -z "$$categories" ]; then \ categories="`cd ${.CURDIR} && ${MAKE} desktop-categories`"; \ Index: Mk/bsd.python.mk =================================================================== RCS file: /home/pcvs/ports/Mk/bsd.python.mk,v retrieving revision 1.146 diff -u -r1.146 bsd.python.mk --- Mk/bsd.python.mk 30 May 2012 14:54:34 -0000 1.146 +++ Mk/bsd.python.mk 8 Jun 2012 07:56:48 -0000 @@ -509,7 +509,11 @@ PYSETUP?= setup.py PYDISTUTILS_CONFIGUREARGS?= PYDISTUTILS_BUILDARGS?= +.if ${USE_STAGE:L} == yes +PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX} --root=${STAGEDIR} +.else PYDISTUTILS_INSTALLARGS?= -c -O1 --prefix=${PREFIX} +.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: Mk/bsd.stage.mk =================================================================== RCS file: Mk/bsd.stage.mk diff -N Mk/bsd.stage.mk --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Mk/bsd.stage.mk 8 Jun 2012 07:56:48 -0000 @@ -0,0 +1,64 @@ +# +# +# + +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(sync-from-stage) +sync-from-stage: stage +.if defined(WITH_PKGNG) + @${DO_NADA} +.else + @${ECHO_MSG} "===> Syncing from stagedir" + @${SH} ${PORTSDIR}/Tools/scripts/sync_from_stage.sh -f ${STAGEDIR} -p ${TMPPLIST} -P ${PREFIX} -w ${WRKDIR} + + @if [ -f ${PKGINSTALL} ]; then \ + ${SH} ${PKGINSTALL} POST-INSTALL; \ + fi + @[ -f ${PKGMESSAGE} ] && ${CAT} ${PKGMESSAGE} || return 0 +.endif +.endif + +.if !target(genplist) +genplist: stage + @(echo "#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 $${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 || { \ + if [ -n "$${line}" ]; then \ + ${ECHO_CMD} "@dirrm $${line}"; \ + fi ; \ + }; \ + 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 Index: Tools/scripts/sync_from_stage.sh =================================================================== RCS file: Tools/scripts/sync_from_stage.sh diff -N Tools/scripts/sync_from_stage.sh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ Tools/scripts/sync_from_stage.sh 8 Jun 2012 07:56:48 -0000 @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +usage() { + echo "$0 -f stagedir -p plist -P prefix +Parameters: + -f stagedir: path to the stagedir root + -p plist: path to the plist + -P prefix: PREFIX to use + -w wrkdir: WRKDIR to use +" + exit 1 +} +while getopts "f:p:P:w:" flag; do + case "${flag}" in + f) STAGEDIR=${OPTARG} ;; + p) PLIST=${OPTARG} ;; + P) PREFIX=${OPTARG} ;; + w) WRKDIR=${OPTARG} ;; + esac +done + +: ${PREFIX:=/usr/local} +[ -z ${STAGEDIR} ] && usage +[ -z ${PLIST} ] && usage +[ -f ${PLIST} ] || usage +test -d ${STAGEDIR} || usage +test -d ${WRKDIR} || usage + +PAXLIST=${WRKDIR}/.pax + +cd ${STAGEDIR} +tmpprefix=${PREFIX} +tmplastplist=""; +:> ${PAXLIST} +while read line; do + case $line in + @unexec*) ;; + @ignore*) ;; + @dirrm*) + test -d "${STAGEDIR}/${tmpprefix}/${line#* }" || ERRS="${ERRS} ${line}" + ;; + @comment*) ;; + @cwd) tmpprefix=${PREFIX} ;; + @cwd*) tmpprefix=${line#* } ;; + @exec*) + echo ${line} | sed -e "s,%D,${PREFIX},g" -e "s,%F,${tmplastplist},g" -e "s,%B,`dirname ${tmplastplist}`,g" -e "s,%f,`basename ${tmpprefix}/${tmplastplist}`,g" > ${PAXLIST} + ;; + @mode) unset tmpmode ;; + @mode*) tmpmode=${line#* } ;; + @owner) unset tmpowner ;; + @owner*) tmpowner=${line#* } ;; + @group) unset tmpgroup ;; + @group*) tmpgroup=${line#* } ;; + @*) ${DO_NADA} ;; + *) + tmplastplist=$line ; + chown ${tmpowner:-root}:${tmgroup:-wheel} ./$tmpprefix/$line + if [ -n "$tmpmode" ]; then + chmod $tmpmode ./$tmpprefix/$line + fi + echo "./${tmpprefix}/${line}" >> ${PAXLIST} + ;; + esac +done < ${PLIST} + +if [ -n "${ERRS}" ]; then + echo "=====> Some files or directory from the plist cannot be found:" + for err in ${ERRS}; do + echo $err + done + exit 1 + +fi +while read line; do + case $line in + @*) echo ${line#* } | sh + ;; + *) + echo ${line} | pax -p e -drw / + ;; + esac +done < ${PAXLIST} +exit 0