# HG changeset patch # User ihse # Date 1496042290 -7200 # Node ID 2c25fc24103251f9711a1c280c31e1e41016d90f # Parent 23c001d69fc15d982244ba2eb10c6cc713313532 8175824: Adapt javadoc generation to different requirements for JDK and JavaSE Reviewed-by: erikj, mchung diff -r 23c001d69fc1 -r 2c25fc241032 make/Docs.gmk --- a/make/Docs.gmk Fri May 26 00:29:11 2017 +0000 +++ b/make/Docs.gmk Mon May 29 09:18:10 2017 +0200 @@ -36,11 +36,23 @@ $(eval $(call ReadImportMetaData)) ################################################################################ - # Hook to include the corresponding custom file, if present. $(eval $(call IncludeCustomExtension, , Docs.gmk)) ################################################################################ +# This file generates all documentation for OpenJDK. +# +# We will generate API documentation for two different selections of the source +# code: "Java SE", which contains just the modules covered by the top-level +# module java.se.ee, and "JDK", which covers all of Java SE and also all +# other available modules that should be documented, including imported modules, +# if any. +# +# We will also generate separate, free-standing specifications from either +# markdown or existing html files. +# + +################################################################################ # Javadoc settings # On top of the sources that was used to compile the JDK, we need some @@ -106,6 +118,8 @@ FULL_COMPANY_NAME := Oracle and/or its affiliates COMPANY_ADDRESS := 500 Oracle Parkway
Redwood Shores, CA 94065 USA +JAVA_PLATFORM := Java™ Platform + ifeq ($(IS_DRAFT), true) DRAFT_MARKER_STR :=
DRAFT $(VERSION_STRING) ifeq ($(VERSION_BUILD), 0) @@ -113,15 +127,12 @@ else DRAFT_MARKER_TITLE := [build $(VERSION_BUILD)] endif + DRAFT_TEXT := Please note that the specifications and other information \ + contained herein are not final and are subject to change. The \ + information is being made available to you solely for purpose of \ + evaluation. endif -JAVADOC_WINDOW_TITLE := Java Platform SE $(VERSION_SPECIFICATION) \ - $(DRAFT_MARKER_TITLE) - -JAVADOC_HEADER_TITLE := $(subst $(SPACE), ,$(strip \ - Java™ Platform
Standard Ed. \ - $(VERSION_SPECIFICATION)
$(DRAFT_MARKER_STR))) - JAVADOC_BOTTOM := \ \ Submit a bug or feature
\ @@ -143,27 +154,24 @@
Please note that the specifications \ - and other information contained herein are not final and are subject to \ - change. The information is being made available to you solely for \ - purpose of evaluation.
+ sans-serif; font-weight: normal;">$(DRAFT_TEXT) ################################################################################ # JDK javadoc titles/text snippets -JDK_JAVADOC_DOC_TITLE := Java™ Platform, Standard Edition Development Kit \ - (JDK™) $(VERSION_SPECIFICATION)
API Specification +JDK_SHORT_NAME := JDK™ $(VERSION_SPECIFICATION) +JDK_LONG_NAME := Standard Edition Development Kit (JDK™) $(VERSION_SPECIFICATION) ################################################################################ # Java SE javadoc titles/text snippets -JAVASE_JAVADOC_DOC_TITLE := Java™ Platform, Standard Edition \ - $(VERSION_SPECIFICATION)
API Specification +JAVASE_SHORT_NAME := SE $(VERSION_SPECIFICATION) +JAVASE_LONG_NAME := Standard Edition $(VERSION_SPECIFICATION) ################################################################################ +# Index page text titles/snippets -JDK_INDEX_TITLE := Java™ Platform, Standard Edition Development Kit \ - (JDK™) $(VERSION_SPECIFICATION) Specification
$(DRAFT_MARKER_TITLE) +JDK_INDEX_TITLE := $(JAVA_PLATFORM), $(JDK_LONG_NAME) Specification $(DRAFT_MARKER_TITLE) ################################################################################ # Functions @@ -187,9 +195,53 @@ $1_MODULEGRAPH_TARGETS += $$($1_$2_PNG_TARGET) endef +# Helper function to create the overview.html file to use with the -overview +# javadoc option. +# Returns the filename as $1_OVERVIEW. +# +# param 1: SetupJavadocGeneration namespace ($1) +define create_overview_file + $1_OVERVIEW_TEXT := \ + \ + \ +

This document is the API specification for $$($1_FULL_NAME).

\ + # + ifneq ($$($1_GROUPS),) + $1_OVERVIEW_TEXT += \ +

For an overview of the full specification, grouped by usage, see the $$(JAVA_PLATFORM), $$($1_LONG_NAME) Specification.

\ +
\ + # + $1_OVERVIEW_TEXT += $$(foreach g, $$($1_GROUPS), \ +
$$($$g_GROUP_NAME)
\ +
$$($$g_GROUP_DESCRIPTION) \ + ) + $1_OVERVIEW_TEXT += \ +
\ + # + endif + ifeq ($$(IS_DRAFT), true) + $1_OVERVIEW_TEXT += \ +

$$(DRAFT_TEXT)

\ + # + endif + $1_OVERVIEW_TEXT += \ + \ + # + + $1_OVERVIEW := $$(SUPPORT_OUTPUTDIR)/docs/$1-overview.html + + $1_OVERVIEW_VARDEPS_FILE := $$(call DependOnVariable, $1_OVERVIEW_TEXT, \ + $$($1_OVERVIEW).vardeps) + + $$($1_OVERVIEW): $$($1_OVERVIEW_VARDEPS_FILE) + $$(call LogInfo, Creating overview.html for $1) + $$(call MakeDir, $$(@D)) + $$(PRINTF) > $$@ '$$($1_OVERVIEW_TEXT)' +endef + ################################################################################ -# Setup make rules for creating the API documentation, using javadoc and other -# tools if needed. +# Setup make rules to create an API documentation collection, using javadoc and +# other tools if needed. # # Parameter 1 is the name of the rule. This name is used as variable prefix. # Targets generated are returned as $1_JAVADOC_TARGETS and @@ -198,14 +250,10 @@ # # Remaining parameters are named arguments. These include: # MODULES - Modules to generate javadoc for -# NAME - The name of the javadoc compilation, to be presented to the user +# GROUPS - Name of the groups to divide the modules into, if any +# SHORT_NAME - The short name of this documentation collection +# LONG_NAME - The long name of this documentation collection # TARGET_DIR - Where to store the output -# OVERVIEW - Path to an html overview file -# DOC_TITLE - Title to use in -doctitle. -# WINDOW_TITLE - Title to use in -windowtitle. -# HEADER_TITLE - Title to use in -header. -# BOTTOM_TEXT - Text to use in -bottom. -# TOP_TEXT - Text to use in -top. # SetupApiDocsGeneration = $(NamedParamsMacroTemplate) define SetupApiDocsGenerationBody @@ -224,7 +272,6 @@ # Always include tags and basic options $1_OPTIONS := $$(JAVADOC_TAGS) $$(JAVADOC_OPTIONS) - $1_OPTIONS += -overview $$($1_OVERVIEW) $1_OPTIONS += --module-source-path $$(MODULES_SOURCE_PATH) $1_OPTIONS += --module $$(call CommaList, $$($1_MODULES)) @@ -232,12 +279,20 @@ $1_OPTIONS += -Xdoclint:all,$$(call CommaList, $$(addprefix -, \ $$(JAVADOC_DISABLED_DOCLINT))) + $1_FULL_NAME := $$(JAVA_PLATFORM), $$($1_LONG_NAME) \ + $$(DRAFT_MARKER_TITLE) + $1_DOC_TITLE := $$($1_FULL_NAME)
API Specification + $1_WINDOW_TITLE := $$(subst ™,,$$(JAVA_PLATFORM) $$($1_SHORT_NAME)) \ + $$(DRAFT_MARKER_TITLE) + $1_HEADER_TITLE := $$(JAVA_PLATFORM)
$$($1_SHORT_NAME)
\ + $$(DRAFT_MARKER_STR) + $1_OPTIONS += -doctitle '$$($1_DOC_TITLE)' $1_OPTIONS += -windowtitle '$$($1_WINDOW_TITLE)' $1_OPTIONS += -header '$$($1_HEADER_TITLE)' - $1_OPTIONS += -bottom '$$($1_BOTTOM_TEXT)' + $1_OPTIONS += -bottom '$$(JAVADOC_BOTTOM)' ifeq ($$(IS_DRAFT), true) - $1_OPTIONS += -top '$$($1_TOP_TEXT)' + $1_OPTIONS += -top '$$(JAVADOC_TOP)' endif # Do not store debug level options in VARDEPS. @@ -247,6 +302,15 @@ $1_LOG_OPTION += -verbose endif + # Generate the overview.html file. This will return the filename in + # $1_OVERVIEW. + $$(eval $$(call create_overview_file,$1)) + $1_OPTIONS += -overview $$($1_OVERVIEW) + + $$(foreach g, $$($1_GROUPS), \ + $$(eval $1_OPTIONS += -group "$$($$g_GROUP_NAME)" "$$($$g_GROUP_MODULES)") \ + ) + $1_VARDEPS := $$($1_JAVA_ARGS) $$($1_OPTIONS) $$(MODULES_SOURCE_PATH) \ $$($1_ALL_MODULES) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \ @@ -259,7 +323,7 @@ # Javadoc creates a lot of files but use index.html as a marker $$($1_TARGET_DIR)/index.html: $$(BUILD_TOOLS_JDK) $$($1_VARDEPS_FILE) \ $$($1_SOURCE_DEPS) $$($1_OVERVIEW) - $$(call LogWarn, Generating $$($1_NAME) API javadoc for \ + $$(call LogWarn, Generating $1 javadoc for \ $$(words $$($1_ALL_MODULES)) modules) $$(call LogInfo, Javadoc modules: $$($1_ALL_MODULES)) $$(call MakeDir, $$($1_TARGET_DIR)) @@ -291,7 +355,7 @@ $1_GENGRAPHS_MARKER := $$($1_GENGRAPHS_DIR)/_gengraphs_run.marker $$($1_GENGRAPHS_MARKER): $$(BUILD_JIGSAW_TOOLS) $$(GENGRAPHS_PROPS) - $$(call LogInfo, Running gengraphs for $$($1_NAME) API documentation) + $$(call LogInfo, Running gengraphs for $1 documentation) $$(call MakeDir, $$($1_GENGRAPHS_DIR)) $$(call ExecuteWithLog, $$($1_GENGRAPHS_DIR)/gengraphs, \ $$(TOOL_GENGRAPHS) --spec --output $$($1_GENGRAPHS_DIR) \ @@ -310,21 +374,49 @@ ################################################################################ # Setup generation of the JDK API documentation (javadoc + modulegraph) +# Define the groups of the JDK API documentation +JavaSE_GROUP_NAME := Java SE +JavaSE_GROUP_MODULES := $(call ColonList, $(sort java.se.ee \ + $(call FindTransitiveIndirectDepsForModules, java.se.ee))) +JavaSE_GROUP_DESCRIPTION := \ + The Java Platform, Standard Edition ("Java SE") APIs define the core Java \ + platform for general-purpose computing. These APIs are in modules with \ + names starting with the string "java.". \ + # +JDK_GROUPS += JavaSE + +JDK_GROUP_NAME := JDK +JDK_GROUP_MODULES := jdk.* +JDK_GROUP_DESCRIPTION := \ + The Java Development Kit ("JDK") APIs define an implementation of the Java \ + SE Platform which may include platform-specific details. These APIs are in \ + modules with names starting with the string "jdk.". \ + # +JDK_GROUPS += JDK + +# If we are importing JavaFX, we need a JavaFX group. In an ideal world, this +# would have been abstracted away to a more proper generic handling of imported +# modules. +ifneq ($(findstring javafx., $(IMPORTED_MODULES)), ) + JavaFX_GROUP_NAME := JavaFX + JavaFX_GROUP_MODULES := javafx.* + JavaFX_GROUP_DESCRIPTION := \ + The JavaFX APIs define a set of user interface (UI) controls, graphics, \ + media, and web packages for developing rich client applications. These \ + APIs are in modules with names starting with the string "javafx.". \ + # + JDK_GROUPS += JavaFX +endif + # All modules to have docs generated by docs-jdk-api target -JDK_JAVADOC_MODULES := $(sort $(DOCS_MODULES)) - -JDK_JAVADOC_OVERVIEW := $(JDK_TOPDIR)/src/java.base/share/classes/overview-core.html +JDK_MODULES := $(sort $(DOCS_MODULES)) $(eval $(call SetupApiDocsGeneration, JDK_API, \ - MODULES := $(JDK_JAVADOC_MODULES), \ - NAME := JDK, \ + MODULES := $(JDK_MODULES), \ + GROUPS := $(JDK_GROUPS), \ + SHORT_NAME := $(JDK_SHORT_NAME), \ + LONG_NAME := $(JDK_LONG_NAME), \ TARGET_DIR := $(DOCS_OUTPUTDIR)/api, \ - OVERVIEW := $(JDK_JAVADOC_OVERVIEW), \ - DOC_TITLE := $(JDK_JAVADOC_DOC_TITLE), \ - WINDOW_TITLE := $(JAVADOC_WINDOW_TITLE), \ - HEADER_TITLE := $(JAVADOC_HEADER_TITLE), \ - BOTTOM_TEXT := $(JAVADOC_BOTTOM), \ - TOP_TEXT := $(JAVADOC_TOP), \ )) # Targets generated are returned in JDK_API_JAVADOC_TARGETS and @@ -335,20 +427,13 @@ # The Java SE module scope is just java.se.ee and it's transitive indirect # exports. -JAVASE_JAVADOC_MODULES := java.se.ee - -JAVASE_JAVADOC_OVERVIEW := $(JDK_TOPDIR)/src/java.base/share/classes/overview-core.html +JAVASE_MODULES := java.se.ee $(eval $(call SetupApiDocsGeneration, JAVASE_API, \ - MODULES := $(JAVASE_JAVADOC_MODULES), \ - NAME := Java SE, \ + MODULES := $(JAVASE_MODULES), \ + SHORT_NAME := $(JAVASE_SHORT_NAME), \ + LONG_NAME := $(JAVASE_LONG_NAME), \ TARGET_DIR := $(IMAGES_OUTPUTDIR)/javase-docs/api, \ - OVERVIEW := $(JAVASE_JAVADOC_OVERVIEW), \ - DOC_TITLE := $(JAVASE_JAVADOC_DOC_TITLE), \ - WINDOW_TITLE := $(JAVADOC_WINDOW_TITLE), \ - HEADER_TITLE := $(JAVADOC_HEADER_TITLE), \ - BOTTOM_TEXT := $(JAVADOC_BOTTOM), \ - TOP_TEXT := $(JAVADOC_TOP), \ )) # Targets generated are returned in JAVASE_API_JAVADOC_TARGETS and diff -r 23c001d69fc1 -r 2c25fc241032 make/common/MakeBase.gmk --- a/make/common/MakeBase.gmk Fri May 26 00:29:11 2017 +0000 +++ b/make/common/MakeBase.gmk Mon May 29 09:18:10 2017 +0200 @@ -967,6 +967,17 @@ ) ################################################################################ +# Converts a space separated list to a colon separated list. +# +# Replacing double-colon with a single colon is to workaround the issue with +# some version of make on windows that doesn't substitute spaces with one colon +# properly. +ColonList = \ + $(strip \ + $(subst ::,:,$(subst $(SPACE),:,$(strip $1))) \ + ) + +################################################################################ # Hook to include the corresponding custom file, if present. $(eval $(call IncludeCustomExtension, , common/MakeBase.gmk))