set -e
-declare -A alldeps
-
# We need to test enough GOOS/GOARCH combinations to pick up all the
# package dependencies.
gooslist="windows linux darwin solaris"
goarchlist="386 amd64 arm arm64 ppc64"
-for goos in $gooslist; do
- for goarch in $goarchlist; do
- deps=$(GOOS=$goos GOARCH=$goarch go list -tags cmd_go_bootstrap -f '{{join .Deps "\n"}}' cmd/go | grep -v '^unsafe$')
- for dep in $deps cmd/go; do
- alldeps[$dep]="${alldeps[$dep]} $(GOOS=$goos GOARCH=$goarch go list -tags cmd_go_bootstrap -f '{{range .Deps}}{{if not (eq . "unsafe")}}{{print .}} {{end}}{{end}}' $dep)"
- done
- done
-done
+echo NOTE: errors about loading internal/syscall/windows are ok
+
+deps_of() {
+ for goos in $gooslist
+ do
+ for goarch in $goarchlist
+ do
+ GOOS=$goos GOARCH=$goarch go list -tags cmd_go_bootstrap -f '{{range .Deps}}{{$.ImportPath}} {{.}}
+{{end}}' $*
+ done
+ done | sort -u | grep . | grep -v ' unsafe$'
+}
-export GOOS=windows
+all="$(deps_of cmd/go | awk '{print $2}') cmd/go"
+deps_of $all >tmp.all.deps
(
echo '// generated by mkdeps.bash'
echo 'package main'
echo
echo 'var builddeps = map[string][]string{'
-
- for dep in $(for dep in ${!alldeps[@]}; do echo $dep; done | grep -v '^cmd/go$' | sort) cmd/go; do
- echo -n '"'$dep'"': {
- for subdep in ${alldeps[$dep]}; do
- echo $subdep
- done | sort -u | while read subdep; do
- echo -n '"'$subdep'"',
- done
- echo },
+ for pkg in $all
+ do
+ echo -n "\"$pkg\": {"
+ for dep in $(awk -v pkg=$pkg '$1==pkg {print $2}' tmp.all.deps)
+ do
+ echo -n "\"$dep\","
+ done
+ echo '},'
done
-
echo '}'
) |gofmt >deps.go
+
+rm -f tmp.all.deps