mirror of https://go.googlesource.com/go
61 lines
2.0 KiB
Go
61 lines
2.0 KiB
Go
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build ignore
|
|
|
|
// mksyscall_windows wraps golang.org/x/sys/windows/mkwinsyscall.
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"runtime"
|
|
)
|
|
|
|
func main() {
|
|
goTool := filepath.Join(runtime.GOROOT(), "bin", "go")
|
|
|
|
listCmd := exec.Command(goTool, "list", "-m")
|
|
listCmd.Env = append(os.Environ(), "GO111MODULE=on")
|
|
|
|
var (
|
|
cmdEnv []string
|
|
modArgs []string
|
|
)
|
|
if out, err := listCmd.Output(); err == nil && string(bytes.TrimSpace(out)) == "std" {
|
|
// Force module mode to use mkwinsyscall at the same version as the x/sys
|
|
// module vendored into the standard library.
|
|
cmdEnv = append(os.Environ(), "GO111MODULE=on")
|
|
|
|
// Force -mod=readonly instead of the default -mod=vendor.
|
|
//
|
|
// mkwinsyscall is not itself vendored into the standard library, and it is
|
|
// not feasible to do so at the moment: std-vendored libraries are included
|
|
// in the "std" meta-pattern (because in general they *are* linked into
|
|
// users binaries separately from the original import paths), and we can't
|
|
// allow a binary in the "std" meta-pattern.
|
|
modArgs = []string{"-mod=readonly"}
|
|
} else {
|
|
// Nobody outside the standard library should be using this wrapper: other
|
|
// modules can vendor in the mkwinsyscall tool directly (as described in
|
|
// https://golang.org/issue/25922), so they don't need this wrapper to
|
|
// set module mode and -mod=readonly explicitly.
|
|
os.Stderr.WriteString("WARNING: Please switch from using:\n go run $GOROOT/src/syscall/mksyscall_windows.go\nto using:\n go run golang.org/x/sys/windows/mkwinsyscall\n")
|
|
}
|
|
|
|
args := append([]string{"run"}, modArgs...)
|
|
args = append(args, "golang.org/x/sys/windows/mkwinsyscall")
|
|
args = append(args, os.Args[1:]...)
|
|
cmd := exec.Command(goTool, args...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Env = cmdEnv
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
}
|