github.com/gagliardetto/golang-go@v0.0.0-20201020153340-53909ea70814/cmd/go/not-internal/base/tool.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package base 6 7 import ( 8 "fmt" 9 "go/build" 10 "os" 11 "path/filepath" 12 "runtime" 13 14 "github.com/gagliardetto/golang-go/cmd/go/not-internal/cfg" 15 ) 16 17 // Configuration for finding tool binaries. 18 var ( 19 ToolGOOS = runtime.GOOS 20 ToolGOARCH = runtime.GOARCH 21 ToolIsWindows = ToolGOOS == "windows" 22 ToolDir = build.ToolDir 23 ) 24 25 const ToolWindowsExtension = ".exe" 26 27 // Tool returns the path to the named tool (for example, "vet"). 28 // If the tool cannot be found, Tool exits the process. 29 func Tool(toolName string) string { 30 toolPath := filepath.Join(ToolDir, toolName) 31 if ToolIsWindows { 32 toolPath += ToolWindowsExtension 33 } 34 if len(cfg.BuildToolexec) > 0 { 35 return toolPath 36 } 37 // Give a nice message if there is no tool with that name. 38 if _, err := os.Stat(toolPath); err != nil { 39 fmt.Fprintf(os.Stderr, "go tool: no such tool %q\n", toolName) 40 SetExitStatus(2) 41 Exit() 42 } 43 return toolPath 44 }