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