]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: rewrite mkdeps.bash to work on OS X
authorRuss Cox <rsc@golang.org>
Thu, 19 Nov 2015 19:43:27 +0000 (14:43 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 19 Nov 2015 20:53:50 +0000 (20:53 +0000)
My version of bash doesn't know what 'declare -A' means.

Change-Id: Icf6b0e60ebaea3feaa8661ec0423012f213b53e8
Reviewed-on: https://go-review.googlesource.com/17070
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/dist/mkdeps.bash

index 78572860eaa72ec865b086274df2f105ac9298b4..71d3c371e48eba2d4ae7d603567b211b24c93df0 100755 (executable)
@@ -5,23 +5,26 @@
 
 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'
@@ -29,16 +32,16 @@ export GOOS=windows
        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