diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2013-09-23 05:56:35 +0000 |
---|---|---|
committer | Baptiste Daroussin <bapt@FreeBSD.org> | 2013-09-23 05:56:35 +0000 |
commit | cf099c77fa91d51ada2a4384e8765d9fd06acab3 (patch) | |
tree | 5e4565f93a0d1185f039cd8526ef6a8bf342699e /Mk/bsd.port.mk | |
parent | 785d744f1fd001d74df979302d1f28a7855b50c4 (diff) | |
download | ports-cf099c77fa91d51ada2a4384e8765d9fd06acab3.tar.gz ports-cf099c77fa91d51ada2a4384e8765d9fd06acab3.zip |
Notes
Diffstat (limited to 'Mk/bsd.port.mk')
-rw-r--r-- | Mk/bsd.port.mk | 159 |
1 files changed, 131 insertions, 28 deletions
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk index 240304788d82..c7a7b2630d44 100644 --- a/Mk/bsd.port.mk +++ b/Mk/bsd.port.mk @@ -1122,6 +1122,10 @@ SRC_BASE?= /usr/src USESDIR?= ${PORTSDIR}/Mk/Uses LIB_DIRS?= /lib /usr/lib ${LOCALBASE}/lib +.if defined(FORCE_STAGE) +.undef NO_STAGE +.endif + # make sure bmake treats -V as expected .MAKE.EXPAND_VARIABLES= yes # tell bmake we use the old :L :U modifiers @@ -1913,9 +1917,14 @@ RUN_DEPENDS+= ${_GL_${_component}_RUN_DEPENDS} . endfor .endif +.if !defined(NO_STAGE) +.include "${PORTSDIR}/Mk/bsd.stage.mk" +.endif + .if defined(WITH_PKGNG) .include "${PORTSDIR}/Mk/bsd.pkgng.mk" .endif + .if defined(USE_LOCAL_MK) .include "${PORTSDIR}/Mk/bsd.local.mk" .endif @@ -2094,6 +2103,7 @@ INSTALL_COOKIE?= ${WRKDIR}/.install_done.${PORTNAME}.${PREFIX:S/\//_/g} 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. @@ -3129,7 +3139,12 @@ IGNORECMD= ${DO_NADA} 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} @@ -3834,6 +3849,7 @@ do-package: ${TMPPLIST} fi; \ fi; \ fi +.if defined(NO_STAGE) @if ${PKG_CMD} -b ${PKGNAME} ${PKGFILE}; then \ if [ -d ${PACKAGES} ]; then \ cd ${.CURDIR} && eval ${MAKE} package-links; \ @@ -3842,6 +3858,29 @@ do-package: ${TMPPLIST} cd ${.CURDIR} && eval ${MAKE} 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 ${PKG_CMD} -S ${STAGEDIR} ${PKG_ARGS} ${PKGFILE}; then \ + if [ -d ${PACKAGES} ]; then \ + cd ${.CURDIR} && eval ${MAKE} package-links; \ + fi; \ + else \ + cd ${.CURDIR} && eval ${MAKE} delete-package; \ + exit 1; \ + fi +.endif .endif # Some support rules for do-package @@ -3898,6 +3937,12 @@ delete-package-list: delete-package-links-list @${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} -f ${PKGFILE})" .endif +.if !target(install-package) +install-package: + @${PKG_ADD} ${PKGFILE} +.endif + + # Utility targets follow .if !target(check-already-installed) @@ -3987,9 +4032,12 @@ install-ldconfig-file: .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} @@ -3997,13 +4045,14 @@ install-ldconfig-file: @${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) @@ -4013,6 +4062,7 @@ install-ldconfig-file: .endif .endif .if defined(USE_LDCONFIG32) +.if defined(NO_STAGE) .if !defined(INSTALL_AS_USER) @${ECHO_MSG} "===> Running ldconfig" ${LDCONFIG} -32 -m ${USE_LDCONFIG32} @@ -4020,10 +4070,11 @@ install-ldconfig-file: @${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} @@ -4234,6 +4285,35 @@ _CONFIGURE_SEQ= build-depends lib-depends configure-message run-autotools-fixup _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 run-depends lib-depends apply-slist pre-install generate-plist \ + pre-su-install +_STAGE_SUSEQ= 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 +.if defined(WITH_PKGNG) +_INSTALL_DEP= stage +_INSTALL_SEQ= install-message run-depends lib-depends +_INSTALL_SUSEQ= fake-pkg security-check + +_PACKAGE_DEP= stage +_PACKAGE_SEQ= package-message pre-package pre-package-script do-package post-package-script + +.else # pkg_install + +_PACKAGE_DEP= stage +_PACKAGE_SEQ= package-message pre-package pre-package-script do-package post-package-script + +_INSTALL_DEP= package +_INSTALL_SEQ= install-message run-depends lib-depends install-package +_INSTALL_SUSEQ= install-package security-check +.endif + +.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 @@ -4247,6 +4327,7 @@ _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \ _PACKAGE_DEP= install _PACKAGE_SEQ= package-message pre-package pre-package-script \ do-package post-package-script +.endif .if !target(post-chroot) post-chroot: @@ -4269,7 +4350,7 @@ pkg: ${_PKG_DEP} ${_PKG_SEQ} # 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} @@ -4323,6 +4404,9 @@ ${${target:U}_COOKIE}:: .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} @@ -4334,6 +4418,8 @@ configure-message: @${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: @@ -4342,7 +4428,7 @@ package-message: # 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}: @@ -4405,6 +4491,12 @@ reinstall: @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 @@ -4471,6 +4563,12 @@ deinstall-all: .if !target(do-clean) do-clean: +.if !defined(NO_STAGE) && ${UID} != 0 && !defined(INSTALL_AS_USER) + @${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target" + @cd ${.CURDIR} && \ + ${SU_CMD} "${MAKE} ${.TARGET}" + @${ECHO_MSG} "===> Returning to user credentials" +.else @if [ -d ${WRKDIR} ]; then \ if [ -w ${WRKDIR} ]; then \ ${RM} -rf ${WRKDIR}; \ @@ -4479,6 +4577,7 @@ do-clean: fi; \ fi .endif +.endif .if !target(clean) clean: @@ -5621,6 +5720,7 @@ generate-plist: @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 @@ -5638,6 +5738,7 @@ generate-plist: @${ECHO_CMD} '@cwd ${PREFIX}' >> ${TMPPLIST} .endif .endfor +.endif @if [ -f ${PLIST} ]; then \ ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} ${PLIST} >> ${TMPPLIST}; \ fi @@ -5700,14 +5801,14 @@ add-plist-docs: 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} @@ -5723,16 +5824,16 @@ add-plist-examples: 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_REL}" >> ${TMPPLIST} .else @${DO_NADA} .endif @@ -5747,16 +5848,16 @@ add-plist-data: 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_REL}" >> ${TMPPLIST} .else @${DO_NADA} .endif @@ -5778,6 +5879,8 @@ add-plist-info: .if !defined(WITH_PKGNG) @${ECHO_CMD} "@unexec install-info --quiet --delete %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \ >> ${TMPPLIST} + @${ECHO_CMD} "@unexec [ \`info -d %D/${INFO_PATH} --output - 2>/dev/null | grep -c '^*'\` -eq 1 ] && rm -f %D/${INFO_PATH}/dir || :"\ + >> ${TMPPLIST} @${LS} ${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${PREFIX}/::g >> ${TMPPLIST} @${ECHO_CMD} "@exec install-info --quiet %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \ >> ${TMPPLIST} @@ -5812,19 +5915,19 @@ add-plist-post: 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 +6548,7 @@ check-desktop-entries: .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 \ |