pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/mk Main infrastructure for DESTDIR support.



details:   https://anonhg.NetBSD.org/pkgsrc/rev/87a6f4be18ec
branches:  trunk
changeset: 519767:87a6f4be18ec
user:      joerg <joerg%pkgsrc.org@localhost>
date:      Mon Oct 09 12:25:44 2006 +0000

description:
Main infrastructure for DESTDIR support.

Packages may set PKG_DESTDIR_SUPPORT to either "destdir" or
"user-destdir" to flag support for this, following the same
rules as PKG_INSTALLATION_TYPES (e.g. define before first include
of bsd.prefs.mk).

The user activates it via USE_DESTDIR. When set to "yes",
packages with "user-destdir" are handled as "destdir".
The installation of the package will not go to ${LOCALBASE},
but a subdirectory of ${WRKDIR} instead. pre/post install scripts are
not run and the package is not registered either. A binary package
can be created instead to be installed normally with pkg_add.

For "user-destdir" packages, everything is run as normal user and
ownership is supposed to be correctled by pkg_create later. Since
the current pkg_install code uses pax and it doesn't allow overwriting
owners, this does not work yet.

For "destdir" packages, installation, packaging and cleaning is run as
root.

This commit does not change the handling of DEPENDS_TARGET or
bin-install to allow recursive usage.

diffstat:

 mk/bsd.prefs.mk               |  38 +++++++++++++++++++++++++++++++++++++-
 mk/check/check-files.mk       |  12 ++++++------
 mk/check/check-interpreter.mk |   4 ++--
 mk/check/check-shlibs.mk      |   6 ++++--
 mk/check/check-wrkref.mk      |   6 ++++--
 mk/flavor/pkg/metadata.mk     |  16 ++++++++++------
 mk/flavor/pkg/package.mk      |   8 ++++++--
 mk/install/install.mk         |  39 ++++++++++++++++++++++++++-------------
 mk/package/package.mk         |   4 +++-
 mk/plist/plist.mk             |  12 ++++++------
 mk/plist/print-plist.mk       |  14 +++++++-------
 mk/unprivileged.mk            |  10 ++++++++--
 12 files changed, 119 insertions(+), 50 deletions(-)

diffs (truncated from 520 to 300 lines):

diff -r 48d515483a13 -r 87a6f4be18ec mk/bsd.prefs.mk
--- a/mk/bsd.prefs.mk   Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/bsd.prefs.mk   Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.prefs.mk,v 1.240 2006/10/09 11:59:08 joerg Exp $
+# $NetBSD: bsd.prefs.mk,v 1.241 2006/10/09 12:25:44 joerg Exp $
 #
 # Make file, included to get the site preferences, if any.  Should
 # only be included by package Makefiles before any .if defined()
@@ -326,6 +326,42 @@
 
 PKGDIRMODE?=           755
 
+# PKG_DESTDIR_SUPPORT can only be one of "destdir" or "user-destdir".
+USE_DESTDIR?=          no
+PKG_DESTDIR_SUPPORT?=  # empty
+
+.if empty(PKG_DESTDIR_SUPPORT) || (empty(USE_DESTDIR:M[Yy][Ee][Ss]) && empty(USE_DESTDIR:M[Ff][Uu][Ll][Ll]))
+_USE_DESTDIR=          no
+.elif ${PKG_DESTDIR_SUPPORT} == "user-destdir"
+.  if !empty(USE_DESTDIR:M[Ff][Uu][Ll][Ll])
+_USE_DESTDIR=          user-destdir
+.  else
+_USE_DESTDIR=          destdir
+.  endif
+.elif ${PKG_DESTDIR_SUPPORT} == "destdir"
+_USE_DESTDIR=          destdir
+.else
+PKG_FAIL_REASON+=      "PKG_DESTDIR_SUPPORT must be \`\`destdir'' or \`\`user-destdir''."
+.endif
+
+# When using staged installation, everything gets installed into
+# ${DESTDIR}${PREFIX} instead of ${PREFIX} directly.
+#
+.if ${_USE_DESTDIR} != "no"
+DESTDIR=               ${WRKDIR}/.destdir
+.  if ${_USE_DESTDIR} == "destdir"
+_MAKE_PACKAGE_AS_ROOT= yes
+_MAKE_CLEAN_AS_ROOT=   yes
+_MAKE_INSTALL_AS_ROOT= yes
+.  elif ${_USE_DESTDIR} == "user-destdir"
+_MAKE_PACKAGE_AS_ROOT= no
+_MAKE_CLEAN_AS_ROOT=   no
+_MAKE_INSTALL_AS_ROOT= no
+.  endif
+.else
+DESTDIR=
+.endif
+
 _MAKE_CLEAN_AS_ROOT?=  no
 # Whether to run the clean target as root.
 _MAKE_INSTALL_AS_ROOT?=        yes
diff -r 48d515483a13 -r 87a6f4be18ec mk/check/check-files.mk
--- a/mk/check/check-files.mk   Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/check/check-files.mk   Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: check-files.mk,v 1.8 2006/09/22 21:53:58 joerg Exp $
+# $NetBSD: check-files.mk,v 1.9 2006/10/09 12:25:44 joerg Exp $
 
 .if defined(PKG_DEVELOPER)
 CHECK_FILES?=          yes
@@ -65,7 +65,7 @@
 # Mutable charset.alias file
 CHECK_FILES_SKIP+=     ${PREFIX}/lib/charset.alias
 
-_CHECK_FILES_SKIP_FILTER=      ${GREP} -vx ${CHECK_FILES_SKIP:@f@-e ${f:Q}@}
+_CHECK_FILES_SKIP_FILTER=      ${GREP} -vx ${CHECK_FILES_SKIP:@f@-e ${DESTDIR:Q}${f:Q}@}
 
 ###########################################################################
 # These are the files generated and used by the check-files implementation
@@ -144,7 +144,7 @@
 
 ${_CHECK_FILES_PRE.prefix} ${_CHECK_FILES_POST.prefix}:
        ${_PKG_SILENT}${_PKG_DEBUG}                                     \
-       ${FIND} ${PREFIX}/. \( -type f -o -type l \) -print 2>/dev/null \
+       ${FIND} ${DESTDIR}${PREFIX}/. \( -type f -o -type l \) -print 2>/dev/null \
                | ${SED} -e 's,/\./,/,'                                 \
                | ${_CHECK_FILES_SKIP_FILTER}                           \
                | ${SORT} > ${.TARGET}                                  \
@@ -152,7 +152,7 @@
 
 ${_CHECK_FILES_PRE.sysconfdir} ${_CHECK_FILES_POST.sysconfdir}:
        ${_PKG_SILENT}${_PKG_DEBUG}                                     \
-       ${FIND} ${PKG_SYSCONFDIR}/. -print 2>/dev/null                  \
+       ${FIND} ${DESTDIR}${PKG_SYSCONFDIR}/. -print 2>/dev/null        \
                | ${SED} -e 's,/\./,/,'                                 \
                | ${_CHECK_FILES_SKIP_FILTER}                           \
                | ${SORT} > ${.TARGET}                                  \
@@ -160,7 +160,7 @@
 
 ${_CHECK_FILES_PRE.varbase} ${_CHECK_FILES_POST.varbase}:
        ${_PKG_SILENT}${_PKG_DEBUG}                                     \
-       ${FIND} ${VARBASE}/. -print 2>/dev/null                         \
+       ${FIND} ${DESTDIR}${VARBASE}/. -print 2>/dev/null               \
                | ${SED} -e 's,/\./,/,'                                 \
                | ${_CHECK_FILES_SKIP_FILTER}                           \
                | ${SORT} > ${.TARGET}                                  \
@@ -221,7 +221,7 @@
 
 ${_CHECK_FILES_EXPECTED}: plist
        ${_PKG_SILENT}${_PKG_DEBUG}                                     \
-       ${GREP} '^[^@]' ${PLIST} | ${SED} "s|^|${PREFIX}/|" | ${SORT}   \
+       ${GREP} '^[^@]' ${PLIST} | ${SED} "s|^|${DESTDIR}${PREFIX}/|" | ${SORT} \
                > ${.TARGET}
 
 ${_CHECK_FILES_MISSING}: ${_CHECK_FILES_EXPECTED} ${_CHECK_FILES_ADDED}
diff -r 48d515483a13 -r 87a6f4be18ec mk/check/check-interpreter.mk
--- a/mk/check/check-interpreter.mk     Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/check/check-interpreter.mk     Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: check-interpreter.mk,v 1.11 2006/07/13 19:07:54 heinz Exp $
+# $NetBSD: check-interpreter.mk,v 1.12 2006/10/09 12:25:44 joerg Exp $
 
 # This file checks that after installation, all files of the package
 # that start with a "#!" line will find their interpreter. Files that
@@ -32,7 +32,7 @@
 _CHECK_INTERP_SKIP_FILTER+=    *) ;;
 _CHECK_INTERP_SKIP_FILTER+=    esac
 
-_CHECK_INTERP_FILELIST_CMD?=   ${PKG_FILELIST_CMD}
+_CHECK_INTERP_FILELIST_CMD?=   ${SED} -e '/^@/d' ${PLIST}
 
 ######################################################################
 ### check-interpreter (PRIVATE)
diff -r 48d515483a13 -r 87a6f4be18ec mk/check/check-shlibs.mk
--- a/mk/check/check-shlibs.mk  Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/check/check-shlibs.mk  Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: check-shlibs.mk,v 1.4 2006/09/14 22:00:49 rillig Exp $
+# $NetBSD: check-shlibs.mk,v 1.5 2006/10/09 12:25:44 joerg Exp $
 
 # For PKG_DEVELOPERs, cause some checks to be run automatically by default.
 .if defined(PKG_DEVELOPER)
@@ -9,6 +9,8 @@
 # All binaries and shared libraries.
 _CHECK_SHLIBS_ERE=     /(bin/|sbin/|libexec/|lib/lib.*\.so|lib/lib.*\.dylib)
 
+_CHECK_SHLIB_FILELIST_CMD?=    ${SED} -e '/^@/d' ${PLIST}
+
 ######################################################################
 ### check-shlibs (PRIVATE)
 ######################################################################
@@ -31,7 +33,7 @@
        *)      ldd=${LDD:Q} ;;                                         \
        esac;                                                           \
        ${TEST} -x "$$ldd" || exit 0;                                   \
-       ${PKG_FILELIST_CMD} |                                           \
+       ${_CHECK_SHLIB_FILELIST_CMD} |                                  \
        ${EGREP} -h ${_CHECK_SHLIBS_ERE:Q} |                            \
        while read file; do                                             \
                err=`$$ldd $$file 2>&1 | ${GREP} "not found" || ${TRUE}`; \
diff -r 48d515483a13 -r 87a6f4be18ec mk/check/check-wrkref.mk
--- a/mk/check/check-wrkref.mk  Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/check/check-wrkref.mk  Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: check-wrkref.mk,v 1.4 2006/06/09 13:59:08 jlam Exp $
+# $NetBSD: check-wrkref.mk,v 1.5 2006/10/09 12:25:44 joerg Exp $
 
 .if defined(PKG_DEVELOPER)
 CHECK_WRKREF?=         tools
@@ -30,6 +30,8 @@
 _CHECK_WRKREF:=                work            # "work" is the "max" option
 .endif
 
+_CHECK_WRKREF_FILELIST_CMD?=   ${SED} -e '/^@/d' ${PLIST}
+
 ######################################################################
 ### check-wrkref (PRIVATE)
 ######################################################################
@@ -43,7 +45,7 @@
        ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${ERROR_DIR}/${.TARGET}
        ${_PKG_SILENT}${_PKG_DEBUG}                                     \
        exec 1>${ERROR_DIR}/${.TARGET};                                 \
-       ${PKG_FILELIST_CMD} | ${SORT} |                                 \
+       ${_CHECK_WRKREF_FILELIST_CMD} | ${SORT} |                       \
        while read file; do                                             \
                ${_CHECK_WRKREF_SKIP_FILTER};                           \
                ${SHCOMMENT} [$$file];                                  \
diff -r 48d515483a13 -r 87a6f4be18ec mk/flavor/pkg/metadata.mk
--- a/mk/flavor/pkg/metadata.mk Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/flavor/pkg/metadata.mk Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: metadata.mk,v 1.11 2006/10/08 20:25:43 rillig Exp $
+# $NetBSD: metadata.mk,v 1.12 2006/10/09 12:25:44 joerg Exp $
 
 ######################################################################
 ### The targets below are all PRIVATE.
@@ -61,14 +61,14 @@
        "")     ldd=`${TYPE} ldd 2>/dev/null | ${AWK} '{ print $$NF }'` ;; \
        *)      ldd=${LDD:Q} ;;                                         \
        esac;                                                           \
-       bins=`${AWK} '/(^|\/)(bin|sbin|libexec)\// { print "${PREFIX}/" $$0 } END { exit 0 }' ${PLIST}`; \
+       bins=`${AWK} '/(^|\/)(bin|sbin|libexec)\// { print "${DESTDIR}${PREFIX}/" $$0 } END { exit 0 }' ${PLIST}`; \
        case ${OBJECT_FMT:Q}"" in                                       \
        ELF)                                                            \
-               libs=`${AWK} '/(^|\/)lib\/lib.*\.so\.[0-9]+$$/ { print "${PREFIX}/" $$0 } END { exit 0 }' ${PLIST}`; \
+               libs=`${AWK} '/(^|\/)lib\/lib.*\.so\.[0-9]+$$/ { print "${DESTDIR}${PREFIX}/" $$0 } END { exit 0 }' ${PLIST}`; \
                if ${TEST} -n "$$bins" -o -n "$$libs"; then             \
                        requires=`($$ldd $$bins $$libs 2>/dev/null || ${TRUE}) | ${AWK} '$$2 == "=>" && $$3 ~ "/" { print $$3 }' | ${SORT} -u`; \
                fi;                                                     \
-               linklibs=`${AWK} '/[^@].*\.so\.[0-9\.]+$$/ { print "${PREFIX}/" $$0 }' ${PLIST}`; \
+               linklibs=`${AWK} '/[^@].*\.so\.[0-9\.]+$$/ { print "${DESTDIR}${PREFIX}/" $$0 }' ${PLIST}`; \
                for i in $$linklibs; do                                 \
                        if ${TEST} -r $$i -a ! -x $$i -a ! -h $$i; then \
                                ${TEST} ${PKG_DEVELOPER:Uno:Q} = "no" || \
@@ -78,7 +78,7 @@
                done;                                                   \
                ;;                                                      \
        Mach-O)                                                         \
-               libs=`${AWK} '/(^|\/)lib\/lib.*\.dylib/ { print "${PREFIX}/" $$0 } END { exit 0 }' ${PLIST}`; \
+               libs=`${AWK} '/(^|\/)lib\/lib.*\.dylib/ { print "${DESTDIR}${PREFIX}/" $$0 } END { exit 0 }' ${PLIST}`; \
                if ${TEST} "$$bins" != "" -o "$$libs" != ""; then       \
                        requires=`($$ldd $$bins $$libs 2>/dev/null || ${TRUE}) | ${AWK} '/compatibility version/ { print $$1 }' | ${SORT} -u`; \
                fi;                                                     \
@@ -301,7 +301,7 @@
                /^@/ { next }                                           \
                { print base $$0 }' |                                   \
        ${SORT} -u |                                                    \
-       ${SED} -e "s/'/'\\\\''/g" -e "s/.*/'&'/" |                      \
+       ${SED} -e "s,^/,${DESTDIR}/," -e "s/'/'\\\\''/g" -e "s/.*/'&'/" | \
        ${XARGS} -n 256 ${LS} -ld 2>/dev/null |                         \
        ${AWK} 'BEGIN { s = 0 } { s += $$5 } END { print s }'           \
                > ${.TARGET}
@@ -333,7 +333,11 @@
 _PKG_CREATE_ARGS+=     ${DEINSTALL_FILE:D      ${_DEINSTALL_ARG_cmd:sh}}
 
 _PKG_ARGS_INSTALL+=    ${_PKG_CREATE_ARGS}
+.if ${_USE_DESTDIR} == "no"
 _PKG_ARGS_INSTALL+=    -p ${PREFIX}
+.else
+_PKG_ARGS_INSTALL+=    -I ${PREFIX} -p ${DESTDIR}${PREFIX}
+.endif
 
 _DEPENDS_ARG_cmd=      depends=`${_DEPENDS_PATTERNS_CMD}`;             \
                        if ${TEST} -n "$$depends"; then                 \
diff -r 48d515483a13 -r 87a6f4be18ec mk/flavor/pkg/package.mk
--- a/mk/flavor/pkg/package.mk  Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/flavor/pkg/package.mk  Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: package.mk,v 1.4 2006/10/08 20:24:03 rillig Exp $
+# $NetBSD: package.mk,v 1.5 2006/10/09 12:25:44 joerg Exp $
 
 PKG_SUFX?=             .tgz
 PKGFILE?=              ${PKGREPOSITORY}/${PKGNAME}${PKG_SUFX}
@@ -29,8 +29,12 @@
 package-create: package-remove ${PKGFILE} package-links
 
 _PKG_ARGS_PACKAGE+=    ${_PKG_CREATE_ARGS}
+.if ${_USE_DESTDIR} == "no"
 _PKG_ARGS_PACKAGE+=    -p ${PREFIX}
-_PKG_ARGS_PACKAGE+=    -L ${PREFIX}                    # @src ...
+.else
+_PKG_ARGS_PACKAGE+=    -I ${PREFIX} -p ${DESTDIR}${PREFIX}
+.endif
+_PKG_ARGS_PACKAGE+=    -L ${DESTDIR}${PREFIX}                  # @src ...
 .if ${PKG_INSTALLATION_TYPE} == "pkgviews"
 _PKG_ARGS_PACKAGE+=    -E
 .endif
diff -r 48d515483a13 -r 87a6f4be18ec mk/install/install.mk
--- a/mk/install/install.mk     Mon Oct 09 11:59:08 2006 +0000
+++ b/mk/install/install.mk     Mon Oct 09 12:25:44 2006 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: install.mk,v 1.21 2006/10/09 11:59:08 joerg Exp $
+# $NetBSD: install.mk,v 1.22 2006/10/09 12:25:44 joerg Exp $
 
 ######################################################################
 ### install (PUBLIC)
@@ -121,8 +121,10 @@
 ### the built software, register the software installation, and run
 ### some sanity checks.
 ###
+.if ${_USE_DESTDIR} != "user-destdir"
 _INSTALL_ALL_TARGETS+=         acquire-install-localbase-lock
-.if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER)
+.endif
+.if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER) && ${_USE_DESTDIR} == "no"
 _INSTALL_ALL_TARGETS+=         install-check-conflicts
 _INSTALL_ALL_TARGETS+=         install-check-installed
 .endif
@@ -131,7 +133,9 @@
 _INSTALL_ALL_TARGETS+=         check-files-pre
 .endif
 _INSTALL_ALL_TARGETS+=         install-makedirs
+.if ${_USE_DESTDIR} == "no"
 _INSTALL_ALL_TARGETS+=         pre-install-script
+.endif
 _INSTALL_ALL_TARGETS+=         pre-install
 _INSTALL_ALL_TARGETS+=         do-install
 _INSTALL_ALL_TARGETS+=         post-install
@@ -141,12 +145,16 @@
 .if empty(CHECK_FILES:M[nN][oO]) && !empty(CHECK_FILES_SUPPORTED:M[Yy][Ee][Ss])
 _INSTALL_ALL_TARGETS+=         check-files-post
 .endif
+.if ${_USE_DESTDIR} == "no"
 _INSTALL_ALL_TARGETS+=         post-install-script
-.if !defined(NO_PKG_REGISTER)
+.endif
+.if !defined(NO_PKG_REGISTER) && ${_USE_DESTDIR} == "no"
 _INSTALL_ALL_TARGETS+=         register-pkg
 .endif



Home | Main Index | Thread Index | Old Index