// 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
// +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)
	}
}
