summaryrefslogtreecommitdiff
path: root/src/pkg/deps.bash
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/deps.bash')
-rwxr-xr-xsrc/pkg/deps.bash49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/pkg/deps.bash b/src/pkg/deps.bash
new file mode 100755
index 000000000..2095ec1d8
--- /dev/null
+++ b/src/pkg/deps.bash
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+# Copyright 2009 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+eval $(gomake --no-print-directory -f ../Make.inc go-env)
+
+OUT="Make.deps"
+TMP="Make.deps.tmp"
+
+if [ -f $OUT ] && ! [ -w $OUT ]; then
+ echo "$0: $OUT is read-only; aborting." 1>&2
+ exit 1
+fi
+
+# Get list of directories from Makefile
+dirs=$(gomake --no-print-directory echo-dirs)
+dirpat=$(echo $dirs C | awk '{
+ for(i=1;i<=NF;i++){
+ x=$i
+ gsub("/", "\\/", x)
+ printf("/^(%s)$/\n", x)
+ }
+}')
+
+for dir in $dirs; do (
+ cd $dir || exit 1
+
+ sources=$(sed -n 's/^[ ]*\([^ ]*\.go\)[ ]*\\*[ ]*$/\1/p' Makefile)
+ sources=$(echo $sources | sed 's/\$(GOOS)/'$GOOS'/g')
+ sources=$(echo $sources | sed 's/\$(GOARCH)/'$GOARCH'/g')
+ # /dev/null here means we get an empty dependency list if $sources is empty
+ # instead of listing every file in the directory.
+ sources=$(ls $sources /dev/null 2> /dev/null) # remove .s, .c, etc.
+
+ deps=$(
+ sed -n '/^import.*"/p; /^import[ \t]*(/,/^)/p' $sources /dev/null |
+ cut -d '"' -f2 |
+ awk "$dirpat" |
+ grep -v "^$dir\$" |
+ sed 's/$/.install/' |
+ sed 's;^C\.install;runtime/cgo.install;' |
+ sort -u
+ )
+
+ echo $dir.install: $deps
+) done > $TMP
+
+mv $TMP $OUT