gox icon indicating copy to clipboard operation
gox copied to clipboard

Unset $GOOS and $GOARCH before setting

Open Equim-chan opened this issue 8 years ago • 0 comments

This PR fixes an issue I found when I was writing a build tool driven by go generate on my own project sha3sum.

tl;dr go generate injects $GOOS and $GOARCH variables, leading to this issue.


The reproduction of the issue is as follows:

$GOPATH/src tree:

src
|
\---gox-issue
    |   main.go
    |
    \---builder
            main.go

$GOPATH/src/gox-issue/main.go:

package main

//go:generate go run $GOPATH/src/gox-issue/builder/main.go

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Println("runtime.GOOS:", runtime.GOOS)
	fmt.Println("runtime.GOARCH:", runtime.GOARCH)
}

$GOPATH/src/gox-issue/build/main.go:

package main

import (
	"fmt"
	"os"
	"os/exec"
)

func main() {
	fmt.Println("Env of the builder:")
	fmt.Println("GOOS=" + os.Getenv("GOOS"))
	fmt.Println("GOARCH=" + os.Getenv("GOARCH"))

	cmd := exec.Command("gox", "gox-issue")
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		fmt.Fprintln(os.Stderr, err)
	}
}

Now we do:

$ cd $GOPATH/src/gox-issue

$ test X"$GOOS" == X""; echo $?
0

$ test X"$GOARCH" == X""; echo $?
0

$ go generate
Env of the builder:
GOOS=linux
GOARCH=amd64
Number of parallel builds: 2

-->      netbsd/arm: gox-issue
-->   freebsd/amd64: gox-issue
-->   windows/amd64: gox-issue
-->     openbsd/386: gox-issue
-->   openbsd/amd64: gox-issue
-->     windows/386: gox-issue
-->       linux/386: gox-issue
-->      darwin/386: gox-issue
-->    darwin/amd64: gox-issue
-->      netbsd/386: gox-issue
-->     freebsd/arm: gox-issue
-->    netbsd/amd64: gox-issue
-->       linux/arm: gox-issue
-->     linux/amd64: gox-issue
-->     freebsd/386: gox-issue

And the issue shows up:

$ md5sum gox-issue*
d005e0418c6b30a7ed8c07010b13801b  gox-issue_darwin_386
d005e0418c6b30a7ed8c07010b13801b  gox-issue_darwin_amd64
d005e0418c6b30a7ed8c07010b13801b  gox-issue_freebsd_386
d005e0418c6b30a7ed8c07010b13801b  gox-issue_freebsd_amd64
d005e0418c6b30a7ed8c07010b13801b  gox-issue_freebsd_arm
d005e0418c6b30a7ed8c07010b13801b  gox-issue_linux_386
d005e0418c6b30a7ed8c07010b13801b  gox-issue_linux_amd64
d005e0418c6b30a7ed8c07010b13801b  gox-issue_linux_arm
d005e0418c6b30a7ed8c07010b13801b  gox-issue_netbsd_386
d005e0418c6b30a7ed8c07010b13801b  gox-issue_netbsd_amd64
d005e0418c6b30a7ed8c07010b13801b  gox-issue_netbsd_arm
d005e0418c6b30a7ed8c07010b13801b  gox-issue_openbsd_386
d005e0418c6b30a7ed8c07010b13801b  gox-issue_openbsd_amd64
d005e0418c6b30a7ed8c07010b13801b  gox-issue_windows_386.exe
d005e0418c6b30a7ed8c07010b13801b  gox-issue_windows_amd64.exe

$ file gox-issue_windows_386.exe
gox-issue_windows_386.exe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

$ ./gox-issue_windows_386.exe
runtime.GOOS: linux
runtime.GOARCH: amd64

Equim-chan avatar Aug 07 '17 16:08 Equim-chan