12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package generator
- import (
- "fmt"
- "log"
- "os"
- "os/exec"
- "path"
- "strings"
- )
- func findVendorDir() string {
- pwd, err := os.Getwd()
- if err != nil {
- log.Printf("getwd error: %s", err)
- }
- for dir := pwd; dir != "/" && dir != "."; dir = path.Dir(dir) {
- vendorDir := path.Join(dir, "vendor")
- if s, err := os.Stat(vendorDir); err == nil && s.IsDir() {
- return vendorDir
- }
- }
- return ""
- }
- // Protoc run protoc generator go source code
- func Protoc(protoFile, protocExec, gen string, paths []string) error {
- if protocExec == "" {
- protocExec = "protoc"
- }
- if gen == "" {
- gen = "gogofast"
- }
- paths = append(paths, ".", os.Getenv("GOPATH"))
- vendorDir := findVendorDir()
- if vendorDir != "" {
- paths = append(paths, vendorDir)
- }
- args := []string{"--proto_path", strings.Join(paths, ":"), fmt.Sprintf("--%s_out=plugins=grpc:.", gen), path.Base(protoFile)}
- log.Printf("run protoc %s", strings.Join(args, " "))
- protoc := exec.Command(protocExec, args...)
- protoc.Stdout = os.Stdout
- protoc.Stderr = os.Stderr
- protoc.Dir = path.Dir(protoFile)
- return protoc.Run()
- }
|