aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaewoong Jung <jungjw@google.com>2019-06-26 10:55:14 -0700
committerandroid-build-merger <android-build-merger@google.com>2019-06-26 10:55:14 -0700
commit6176a91af1ce15b69879fdc31821f36fe6bcab46 (patch)
tree753008d0928757120b8d7af8b43f10715f4588b2
parentf23b779e87365d087663af1476d44660f486aa19 (diff)
parentd6585fe6e34b3181cdaec3892e5214dbf5d25d5e (diff)
downloadsoong-6176a91af1ce15b69879fdc31821f36fe6bcab46.tar.gz
Embed NOTICE output as an APEX asset.
am: d6585fe6e3 Change-Id: I9f410db71b458add4181023e400359763e208842
-rw-r--r--apex/apex.go24
-rw-r--r--apex/apex_test.go11
2 files changed, 21 insertions, 14 deletions
diff --git a/apex/apex.go b/apex/apex.go
index ce090df1b..65450ccff 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -394,8 +394,6 @@ type apexBundle struct {
container_certificate_file android.Path
container_private_key_file android.Path
- mergedNoticeFile android.WritablePath
-
// list of files to be included in this apex
filesInfo []apexFile
@@ -823,8 +821,6 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
a.installDir = android.PathForModuleInstall(ctx, "apex")
a.filesInfo = filesInfo
- a.buildNoticeFile(ctx)
-
if a.apexTypes.zip() {
a.buildUnflattenedApex(ctx, zipApex)
}
@@ -838,7 +834,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
}
}
-func (a *apexBundle) buildNoticeFile(ctx android.ModuleContext) {
+func (a *apexBundle) buildNoticeFile(ctx android.ModuleContext, apexFileName string) android.OptionalPath {
noticeFiles := []android.Path{}
for _, f := range a.filesInfo {
if f.module != nil {
@@ -853,10 +849,12 @@ func (a *apexBundle) buildNoticeFile(ctx android.ModuleContext) {
noticeFiles = append(noticeFiles, a.NoticeFile().Path())
}
- if len(noticeFiles) > 0 {
- a.mergedNoticeFile = android.PathForModuleOut(ctx, "NOTICE")
- android.MergeNotices(ctx, a.mergedNoticeFile, noticeFiles)
+ if len(noticeFiles) == 0 {
+ return android.OptionalPath{}
}
+
+ return android.OptionalPathForPath(
+ android.BuildNoticeOutput(ctx, a.installDir, apexFileName, android.FirstUniquePaths(noticeFiles)))
}
func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext, apexType apexPackaging) {
@@ -981,6 +979,13 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext, apexType ap
}
optFlags = append(optFlags, "--target_sdk_version "+targetSdkVersion)
+ noticeFile := a.buildNoticeFile(ctx, ctx.ModuleName()+suffix)
+ if noticeFile.Valid() {
+ // If there's a NOTICE file, embed it as an asset file in the APEX.
+ implicitInputs = append(implicitInputs, noticeFile.Path())
+ optFlags = append(optFlags, "--assets_dir "+filepath.Dir(noticeFile.String()))
+ }
+
ctx.Build(pctx, android.BuildParams{
Rule: apexRule,
Implicits: implicitInputs,
@@ -1220,9 +1225,6 @@ func (a *apexBundle) androidMkForType(apexType apexPackaging) android.AndroidMkD
fmt.Fprintln(w, "LOCAL_MODULE_PATH :=", filepath.Join("$(OUT_DIR)", a.installDir.RelPathString()))
fmt.Fprintln(w, "LOCAL_MODULE_STEM :=", name+apexType.suffix())
fmt.Fprintln(w, "LOCAL_UNINSTALLABLE_MODULE :=", !a.installable())
- if a.installable() && a.mergedNoticeFile != nil {
- fmt.Fprintln(w, "LOCAL_NOTICE_FILE :=", a.mergedNoticeFile.String())
- }
if len(moduleNames) > 0 {
fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES +=", strings.Join(moduleNames, " "))
}
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 200a1c29d..c671e7c37 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -27,8 +27,11 @@ import (
"android/soong/java"
)
+var buildDir string
+
func testApex(t *testing.T, bp string) *android.TestContext {
- config, buildDir := setup(t)
+ var config android.Config
+ config, buildDir = setup(t)
defer teardown(buildDir)
ctx := android.NewTestArchContext()
@@ -310,6 +313,8 @@ func TestBasicApex(t *testing.T) {
optFlags := apexRule.Args["opt_flags"]
ensureContains(t, optFlags, "--pubkey vendor/foo/devkeys/testkey.avbpubkey")
+ // Ensure that the NOTICE output is being packaged as an asset.
+ ensureContains(t, optFlags, "--assets_dir "+buildDir+"/.intermediates/myapex/android_common_myapex/NOTICE")
copyCmds := apexRule.Args["copy_commands"]
@@ -349,8 +354,8 @@ func TestBasicApex(t *testing.T) {
mergeNoticesRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("mergeNoticesRule")
noticeInputs := mergeNoticesRule.Inputs.Strings()
- if len(noticeInputs) != 4 {
- t.Errorf("number of input notice files: expected = 4, actual = %q", len(noticeInputs))
+ if len(noticeInputs) != 2 {
+ t.Errorf("number of input notice files: expected = 2, actual = %q", len(noticeInputs))
}
ensureListContains(t, noticeInputs, "NOTICE")
ensureListContains(t, noticeInputs, "custom_notice")