tool/gocross: write the wrapper script directly, rather than printing

Turns out directing the printed script into the bootstrap location leads
to irritating "text file busy" problems and then having to muck about with
tempfiles and chmod and all that. Instead, have gocross write everything
with the right values.

Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
David Anderson 2023-02-22 17:34:55 -08:00 committed by Dave Anderson
parent 499d82af8a
commit 7e65a11df5

View File

@ -17,6 +17,8 @@
"os" "os"
"path/filepath" "path/filepath"
runtimeDebug "runtime/debug" runtimeDebug "runtime/debug"
"tailscale.com/atomicfile"
) )
func main() { func main() {
@ -56,8 +58,15 @@ func main() {
} }
fmt.Println(filepath.Join(toolchain, "bin/go")) fmt.Println(filepath.Join(toolchain, "bin/go"))
os.Exit(0) os.Exit(0)
case "gocross-print-wrapper-script": case "gocross-write-wrapper-script":
fmt.Println(wrapperScript) if len(os.Args) != 3 {
fmt.Fprintf(os.Stderr, "usage: gocross write-wrapper-script <path>\n")
os.Exit(1)
}
if err := atomicfile.WriteFile(os.Args[2], wrapperScript, 0755); err != nil {
fmt.Fprintf(os.Stderr, "writing wrapper script: %v\n", err)
os.Exit(1)
}
os.Exit(0) os.Exit(0)
} }
} }
@ -98,7 +107,7 @@ func main() {
} }
//go:embed gocross-wrapper.sh //go:embed gocross-wrapper.sh
var wrapperScript string var wrapperScript []byte
func debug(format string, args ...interface{}) { func debug(format string, args ...interface{}) {
debug := os.Getenv("GOCROSS_DEBUG") debug := os.Getenv("GOCROSS_DEBUG")