1 env GO111MODULE=off
2
3 # go env should default to the right places
4 env AppData=$HOME/windowsappdata
5 env home=$HOME/plan9home
6 go env GOENV
7 [GOOS:aix] stdout $HOME/.config/go/env
8 [GOOS:darwin] stdout $HOME'/Library/Application Support/go/env'
9 [GOOS:freebsd] stdout $HOME/.config/go/env
10 [GOOS:linux] stdout $HOME/.config/go/env
11 [GOOS:netbsd] stdout $HOME/.config/go/env
12 [GOOS:openbsd] stdout $HOME/.config/go/env
13 [GOOS:plan9] stdout $HOME/plan9home/lib/go/env
14 [GOOS:windows] stdout $HOME\\windowsappdata\\go\\env
15
16 # Now override it to something writable.
17 env GOENV=$WORK/envdir/go/env
18 go env GOENV
19 stdout envdir[\\/]go[\\/]env
20
21 # go env shows all variables
22 go env
23 stdout GOARCH=
24 stdout GOOS=
25 stdout GOROOT=
26
27 # go env ignores invalid flag in GOFLAGS environment variable
28 env GOFLAGS='=true'
29 go env
30
31 # checking errors
32 ! go env -w
33 stderr 'go: no KEY=VALUE arguments given'
34 ! go env -u
35 stderr 'go: ''go env -u'' requires an argument'
36
37 # go env -w changes default setting
38 env root=
39 [GOOS:windows] env root=c:
40 env GOPATH=
41 go env -w GOPATH=$root/non-exist/gopath
42 ! stderr .+
43 grep GOPATH=$root/non-exist/gopath $WORK/envdir/go/env
44 go env GOPATH
45 stdout /non-exist/gopath
46
47 # go env -w does not override OS environment, and warns about that
48 env GOPATH=$root/other
49 go env -w GOPATH=$root/non-exist/gopath2
50 stderr 'warning: go env -w GOPATH=... does not override conflicting OS environment variable'
51 go env GOPATH
52 stdout $root/other
53
54 # but go env -w does do the update, and unsetting the env var exposes the change
55 env GOPATH=
56 go env GOPATH
57 stdout $root/non-exist/gopath2
58
59 # unsetting with go env -u does not warn about OS environment overrides,
60 # nor does it warn about variables that haven't been set by go env -w.
61 env GOPATH=$root/other
62 go env -u GOPATH
63 ! stderr .+
64 go env -u GOPATH
65 ! stderr .+
66
67 # go env -w rejects unknown or bad variables
68 ! go env -w GOGC=off
69 stderr 'unknown go command variable GOGC'
70 ! go env -w GOEXE=.bat
71 stderr 'GOEXE cannot be modified'
72 ! go env -w GOVERSION=customversion
73 stderr 'GOVERSION cannot be modified'
74 ! go env -w GOROOT=./go
75 stderr 'GOROOT cannot be modified'
76 ! go env -w GOENV=/env
77 stderr 'GOENV can only be set using the OS environment'
78 ! go env -w GODEBUG=gctrace=1
79 stderr 'GODEBUG can only be set using the OS environment'
80
81 # go env -w can set multiple variables
82 env CC=
83 go env CC
84 ! stdout ^xyc$
85 go env -w GOOS=$GOOS CC=xyc
86 grep CC=xyc $GOENV
87 # file is maintained in sorted order
88 grep 'CC=xyc\nGOOS=' $GOENV
89 go env CC
90 stdout ^xyc$
91
92 # go env -u unsets effect of go env -w.
93 go env -u CC
94 go env CC
95 ! stdout ^xyc$
96
97 # go env -w rejects double-set variables
98 ! go env -w GOOS=$GOOS GOOS=$GOOS
99 stderr 'multiple values for key: GOOS'
100
101 # go env -w rejects missing variables
102 ! go env -w GOOS
103 stderr 'arguments must be KEY=VALUE: invalid argument: GOOS'
104
105 # go env -w rejects invalid GO111MODULE values, as otherwise cmd/go would break
106 ! go env -w GO111MODULE=badvalue
107 stderr 'invalid GO111MODULE value "badvalue"'
108
109 # go env -w rejects invalid GOPATH values
110 ! go env -w GOPATH=~/go
111 stderr 'GOPATH entry cannot start with shell metacharacter'
112
113 ! go env -w GOPATH=./go
114 stderr 'GOPATH entry is relative; must be absolute path'
115
116 # go env -w rejects invalid GOTMPDIR values
117 ! go env -w GOTMPDIR=x
118 stderr 'go: GOTMPDIR must be an absolute path'
119
120 # go env -w should accept absolute GOTMPDIR value
121 # and should not create it
122 [GOOS:windows] go env -w GOTMPDIR=$WORK\x\y\z
123 [!GOOS:windows] go env -w GOTMPDIR=$WORK/x/y/z
124 ! exists $WORK/x/y/z
125 # we should be able to clear an env
126 go env -u GOTMPDIR
127 go env GOTMPDIR
128 stdout ^$
129
130 [GOOS:windows] go env -w GOTMPDIR=$WORK\x\y\z
131 [!GOOS:windows] go env -w GOTMPDIR=$WORK/x/y/z
132 go env -w GOTMPDIR=
133 go env GOTMPDIR
134 stdout ^$
135
136 # go env -w rejects relative CC values
137 [!GOOS:windows] go env -w CC=/usr/bin/clang
138 go env -w CC=clang
139 [!GOOS:windows] ! go env -w CC=./clang
140 [!GOOS:windows] ! go env -w CC=bin/clang
141 [!GOOS:windows] stderr 'go: CC entry is relative; must be absolute path'
142
143 [GOOS:windows] go env -w CC=$WORK\bin\clang
144 [GOOS:windows] ! go env -w CC=.\clang
145 [GOOS:windows] ! go env -w CC=bin\clang
146 [GOOS:windows] stderr 'go: CC entry is relative; must be absolute path'
147
148 # go env -w rejects relative CXX values
149 [!GOOS:windows] go env -w CC=/usr/bin/cpp
150 go env -w CXX=cpp
151 [!GOOS:windows] ! go env -w CXX=./cpp
152 [!GOOS:windows] ! go env -w CXX=bin/cpp
153 [!GOOS:windows] stderr 'go: CXX entry is relative; must be absolute path'
154
155 [GOOS:windows] go env -w CXX=$WORK\bin\cpp
156 [GOOS:windows] ! go env -w CXX=.\cpp
157 [GOOS:windows] ! go env -w CXX=bin\cpp
158 [GOOS:windows] stderr 'go: CXX entry is relative; must be absolute path'
159
160 # go env -w/-u checks validity of GOOS/ARCH combinations
161 env GOOS=
162 env GOARCH=
163 # check -w doesn't allow invalid GOOS
164 ! go env -w GOOS=linuxx
165 stderr 'unsupported GOOS/GOARCH pair linuxx'
166 # check -w doesn't allow invalid GOARCH
167 ! go env -w GOARCH=amd644
168 stderr 'unsupported GOOS/GOARCH.*/amd644$'
169 # check -w doesn't allow invalid GOOS with valid GOARCH
170 ! go env -w GOOS=linuxx GOARCH=amd64
171 stderr 'unsupported GOOS/GOARCH pair linuxx'
172 # check a valid GOOS and GOARCH values but an incompatible combinations
173 ! go env -w GOOS=android GOARCH=s390x
174 stderr 'unsupported GOOS/GOARCH pair android/s390x'
175 # check that -u considers explicit envs
176 go env -w GOOS=linux GOARCH=mips
177 env GOOS=windows
178 ! go env -u GOOS
179 stderr 'unsupported GOOS/GOARCH.*windows/mips$'
180 env GOOS=
181
182 # go env -w should reject relative paths in GOMODCACHE environment.
183 ! go env -w GOMODCACHE=~/test
184 stderr 'go: GOMODCACHE entry is relative; must be absolute path: "~/test"'
185 ! go env -w GOMODCACHE=./test
186 stderr 'go: GOMODCACHE entry is relative; must be absolute path: "./test"'
187
188 # go env -w checks validity of GOEXPERIMENT
189 env GOEXPERIMENT=
190 ! go env -w GOEXPERIMENT=badexp
191 stderr 'unknown GOEXPERIMENT badexp'
192 go env -w GOEXPERIMENT=fieldtrack
193
194 # go env -w and go env -u work on unknown fields already in the go/env file
195 cp bad.env $GOENV
196 go env GOENV
197 cat $GOENV
198 go env
199 ! stdout UNKNOWN
200 go env UNKNOWN
201 stdout yes
202 go env -w UNKNOWN=maybe
203 go env UNKNOWN
204 stdout maybe
205 go env -u UNKNOWN
206 go env UNKNOWN
207 ! stdout . # gone
208
209 -- bad.env --
210 UNKNOWN=yes
211
View as plain text