Revert "Revert "Build notice files from license metadata.""
This reverts commit 77807b3c27
.
Reason for revert: fix and roll forward again
Change-Id: I80c796ca81ecf29df9522babe54d684a0d11b9e6
This commit is contained in:
@@ -15,93 +15,9 @@
|
||||
package android
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
)
|
||||
|
||||
func init() {
|
||||
pctx.SourcePathVariable("merge_notices", "build/soong/scripts/mergenotice.py")
|
||||
pctx.SourcePathVariable("generate_notice", "build/soong/scripts/generate-notice-files.py")
|
||||
|
||||
pctx.HostBinToolVariable("minigzip", "minigzip")
|
||||
}
|
||||
|
||||
type NoticeOutputs struct {
|
||||
Merged OptionalPath
|
||||
TxtOutput OptionalPath
|
||||
HtmlOutput OptionalPath
|
||||
HtmlGzOutput OptionalPath
|
||||
}
|
||||
|
||||
var (
|
||||
mergeNoticesRule = pctx.AndroidStaticRule("mergeNoticesRule", blueprint.RuleParams{
|
||||
Command: `${merge_notices} --output $out $in`,
|
||||
CommandDeps: []string{"${merge_notices}"},
|
||||
Description: "merge notice files into $out",
|
||||
})
|
||||
|
||||
generateNoticeRule = pctx.AndroidStaticRule("generateNoticeRule", blueprint.RuleParams{
|
||||
Command: `rm -rf $$(dirname $txtOut) $$(dirname $htmlOut) $$(dirname $out) && ` +
|
||||
`mkdir -p $$(dirname $txtOut) $$(dirname $htmlOut) $$(dirname $out) && ` +
|
||||
`${generate_notice} --text-output $txtOut --html-output $htmlOut -t "$title" -s $inputDir && ` +
|
||||
`${minigzip} -c $htmlOut > $out`,
|
||||
CommandDeps: []string{"${generate_notice}", "${minigzip}"},
|
||||
Description: "produce notice file $out",
|
||||
}, "txtOut", "htmlOut", "title", "inputDir")
|
||||
)
|
||||
|
||||
func MergeNotices(ctx ModuleContext, mergedNotice WritablePath, noticePaths []Path) {
|
||||
ctx.Build(pctx, BuildParams{
|
||||
Rule: mergeNoticesRule,
|
||||
Description: "merge notices",
|
||||
Inputs: noticePaths,
|
||||
Output: mergedNotice,
|
||||
})
|
||||
}
|
||||
|
||||
func BuildNoticeOutput(ctx ModuleContext, installPath InstallPath, installFilename string,
|
||||
noticePaths []Path) NoticeOutputs {
|
||||
// Merge all NOTICE files into one.
|
||||
// TODO(jungjw): We should just produce a well-formatted NOTICE.html file in a single pass.
|
||||
//
|
||||
// generate-notice-files.py, which processes the merged NOTICE file, has somewhat strict rules
|
||||
// about input NOTICE file paths.
|
||||
// 1. Their relative paths to the src root become their NOTICE index titles. We want to use
|
||||
// on-device paths as titles, and so output the merged NOTICE file the corresponding location.
|
||||
// 2. They must end with .txt extension. Otherwise, they're ignored.
|
||||
noticeRelPath := InstallPathToOnDevicePath(ctx, installPath.Join(ctx, installFilename+".txt"))
|
||||
mergedNotice := PathForModuleOut(ctx, filepath.Join("NOTICE_FILES/src", noticeRelPath))
|
||||
MergeNotices(ctx, mergedNotice, noticePaths)
|
||||
|
||||
// Transform the merged NOTICE file into a gzipped HTML file.
|
||||
txtOuptut := PathForModuleOut(ctx, "NOTICE_txt", "NOTICE.txt")
|
||||
htmlOutput := PathForModuleOut(ctx, "NOTICE_html", "NOTICE.html")
|
||||
htmlGzOutput := PathForModuleOut(ctx, "NOTICE", "NOTICE.html.gz")
|
||||
title := "Notices for " + ctx.ModuleName()
|
||||
ctx.Build(pctx, BuildParams{
|
||||
Rule: generateNoticeRule,
|
||||
Description: "generate notice output",
|
||||
Input: mergedNotice,
|
||||
Output: htmlGzOutput,
|
||||
ImplicitOutputs: WritablePaths{txtOuptut, htmlOutput},
|
||||
Args: map[string]string{
|
||||
"txtOut": txtOuptut.String(),
|
||||
"htmlOut": htmlOutput.String(),
|
||||
"title": title,
|
||||
"inputDir": PathForModuleOut(ctx, "NOTICE_FILES/src").String(),
|
||||
},
|
||||
})
|
||||
|
||||
return NoticeOutputs{
|
||||
Merged: OptionalPathForPath(mergedNotice),
|
||||
TxtOutput: OptionalPathForPath(txtOuptut),
|
||||
HtmlOutput: OptionalPathForPath(htmlOutput),
|
||||
HtmlGzOutput: OptionalPathForPath(htmlGzOutput),
|
||||
}
|
||||
}
|
||||
|
||||
// BuildNoticeTextOutputFromLicenseMetadata writes out a notice text file based on the module's
|
||||
// generated license metadata file.
|
||||
func BuildNoticeTextOutputFromLicenseMetadata(ctx ModuleContext, outputFile WritablePath) {
|
||||
@@ -112,5 +28,18 @@ func BuildNoticeTextOutputFromLicenseMetadata(ctx ModuleContext, outputFile Writ
|
||||
FlagWithOutput("-o ", outputFile).
|
||||
FlagWithDepFile("-d ", depsFile).
|
||||
Input(ctx.Module().base().licenseMetadataFile)
|
||||
rule.Build("container_notice", "container notice file")
|
||||
rule.Build("text_notice", "container notice file")
|
||||
}
|
||||
|
||||
// BuildNoticeHtmlOutputFromLicenseMetadata writes out a notice text file based on the module's
|
||||
// generated license metadata file.
|
||||
func BuildNoticeHtmlOutputFromLicenseMetadata(ctx ModuleContext, outputFile WritablePath) {
|
||||
depsFile := outputFile.ReplaceExtension(ctx, strings.TrimPrefix(outputFile.Ext()+".d", "."))
|
||||
rule := NewRuleBuilder(pctx, ctx)
|
||||
rule.Command().
|
||||
BuiltTool("htmlnotice").
|
||||
FlagWithOutput("-o ", outputFile).
|
||||
FlagWithDepFile("-d ", depsFile).
|
||||
Input(ctx.Module().base().licenseMetadataFile)
|
||||
rule.Build("html_notice", "container notice file")
|
||||
}
|
||||
|
Reference in New Issue
Block a user