Merge "Move env var config loading to be within the config package."
This commit is contained in:
@@ -16,7 +16,6 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@@ -36,11 +35,6 @@ import (
|
||||
"android/soong/ui/tracer"
|
||||
)
|
||||
|
||||
const (
|
||||
configDir = "vendor/google/tools/soong_config"
|
||||
jsonSuffix = "json"
|
||||
)
|
||||
|
||||
// A command represents an operation to be executed in the soong build
|
||||
// system.
|
||||
type command struct {
|
||||
@@ -117,43 +111,6 @@ func inList(s string, list []string) bool {
|
||||
return indexList(s, list) != -1
|
||||
}
|
||||
|
||||
func loadEnvConfig(config build.Config) error {
|
||||
bc := os.Getenv("ANDROID_BUILD_ENVIRONMENT_CONFIG")
|
||||
if bc == "" {
|
||||
return nil
|
||||
}
|
||||
configDirs := []string{
|
||||
os.Getenv("ANDROID_BUILD_ENVIRONMENT_CONFIG_DIR"),
|
||||
config.OutDir(),
|
||||
configDir,
|
||||
}
|
||||
var cfgFile string
|
||||
for _, dir := range configDirs {
|
||||
cfgFile = filepath.Join(os.Getenv("TOP"), dir, fmt.Sprintf("%s.%s", bc, jsonSuffix))
|
||||
if _, err := os.Stat(cfgFile); err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
envVarsJSON, err := ioutil.ReadFile(cfgFile)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "\033[33mWARNING:\033[0m failed to open config file %s: %s\n", cfgFile, err.Error())
|
||||
return nil
|
||||
}
|
||||
|
||||
var envVars map[string]map[string]string
|
||||
if err := json.Unmarshal(envVarsJSON, &envVars); err != nil {
|
||||
return fmt.Errorf("env vars config file: %s did not parse correctly: %s", cfgFile, err.Error())
|
||||
}
|
||||
for k, v := range envVars["env"] {
|
||||
if os.Getenv(k) != "" {
|
||||
continue
|
||||
}
|
||||
config.Environment().Set(k, v)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Main execution of soong_ui. The command format is as follows:
|
||||
//
|
||||
// soong_ui <command> [<arg 1> <arg 2> ... <arg n>]
|
||||
@@ -218,11 +175,6 @@ func main() {
|
||||
|
||||
config := c.config(buildCtx, args...)
|
||||
|
||||
if err := loadEnvConfig(config); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "failed to parse env config files: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
build.SetupOutDir(buildCtx, config)
|
||||
|
||||
if config.UseBazel() && config.Dist() {
|
||||
|
@@ -15,7 +15,9 @@
|
||||
package build
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
@@ -30,6 +32,11 @@ import (
|
||||
smpb "android/soong/ui/metrics/metrics_proto"
|
||||
)
|
||||
|
||||
const (
|
||||
envConfigDir = "vendor/google/tools/soong_config"
|
||||
jsonSuffix = "json"
|
||||
)
|
||||
|
||||
type Config struct{ *configImpl }
|
||||
|
||||
type configImpl struct {
|
||||
@@ -128,6 +135,43 @@ func checkTopDir(ctx Context) {
|
||||
}
|
||||
}
|
||||
|
||||
func loadEnvConfig(config *configImpl) error {
|
||||
bc := os.Getenv("ANDROID_BUILD_ENVIRONMENT_CONFIG")
|
||||
if bc == "" {
|
||||
return nil
|
||||
}
|
||||
configDirs := []string{
|
||||
os.Getenv("ANDROID_BUILD_ENVIRONMENT_CONFIG_DIR"),
|
||||
config.OutDir(),
|
||||
envConfigDir,
|
||||
}
|
||||
var cfgFile string
|
||||
for _, dir := range configDirs {
|
||||
cfgFile = filepath.Join(os.Getenv("TOP"), dir, fmt.Sprintf("%s.%s", bc, jsonSuffix))
|
||||
if _, err := os.Stat(cfgFile); err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
envVarsJSON, err := ioutil.ReadFile(cfgFile)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "\033[33mWARNING:\033[0m failed to open config file %s: %s\n", cfgFile, err.Error())
|
||||
return nil
|
||||
}
|
||||
|
||||
var envVars map[string]map[string]string
|
||||
if err := json.Unmarshal(envVarsJSON, &envVars); err != nil {
|
||||
return fmt.Errorf("env vars config file: %s did not parse correctly: %s", cfgFile, err.Error())
|
||||
}
|
||||
for k, v := range envVars["env"] {
|
||||
if os.Getenv(k) != "" {
|
||||
continue
|
||||
}
|
||||
config.Environment().Set(k, v)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewConfig(ctx Context, args ...string) Config {
|
||||
ret := &configImpl{
|
||||
environ: OsEnvironment(),
|
||||
@@ -157,6 +201,12 @@ func NewConfig(ctx Context, args ...string) Config {
|
||||
ret.environ.Set("OUT_DIR", outDir)
|
||||
}
|
||||
|
||||
// loadEnvConfig needs to know what the OUT_DIR is, so it should
|
||||
// be called after we determine the appropriate out directory.
|
||||
if err := loadEnvConfig(ret); err != nil {
|
||||
ctx.Fatalln("Failed to parse env config files: %v", err)
|
||||
}
|
||||
|
||||
if distDir, ok := ret.environ.Get("DIST_DIR"); ok {
|
||||
ret.distDir = filepath.Clean(distDir)
|
||||
} else {
|
||||
@@ -992,7 +1042,7 @@ func (c *configImpl) StartGoma() bool {
|
||||
}
|
||||
|
||||
func (c *configImpl) UseRBE() bool {
|
||||
if v, ok := c.environ.Get("USE_RBE"); ok {
|
||||
if v, ok := c.Environment().Get("USE_RBE"); ok {
|
||||
v = strings.TrimSpace(v)
|
||||
if v != "" && v != "false" {
|
||||
return true
|
||||
|
Reference in New Issue
Block a user