You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.1 KiB
46 lines
1.1 KiB
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() |
|
}
|
|
|