summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Stephen Crane <sjc@immunant.com> 2020-08-04 12:26:10 -0700
committer Stephen Crane <sjc@immunant.com> 2020-08-04 12:29:54 -0700
commit12e2cb71c7192edd43c0d283384d119900844cd3 (patch)
tree7cdeb98fb96e7773f02457dc2b7d51ea6ea3a196
parentea3574b5fab70527d23f834f34f1583eee6e900f (diff)
[rust] Escape flags for bindgen
Bindgen flags and cflags should be escaped, as they may contain shell globs or other special characters. Test: Updated Soong test passes. Change-Id: I3df8ef25391f53a191f0494c5ff8c641d4d4b6f8
-rw-r--r--rust/bindgen.go7
-rw-r--r--rust/bindgen_test.go9
2 files changed, 10 insertions, 6 deletions
diff --git a/rust/bindgen.go b/rust/bindgen.go
index 304f8ec38..64c559c51 100644
--- a/rust/bindgen.go
+++ b/rust/bindgen.go
@@ -18,6 +18,7 @@ import (
"strings"
"github.com/google/blueprint"
+ "github.com/google/blueprint/proptools"
"android/soong/android"
ccConfig "android/soong/cc/config"
@@ -113,15 +114,17 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDe
cflags = append(cflags, "-isystem "+include.String())
}
+ esc := proptools.NinjaAndShellEscapeList
+
// Module defined clang flags and include paths
- cflags = append(cflags, b.Properties.Cflags...)
+ cflags = append(cflags, esc(b.Properties.Cflags)...)
for _, include := range b.Properties.Local_include_dirs {
cflags = append(cflags, "-I"+android.PathForModuleSrc(ctx, include).String())
implicits = append(implicits, android.PathForModuleSrc(ctx, include))
}
bindgenFlags := defaultBindgenFlags
- bindgenFlags = append(bindgenFlags, strings.Join(b.Properties.Bindgen_flags, " "))
+ bindgenFlags = append(bindgenFlags, esc(b.Properties.Bindgen_flags)...)
wrapperFile := android.OptionalPathForModuleSrc(ctx, b.Properties.Wrapper_src)
if !wrapperFile.Valid() {
diff --git a/rust/bindgen_test.go b/rust/bindgen_test.go
index c42834843..a78bb5f98 100644
--- a/rust/bindgen_test.go
+++ b/rust/bindgen_test.go
@@ -27,8 +27,8 @@ func TestRustBindgen(t *testing.T) {
crate_name: "bindgen",
stem: "libbindgen",
source_stem: "bindings",
- bindgen_flags: ["--bindgen-flag"],
- cflags: ["--clang-flag"],
+ bindgen_flags: ["--bindgen-flag.*"],
+ cflags: ["--clang-flag()"],
shared_libs: ["libfoo_shared"],
static_libs: ["libfoo_static"],
}
@@ -42,10 +42,11 @@ func TestRustBindgen(t *testing.T) {
}
`)
libbindgen := ctx.ModuleForTests("libbindgen", "android_arm64_armv8-a").Output("bindings.rs")
- if !strings.Contains(libbindgen.Args["flags"], "--bindgen-flag") {
+ // Ensure that the flags are present and escaped
+ if !strings.Contains(libbindgen.Args["flags"], "'--bindgen-flag.*'") {
t.Errorf("missing bindgen flags in rust_bindgen rule: flags %#v", libbindgen.Args["flags"])
}
- if !strings.Contains(libbindgen.Args["cflags"], "--clang-flag") {
+ if !strings.Contains(libbindgen.Args["cflags"], "'--clang-flag()'") {
t.Errorf("missing clang cflags in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
}
if !strings.Contains(libbindgen.Args["cflags"], "-Ishared_include") {