| # This test checks that the CC environment variable may contain quotes and |
| # spaces. Arguments are normally split on spaces, tabs, newlines. If an |
| # argument contains these characters, the entire argument may be quoted |
| # with single or double quotes. This is the same as -gcflags and similar |
| # options. |
| |
| [short] skip |
| [!exec:clang] [!exec:gcc] skip |
| [!cgo] skip |
| |
| env GOENV=$WORK/go.env |
| mkdir 'program files' |
| go build -o 'program files' './which cc/which cc.go' |
| [exec:clang] env CC='"'$PWD${/}program' 'files${/}which' 'cc"' 'clang |
| [!exec:clang] env CC='"'$PWD${/}program' 'files${/}which' 'cc"' 'gcc |
| go env CC |
| stdout 'program files[/\\]which cc" (clang|gcc)$' |
| go env -w CC=$CC |
| env CC= |
| go env CC |
| stdout 'program files[/\\]which cc" (clang|gcc)$' |
| |
| go run . |
| stdout 1 |
| |
| -- go.mod -- |
| module test |
| |
| go 1.17 |
| -- which cc/which cc.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "os" |
| "os/exec" |
| ) |
| |
| func main() { |
| args := append([]string{"-DWRAPPER_WAS_USED=1"}, os.Args[2:]...) |
| cmd := exec.Command(os.Args[1], args...) |
| cmd.Stdout = os.Stdout |
| cmd.Stderr = os.Stderr |
| if err := cmd.Run(); err != nil { |
| fmt.Fprintln(os.Stderr, err) |
| os.Exit(1) |
| } |
| } |
| -- hello.go -- |
| package main |
| |
| // int x = WRAPPER_WAS_USED; |
| import "C" |
| import "fmt" |
| |
| func main() { |
| fmt.Println(C.x) |
| } |