make/Javadoc.gmk
author weijun
Wed, 12 Nov 2014 10:47:08 +0800
changeset 27499 10c5f7509a99
parent 27328 17f2bc9cd16a
child 27586 e7cfdc266a70
child 27560 adc258b13e2c
permissions -rw-r--r--
8063087: policytool reports error message with prefix of "java.lang.Exception" Reviewed-by: xuelei

# Copyright (c) 1997, 2014, 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 := $(OUTPUT_ROOT)/docs
TEMPDIR := $(OUTPUT_ROOT)/docstemp

HOTSPOT_DOCS_IMPORT_PATH=$(HOTSPOT_OUTPUTDIR)/docs

BUILD_NUMBER=$(JDK_BUILD_NUMBER)

JAVADOC_CMD = $(JAVA) \
    -Djava.awt.headless=true \
    $(NEW_JAVADOC) \
    -bootclasspath $(JDK_OUTPUTDIR)/classes

# 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
TREEAPI_FIRST_COPYRIGHT_YEAR = 2005
JNLP_FIRST_COPYRIGHT_YEAR = 1998
PLUGIN2_FIRST_COPYRIGHT_YEAR = 2007
JDKNET_FIRST_COPYRIGHT_YEAR = 2014

# 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
# Was: http://java.sun.com/javase/6/webnotes/devdocs-vs-specs.html
DEV_DOCS_URL-7 = http://download.oracle.com/javase/7/docs/index.html
DEV_DOCS_URL-8 = http://download.oracle.com/javase/8/docs/index.html
DEV_DOCS_URL = $(DEV_DOCS_URL-$(JDK_MINOR_VERSION))
DOCS_BASE_URL = http://download.oracle.com/javase/7/docs

# 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 \
      $(JDK_TOPDIR)/src/*/share/classes \
      $(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS_API_DIR)/classes \
      $(LANGTOOLS_TOPDIR)/src/*/share/classes \
      $(CORBA_TOPDIR)/src/*/share/classes \
      $(JAXP_TOPDIR)/src/*/share/classes \
      $(JAXWS_TOPDIR)/src/*/share/classes \
      $(JDK_OUTPUTDIR)/gensrc/j* \
      $(JDK_OUTPUTDIR)/gendocsrc_rmic \
      $(CORBA_OUTPUTDIR)/gensrc/j* \
      $(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)))

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

#
# Temporary directory for javadoc creation
#
DOCSTMPDIR = $(TEMPDIR)/doctmp

#
# 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

# 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 [ "$1" != "" ] ; then \
		$(PRINTF) "%s\n" "$1"; \
	fi
endef

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

define OptionTrip # opt arg arg
	$(PRINTF) "%s '%s' '%s'\n" "$1" '$2' '$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

ifdef OPENJDK
  ADDITIONAL_JAVADOCFLAGS = \
      -Xdocrootparent $(DOCS_BASE_URL)
else
  ADDITIONAL_JAVADOCFLAGS =
endif

define COMMON_JAVADOCFLAGS
    $(call OptionOnly,-XDignore.symbol.file=true) ; \
    $(call OptionOnly,-quiet) ; \
    $(call OptionOnly,-use) ; \
    $(call OptionOnly,-keywords) ; \
    $(call OptionPair,-Xprofilespath,$(JDK_TOPDIR)/make/profile-rtjar-includes.txt) ; \
    $(call OptionOnly,$(ADDITIONAL_JAVADOCFLAGS))
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



# Draft used for non-fcs documents
DRAFT_HEADER =
ifneq ($(MILESTONE), fcs)
  DRAFT_HEADER = <br><strong>DRAFT&nbsp;$(MILESTONE)-$(BUILD_NUMBER)</strong>
  DRAFT_BOTTOM = <br><strong>DRAFT&nbsp;$(MILESTONE)-$(BUILD_NUMBER)</strong>
  DRAFT_WINTITLE = $(BUILD_NUMBER)
  # 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>

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

#################################################################
# Production Targets -- USE THESE TARGETS WHEN:
# a) You're generating docs outside of release engineering's
#    standard control build.
# b) The docs will be pushed to the web and/or included in
#    the downloaded doc bundle.
#
# See: Notes.html#releaseTargets
# Note: Spaces precede ifdef/ifndef indents. Tabs precede target commands (!)
#

sanitycheckcoredocs:
	@$(ECHO) ""
	@$(ECHO) "Building core api docs with these values:"
	@$(ECHO) "    BUILD_NUMBER = $(BUILD_NUMBER)"
	@$(ECHO) "    MILESTONE = $(MILESTONE)"
	@$(ECHO) ""
        ifeq ($(BUILD_NUMBER), b00)
	  @$(ECHO) "ERROR: Build number must be defined"
	  @$(ECHO) "MILESTONE is set to $(MILESTONE)"
	  @$(ECHO) ""
	  exit 1
        endif

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

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

# The index.html, options, and packages files
COREAPI_INDEX_FILE = $(COREAPI_DOCSDIR)/index.html
COREAPI_OPTIONS_FILE = $(DOCSTMPDIR)/coredocs.options
COREAPI_PACKAGES_FILE = $(DOCSTMPDIR)/coredocs.packages

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:none) ; \
	  $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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 := com.sun.javadoc
# 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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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))

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

ALL_OTHER_TARGETS += tagletapidocs
TAGLETAPI_DOCDIR := $(JDK_API_DOCSDIR)/javadoc/taglet
TAGLETAPI2COREAPI := ../../$(JDKJRE2COREAPI)
TAGLETAPI_BOTTOM := $(call CommonTrademarkBottom,$(TAGLETAPI_FIRST_COPYRIGHT_YEAR))
# TAGLETAPI_FILE is located in NON_CORE_PKGS.gmk

# Temporary directory (special generation rules)
TAGLETAPI_TEMPDIR = $(DOCSTMPDIR)/taglets_temp

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

tagletapidocs: $(TAGLETAPI_INDEX_FILE)

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

# 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)
	$(RM) -r $(TAGLETAPI_TEMPDIR)
	$(MKDIR) -p $(TAGLETAPI_TEMPDIR)
	$(call JavadocSummary,$(TAGLETAPI_OPTIONS_FILE),$(TAGLETAPI_PACKAGES_FILE))
	$(JAVADOC_CMD) -d $(TAGLETAPI_TEMPDIR) \
	    @$(TAGLETAPI_OPTIONS_FILE) @$(TAGLETAPI_PACKAGES_FILE)
	cp -r $(TAGLETAPI_TEMPDIR)/com $(TAGLETAPI_DOCDIR)
	cp $(TAGLETAPI_TEMPDIR)/stylesheet.css $(TAGLETAPI_DOCDIR)
	$(RM) -r $(TAGLETAPI_TEMPDIR)

# Create file with javadoc options in it
$(TAGLETAPI_OPTIONS_FILE):
	$(prep-target)
	@($(call COMMON_JAVADOCFLAGS) ; \
          $(call COMMON_JAVADOCTAGS) ; \
	  $(call OptionOnly,-Xdoclint:all) ; \
	  $(call OptionPair,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(call OptionPair,-encoding,ascii) ; \
	  $(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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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 : $(JDK_OUTPUTDIR)/gensrc_jdwp_doc/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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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))

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

ALL_OTHER_TARGETS += mgmtdocs

MGMT_DOCDIR := $(JRE_API_DOCSDIR)/management/extension
MGMT2COREAPI := ../../$(JDKJRE2COREAPI)
JVM_MIB_NAME := JVM-MANAGEMENT-MIB.mib
JVM_MIB_SRC := $(JDK_TOPDIR)/src/closed/jdk.snmp/share/classes/sun/management/snmp/$(JVM_MIB_NAME)
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

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)
	@if [ -f $(JVM_MIB_SRC) ] ; then \
	  $(CP) $(JVM_MIB_SRC) $(@D)/.. ; \
	else \
	  $(ECHO) "WARNING: File $(JVM_MIB_NAME) not available."; \
	fi
	$(call JavadocSummary,$(MGMT_OPTIONS_FILE),$(MGMT_PACKAGES_FILE))
	$(JAVADOC_CMD) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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))

#############################################################
#
# 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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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))

#############################################################
#
# 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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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))

#############################################################
#
# 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

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) -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,-sourcepath,$(RELEASEDOCS_SOURCEPATH)) ; \
	  $(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))

#############################################################
#release version of core packages ########

# The rel-coredocs and rel-docs targets were added by Eric Armstrong. rel-coredocs
# assumes the kind of large, 32-bit machine used in the javapubs group's docs-release
# process. It specifies memory settings accordingly to maximize performance.
#
# The performance settings, like the sanity check, are most important for the core
# docs--the platform APIs. Running javadoc on those APIs takes a significant amount
# of time and memory. Setting the initial heap size as large as possible is important
# to prevent thrashing as the heap grows. Setting the maximum as large as necessary
# is also important to keep the job from failing.
#
#    -J-Xmx512 sets a maximum of 512, which became necessary in 6.0
#    -J-Xms256 sets starting size to 256 (default is 8)
#
# rel-coredocs also includes a sanity check to help ensure that BUILD_NUMBER and
# MILESTONE are specified properly when docs are built outside of the normal release
# engineering process, with the intention of releasing them on the web or in a downloaded
# docs bundle. (When invoked in release engineering's control build, the values are always
# set properly. But when the targets are run by themselves, they default to b00 and
# "internal"--which silently sabotage the result of a build that can take many hours
# to complete.

# Maximize performance and ensure that build number & milestone are set.

rel-coredocs: sanitycheckcoredocs
	$(MAKE) coredocs

rel-docs: rel-coredocs $(ALL_OTHER_TARGETS)
#
# end of production targets

otherdocs: $(ALL_OTHER_TARGETS)

clean:
	$(RM) -r $(DOCSDIR) $(DOCSTMPDIR)

#############################################################
# DEBUG TARGET
# List the values defined in the makefile hierarchy, to make sure everything
# is set properly, and to help identify values we can use instead of making new ones.
# (Most of them come from common/shared/Defs.gmk)
#
# Notes:
# * BUILD_NUMBER defaults to b00 if not set on command line with BUILD_NUMBER=<value>
# * MILESTONE defaults to internal unless set to beta, rc, or fcs on command line
#

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