Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/pkgsrc/mk/bsd.pkg.mk,v rcsdiff: /ftp/cvs/cvsroot/pkgsrc/mk/bsd.pkg.mk,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.1540.2.9 retrieving revision 1.1540.2.23 diff -u -p -r1.1540.2.9 -r1.1540.2.23 --- pkgsrc/mk/bsd.pkg.mk 2004/12/31 20:25:30 1.1540.2.9 +++ pkgsrc/mk/bsd.pkg.mk 2005/02/15 16:25:22 1.1540.2.23 @@ -1,4 +1,4 @@ -# $NetBSD: bsd.pkg.mk,v 1.1540.2.9 2004/12/31 20:25:30 tv Exp $ +# $NetBSD: bsd.pkg.mk,v 1.1540.2.23 2005/02/15 16:25:22 tv Exp $ # # This file is in the public domain. # @@ -7,6 +7,8 @@ # Please see the pkgsrc/doc/guide manual for details on the # variables used in this make file template. # +# XXX tv: rev 1.1554 is not merged yet (phase "error handlers") +# ############################################################################ # Include any preferences, if not already included, and common definitions @@ -23,16 +25,12 @@ _PKG_PHASES_ALL= fetch checksum ${_PKG_P _PKG_PHASES_WRKDIR= depends extract patch tools wrapper \ configure build test install package -# PATH is recalculated below, so save its original incarnation here. -.if !defined(_PATH_ORIG) -_PATH_ORIG:= ${PATH} -MAKEFLAGS+= _PATH_ORIG=${_PATH_ORIG:Q} -.endif - ############################################################################ # Transform package Makefile variables and set defaults ############################################################################ +CHECK_FILES?= NO # run check-files after install +CHECK_FILES_STRICT?= NO # make check-files very strict on errors CHECK_SHLIBS?= YES # run check-shlibs after install CLEANDEPENDS?= NO DEINSTALLDEPENDS?= NO # add -R to pkg_delete @@ -86,7 +84,7 @@ PLIST_SRC+= ${PKGDIR}/PLIST . if exists(${PKGDIR}/PLIST.common_end) PLIST_SRC+= ${PKGDIR}/PLIST.common_end . endif -.endif # !PLIST_SRC +.endif # !PLIST_SRC ##### Others @@ -94,14 +92,14 @@ _DISTDIR?= ${DISTDIR}/${DIST_SUBDIR} BUILD_DEFS?= # empty BUILD_DEPENDS?= # empty BUILD_TARGET?= all +COMMENT?= (no description) +CONFIGURE_DIRS?= ${WRKSRC} +CONFIGURE_SCRIPT?= ./configure DEPENDS?= # empty DESCR_SRC?= ${PKGDIR}/DESCR DIGEST_ALGORITHM?= SHA1 DISTFILES?= ${DISTNAME}${EXTRACT_SUFX} DISTINFO_FILE?= ${PKGDIR}/distinfo -COMMENT?= (no description) -CONFIGURE_DIRS?= ${WRKSRC} -CONFIGURE_SCRIPT?= ./configure EXTRACT_ONLY?= ${DISTFILES} EXTRACT_SUFX?= .tar.gz INSTALL_DIRS?= ${BUILD_DIRS} @@ -134,23 +132,24 @@ BUILD_DEFS_FIXED+= ${OSVERSION_SPECIFIC: # Latest versions of tools required for correct pkgsrc operation. DIGEST_REQD= 20010302 -PKGTOOLS_REQD= ${_OPSYS_PKGTOOLS_REQD:U20030918} +PKGTOOLS_REQD= ${_OPSYS_PKGTOOLS_REQD:U20050204} +PKG_DB_TMPDIR= ${WRKDIR}/.pkgdb DDIR= ${WRKDIR}/.DDIR -DESCR= ${WRKDIR}/.DESCR +DESCR= ${PKG_DB_TMPDIR}/+DESC DLIST= ${WRKDIR}/.DLIST PLIST= ${WRKDIR}/.PLIST # Files to create for versioning and build information -BUILD_VERSION_FILE= ${WRKDIR}/.build_version -BUILD_INFO_FILE= ${WRKDIR}/.build_info +BUILD_VERSION_FILE= ${PKG_DB_TMPDIR}/+BUILD_VERSION +BUILD_INFO_FILE= ${PKG_DB_TMPDIR}/+BUILD_INFO # Files containing size of pkg w/o and w/ all required pkgs -SIZE_PKG_FILE= ${WRKDIR}/.SizePkg -SIZE_ALL_FILE= ${WRKDIR}/.SizeAll +SIZE_PKG_FILE= ${PKG_DB_TMPDIR}/+SIZE_PKG +SIZE_ALL_FILE= ${PKG_DB_TMPDIR}/+SIZE_ALL # File to denote "no deletion of a package" -PRESERVE_FILE= ${WRKDIR}/.PRESERVE +PRESERVE_FILE= ${PKG_DB_TMPDIR}/+PRESERVE .for targ in ${_PKG_PHASES_WRKDIR} ${targ}_COOKIE= ${WRKDIR}/.${targ}_done @@ -197,7 +196,7 @@ PKG_FAIL_REASON+='them to at least ${PKG PKG_FAIL_REASON+='' PKG_FAIL_REASON+=' cd ${PKGSRCDIR}/pkgtools/pkg_install && ${MAKE} clean && ${MAKE} install' . endif -.endif # NO_PKGTOOLS_REQD_CHECK +.endif # !NO_PKGTOOLS_REQD_CHECK .if defined(ALL_TARGET) PKG_FAIL_REASON+='ALL_TARGET is deprecated and must be replaced with BUILD_TARGET.' @@ -351,10 +350,10 @@ ${var}+= ${${var}.*} CPPFLAGS+= ${CPP_PRECOMP_FLAGS} -.if !empty(USE_BUILDLINK3:M[nN][oO]) +. if !empty(USE_BUILDLINK3:M[nN][oO]) LDFLAGS+= ${COMPILER_RPATH_FLAG}${LOCALBASE}/lib LDFLAGS+= -L${LOCALBASE}/lib -.endif +. endif ALL_ENV+= CC=${CC:Q} ALL_ENV+= CFLAGS=${CFLAGS:Q} @@ -362,6 +361,8 @@ ALL_ENV+= CPPFLAGS=${CPPFLAGS:Q} ALL_ENV+= CXX=${CXX:Q} ALL_ENV+= CXXFLAGS=${CXXFLAGS:Q} ALL_ENV+= COMPILER_RPATH_FLAG=${COMPILER_RPATH_FLAG:Q} +ALL_ENV+= F77=${F77:Q} +ALL_ENV+= FC=${FC:Q} ALL_ENV+= FFLAGS=${FFLAGS:Q} ALL_ENV+= LDFLAGS=${LDFLAGS:Q} ALL_ENV+= LINKER_RPATH_FLAG=${LINKER_RPATH_FLAG:Q} @@ -604,7 +605,7 @@ MESSAGE_SRC+= ${PKGDIR}/MESSAGE.${OPSYS} . endif . if defined(MESSAGE_SRC) -MESSAGE= ${WRKDIR}/.MESSAGE +MESSAGE= ${PKG_DB_TMPDIR}/+DISPLAY # Set MESSAGE_SUBST to substitute "${variable}" to "value" in MESSAGE MESSAGE_SUBST+= LOCALBASE=${LOCALBASE} @@ -1095,8 +1096,6 @@ _REAL_TARGETS.wrapper+= wrapper-message CONFIGURE_ENV+= ${ALL_ENV} CONFIGURE_ENV+= ac_given_INSTALL="`${TYPE} ${INSTALL} | ${AWK} '{ print $$NF }'` -c -o ${BINOWN} -g ${BINGRP}" CONFIGURE_ENV+= AWK=${AWK:Q} -CONFIGURE_ENV+= F77=${FC:Q} -CONFIGURE_ENV+= FC=${FC:Q} CONFIGURE_ENV+= INSTALL="`${TYPE} ${INSTALL} | ${AWK} '{ print $$NF }'` -c -o ${BINOWN} -g ${BINGRP}" CONFIGURE_ENV+= MAKE=${MAKE_PROGRAM:T:Q} CONFIGURE_ENV+= M4=${M4:Q} @@ -1111,7 +1110,7 @@ CONFIG_SHELL?= ${SH} CONFIGURE_ENV+= CONFIG_SHELL=${CONFIG_SHELL} CONFIGURE_ENV+= install_sh=${INSTALL:Q} CONFIGURE_ENV+= LIBS=${LIBS:Q} -CONFIGURE_ENV+= ${USE_LIBTOOL:Dlt_cv_sys_max_cmd_len=${_OPSYS_MAX_CMDLEN}} +CONFIGURE_ENV+= ${USE_LIBTOOL:Dlt_cv_sys_max_cmd_len=${_OPSYS_MAX_CMDLEN_CMD:D${_OPSYS_MAX_CMDLEN_CMD:sh}}} # # GNU_CONFIGURE_PREFIX is the argument to the --prefix option passed to the # GNU configure script. @@ -1137,6 +1136,7 @@ CONFIG_GUESS_OVERRIDE?= \ config.guess */config.guess */*/config.guess CONFIG_SUB_OVERRIDE?= \ config.sub */config.sub */*/config.sub +CONFIG_RPATH_OVERRIDE?= # set by platform file as needed # # By default, override config.status for GNU configure packages. We # never want it to execute after the configure phase has ended as it @@ -1181,6 +1181,10 @@ _REAL_TARGETS.test+= test-message pre-te . include "../../mk/plist.mk" +##### Handle alternatives + +. include "../../mk/alternatives.mk" + ##### Make subtargets for non-su portion of "install". #===> "install-check-pkgname" @@ -1265,7 +1269,7 @@ init-install: ${ECHO_MSG} "*** dependencies, risking various problems."; \ exit 1; \ fi -. endif # !NO_PKG_REGISTER && !NO_FORCE_REGISTER && overwrite +. endif # !NO_PKG_REGISTER && !FORCE_PKG_REGISTER && overwrite . if ${PKG_INSTALLATION_TYPE} == "pkgviews" ${_PKG_SILENT}${_PKG_DEBUG} \ found="`${PKG_INFO} -e ${PKGNAME} || ${TRUE}`"; \ @@ -1275,10 +1279,24 @@ init-install: fi . endif ${_PKG_SILENT}${_PKG_DEBUG}if [ `${SH} -c umask` -ne ${DEF_UMASK} ]; then \ - ${ECHO_MSG} "${_PKGSRC_IN}> Warning: your umask is \"`${SH} -c umask`"\".; \ + ${ECHO_MSG} "${_PKGSRC_IN}> Warning: your umask is \"`${SH} -c umask`"\".; \ ${ECHO_MSG} "If this is not desired, set it to an appropriate value (${DEF_UMASK})"; \ ${ECHO_MSG} "and install this package again by \`\`${MAKE} deinstall reinstall''."; \ fi +. if defined(PKG_DEVELOPER) && (${CHECK_FILES} == "YES") + ${_PKG_SILENT}${_PKG_DEBUG}${ECHO_MSG} "${_PKGSRC_IN}> Generating pre-install file lists" + ${_PKG_SILENT}${_PKG_DEBUG}${FIND} ${PREFIX} -type f -or -type l -print \ + 2>/dev/null ${CHECK_FILES_SKIP_CMD} >${WRKDIR}/.prefix.pre \ + || ${TRUE} +. if ${CHECK_FILES_STRICT} == "YES" + ${_PKG_SILENT}${_PKG_DEBUG}${FIND} ${PKG_SYSCONFDIR} -print \ + 2>/dev/null ${CHECK_FILES_SKIP_CMD} >${WRKDIR}/.sysconfdir.pre \ + || ${TRUE} + ${_PKG_SILENT}${_PKG_DEBUG}${FIND} ${VARBASE} -print \ + 2>/dev/null ${CHECK_FILES_SKIP_CMD} >${WRKDIR}/.varbase.pre \ + || ${TRUE} +. endif +. endif . if defined(INSTALLATION_DIRS) && !empty(INSTALLATION_DIRS) ${_PKG_SILENT}${_PKG_DEBUG}${ECHO_MSG} "${_PKGSRC_IN}> Creating installation directories" ${_PKG_SILENT}${_PKG_DEBUG} \ @@ -1313,6 +1331,12 @@ init-install: ${_PKG_SILENT}${_PKG_DEBUG}[ -d ${PREFIX} ] || ${MKDIR} ${PREFIX} . endif # !NO_MTREE +#===> "pre-install-fake-pkg" + +. if !defined(NO_PKG_REGISTER) +_REAL_TARGETS.su-install+= pre-install-fake-pkg +. endif # !NO_PKG_REGISTER + #===> "pre-install-script" _REAL_TARGETS.su-install+= pre-install-script @@ -1357,6 +1381,26 @@ _REAL_TARGETS.su-install+= plist .PHONY: plist plist: ${PLIST} +#===> "post-install-check-files" + +.if defined(PKG_DEVELOPER) && (${CHECK_FILES} == "YES") +_REAL_TARGETS.su-install+= post-install-check-files +.PHONY: post-install-check-files +post-install-check-files: + ${_PKG_SILENT}${_PKG_DEBUG}${ECHO_MSG} "${_PKGSRC_IN}> Generating post-install file lists" + ${_PKG_SILENT}${_PKG_DEBUG}${FIND} ${PREFIX} -type f -or -type l -print \ + 2>/dev/null ${CHECK_FILES_SKIP_CMD} >${WRKDIR}/.prefix.post \ + || ${TRUE} +. if ${CHECK_FILES_STRICT} == "YES" + ${_PKG_SILENT}${_PKG_DEBUG}${FIND} ${PKG_SYSCONFDIR} -print \ + 2>/dev/null ${CHECK_FILES_SKIP_CMD} >${WRKDIR}/.sysconfdir.post\ + || ${TRUE} + ${_PKG_SILENT}${_PKG_DEBUG}${FIND} ${VARBASE} -print \ + 2>/dev/null ${CHECK_FILES_SKIP_CMD} >${WRKDIR}/.varbase.post \ + || ${TRUE} +. endif +.endif + #===> "post-install-script" _REAL_TARGETS.su-install+= post-install-script @@ -1446,9 +1490,11 @@ post-install-message: . endif . endif -#===> "fake-pkg" +#===> "register-pkg" -_REAL_TARGETS.su-install+= fake-pkg +. if !defined(NO_PKG_REGISTER) +_REAL_TARGETS.su-install+= register-pkg +. endif # !NO_PKG_REGISTER #===> "check-shlibs" @@ -1456,6 +1502,12 @@ _REAL_TARGETS.su-install+= fake-pkg _REAL_TARGETS.su-install+= check-shlibs . endif +#===> "check-files" + +. if defined(PKG_DEVELOPER) && (${CHECK_FILES} == "YES") +_REAL_TARGETS.su-install+= check-files +. endif + .endif # !empty(PKG_PHASES:Minstall) ############################################################################ @@ -1524,12 +1576,16 @@ ${def:C/=.*$//}= ${_${def:C/=.*$//}_CMD: . endfor .endif -PREPEND_PATH?= # empty +.if !defined(_PATH_ORIG) +_PATH_ORIG:= ${PATH} +MAKEFLAGS+= _PATH_ORIG=${_PATH_ORIG:Q} +.endif + .if !empty(PREPEND_PATH) # This is very Special. Because PREPEND_PATH is set with += in reverse order, # the awk expression reverses the order again (since bootstrap bmake doesn't # yet support the :[-1..1] construct). -_PATH_CMD= ${ECHO} `${ECHO} ${PREPEND_PATH:Q} | ${AWK} '{for (i=NF;i>0;i--) print $$i}'`:${_PATH_ORIG} | ${TR} ' ' : +_PATH_CMD= ${ECHO} `${ECHO} ${PREPEND_PATH:Q} | ${AWK} '{ORS=":";for (i=NF;i>0;i--) print $$i}'`${_PATH_ORIG} PATH= ${_PATH_CMD:sh} # DOES NOT use :=, to defer evaluation .endif @@ -2068,6 +2124,7 @@ ${WRKDIR}: . endif .endif ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${WRKDIR} + ${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${PKG_DB_TMPDIR} .ifdef WRKOBJDIR . if ${PKGSRC_LOCKTYPE} == "sleep" || ${PKGSRC_LOCKTYPE} == "once" . if !exists(${LOCKFILE}) @@ -2405,11 +2462,11 @@ do-ltconfig-override: . endfor .endif -.if defined(CONFIG_GUESS_OVERRIDE) || defined(CONFIG_SUB_OVERRIDE) _CONFIGURE_PREREQ+= do-config-star-override .PHONY: do-config-star-override do-config-star-override: -. if defined(CONFIG_GUESS_OVERRIDE) && !empty(CONFIG_GUESS_OVERRIDE) +.if defined(GNU_CONFIGURE) +. if !empty(CONFIG_GUESS_OVERRIDE) . for _pattern_ in ${CONFIG_GUESS_OVERRIDE} ${_PKG_SILENT}${_PKG_DEBUG}cd ${WRKSRC}; \ for file in ${_pattern_}; do \ @@ -2421,7 +2478,7 @@ do-config-star-override: done . endfor . endif -. if defined(CONFIG_SUB_OVERRIDE) && !empty(CONFIG_SUB_OVERRIDE) +. if !empty(CONFIG_SUB_OVERRIDE) . for _pattern_ in ${CONFIG_SUB_OVERRIDE} ${_PKG_SILENT}${_PKG_DEBUG}cd ${WRKSRC}; \ for file in ${_pattern_}; do \ @@ -2433,6 +2490,18 @@ do-config-star-override: done . endfor . endif +. if !empty(CONFIG_RPATH_OVERRIDE) +. for _pattern_ in ${CONFIG_RPATH_OVERRIDE} + ${_PKG_SILENT}${_PKG_DEBUG}cd ${WRKSRC}; \ + for file in ${_pattern_}; do \ + if [ -f "$$file" ]; then \ + ${RM} -f $$file; \ + ${LN} -s ${PKGSRCDIR}/mk/gnu-config/config.rpath \ + $$file; \ + fi; \ + done +. endfor +. endif .endif PKGCONFIG_OVERRIDE_SED= \ @@ -2666,7 +2735,89 @@ check-shlibs: ${SHCOMMENT} Might not error-out for non-pkg-developers; \ exit 1; \ fi -.endif # NO_PKG_REGISTER +.endif # !NO_PKG_REGISTER + +# CHECK_FILES_SKIP is a list of file names that will be skipped when +# analyzing file lists in the check-files target. This is useful to +# avoid getting errors triggered by changes in directories not really +# handled by pkgsrc. +# +# We have to do this here, i.e., quite late in bsd.pkg.mk parsing, so +# that the variables used in them are defined. Otherwise we may get +# problems with the 'for' expressions. +.if defined(INFO_DIR) +CHECK_FILES_SKIP+= ${PREFIX}/${INFO_DIR}/dir +.endif +CHECK_FILES_SKIP+= ${PREFIX}/emul/linux/proc + +.for e c in ${CONF_FILES} ${SUPPORT_FILES} +CHECK_FILES_SKIP+= ${c}/.pkgsrc +.endfor +.for e c o g m in ${CONF_FILES_PERMS} ${SUPPORT_FILES_PERMS} +CHECK_FILES_SKIP+= ${c}/.pkgsrc +.endfor +.for d in ${MAKE_DIRS} ${OWN_DIRS} +CHECK_FILES_SKIP+= ${d} +.endfor +.for d o g m in ${MAKE_DIRS_PERMS} ${OWN_DIRS_PERMS} +CHECK_FILES_SKIP+= ${d} +.endfor + +CHECK_FILES_SKIP_CMD= | ${GREP} -v ${CHECK_FILES_SKIP:@f@-e ${f:Q}@} + +# Check if the generated PLIST matches the list of really installed files. +# +.PHONY: check-files +check-files: +.if !defined(NO_PKG_REGISTER) + ${_PKG_SILENT}${_PKG_DEBUG} \ + errors=0; \ + diff -u ${WRKDIR}/.prefix.pre ${WRKDIR}/.prefix.post \ + >${WRKDIR}/.files.diff || ${TRUE}; \ + ${GREP} '^+/' ${WRKDIR}/.files.diff | ${SED} "s|^+||" | ${SORT} \ + >${WRKDIR}/.files.added; \ + ${GREP} '^-/' ${WRKDIR}/.files.diff | ${SED} "s|^-||" | ${SORT} \ + >${WRKDIR}/.files.deleted; \ + if ${TEST} `${WC} -l ${WRKDIR}/.files.deleted | \ + ${AWK} '{ print $$1; }'` -gt 0; \ + then \ + echo "*** The following files have been deleted from" \ + "${PREFIX}!"; \ + ${SED} "s|^| |" <${WRKDIR}/.files.deleted; \ + errors=1; \ + fi; \ + ${GREP} '^[A-Za-z]' ${PLIST} | ${SED} "s|^|${PREFIX}/|" | \ + ${SORT} >${WRKDIR}/.files.expected; \ + if ! ${CMP} -s ${WRKDIR}/.files.expected ${WRKDIR}/.files.added; then \ + echo "*** The PLIST does not match installed files!"; \ + echo " The following files were not expected in ${PREFIX}:";\ + diff -u ${WRKDIR}/.files.expected ${WRKDIR}/.files.added | \ + ${GREP} '^+[^+]' | ${SED} "s|^+| |"; \ + errors=1; \ + fi; \ + if [ ${CHECK_FILES_STRICT} = "YES" ] && \ + ! ${CMP} -s ${WRKDIR}/.sysconfdir.pre ${WRKDIR}/.sysconfdir.post; \ + then \ + echo "*** The package has modified ${PKG_SYSCONFDIR}" \ + "contents directly!"; \ + echo " The offending files/directories are:"; \ + diff -u ${WRKDIR}/.sysconfdir.pre ${WRKDIR}/.sysconfdir.post | \ + ${GREP} '^+[^+]' | ${SED} "s|^+| |"; \ + errors=1; \ + fi; \ + if [ ${CHECK_FILES_STRICT} = "YES" ] && \ + ! ${CMP} -s ${WRKDIR}/.varbase.pre ${WRKDIR}/.varbase.post; then \ + echo "*** The package has modified ${VARBASE} contents" \ + "directly!"; \ + echo " The offending files/directories are:"; \ + diff -u ${WRKDIR}/.varbase.pre ${WRKDIR}/.varbase.post |\ + ${GREP} '^+[^+]' | ${SED} "s|^+| |"; \ + errors=1; \ + fi; \ + ${RM} -f ${WRKDIR}/.files.added ${WRKDIR}/.files.deleted \ + ${WRKDIR}/.files.diff ${WRKDIR}/.files.expected; \ + ${TEST} $$errors -eq 0 +.endif LOCKFILE= ${WRKDIR}/.lockfile .for targ in ${_PKG_PHASES_WRKDIR} @@ -2683,10 +2834,13 @@ acquire-${targ}-lock: ${FALSE}; \ fi; \ while true; do \ - if ${TEST} -f /var/run/dmesg.boot -a -f ${LOCKFILE} -a \ - /var/run/dmesg.boot -nt ${LOCKFILE}; then \ - ${ECHO} "=> Removing stale ${LOCKFILE}"; \ - ${RM} ${LOCKFILE}; \ + : "Remove lock files older than the last reboot"; \ + if ${TEST} -f /var/run/dmesg.boot -a -f ${LOCKFILE}; then \ + rebooted=`${FIND} /var/run/dmesg.boot -newer ${LOCKFILE} -print`; \ + if ${TEST} x"$$rebooted" != x; then \ + ${ECHO} "=> Removing stale ${LOCKFILE}"; \ + ${RM} ${LOCKFILE}; \ + fi; \ fi; \ ${SHLOCK} -f ${LOCKFILE} -p $$ppid && break; \ ${ECHO} "=> Lock is held by pid `cat ${LOCKFILE}`"; \ @@ -3213,10 +3367,7 @@ print-pkg-size-this: | ${SORT} -u \ | ${SED} -e "s/'/'\\\\''/g" -e "s/.*/'&'/" \ | ${XARGS} -n 256 ${LS} -ld \ - | ${AWK} 'BEGIN { print("0 "); } \ - { print($$5, " + "); } \ - END { print("p"); }' \ - | ${DC} + | ${AWK} '{ s += $$5; } END { print s; }' \ # Sizes of required pkgs (only) # @@ -3230,10 +3381,7 @@ print-pkg-size-depends: | ${XARGS} -n 1 ${SETENV} ${PKG_BEST_EXISTS} \ | ${SORT} -u \ | ${XARGS} -n 256 ${SETENV} ${PKG_INFO} -qs \ - | ${AWK} -- 'BEGIN { print("0 "); } \ - /^[0-9]+$$/ { print($$1, " + "); } \ - END { print("p"); }' \ - | ${DC}; \ + | ${AWK} '/^[0-9]+$$/ { s += $$1; } END { print s; }'; \ else \ ${ECHO} "0"; \ fi @@ -3260,30 +3408,8 @@ MAKE_ENV+= VIEWBASE=${VIEWBASE} PKGVIEWS+= ${DEFAULT_VIEW.${PKGBASE}} -# Fake installation of package so that user can pkg_delete it later. -# Also, make sure that an installed package is recognized correctly in -# accordance to the @pkgdep directive in the packing lists. - -.PHONY: fake-pkg -fake-pkg: ${PLIST} ${DESCR} ${MESSAGE} - ${_PKG_SILENT}${_PKG_DEBUG} \ - if [ ! -f ${PLIST} -o ! -f ${DESCR} ]; then \ - ${ECHO} "** Missing package files for ${PKGNAME} - installation not recorded."; \ - exit 1; \ - fi - ${_PKG_SILENT}${_PKG_DEBUG} \ - if [ ! -d ${_PKG_DBDIR} ]; then \ - ${RM} -f ${_PKG_DBDIR}; \ - ${MKDIR} ${_PKG_DBDIR}; \ - fi -.if defined(FORCE_PKG_REGISTER) - ${_PKG_SILENT}${_PKG_DEBUG}${PKG_ADMIN} delete ${PKGNAME} -. if ${PKG_INSTALLATION_TYPE} == "overwrite" - ${_PKG_SILENT}${_PKG_DEBUG}${RM} -rf ${_PKG_DBDIR}/${PKGNAME} -. endif -.endif - ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${BUILD_VERSION_FILE} ${BUILD_INFO_FILE} - ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${SIZE_PKG_FILE} ${SIZE_ALL_FILE} +.PHONY: pre-install-fake-pkg +pre-install-fake-pkg: ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${PRESERVE_FILE} .if defined(PKG_PRESERVE) ${_PKG_SILENT}${_PKG_DEBUG}${DATE} > ${PRESERVE_FILE} @@ -3312,6 +3438,7 @@ fake-pkg: ${PLIST} ${DESCR} ${MESSAGE} done; \ fi; \ eval ${GREP} '\$$NetBSD' $$files | ${SED} -e 's|^${PKGSRCDIR}/||' > ${BUILD_VERSION_FILE} + ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${BUILD_INFO_FILE} .for def in ${BUILD_DEFS} ${BUILD_DEFS_FIXED} @${ECHO} ${def}=${${def}:Q} | ${SED} -e 's|^PATH=[^ ]*|PATH=...|' >> ${BUILD_INFO_FILE} .endfor @@ -3324,6 +3451,59 @@ fake-pkg: ${PLIST} ${DESCR} ${MESSAGE} .if !empty(USE_GNU_TOOLS:Mmake) @${ECHO} "GMAKE=`${GMAKE} --version | ${GREP} Make`" >> ${BUILD_INFO_FILE} .endif + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} "_PKGTOOLS_VER=${PKGTOOLS_VERSION}" >> ${BUILD_INFO_FILE} + +.PHONY: post-install-fake-pkg +post-install-fake-pkg: ${PLIST} ${DESCR} ${MESSAGE} + ${_PKG_SILENT}${_PKG_DEBUG} \ + if [ ! -f ${PLIST} -o ! -f ${DESCR} ]; then \ + ${ECHO} "** Missing package files for ${PKGNAME} - installation not recorded."; \ + exit 1; \ + fi + ${_PKG_SILENT}${_PKG_DEBUG} \ + if [ ! -d ${_PKG_DBDIR} ]; then \ + ${RM} -f ${_PKG_DBDIR}; \ + ${MKDIR} ${_PKG_DBDIR}; \ + fi +.if defined(FORCE_PKG_REGISTER) + ${_PKG_SILENT}${_PKG_DEBUG}${PKG_ADMIN} delete ${PKGNAME} +.endif + ${_PKG_SILENT}${_PKG_DEBUG} \ + ${ECHO} ${COMMENT:Q} > ${PKG_DB_TMPDIR}/+COMMENT + ${_PKG_SILENT}${_PKG_DEBUG} \ + case "${DESCR}" in \ + ${PKG_DB_TMPDIR}/*|"") ;; \ + *) if ${TEST} -f ${DESCR}; then \ + ${CP} ${DESCR} ${PKG_DB_TMPDIR}/+DESC; \ + fi ;; \ + esac + ${_PKG_SILENT}${_PKG_DEBUG} \ + case "${MESSAGE}" in \ + ${PKG_DB_TMPDIR}/*|"") ;; \ + *) if ${TEST} -f ${MESSAGE}; then \ + ${CP} ${MESSAGE} ${PKG_DB_TMPDIR}/+DISPLAY; \ + fi ;; \ + esac + ${_PKG_SILENT}${_PKG_DEBUG} \ + case ${PKG_INSTALLATION_TYPE} in \ + pkgview) ${TOUCH} ${PKG_DB_TMPDIR}/+VIEWS ;; \ + esac + ${_PKG_SILENT}${_PKG_DEBUG} \ + case "${INSTALL_FILE}" in \ + ${PKG_DB_TMPDIR}/*|"") ;; \ + *) if ${TEST} -f ${INSTALL_FILE}; then \ + ${CP} ${INSTALL_FILE} ${PKG_DB_TMPDIR}/+INSTALL; \ + fi ;; \ + esac + ${_PKG_SILENT}${_PKG_DEBUG} \ + case "${DEINSTALL_FILE}" in \ + ${PKG_DB_TMPDIR}/*|"") ;; \ + *) if ${TEST} -f ${DEINSTALL_FILE}; then \ + ${CP} ${DEINSTALL_FILE} ${PKG_DB_TMPDIR}/+DEINSTALL; \ + fi ;; \ + esac + ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${SIZE_PKG_FILE} ${SIZE_ALL_FILE} .if ${SHLIB_HANDLING} == "YES" && ${CHECK_SHLIBS} == "YES" ${_PKG_SILENT}${_PKG_DEBUG} \ case "${LDD}" in \ @@ -3362,12 +3542,18 @@ fake-pkg: ${PLIST} ${DESCR} ${MESSAGE} done .endif ${_PKG_SILENT}${_PKG_DEBUG} \ - ${ECHO} "_PKGTOOLS_VER=${PKGTOOLS_VERSION}" >> ${BUILD_INFO_FILE} - ${_PKG_SILENT}${_PKG_DEBUG} \ size_this=`${MAKE} ${MAKEFLAGS} print-pkg-size-this`; \ size_depends=`${MAKE} ${MAKEFLAGS} print-pkg-size-depends`; \ ${ECHO} $$size_this >${SIZE_PKG_FILE}; \ - ${ECHO} $$size_this $$size_depends + p | ${DC} >${SIZE_ALL_FILE} + ${ECHO} $$size_this $$size_depends \ + | ${AWK} '{ print $$1 + $$2; }' >${SIZE_ALL_FILE} + +# Fake installation of package so that user can pkg_delete it later. +# Also, make sure that an installed package is recognized correctly in +# accordance to the @pkgdep directive in the packing lists. +# +.PHONY: register-pkg +register-pkg: post-install-fake-pkg ${_PKG_SILENT}${_PKG_DEBUG} \ doit=yes; \ case ${PKG_INSTALLATION_TYPE} in \ @@ -3378,39 +3564,7 @@ fake-pkg: ${PLIST} ${DESCR} ${MESSAGE} case $$doit in \ yes) \ ${ECHO_MSG} "${_PKGSRC_IN}> Registering installation for ${PKGNAME}"; \ - ${MKDIR} ${_PKG_DBDIR}/${PKGNAME}; \ - ${PKG_CREATE} ${PKG_ARGS_INSTALL} -O ${PKGFILE} > ${_PKG_DBDIR}/${PKGNAME}/+CONTENTS; \ - ${CP} ${DESCR} ${_PKG_DBDIR}/${PKGNAME}/+DESC; \ - ${ECHO} ${COMMENT:Q} > ${_PKG_DBDIR}/${PKGNAME}/+COMMENT; \ - ${CP} ${BUILD_VERSION_FILE} ${_PKG_DBDIR}/${PKGNAME}/+BUILD_VERSION; \ - ${CP} ${BUILD_INFO_FILE} ${_PKG_DBDIR}/${PKGNAME}/+BUILD_INFO; \ - if ${TEST} -f ${SIZE_PKG_FILE}; then \ - ${CP} ${SIZE_PKG_FILE} ${_PKG_DBDIR}/${PKGNAME}/+SIZE_PKG; \ - fi ; \ - if ${TEST} -f ${SIZE_ALL_FILE}; then \ - ${CP} ${SIZE_ALL_FILE} ${_PKG_DBDIR}/${PKGNAME}/+SIZE_ALL; \ - fi ; \ - if ${TEST} -f ${PRESERVE_FILE}; then \ - ${CP} ${PRESERVE_FILE} ${_PKG_DBDIR}/${PKGNAME}/+PRESERVE; \ - fi ; \ - if [ "${PKG_INSTALLATION_TYPE}" = "pkgviews" ]; then \ - ${TOUCH} ${_PKG_DBDIR}/${PKGNAME}/+VIEWS; \ - fi ; \ - if [ -n "${INSTALL_FILE}" ]; then \ - if ${TEST} -f ${INSTALL_FILE}; then \ - ${CP} ${INSTALL_FILE} ${_PKG_DBDIR}/${PKGNAME}/+INSTALL; \ - fi; \ - fi; \ - if [ -n "${DEINSTALL_FILE}" ]; then \ - if ${TEST} -f ${DEINSTALL_FILE}; then \ - ${CP} ${DEINSTALL_FILE} ${_PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \ - fi; \ - fi; \ - if [ -n "${MESSAGE}" ]; then \ - if ${TEST} -f ${MESSAGE}; then \ - ${CP} ${MESSAGE} ${_PKG_DBDIR}/${PKGNAME}/+DISPLAY; \ - fi; \ - fi; \ + ${PKG_CREATE} ${PKG_ARGS_INSTALL} -O ${PKGFILE} > ${PKG_DB_TMPDIR}/+CONTENTS; \ list="`${MAKE} ${MAKEFLAGS} run-depends-list ECHO_MSG=${TRUE} | ${SORT} -u`" ; \ for realdep in `${ECHO} $$list | ${XARGS} -n 1 ${SETENV} ${PKG_BEST_EXISTS} | ${SORT} -u`; do \ if ${TEST} -z "$$realdep"; then \ @@ -3427,7 +3581,13 @@ fake-pkg: ${PLIST} ${DESCR} ${MESSAGE} ${MV} ${_PKG_DBDIR}/$$realdep/reqby.$$$$ ${_PKG_DBDIR}/$$realdep/+REQUIRED_BY; \ ${ECHO} "${PKGNAME} requires installed package $$realdep"; \ fi; \ - done ;; \ + done; \ + case ${PKG_INSTALLATION_TYPE} in \ + overwrite) ${RM} -rf ${_PKG_DBDIR}/${PKGNAME} ;; \ + esac; \ + ${MKDIR} ${_PKG_DBDIR}/${PKGNAME}; \ + ${CP} ${PKG_DB_TMPDIR}/+* ${_PKG_DBDIR}/${PKGNAME}; \ + ;; \ esac .if (${PKG_INSTALLATION_TYPE} == "pkgviews") && \ !empty(BUILD_VIEWS:M[yY][eE][sS])