diff --git a/common/doc/testing.md b/common/doc/testing.md index 46f32f911e3..f84bd27dda2 100644 --- a/common/doc/testing.md +++ b/common/doc/testing.md @@ -199,9 +199,8 @@ Additional options to the Gtest test framework. Use `GTEST="OPTIONS=--help"` to see all available Gtest options. --- -# Override some definitions in http://openjdk.java.net/page.css that are -# unsuitable for this document. +# Override some definitions in the global css file that are not optimal for +# this document. header-includes: - '' - - '' --- diff --git a/make/Javadoc.gmk b/make/Javadoc.gmk index 6c47d064b06..0c36b7c4208 100644 --- a/make/Javadoc.gmk +++ b/make/Javadoc.gmk @@ -27,6 +27,7 @@ default: all include $(SPEC) include MakeBase.gmk include Modules.gmk +include ProcessMarkdown.gmk include ZipArchive.gmk include $(JDK_TOPDIR)/make/Tools.gmk include $(JDK_TOPDIR)/make/ModuleTools.gmk @@ -356,7 +357,7 @@ $(eval $(call SetupApiDocsGeneration, JAVASE_API, \ # unmodified ALL_MODULES := $(call FindAllModules) -COPY_SPEC_FILTER := %.html %.gif %.jpg %.mib +COPY_SPEC_FILTER := %.html %.gif %.jpg %.mib %.css $(foreach m, $(ALL_MODULES), \ $(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \ @@ -370,36 +371,35 @@ $(foreach m, $(ALL_MODULES), \ ) \ ) +# Copy the global resources +GLOBAL_SPECS_RESOURCES_DIR := $(JDK_TOPDIR)/make/data/docs-resources/specs +$(eval $(call SetupCopyFiles, COPY_GLOBAL_RESOURCES, \ + SRC := $(GLOBAL_SPECS_RESOURCES_DIR), \ + FILES := $(call CacheFind, $(GLOBAL_SPECS_RESOURCES_DIR)), \ + DEST := $(JAVADOC_OUTPUTDIR)/specs/, \ +)) +JDK_SPECS_TARGETS += $(COPY_GLOBAL_RESOURCES) + ifeq ($(ENABLE_FULL_DOCS), true) # For all markdown files in $module/share/specs directories, convert them to # html. - MARKDOWN_SPEC_FILTER := %.md - # Macro for SetupCopyFiles that converts from markdown to html using pandoc. - define markdown-to-html - $(call MakeDir, $(@D)) - $(RM) $@ - $(PANDOC) -t html -s -o $@ $< - endef - - rename-md-to-html = \ - $(patsubst %.md,%.html,$1) + GLOBAL_SPECS_DEFAULT_CSS_FILE := $(JAVADOC_OUTPUTDIR)/specs/resources/jdk-default.css $(foreach m, $(ALL_MODULES), \ $(eval SPECS_$m := $(call FindModuleSpecsDirs, $m)) \ - $(if $(SPECS_$m), \ - $(eval $(call SetupCopyFiles, CONVERT_MARKDOWN_$m, \ - SRC := $(SPECS_$m), \ - FILES := $(filter $(MARKDOWN_SPEC_FILTER), $(call CacheFind, $(SPECS_$m))), \ - DEST := $(JAVADOC_OUTPUTDIR)/specs/, \ - MACRO := markdown-to-html, \ - NAME_MACRO := rename-md-to-html, \ - LOG_ACTION := Converting from markdown, \ - )) \ - $(eval JDK_SPECS_TARGETS += $(CONVERT_MARKDOWN_$m)) \ + $(foreach d, $(SPECS_$m), \ + $(if $(filter %.md, $(call CacheFind, $d)), \ + $(eval $(call SetupProcessMarkdown, CONVERT_MARKDOWN_$m_$d, \ + SRC := $d, \ + FILES := $(filter %.md, $(call CacheFind, $d)), \ + DEST := $(JAVADOC_OUTPUTDIR)/specs/, \ + CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \ + )) \ + ) \ + $(eval JDK_SPECS_TARGETS += $(CONVERT_MARKDOWN_$m_$d)) \ ) \ ) - endif # Special treatment for generated documentation diff --git a/make/UpdateBuildDocs.gmk b/make/UpdateBuildDocs.gmk index 42f5ee03594..e1008c42e93 100644 --- a/make/UpdateBuildDocs.gmk +++ b/make/UpdateBuildDocs.gmk @@ -27,6 +27,7 @@ default: all include $(SPEC) include MakeBase.gmk +include ProcessMarkdown.gmk ################################################################################ # This makefile updates the generated build html documentation. @@ -38,62 +39,26 @@ ifeq ($(PANDOC), ) $(error Cannot continue) endif -################################################################################ -# Setup make rules for converting a markdown file to html. -# -# Parameter 1 is the name of the rule. This name is used as variable prefix, -# and the targets generated are listed in a variable by that name. -# -# Remaining parameters are named arguments. These include: -# SOURCE_FILE The markdown source file -# TARGET_DIR The directory where to store the generated html file -# OPTIONS Additional options to pandoc -# -SetupMarkdownToHtml = $(NamedParamsMacroTemplate) -define SetupMarkdownToHtmlBody - ifeq ($$($1_SOURCE_FILE), ) - $$(error SOURCE_FILE is missing in SetupMarkdownToHtml $1) - endif - - ifeq ($$($1_TARGET_DIR), ) - $$(error TARGET_DIR is missing in SetupMarkdownToHtml $1) - endif - - $1_BASENAME := $$(notdir $$(basename $$($1_SOURCE_FILE))) - $1_OUTPUT_FILE := $$($1_TARGET_DIR)/$$($1_BASENAME).html - -$$($1_OUTPUT_FILE): $$($1_SOURCE_FILE) - $$(call LogInfo, Converting $$(notdir $1) to html) - $$(call MakeDir, $$($1_TARGET_DIR) $$(MAKESUPPORT_OUTPUTDIR)/markdown) - $$(call ExecuteWithLog, $$(MAKESUPPORT_OUTPUTDIR)/markdown/$1, \ - $$(PANDOC) $$($1_OPTIONS) -f markdown -t html --standalone \ - --css 'http://openjdk.java.net/page.css' '$$<' -o '$$@') - TOO_LONG_LINES=`$$(GREP) -E -e '^.{80}.+$$$$' $$<` || true ; \ - if [ "x$$$$TOO_LONG_LINES" != x ]; then \ - $$(ECHO) "Warning: Unsuitable markdown in $$<:" ; \ - $$(ECHO) "The following lines are longer than 80 characters:" ; \ - $$(GREP) -E -n -e '^.{80}.+$$$$' $$< || true ; \ - fi - - $1 := $$($1_OUTPUT_FILE) - - TARGETS += $$($1) -endef +GLOBAL_SPECS_DEFAULT_CSS_FILE := $(JDK_TOPDIR)/make/data/docs-resources/specs/resources/jdk-default.css ################################################################################ DOCS_DIR := $(TOPDIR)/common/doc -$(eval $(call SetupMarkdownToHtml, building, \ - SOURCE_FILE := $(DOCS_DIR)/building.md, \ - TARGET_DIR := $(DOCS_DIR), \ +$(eval $(call SetupProcessMarkdown, building, \ + FILES := $(DOCS_DIR)/building.md, \ + DEST := $(DOCS_DIR), \ + CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \ )) +TARGETS += $(building) -$(eval $(call SetupMarkdownToHtml, testing, \ - SOURCE_FILE := $(DOCS_DIR)/testing.md, \ - TARGET_DIR := $(DOCS_DIR), \ +$(eval $(call SetupProcessMarkdown, testing, \ + FILES := $(DOCS_DIR)/testing.md, \ + DEST := $(DOCS_DIR), \ + CSS := $(GLOBAL_SPECS_DEFAULT_CSS_FILE), \ OPTIONS := --toc, \ )) +TARGETS += $(testing) ################################################################################ diff --git a/make/common/ProcessMarkdown.gmk b/make/common/ProcessMarkdown.gmk new file mode 100644 index 00000000000..eec4d0cf060 --- /dev/null +++ b/make/common/ProcessMarkdown.gmk @@ -0,0 +1,103 @@ +# Copyright (c) 2017, 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. +# + +ifeq (,$(_MAKEBASE_GMK)) + $(error You must include MakeBase.gmk prior to including ProcessMarkdown.gmk) +endif + +# Helper function for SetupProcessMarkdown +# $1: The $1 from SetupProcessMarkdown +# $2: The name of the current source file, relative to $1_SRC +define ProcessMarkdown + $1_$2_OUTPUT_FILE := $$($1_DEST)/$$(basename $2).html + $1_$2_TARGET_DIR := $$(dir $$($1_$2_OUTPUT_FILE)) + ifneq ($$($1_CSS), ) + ifneq ($$(findstring http:/, $$($1_CSS)), ) + $1_$2_CSS_OPTION := --css '$$($1_CSS)' + else + $1_$2_CSS := $$(call RelativePath, $$($1_CSS), $$($1_$2_TARGET_DIR)) + $1_$2_CSS_OPTION := --css '$$($1_$2_CSS)' + endif + endif + $1_$2_OPTIONS = $$(shell $$(GREP) _pandoc-options_: $$($1_SRC)/$2 | $$(CUT) -d : -f 2-) + $1_$2_MARKER := $$(subst /,_,$1_$2) + + $1_$2_VARDEPS := $$($1_OPTIONS) $$($1_CSS) + $1_$2_VARDEPS_FILE := $$(call DependOnVariable, $1_$2_VARDEPS, \ + $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER).vardeps) + +$$($1_$2_OUTPUT_FILE): $$($1_SRC)/$2 $$($1_$2_VARDEPS_FILE) + $$(call LogInfo, Converting $2 to html) + $$(call MakeDir, $$($1_$2_TARGET_DIR) $$(SUPPORT_OUTPUTDIR)/markdown) + $$(call ExecuteWithLog, $$(SUPPORT_OUTPUTDIR)/markdown/$$($1_$2_MARKER), \ + $$(PANDOC) $$($1_OPTIONS) -f markdown -t html --standalone \ + $$($1_$2_CSS_OPTION) $$($1_$2_OPTIONS) '$$<' -o '$$@') + ifneq ($$(findstring $$(LOG_LEVEL), debug trace),) + TOO_LONG_LINES=`$$(GREP) -E -e '^.{80}.+$$$$' $$<` || true ; \ + if [ "x$$$$TOO_LONG_LINES" != x ]; then \ + $$(ECHO) "Warning: Unsuitable markdown in $$<:" ; \ + $$(ECHO) "The following lines are longer than 80 characters:" ; \ + $$(GREP) -E -n -e '^.{80}.+$$$$' $$< || true ; \ + fi + endif + + $1 += $$($1_$2_OUTPUT_FILE) +endef + +################################################################################ +# Setup make rules for converting a markdown file to html. +# +# Parameter 1 is the name of the rule. This name is used as variable prefix, +# and the targets generated are listed in a variable by that name. +# +# Remaining parameters are named arguments. These include: +# SRC : Source root dir (defaults to dir of first file) +# DEST : Dest root dir +# FILES : List of files to copy with absolute paths, or path relative to SRC. +# Must be in SRC. +# OPTIONS : Additional options to pandoc +# +SetupProcessMarkdown = $(NamedParamsMacroTemplate) +define SetupProcessMarkdownBody + ifeq ($$($1_FILES), ) + $$(error FILES is missing in SetupProcessMarkdown $1) + endif + + ifeq ($$($1_DEST), ) + $$(error DEST is missing in SetupProcessMarkdown $1) + endif + + # Default SRC to the dir of the first file. + ifeq ($$($1_SRC), ) + $1_SRC := $$(dir $$(firstword $$($1_FILES))) + endif + + # Remove any trailing slash from SRC and DEST + $1_SRC := $$(patsubst %/,%,$$($1_SRC)) + $1_DEST := $$(patsubst %/,%,$$($1_DEST)) + + $$(foreach f, $$(patsubst $$($1_SRC)/%,%,$$($1_FILES)), \ + $$(eval $$(call ProcessMarkdown,$1,$$f)) \ + ) +endef