| [short] skip 'builds and runs go programs' |
| [!symlink] skip 'uses symlinks to construct a GOROOT' |
| |
| env NEWGOROOT=$WORK${/}goroot |
| env TOOLDIR=$GOROOT/pkg/tool/${GOOS}_${GOARCH} |
| # Use ${/} in paths we'll check for in stdout below, so they contain '\' on Windows |
| env NEWTOOLDIR=$NEWGOROOT${/}pkg${/}tool${/}${GOOS}_${GOARCH} |
| mkdir $NEWGOROOT $NEWGOROOT/bin $NEWTOOLDIR |
| [symlink] symlink $NEWGOROOT/src -> $GOROOT/src |
| [symlink] symlink $NEWGOROOT/pkg/include -> $GOROOT/pkg/include |
| [symlink] symlink $NEWGOROOT/bin/go -> $GOROOT/bin/go |
| [symlink] symlink $NEWTOOLDIR/compile$GOEXE -> $TOOLDIR/compile$GOEXE |
| [symlink] symlink $NEWTOOLDIR/cgo$GOEXE -> $TOOLDIR/cgo$GOEXE |
| [symlink] symlink $NEWTOOLDIR/link$GOEXE -> $TOOLDIR/link$GOEXE |
| [symlink] symlink $NEWTOOLDIR/asm$GOEXE -> $TOOLDIR/asm$GOEXE |
| [symlink] symlink $NEWTOOLDIR/pack$GOEXE -> $TOOLDIR/pack$GOEXE |
| env GOROOT=$NEWGOROOT |
| env TOOLDIR=$NEWTOOLDIR |
| |
| # GOROOT without test2json tool builds and runs it as needed |
| go env GOROOT |
| ! exists $TOOLDIR/test2json |
| go tool test2json |
| stdout '{"Action":"start"}' |
| ! exists $TOOLDIR/test2json$GOEXE |
| go tool -n test2json |
| ! stdout $NEWTOOLDIR${/}test2json$GOEXE |
| |
| # GOROOT with test2json uses the test2json in the GOROOT |
| go install cmd/test2json |
| exists $TOOLDIR/test2json$GOEXE |
| go tool test2json |
| stdout '{"Action":"start"}' |
| go tool -n test2json |
| stdout $NEWTOOLDIR${/}test2json$GOEXE |
| |
| # Tool still runs properly even with wrong GOOS/GOARCH |
| # Remove test2json from tooldir |
| rm $TOOLDIR/test2json$GOEXE |
| go tool -n test2json |
| ! stdout $NEWTOOLDIR${/}test2json$GOEXE |
| # Set GOOS/GOARCH to different values than host GOOS/GOARCH. |
| env GOOS=windows |
| [GOOS:windows] env GOOS=linux |
| env GOARCH=arm64 |
| [GOARCH:arm64] env GOARCH=amd64 |
| # Control case: go run shouldn't work because it respects |
| # GOOS/GOARCH, and we can't execute non-native binary. |
| ! go run cmd/test2json -exec='' |
| # But go tool should because it doesn't respect GOOS/GOARCH. |
| go tool test2json |
| stdout '{"Action":"start"}' |