12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package env
- import (
- "os"
- "os/exec"
- "path/filepath"
- "runtime"
- "strings"
- "github.com/zeromicro/go-zero/tools/goctl/vars"
- )
- const (
- bin = "bin"
- binGo = "go"
- binProtoc = "protoc"
- binProtocGenGo = "protoc-gen-go"
- binProtocGenGrpcGo = "protoc-gen-go-grpc"
- )
- // LookUpGo searches an executable go in the directories
- // named by the GOROOT/bin or PATH environment variable.
- func LookUpGo() (string, error) {
- goRoot := runtime.GOROOT()
- suffix := getExeSuffix()
- xGo := binGo + suffix
- path := filepath.Join(goRoot, bin, xGo)
- if _, err := os.Stat(path); err == nil {
- return path, nil
- }
- return LookPath(xGo)
- }
- // LookUpProtoc searches an executable protoc in the directories
- // named by the PATH environment variable.
- func LookUpProtoc() (string, error) {
- suffix := getExeSuffix()
- xProtoc := binProtoc + suffix
- return LookPath(xProtoc)
- }
- // LookUpProtocGenGo searches an executable protoc-gen-go in the directories
- // named by the PATH environment variable.
- func LookUpProtocGenGo() (string, error) {
- suffix := getExeSuffix()
- xProtocGenGo := binProtocGenGo + suffix
- return LookPath(xProtocGenGo)
- }
- // LookUpProtocGenGoGrpc searches an executable protoc-gen-go-grpc in the directories
- // named by the PATH environment variable.
- func LookUpProtocGenGoGrpc() (string, error) {
- suffix := getExeSuffix()
- xProtocGenGoGrpc := binProtocGenGrpcGo + suffix
- return LookPath(xProtocGenGoGrpc)
- }
- // LookPath searches for an executable named file in the
- // directories named by the PATH environment variable,
- // for the os windows, the named file will be spliced with the
- // .exe suffix.
- func LookPath(xBin string) (string, error) {
- suffix := getExeSuffix()
- if len(suffix) > 0 && !strings.HasSuffix(xBin, suffix) {
- xBin = xBin + suffix
- }
- bin, err := exec.LookPath(xBin)
- if err != nil {
- return "", err
- }
- return bin, nil
- }
- // CanExec reports whether the current system can start new processes
- // using os.StartProcess or (more commonly) exec.Command.
- func CanExec() bool {
- switch runtime.GOOS {
- case vars.OsJs, vars.OsIOS:
- return false
- default:
- return true
- }
- }
- func getExeSuffix() string {
- if runtime.GOOS == vars.OsWindows {
- return ".exe"
- }
- return ""
- }
|