Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ba2989d authored by Dan Willemsen's avatar Dan Willemsen Committed by android-build-merger
Browse files

Merge "Add droiddoc_template"

am: f6366cc0

Change-Id: I0b977eea1f67813615ca3eadb02bb4456f0abf3e
parents 3181870d f6366cc0
Loading
Loading
Loading
Loading
+60 −14
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ import (
	"android/soong/android"
	"android/soong/java/config"
	"fmt"
	"path/filepath"
	"strings"

	"github.com/google/blueprint"
@@ -52,6 +51,7 @@ var (
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 JavadocProperties struct {

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 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
			}
		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 (j *Javadoc) GenerateAndroidBuildActions(ctx android.ModuleContext) {
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 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) {
		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 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) {
		},
	})
}

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)
}
+6 −1
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ func testContext(config android.Config, bp string,
	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 TestSharding(t *testing.T) {

func TestDroiddoc(t *testing.T) {
	ctx := testJava(t, `
		droiddoc_template {
		    name: "droiddoc-templates-sdk",
		    path: ".",
		}
		droiddoc {
		    name: "bar-doc",
		    srcs: [
@@ -873,7 +878,7 @@ func TestDroiddoc(t *testing.T) {
		    exclude_srcs: [
		        "bar-doc/b.java"
		    ],
		    custom_template_dir: "external/doclava/templates-sdk",
		    custom_template: "droiddoc-templates-sdk",
		    hdf: [
		        "android.whichdoc offline",
		    ],