blob: ad752a093ea4ae1c73256f1d35670f600c0a42d0 [file] [log] [blame]
#!/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)
}
}')
# Append old names of renamed packages. TODO: clean up after renaming.
dirpat="$dirpat
/^(asn1)$/
/^(big)$/
/^(cmath)$/
/^(csv)$/
/^(exec)$/
/^(exp\/template\/html)$/
/^(gob)$/
/^(http)/
/^(http\/cgi)$/
/^(http\/fcgi)$/
/^(http\/httptest)$/
/^(http\/pprof)$/
/^(json)$/
/^(mail)$/
/^(rand)$/
/^(rpc)$/
/^(scanner)$/
/^(smtp)$/
/^(syslog)$/
/^(tabwriter)$/
/^(url)$/
/^(template)$/
/^(template\/parse)$/
/^(utf16)$/
/^(utf8)$/
/^(xml)$/
"
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/$/.install/' |
# TODO: rename the dependencies for renamed directories. TODO: clean up after renaming.
sed 's;^asn1.install$;encoding/asn1.install;
s;^big.install$;math/big.install;
s;^cmath.install$;math/cmplx.install;
s;^csv.install$;encoding/csv.install;
s;^exec.install$;os/exec.install;
s;^exp/template/html.install$;html/template.install;
s;^gob.install$;encoding/gob.install;
s;^http.install$;net/http.install;
s;^http/cgi.install$;net/http/cgi.install;
s;^http/fcgi.install$;net/http/fcgi.install;
s;^http/httptest.install$;net/http/httptest.install;
s;^http/pprof.install$;net/http/pprof.install;
s;^json.install$;encoding/json.install;
s;^mail.install$;net/mail.install;
s;^rpc.install$;net/rpc.install;
s;^rpc/jsonrpc.install$;net/rpc/jsonrpc.install;
s;^scanner.install$;text/scanner.install;
s;^smtp.install$;net/smtp.install;
s;^syslog.install$;log/syslog.install;
s;^tabwriter.install$;text/tabwriter.install;
s;^template.install$;text/template.install;
s;^template/parse.install$;text/template/parse.install;
s;^rand.install$;math/rand.install;
s;^url.install$;net/url.install;
s;^utf16.install$;unicode/utf16.install;
s;^utf8.install$;unicode/utf8.install;
s;^xml.install$;encoding/xml.install;' |
# TODO: end of renamings.
sed 's;^C\.install;runtime/cgo.install;' |
sort -u
)
echo $dir.install: $deps
) done > $TMP
mv $TMP $OUT
if (egrep -v '^(exp|old)/' $OUT | egrep -q " (exp|old)/"); then
echo "$0: $OUT contains dependencies to exp or old packages"
exit 1
fi