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  }