blob: 06aedc15f40bf2dfe354751a59924fb34e472e8f [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"context"
"flag"
"io"
"log"
"os"
"path/filepath"
"strings"
"go.fuchsia.dev/tools/build/gndoc"
)
type stringsFlag []string
func (s *stringsFlag) String() string {
return strings.Join(*s, ", ")
}
func (s *stringsFlag) Set(value string) error {
*s = append(*s, value)
return nil
}
var (
keyArgs stringsFlag
inputFiles stringsFlag
outFile string
sourcesFile string
)
func init() {
flag.Var(&keyArgs, "key", "a label for output")
flag.Var(&inputFiles, "in", "path to an input file")
flag.StringVar(&outFile, "out", "", "path to output file (default stdout)")
flag.StringVar(&sourcesFile, "s", "", "path to json file generated by Jiri projects")
}
func main() {
flag.Parse()
if flag.NArg() != 0 {
flag.PrintDefaults()
}
if sourcesFile == "" {
log.Fatalf("Error: no Jiri project reference file specified.\nTo generate, use jiri project -json-output=<file>.\n")
}
// Open the json file.
sources, err := os.Open(sourcesFile)
if err != nil {
log.Fatalf("Error: unable to open %s", sourcesFile)
}
defer sources.Close()
ctx := context.Background()
sourceMap, err := gndoc.NewSourceMap(sources)
if err != nil {
log.Fatalf("Error: %s", err)
}
argMap := gndoc.NewArgMap(sourceMap)
args, errs := gndoc.ParseGNArgs(ctx, inputFiles, keyArgs)
argMap.AddArgs(args)
if err := <-errs; err != nil {
log.Fatalf("Error: %s\n", err)
}
var out io.Writer
if outFile != "" {
var err error
if dirErr := os.MkdirAll(filepath.Dir(outFile), os.ModePerm); dirErr != nil {
log.Fatalf("Error creating directories: %s", dirErr)
}
out, err = os.Create(outFile)
if err != nil {
log.Fatalf("Error opening file: %s", err)
}
} else {
out = os.Stdout
}
argMap.EmitMarkdown(out)
}