make/Javadoc.gmk
Print this page
@@ -219,10 +219,15 @@
COREAPI_DOCSDIR = $(DOCSDIR)/api
JDK_API_DOCSDIR = $(DOCSDIR)/jdk/api
JRE_API_DOCSDIR = $(DOCSDIR)/jre/api
PLATFORM_DOCSDIR = $(DOCSDIR)/platform
+JAVADOC_ARCHIVE_NAME := jdk-$(FULL_VERSION)-docs.zip
+JAVADOC_ARCHIVE_ASSEMBLY_DIR := $(DOCSTMPDIR)/docs-zip
+JAVADOC_ARCHIVE_DIR := $(OUTPUT_ROOT)/bundles
+JAVADOC_ARCHIVE := $(JAVADOC_ARCHIVE_DIR)/$(JAVADOC_ARCHIVE_NAME)
+
# 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
@@ -327,10 +332,41 @@
#
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. Incremental
+# building of docs is currently broken so if you invoke docs-zip after
+# docs, the docs are always rebuilt.
+#
+
+docs-zip: $(JAVADOC_ARCHIVE)
+
+#
+# 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)
+ @$(ECHO) $(LOG_INFO) "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 ;
+
#################################################################
# 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
@@ -1370,6 +1406,6 @@
# * 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)
+ sanitycheckcoredocs $(ALL_OTHER_TARGETS) docs-zip