diff options
author | Péter Szilágyi <peterke@gmail.com> | 2016-06-23 23:44:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-23 23:44:22 +0800 |
commit | acecefee8840e4bc09a319da0d6175d8e93ef29a (patch) | |
tree | cc72b58442db647cc1d3d86eb7682112141fb73e /internal/build/util.go | |
parent | 599e3c7b3f22b157c4f643a48d391cf972384099 (diff) | |
parent | 6c33ba14a4db99409657e6a68a7c629e09ceee3f (diff) | |
download | dexon-acecefee8840e4bc09a319da0d6175d8e93ef29a.tar dexon-acecefee8840e4bc09a319da0d6175d8e93ef29a.tar.gz dexon-acecefee8840e4bc09a319da0d6175d8e93ef29a.tar.bz2 dexon-acecefee8840e4bc09a319da0d6175d8e93ef29a.tar.lz dexon-acecefee8840e4bc09a319da0d6175d8e93ef29a.tar.xz dexon-acecefee8840e4bc09a319da0d6175d8e93ef29a.tar.zst dexon-acecefee8840e4bc09a319da0d6175d8e93ef29a.zip |
Merge pull request #2726 from fjl/appveyor
build: add ci.go, use it everywhere
Diffstat (limited to 'internal/build/util.go')
-rw-r--r-- | internal/build/util.go | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/internal/build/util.go b/internal/build/util.go new file mode 100644 index 000000000..eead824b2 --- /dev/null +++ b/internal/build/util.go @@ -0,0 +1,122 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package build + +import ( + "bytes" + "flag" + "fmt" + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "strings" + "text/template" +) + +var ( + DryRunFlag = flag.Bool("n", false, "dry run, don't execute commands") +) + +// MustRun executes the given command and exits the host process for +// any error. +func MustRun(cmd *exec.Cmd) { + fmt.Println(">>>", strings.Join(cmd.Args, " ")) + if !*DryRunFlag { + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + if err := cmd.Run(); err != nil { + log.Fatal(err) + } + } +} + +func MustRunCommand(cmd string, args ...string) { + MustRun(exec.Command(cmd, args...)) +} + +// GOPATH returns the value that the GOPATH environment +// variable should be set to. +func GOPATH() string { + path := filepath.SplitList(os.Getenv("GOPATH")) + if len(path) == 0 { + log.Fatal("GOPATH is not set") + } + // Ensure Godeps workspace is present in the path. + godeps, _ := filepath.Abs(filepath.Join("Godeps", "_workspace")) + for _, dir := range path { + if dir == godeps { + return strings.Join(path, string(filepath.ListSeparator)) + } + } + newpath := append(path[:1], godeps) + newpath = append(newpath, path[1:]...) + return strings.Join(newpath, string(filepath.ListSeparator)) +} + +func VERSION() string { + version, err := ioutil.ReadFile("VERSION") + if err != nil { + log.Fatal(err) + } + return string(bytes.TrimSpace(version)) +} + +func GitCommit() string { + return RunGit("rev-parse", "HEAD") +} + +func RunGit(args ...string) string { + cmd := exec.Command("git", args...) + var stdout, stderr bytes.Buffer + cmd.Stdout, cmd.Stderr = &stdout, &stderr + if err := cmd.Run(); err == exec.ErrNotFound { + log.Println("no git in PATH") + return "" + } else if err != nil { + log.Fatal(strings.Join(cmd.Args, " "), ": ", err, "\n", stderr.String()) + } + return strings.TrimSpace(stdout.String()) +} + +// Render renders the given template file. +func Render(templateFile, outputFile string, outputPerm os.FileMode, x interface{}) { + tpl := template.Must(template.ParseFiles(templateFile)) + render(tpl, outputFile, outputPerm, x) +} + +func RenderString(templateContent, outputFile string, outputPerm os.FileMode, x interface{}) { + tpl := template.Must(template.New("").Parse(templateContent)) + render(tpl, outputFile, outputPerm, x) +} + +func render(tpl *template.Template, outputFile string, outputPerm os.FileMode, x interface{}) { + if err := os.MkdirAll(filepath.Dir(outputFile), 0755); err != nil { + log.Fatal(err) + } + out, err := os.OpenFile(outputFile, os.O_CREATE|os.O_WRONLY|os.O_EXCL, outputPerm) + if err != nil { + log.Fatal(err) + } + if err := tpl.Execute(out, x); err != nil { + log.Fatal(err) + } + if err := out.Close(); err != nil { + log.Fatal(err) + } +} |