Delete android/env.go .
Properly plumb the available environment to the configuration instead of going through the global variable originalEnv. Test: Presubmit. Change-Id: Ia1ea753d5e72c02a0dcaa4c0b43bd6e24fc47cec
This commit is contained in:
@@ -78,9 +78,6 @@ bootstrap_go_package {
|
|||||||
"variable.go",
|
"variable.go",
|
||||||
"visibility.go",
|
"visibility.go",
|
||||||
"writedocs.go",
|
"writedocs.go",
|
||||||
|
|
||||||
// Lock down environment access last
|
|
||||||
"env.go",
|
|
||||||
],
|
],
|
||||||
testSrcs: [
|
testSrcs: [
|
||||||
"android_test.go",
|
"android_test.go",
|
||||||
|
@@ -345,7 +345,7 @@ func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[st
|
|||||||
// multiple runs in the same program execution is carried over (such as Bazel
|
// multiple runs in the same program execution is carried over (such as Bazel
|
||||||
// context or environment deps).
|
// context or environment deps).
|
||||||
func ConfigForAdditionalRun(c Config) (Config, error) {
|
func ConfigForAdditionalRun(c Config) (Config, error) {
|
||||||
newConfig, err := NewConfig(c.srcDir, c.buildDir, c.moduleListFile)
|
newConfig, err := NewConfig(c.srcDir, c.buildDir, c.moduleListFile, c.env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Config{}, err
|
return Config{}, err
|
||||||
}
|
}
|
||||||
@@ -356,12 +356,12 @@ func ConfigForAdditionalRun(c Config) (Config, error) {
|
|||||||
|
|
||||||
// NewConfig creates a new Config object. The srcDir argument specifies the path
|
// NewConfig creates a new Config object. The srcDir argument specifies the path
|
||||||
// to the root source directory. It also loads the config file, if found.
|
// to the root source directory. It also loads the config file, if found.
|
||||||
func NewConfig(srcDir, buildDir string, moduleListFile string) (Config, error) {
|
func NewConfig(srcDir, buildDir string, moduleListFile string, availableEnv map[string]string) (Config, error) {
|
||||||
// Make a config with default options.
|
// Make a config with default options.
|
||||||
config := &config{
|
config := &config{
|
||||||
ProductVariablesFileName: filepath.Join(buildDir, productVariablesFileName),
|
ProductVariablesFileName: filepath.Join(buildDir, productVariablesFileName),
|
||||||
|
|
||||||
env: originalEnv,
|
env: availableEnv,
|
||||||
|
|
||||||
srcDir: srcDir,
|
srcDir: srcDir,
|
||||||
buildDir: buildDir,
|
buildDir: buildDir,
|
||||||
|
@@ -1,40 +0,0 @@
|
|||||||
// Copyright 2015 Google Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package android
|
|
||||||
|
|
||||||
import (
|
|
||||||
"android/soong/shared"
|
|
||||||
)
|
|
||||||
|
|
||||||
// This file supports dependencies on environment variables. During build
|
|
||||||
// manifest generation, any dependency on an environment variable is added to a
|
|
||||||
// list. At the end of the build, a JSON file called soong.environment.used is
|
|
||||||
// written containing the current value of all used environment variables. The
|
|
||||||
// next time the top-level build script is run, soong_ui parses the compare the
|
|
||||||
// contents of the used environment variables, then, if they changed, deletes
|
|
||||||
// soong.environment.used to cause a rebuild.
|
|
||||||
//
|
|
||||||
// The dependency of build.ninja on soong.environment.used is declared in
|
|
||||||
// build.ninja.d
|
|
||||||
|
|
||||||
var originalEnv map[string]string
|
|
||||||
|
|
||||||
func InitEnvironment(envFile string) {
|
|
||||||
var err error
|
|
||||||
originalEnv, err = shared.EnvFromFile(envFile)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
@@ -75,8 +75,8 @@ func newContext(configuration android.Config, prepareBuildActions bool) *android
|
|||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
func newConfig(srcDir, outDir string) android.Config {
|
func newConfig(srcDir, outDir string, availableEnv map[string]string) android.Config {
|
||||||
configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile())
|
configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile(), availableEnv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "%s", err)
|
fmt.Fprintf(os.Stderr, "%s", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@@ -188,12 +188,31 @@ func main() {
|
|||||||
|
|
||||||
shared.ReexecWithDelveMaybe(delveListen, delvePath)
|
shared.ReexecWithDelveMaybe(delveListen, delvePath)
|
||||||
android.InitSandbox(topDir)
|
android.InitSandbox(topDir)
|
||||||
android.InitEnvironment(shared.JoinPath(topDir, outDir, "soong.environment.available"))
|
|
||||||
|
|
||||||
usedVariablesFile := shared.JoinPath(outDir, "soong.environment.used")
|
// soong_ui dumps the available environment variables to
|
||||||
|
// soong.environment.available . Then soong_build itself is run with an empty
|
||||||
|
// environment so that the only way environment variables can be accessed is
|
||||||
|
// using Config, which tracks access to them.
|
||||||
|
|
||||||
|
// At the end of the build, a file called soong.environment.used is written
|
||||||
|
// containing the current value of all used environment variables. The next
|
||||||
|
// time soong_ui is run, it checks whether any environment variables that was
|
||||||
|
// used had changed and if so, it deletes soong.environment.used to cause a
|
||||||
|
// rebuild.
|
||||||
|
//
|
||||||
|
// The dependency of build.ninja on soong.environment.used is declared in
|
||||||
|
// build.ninja.d
|
||||||
|
availableEnvFile := shared.JoinPath(topDir, outDir, "soong.environment.available")
|
||||||
|
usedEnvFile := shared.JoinPath(topDir, outDir, "soong.environment.used")
|
||||||
|
availableEnv, err := shared.EnvFromFile(availableEnvFile)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "error reading available environment file %s: %s\n", availableEnvFile, err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
// The top-level Blueprints file is passed as the first argument.
|
// The top-level Blueprints file is passed as the first argument.
|
||||||
srcDir := filepath.Dir(flag.Arg(0))
|
srcDir := filepath.Dir(flag.Arg(0))
|
||||||
configuration := newConfig(srcDir, outDir)
|
configuration := newConfig(srcDir, outDir, availableEnv)
|
||||||
extraNinjaDeps := []string{
|
extraNinjaDeps := []string{
|
||||||
configuration.ProductVariablesFileName,
|
configuration.ProductVariablesFileName,
|
||||||
shared.JoinPath(outDir, "soong.environment.used"),
|
shared.JoinPath(outDir, "soong.environment.used"),
|
||||||
@@ -219,19 +238,19 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
doChosenActivity(configuration, extraNinjaDeps)
|
doChosenActivity(configuration, extraNinjaDeps)
|
||||||
writeUsedVariablesFile(shared.JoinPath(topDir, usedVariablesFile), configuration)
|
writeUsedEnvironmentFile(usedEnvFile, configuration)
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeUsedVariablesFile(path string, configuration android.Config) {
|
func writeUsedEnvironmentFile(path string, configuration android.Config) {
|
||||||
data, err := shared.EnvFileContents(configuration.EnvDeps())
|
data, err := shared.EnvFileContents(configuration.EnvDeps())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "error writing used variables file %s: %s\n", path, err)
|
fmt.Fprintf(os.Stderr, "error writing used environment file %s: %s\n", path, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ioutil.WriteFile(path, data, 0666)
|
err = ioutil.WriteFile(path, data, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "error writing used variables file %s: %s\n", path, err)
|
fmt.Fprintf(os.Stderr, "error writing used environment file %s: %s\n", path, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user