Files
build_soong/cmd/release_config/build_flag_declarations/main.go
LaMont Jones 194d492d55 all_flags.pb: Properly handle intermediate files
Bug: 343203557
Test: manual, TH
Change-Id: I9a4ef39b0c2a641ccd996187ce5f7629520dffc0
2024-05-28 13:24:19 -07:00

82 lines
2.0 KiB
Go

package main
import (
"flag"
"fmt"
"os"
rc_lib "android/soong/cmd/release_config/release_config_lib"
rc_proto "android/soong/cmd/release_config/release_config_proto"
)
type Flags struct {
// The path to the top of the workspace. Default: ".".
top string
// Output file.
output string
// Format for output file
format string
// List of flag_declaration files to add.
decls rc_lib.StringList
// List of flag_artifacts files to merge.
intermediates rc_lib.StringList
// Disable warning messages
quiet bool
// Panic on errors.
debug bool
}
func main() {
var flags Flags
topDir, err := rc_lib.GetTopDir()
// Handle the common arguments
flag.StringVar(&flags.top, "top", topDir, "path to top of workspace")
flag.Var(&flags.decls, "decl", "path to a flag_declaration file. May be repeated")
flag.Var(&flags.intermediates, "intermediate", "path to a flag_artifacts file (output from a prior run). May be repeated")
flag.StringVar(&flags.format, "format", "pb", "output file format")
flag.StringVar(&flags.output, "output", "build_flags.pb", "output file")
flag.BoolVar(&flags.debug, "debug", false, "turn on debugging output for errors")
flag.BoolVar(&flags.quiet, "quiet", false, "disable warning messages")
flag.Parse()
errorExit := func(err error) {
if flags.debug {
panic(err)
}
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
if flags.quiet {
rc_lib.DisableWarnings()
}
if err = os.Chdir(flags.top); err != nil {
errorExit(err)
}
flagArtifacts := rc_lib.FlagArtifactsFactory("")
intermediates := []*rc_proto.FlagDeclarationArtifacts{}
for _, intermediate := range flags.intermediates {
fda := rc_lib.FlagDeclarationArtifactsFactory(intermediate)
intermediates = append(intermediates, fda)
}
for _, decl := range flags.decls {
fa := rc_lib.FlagArtifactFactory(decl)
(*flagArtifacts)[*fa.FlagDeclaration.Name] = fa
}
message := flagArtifacts.GenerateFlagDeclarationArtifacts(intermediates)
err = rc_lib.WriteFormattedMessage(flags.output, flags.format, message)
if err != nil {
errorExit(err)
}
}