From d08b697828315502b34deed28307f6e4663342ec Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Tue, 26 Sep 2017 10:50:54 +0900 Subject: [PATCH] Allow macro definition with space cflags: ["-DMACRO=\" definition \""] should not be rejected. Bug: 66914194 Test: TestCompilerFlags in cc_test.go Change-Id: I7f96505a83898616415ef1fb7e13596b56a063f3 --- cc/cc_test.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++- cc/check.go | 5 +++ 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/cc/cc_test.go b/cc/cc_test.go index b9cdba550..dc04a4e14 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -603,5 +603,89 @@ func TestLibDeps(t *testing.T) { expected, ) } - +} + +var compilerFlagsTestCases = []struct { + in string + out bool +}{ + { + in: "a", + out: false, + }, + { + in: "-a", + out: true, + }, + { + in: "-Ipath/to/something", + out: false, + }, + { + in: "-isystempath/to/something", + out: false, + }, + { + in: "--coverage", + out: false, + }, + { + in: "-include a/b", + out: true, + }, + { + in: "-include a/b c/d", + out: false, + }, + { + in: "-DMACRO", + out: true, + }, + { + in: "-DMAC RO", + out: false, + }, + { + in: "-a -b", + out: false, + }, + { + in: "-DMACRO=definition", + out: true, + }, + { + in: "-DMACRO=defi nition", + out: true, // TODO(jiyong): this should be false + }, + { + in: "-DMACRO(x)=x + 1", + out: true, + }, + { + in: "-DMACRO=\"defi nition\"", + out: true, + }, +} + +type mockContext struct { + BaseModuleContext + result bool +} + +func (ctx *mockContext) PropertyErrorf(property, format string, args ...interface{}) { + // CheckBadCompilerFlags calls this function when the flag should be rejected + ctx.result = false +} + +func TestCompilerFlags(t *testing.T) { + for _, testCase := range compilerFlagsTestCases { + ctx := &mockContext{result: true} + CheckBadCompilerFlags(ctx, "", []string{testCase.in}) + if ctx.result != testCase.out { + t.Errorf("incorrect output:") + t.Errorf(" input: %#v", testCase.in) + t.Errorf(" expected: %#v", testCase.out) + t.Errorf(" got: %#v", ctx.result) + } + } } diff --git a/cc/check.go b/cc/check.go index d04b14595..4e9e16080 100644 --- a/cc/check.go +++ b/cc/check.go @@ -50,6 +50,11 @@ func CheckBadCompilerFlags(ctx BaseModuleContext, prop string, flags []string) { } else if strings.HasPrefix("../", path) { ctx.PropertyErrorf(prop, "Path must not start with `../`: `%s`. Use include_dirs to -include from a different directory", flag) } + } else if strings.HasPrefix(flag, "-D") && strings.Contains(flag, "=") { + // Do nothing in this case. + // For now, we allow space characters in -DNAME=def form to allow use cases + // like -DNAME="value with string". Later, this check should be done more + // correctly to prevent multi flag cases like -DNAME=value -O2. } else { ctx.PropertyErrorf(prop, "Bad flag: `%s` is not an allowed multi-word flag. Should it be split into multiple flags?", flag) }