github.phpd.cn/thought-machine/please@v12.2.0+incompatible/src/parse/asp/main/compiler.go (about) 1 // Package main implements a compiler for the builtin build rules, which is used at bootstrap time. 2 package main 3 4 import ( 5 "os" 6 "path" 7 8 "gopkg.in/op/go-logging.v1" 9 10 "cli" 11 "core" 12 "parse/asp" 13 ) 14 15 var log = logging.MustGetLogger("asp") 16 17 var opts = struct { 18 Usage string 19 Verbosity int `short:"v" long:"verbose" default:"2" description:"Verbosity of output (higher number = more output)"` 20 OutputDir string `short:"o" long:"output_dir" required:"true" description:"Output directory"` 21 Args struct { 22 BuildFiles []string `positional-arg-name:"files" required:"true" description:"BUILD files to parse"` 23 } `positional-args:"true"` 24 }{ 25 Usage: `Compiler for built-in build rules.`, 26 } 27 28 func main() { 29 cli.ParseFlagsOrDie("parser", "11.0.0", &opts) 30 cli.InitLogging(opts.Verbosity) 31 32 if err := os.MkdirAll(opts.OutputDir, os.ModeDir|0775); err != nil { 33 log.Fatalf("%s", err) 34 } 35 p := asp.NewParser(core.NewDefaultBuildState()) 36 for _, filename := range opts.Args.BuildFiles { 37 out := path.Join(opts.OutputDir, path.Base(filename)) + ".gob" 38 if err := p.ParseToFile(filename, out); err != nil { 39 log.Fatalf("%s", err) 40 } 41 } 42 }