summaryrefslogtreecommitdiff
path: root/mk/pkgformat/pkg
diff options
context:
space:
mode:
authorobache <obache>2013-05-23 13:18:56 +0000
committerobache <obache>2013-05-23 13:18:56 +0000
commit9dea8a0d1e9e86ae7ef5b759b2a227e7cc43ee06 (patch)
tree2a7139982fd87ee948f76117e980cc35c4bc7d0e /mk/pkgformat/pkg
parent6b9b2ae231f8b4221e4870ec44454d92007f5038 (diff)
downloadpkgsrc-9dea8a0d1e9e86ae7ef5b759b2a227e7cc43ee06.tar.gz
prevent to generate binary package in ${PACKAGES} from the side effect of
`install' with USE_DESTDIR=yes. This changes prevent to unwanted overwite of existing binary packages with test installation (`stage-install', `replace' & `undo-replace', and so on). To do both `install' and `package', you can still use `package-install' target, same as USE_DESTDIR=no.
Diffstat (limited to 'mk/pkgformat/pkg')
-rw-r--r--mk/pkgformat/pkg/package.mk51
-rw-r--r--mk/pkgformat/pkg/replace.mk6
2 files changed, 49 insertions, 8 deletions
diff --git a/mk/pkgformat/pkg/package.mk b/mk/pkgformat/pkg/package.mk
index cdee24570f4..7929bb93972 100644
--- a/mk/pkgformat/pkg/package.mk
+++ b/mk/pkgformat/pkg/package.mk
@@ -1,4 +1,4 @@
-# $NetBSD: package.mk,v 1.1 2011/10/15 00:23:09 reed Exp $
+# $NetBSD: package.mk,v 1.2 2013/05/23 13:18:56 obache Exp $
.if defined(PKG_SUFX)
WARNINGS+= "PKG_SUFX is deprecated, please use PKG_COMPRESSION"
@@ -13,6 +13,11 @@ WARNINGS+= "Unsupported value for PKG_SUFX"
PKG_SUFX?= .tgz
FILEBASE?= ${PKGBASE}
PKGFILE?= ${PKGREPOSITORY}/${FILEBASE}-${PKGVERSION}${PKG_SUFX}
+.if ${_USE_DESTDIR} == "no"
+STAGE_PKGFILE?= ${PKGFILE}
+.else
+STAGE_PKGFILE?= ${WRKDIR}/.packages/${FILEBASE}-${PKGVERSION}${PKG_SUFX}
+.endif
PKGREPOSITORY?= ${PACKAGES}/${PKGREPOSITORYSUBDIR}
PKGREPOSITORYSUBDIR?= All
@@ -35,6 +40,18 @@ package-check-installed:
.PHONY: package-create
package-create: package-remove ${PKGFILE} package-links
+######################################################################
+### stage-package-create (PRIVATE, pkgsrc/mk/package/package.mk)
+######################################################################
+### stage-package-create creates the binary package for stage install.
+###
+.PHONY: stage-package-create
+.if ${_USE_DESTDIR} == "no"
+stage-package-create: package-create
+.else
+stage-package-create: stage-install stage-package-remove ${STAGE_PKGFILE}
+.endif
+
_PKG_ARGS_PACKAGE+= ${_PKG_CREATE_ARGS}
_PKG_ARGS_PACKAGE+= -F ${PKG_COMPRESSION}
.if ${_USE_DESTDIR} == "no"
@@ -49,7 +66,7 @@ _PKG_ARGS_PACKAGE+= -u ${REAL_ROOT_USER} -g ${REAL_ROOT_GROUP}
_PKG_ARGS_PACKAGE+= -E
.endif
-${PKGFILE}: ${_CONTENTS_TARGETS}
+${STAGE_PKGFILE}: ${_CONTENTS_TARGETS}
${RUN} ${MKDIR} ${.TARGET:H}
@${STEP_MSG} "Creating binary package ${.TARGET}"
${RUN} tmpname=${.TARGET:S,${PKG_SUFX}$,.tmp${PKG_SUFX},}; \
@@ -59,6 +76,14 @@ ${PKGFILE}: ${_CONTENTS_TARGETS}
exitcode=$$?; ${RM} -f "$$tmpname"; exit $$exitcode; \
fi
+.if ${_USE_DESTDIR} != "no"
+${PKGFILE}: ${STAGE_PKGFILE}
+ ${RUN} ${MKDIR} ${.TARGET:H}
+ @${STEP_MSG} "Creating binary package ${.TARGET}"
+ ${LN} -f ${STAGE_PKGFILE} ${PKGFILE} 2>/dev/null || \
+ ${CP} -pf ${STAGE_PKGFILE} ${PKGFILE}
+.endif
+
######################################################################
### package-remove (PRIVATE)
######################################################################
@@ -70,6 +95,15 @@ package-remove:
${RUN} ${RM} -f ${PKGFILE}
######################################################################
+### stage-package-remove (PRIVATE)
+######################################################################
+### stage-package-remove removes the binary package for stage install
+###
+.PHONY: stage-package-remove
+stage-package-remove:
+ ${RUN} ${RM} -f ${STAGE_PKGFILE}
+
+######################################################################
### package-links (PRIVATE)
######################################################################
### package-links creates symlinks to the binary package from the
@@ -132,6 +166,13 @@ package-install: package real-package-install
package-install: barrier
.endif
+.PHONY: stage-package-install
+.if defined(_PKGSRC_BARRIER)
+stage-package-install: stage-package-create real-package-install
+.else
+stage-package-install: barrier
+.endif
+
.if ${_USE_DESTDIR} != "no"
. if !empty(USE_CROSS_COMPILE:M[yY][eE][sS])
real-package-install: su-real-package-install
@@ -147,13 +188,13 @@ su-real-package-install:
@${PHASE_MSG} "Install binary package of "${PKGNAME:Q}
.if !empty(USE_CROSS_COMPILE:M[yY][eE][sS])
@${MKDIR} ${_CROSS_DESTDIR}${PREFIX}
- ${PKG_ADD} -m ${MACHINE_ARCH} -I -p ${_CROSS_DESTDIR}${PREFIX} ${PKGFILE}
+ ${PKG_ADD} -m ${MACHINE_ARCH} -I -p ${_CROSS_DESTDIR}${PREFIX} ${STAGE_PKGFILE}
@${ECHO} "Fixing recorded cwd..."
@${SED} -e 's|@cwd ${_CROSS_DESTDIR}|@cwd |' ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS > ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp
@${MV} ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS
.else
${RUN} case ${_AUTOMATIC:Q}"" in \
- [yY][eE][sS]) ${PKG_ADD} -A ${PKGFILE} ;; \
- *) ${PKG_ADD} ${PKGFILE} ;; \
+ [yY][eE][sS]) ${PKG_ADD} -A ${STAGE_PKGFILE} ;; \
+ *) ${PKG_ADD} ${STAGE_PKGFILE} ;; \
esac
.endif
diff --git a/mk/pkgformat/pkg/replace.mk b/mk/pkgformat/pkg/replace.mk
index 17a81b32463..93d976e8fa1 100644
--- a/mk/pkgformat/pkg/replace.mk
+++ b/mk/pkgformat/pkg/replace.mk
@@ -1,4 +1,4 @@
-# $NetBSD: replace.mk,v 1.1 2011/10/15 00:23:09 reed Exp $
+# $NetBSD: replace.mk,v 1.2 2013/05/23 13:18:56 obache Exp $
#
# _pkgformat-replace:
@@ -207,12 +207,12 @@ replace-destdir: .PHONY
@${PHASE_MSG} "Updating using binary package of "${PKGNAME:Q}
.if !empty(USE_CROSS_COMPILE:M[yY][eE][sS])
@${MKDIR} ${_CROSS_DESTDIR}${PREFIX}
- ${PKG_ADD} -U -D -m ${MACHINE_ARCH} -I -p ${_CROSS_DESTDIR}${PREFIX} ${PKGFILE}
+ ${PKG_ADD} -U -D -m ${MACHINE_ARCH} -I -p ${_CROSS_DESTDIR}${PREFIX} ${STAGE_PKGFILE}
@${ECHO} "Fixing recorded cwd..."
@${SED} -e 's|@cwd ${_CROSS_DESTDIR}|@cwd |' ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS > ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp
@${MV} ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS.tmp ${_PKG_DBDIR}/${PKGNAME:Q}/+CONTENTS
.else
- ${PKG_ADD} -U -D ${PKGFILE}
+ ${PKG_ADD} -U -D ${STAGE_PKGFILE}
.endif
${RUN}${_REPLACE_OLDNAME_CMD}; \
${PKG_INFO} -qR ${PKGNAME:Q} | while read pkg; do \