make/Javadoc.gmk
author mchung
Wed, 10 Aug 2016 15:49:03 -0700
changeset 40241 59abac94e4f2
parent 39935 6016bd47edc9
child 41172 1de8867db5a3
permissions -rw-r--r--
8136930: Simplify use of module-system options by custom launchers Reviewed-by: alanb, ksrini, henryjen, sundar

# Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

include $(SPEC)
include MakeBase.gmk

#################################################################
#
# CORE_PKGS environment variable has been moved to the following file
#
include CORE_PKGS.gmk
#
# Load environment variables for API package names that are not part of
# the Java SE platform
#
include NON_CORE_PKGS.gmk


.SUFFIXES: # Delete the default suffixes
.SUFFIXES: .java

#
# Definitions for directories
#

DOCSDIR := $(DOCS_IMAGE_DIR)
DOCSTMPDIR = $(SUPPORT_OUTPUTDIR)/docs

HOTSPOT_DOCS_IMPORT_PATH=$(HOTSPOT_OUTPUTDIR)/docs

JAVADOC_CMD = $(JAVA) \
    -Djava.awt.headless=true \
    $(NEW_JAVADOC)

JAVADOC_CMD_SMALL = $(JAVA_SMALL) \
    -Djava.awt.headless=true \
    $(NEW_JAVADOC)

# Copyright year for beginning of Java and some of the apis
# (Needed when creating the javadocs)
FIRST_COPYRIGHT_YEAR = 1993
DOMAPI_FIRST_COPYRIGHT_YEAR = 2005
MIRROR_FIRST_COPYRIGHT_YEAR = 2004
DOCLETAPI_FIRST_COPYRIGHT_YEAR = 1993
TAGLETAPI_FIRST_COPYRIGHT_YEAR = 1993
JDI_FIRST_COPYRIGHT_YEAR = 1999
JAAS_FIRST_COPYRIGHT_YEAR = 1998
JGSS_FIRST_COPYRIGHT_YEAR = 2000
SMARTCARDIO_FIRST_COPYRIGHT_YEAR = 2005
HTTPSERVER_FIRST_COPYRIGHT_YEAR = 2005
MGMT_FIRST_COPYRIGHT_YEAR = 2003
ATTACH_FIRST_COPYRIGHT_YEAR = 2005
JCONSOLE_FIRST_COPYRIGHT_YEAR = 2006
SCTPAPI_FIRST_COPYRIGHT_YEAR = 2009
TRACING_FIRST_COPYRIGHT_YEAR = 2008
JSHELLAPI_FIRST_COPYRIGHT_YEAR = 2015
TREEAPI_FIRST_COPYRIGHT_YEAR = 2005
NASHORNAPI_FIRST_COPYRIGHT_YEAR = 2014
DYNALINKAPI_FIRST_COPYRIGHT_YEAR = 2015
JNLP_FIRST_COPYRIGHT_YEAR = 1998
PLUGIN2_FIRST_COPYRIGHT_YEAR = 2007
JDKNET_FIRST_COPYRIGHT_YEAR = 2014
JACCESSAPI_FIRST_COPYRIGHT_YEAR = 2002
JSOBJECT_FIRST_COPYRIGHT_YEAR = 1993

# Oracle name
FULL_COMPANY_NAME = Oracle and/or its affiliates

# Copyright address
COMPANY_ADDRESS = 500 Oracle Parkway<br>Redwood Shores, CA 94065 USA.

# The trademark symbol
TRADEMARK = &trade;

# Common copyright lines used
# The word "Copyright" might optionally be a link to the file cpyr.html.
# The first year of copyright may vary or not be available.
# The address to the company might be optional.
COMMA:= ,
EMPTY:=
SPACE:=$(EMPTY) $(EMPTY)
COPYRIGHT_SYMBOL = &\#x00a9;
# Macro to construct the copyright line
# (The GNU make 3.78.1 "if" conditional is broken, fixed in GNU make 3.81)
define CopyrightLine # optionalurl optionalfirstyear optionaladdress
$(if $(strip $1),<a href="$(strip $1)">Copyright</a>,Copyright) \
$(COPYRIGHT_SYMBOL) $(if $2,$2${COMMA},) $(COPYRIGHT_YEAR),\
$(FULL_COMPANY_NAME). $3 All rights reserved.
endef

# Url to root of documents
DOCSDIR_URL = {@docroot}/$(GET2DOCSDIR)

# Url to copyright html file
COPYRIGHT_URL = $(DOCSDIR_URL)/legal/cpyr.html

# Url to bug filing site
BUG_SUBMIT_URL = http://bugreport.java.com/bugreport/

# Common line for how to submit a bug or rfe
BUG_SUBMIT_LINE = <a href="$(BUG_SUBMIT_URL)">Submit a bug or feature</a>

# Url to devdocs page
DOCS_BASE_URL = http://docs.oracle.com/javase/$(VERSION_SPECIFICATION)/docs
DEV_DOCS_URL = $(DOCS_BASE_URL)/index.html

# Common Java trademark line
JAVA_TRADEMARK_LINE = Java is a trademark or registered trademark of \
$(FULL_COMPANY_NAME) in the US and other countries.

#################################################################
# Macros:


# List of all possible directories for javadoc to look for sources
# NOTE: Quotes are required around sourcepath argument only on Windows.
# Otherwise, you get "No packages or classes specified." due
# to $(PATH_SEP) being interpreted as an end of
# command (newline or shell ; character)
ALL_SOURCE_DIRS := $(wildcard \
      $(SUPPORT_OUTPUTDIR)/gensrc/j* \
      $(if $(IMPORT_MODULES_SRC), $(IMPORT_MODULES_SRC)/*) \
      $(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS)/classes \
      $(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS_TYPE)/classes \
      $(JDK_TOPDIR)/src/*/share/classes \
      $(HOTSPOT_TOPDIR)/src/*/share/classes \
      $(LANGTOOLS_TOPDIR)/src/*/share/classes \
      $(NASHORN_TOPDIR)/src/*/share/classes \
      $(CORBA_TOPDIR)/src/*/share/classes \
      $(JAXP_TOPDIR)/src/*/share/classes \
      $(JAXWS_TOPDIR)/src/*/share/classes \
      $(SUPPORT_OUTPUTDIR)/rmic/j* \
      $(JDK_TOPDIR)/src/*/share/doc/stub \
      ) \
      #

ALL_MODULE_SOURCE_DIRS := \
      $(SUPPORT_OUTPUTDIR)/gensrc/* \
      $(if $(IMPORT_MODULES_SRC), $(IMPORT_MODULES_SRC)/*) \
      $(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS)/classes \
      $(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS_TYPE)/classes \
      $(JDK_TOPDIR)/src/*/share/classes \
      $(HOTSPOT_TOPDIR)/src/*/share/classes \
      $(LANGTOOLS_TOPDIR)/src/*/share/classes \
      $(NASHORN_TOPDIR)/src/*/share/classes \
      $(CORBA_TOPDIR)/src/*/share/classes \
      $(JAXP_TOPDIR)/src/*/share/classes \
      $(JAXWS_TOPDIR)/src/*/share/classes \
      $(SUPPORT_OUTPUTDIR)/rmic/* \
      $(JDK_TOPDIR)/src/*/share/doc/stub \
      #


# List with classpath separator between them
EMPTY:=
SPACE:= $(EMPTY) $(EMPTY)
RELEASEDOCS_SOURCEPATH = \
    $(subst $(SPACE),$(PATH_SEP),$(strip $(ALL_SOURCE_DIRS)))

RELEASEDOCS_MODULESOURCEPATH = \
    $(subst $(SPACE),$(PATH_SEP),$(strip $(ALL_MODULE_SOURCE_DIRS)))

define prep-target
	$(MKDIR) -p $(@D)
	$(RM) $@
endef

# Prep for javadoc creation, assumes $@ is an index.html file
define prep-javadoc
	@if [ -f "$@" -a "$?" != "" ] ; then \
	  $(ECHO) "# Dependencies have changed: $?"; \
	fi
	$(RM) -r $(@D)
	$(MKDIR) -p $(@D)
endef

$(eval $(call FillCacheFind, $(ALL_SOURCE_DIRS)))
define PackageDependencies
  $(call CacheFind, $(wildcard $(foreach p, $(subst .,/,$1), $(addsuffix /$p, $(ALL_SOURCE_DIRS)))))
endef

# Given a list of packages, add packages that exist to $@, print summary
define PackageFilter # packages
	@if [ "$1" != "" ] ; then \
	  for p in $1 ; do \
	    pd=`$(ECHO) $${p} | $(SED) -e 's@[.]@/@g'`; \
	    found="false"; \
	    for cp in $(ALL_SOURCE_DIRS) ; do \
	      if [ -d $${cp}/$${pd} ] ; then \
	        $(ECHO) "$${p}" >> $@; \
	        found="true"; \
	        break; \
	      fi; \
	    done; \
	    if [ "$${found}" = "false" ] ; then \
	      $(ECHO) "WARNING: Package not found: $${p}"; \
	    fi; \
	  done; \
	fi
endef

# Print out a summary of the javadoc command about to be run
define JavadocSummary # optionsfile packagesfile
	@$(ECHO) "# Running javadoc for $(patsubst $(OUTPUT_ROOT)/%,%,$@)" $(LOG_WARN)
	@($(ECHO) "# Options (`$(BASENAME) $1`):"; $(SED) -e 's@^@#   @' $1) $(LOG_DEBUG)
	@($(ECHO) "# Packages (`$(BASENAME) $2`):";$(SED) -e 's@^@#   @' $2) $(LOG_DEBUG)
endef

#
# Different api directories created from root directory
#
COREAPI_DOCSDIR = $(DOCSDIR)/api
JDK_API_DOCSDIR = $(DOCSDIR)/jdk/api
JRE_API_DOCSDIR = $(DOCSDIR)/jre/api
PLATFORM_DOCSDIR = $(DOCSDIR)/platform

JAVADOC_ARCHIVE_NAME := jdk-$(VERSION_STRING)-docs.zip
JAVADOC_ARCHIVE_ASSEMBLY_DIR :=  $(DOCSTMPDIR)/zip-docs
JAVADOC_ARCHIVE_DIR := $(OUTPUT_ROOT)/bundles
JAVADOC_ARCHIVE := $(JAVADOC_ARCHIVE_DIR)/$(JAVADOC_ARCHIVE_NAME)

# The core api index file is the target for the core api javadocs rule
# and needs to be defined early so that all other javadoc rules may
# depend on it.
COREAPI_INDEX_FILE = $(COREAPI_DOCSDIR)/index.html

# The non-core api javadocs need to be able to access the root of the core
# api directory, so for jdk/api or jre/api to get to the core api/
# directory we would use this:
JDKJRE2COREAPI = ../../api

# Common bottom argument
define CommonBottom # year
<font size="-1"><br> $(call CopyrightLine,,$1,)</font>
endef

# Common trademark bottom argument (Not sure why this is used sometimes)
define CommonTrademarkBottom # year
<font size="-1">\
$(BUG_SUBMIT_LINE)<br>$(JAVA_TRADEMARK_LINE)<br>\
$(call CopyrightLine,,$1,$(COMPANY_ADDRESS))\
</font>
endef

# Common echo of option
define OptionOnly # opt
	if [ "$(strip $1)" != "" ] ; then \
		$(PRINTF) "%s\n" "$(strip $1)"; \
	fi
endef

define OptionPair # opt arg
	$(PRINTF) "%s '%s'\n" "$(strip $1)" '$(strip $2)'
endef

define OptionTrip # opt arg arg
	$(PRINTF) "%s '%s' '%s'\n" "$(strip $1)" '$(strip $2)' '$(strip $3)'
endef

# Core api bottom argument (with special sauce)
COREAPI_BOTTOM = <font size="-1"> $(BUG_SUBMIT_LINE)\
<br>For further API reference and developer documentation, \
see <a href="$(DEV_DOCS_URL)" target="_blank">Java SE Documentation</a>. \
That documentation contains more detailed, developer-targeted descriptions, \
with conceptual overviews, definitions of terms, workarounds, \
and working code examples.<br>\
$(call CopyrightLine,$(COPYRIGHT_URL),$(FIRST_COPYRIGHT_YEAR),)\
</font>

# Common javadoc options used by all bundles

# This flag may be overridden from a custom makefile
DOCROOTPARENT_FLAG = -Xdocrootparent $(DOCS_BASE_URL)

define COMMON_JAVADOCFLAGS
    $(call OptionOnly,-XDignore.symbol.file=true) ; \
    $(call OptionOnly,-quiet) ; \
    $(call OptionOnly,-use) ; \
    $(call OptionOnly,-keywords) ; \
    $(call OptionOnly,$(DOCROOTPARENT_FLAG))
endef

# Common javadoc tags used by all bundles

# Java language specification cite
TAG_JLS = jls:a:See <cite> \
The Java&trade; Language Specification</cite>:

# Java virtual machine specification cite
TAG_JVMS = jvms:a:See <cite> \
The Java&trade; Virtual Machine Specification</cite>:

# In order to get a specific ordering it's necessary to specify the total
# ordering of tags as the tags are otherwise ordered in order of definition.
define COMMON_JAVADOCTAGS
  $(call OptionPair,-tag,beaninfo:X) ; \
  $(call OptionPair,-tag,revised:X) ; \
  $(call OptionPair,-tag,since.unbundled:X) ; \
  $(call OptionPair,-tag,spec:X) ; \
  $(call OptionPair,-tag,specdefault:X) ; \
  $(call OptionPair,-tag,Note:X) ; \
  $(call OptionPair,-tag,ToDo:X) ; \
  $(call OptionPair,-tag,apiNote:a:API Note:) ; \
  $(call OptionPair,-tag,implSpec:a:Implementation Requirements:) ; \
  $(call OptionPair,-tag,implNote:a:Implementation Note:) ; \
  $(call OptionPair,-tag,param) ; \
  $(call OptionPair,-tag,return) ; \
  $(call OptionPair,-tag,throws) ; \
  $(call OptionPair,-tag,since) ; \
  $(call OptionPair,-tag,version) ; \
  $(call OptionPair,-tag,serialData) ; \
  $(call OptionPair,-tag,factory) ; \
  $(call OptionPair,-tag,see) ; \
  $(call OptionPair,-tag,$(TAG_JVMS)) ; \
  $(call OptionPair,-tag,$(TAG_JLS))
endef



# Assume we need a draft format when the version string is not a GA version.
ifeq ($(VERSION_IS_GA), false)
  DRAFT_HEADER := <br><strong>DRAFT&nbsp;$(VERSION_STRING)</strong>
  DRAFT_BOTTOM := <br><strong>DRAFT&nbsp;$(VERSION_STRING)</strong>
  DRAFT_WINTITLE := $(VERSION_BUILD)
  # Early access top text (not used in FCS releases)
  COREAPI_TOP_EARLYACCESS := \
<div style="background-color: \#EEEEEE"> \
<div style="padding: 6px; margin-top: 2px; margin-bottom: 6px; \
margin-left: 6px; margin-right: 6px; text-align: justify; \
font-size: 80%; font-family: Helvetica, Arial, sans-serif; \
font-weight: normal;"> \
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. \
</div> </div>
else
  DRAFT_HEADER :=
  DRAFT_BOTTOM :=
  DRAFT_WINTITLE :=
  COREAPI_TOP_EARLYACCESS :=
endif

#################################################################

#
# Load custom Javadoc rules
#

$(eval $(call IncludeCustomExtension, , Javadoc.gmk))

#################################################################

#
# Default target is same as docs target, create core api and all others it can
#

all: docs
docs: coredocs otherdocs

#
# Optional target which bundles all generated javadocs into a zip archive.
# The dependency on docs is handled in Main.gmk.
#

zip-docs: $(JAVADOC_ARCHIVE)

#############################################################
#
# coredocs
#
COREAPI_DOCTITLE = Java$(TRADEMARK) Platform, Standard Edition \
$(VERSION_SPECIFICATION)<br>API Specification
COREAPI_WINDOWTITLE = Java Platform SE $(VERSION_SPECIFICATION)
COREAPI_HEADER = \
<strong>Java$(TRADEMARK)&nbsp;Platform<br>Standard&nbsp;Ed.&nbsp;$(VERSION_SPECIFICATION)</strong>

# Overview file for core apis
COREAPI_OVERVIEW = $(JDK_TOPDIR)/src/java.base/share/classes/overview-core.html

# The options and packages files
COREAPI_OPTIONS_FILE = $(DOCSTMPDIR)/coredocs.options
COREAPI_PACKAGES_FILE = $(DOCSTMPDIR)/coredocs.packages

# The modules required to be documented
COREAPI_MODULES = java.se.ee

coredocs: $(COREAPI_INDEX_FILE)

# Set relative location to core api document root
$(COREAPI_INDEX_FILE): GET2DOCSDIR=..

# Run javadoc if the index file is out of date or missing
$(COREAPI_INDEX_FILE): $(COREAPI_OPTIONS_FILE) $(COREAPI_PACKAGES_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(COREAPI_OPTIONS_FILE),$(COREAPI_PACKAGES_FILE))
	$(JAVADOC_CMD) -d $(@D) \
	    @$(COREAPI_OPTIONS_FILE) @$(COREAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(COREAPI_OPTIONS_FILE): $(COREAPI_OVERVIEW)
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
          $(call OptionOnly,-Xdoclint:reference) ; \
          $(call OptionOnly,-Xdoclint/package:-org.omg.*$(COMMA)jdk.internal.logging.*) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(COREAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ISO-8859-1) ; \
	  $(call OptionOnly,-splitIndex) ; \
	  $(call OptionPair,-overview,$(COREAPI_OVERVIEW)) ; \
	  $(call OptionPair,-doctitle,$(COREAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(COREAPI_WINDOWTITLE) $(DRAFT_WINTITLE)) ; \
	  $(call OptionPair,-header,$(COREAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(COREAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	) >> $@
        ifdef COREAPI_TOP_EARLYACCESS
	  @$(call OptionPair,-top,$(COREAPI_TOP_EARLYACCESS)) >> $@
        endif

# Create a file with the package names in it
$(COREAPI_PACKAGES_FILE): $(call PackageDependencies,$(CORE_PKGS))
	$(prep-target)
	$(call PackageFilter,$(CORE_PKGS))

#############################################################
#
# docletapidocs
#

ALL_OTHER_TARGETS += docletapidocs

DOCLETAPI_DOCDIR := $(JDK_API_DOCSDIR)/javadoc/doclet
DOCLETAPI2COREAPI := ../../$(JDKJRE2COREAPI)
DOCLETAPI_DOCTITLE := Doclet API
DOCLETAPI_WINDOWTITLE := Doclet API
DOCLETAPI_HEADER := <strong>Doclet API</strong>
DOCLETAPI_BOTTOM := $(call CommonTrademarkBottom,$(DOCLETAPI_FIRST_COPYRIGHT_YEAR))
DOCLETAPI_GROUPNAME := Packages
DOCLETAPI_REGEXP := jdk.javadoc.doclet*
# DOCLETAPI_PKGS is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
DOCLETAPI_INDEX_FILE = $(DOCLETAPI_DOCDIR)/index.html
DOCLETAPI_OPTIONS_FILE = $(DOCSTMPDIR)/docletapi.options
DOCLETAPI_PACKAGES_FILE = $(DOCSTMPDIR)/docletapi.packages

# The modules required to be documented
DOCLETAPI_MODULES = jdk.javadoc

docletapidocs: $(DOCLETAPI_INDEX_FILE)

# Set relative location to core api document root
$(DOCLETAPI_INDEX_FILE): GET2DOCSDIR=$(DOCLETAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(DOCLETAPI_INDEX_FILE): $(DOCLETAPI_OPTIONS_FILE) $(DOCLETAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(DOCLETAPI_OPTIONS_FILE),$(DOCLETAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(DOCLETAPI_OPTIONS_FILE) @$(DOCLETAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(DOCLETAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(DOCLETAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-breakiterator) ; \
	  $(call OptionPair,-doctitle,$(DOCLETAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(DOCLETAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(DOCLETAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(DOCLETAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-group,$(DOCLETAPI_GROUPNAME),$(DOCLETAPI_REGEXP)); \
	  $(call OptionTrip,-linkoffline,$(DOCLETAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(DOCLETAPI_PACKAGES_FILE): $(call PackageDependencies,$(DOCLETAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(DOCLETAPI_PKGS))

#############################################################
#
# old docletapidocs
#

ALL_OTHER_TARGETS += olddocletapidocs

OLD_DOCLET_DIR := $(JDK_API_DOCSDIR)/javadoc/old
OLD_DOCLETAPI_DOCDIR := $(OLD_DOCLET_DIR)/doclet
OLD_DOCLETAPI2COREAPI := ../../../$(JDKJRE2COREAPI)
OLD_DOCLETAPI_DOCTITLE := Doclet API
OLD_DOCLETAPI_WINDOWTITLE := Doclet API
OLD_DOCLETAPI_HEADER := <strong>Doclet API</strong>
OLD_DOCLETAPI_BOTTOM := $(call CommonTrademarkBottom,$(DOCLETAPI_FIRST_COPYRIGHT_YEAR))
OLD_DOCLETAPI_GROUPNAME := Packages
OLD_DOCLETAPI_REGEXP := com.sun.javadoc
# OLD_DOCLETAPI_PKGS is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
OLD_DOCLETAPI_INDEX_FILE = $(OLD_DOCLETAPI_DOCDIR)/index.html
OLD_DOCLETAPI_OPTIONS_FILE = $(DOCSTMPDIR)/old-docletapi.options
OLD_DOCLETAPI_PACKAGES_FILE = $(DOCSTMPDIR)/old-docletapi.packages

# The modules required to be documented
OLD_DOCLETAPI_MODULES = jdk.javadoc

olddocletapidocs: $(OLD_DOCLETAPI_INDEX_FILE)

# Set relative location to core api document root
$(OLD_DOCLETAPI_INDEX_FILE): GET2DOCSDIR=$(OLD_DOCLETAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(OLD_DOCLETAPI_INDEX_FILE): $(OLD_DOCLETAPI_OPTIONS_FILE) $(OLD_DOCLETAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(OLD_DOCLETAPI_OPTIONS_FILE),$(OLD_DOCLETAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(OLD_DOCLETAPI_OPTIONS_FILE) @$(OLD_DOCLETAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(OLD_DOCLETAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(OLD_DOCLETAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-breakiterator) ; \
	  $(call OptionPair,-doctitle,$(OLD_DOCLETAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(OLD_DOCLETAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(OLD_DOCLETAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(OLD_DOCLETAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-group,$(OLD_DOCLETAPI_GROUPNAME),$(OLD_DOCLETAPI_REGEXP)); \
	  $(call OptionTrip,-linkoffline,$(OLD_DOCLETAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(OLD_DOCLETAPI_PACKAGES_FILE): $(call PackageDependencies,$(OLD_DOCLETAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(OLD_DOCLETAPI_PKGS))

#############################################################
#
# tagletapidocs
#

ALL_OTHER_TARGETS += tagletapidocs
TAGLETAPI_DOCDIR := $(OLD_DOCLET_DIR)/taglet
TAGLETAPI2COREAPI := ../../../$(JDKJRE2COREAPI)
TAGLETAPI_DOCTITLE := Taglet API
TAGLETAPI_WINDOWTITLE := Taglet API
TAGLETAPI_HEADER := <strong>Taglet API</strong>
TAGLETAPI_BOTTOM := $(call CommonTrademarkBottom,$(TAGLETAPI_FIRST_COPYRIGHT_YEAR))
# TAGLETAPI_FILE is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
TAGLETAPI_INDEX_FILE = $(TAGLETAPI_DOCDIR)/index.html
TAGLETAPI_OPTIONS_FILE = $(DOCSTMPDIR)/tagletapi.options
TAGLETAPI_PACKAGES_FILE = $(DOCSTMPDIR)/tagletapi.packages

# The modules required to be documented
TAGLETAPI_MODULES = jdk.javadoc

tagletapidocs: $(TAGLETAPI_INDEX_FILE)

# Run javadoc if the index file is out of date or missing
$(TAGLETAPI_INDEX_FILE): $(TAGLETAPI_OPTIONS_FILE) $(TAGLETAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(TAGLETAPI_OPTIONS_FILE),$(TAGLETAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(TAGLETAPI_OPTIONS_FILE) @$(TAGLETAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(TAGLETAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(TAGLETAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-breakiterator) ; \
	  $(call OptionPair,-doctitle,$(TAGLETAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(TAGLETAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(TAGLETAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionOnly,-nonavbar) ; \
	  $(call OptionOnly,-noindex) ; \
	  $(call OptionPair,-bottom,$(TAGLETAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(TAGLETAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(TAGLETAPI_PACKAGES_FILE): $(call PackageDependencies,$(TAGLETAPI_PKGS))
	$(prep-target)
	@($(ECHO) "$(LANGTOOLS_TOPDIR)/src/jdk.javadoc/share/classes/$(TAGLETAPI_FILE)" ) > $@

#############################################################
#
# domapidocs
#

ALL_OTHER_TARGETS += domapidocs

DOMAPI_DOCDIR := $(JRE_API_DOCSDIR)/plugin/dom
DOMAPI2COREAPI := ../../$(JDKJRE2COREAPI)
DOMAPI_DOCTITLE := Common DOM API
DOMAPI_WINDOWTITLE := Common DOM API
DOMAPI_HEADER := <strong>Common DOM API</strong>
DOMAPI_BOTTOM := $(call CommonTrademarkBottom,$(DOMAPI_FIRST_COPYRIGHT_YEAR))
DOMAPI_GROUPNAME := Packages
DOMAPI_REGEXP := org.w3c.dom*
# DOMAPI_PKGS is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
DOMAPI_INDEX_FILE = $(DOMAPI_DOCDIR)/index.html
DOMAPI_OPTIONS_FILE = $(DOCSTMPDIR)/domapi.options
DOMAPI_PACKAGES_FILE = $(DOCSTMPDIR)/domapi.packages

# The modules required to be documented
DOMAPI_MODULES = java.xml,jdk.xml.dom

domapidocs: $(DOMAPI_INDEX_FILE)

# Set relative location to core api document root
$(DOMAPI_INDEX_FILE): GET2DOCSDIR=$(DOMAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(DOMAPI_INDEX_FILE): $(DOMAPI_OPTIONS_FILE) $(DOMAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(DOMAPI_OPTIONS_FILE),$(DOMAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(DOMAPI_OPTIONS_FILE) @$(DOMAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(DOMAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(DOMAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-splitIndex) ; \
	  $(call OptionPair,-doctitle,$(DOMAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(DOMAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(DOMAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(DOMAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-group,$(DOMAPI_GROUPNAME),$(DOMAPI_REGEXP)); \
	  $(call OptionTrip,-linkoffline,$(DOMAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(DOMAPI_PACKAGES_FILE): $(call PackageDependencies,$(DOMAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(DOMAPI_PKGS))

#############################################################
#
# jpdadocs
#

ALL_OTHER_TARGETS += jpdadocs

jpdadocs: jdidocs jdwpdocs jvmtidocs

#############################################################
#
# jdidocs
#

ALL_OTHER_TARGETS += jdidocs

JDI_DOCDIR := $(JDK_API_DOCSDIR)/jpda/jdi
JDI2COREAPI := ../../$(JDKJRE2COREAPI)
JDI_DOCTITLE := Java$(TRADEMARK) Debug Interface
JDI_WINDOWTITLE := Java Debug Interface
JDI_HEADER := <strong>Java Debug Interface</strong>
JDI_BOTTOM := $(call CommonBottom,$(JDI_FIRST_COPYRIGHT_YEAR))
JDI_OVERVIEW := $(JDK_TOPDIR)/src/jdk.jdi/share/classes/jdi-overview.html
# JDI_PKGS is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
JDI_INDEX_FILE = $(JDI_DOCDIR)/index.html
JDI_OPTIONS_FILE = $(DOCSTMPDIR)/jdi.options
JDI_PACKAGES_FILE = $(DOCSTMPDIR)/jdi.packages

# The modules required to be documented
JDI_MODULES = jdk.jdi

jdidocs: $(JDI_INDEX_FILE)

# Set relative location to core api document root
$(JDI_INDEX_FILE): GET2DOCSDIR=$(JDI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JDI_INDEX_FILE): $(JDI_OPTIONS_FILE) $(JDI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JDI_OPTIONS_FILE),$(JDI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JDI_OPTIONS_FILE) @$(JDI_PACKAGES_FILE)

# Create file with javadoc options in it
$(JDI_OPTIONS_FILE): $(JDI_OVERVIEW)
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JDI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionPair,-overview,$(JDI_OVERVIEW)) ; \
	  $(call OptionPair,-doctitle,$(JDI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JDI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JDI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(JDI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(JDI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JDI_PACKAGES_FILE): $(call PackageDependencies,$(JDI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JDI_PKGS))

#############################################################
#
# jdwpdocs
#

ALL_OTHER_TARGETS += jdwpdocs

JDWP_DOCDIR = $(PLATFORM_DOCSDIR)/jpda/jdwp

jdwpdocs: $(JDWP_DOCDIR)/jdwp-protocol.html
$(JDWP_DOCDIR)/jdwp-protocol.html : $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/jdwp-protocol.html
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(CP) $< $@

#############################################################
#
# jvmtidocs
#

ALL_OTHER_TARGETS += jvmtidocs

JVMTI_DOCDIR = $(PLATFORM_DOCSDIR)/jvmti
JVMTI_HTML = $(HOTSPOT_DIST)/docs/platform/jvmti/jvmti.html

jvmtidocs: $(JVMTI_DOCDIR)/jvmti.html
$(JVMTI_DOCDIR)/jvmti.html:
	@$(prep-javadoc)
	@if [ -f $(JVMTI_HTML) ] ; then \
	  $(CP) $(JVMTI_HTML) $@; \
	else \
	  $(ECHO) "WARNING: Generated file does not exist: $(JVMTI_HTML)"; \
	fi

#############################################################
#
# jaasdocs
#

ALL_OTHER_TARGETS += jaasdocs

JAAS_DOCDIR := $(JRE_API_DOCSDIR)/security/jaas/spec
JAAS2COREAPI := ../../../$(JDKJRE2COREAPI)
JAAS_DOCTITLE := Java$(TRADEMARK) Authentication and Authorization Service
JAAS_WINDOWTITLE := Java Authentication and Authorization Service
JAAS_HEADER := <strong>Java Authentication and Authorization Service</strong>
JAAS_BOTTOM := $(call CommonBottom,$(JAAS_FIRST_COPYRIGHT_YEAR))
# JAAS_PKGS is located in NON_CORE_PKGS.gmk
JAAS_OVERVIEW := $(JDK_TOPDIR)/src/jdk.security.auth/share/classes/jaas-overview.html

# The index.html, options, and packages files
JAAS_INDEX_FILE = $(JAAS_DOCDIR)/index.html
JAAS_OPTIONS_FILE = $(DOCSTMPDIR)/jaas.options
JAAS_PACKAGES_FILE = $(DOCSTMPDIR)/jaas.packages

# The modules required to be documented
JAAS_MODULES = jdk.security.auth

jaasdocs: $(JAAS_INDEX_FILE)

# Set relative location to core api document root
$(JAAS_INDEX_FILE): GET2DOCSDIR=$(JAAS2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JAAS_INDEX_FILE): $(JAAS_OPTIONS_FILE) $(JAAS_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JAAS_OPTIONS_FILE),$(JAAS_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JAAS_OPTIONS_FILE) @$(JAAS_PACKAGES_FILE)

# Create file with javadoc options in it
$(JAAS_OPTIONS_FILE): $(JAAS_OVERVIEW)
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JAAS_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionPair,-overview,$(JAAS_OVERVIEW)) ; \
	  $(call OptionPair,-doctitle,$(JAAS_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JAAS_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JAAS_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(JAAS_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(JAAS2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JAAS_PACKAGES_FILE): $(call PackageDependencies,$(JAAS_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JAAS_PKGS))

#############################################################
#
# jgssdocs
#

ALL_OTHER_TARGETS += jgssdocs

JGSS_DOCDIR := $(JRE_API_DOCSDIR)/security/jgss/spec
JGSS2COREAPI := ../../../$(JDKJRE2COREAPI)
JGSS_DOCTITLE := Java$(TRADEMARK) GSS-API Utilities
JGSS_WINDOWTITLE := Java GSS-API Utilities
JGSS_HEADER := <strong>Java GSS-API Utilities</strong>
JGSS_BOTTOM := $(call CommonBottom,$(JGSS_FIRST_COPYRIGHT_YEAR))
JGSS_OVERVIEW := $(JDK_TOPDIR)/src/java.security.jgss/share/classes/jgss-overview.html
# JGSS_PKGS is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
JGSS_INDEX_FILE = $(JGSS_DOCDIR)/index.html
JGSS_OPTIONS_FILE = $(DOCSTMPDIR)/jgss.options
JGSS_PACKAGES_FILE = $(DOCSTMPDIR)/jgss.packages

# The modules required to be documented
JGSS_MODULES = jdk.security.jgss

jgssdocs: $(JGSS_INDEX_FILE)

# Set relative location to core api document root
$(JGSS_INDEX_FILE): GET2DOCSDIR=$(JGSS2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JGSS_INDEX_FILE): $(JGSS_OPTIONS_FILE) $(JGSS_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JGSS_OPTIONS_FILE),$(JGSS_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JGSS_OPTIONS_FILE) @$(JGSS_PACKAGES_FILE)

# Create file with javadoc options in it
$(JGSS_OPTIONS_FILE): $(JGSS_OVERVIEW)
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JGSS_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-overview,$(JGSS_OVERVIEW)) ; \
	  $(call OptionPair,-doctitle,$(JGSS_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JGSS_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JGSS_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(JGSS_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(JGSS2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JGSS_PACKAGES_FILE): $(call PackageDependencies,$(JGSS_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JGSS_PKGS))

#############################################################
#
# smartcardiodocs
#

ALL_OTHER_TARGETS += smartcardiodocs

SMARTCARDIO_DOCDIR := $(JRE_API_DOCSDIR)/security/smartcardio/spec
SMARTCARDIO2COREAPI := ../../../$(JDKJRE2COREAPI)
SMARTCARDIO_DOCTITLE := Java$(TRADEMARK) Smart Card I/O
SMARTCARDIO_WINDOWTITLE := Java Smart Card I/O
SMARTCARDIO_HEADER := <strong>Java Smart Card I/O</strong>
SMARTCARDIO_BOTTOM := $(call CommonBottom,$(SMARTCARDIO_FIRST_COPYRIGHT_YEAR))
# SMARTCARDIO_PKGS is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
SMARTCARDIO_INDEX_FILE = $(SMARTCARDIO_DOCDIR)/index.html
SMARTCARDIO_OPTIONS_FILE = $(DOCSTMPDIR)/smartcardio.options
SMARTCARDIO_PACKAGES_FILE = $(DOCSTMPDIR)/smartcardio.packages

# The modules required to be documented
SMARTCARDIO_MODULES = java.smartcardio

smartcardiodocs: $(SMARTCARDIO_INDEX_FILE)

# Set relative location to core api document root
$(SMARTCARDIO_INDEX_FILE): GET2DOCSDIR=$(SMARTCARDIO2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(SMARTCARDIO_INDEX_FILE): $(SMARTCARDIO_OPTIONS_FILE) $(SMARTCARDIO_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(SMARTCARDIO_OPTIONS_FILE),$(SMARTCARDIO_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(SMARTCARDIO_OPTIONS_FILE) @$(SMARTCARDIO_PACKAGES_FILE)

# Create file with javadoc options in it
$(SMARTCARDIO_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(SMARTCARDIO_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(SMARTCARDIO_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(SMARTCARDIO_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(SMARTCARDIO_HEADER)$(DRAFT_HEADER)); \
	  $(call OptionPair,-bottom,$(SMARTCARDIO_BOTTOM)$(DRAFT_BOTTOM)); \
	  $(call OptionTrip,-linkoffline,$(SMARTCARDIO2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(SMARTCARDIO_PACKAGES_FILE): $(call PackageDependencies,$(SMARTCARDIO_PKGS))
	$(prep-target)
	$(call PackageFilter,$(SMARTCARDIO_PKGS))

#############################################################
#
# httpserverdocs
#

ALL_OTHER_TARGETS += httpserverdocs

HTTPSERVER_DOCDIR := $(JRE_API_DOCSDIR)/net/httpserver/spec
HTTPSERVER2COREAPI := ../../../$(JDKJRE2COREAPI)
HTTPSERVER_DOCTITLE := Java$(TRADEMARK) HTTP Server
HTTPSERVER_WINDOWTITLE := Java HTTP Server
HTTPSERVER_HEADER := <strong>Java HTTP Server</strong>
HTTPSERVER_BOTTOM := $(call CommonBottom,$(HTTPSERVER_FIRST_COPYRIGHT_YEAR))
# HTTPSERVER_PKGS is located in NON_CORE_PKGS.gmk

HTTPSERVER_INDEX_HTML = $(HTTPSERVER_DOCDIR)/index.html
HTTPSERVER_OPTIONS_FILE = $(DOCSTMPDIR)/httpserver.options
HTTPSERVER_PACKAGES_FILE = $(DOCSTMPDIR)/httpserver.packages

# The modules required to be documented
HTTPSERVER_MODULES = jdk.httpserver

httpserverdocs: $(HTTPSERVER_INDEX_HTML)

# Set relative location to core api document root
$(HTTPSERVER_INDEX_HTML): GET2DOCSDIR=$(HTTPSERVER2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(HTTPSERVER_INDEX_HTML): $(HTTPSERVER_OPTIONS_FILE) $(HTTPSERVER_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(HTTPSERVER_OPTIONS_FILE),$(HTTPSERVER_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(HTTPSERVER_OPTIONS_FILE) @$(HTTPSERVER_PACKAGES_FILE)

# Create file with javadoc options in it
$(HTTPSERVER_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(HTTPSERVER_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(HTTPSERVER_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(HTTPSERVER_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(HTTPSERVER_HEADER)$(DRAFT_HEADER)); \
	  $(call OptionPair,-bottom,$(HTTPSERVER_BOTTOM)$(DRAFT_BOTTOM)); \
	  $(call OptionTrip,-linkoffline,$(HTTPSERVER2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(HTTPSERVER_PACKAGES_FILE): $(call PackageDependencies,$(HTTPSERVER_PKGS))
	$(prep-target)
	$(call PackageFilter,$(HTTPSERVER_PKGS))

#############################################################
#
# jsobjectdocs
#

ALL_OTHER_TARGETS += jsobjectdocs

JSOBJECT_DOCDIR := $(JRE_API_DOCSDIR)/plugin/jsobject
JSOBJECT2COREAPI := ../../$(JDKJRE2COREAPI)
JSOBJECT_DOCTITLE := Java$(TRADEMARK) JSObject Doc
JSOBJECT_WINDOWTITLE := Java JSObject Doc
JSOBJECT_HEADER := <strong>Java JSObject Doc</strong>
JSOBJECT_BOTTOM := $(call CommonBottom,$(JSOBJECT_FIRST_COPYRIGHT_YEAR))
# JSOBJECT_PKGS is located in NON_CORE_PKGS.gmk

JSOBJECT_INDEX_HTML = $(JSOBJECT_DOCDIR)/index.html
JSOBJECT_OPTIONS_FILE = $(DOCSTMPDIR)/jsobject.options
JSOBJECT_PACKAGES_FILE = $(DOCSTMPDIR)/jsobject.packages

# The modules required to be documented
JSOBJECT_MODULES = jdk.jsobject

jsobjectdocs: $(JSOBJECT_INDEX_HTML)

# Set relative location to core api document root
$(JSOBJECT_INDEX_HTML): GET2DOCSDIR=$(JSOBJECT2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JSOBJECT_INDEX_HTML): $(JSOBJECT_OPTIONS_FILE) $(JSOBJECT_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JSOBJECT_OPTIONS_FILE),$(JSOBJECT_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JSOBJECT_OPTIONS_FILE) @$(JSOBJECT_PACKAGES_FILE)

# Create file with javadoc options in it
$(JSOBJECT_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JSOBJECT_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(JSOBJECT_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JSOBJECT_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JSOBJECT_HEADER)$(DRAFT_HEADER)); \
	  $(call OptionPair,-bottom,$(JSOBJECT_BOTTOM)$(DRAFT_BOTTOM)); \
	  $(call OptionTrip,-linkoffline,$(JSOBJECT2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JSOBJECT_PACKAGES_FILE): $(call PackageDependencies,$(JSOBJECT_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JSOBJECT_PKGS))


#############################################################
#
# mgmtdocs
#

ALL_OTHER_TARGETS += mgmtdocs

MGMT_DOCDIR := $(JRE_API_DOCSDIR)/management/extension
MGMT2COREAPI := ../../$(JDKJRE2COREAPI)
MGMT_DOCTITLE := Monitoring and Management Interface for the Java$(TRADEMARK) Platform
MGMT_WINDOWTITLE := Monitoring and Management Interface for the Java Platform
MGMT_HEADER := <strong>Monitoring and Management Interface for the Java Platform</strong>
MGMT_BOTTOM := $(call CommonBottom,$(MGMT_FIRST_COPYRIGHT_YEAR))
MGMT_OVERVIEW := $(JDK_TOPDIR)/src/java.management/share/classes/mgmt-overview.html
# MGMT_PKGS is located in NON_CORE_PKGS.gmk

# The index.html, options, and packages files
MGMT_INDEX_FILE = $(MGMT_DOCDIR)/index.html
MGMT_OPTIONS_FILE = $(DOCSTMPDIR)/mgmt.options
MGMT_PACKAGES_FILE = $(DOCSTMPDIR)/mgmt.packages

# The modules required to be documented
MGMT_MODULES = jdk.management

mgmtdocs: $(MGMT_INDEX_FILE)

# Set relative location to core api document root
$(MGMT_INDEX_FILE): GET2DOCSDIR=$(MGMT2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(MGMT_INDEX_FILE): $(MGMT_OPTIONS_FILE) $(MGMT_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(MGMT_OPTIONS_FILE),$(MGMT_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(MGMT_OPTIONS_FILE) @$(MGMT_PACKAGES_FILE)

# Create file with javadoc options in it
$(MGMT_OPTIONS_FILE): $(MGMT_OVERVIEW)
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(MGMT_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-overview,$(MGMT_OVERVIEW)) ; \
	  $(call OptionPair,-doctitle,$(MGMT_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(MGMT_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(MGMT_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(MGMT_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(MGMT2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(MGMT_PACKAGES_FILE): $(call PackageDependencies,$(MGMT_PKGS))
	$(prep-target)
	$(call PackageFilter,$(MGMT_PKGS))

#############################################################
#
# attachdocs
#

ALL_OTHER_TARGETS += attachdocs

ATTACH_DOCDIR := $(JDK_API_DOCSDIR)/attach/spec
ATTACH2COREAPI := ../../$(JDKJRE2COREAPI)
ATTACH_DOCTITLE := Attach API
ATTACH_WINDOWTITLE := Attach API
ATTACH_HEADER := <strong>Attach API</strong>
ATTACH_BOTTOM := $(call CommonBottom,$(ATTACH_FIRST_COPYRIGHT_YEAR))
# ATTACH_PKGS is located in NON_CORE_PKGS.gmk

ATTACH_INDEX_HTML = $(ATTACH_DOCDIR)/index.html
ATTACH_OPTIONS_FILE = $(DOCSTMPDIR)/attach.options
ATTACH_PACKAGES_FILE = $(DOCSTMPDIR)/attach.packages

# The modules required to be documented
ATTACH_MODULES = jdk.attach

attachdocs: $(ATTACH_INDEX_HTML)

# Set relative location to core api document root
$(ATTACH_INDEX_HTML): GET2DOCSDIR=$(ATTACH2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(ATTACH_INDEX_HTML): $(ATTACH_OPTIONS_FILE) $(ATTACH_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(ATTACH_OPTIONS_FILE),$(ATTACH_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(ATTACH_OPTIONS_FILE) @$(ATTACH_PACKAGES_FILE)

# Create file with javadoc options in it
$(ATTACH_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(ATTACH_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(ATTACH_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(ATTACH_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(ATTACH_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(ATTACH_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(ATTACH2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(ATTACH_PACKAGES_FILE): $(call PackageDependencies,$(ATTACH_PKGS))
	$(prep-target)
	$(call PackageFilter,$(ATTACH_PKGS))

#############################################################
#
# jconsoledocs
#

ALL_OTHER_TARGETS += jconsoledocs

JCONSOLE_DOCDIR := $(JDK_API_DOCSDIR)/jconsole/spec
JCONSOLE2COREAPI := ../../$(JDKJRE2COREAPI)
JCONSOLE_DOCTITLE := JConsole API
JCONSOLE_WINDOWTITLE := JConsole API
JCONSOLE_HEADER := <strong>JConsole API</strong>
JCONSOLE_BOTTOM := $(call CommonBottom,$(JCONSOLE_FIRST_COPYRIGHT_YEAR))
# JCONSOLE_PKGS is located in NON_CORE_PKGS.gmk

JCONSOLE_INDEX_HTML = $(JCONSOLE_DOCDIR)/index.html
JCONSOLE_OPTIONS_FILE = $(DOCSTMPDIR)/jconsole.options
JCONSOLE_PACKAGES_FILE = $(DOCSTMPDIR)/jconsole.packages

# The modules required to be documented
JCONSOLE_MODULES = jdk.jconsole

jconsoledocs: $(JCONSOLE_INDEX_HTML)

# Set relative location to core api document root
$(JCONSOLE_INDEX_HTML): GET2DOCSDIR=$(JCONSOLE2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JCONSOLE_INDEX_HTML): $(JCONSOLE_OPTIONS_FILE) $(JCONSOLE_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JCONSOLE_OPTIONS_FILE),$(JCONSOLE_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JCONSOLE_OPTIONS_FILE) @$(JCONSOLE_PACKAGES_FILE)

# Create file with javadoc options in it
$(JCONSOLE_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JCONSOLE_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(JCONSOLE_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JCONSOLE_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JCONSOLE_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(JCONSOLE_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(JCONSOLE2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JCONSOLE_PACKAGES_FILE): $(call PackageDependencies,$(JCONSOLE_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JCONSOLE_PKGS))

#############################################################
#
# jshellapidocs
#

ALL_OTHER_TARGETS += jshellapidocs

JSHELLAPI_DOCDIR := $(JDK_API_DOCSDIR)/jshell
JSHELLAPI2COREAPI := ../../$(JDKJRE2COREAPI)
JSHELLAPI_DOCTITLE := JShell API
JSHELLAPI_WINDOWTITLE := JShell API
JSHELLAPI_HEADER := <strong>JSHELL API</strong>
JSHELLAPI_BOTTOM := $(call CommonBottom,$(JSHELLAPI_FIRST_COPYRIGHT_YEAR))
JSHELLAPI_OVERVIEW := $(LANGTOOLS_TOPDIR)/src/jdk.jshell/share/classes/jdk/jshell/overview.html
# JSHELLAPI_PKGS is located in NON_CORE_PKGS.gmk

JSHELLAPI_INDEX_HTML = $(JSHELLAPI_DOCDIR)/index.html
JSHELLAPI_OPTIONS_FILE = $(DOCSTMPDIR)/jshellapi.options
JSHELLAPI_PACKAGES_FILE = $(DOCSTMPDIR)/jshellapi.packages

# The modules required to be documented
JSHELLAPI_MODULES = jdk.jshell

jshellapidocs: $(JSHELLAPI_INDEX_HTML)

# Set relative location to core api document root
$(JSHELLAPI_INDEX_HTML): GET2DOCSDIR=$(JSHELLAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JSHELLAPI_INDEX_HTML): $(JSHELLAPI_OPTIONS_FILE) $(JSHELLAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JSHELLAPI_OPTIONS_FILE),$(JSHELLAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JSHELLAPI_OPTIONS_FILE) @$(JSHELLAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(JSHELLAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JSHELLAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionPair,-overview,$(JSHELLAPI_OVERVIEW)) ; \
	  $(call OptionPair,-doctitle,$(JSHELLAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JSHELLAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JSHELLAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(JSHELLAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(JSHELLAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JSHELLAPI_PACKAGES_FILE): $(call PackageDependencies,$(JSHELLAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JSHELLAPI_PKGS))

#############################################################
#
# treeapidocs
#

ALL_OTHER_TARGETS += treeapidocs

TREEAPI_DOCDIR := $(JDK_API_DOCSDIR)/javac/tree
TREEAPI2COREAPI := ../../$(JDKJRE2COREAPI)
TREEAPI_DOCTITLE := Compiler Tree API
TREEAPI_WINDOWTITLE := Compiler Tree API
TREEAPI_HEADER := <strong>Compiler Tree API</strong>
TREEAPI_BOTTOM := $(call CommonBottom,$(TREEAPI_FIRST_COPYRIGHT_YEAR))
TREEAPI_GROUPNAME := Packages
TREEAPI_REGEXP := com.sun.source.*
# TREEAPI_PKGS is located in NON_CORE_PKGS.gmk

TREEAPI_INDEX_HTML = $(TREEAPI_DOCDIR)/index.html
TREEAPI_OPTIONS_FILE = $(DOCSTMPDIR)/treeapi.options
TREEAPI_PACKAGES_FILE = $(DOCSTMPDIR)/treeapi.packages

# The modules required to be documented
TREEAPI_MODULES = jdk.compiler

treeapidocs: $(TREEAPI_INDEX_HTML)

# Set relative location to core api document root
$(TREEAPI_INDEX_HTML): GET2DOCSDIR=$(TREEAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(TREEAPI_INDEX_HTML): $(TREEAPI_OPTIONS_FILE) $(TREEAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(TREEAPI_OPTIONS_FILE),$(TREEAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(TREEAPI_OPTIONS_FILE) @$(TREEAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(TREEAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(TREEAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionPair,-doctitle,$(TREEAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(TREEAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(TREEAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(TREEAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-group,$(TREEAPI_GROUPNAME),$(TREEAPI_REGEXP)); \
	  $(call OptionTrip,-linkoffline,$(TREEAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(TREEAPI_PACKAGES_FILE): $(call PackageDependencies,$(TREEAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(TREEAPI_PKGS))

#############################################################
#
# nashornapidocs
#

ALL_OTHER_TARGETS += nashornapidocs

NASHORNAPI_DOCDIR := $(JDK_API_DOCSDIR)/nashorn
NASHORNAPI2COREAPI := ../$(JDKJRE2COREAPI)
NASHORNAPI_DOCTITLE := Nashorn API
NASHORNAPI_WINDOWTITLE := Nashorn API
NASHORNAPI_HEADER := <strong>Nashorn API</strong>
NASHORNAPI_BOTTOM := $(call CommonBottom,$(NASHORNAPI_FIRST_COPYRIGHT_YEAR))
NASHORNAPI_GROUPNAME := Packages
NASHORNAPI_REGEXP := jdk.nashorn.api.*
# NASHORNAPI_PKGS is located in NON_CORE_PKGS.gmk

NASHORNAPI_INDEX_HTML = $(NASHORNAPI_DOCDIR)/index.html
NASHORNAPI_OPTIONS_FILE = $(DOCSTMPDIR)/nashornapi.options
NASHORNAPI_PACKAGES_FILE = $(DOCSTMPDIR)/nashornapi.packages

# The modules required to be documented
NASHORNAPI_MODULES = jdk.scripting.nashorn

nashornapidocs: $(NASHORNAPI_INDEX_HTML)

# Set relative location to core api document root
$(NASHORNAPI_INDEX_HTML): GET2DOCSDIR=$(NASHORNAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(NASHORNAPI_INDEX_HTML): $(NASHORNAPI_OPTIONS_FILE) $(NASHORNAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(NASHORNAPI_OPTIONS_FILE),$(NASHORNAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(NASHORNAPI_OPTIONS_FILE) @$(NASHORNAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(NASHORNAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(NASHORNAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionPair,-doctitle,$(NASHORNAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(NASHORNAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(NASHORNAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(NASHORNAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-group,$(NASHORNAPI_GROUPNAME),$(NASHORNAPI_REGEXP)); \
	  $(call OptionTrip,-linkoffline,$(NASHORNAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(NASHORNAPI_PACKAGES_FILE): $(call PackageDependencies,$(NASHORNAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(NASHORNAPI_PKGS))

#############################################################
#
# dynalinkapidocs
#

ALL_OTHER_TARGETS += dynalinkapidocs

DYNALINKAPI_DOCDIR := $(JDK_API_DOCSDIR)/dynalink
DYNALINKAPI2COREAPI := ../$(JDKJRE2COREAPI)
DYNALINKAPI_DOCTITLE := Dynalink API
DYNALINKAPI_WINDOWTITLE := Dynalink API
DYNALINKAPI_HEADER := <strong>Dynalink API</strong>
DYNALINKAPI_BOTTOM := $(call CommonBottom,$(DYNALINKAPI_FIRST_COPYRIGHT_YEAR))
DYNALINKAPI_GROUPNAME := Packages
DYNALINKAPI_REGEXP := jdk.dynalink.*
# DYNALINKAPI_PKGS is located in NON_CORE_PKGS.gmk

DYNALINKAPI_INDEX_HTML = $(DYNALINKAPI_DOCDIR)/index.html
DYNALINKAPI_OPTIONS_FILE = $(DOCSTMPDIR)/dynalinkapi.options
DYNALINKAPI_PACKAGES_FILE = $(DOCSTMPDIR)/dynalinkapi.packages

# The modules required to be documented
DYNALINKAPI_MODULES = jdk.dynalink

dynalinkapidocs: $(DYNALINKAPI_INDEX_HTML)

# Set relative location to core api document root
$(DYNALINKAPI_INDEX_HTML): GET2DOCSDIR=$(DYNALINKAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(DYNALINKAPI_INDEX_HTML): $(DYNALINKAPI_OPTIONS_FILE) $(DYNALINKAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(DYNALINKAPI_OPTIONS_FILE),$(DYNALINKAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(DYNALINKAPI_OPTIONS_FILE) @$(DYNALINKAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(DYNALINKAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(DYNALINKAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionPair,-doctitle,$(DYNALINKAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(DYNALINKAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(DYNALINKAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(DYNALINKAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(DYNALINKAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(DYNALINKAPI_PACKAGES_FILE): $(call PackageDependencies,$(DYNALINKAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(DYNALINKAPI_PKGS))

#############################################################
#
# sctpdocs
#

ALL_OTHER_TARGETS += sctpdocs

SCTPAPI_DOCDIR := $(JRE_API_DOCSDIR)/nio/sctp/spec
SCTPAPI2COREAPI := ../../../$(JDKJRE2COREAPI)
SCTPAPI_DOCTITLE := SCTP API
SCTPAPI_WINDOWTITLE := SCTP API
SCTPAPI_HEADER := <strong>SCTP API</strong>
SCTPAPI_BOTTOM := $(call CommonBottom,$(SCTPAPI_FIRST_COPYRIGHT_YEAR))
# SCTPAPI_PKGS is located in NON_CORE_PKGS.gmk

SCTPAPI_INDEX_HTML = $(SCTPAPI_DOCDIR)/index.html
SCTPAPI_OPTIONS_FILE = $(DOCSTMPDIR)/sctp.options
SCTPAPI_PACKAGES_FILE = $(DOCSTMPDIR)/sctp.packages

# The modules required to be documented
SCTPAPI_MODULES = jdk.sctp

sctpdocs: $(SCTPAPI_INDEX_HTML)

# Set relative location to core api document root
$(SCTPAPI_INDEX_HTML): GET2DOCSDIR=$(SCTPAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(SCTPAPI_INDEX_HTML): $(SCTPAPI_OPTIONS_FILE) $(SCTPAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(SCTPAPI_OPTIONS_FILE),$(SCTPAPI_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(SCTPAPI_OPTIONS_FILE) @$(SCTPAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(SCTPAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(SCTPAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(SCTPAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(SCTPAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(SCTPAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(SCTPAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(SCTPAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(SCTPAPI_PACKAGES_FILE): $(call PackageDependencies,$(SCTPAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(SCTPAPI_PKGS))

#############################################################
#
# jaccessdocs - Java Accessibility Utilities
#

ALL_OTHER_TARGETS += jaccessdocs

JACCESSAPI_DOCDIR := $(JRE_API_DOCSDIR)/accessibility/jaccess/spec
JACCESSAPI2COREAPI := ../../../$(JDKJRE2COREAPI)
JACCESSAPI_DOCTITLE := JACCESS API
JACCESSAPI_WINDOWTITLE := JACCESS API
JACCESSAPI_HEADER := <strong>JACCESS API</strong>
JACCESSAPI_BOTTOM := $(call CommonBottom,$(JACCESSAPI_FIRST_COPYRIGHT_YEAR))
# JACCESSAPI_PKGS is located in NON_CORE_PKGS.gmk

JACCESSAPI_INDEX_HTML = $(JACCESSAPI_DOCDIR)/index.html
JACCESSAPI_OPTIONS_FILE = $(DOCSTMPDIR)/jaccess.options
JACCESSAPI_PACKAGES_FILE = $(DOCSTMPDIR)/jaccess.packages

# The modules required to be documented
JACCESSAPI_MODULES = jdk.accessibility

jaccessdocs: $(JACCESSAPI_INDEX_HTML)

# Set relative location to core api document root
$(JACCESSAPI_INDEX_HTML): GET2DOCSDIR=$(JACCESSAPI2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JACCESSAPI_INDEX_HTML): $(JACCESSAPI_OPTIONS_FILE) $(JACCESSAPI_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JACCESSAPI_OPTIONS_FILE),$(JACCESSAPI_PACKAGES_FILE))
	$(JAVADOC_CMD) -d $(@D) \
	    @$(JACCESSAPI_OPTIONS_FILE) @$(JACCESSAPI_PACKAGES_FILE)

# Create file with javadoc options in it
$(JACCESSAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
	  $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JACCESSAPI_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(JACCESSAPI_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JACCESSAPI_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JACCESSAPI_HEADER)$(DRAFT_HEADER)) ; \
	  $(call OptionPair,-bottom,$(JACCESSAPI_BOTTOM)$(DRAFT_BOTTOM)) ; \
	  $(call OptionTrip,-linkoffline,$(JACCESSAPI2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JACCESSAPI_PACKAGES_FILE): $(call PackageDependencies,$(JACCESSAPI_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JACCESSAPI_PKGS))

#############################################################
#
# jdk.net docs
#

ALL_OTHER_TARGETS += jdknetdocs

JDKNET_DOCDIR := $(JRE_API_DOCSDIR)/net/socketoptions/spec
JDKNET2COREAPI := ../../../$(JDKJRE2COREAPI)
JDKNET_DOCTITLE := jdk.net API
JDKNET_WINDOWTITLE := jdk.net API
JDKNET_HEADER := <strong>jdk.net API</strong>
JDKNET_BOTTOM := $(call CommonBottom,$(JDKNET_FIRST_COPYRIGHT_YEAR))
JDKNET_PKGS := jdk.net

JDKNET_INDEX_HTML = $(JDKNET_DOCDIR)/index.html
JDKNET_OPTIONS_FILE = $(DOCSTMPDIR)/jdknet.options
JDKNET_PACKAGES_FILE = $(DOCSTMPDIR)/jdknet.packages

# The modules required to be documented
JDKNET_MODULES = jdk.net

jdknetdocs: $(JDKNET_INDEX_HTML)

# Set relative location to core api document root
$(JDKNET_INDEX_HTML): GET2DOCSDIR=$(JDKNET2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JDKNET_INDEX_HTML): $(JDKNET_OPTIONS_FILE) $(JDKNET_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JDKNET_OPTIONS_FILE),$(JDKNET_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JDKNET_OPTIONS_FILE) @$(JDKNET_PACKAGES_FILE)

# Create file with javadoc options in it
$(JDKNET_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JDKNET_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(JDKNET_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JDKNET_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JDKNET_HEADER)$(DRAFT_HEADER)); \
	  $(call OptionPair,-bottom,$(JDKNET_BOTTOM)$(DRAFT_BOTTOM)); \
	  $(call OptionTrip,-linkoffline,$(JDKNET2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JDKNET_PACKAGES_FILE): $(call PackageDependencies,$(JDKNET_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JDKNET_PKGS))

#############################################################
#
# jlink plugin API docs
#
# TODO: Need to decide when the plugin API is ready to publish as experimental API.
# This target is temporarily added for internal use for now.
#

ALL_OTHER_TARGETS += jlinkdocs

JLINK_PLUGIN_FIRST_COPYRIGHT_YEAR = 2015
JLINK_PLUGIN_DOCDIR := $(JDK_API_DOCSDIR)/jlink
JLINK_PLUGIN2COREAPI := ../$(JDKJRE2COREAPI)
JLINK_PLUGIN_DOCTITLE := JLink Plugin API - EXPERIMENTAL
JLINK_PLUGIN_WINDOWTITLE := JLink Plugin API - EXPERIMENTAL
JLINK_PLUGIN_HEADER := <strong>JLink Plugin API - EXPERIMENTAL</strong>
JLINK_PLUGIN_BOTTOM := $(call CommonBottom,$(JLINK_PLUGIN_FIRST_COPYRIGHT_YEAR))
JLINK_PLUGIN_PKGS = jdk.tools.jlink.plugin

JLINK_PLUGIN_INDEX_HTML = $(JLINK_PLUGIN_DOCDIR)/index.html
JLINK_PLUGIN_OPTIONS_FILE = $(DOCSTMPDIR)/jlinkplugins.options
JLINK_PLUGIN_PACKAGES_FILE = $(DOCSTMPDIR)/jlinkplugins.packages

# The modules required to be documented
JLINK_PLUGIN_MODULES = jdk.jlink

jlinkdocs: $(JLINK_PLUGIN_INDEX_HTML)

# Set relative location to core api document root
$(JLINK_PLUGIN_INDEX_HTML): GET2DOCSDIR=$(JLINK_PLUGIN2COREAPI)/..

# Run javadoc if the index file is out of date or missing
$(JLINK_PLUGIN_INDEX_HTML): $(JLINK_PLUGIN_OPTIONS_FILE) $(JLINK_PLUGIN_PACKAGES_FILE) $(COREAPI_INDEX_FILE)
	$(prep-javadoc)
	$(call JavadocSummary,$(JLINK_PLUGIN_OPTIONS_FILE),$(JLINK_PLUGIN_PACKAGES_FILE))
	$(JAVADOC_CMD_SMALL) -d $(@D) \
	    @$(JLINK_PLUGIN_OPTIONS_FILE) @$(JLINK_PLUGIN_PACKAGES_FILE)

# Create file with javadoc options in it
$(JLINK_PLUGIN_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:none) ; \
          $(call OptionPair,--system,none) ; \
	  $(call OptionPair,--module-source-path,$(RELEASEDOCS_MODULESOURCEPATH)) ; \
	  $(call OptionPair,--add-modules,$(JLINK_PLUGIN_MODULES)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(call OptionOnly,-nodeprecatedlist) ; \
	  $(call OptionPair,-doctitle,$(JLINK_PLUGIN_DOCTITLE)) ; \
	  $(call OptionPair,-windowtitle,$(JLINK_PLUGIN_WINDOWTITLE) $(DRAFT_WINTITLE)); \
	  $(call OptionPair,-header,$(JLINK_PLUGIN_HEADER)$(DRAFT_HEADER)); \
	  $(call OptionPair,-bottom,$(JLINK_PLUGIN_BOTTOM)$(DRAFT_BOTTOM)); \
	  $(call OptionTrip,-linkoffline,$(JLINK_PLUGIN2COREAPI),$(COREAPI_DOCSDIR)/); \
	) >> $@

# Create a file with the package names in it
$(JLINK_PLUGIN_PACKAGES_FILE): $(call PackageDependencies,$(JLINK_PLUGIN_PKGS))
	$(prep-target)
	$(call PackageFilter,$(JLINK_PLUGIN_PKGS))


otherdocs: $(ALL_OTHER_TARGETS)

#
# Add the core docs as prerequisite to the archive to trigger a rebuild
# if the core docs were rebuilt. Ideally any doc rebuild should trigger
# this, but the way prerequisites are currently setup in this file, that
# is hard to achieve.
#

$(JAVADOC_ARCHIVE): $(COREAPI_INDEX_FILE)
	$(call LogInfo, Compressing javadoc to single $(JAVADOC_ARCHIVE_NAME))
	$(MKDIR) -p $(JAVADOC_ARCHIVE_DIR)
	$(RM) -r $(JAVADOC_ARCHIVE_ASSEMBLY_DIR)
	$(MKDIR) -p $(JAVADOC_ARCHIVE_ASSEMBLY_DIR)
	all_roots=`$(FIND) $(DOCSDIR) | $(GREP) index.html | grep -v old/doclet`; \
	pushd $(JAVADOC_ARCHIVE_ASSEMBLY_DIR); \
	for index_file in $${all_roots} ; do \
	  target_dir=`dirname $${index_file}`; \
	  name=`$(ECHO) $${target_dir} | $(SED) "s;/spec;;" | $(SED) "s;.*/;;"`; \
	  $(LN) -s $${target_dir}  $${name}; \
	done; \
	$(ZIP) -q -r $(JAVADOC_ARCHIVE) * ; \
	popd ;

#############################################################
.PHONY: all docs coredocs otherdocs \
     $(ALL_OTHER_TARGETS) zip-docs

################################################################################

$(eval $(call IncludeCustomExtension, , Javadoc-post.gmk))