2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-11 11:42:14 +00:00

boostbook.jam:

- Hey, derived types are cool. Use 'em for BoostBook

doxygen.jam:
	- Completely rewritten to be slightly less hackish than before (but
	  still quite hackish).
	- Added <doxygen:param> free feature to allow customization of Doxygen
          configuration file.


[SVN r20138]
This commit is contained in:
Douglas Gregor
2003-09-22 00:14:09 +00:00
parent 43cba1506f
commit 4cc55aedbc
2 changed files with 87 additions and 75 deletions

View File

@@ -29,12 +29,13 @@ feature.feature format : html onehtml man pdf ps docbook fo tests
type.register DTDXML : dtdxml ;
type.register XML : xml : : main ;
type.register DOCBOOK : docbook ;
type.register BOOSTBOOK : boostbook : XML ;
type.register DOCBOOK : docbook : XML ;
type.register HTML : html ;
type.register FO : fo ;
type.register FO : fo : XML ;
type.register PDF : pdf ;
type.register PS : ps ;
type.register XSLT : xsl ;
type.register XSLT : xsl : XML ;
type.register HTMLDIR ;
type.register MANPAGES ;
type.register TESTS : tests ;
@@ -79,20 +80,18 @@ rule init ( docbook-xsl-dir ? : docbook-dtd-dir ? )
.docbook-dtd-dir = [ path.make $(docbook-dtd-dir) ] ;
}
local search-dirs ;
if [ modules.peek : BOOST_ROOT ] {
local boost-root = [ path.make [ modules.peek : BOOST_ROOT ] ] ;
search-dirs = [ path.join $(boost-root) tools boostbook ] ;
}
local boost-root = [ path.make [ modules.peek : BOOST_ROOT ] ] ;
local boost-build-root = [
sequence.transform path.make : [ modules.peek : BOOST_BUILD_PATH ]
] ;
search-dirs += $(boost-build-root)/../boostbook ;
] ;
local search-dirs = [ path.join $(boost-root) tools boostbook ]
$(boost-build-root)/../boostbook ;
local native-search-dirs = [
sequence.transform path.native : $(search-dirs)
] ;
local boostbook-xsl-dir = [ GLOB $(native-search-dirs) : xsl ] ;
local boostbook-dtd-dir = [ GLOB $(native-search-dirs) : dtd ] ;
.boostbook-xsl-dir = [ path.make $(boostbook-xsl-dir[1]) ] ;
.boostbook-dtd-dir = [ path.make $(boostbook-dtd-dir[1]) ] ;
if ! $(.boostbook-xsl-dir) || ! $(.boostbook-dtd-dir)

View File

@@ -5,9 +5,7 @@
# to its suitability for any purpose.
# This module defines rules to handle generation of BoostBook XML
# from Doxygen XML output. At the moment, this requires a special
# version of Doxygen that can output a single XML file instead of a
# set of XML files.
# from Doxygen XML output.
import "class" : new ;
import targets ;
@@ -17,12 +15,19 @@ import generators ;
import boostbook ;
import type ;
import path ;
import print ;
import regex ;
feature.feature recursive : off on ;
feature.feature pattern : : free ;
type.register DOXYGEN_XML : doxygen ; # Doxygen XML output
feature.feature doxygen:param : : free ;
generators.register-standard doxygen.xml-to-boostbook : DOXYGEN_XML : XML ;
type.register DOXYFILE : doxyfile ; # Doxygen input file
type.register DOXYGEN_XML_MULTIFILE : : XML ; # Doxygen XML multi-file output
type.register DOXYGEN_XML : doxygen : XML ; # Doxygen XML output
generators.register-standard doxygen.headers-to-doxyfile : H HPP : DOXYFILE ;
generators.register-standard doxygen.run : DOXYFILE : DOXYGEN_XML_MULTIFILE ;
generators.register-standard doxygen.collect : DOXYGEN_XML_MULTIFILE : DOXYGEN_XML ;
generators.register-standard doxygen.xml-to-boostbook : DOXYGEN_XML : BOOSTBOOK ;
# Initialize the Doxygen module. Parameters are:
# name: the name of the 'doxygen' executable. If not specified, the name
@@ -45,84 +50,92 @@ rule name ( )
return $(.doxygen) ;
}
rule extract-xml ( target : sources * : properties * )
# Runs Doxygen on the given Doxygen configuration file (the source) to
# generate Doxygen XML (in multiple files). The output is dumped
# according to the settings in the Doxygen configuration file, not
# according to the target! Because of this, we essentially "touch" the
# target file, in effect making it look like we've really written
# something useful to it. Anyone that uses this action must deal with
# this behavior.
actions doxygen-action
{
local recursive = [ feature.get-values <recursive> : $(properties) ] ;
"$(NAME:E=doxygen)" $(>) ;
echo "Stamped" > "$(<)"
}
if $(recursive) = "on"
# Generates a doxygen configuration file (doxyfile) given a set of C++
# sources anda property list that may contain <doxygen:param>
# features.
rule headers-to-doxyfile ( target : sources * : properties * )
{
local text "# Generated by Boost.Build version 2" ;
# Translate <doxygen:param> into command line flags.
for local param in [ feature.get-values <doxygen:param> : $(properties) ]
{
RECURSIVE on $(target) = YES ;
}
else
{
RECURSIVE on $(target) = NO ;
local namevalue = [ regex.split $(param) "=" ] ;
text += "$(namevalue[1])=$(namevalue[2])" ;
}
local index-target = $(target:B="xml/index":S=".xml") ;
PATTERNS on $(index-target) =
[ feature.get-values <pattern> : $(properties) ] ;
NAME on $(index-target) = [ name ] ;
doxygen-action $(index-target) : $(>) ;
text += "GENERATE_HTML = NO" ;
text += "GENERATE_LATEX = NO" ;
text += "GENERATE_XML = YES" ;
text += "INPUT = $(sources:G=) " ;
print.output $(target) plain ;
print.text $(text) : true ;
}
local xsl-dir = [ boostbook.xsl-dir ] ;
local pwd = [ path.pwd ] ;
local collect-path = $(pwd)/$(index-target:G=:P) ;
DEPENDS $(target) : $(index-target) ;
xslt $(target) : $(index-target) "$(xsl-dir)/doxygen/collect.xsl"
# Run Doxygen. See doxygen-action for a description of the strange
# properties of this rule
rule run ( target : source : properties * )
{
doxygen-action $(target) : $(source) ;
}
# Collect the set of Doxygen XML files into a single XML source file
# that can be handled by an XSLT processor. The source is completely
# ignored (see doxygen-action), because this action picks up the
# Doxygen XML index file xml/index.xml. This is because we can't teach
# Doxygen to act like a NORMAL program and take a "-o output.xml"
# argument (grrrr). The target of the collection will be a single
# Doxygen XML file.
rule collect ( target : source : properties * )
{
local collect-xsl-dir = [ path.native
[ path.join [ boostbook.xsl-dir ] doxygen collect ]
] ;
local collect-path = [ path.join [ path.pwd ] xml ] ;
local real-source = [ path.native xml/index.xml ] ;
NOTFILE $(real-source) ;
xslt $(target) : $(real-source) $(collect-xsl-dir:S=.xsl)
: <xsl:param>doxygen.xml.path=$(collect-path)
;
}
actions doxygen-action
{
"$(NAME:E=doxygen)" -g doxyfile
echo "GENERATE_HTML = NO" >> doxyfile
echo "GENERATE_LATEX = NO" >> doxyfile
echo "GENERATE_XML = YES" >> doxyfile
echo "INPUT = $(>) " >> doxyfile
echo "RECURSIVE = $(RECURSIVE) " >> doxyfile
echo "FILE_PATTERNS = $(PATTERNS) " >> doxyfile
"$(NAME:E=doxygen)" doxyfile ;
}
# Translate Doxygen XML into BoostBook
rule xml-to-boostbook ( target : source : properties * )
{
local xsl-dir = [ boostbook.xsl-dir ] ;
local d2b-xsl = [ path.native
[ path.join [ boostbook.xsl-dir ] doxygen
doxygen2boostbook.xsl ] ] ;
xslt $(target) : $(source) "$(xsl-dir)/doxygen/doxygen2boostbook.xsl"
: $(properties)
;
}
class doxygen-xml-target-class : basic-target
{
rule __init__ ( name : project : sources * : requirements *
: default-build * )
{
basic-target.__init__ $(name) : $(project) : $(sources) : $(requirements)
: $(default-build) ;
}
rule construct ( source-targets * : property-set )
{
local target =
[ new file-target $(self.name) : DOXYGEN_XML : $(self.project) ] ;
local a = [ new action $(target) : $(source-targets) : doxygen.extract-xml
: $(property-set) ] ;
$(target).action $(a) ;
return [ virtual-target.register $(target) ] ;
}
xslt $(target) : $(source) $(d2b-xsl) : $(properties) ;
}
# User-level rule to generate BoostBook XML from a set of headers via Doxygen.
rule doxygen ( target-name : sources * : requirements * : default-build * )
{
local project = [ CALLER_MODULE ] ;
targets.main-target-alternative
[ new doxygen-xml-target-class $(target-name) : $(project) : $(sources)
: [ targets.main-target-requirements $(requirements) : $(project) ]
local doxyfile = [
new typed-target $(target-name) : $(project) : BOOSTBOOK
: [ targets.main-target-sources $(sources) : $(target-name) ]
: [ targets.main-target-requirements $(requirements) : $(project) ]
: [ targets.main-target-default-build $(default-build) : $(project) ]
] ;
targets.main-target-alternative $(doxyfile) ;
}
IMPORT $(__name__) : doxygen : : doxygen ;