8179022: Add serialization spec as markdown
Reviewed-by: erikj, mchung, rriggs
diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh
index 0baf46f..15a76ea 100644
--- a/common/autoconf/generated-configure.sh
+++ b/common/autoconf/generated-configure.sh
@@ -1973,7 +1973,8 @@
--enable-debug set the debug level to fastdebug (shorthand for
--with-debug-level=fastdebug) [disabled]
--enable-headless-only only build headless (no GUI) support [disabled]
- --enable-full-docs build complete documentation [disabled]
+ --enable-full-docs build complete documentation [enabled if all tools
+ found]
--disable-unlimited-crypto
Disable unlimited crypto policy [enabled]
--disable-keep-packaged-modules
@@ -5179,7 +5180,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1492700323
+DATE_WHEN_GENERATED=1492975963
###############################################################################
#
@@ -24729,6 +24730,17 @@
FULL_DOCS_DEP_MISSING=true
fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pandoc" >&5
+$as_echo_n "checking for pandoc... " >&6; }
+ if test "x$PANDOC" != "x"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, cannot generate full docs" >&5
+$as_echo "no, cannot generate full docs" >&6; }
+ FULL_DOCS_DEP_MISSING=true
+ fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking full docs" >&5
$as_echo_n "checking full docs... " >&6; }
if test "x$enable_full_docs" = xyes; then
@@ -24778,9 +24790,16 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, forced" >&5
$as_echo "no, forced" >&6; }
elif test "x$enable_full_docs" = x; then
- ENABLE_FULL_DOCS=false
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, default" >&5
-$as_echo "no, default" >&6; }
+ # Check for prerequisites
+ if test "x$FULL_DOCS_DEP_MISSING" = xtrue; then
+ ENABLE_FULL_DOCS=false
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, missing dependencies" >&5
+$as_echo "no, missing dependencies" >&6; }
+ else
+ ENABLE_FULL_DOCS=true
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, dependencies present" >&5
+$as_echo "yes, dependencies present" >&6; }
+ fi
else
as_fn_error $? "--enable-full-docs can only take yes or no" "$LINENO" 5
fi
diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4
index d4ee8cf..73e2d74 100644
--- a/common/autoconf/jdk-options.m4
+++ b/common/autoconf/jdk-options.m4
@@ -156,7 +156,7 @@
# Should we build the complete docs, or just a lightweight version?
AC_ARG_ENABLE([full-docs], [AS_HELP_STRING([--enable-full-docs],
- [build complete documentation @<:@disabled@:>@])])
+ [build complete documentation @<:@enabled if all tools found@:>@])])
# Verify dependencies
AC_MSG_CHECKING([for graphviz dot])
@@ -167,6 +167,14 @@
FULL_DOCS_DEP_MISSING=true
fi
+ AC_MSG_CHECKING([for pandoc])
+ if test "x$PANDOC" != "x"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, cannot generate full docs])
+ FULL_DOCS_DEP_MISSING=true
+ fi
+
AC_MSG_CHECKING([full docs])
if test "x$enable_full_docs" = xyes; then
if test "x$FULL_DOCS_DEP_MISSING" = "xtrue"; then
@@ -181,8 +189,14 @@
ENABLE_FULL_DOCS=false
AC_MSG_RESULT([no, forced])
elif test "x$enable_full_docs" = x; then
- ENABLE_FULL_DOCS=false
- AC_MSG_RESULT([no, default])
+ # Check for prerequisites
+ if test "x$FULL_DOCS_DEP_MISSING" = xtrue; then
+ ENABLE_FULL_DOCS=false
+ AC_MSG_RESULT([no, missing dependencies])
+ else
+ ENABLE_FULL_DOCS=true
+ AC_MSG_RESULT([yes, dependencies present])
+ fi
else
AC_MSG_ERROR([--enable-full-docs can only take yes or no])
fi
diff --git a/common/conf/jib-profiles.js b/common/conf/jib-profiles.js
index aba2f64..8ac3df4 100644
--- a/common/conf/jib-profiles.js
+++ b/common/conf/jib-profiles.js
@@ -422,7 +422,7 @@
"linux-x64": {
target_os: "linux",
target_cpu: "x64",
- dependencies: ["devkit", "graphviz"],
+ dependencies: ["devkit", "graphviz", "pandoc"],
configure_args: concat(common.configure_args_64bit,
"--enable-full-docs", "--with-zlib=system"),
default_make_targets: ["docs-bundles"],
@@ -974,6 +974,14 @@
module: "graphviz-" + input.target_platform,
configure_args: "DOT=" + input.get("graphviz", "install_path") + "/dot"
},
+
+ pandoc: {
+ organization: common.organization,
+ ext: "tar.gz",
+ revision: "1.17.2+1.0",
+ module: "pandoc-" + input.target_platform,
+ configure_args: "PANDOC=" + input.get("pandoc", "install_path") + "/pandoc/pandoc"
+ },
};
return dependencies;
diff --git a/make/Javadoc.gmk b/make/Javadoc.gmk
index 7408798..b64abd7 100644
--- a/make/Javadoc.gmk
+++ b/make/Javadoc.gmk
@@ -363,6 +363,38 @@
) \
)
+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)
+
+ $(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)) \
+ ) \
+ )
+
+endif
+
# Special treatment for generated documentation
JDWP_PROTOCOL := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/jdwp-protocol.html
diff --git a/make/devkit/createGraphvizBundle.sh b/make/devkit/createGraphvizBundle.sh
index 35b55b4..85eaade 100644
--- a/make/devkit/createGraphvizBundle.sh
+++ b/make/devkit/createGraphvizBundle.sh
@@ -1,4 +1,28 @@
#!/bin/bash -e
+#
+# 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.
+#
# Create a bundle in the current directory, containing what's needed to run
# the 'dot' program from the graphviz suite by the OpenJDK build.
diff --git a/make/devkit/createPandocBundle.sh b/make/devkit/createPandocBundle.sh
new file mode 100644
index 0000000..0badfa8
--- /dev/null
+++ b/make/devkit/createPandocBundle.sh
@@ -0,0 +1,73 @@
+#!/bin/bash -e
+#
+# 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.
+#
+# Create a bundle in the current directory, containing what's needed to run
+# the 'pandoc' program by the OpenJDK build.
+
+TMPDIR=`mktemp -d -t pandocbundle-XXXX`
+trap "rm -rf \"$TMPDIR\"" EXIT
+
+ORIG_DIR=`pwd`
+cd "$TMPDIR"
+PANDOC_VERSION=1.17.2
+FULL_PANDOC_VERSION=1.17.2-1
+PACKAGE_VERSION=1.0
+TARGET_PLATFORM=linux_x64
+BUNDLE_NAME=pandoc-$TARGET_PLATFORM-$PANDOC_VERSION+$PACKAGE_VERSION.tar.gz
+
+wget https://github.com/jgm/pandoc/releases/download/$PANDOC_VERSION/pandoc-$FULL_PANDOC_VERSION-amd64.deb
+
+mkdir pandoc
+cd pandoc
+ar p ../pandoc-$FULL_PANDOC_VERSION-amd64.deb data.tar.gz | tar xz
+cd ..
+
+# Pandoc depends on libgmp.so.10, which in turn depends on libc. No readily
+# available precompiled binaries exists which match the requirement of
+# support for older linuxes (glibc 2.12), so we'll compile it ourselves.
+
+LIBGMP_VERSION=6.1.2
+
+wget https://gmplib.org/download/gmp/gmp-$LIBGMP_VERSION.tar.xz
+mkdir gmp
+cd gmp
+tar xf ../gmp-$LIBGMP_VERSION.tar.xz
+cd gmp-$LIBGMP_VERSION
+./configure --prefix=$TMPDIR/pandoc/usr
+make
+make install
+cd ../..
+
+cat > pandoc/pandoc << EOF
+#!/bin/bash
+# Get an absolute path to this script
+this_script_dir=\`dirname \$0\`
+this_script_dir=\`cd \$this_script_dir > /dev/null && pwd\`
+export LD_LIBRARY_PATH="\$this_script_dir/usr/lib:\$LD_LIBRARY_PATH"
+exec \$this_script_dir/usr/bin/pandoc "\$@"
+EOF
+chmod +x pandoc/pandoc
+tar -cvzf ../$BUNDLE_NAME pandoc
+cp ../$BUNDLE_NAME "$ORIG_DIR"