code reorganization
[epoint] / pkg / deps.sh
diff --git a/pkg/deps.sh b/pkg/deps.sh
new file mode 100755 (executable)
index 0000000..123ad3a
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+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=$(make --no-print-directory echo-dirs)
+dirpat=$(echo $dirs C | awk '{
+       for(i=1;i<=NF;i++){ 
+               x=$i
+               gsub("/", "\\/", x)
+               printf("/^(epoint\\/%s)$/\n", x)
+       }
+}')
+
+for dir in $dirs; do (
+       cd $dir >/dev/null || 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/epoint\///;s/$/.install/' |
+               sort -u
+       )
+
+       echo $dir.install: $deps
+) done > $TMP
+
+mv $TMP $OUT