[short] skip

# Build our simple toolexec program.
go build ./cmd/mytool

# Build the main package with our toolexec program. For each action, it will
# print the tool's name and the TOOLEXEC_IMPORTPATH value. We expect to compile
# each package once, and link the main package once.
# Don't check the entire output at once, because the order in which the tools
# are run is irrelevant here.
# Finally, note that asm and cgo are run twice.

go build -toolexec=$PWD/mytool
[amd64] stderr -count=2 '^asm'${GOEXE}' TOOLEXEC_IMPORTPATH=test/main/withasm$'
stderr -count=1 '^compile'${GOEXE}' TOOLEXEC_IMPORTPATH=test/main/withasm$'
[cgo] stderr -count=2 '^cgo'${GOEXE}' TOOLEXEC_IMPORTPATH=test/main/withcgo$'
[cgo] stderr -count=1 '^compile'${GOEXE}' TOOLEXEC_IMPORTPATH=test/main/withcgo$'
stderr -count=1 '^compile'${GOEXE}' TOOLEXEC_IMPORTPATH=test/main$'
stderr -count=1 '^link'${GOEXE}' TOOLEXEC_IMPORTPATH=test/main$'

-- go.mod --
module test/main
-- foo.go --
// Simple package so we can test a program build with -toolexec.
// With a dummy import, to test different TOOLEXEC_IMPORTPATH values.
// Includes dummy uses of cgo and asm, to cover those tools as well.
package main

import (
	_ "test/main/withasm"
	_ "test/main/withcgo"
)

func main() {}
-- withcgo/withcgo.go --
package withcgo

// int fortytwo()
// {
//     return 42;
// }
import "C"
-- withcgo/stub.go --
package withcgo

// Stub file to ensure we build without cgo too.
-- withasm/withasm.go --
package withasm

// Note that we don't need to declare the Add func at all.
-- withasm/withasm_amd64.s --
TEXT ·Add(SB),$0-24
	MOVQ a+0(FP), AX
	ADDQ b+8(FP), AX
	MOVQ AX, ret+16(FP)
	RET
-- cmd/mytool/main.go --
package main

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

func main() {
	tool, args := os.Args[1], os.Args[2:]
	toolName := filepath.Base(tool)
	if len(args) > 0 && args[0] == "-V=full" {
		// We can't alter the version output.
	} else {
		// Print which tool we're running, and on what package.
		fmt.Fprintf(os.Stdout, "%s TOOLEXEC_IMPORTPATH=%s\n", toolName, os.Getenv("TOOLEXEC_IMPORTPATH"))
	}

	// Simply run the tool.
	cmd := exec.Command(tool, args...)
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}
