Commit 98c86f3f authored by Miek Gieben's avatar Miek Gieben Committed by GitHub

go gen improvements (#524)

Remove the "gen" directory and move directives_generate.go out of it.
Add a build ignore tag so it isn't build by default. Cleanup the go gen
invocations so there are not seen as package docs.

Simplify the code a bit and don't run go gen twice.
parent a5f3cb5f
...@@ -50,7 +50,7 @@ clean: ...@@ -50,7 +50,7 @@ clean:
.PHONY: gen .PHONY: gen
gen: gen:
go generate ./core/... go generate coredns.go
.PHONY: distclean .PHONY: distclean
distclean: clean distclean: clean
......
// Package core registers the server and all plugins we support. // Package core registers the server and all plugins we support.
// Additional middleware packages
//go:generate go run ../gen/directives_generate.go ../middleware.cfg
package core package core
import ( import (
......
//go:generate go run ../../gen/directives_generate.go ../../middleware.cfg
package dnsserver package dnsserver
import ( import (
......
// generated by directives_generate.go; DO NOT EDIT // generated by directives_generate.go; DO NOT EDIT
package dnsserver package dnsserver
// Directives are registered in the order they should be // Directives are registered in the order they should be
// executed. // executed.
// //
...@@ -11,27 +10,27 @@ package dnsserver ...@@ -11,27 +10,27 @@ package dnsserver
// care what middleware above them are doing. // care what middleware above them are doing.
var directives = []string{ var directives = []string{
"root", "root",
"bind", "bind",
"trace", "trace",
"health", "health",
"pprof", "pprof",
"prometheus", "prometheus",
"errors", "errors",
"log", "log",
"chaos", "chaos",
"cache", "cache",
"rewrite", "rewrite",
"loadbalance", "loadbalance",
"dnssec", "dnssec",
"file", "file",
"auto", "auto",
"secondary", "secondary",
"etcd", "etcd",
"kubernetes", "kubernetes",
"reverse", "reverse",
"proxy", "proxy",
"httpprox", "httpprox",
"whoami", "whoami",
"erratic", "erratic",
} }
package main package main
//go:generate go run directives_generate.go
import "github.com/miekg/coredns/coremain" import "github.com/miekg/coredns/coremain"
func main() { func main() {
......
//+build ignore
package main package main
import ( import (
"bufio" "bufio"
"go/format"
"io/ioutil" "io/ioutil"
"log"
"os" "os"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
) )
var middlewarePath = "github.com/miekg/coredns/middleware/"
var header = "// generated by directives_generate.go; DO NOT EDIT\n"
func main() { func main() {
mwFile := os.Args[1]
mi := make(map[string]string, 0) mi := make(map[string]string, 0)
md := make(map[int]string, 0) md := make(map[int]string, 0)
if file, err := os.Open(mwFile); err == nil { file, err := os.Open(middlewareFile)
defer file.Close() fatalIfErr(err)
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if !strings.HasPrefix(line, `//`) && !strings.HasPrefix(line, "#") {
items := strings.Split(line, ":")
if len(items) == 3 {
if priority, err := strconv.Atoi(items[0]); err == nil {
md[priority] = items[1]
}
if items[2] != "" { defer file.Close()
if strings.Contains(items[2], "/") {
mi[items[1]] = items[2]
} else {
mi[items[1]] = middlewarePath + items[2]
}
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if !strings.HasPrefix(line, `//`) && !strings.HasPrefix(line, "#") {
items := strings.Split(line, ":")
if len(items) == 3 {
if priority, err := strconv.Atoi(items[0]); err == nil {
md[priority] = items[1]
} }
}
}
var orders []int if items[2] != "" {
for k := range md { if strings.Contains(items[2], "/") {
orders = append(orders, k) mi[items[1]] = items[2]
} } else {
sort.Ints(orders) mi[items[1]] = middlewarePath + items[2]
}
}
if os.Getenv("GOPACKAGE") == "core" { }
genImports("zmiddleware.go", mi)
}
if os.Getenv("GOPACKAGE") == "dnsserver" {
genDirectives("zdirectives.go", md)
} }
} else {
os.Exit(1)
} }
os.Exit(0)
genImports("core/zmiddleware.go", "core", mi)
genDirectives("core/dnsserver/zdirectives.go", "dnsserver", md)
} }
func genImports(file string, mi map[string]string) { func genImports(file, pack string, mi map[string]string) {
outs := header + "package " + os.Getenv("GOPACKAGE") + "\n\n" + "import (" outs := header + "package " + pack + "\n\n" + "import ("
if len(mi) > 0 { if len(mi) > 0 {
outs += "\n" outs += "\n"
} }
for _, v := range mi { for _, v := range mi {
outs += " _ \"" + v + "\"\n" outs += `_ "` + v + `\` + "\n"
} }
outs += ")\n" outs += ")\n"
err := ioutil.WriteFile(file, []byte(outs), 0644) res, err := format.Source([]byte(outs))
if err != nil { fatalIfErr(err)
os.Exit(1)
}
err = ioutil.WriteFile(file, res, 0644)
fatalIfErr(err)
} }
func genDirectives(file string, md map[int]string) { func genDirectives(file, pack string, md map[int]string) {
outs := header + "package " + os.Getenv("GOPACKAGE") + "\n\n" outs := header + "package " + pack + "\n\n"
outs += ` outs += `
// Directives are registered in the order they should be // Directives are registered in the order they should be
// executed. // executed.
...@@ -104,13 +89,26 @@ var directives = []string{ ...@@ -104,13 +89,26 @@ var directives = []string{
sort.Ints(orders) sort.Ints(orders)
for _, k := range orders { for _, k := range orders {
outs += " \"" + md[k] + "\",\n" outs += `"` + md[k] + `",` + "\n"
} }
outs += "}\n" outs += "}\n"
err := ioutil.WriteFile(file, []byte(outs), 0644) res, err := format.Source([]byte(outs))
fatalIfErr(err)
err = ioutil.WriteFile(file, res, 0644)
fatalIfErr(err)
}
func fatalIfErr(err error) {
if err != nil { if err != nil {
os.Exit(1) log.Fatal(err)
} }
} }
const (
middlewarePath = "github.com/miekg/coredns/middleware/"
middlewareFile = "middleware.cfg"
header = "// generated by directives_generate.go; DO NOT EDIT\n"
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment