grumble/pkg/mumbleproto/generate_main.go

52 lines
1.1 KiB
Go

// +build ignore
package main
import (
"io/ioutil"
"log"
"net/http"
"os/exec"
"regexp"
)
var replacements = []string{
`(?m)^package MumbleProto;$`, `package mumbleproto;`,
// Add crypto_modes to Version message.
// It is only present in Grumble, not in upstream Murmur.
`(?m)^(message Version {)$`, "$1\n\trepeated string crypto_modes = 5;\n",
}
func main() {
// Fetch Mumble.proto
resp, err := http.Get("https://raw.githubusercontent.com/mumble-voip/mumble/master/src/Mumble.proto")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
// Perform replacements
for i := 0; i < len(replacements); i += 2 {
re, rp := replacements[i], replacements[i+1]
regex, err := regexp.Compile(re)
if err != nil {
log.Fatal(err)
}
data = regex.ReplaceAll(data, []byte(rp))
}
// Write Mumble.proto
if err := ioutil.WriteFile("Mumble.proto", data, 0644); err != nil {
log.Fatal(err)
}
// Run protobuf compiler
if err := exec.Command("protoc", "--go_out=.", "Mumble.proto").Run(); err != nil {
log.Fatal(err)
}
}