Support multiple dists per Android.bp module, and dist output selection.
This CL adds "dists" to the base property struct to support multiple dist file configurations, and generic tag support to dist tagged outputs of modules. Fixes: b/152834186 Test: soong tests and `m sdk dist` Change-Id: I80c86bc9b7b09e671f640a4480c45d438bdd9a2a Signed-off-by: Jingwen Chen <jingwen@google.com>
This commit is contained in:
@@ -156,17 +156,158 @@ func TestDistWithTag(t *testing.T) {
|
||||
}
|
||||
`)
|
||||
|
||||
without_tag_entries := android.AndroidMkEntriesForTest(t, config, "", ctx.ModuleForTests("foo_without_tag", "android_common").Module())
|
||||
with_tag_entries := android.AndroidMkEntriesForTest(t, config, "", ctx.ModuleForTests("foo_with_tag", "android_common").Module())
|
||||
withoutTagEntries := android.AndroidMkEntriesForTest(t, config, "", ctx.ModuleForTests("foo_without_tag", "android_common").Module())
|
||||
withTagEntries := android.AndroidMkEntriesForTest(t, config, "", ctx.ModuleForTests("foo_with_tag", "android_common").Module())
|
||||
|
||||
if len(without_tag_entries) != 2 || len(with_tag_entries) != 2 {
|
||||
t.Errorf("two mk entries per module expected, got %d and %d", len(without_tag_entries), len(with_tag_entries))
|
||||
if len(withoutTagEntries) != 2 || len(withTagEntries) != 2 {
|
||||
t.Errorf("two mk entries per module expected, got %d and %d", len(withoutTagEntries), len(withTagEntries))
|
||||
}
|
||||
if !with_tag_entries[0].DistFile.Valid() || !strings.Contains(with_tag_entries[0].DistFile.String(), "/javac/foo_with_tag.jar") {
|
||||
t.Errorf("expected classes.jar DistFile, got %v", with_tag_entries[0].DistFile)
|
||||
if len(withTagEntries[0].DistFiles[".jar"]) != 1 ||
|
||||
!strings.Contains(withTagEntries[0].DistFiles[".jar"][0].String(), "/javac/foo_with_tag.jar") {
|
||||
t.Errorf("expected DistFiles to contain classes.jar, got %v", withTagEntries[0].DistFiles)
|
||||
}
|
||||
if without_tag_entries[0].DistFile.Valid() {
|
||||
t.Errorf("did not expect explicit DistFile, got %v", without_tag_entries[0].DistFile)
|
||||
if len(withoutTagEntries[0].DistFiles[".jar"]) > 0 {
|
||||
t.Errorf("did not expect explicit DistFile for .jar tag, got %v", withoutTagEntries[0].DistFiles[".jar"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDistWithDest(t *testing.T) {
|
||||
ctx, config := testJava(t, `
|
||||
java_library {
|
||||
name: "foo",
|
||||
srcs: ["a.java"],
|
||||
compile_dex: true,
|
||||
dist: {
|
||||
targets: ["my_goal"],
|
||||
dest: "my/custom/dest/dir",
|
||||
},
|
||||
}
|
||||
`)
|
||||
|
||||
module := ctx.ModuleForTests("foo", "android_common").Module()
|
||||
entries := android.AndroidMkEntriesForTest(t, config, "", module)
|
||||
if len(entries) != 2 {
|
||||
t.Errorf("Expected 2 AndroidMk entries, got %d", len(entries))
|
||||
}
|
||||
|
||||
distStrings := entries[0].GetDistForGoals(module)
|
||||
|
||||
if len(distStrings) != 2 {
|
||||
t.Errorf("Expected 2 entries for dist: PHONY and dist-for-goals, but got %q", distStrings)
|
||||
}
|
||||
|
||||
if distStrings[0] != ".PHONY: my_goal\n" {
|
||||
t.Errorf("Expected .PHONY entry to declare my_goal, but got: %s", distStrings[0])
|
||||
}
|
||||
|
||||
if !strings.Contains(distStrings[1], "$(call dist-for-goals,my_goal") ||
|
||||
!strings.Contains(distStrings[1], ".intermediates/foo/android_common/dex/foo.jar:my/custom/dest/dir") {
|
||||
t.Errorf(
|
||||
"Expected dist-for-goals entry to contain my_goal and new dest dir, but got: %s", distStrings[1])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDistsWithAllProperties(t *testing.T) {
|
||||
ctx, config := testJava(t, `
|
||||
java_library {
|
||||
name: "foo",
|
||||
srcs: ["a.java"],
|
||||
compile_dex: true,
|
||||
dist: {
|
||||
targets: ["baz"],
|
||||
},
|
||||
dists: [
|
||||
{
|
||||
targets: ["bar"],
|
||||
tag: ".jar",
|
||||
dest: "bar.jar",
|
||||
dir: "bar/dir",
|
||||
suffix: ".qux",
|
||||
},
|
||||
]
|
||||
}
|
||||
`)
|
||||
|
||||
module := ctx.ModuleForTests("foo", "android_common").Module()
|
||||
entries := android.AndroidMkEntriesForTest(t, config, "", module)
|
||||
if len(entries) != 2 {
|
||||
t.Errorf("Expected 2 AndroidMk entries, got %d", len(entries))
|
||||
}
|
||||
|
||||
distStrings := entries[0].GetDistForGoals(module)
|
||||
|
||||
if len(distStrings) != 4 {
|
||||
t.Errorf("Expected 4 entries for dist: PHONY and dist-for-goals, but got %d", len(distStrings))
|
||||
}
|
||||
|
||||
if distStrings[0] != ".PHONY: bar\n" {
|
||||
t.Errorf("Expected .PHONY entry to declare bar, but got: %s", distStrings[0])
|
||||
}
|
||||
|
||||
if !strings.Contains(distStrings[1], "$(call dist-for-goals,bar") ||
|
||||
!strings.Contains(
|
||||
distStrings[1],
|
||||
".intermediates/foo/android_common/javac/foo.jar:bar/dir/bar.qux.jar") {
|
||||
t.Errorf(
|
||||
"Expected dist-for-goals entry to contain bar and new dest dir, but got: %s", distStrings[1])
|
||||
}
|
||||
|
||||
if distStrings[2] != ".PHONY: baz\n" {
|
||||
t.Errorf("Expected .PHONY entry to declare baz, but got: %s", distStrings[2])
|
||||
}
|
||||
|
||||
if !strings.Contains(distStrings[3], "$(call dist-for-goals,baz") ||
|
||||
!strings.Contains(distStrings[3], ".intermediates/foo/android_common/dex/foo.jar:foo.jar") {
|
||||
t.Errorf(
|
||||
"Expected dist-for-goals entry to contain my_other_goal and new dest dir, but got: %s",
|
||||
distStrings[3])
|
||||
}
|
||||
}
|
||||
|
||||
func TestDistsWithTag(t *testing.T) {
|
||||
ctx, config := testJava(t, `
|
||||
java_library {
|
||||
name: "foo_without_tag",
|
||||
srcs: ["a.java"],
|
||||
compile_dex: true,
|
||||
dists: [
|
||||
{
|
||||
targets: ["hi"],
|
||||
},
|
||||
],
|
||||
}
|
||||
java_library {
|
||||
name: "foo_with_tag",
|
||||
srcs: ["a.java"],
|
||||
compile_dex: true,
|
||||
dists: [
|
||||
{
|
||||
targets: ["hi"],
|
||||
tag: ".jar",
|
||||
},
|
||||
],
|
||||
}
|
||||
`)
|
||||
|
||||
moduleWithoutTag := ctx.ModuleForTests("foo_without_tag", "android_common").Module()
|
||||
moduleWithTag := ctx.ModuleForTests("foo_with_tag", "android_common").Module()
|
||||
|
||||
withoutTagEntries := android.AndroidMkEntriesForTest(t, config, "", moduleWithoutTag)
|
||||
withTagEntries := android.AndroidMkEntriesForTest(t, config, "", moduleWithTag)
|
||||
|
||||
if len(withoutTagEntries) != 2 || len(withTagEntries) != 2 {
|
||||
t.Errorf("two mk entries per module expected, got %d and %d", len(withoutTagEntries), len(withTagEntries))
|
||||
}
|
||||
|
||||
distFilesWithoutTag := withoutTagEntries[0].DistFiles
|
||||
distFilesWithTag := withTagEntries[0].DistFiles
|
||||
|
||||
if len(distFilesWithTag[".jar"]) != 1 ||
|
||||
!strings.Contains(distFilesWithTag[".jar"][0].String(), "/javac/foo_with_tag.jar") {
|
||||
t.Errorf("expected foo_with_tag's .jar-tagged DistFiles to contain classes.jar, got %v", distFilesWithTag[".jar"])
|
||||
}
|
||||
if len(distFilesWithoutTag[".jar"]) > 0 {
|
||||
t.Errorf("did not expect foo_without_tag's .jar-tagged DistFiles to contain files, but got %v", distFilesWithoutTag[".jar"])
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user