summaryrefslogtreecommitdiffstats
path: root/src/boost/tools/docca/docca.jam
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/tools/docca/docca.jam')
-rw-r--r--src/boost/tools/docca/docca.jam231
1 files changed, 231 insertions, 0 deletions
diff --git a/src/boost/tools/docca/docca.jam b/src/boost/tools/docca/docca.jam
new file mode 100644
index 000000000..94028d880
--- /dev/null
+++ b/src/boost/tools/docca/docca.jam
@@ -0,0 +1,231 @@
+#
+# Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
+# Copyright (c) 2021 Dmitry Arkhipov (grisumbras@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
+#
+
+
+import "class" : new ;
+import doxygen ;
+import param ;
+import path ;
+import project ;
+import property-set ;
+import quickbook ;
+import saxonhe ;
+import sequence ;
+import toolset ;
+import type ;
+
+
+.here = [ path.make [ modules.binding $(__name__) ] ] ;
+.here = $(.here:D) ;
+
+
+rule reference ( target : sources * : requirements * : default-build *
+ : usage-requirements * )
+{
+ param.handle-named-params
+ sources requirements default-build usage-requirements ;
+
+ local overrides = $(sources[1]) ;
+ sources = $(sources[2-]) ;
+
+ local project = [ project.current ] ;
+ local target-dir = $(target:S=) ;
+ target-dir = $(target-dir:B=_$(target-dir:B)-dir) ;
+
+ # Generate doxygen configuration file from sources
+ sources = [ sequence.transform fix-source $(project) : $(sources) ] ;
+ doxyfile $(target-dir)/sources.dox
+ : $(sources)
+ : $(requirements)
+ <doxygen:param>GENERATE_HTML=NO
+ <doxygen:param>GENERATE_XML=YES
+ <doxygen:param>XML_OUTPUT=$(target-dir)
+ : $(default-build)
+ ;
+ $(project).mark-target-as-explicit $(target-dir)/sources.dox ;
+
+ #--------------------------------------------------------------------------
+ #
+ # Invoke Doxygen to process the header files and produce the XML
+ # containing the description of the C++ declarations and extracted
+ # Javadoc comments.
+ doxygen-xml-multifile $(target-dir)/stamp
+ : $(target-dir)/sources.dox
+ : $(requirements)
+ : $(default-build)
+ ;
+ $(project).mark-target-as-explicit $(target-dir)/stamp ;
+
+
+ # Adopt as a target index.xml which was created as a side-effect
+ make-explicit $(target-dir)/index.xml $(project)
+ : $(target-dir)/stamp
+ : @docca.null-action
+ ;
+
+ #--------------------------------------------------------------------------
+ #
+ # Copy the project-specific config XSLT
+ copy-xsl $(overrides) $(project) $(target-dir)/custom-overrides.xsl ;
+
+ # Copy all the XSLT modules to the target directory.
+ # Also, specify their dependencies.
+ local src-dir = $(.here)/include/docca ;
+ copy-xsl $(src-dir)/common.xsl $(project) $(target-dir) ;
+ copy-xsl $(src-dir)/base-config.xsl $(project) $(target-dir) ;
+ copy-xsl $(src-dir)/assemble-quickbook.xsl $(project) $(target-dir) ;
+
+ copy-xsl $(src-dir)/base-extract-xml-pages.xsl $(project) $(target-dir)
+ : common.xsl
+ ;
+
+ copy-xsl $(src-dir)/base-stage1.xsl $(project) $(target-dir)
+ : common.xsl
+ ;
+
+ copy-xsl $(src-dir)/extract-xml-pages.xsl $(project) $(target-dir)
+ : base-extract-xml-pages.xsl
+ base-config.xsl
+ custom-overrides.xsl
+ ;
+
+ copy-xsl $(src-dir)/stage1.xsl $(project) $(target-dir)
+ : base-stage1.xsl
+ base-config.xsl
+ custom-overrides.xsl
+ ;
+
+ copy-xsl $(src-dir)/base-stage2.xsl $(project) $(target-dir)
+ : common.xsl
+ ;
+
+ copy-xsl $(src-dir)/stage2.xsl $(project) $(target-dir)
+ : base-stage2.xsl
+ base-config.xsl
+ custom-overrides.xsl
+ ;
+
+ #-------------------------------------------------------------------------------
+ #
+ # Run index.xml through the first transformation stage
+ # (assembling and splitting the XML into page-specific files).
+ #
+ make-explicit $(target-dir)/xml-pages.xml $(project)
+ : $(target-dir)/index.xml
+ $(target-dir)/extract-xml-pages.xsl
+ : @saxonhe.saxonhe
+ ;
+
+ # Adopt as a target xml-pages directory which was created as a side-effect
+ make-explicit $(target-dir)/xml-pages $(project)
+ : $(target-dir)/xml-pages.xml
+ : @docca.null-action
+ ;
+
+ make-explicit $(target-dir)/stage1/results $(project)
+ : $(target-dir)/xml-pages
+ $(target-dir)/stage1.xsl
+ : @saxonhe.saxonhe_dir
+ : $(requirements)
+ ;
+
+ make-explicit $(target-dir)/stage2/results $(project)
+ : $(target-dir)/stage1/results
+ $(target-dir)/stage2.xsl
+ : @saxonhe.saxonhe_dir
+ : $(requirements)
+ ;
+
+ generate $(target)
+ : $(target-dir)/xml-pages.xml
+ $(target-dir)/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!)
+ $(target-dir)/stage2/results
+ : <generating-rule>@docca.make-qbk
+ $(requirements)
+ : $(default-build)
+ : $(usage-requirements)
+ ;
+}
+
+
+rule make-qbk ( project name : property-set : sources * )
+{
+ local action-name = saxonhe.saxonhe ;
+ local relevant = [ toolset.relevant $(action-name) ] ;
+ local action = [
+ new action $(sources)
+ : $(action-name)
+ : [ $(property-set).relevant $(relevant) ]
+ ] ;
+ local target = [
+ new file-target $(name) exact
+ : [ type.type $(name) ]
+ : $(project)
+ : $(action)
+ ] ;
+ local path = [ path.root $(name) [ $(target).path ] ] ;
+ return [ property-set.create <include>$(path:D) ] $(target) ;
+}
+
+
+local rule copy-xsl ( source project target-or-dir : dependencies * )
+{
+ local target ;
+ local dir ;
+ if .xsl = $(target-or-dir:S)
+ {
+ dir = $(target-or-dir:D) ;
+ target = $(target-or-dir:D=) ;
+ }
+ else
+ {
+ dir = $(target-or-dir) ;
+ target = $(source:D=) ;
+ }
+
+ make-explicit $(target:TD=$(dir)) $(project)
+ : $(source)
+ : @common.copy
+ : <dependency>$(dependencies:TD=$(dir))
+ ;
+}
+
+
+local rule make-explicit ( target project : sources * : make-rule + : reqs *
+ : ureqs * )
+{
+ make $(target) : $(sources) : $(make-rule) : $(reqs) : $(ureqs) ;
+ $(project).mark-target-as-explicit $(target) ;
+}
+
+
+local rule fix-source ( project path )
+{
+ # Unfortunately, rule doxygen.run was written with the assumption that
+ # current project is located in the current directory (which is very likely
+ # to not be the case). We have to convert paths into a form that is both
+ # usable by doxygen and usable by b2 from the current project. This
+ # effectively means absolute paths.
+ #
+ # NOTE: doxygen.run should really do this by itself.
+
+ path = [ path.root $(path) [ $(project).location ] ] ;
+ path = [ path.root $(path) [ path.pwd ] ] ;
+ return $(path) ;
+}
+
+
+rule null-action
+{
+}