diff options
author | 2021-02-26 14:27:36 +0100 | |
---|---|---|
committer | 2021-03-03 09:14:22 +0100 | |
commit | 7690c099539884c8c4a94429eed54573586321be (patch) | |
tree | 6c947227785120140c4bc8fc1b7083833ae58a21 /shared | |
parent | 3bed960399dad2f97f75ef33e1ab407b84d3e6c7 (diff) |
cd to / before running soong_build .
This lets one avoid any decisions as to when to chdir there during its
execution and leads to better sandboxing because the pwd doesn't leak to
init() functions anymore.
Test: Manual.
Change-Id: I1560da8ed3a621249426f9e8908aa890c21e13ba
Diffstat (limited to 'shared')
-rw-r--r-- | shared/Android.bp | 4 | ||||
-rw-r--r-- | shared/debug.go | 17 | ||||
-rw-r--r-- | shared/env.go | 22 | ||||
-rw-r--r-- | shared/paths.go | 15 | ||||
-rw-r--r-- | shared/paths_test.go | 32 |
5 files changed, 90 insertions, 0 deletions
diff --git a/shared/Android.bp b/shared/Android.bp index c79bc2b39..deb17f8f6 100644 --- a/shared/Android.bp +++ b/shared/Android.bp @@ -8,6 +8,10 @@ bootstrap_go_package { srcs: [ "env.go", "paths.go", + "debug.go", + ], + testSrcs: [ + "paths_test.go", ], deps: [ "soong-bazel", diff --git a/shared/debug.go b/shared/debug.go new file mode 100644 index 000000000..0c9ba4f95 --- /dev/null +++ b/shared/debug.go @@ -0,0 +1,17 @@ +package shared + +import ( + "os" + "os/exec" +) + +// Finds the Delve binary to use. Either uses the SOONG_DELVE_PATH environment +// variable or if that is unset, looks at $PATH. +func ResolveDelveBinary() string { + result := os.Getenv("SOONG_DELVE_PATH") + if result == "" { + result, _ = exec.LookPath("dlv") + } + + return result +} diff --git a/shared/env.go b/shared/env.go index 7900daa88..152729ba0 100644 --- a/shared/env.go +++ b/shared/env.go @@ -91,6 +91,28 @@ func StaleEnvFile(filepath string, getenv func(string) string) (bool, error) { return false, nil } +// Deserializes and environment serialized by EnvFileContents() and returns it +// as a map[string]string. +func EnvFromFile(envFile string) (map[string]string, error) { + result := make(map[string]string) + data, err := ioutil.ReadFile(envFile) + if err != nil { + return result, err + } + + var contents envFileData + err = json.Unmarshal(data, &contents) + if err != nil { + return result, err + } + + for _, entry := range contents { + result[entry.Key] = entry.Value + } + + return result, nil +} + // Implements sort.Interface so that we can use sort.Sort on envFileData arrays. func (e envFileData) Len() int { return len(e) diff --git a/shared/paths.go b/shared/paths.go index 1b9ff6098..fca8b4c15 100644 --- a/shared/paths.go +++ b/shared/paths.go @@ -30,6 +30,21 @@ type SharedPaths interface { BazelMetricsDir() string } +// Joins the path strings in the argument list, taking absolute paths into +// account. That is, if one of the strings is an absolute path, the ones before +// are ignored. +func JoinPath(base string, rest ...string) string { + result := base + for _, next := range rest { + if filepath.IsAbs(next) { + result = next + } else { + result = filepath.Join(result, next) + } + } + return result +} + // Given the out directory, returns the root of the temp directory (to be cleared at the start of each execution of Soong) func TempDirForOutDir(outDir string) (tempPath string) { return filepath.Join(outDir, ".temp") diff --git a/shared/paths_test.go b/shared/paths_test.go new file mode 100644 index 000000000..018d55f34 --- /dev/null +++ b/shared/paths_test.go @@ -0,0 +1,32 @@ +// Copyright 2021 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 shared + +import ( + "testing" +) + +func assertEqual(t *testing.T, expected, actual string) { + t.Helper() + if expected != actual { + t.Errorf("expected %q != got %q", expected, actual) + } +} + +func TestJoinPath(t *testing.T) { + assertEqual(t, "/a/b", JoinPath("c/d", "/a/b")) + assertEqual(t, "a/b", JoinPath("a", "b")) + assertEqual(t, "/a/b", JoinPath("x", "/a", "b")) +} |