#
-# Copyright (c) 2013-2016 Vinnie Falco (vinnie dot falco at gmail dot com)
+# Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
+# Official repository: https://github.com/cppalliance/json
+#
+
+project json/doc ;
import os ;
+import path ;
+import boostbook ;
+import quickbook ;
+import xsltproc ;
+import doxygen ;
+import modules ;
+import saxonhe ;
+
+path-constant out : . ;
+
+#-------------------------------------------------------------------------------
+#
+# Build the list of header files that Doxygen will scan. We need
+# this list to inform the build system of the dependencies so the
+# docs can be rebuild if any of the header files change.
+#
-local broot = [ os.environ BOOST_ROOT ] ;
+local sources = [ path.glob-tree ../include/boost/json : *.hpp *.ipp : detail impl ] ;
-project docca/doc ;
+# Get the configured paths to doxygen and xsltproc
-using boostbook ;
-using quickbook ;
-using doxygen ;
+.doxygen = [ doxygen.name ] ;
+.doxygen ?= doxygen ;
-xml docca_bb : main.qbk ;
+.xsltproc = [ xsltproc.name ] ;
+.xsltproc ?= xsltproc ;
-path-constant out : . ;
+#-------------------------------------------------------------------------------
+#
+# Invoke Doxygen to process the header files and produce the XML
+# containing the description of the C++ declarations and extracted
+# Javadoc comments.
+#
+make index.xml
+:
+./source.dox
+:
+@make_doxygen_xml
+:
+<dependency>$(sources)
+;
+
+rule make_doxygen_xml ( targets * : sources * : properties * )
+{
+ EXAMPLE_DIR on $(targets) =
+ [ path.native [ path.root
+ [ on $(sources[1]) return $(SEARCH) ] [ path.pwd ] ] ] ;
+}
+
+if [ os.name ] = NT
+{
+ actions make_doxygen_xml
+ {
+ SET EXAMPLE_DIR=$(EXAMPLE_DIR)
+ SET XML_OUTPUT=$(1:D)
+ "$(.doxygen)" $(2)
+ }
+}
+else
+{
+ actions make_doxygen_xml
+ {
+ export EXAMPLE_DIR=$(EXAMPLE_DIR)
+ export XML_OUTPUT=$(1:D)
+ "$(.doxygen)" $(2)
+ }
+}
+
+#-------------------------------------------------------------------------------
+#
+# Copy all the XSLT modules to the target directory.
+#
+# FIXME: Change this so we can just specify a directory,
+# rather than every file individually.
+#
+# Also, somehow force dependencies in a general way
+# such that the XSLT has to be executed again
+# if any of the modules change. For example,
+# if base-extract-xml-pages.xml changes, then
+# an invocation of extract-xml-pages.xsl (which
+# imports the former) must be run again.
+#
+path-constant docca : ../../../tools/docca ;
+make extract-xml-pages.xsl : $(docca)/include/docca/extract-xml-pages.xsl : @copy_script ;
+make base-extract-xml-pages.xsl : $(docca)/include/docca/base-extract-xml-pages.xsl : @copy_script ;
+make common.xsl : $(docca)/include/docca/common.xsl : @copy_script ;
+make stage1.xsl : $(docca)/include/docca/stage1.xsl : @copy_script ;
+make base-stage1.xsl : $(docca)/include/docca/base-stage1.xsl : @copy_script ;
+make stage2.xsl : $(docca)/include/docca/stage2.xsl : @copy_script ;
+make assemble-quickbook.xsl : $(docca)/include/docca/assemble-quickbook.xsl : @copy_script ;
+make emphasized-types.xsl : $(docca)/include/docca/emphasized-types.xsl : @copy_script ;
+
+make config.xsl
+ :
+ $(docca)/include/docca/config.xsl
+ xsl/config.xsl
+ xsl/class_detail.xsl
+ xsl/includes.xsl
+ :
+ @make_config
+ ;
+
+actions make_config
+{
+ cp $(2[1]) $(1)
+ sed -i -e "/<!-- CONFIG_TEMPLATE -->/{r $(2[2])" -e "d}" $(1)
+ sed -i -e "/<!-- INCLUDES_FOOT_TEMPLATE -->/{r $(2[4])" -e "d}" $(1)
+}
+
+# Make a copy of the given file.
+#
+actions copy_script
+{
+ cp $(2[1]) $(1)
+}
+
+
+# This is to initially create the directory as a side effect; I'm sure there's a better way...
+make xml-pages/directory/placeholder : index.xml : @null_action ;
+
+#-------------------------------------------------------------------------------
+#
+# Run index.xml through the first transformation stage
+# (assembling and splitting the XML into page-specific files).
+#
+make xml-pages.xml
+ :
+ index.xml
+ extract-xml-pages.xsl
+
+ # Make bjam aware of additional dependencies
+ base-extract-xml-pages.xsl
+ config.xsl
+ common.xsl
+ :
+ saxonhe.saxonhe
+ ;
+
+# This is just to make the directory eligible as a source
+make xml-pages : index.xml : @null_action ;
+
+# Not ready for prime time until I figure out how to get the xslt-visualizer code in place
+#make stage1/code-trace-enabled/stage1.xsl
+# :
+# stage1.xsl
+# xslt-visualizer/xsl/trace-enable.xsl
+# :
+# saxonhe.saxonhe
+# ;
+
+# This is to initially create the directory as a side effect; I'm sure there's a better way...
+make stage1/results/directory/placeholder : xml-pages.xml : @null_action ;
+make stage2/results/directory/placeholder : xml-pages.xml : @null_action ;
+
+# TODO: figure out why this (and the following stage) get built every time
+make stage1/results
+ :
+ xml-pages
+ stage1.xsl
+
+ # additional dependencies
+ xml-pages.xml
+ base-stage1.xsl
+ config.xsl
+ common.xsl
+ :
+ saxonhe.saxonhe_dir
+ ;
+
+make stage2/results
+ :
+ stage1/results
+ stage2.xsl
-install stylesheets
+ # additional dependencies
+ emphasized-types.xsl
:
- $(broot)/doc/src/boostbook.css
+ saxonhe.saxonhe_dir
+ ;
+
+make reference.qbk
+ :
+ xml-pages.xml
+ assemble-quickbook.xsl
+
+ # TODO: make this input to the XSLT somehow
+ # rather than relying on it being hard-coded
+ # in the XSLT (which it is!)
+ stage2/results
:
- <location>$(out)/html
+ saxonhe.saxonhe
;
-explicit stylesheets ;
+actions make_dir
+{
+ mkdir $(1)
+}
+
+make combine.xslt : index.xml : @null_action ;
+
+actions touch_file
+{
+ touch $(1) ;
+}
+
+actions null_action
+{
+ touch -c $(1) ;
+}
+
+make reference.xml
+ :
+ combine.xslt
+ index.xml
+ :
+ @call-xsltproc
+ ;
+
+actions call-xsltproc
+{
+ "$(.xsltproc)" $(2) > $(1)
+}
+
+#-------------------------------------------------------------------------------
+#
+# Produce the reference.qbk file by running
+# the reference xml through the transform.
+#
+#make reference.qbk
+# :
+# reference.xml
+# transform.xsl
+# :
+# saxonhe.saxonhe
+# ;
+
+# We have to make a copy of reference.qbk and put it
+# in a place where the static .qbk files can find it
+#
+install qbk : reference.qbk ;
+
+#-------------------------------------------------------------------------------
+#
+# Produce the Boost.Book XML from the QuickBook
+#
install images
:
- [ glob $(broot)/doc/src/images/*.png ]
+ [ glob images/*.png ]
:
- <location>$(out)/html/images
+ <location>html/json/images
;
explicit images ;
-install callouts
+xml json_doc
:
- [ glob $(broot)/doc/src/images/callouts/*.png ]
+ main.qbk
:
- <location>$(out)/html/images/callouts
+ <dependency>images
+ <dependency>qbk
;
-explicit callout ;
+explicit json_doc ;
+
+#-------------------------------------------------------------------------------
+#
+# HTML documentation for $(BOOST_ROOT)/doc/html
+#
+#-------------------------------------------------------------------------------
-boostbook doc
+boostbook json
:
- docca_bb
+ json_doc
:
- <xsl:param>chapter.autolabel=0
- <xsl:param>boost.root=$(broot)
- <xsl:param>chapter.autolabel=0
- <xsl:param>chunk.first.sections=1 # Chunk the first top-level section?
+ <xsl:param>boost.root=../../../..
+ <xsl:param>chapter.autolabel=1
<xsl:param>chunk.section.depth=8 # Depth to which sections should be chunked
- <xsl:param>generate.section.toc.level=1 # Control depth of TOC generation in sections
- <xsl:param>toc.max.depth=2 # How many levels should be created for each TOC?
+ <xsl:param>chunk.first.sections=1 # Chunk the first top-level section?
<xsl:param>toc.section.depth=2 # How deep should recursive sections appear in the TOC?
+ <xsl:param>toc.max.depth=8 # How many levels should be created for each TOC?
+ <xsl:param>generate.section.toc.level=8 # Control depth of TOC generation in sections
+ <xsl:param>generate.toc="chapter toc,title section nop reference nop"
+ <include>../../../tools/boostbook/dtd
:
- <location>temp
- <dependency>stylesheets
<dependency>images
;
+
+#-------------------------------------------------------------------------------
+#
+# These are used to inform the build system of the
+# means to build the integrated and stand-alone docs.
+#
+
+alias boostdoc ;
+explicit boostdoc ;
+
+alias boostrelease : json ;
+explicit boostrelease ;
\ No newline at end of file