[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
This commit is contained in:
parent
ea3574b5fa
commit
12e2cb71c7
2 changed files with 10 additions and 6 deletions
|
@ -18,6 +18,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
|
"github.com/google/blueprint/proptools"
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
ccConfig "android/soong/cc/config"
|
ccConfig "android/soong/cc/config"
|
||||||
|
@ -113,15 +114,17 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDe
|
||||||
cflags = append(cflags, "-isystem "+include.String())
|
cflags = append(cflags, "-isystem "+include.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
esc := proptools.NinjaAndShellEscapeList
|
||||||
|
|
||||||
// Module defined clang flags and include paths
|
// 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 {
|
for _, include := range b.Properties.Local_include_dirs {
|
||||||
cflags = append(cflags, "-I"+android.PathForModuleSrc(ctx, include).String())
|
cflags = append(cflags, "-I"+android.PathForModuleSrc(ctx, include).String())
|
||||||
implicits = append(implicits, android.PathForModuleSrc(ctx, include))
|
implicits = append(implicits, android.PathForModuleSrc(ctx, include))
|
||||||
}
|
}
|
||||||
|
|
||||||
bindgenFlags := defaultBindgenFlags
|
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)
|
wrapperFile := android.OptionalPathForModuleSrc(ctx, b.Properties.Wrapper_src)
|
||||||
if !wrapperFile.Valid() {
|
if !wrapperFile.Valid() {
|
||||||
|
|
|
@ -27,8 +27,8 @@ func TestRustBindgen(t *testing.T) {
|
||||||
crate_name: "bindgen",
|
crate_name: "bindgen",
|
||||||
stem: "libbindgen",
|
stem: "libbindgen",
|
||||||
source_stem: "bindings",
|
source_stem: "bindings",
|
||||||
bindgen_flags: ["--bindgen-flag"],
|
bindgen_flags: ["--bindgen-flag.*"],
|
||||||
cflags: ["--clang-flag"],
|
cflags: ["--clang-flag()"],
|
||||||
shared_libs: ["libfoo_shared"],
|
shared_libs: ["libfoo_shared"],
|
||||||
static_libs: ["libfoo_static"],
|
static_libs: ["libfoo_static"],
|
||||||
}
|
}
|
||||||
|
@ -42,10 +42,11 @@ func TestRustBindgen(t *testing.T) {
|
||||||
}
|
}
|
||||||
`)
|
`)
|
||||||
libbindgen := ctx.ModuleForTests("libbindgen", "android_arm64_armv8-a").Output("bindings.rs")
|
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"])
|
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"])
|
t.Errorf("missing clang cflags in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
|
||||||
}
|
}
|
||||||
if !strings.Contains(libbindgen.Args["cflags"], "-Ishared_include") {
|
if !strings.Contains(libbindgen.Args["cflags"], "-Ishared_include") {
|
||||||
|
|
Loading…
Reference in a new issue