aboutsummaryrefslogtreecommitdiff
path: root/Mk/bsd.port.mk
diff options
context:
space:
mode:
authorBaptiste Daroussin <bapt@FreeBSD.org>2013-09-23 05:56:35 +0000
committerBaptiste Daroussin <bapt@FreeBSD.org>2013-09-23 05:56:35 +0000
commitcf099c77fa91d51ada2a4384e8765d9fd06acab3 (patch)
tree5e4565f93a0d1185f039cd8526ef6a8bf342699e /Mk/bsd.port.mk
parent785d744f1fd001d74df979302d1f28a7855b50c4 (diff)
downloadports-cf099c77fa91d51ada2a4384e8765d9fd06acab3.tar.gz
ports-cf099c77fa91d51ada2a4384e8765d9fd06acab3.zip
Notes
Diffstat (limited to 'Mk/bsd.port.mk')
-rw-r--r--Mk/bsd.port.mk159
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 \