diff options
Diffstat (limited to 'caddy/build.go')
-rw-r--r-- | caddy/build.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/caddy/build.go b/caddy/build.go new file mode 100644 index 000000000..864996d7f --- /dev/null +++ b/caddy/build.go @@ -0,0 +1,73 @@ +// +build dev + +// build.go automates proper versioning of caddy binaries. +// Use it like: go run build.go +// You can customize the build with the -goos, -goarch, and +// -goarm CLI options: go run build.go -goos=windows +// +// To get proper version information, this program must be +// run from the directory of this file, and the source code +// must be a working git repository, since it needs to know +// if the source is in a clean state. +// +// This program is NOT required to build Caddy from source +// since it is go-gettable. (You can run plain `go build` +// in this directory to get a binary.) However, issues filed +// without version information will likely be closed. +package main + +import ( + "flag" + "fmt" + "log" + "os" + "os/exec" + "path/filepath" + + "github.com/caddyserver/buildworker" +) + +var goos, goarch, goarm string + +func init() { + flag.StringVar(&goos, "goos", "", "GOOS for which to build") + flag.StringVar(&goarch, "goarch", "", "GOARCH for which to build") + flag.StringVar(&goarm, "goarm", "", "GOARM for which to build") +} + +func main() { + flag.Parse() + + gopath := os.Getenv("GOPATH") + + pwd, err := os.Getwd() + if err != nil { + log.Fatal(err) + } + + ldflags, err := buildworker.MakeLdFlags(filepath.Join(pwd, "..")) + if err != nil { + log.Fatal(err) + } + + args := []string{"build", "-ldflags", ldflags} + args = append(args, "-asmflags", fmt.Sprintf("-trimpath=%s", gopath)) + args = append(args, "-gcflags", fmt.Sprintf("-trimpath=%s", gopath)) + cmd := exec.Command("go", args...) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + cmd.Env = os.Environ() + for _, env := range []string{ + "CGO_ENABLED=0", + "GOOS=" + goos, + "GOARCH=" + goarch, + "GOARM=" + goarm, + } { + cmd.Env = append(cmd.Env, env) + } + + err = cmd.Run() + if err != nil { + log.Fatal(err) + } +} |