Merge "Add droiddoc_template"
diff --git a/java/droiddoc.go b/java/droiddoc.go
index 82beb96..9d6f58e 100644
--- a/java/droiddoc.go
+++ b/java/droiddoc.go
@@ -18,7 +18,6 @@
"android/soong/android"
"android/soong/java/config"
"fmt"
- "path/filepath"
"strings"
"github.com/google/blueprint"
@@ -52,6 +51,7 @@
func init() {
android.RegisterModuleType("droiddoc", DroiddocFactory)
android.RegisterModuleType("droiddoc_host", DroiddocHostFactory)
+ android.RegisterModuleType("droiddoc_template", DroiddocTemplateFactory)
android.RegisterModuleType("javadoc", JavadocFactory)
android.RegisterModuleType("javadoc_host", JavadocHostFactory)
}
@@ -82,7 +82,7 @@
type DroiddocProperties struct {
// directory relative to top of the source tree that contains doc templates files.
- Custom_template_dir *string `android:"arch_variant"`
+ Custom_template *string `android:"arch_variant"`
// directories relative to top of the source tree which contains html/jd files.
Html_dirs []string `android:"arch_variant"`
@@ -233,7 +233,7 @@
}
default:
switch tag {
- case android.DefaultsDepTag, android.SourceDepTag:
+ case android.DefaultsDepTag, android.SourceDepTag, droiddocTemplateTag:
// Nothing to do
default:
ctx.ModuleErrorf("depends on non-java module %q", otherName)
@@ -319,6 +319,13 @@
func (d *Droiddoc) DepsMutator(ctx android.BottomUpMutatorContext) {
d.Javadoc.addDeps(ctx)
+ if String(d.properties.Custom_template) == "" {
+ // TODO: This is almost always droiddoc-templates-sdk
+ ctx.PropertyErrorf("custom_template", "must specify a template")
+ } else {
+ ctx.AddDependency(ctx.Module(), droiddocTemplateTag, String(d.properties.Custom_template))
+ }
+
// extra_arg_files may contains filegroup or genrule.
android.ExtractSourcesDeps(ctx, d.properties.Arg_files)
@@ -373,24 +380,32 @@
classpathArgs = "-classpath " + strings.Join(deps.classpath.Strings(), ":")
}
- // templateDir (maybe missing) is relative to top of the source tree instead of current module.
- templateDir := android.PathForSource(ctx, String(d.properties.Custom_template_dir)).String()
- implicits = append(implicits, ctx.GlobFiles(filepath.Join(templateDir, "**/*"), nil)...)
+ var templateDir string
+ ctx.VisitDirectDepsWithTag(droiddocTemplateTag, func(m android.Module) {
+ if t, ok := m.(*DroiddocTemplate); ok {
+ implicits = append(implicits, t.deps...)
+ templateDir = t.dir.String()
+ } else {
+ ctx.PropertyErrorf("custom_template", "module %q is not a droiddoc_template", ctx.OtherModuleName(m))
+ }
+ })
var htmlDirArgs string
if len(d.properties.Html_dirs) > 0 {
- // htmlDir is relative to top of the source tree instead of current module.
- htmlDir := android.PathForSource(ctx, d.properties.Html_dirs[0]).String()
- implicits = append(implicits, ctx.GlobFiles(filepath.Join(htmlDir, "**/*"), nil)...)
- htmlDirArgs = "-htmldir " + htmlDir
+ htmlDir := android.PathForModuleSrc(ctx, d.properties.Html_dirs[0])
+ implicits = append(implicits, ctx.Glob(htmlDir.Join(ctx, "**/*").String(), nil)...)
+ htmlDirArgs = "-htmldir " + htmlDir.String()
}
var htmlDir2Args string
if len(d.properties.Html_dirs) > 1 {
- // htmlDir2 is relative to top of the source tree instead of current module.
- htmlDir2 := android.PathForSource(ctx, d.properties.Html_dirs[1]).String()
- implicits = append(implicits, ctx.GlobFiles(filepath.Join(htmlDir2, "**/*"), nil)...)
- htmlDirArgs = "-htmldir2 " + htmlDir2
+ htmlDir2 := android.PathForModuleSrc(ctx, d.properties.Html_dirs[1])
+ implicits = append(implicits, ctx.Glob(htmlDir2.Join(ctx, "**/*").String(), nil)...)
+ htmlDir2Args = "-htmldir2 " + htmlDir2.String()
+ }
+
+ if len(d.properties.Html_dirs) > 2 {
+ ctx.PropertyErrorf("html_dirs", "Droiddoc only supports up to 2 html dirs")
}
knownTags := ctx.ExpandSources(d.properties.Knowntags, nil)
@@ -451,3 +466,34 @@
},
})
}
+
+var droiddocTemplateTag = dependencyTag{name: "droiddoc-template"}
+
+type DroiddocTemplateProperties struct {
+ // path to the directory containing the droiddoc templates.
+ Path *string
+}
+
+type DroiddocTemplate struct {
+ android.ModuleBase
+
+ properties DroiddocTemplateProperties
+
+ deps android.Paths
+ dir android.Path
+}
+
+func DroiddocTemplateFactory() android.Module {
+ module := &DroiddocTemplate{}
+ module.AddProperties(&module.properties)
+ android.InitAndroidModule(module)
+ return module
+}
+
+func (d *DroiddocTemplate) DepsMutator(android.BottomUpMutatorContext) {}
+
+func (d *DroiddocTemplate) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ path := android.PathForModuleSrc(ctx, String(d.properties.Path))
+ d.dir = path
+ d.deps = ctx.Glob(path.Join(ctx, "**/*").String(), nil)
+}
diff --git a/java/java_test.go b/java/java_test.go
index 8bae019..5d6a6e0 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -81,6 +81,7 @@
ctx.RegisterModuleType("genrule", android.ModuleFactoryAdaptor(genrule.GenRuleFactory))
ctx.RegisterModuleType("droiddoc", android.ModuleFactoryAdaptor(DroiddocFactory))
ctx.RegisterModuleType("droiddoc_host", android.ModuleFactoryAdaptor(DroiddocHostFactory))
+ ctx.RegisterModuleType("droiddoc_template", android.ModuleFactoryAdaptor(DroiddocTemplateFactory))
ctx.PreArchMutators(android.RegisterPrebuiltsPreArchMutators)
ctx.PreArchMutators(android.RegisterPrebuiltsPostDepsMutators)
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
@@ -865,6 +866,10 @@
func TestDroiddoc(t *testing.T) {
ctx := testJava(t, `
+ droiddoc_template {
+ name: "droiddoc-templates-sdk",
+ path: ".",
+ }
droiddoc {
name: "bar-doc",
srcs: [
@@ -873,7 +878,7 @@
exclude_srcs: [
"bar-doc/b.java"
],
- custom_template_dir: "external/doclava/templates-sdk",
+ custom_template: "droiddoc-templates-sdk",
hdf: [
"android.whichdoc offline",
],