summaryrefslogtreecommitdiff
path: root/mk/bsd.pkg.subdir.mk
diff options
context:
space:
mode:
authorfredb <fredb@pkgsrc.org>2002-02-28 14:42:39 +0000
committerfredb <fredb@pkgsrc.org>2002-02-28 14:42:39 +0000
commit8527784dd680bded7ed31007cefaa0654ee4c8ea (patch)
treeef393fb374c4d6da340f0a6b34beef86a1bae30d /mk/bsd.pkg.subdir.mk
parentf8bde3dbfa315ee9384e2a43eff2ae32aa28d64c (diff)
downloadpkgsrc-8527784dd680bded7ed31007cefaa0654ee4c8ea.tar.gz
Comprehensive update to the fetch-list target (and friends), incorporating
many suggestions made by Bernd Ernesti on "tech-pkg". Closes PR pkg/15539. - - Partially revert 1.895, which made 'fetch-list' ape 'fetch', so instead check if a file exists on the building host before emitting anything for it into the generated script. Update to use the new 'fetch' procedure on the fetching host, once it is determined that the file is needed, and generally clean up the output, so that it's a human readable shell script with comments. - - Introduce utility target 'show-all-depends-dirs', to do the necessary recursing over dependencies quickly and correctly. Add a couple of variations to show how it's done, and bracket the whole thing with ".if make()", so it's invisible to the dependency graph for all the other targets. The key improvement over the old way, is that it utilizes an "awk" associative array to guarantee that no package subdirectory is visited twice. For the package with the hairiest dependency graph, "x11/gnome", this leads to something like a 1,000-fold improvement! - - "sort -u" over the result of 'fetch-list-one-pkg' goes bye-bye. The new "awk" post-processor begins emitting output as soon as there is a file to fetch, so the user doesn't have to wait for the whole thing to finish before he sees anything. - - Get rid of the old hook for non-recursing for a top-level 'fetch-list', which was never used. Previously, a top-level 'fetch-list' couldn't work anyway, because the progress reports ruined the shell script. Remove 'fetch-list' from the targets that recurse from the top, and instead use a different 'fetch-list' target in "bsd.pkg.subdir.mk" to do the right thing. Currently, that right thing includes recursing in the single-category case, or if ${SPECIFIC_PKGS} is set, and not recursing in the top-level, all packages case (where it would be perfectly pointless).
Diffstat (limited to 'mk/bsd.pkg.subdir.mk')
-rw-r--r--mk/bsd.pkg.subdir.mk46
1 files changed, 44 insertions, 2 deletions
diff --git a/mk/bsd.pkg.subdir.mk b/mk/bsd.pkg.subdir.mk
index 77b990923b1..b64fc7366ba 100644
--- a/mk/bsd.pkg.subdir.mk
+++ b/mk/bsd.pkg.subdir.mk
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.pkg.subdir.mk,v 1.45 2001/11/28 10:21:47 abs Exp $
+# $NetBSD: bsd.pkg.subdir.mk,v 1.46 2002/02/28 14:42:39 fredb Exp $
# Derived from: FreeBSD Id: bsd.port.subdir.mk,v 1.19 1997/03/09 23:10:56 wosch Exp
# from: @(#)bsd.subdir.mk 5.9 (Berkeley) 2/1/91
#
@@ -93,10 +93,11 @@ ${SUBDIR}::
fi; \
${MAKE} ${MAKEFLAGS} all
-.for __target in all fetch fetch-list package extract configure build clean \
+.for __target in all fetch package extract configure build clean \
cleandir distclean depend describe reinstall tags checksum \
makepatchsum mirror-distfiles deinstall show-downlevel \
show-pkgsrc-dir show-var show-vars bulk-install bulk-package \
+ fetch-list-one-pkg fetch-list-recursive \
${PKG_MISC_TARGETS}
.if !target(__target)
${__target}: _SUBDIRUSE
@@ -203,3 +204,44 @@ show-distfiles:
fi; \
done
.endif
+
+
+# Print out a script to fetch all needed files (no checksumming).
+#
+# When invoked at the top or category level, this target needs to be
+# handled specially, to elide the "===>" messages that would otherwise
+# ruin the script.
+#
+.if !target(fetch-list)
+.PHONY: fetch-list
+
+fetch-list:
+ @${ECHO} '#!/bin/sh'
+ @${ECHO} '#'
+ @${ECHO} '# This is an auto-generated script, the result of running'
+ @${ECHO} '# `make fetch-list'"'"' in directory "'"`pwd`"'"'
+ @${ECHO} '# on host "'"`${UNAME} -n`"'" on "'"`date`"'".'
+ @${ECHO} '#'
+.if defined(PKGSRCTOP) && !defined(SPECIFIC_PKGS)
+# Recursing over dependencies would be pointless, in this case.
+ @${MAKE} ${MAKEFLAGS} fetch-list-one-pkg \
+ | ${AWK} ' \
+ function do_block () { \
+ if (FoundSomething) { \
+ for (line = 0; line < c; line++) \
+ print block[line]; \
+ FoundSomething = 0 \
+ } \
+ c = 0 \
+ } \
+ /^[^#=]/ { FoundSomething = 1 } \
+ /^unsorted/ { gsub(/[[:space:]]+/, " \\\n\t") } \
+ !/^=/ { block[c++] = $$0 } \
+ /^=/ { do_block() } \
+ END { do_block() } \
+ '
+.else
+ @${MAKE} ${MAKEFLAGS} fetch-list-recursive \
+ | ${SED} '/^=/d'
+.endif
+.endif # !target(fetch-list)