From ff3a5b31c00354e1146dced9880863a8219395c9 Mon Sep 17 00:00:00 2001 From: Ivan Lozano Date: Wed, 5 Aug 2020 13:28:32 -0400 Subject: [PATCH] Make source_stem required for Rust SourceProviders This removes ambiguity for developers with the 'stem' property. Bug: 159064919 Test: New Soong test; error is produced if this property is undefined. Change-Id: I790fbcfa6cd7dbf6df63b5cf5c22983426ec072e --- rust/Android.bp | 1 + rust/source_provider.go | 13 ++++++------- rust/source_provider_test.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 rust/source_provider_test.go diff --git a/rust/Android.bp b/rust/Android.bp index e03bf4f6c..bbeb28d0b 100644 --- a/rust/Android.bp +++ b/rust/Android.bp @@ -34,6 +34,7 @@ bootstrap_go_package { "library_test.go", "project_json_test.go", "rust_test.go", + "source_provider_test.go", "test_test.go", ], pluginFor: ["soong_build"], diff --git a/rust/source_provider.go b/rust/source_provider.go index 8bb784951..503880f84 100644 --- a/rust/source_provider.go +++ b/rust/source_provider.go @@ -19,9 +19,8 @@ import ( ) type SourceProviderProperties struct { - // name for the generated source file. Defaults to module name (e.g. moduleNameFoo.rs is produced by default). - // Importantly, the inherited "stem" property for this module sets the output filename for the generated library - // variants only + // filename for the generated source file (.rs). This field is required. + // The inherited "stem" property sets the output filename for the generated library variants only. Source_stem *string `android:"arch_variant"` // crate name, used for the library variant of this source provider. See additional details in rust_library. @@ -65,11 +64,11 @@ func NewSourceProvider() *baseSourceProvider { } func (sp *baseSourceProvider) getStem(ctx android.ModuleContext) string { - stem := ctx.ModuleName() - if String(sp.Properties.Source_stem) != "" { - stem = String(sp.Properties.Source_stem) + if String(sp.Properties.Source_stem) == "" { + ctx.PropertyErrorf("source_stem", + "source_stem property is undefined but required for rust_bindgen modules") } - return stem + return String(sp.Properties.Source_stem) } func (sp *baseSourceProvider) sourceProviderDeps(ctx DepsContext, deps Deps) Deps { diff --git a/rust/source_provider_test.go b/rust/source_provider_test.go new file mode 100644 index 000000000..6e68ae62c --- /dev/null +++ b/rust/source_provider_test.go @@ -0,0 +1,31 @@ +// Copyright 2020 The Android Open Source Project +// +// 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 rust + +import ( + "testing" +) + +var stemRequiredError = "source_stem property is undefined but required for rust_bindgen modules" + +func TestSourceProviderRequiredFields(t *testing.T) { + testRustError(t, stemRequiredError, ` + rust_bindgen { + name: "libbindgen", + wrapper_src: "src/any.h", + crate_name: "bindgen", + } + `) +}