Flag an error on empty rust module srcs
It's an error if a rust module's srcs is empty. Prior to this change the output was a panic that complains loudly about a slice error and nothing else. This change doesn't stop the panic, but at least adds a bit of context so devs who make a simple mistake can more easily fix it. Test: SOONG_GEN_RUST_PROJECT=1 m nothing Change-Id: Id7d8465d533413c3000699661222a53a7c8678f3
This commit is contained in:
parent
2649c7913a
commit
3afac0b36f
2 changed files with 39 additions and 0 deletions
|
@ -449,6 +449,10 @@ func (compiler *baseCompiler) relativeInstallPath() string {
|
||||||
|
|
||||||
// Returns the Path for the main source file along with Paths for generated source files from modules listed in srcs.
|
// Returns the Path for the main source file along with Paths for generated source files from modules listed in srcs.
|
||||||
func srcPathFromModuleSrcs(ctx ModuleContext, srcs []string) (android.Path, android.Paths) {
|
func srcPathFromModuleSrcs(ctx ModuleContext, srcs []string) (android.Path, android.Paths) {
|
||||||
|
if len(srcs) == 0 {
|
||||||
|
ctx.PropertyErrorf("srcs", "srcs must not be empty")
|
||||||
|
}
|
||||||
|
|
||||||
// The srcs can contain strings with prefix ":".
|
// The srcs can contain strings with prefix ":".
|
||||||
// They are dependent modules of this module, with android.SourceDepTag.
|
// They are dependent modules of this module, with android.SourceDepTag.
|
||||||
// They are not the main source file compiled by rustc.
|
// They are not the main source file compiled by rustc.
|
||||||
|
|
|
@ -98,6 +98,41 @@ func TestEnforceSingleSourceFile(t *testing.T) {
|
||||||
}`)
|
}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that we reject _no_ source files.
|
||||||
|
func TestEnforceMissingSourceFiles(t *testing.T) {
|
||||||
|
|
||||||
|
singleSrcError := "srcs must not be empty"
|
||||||
|
|
||||||
|
// Test libraries
|
||||||
|
testRustError(t, singleSrcError, `
|
||||||
|
rust_library_host {
|
||||||
|
name: "foo-bar-library",
|
||||||
|
crate_name: "foo",
|
||||||
|
}`)
|
||||||
|
|
||||||
|
// Test binaries
|
||||||
|
testRustError(t, singleSrcError, `
|
||||||
|
rust_binary_host {
|
||||||
|
name: "foo-bar-binary",
|
||||||
|
crate_name: "foo",
|
||||||
|
}`)
|
||||||
|
|
||||||
|
// Test proc_macros
|
||||||
|
testRustError(t, singleSrcError, `
|
||||||
|
rust_proc_macro {
|
||||||
|
name: "foo-bar-proc-macro",
|
||||||
|
crate_name: "foo",
|
||||||
|
}`)
|
||||||
|
|
||||||
|
// Test prebuilts
|
||||||
|
testRustError(t, singleSrcError, `
|
||||||
|
rust_prebuilt_dylib {
|
||||||
|
name: "foo-bar-prebuilt",
|
||||||
|
crate_name: "foo",
|
||||||
|
host_supported: true,
|
||||||
|
}`)
|
||||||
|
}
|
||||||
|
|
||||||
// Test environment vars for Cargo compat are set.
|
// Test environment vars for Cargo compat are set.
|
||||||
func TestCargoCompat(t *testing.T) {
|
func TestCargoCompat(t *testing.T) {
|
||||||
ctx := testRust(t, `
|
ctx := testRust(t, `
|
||||||
|
|
Loading…
Reference in a new issue