aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/dep_fixer/Android.bp8
-rw-r--r--cmd/dep_fixer/deps.go95
-rw-r--r--cmd/dep_fixer/deps_test.go389
-rw-r--r--cmd/dep_fixer/main.go6
-rw-r--r--cmd/sbox/Android.bp1
-rw-r--r--cmd/sbox/sbox.go28
6 files changed, 31 insertions, 496 deletions
diff --git a/cmd/dep_fixer/Android.bp b/cmd/dep_fixer/Android.bp
index d2d1113d..97364d58 100644
--- a/cmd/dep_fixer/Android.bp
+++ b/cmd/dep_fixer/Android.bp
@@ -14,10 +14,6 @@
blueprint_go_binary {
name: "dep_fixer",
- deps: ["androidmk-parser"],
- srcs: [
- "main.go",
- "deps.go",
- ],
- testSrcs: ["deps_test.go"],
+ deps: ["soong-makedeps"],
+ srcs: ["main.go"],
}
diff --git a/cmd/dep_fixer/deps.go b/cmd/dep_fixer/deps.go
deleted file mode 100644
index 64c97f52..00000000
--- a/cmd/dep_fixer/deps.go
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2018 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 main
-
-import (
- "bytes"
- "fmt"
- "io"
- "strings"
-
- "android/soong/androidmk/parser"
-)
-
-type Deps struct {
- Output string
- Inputs []string
-}
-
-func Parse(filename string, r io.Reader) (*Deps, error) {
- p := parser.NewParser(filename, r)
- nodes, errs := p.Parse()
-
- if len(errs) == 1 {
- return nil, errs[0]
- } else if len(errs) > 1 {
- return nil, fmt.Errorf("many errors: %v", errs)
- }
-
- pos := func(node parser.Node) string {
- return p.Unpack(node.Pos()).String() + ": "
- }
-
- ret := &Deps{}
-
- for _, node := range nodes {
- switch x := node.(type) {
- case *parser.Comment:
- // Do nothing
- case *parser.Rule:
- if x.Recipe != "" {
- return nil, fmt.Errorf("%sunexpected recipe in rule: %v", pos(node), x)
- }
-
- if !x.Target.Const() {
- return nil, fmt.Errorf("%sunsupported variable expansion: %v", pos(node), x.Target.Dump())
- }
- outputs := x.Target.Words()
- if len(outputs) == 0 {
- return nil, fmt.Errorf("%smissing output: %v", pos(node), x)
- }
- ret.Output = outputs[0].Value(nil)
-
- if !x.Prerequisites.Const() {
- return nil, fmt.Errorf("%sunsupported variable expansion: %v", pos(node), x.Prerequisites.Dump())
- }
- for _, input := range x.Prerequisites.Words() {
- ret.Inputs = append(ret.Inputs, input.Value(nil))
- }
- default:
- return nil, fmt.Errorf("%sunexpected line: %#v", pos(node), node)
- }
- }
-
- return ret, nil
-}
-
-func (d *Deps) Print() []byte {
- // We don't really have to escape every \, but it's simpler,
- // and ninja will handle it.
- replacer := strings.NewReplacer(" ", "\\ ",
- ":", "\\:",
- "#", "\\#",
- "$", "$$",
- "\\", "\\\\")
-
- b := &bytes.Buffer{}
- fmt.Fprintf(b, "%s:", replacer.Replace(d.Output))
- for _, input := range d.Inputs {
- fmt.Fprintf(b, " %s", replacer.Replace(input))
- }
- fmt.Fprintln(b)
- return b.Bytes()
-}
diff --git a/cmd/dep_fixer/deps_test.go b/cmd/dep_fixer/deps_test.go
deleted file mode 100644
index 0a779b76..00000000
--- a/cmd/dep_fixer/deps_test.go
+++ /dev/null
@@ -1,389 +0,0 @@
-// Copyright 2018 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 main
-
-import (
- "bytes"
- "io"
- "io/ioutil"
- "os"
- "testing"
-)
-
-func TestParse(t *testing.T) {
- testCases := []struct {
- name string
- input string
- output Deps
- err error
- }{
- // These come from the ninja test suite
- {
- name: "Basic",
- input: "build/ninja.o: ninja.cc ninja.h eval_env.h manifest_parser.h",
- output: Deps{
- Output: "build/ninja.o",
- Inputs: []string{
- "ninja.cc",
- "ninja.h",
- "eval_env.h",
- "manifest_parser.h",
- },
- },
- },
- {
- name: "EarlyNewlineAndWhitespace",
- input: ` \
- out: in`,
- output: Deps{
- Output: "out",
- Inputs: []string{"in"},
- },
- },
- {
- name: "Continuation",
- input: `foo.o: \
- bar.h baz.h
-`,
- output: Deps{
- Output: "foo.o",
- Inputs: []string{"bar.h", "baz.h"},
- },
- },
- {
- name: "CarriageReturnContinuation",
- input: "foo.o: \\\r\n bar.h baz.h\r\n",
- output: Deps{
- Output: "foo.o",
- Inputs: []string{"bar.h", "baz.h"},
- },
- },
- {
- name: "BackSlashes",
- input: `Project\Dir\Build\Release8\Foo\Foo.res : \
- Dir\Library\Foo.rc \
- Dir\Library\Version\Bar.h \
- Dir\Library\Foo.ico \
- Project\Thing\Bar.tlb \
-`,
- output: Deps{
- Output: `Project\Dir\Build\Release8\Foo\Foo.res`,
- Inputs: []string{
- `Dir\Library\Foo.rc`,
- `Dir\Library\Version\Bar.h`,
- `Dir\Library\Foo.ico`,
- `Project\Thing\Bar.tlb`,
- },
- },
- },
- {
- name: "Spaces",
- input: `a\ bc\ def: a\ b c d`,
- output: Deps{
- Output: `a bc def`,
- Inputs: []string{"a b", "c", "d"},
- },
- },
- {
- name: "Escapes",
- input: `\!\@\#$$\%\^\&\\:`,
- output: Deps{
- Output: `\!\@#$\%\^\&\`,
- },
- },
- {
- name: "SpecialChars",
- // Ninja includes a number of '=', but our parser can't handle that,
- // since it sees the equals and switches over to assuming it's an
- // assignment.
- //
- // We don't have any files in our tree that contain an '=' character,
- // and Kati can't handle parsing this either, so for now I'm just
- // going to remove all the '=' characters below.
- //
- // It looks like make will only do this for the first
- // dependency, but not later dependencies.
- input: `C\:/Program\ Files\ (x86)/Microsoft\ crtdefs.h: \
- en@quot.header~ t+t-x!1 \
- openldap/slapd.d/cnconfig/cnschema/cn{0}core.ldif \
- Fu` + "\303\244ball",
- output: Deps{
- Output: "C:/Program Files (x86)/Microsoft crtdefs.h",
- Inputs: []string{
- "en@quot.header~",
- "t+t-x!1",
- "openldap/slapd.d/cnconfig/cnschema/cn{0}core.ldif",
- "Fu\303\244ball",
- },
- },
- },
- // Ninja's UnifyMultipleOutputs and RejectMultipleDifferentOutputs tests have been omitted,
- // since we don't want the same behavior.
-
- // Our own tests
- {
- name: "Multiple outputs",
- input: `a b: c
-a: d
-b: e`,
- output: Deps{
- Output: "b",
- Inputs: []string{
- "c",
- "d",
- "e",
- },
- },
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- out, err := Parse("test.d", bytes.NewBufferString(tc.input))
- if err != tc.err {
- t.Fatalf("Unexpected error: %v (expected %v)", err, tc.err)
- }
-
- if out.Output != tc.output.Output {
- t.Errorf("output file doesn't match:\n"+
- " str: %#v\n"+
- "want: %#v\n"+
- " got: %#v", tc.input, tc.output.Output, out.Output)
- }
-
- matches := true
- if len(out.Inputs) != len(tc.output.Inputs) {
- matches = false
- } else {
- for i := range out.Inputs {
- if out.Inputs[i] != tc.output.Inputs[i] {
- matches = false
- }
- }
- }
- if !matches {
- t.Errorf("input files don't match:\n"+
- " str: %#v\n"+
- "want: %#v\n"+
- " got: %#v", tc.input, tc.output.Inputs, out.Inputs)
- }
- })
- }
-}
-
-func BenchmarkParsing(b *testing.B) {
- // Write it out to a file to most closely match ninja's perftest
- tmpfile, err := ioutil.TempFile("", "depfile")
- if err != nil {
- b.Fatal("Failed to create temp file:", err)
- }
- defer os.Remove(tmpfile.Name())
- _, err = io.WriteString(tmpfile, `out/soong/.intermediates/external/ninja/ninja/linux_glibc_x86_64/obj/external/ninja/src/ninja.o: \
- external/ninja/src/ninja.cc external/libcxx/include/errno.h \
- external/libcxx/include/__config \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/features.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/predefs.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/sys/cdefs.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/wordsize.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/gnu/stubs.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/errno.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/errno.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/linux/errno.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/asm/errno.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/asm-generic/errno.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/asm-generic/errno-base.h \
- external/libcxx/include/limits.h \
- prebuilts/clang/host/linux-x86/clang-4639204/lib64/clang/6.0.1/include/limits.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/limits.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/local_lim.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/linux/limits.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/xopen_lim.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
- external/libcxx/include/stdio.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/stdio.h \
- external/libcxx/include/stddef.h \
- prebuilts/clang/host/linux-x86/clang-4639204/lib64/clang/6.0.1/include/stddef.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/types.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/typesizes.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/libio.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/_G_config.h \
- external/libcxx/include/wchar.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/wchar.h \
- prebuilts/clang/host/linux-x86/clang-4639204/lib64/clang/6.0.1/include/stdarg.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
- external/libcxx/include/stdlib.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/stdlib.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/waitflags.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/waitstatus.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/endian.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/endian.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/byteswap.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/xlocale.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/sys/types.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/time.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/sys/select.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/select.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/sigset.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/time.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/select2.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/sys/sysmacros.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/alloca.h \
- external/libcxx/include/string.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/string.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/getopt.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/unistd.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/posix_opt.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/environments.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/confname.h \
- external/ninja/src/browse.h external/ninja/src/build.h \
- external/libcxx/include/cstdio external/libcxx/include/map \
- external/libcxx/include/__tree external/libcxx/include/iterator \
- external/libcxx/include/iosfwd \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/wchar.h \
- external/libcxx/include/__functional_base \
- external/libcxx/include/type_traits external/libcxx/include/cstddef \
- prebuilts/clang/host/linux-x86/clang-4639204/lib64/clang/6.0.1/include/__stddef_max_align_t.h \
- external/libcxx/include/__nullptr external/libcxx/include/typeinfo \
- external/libcxx/include/exception external/libcxx/include/cstdlib \
- external/libcxx/include/cstdint external/libcxx/include/stdint.h \
- prebuilts/clang/host/linux-x86/clang-4639204/lib64/clang/6.0.1/include/stdint.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/stdint.h \
- external/libcxx/include/new external/libcxx/include/utility \
- external/libcxx/include/__tuple \
- external/libcxx/include/initializer_list \
- external/libcxx/include/cstring external/libcxx/include/__debug \
- external/libcxx/include/memory external/libcxx/include/limits \
- external/libcxx/include/__undef_macros external/libcxx/include/tuple \
- external/libcxx/include/stdexcept external/libcxx/include/cassert \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/assert.h \
- external/libcxx/include/atomic external/libcxx/include/algorithm \
- external/libcxx/include/functional external/libcxx/include/queue \
- external/libcxx/include/deque external/libcxx/include/__split_buffer \
- external/libcxx/include/vector external/libcxx/include/__bit_reference \
- external/libcxx/include/climits external/libcxx/include/set \
- external/libcxx/include/string external/libcxx/include/string_view \
- external/libcxx/include/__string external/libcxx/include/cwchar \
- external/libcxx/include/cwctype external/libcxx/include/cctype \
- external/libcxx/include/ctype.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/ctype.h \
- external/libcxx/include/wctype.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/wctype.h \
- external/ninja/src/graph.h external/ninja/src/eval_env.h \
- external/ninja/src/string_piece.h external/ninja/src/timestamp.h \
- external/ninja/src/util.h external/ninja/src/exit_status.h \
- external/ninja/src/line_printer.h external/ninja/src/metrics.h \
- external/ninja/src/build_log.h external/ninja/src/hash_map.h \
- external/libcxx/include/unordered_map \
- external/libcxx/include/__hash_table external/libcxx/include/cmath \
- external/libcxx/include/math.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/math.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/huge_val.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/huge_valf.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/huge_vall.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/inf.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/nan.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/mathdef.h \
- prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/sysroot/usr/include/x86_64-linux-gnu/bits/mathcalls.h \
- external/ninja/src/deps_log.h external/ninja/src/clean.h \
- external/ninja/src/debug_flags.h external/ninja/src/disk_interface.h \
- external/ninja/src/graphviz.h external/ninja/src/manifest_parser.h \
- external/ninja/src/lexer.h external/ninja/src/state.h \
- external/ninja/src/version.h`)
- tmpfile.Close()
- if err != nil {
- b.Fatal("Failed to write dep file:", err)
- }
- b.ResetTimer()
-
- for n := 0; n < b.N; n++ {
- depfile, err := ioutil.ReadFile(tmpfile.Name())
- if err != nil {
- b.Fatal("Failed to read dep file:", err)
- }
-
- _, err = Parse(tmpfile.Name(), bytes.NewBuffer(depfile))
- if err != nil {
- b.Fatal("Failed to parse:", err)
- }
- }
-}
-
-func TestDepPrint(t *testing.T) {
- testCases := []struct {
- name string
- input Deps
- output string
- }{
- {
- name: "Empty",
- input: Deps{
- Output: "a",
- },
- output: "a:",
- },
- {
- name: "Basic",
- input: Deps{
- Output: "a",
- Inputs: []string{"b", "c"},
- },
- output: "a: b c",
- },
- {
- name: "Escapes",
- input: Deps{
- Output: `\!\@#$\%\^\&\`,
- },
- output: `\\!\\@\#$$\\%\\^\\&\\:`,
- },
- {
- name: "Spaces",
- input: Deps{
- Output: "a b",
- Inputs: []string{"c d", "e f "},
- },
- output: `a\ b: c\ d e\ f\ `,
- },
- {
- name: "SpecialChars",
- input: Deps{
- Output: "C:/Program Files (x86)/Microsoft crtdefs.h",
- Inputs: []string{
- "en@quot.header~",
- "t+t-x!1",
- "openldap/slapd.d/cnconfig/cnschema/cn{0}core.ldif",
- "Fu\303\244ball",
- },
- },
- output: `C\:/Program\ Files\ (x86)/Microsoft\ crtdefs.h: en@quot.header~ t+t-x!1 openldap/slapd.d/cnconfig/cnschema/cn{0}core.ldif Fu` + "\303\244ball",
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- out := tc.input.Print()
- outStr := string(out)
- want := tc.output + "\n"
-
- if outStr != want {
- t.Errorf("output doesn't match:\nwant:%q\n got:%q", want, outStr)
- }
- })
- }
-}
diff --git a/cmd/dep_fixer/main.go b/cmd/dep_fixer/main.go
index f94cf2fd..d1bd1391 100644
--- a/cmd/dep_fixer/main.go
+++ b/cmd/dep_fixer/main.go
@@ -25,6 +25,8 @@ import (
"io/ioutil"
"log"
"os"
+
+ "android/soong/makedeps"
)
func main() {
@@ -39,7 +41,7 @@ func main() {
log.Fatal("Expected at least one input file as an argument")
}
- var mergedDeps *Deps
+ var mergedDeps *makedeps.Deps
var firstInput []byte
for i, arg := range flag.Args() {
@@ -48,7 +50,7 @@ func main() {
log.Fatalf("Error opening %q: %v", arg, err)
}
- deps, err := Parse(arg, bytes.NewBuffer(append([]byte(nil), input...)))
+ deps, err := makedeps.Parse(arg, bytes.NewBuffer(append([]byte(nil), input...)))
if err != nil {
log.Fatalf("Failed to parse: %v", err)
}
diff --git a/cmd/sbox/Android.bp b/cmd/sbox/Android.bp
index fe4c7bbc..a706810d 100644
--- a/cmd/sbox/Android.bp
+++ b/cmd/sbox/Android.bp
@@ -14,6 +14,7 @@
blueprint_go_binary {
name: "sbox",
+ deps: ["soong-makedeps"],
srcs: [
"sbox.go",
],
diff --git a/cmd/sbox/sbox.go b/cmd/sbox/sbox.go
index 4167edb3..7057b33f 100644
--- a/cmd/sbox/sbox.go
+++ b/cmd/sbox/sbox.go
@@ -15,6 +15,7 @@
package main
import (
+ "bytes"
"errors"
"flag"
"fmt"
@@ -25,6 +26,8 @@ import (
"path/filepath"
"strings"
"time"
+
+ "android/soong/makedeps"
)
var (
@@ -56,7 +59,7 @@ func usageViolation(violation string) {
}
fmt.Fprintf(os.Stderr,
- "Usage: sbox -c <commandToRun> --sandbox-path <sandboxPath> --output-root <outputRoot> --overwrite [--depfile-out depFile] <outputFile> [<outputFile>...]\n"+
+ "Usage: sbox -c <commandToRun> --sandbox-path <sandboxPath> --output-root <outputRoot> [--depfile-out depFile] <outputFile> [<outputFile>...]\n"+
"\n"+
"Deletes <outputRoot>,"+
"runs <commandToRun>,"+
@@ -152,9 +155,6 @@ func run() error {
return err
}
allOutputs = append(allOutputs, sandboxedDepfile)
- if !strings.Contains(rawCommand, "__SBOX_DEPFILE__") {
- return fmt.Errorf("the --depfile-out argument only makes sense if the command contains the text __SBOX_DEPFILE__")
- }
rawCommand = strings.Replace(rawCommand, "__SBOX_DEPFILE__", filepath.Join(tempDir, sandboxedDepfile), -1)
}
@@ -281,6 +281,26 @@ func run() error {
}
}
+ // Rewrite the depfile so that it doesn't include the (randomized) sandbox directory
+ if depfileOut != "" {
+ in, err := ioutil.ReadFile(depfileOut)
+ if err != nil {
+ return err
+ }
+
+ deps, err := makedeps.Parse(depfileOut, bytes.NewBuffer(in))
+ if err != nil {
+ return err
+ }
+
+ deps.Output = "outputfile"
+
+ err = ioutil.WriteFile(depfileOut, deps.Print(), 0666)
+ if err != nil {
+ return err
+ }
+ }
+
// TODO(jeffrygaston) if a process creates more output files than it declares, should there be a warning?
return nil
}