diff --git a/human.go b/human.go index 61da744..73c7089 100644 --- a/human.go +++ b/human.go @@ -4,19 +4,44 @@ import ( "fmt" "os" "os/exec" + "runtime" "go.wit.com/log" ) func CheckProtoc() bool { - if checkCmdSimple("protoc") { + if !checkCmdSimple("protoc") { userInstructions() - log.Sleep(2) + switch runtime.GOOS { + case "linux": + linuxInstall("protoc") + case "macos": + log.Info("todo: print instructions here for installing protoc on macos. brew install?") + case "windows": + log.Info("todo: print instructions here for installing protoc on windows") + default: + log.Info("todo: print instructions here for installing protoc on", runtime.GOOS) + } return false } - if checkCmdSimple("protoc-gen-go") { + if !checkCmdSimple("protoc") { + return false + } + + if !checkCmdSimple("protoc-gen-go") { userInstructions() - log.Sleep(2) + switch runtime.GOOS { + case "linux": + linuxInstall("protoc-gen-go") + case "macos": + log.Info("todo: print instructions here for installing protoc on macos. brew install?") + case "windows": + log.Info("todo: print instructions here for installing protoc on windows") + default: + log.Info("todo: print instructions here for installing protoc on", runtime.GOOS) + } + } + if !checkCmdSimple("protoc-gen-go") { return false } return true @@ -43,6 +68,8 @@ func checkCmd(cmd string) (string, error) { return path, err } +/* + func oldcheckCmd(cmd string) { // path, err := exec.LookPath(cmd) _, err := exec.LookPath(cmd) @@ -54,6 +81,7 @@ func oldcheckCmd(cmd string) { // fmt.Printf("%s is available at %s\n", cmd, path) } } +*/ // todo: figure out how to determine, in a package, what the program name is func okExit(s string) { diff --git a/linux.go b/linux.go new file mode 100644 index 0000000..efdb6e8 --- /dev/null +++ b/linux.go @@ -0,0 +1,34 @@ +package fhelp + +// auto run protoc with the correct args + +import ( + "bufio" + "fmt" + "os" + "strings" + + "go.wit.com/lib/gui/shell" + "go.wit.com/log" +) + +func linuxInstall(pkg string) { + cmd := []string{"apt", "install", "-y", pkg} + if pkg == "protoc" { + cmd = []string{"apt", "install", "-y", "protobuf-compiler"} + } + log.Info("Would you like to run", "sudo", cmd, "now?") + fmt.Fprintf(os.Stdout, "(y)es or (n)o ? ") + + scanner := bufio.NewScanner(os.Stdin) + for scanner.Scan() { + line := scanner.Text() + line = strings.TrimSpace(line) + line = strings.ToLower(line) + switch line { + case "y": + shell.Sudo(cmd) + default: + } + } +}