Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53b2f36b authored by Lukacs T. Berki's avatar Lukacs T. Berki
Browse files

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
parent ed0f6e84
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -78,9 +78,6 @@ bootstrap_go_package {
        "variable.go",
        "visibility.go",
        "writedocs.go",

        // Lock down environment access last
        "env.go",
    ],
    testSrcs: [
        "android_test.go",
+3 −3
Original line number Diff line number Diff line
@@ -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
// context or environment deps).
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 {
		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
// 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.
	config := &config{
		ProductVariablesFileName: filepath.Join(buildDir, productVariablesFileName),

		env: originalEnv,
		env: availableEnv,

		srcDir:            srcDir,
		buildDir:          buildDir,

android/env.go

deleted100644 → 0
+0 −40
Original line number Diff line number Diff line
// 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)
	}
}
+28 −9
Original line number Diff line number Diff line
@@ -75,8 +75,8 @@ func newContext(configuration android.Config, prepareBuildActions bool) *android
	return ctx
}

func newConfig(srcDir, outDir string) android.Config {
	configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile())
func newConfig(srcDir, outDir string, availableEnv map[string]string) android.Config {
	configuration, err := android.NewConfig(srcDir, outDir, bootstrap.CmdlineModuleListFile(), availableEnv)
	if err != nil {
		fmt.Fprintf(os.Stderr, "%s", err)
		os.Exit(1)
@@ -188,12 +188,31 @@ func main() {

	shared.ReexecWithDelveMaybe(delveListen, delvePath)
	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.
	srcDir := filepath.Dir(flag.Arg(0))
	configuration := newConfig(srcDir, outDir)
	configuration := newConfig(srcDir, outDir, availableEnv)
	extraNinjaDeps := []string{
		configuration.ProductVariablesFileName,
		shared.JoinPath(outDir, "soong.environment.used"),
@@ -219,19 +238,19 @@ func main() {
	}

	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())
	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)
	}

	err = ioutil.WriteFile(path, data, 0666)
	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)
	}