| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- # Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
- # Copyright (c) 2016-2018 Rene Rivera
- #
- # 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)
- project boost/doc
- : requirements
- <xsl:param>boost.libraries=../../libs/libraries.htm
- <format>html:<xsl:param>chunker.output.doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
- <format>html:<xsl:param>chunker.output.doctype-system="http://www.w3.org/TR/html4/loose.dtd"
- ;
- import boostbook : boostbook ;
- import project ;
- import targets ;
- import print ;
- import type ;
- import generators ;
- import sequence ;
- import path ;
- import "class" : is-a ;
- import regex ;
- path-constant BOOST_DOC : . ;
- local lib-docs = [ path.glob [ path.glob $(BOOST_DOC)/../libs $(BOOST_DOC)/../tools : */doc ]
- : [ modules.peek project : JAMFILE ] ] ;
- local rule find-target-of-class-or-type ( root-target : klass ? : type ? )
- {
- local result ;
- if ! $(result) && $(klass) && [ is-a $(root-target) : $(klass) ]
- {
- result ?= $(root-target) $(klass) ;
- }
- if ! $(result) && $(type) && $(type:U) = [ modules.peek $(root-target) : self.type ]
- {
- result ?= $(root-target) $(type:U) ;
- }
- local alternatives = [ modules.peek $(root-target) : self.alternatives ] ;
- if ! $(result)
- {
- for local alternative in $(alternatives)
- {
- if $(result) { break ; }
- result ?= [ find-target-of-class-or-type $(alternative) : $(klass) : $(type) ] ;
- }
- }
- if ! $(result)
- {
- for local alternative in $(alternatives)
- {
- if $(result) { break ; }
- local sources = [ modules.peek $(alternative) : self.sources ] ;
- for local source in [ $(alternative).sources ]
- {
- if $(result) { break ; }
- result ?= [ find-target-of-class-or-type $(source) : $(klass) : $(type) ] ;
- }
- }
- }
- return $(result) ;
- }
- local rule docbook-target-spec ( main-target )
- {
- local spec ;
- local doc-sub-target
- = [ find-target-of-class-or-type $(main-target) : boostbook-target-class : XML ] ;
- if $(doc-sub-target)
- {
- #ECHO *** $(main-target) ;
- #ECHO " ::" [ $(main-target).full-name ] ;
- #ECHO " ::" $(doc-sub-target) :: [ $(doc-sub-target[0]).full-name ] ;
- local full-name = [ $(doc-sub-target[0]).full-name ] ;
- local target-path = $(full-name:D) ;
- local target-name = $(full-name:B) ;
- local this-path = [ path.root [ project.attribute $(__name__) location ] [ path.pwd ] ] ;
- target-path = [ path.relative-to $(this-path) $(target-path) ] ;
- #ECHO " ::" $(target-path) :: $(target-name) ;
- spec = $(target-path)//$(target-name) ;
- }
- return $(spec) ;
- }
- local exclude-libs = [ MATCH "^--exclude-libraries=(.*)" : [ modules.peek : ARGV ] ] ;
- exclude-libs = [ regex.split-list $(exclude-libs) : "," ] ;
- #ECHO "=== --exclude-libraries:" $(exclude-libs) ;
- local lib-doc-boostdoc-refs ;
- local lib-doc-boostrelease-refs ;
- local this-path = [ path.root [ project.attribute $(__name__) location ] [ path.pwd ] ] ;
- for local lib-doc in $(lib-docs)
- {
- #ECHO === $(lib-doc) ... ;
- local doc-project = $(lib-doc:D) ;
- local lib-dir = $(doc-project:D) ;
- local lib-name = $(lib-dir:BS) ;
- #ECHO "=== lib-name:" $(lib-name) ... ;
- if $(lib-name) in $(exclude-libs)
- {
- ECHO "-- Excluded library" '$(lib-name)' ;
- }
- else
- {
- local doc-module = [ project.find $(doc-project)
- : [ project.attribute $(__name__) location ] ] ;
- local doc-target = [ project.target $(doc-module) ] ;
- $(doc-target).build-main-targets ;
- local boostrelease-target = [ $(doc-target).main-target boostrelease ] ;
- if $(boostrelease-target)
- {
- local full-name = [ $(boostrelease-target).full-name ] ;
- local target-path = [ path.relative-to $(this-path) $(full-name:D) ] ;
- lib-doc-boostrelease-refs += $(target-path)//boostrelease ;
- #ECHO " ::" $(target-path)//boostrelease ;
- }
- local boostdoc-target = [ $(doc-target).main-target boostdoc ] ;
- if $(boostdoc-target)
- {
- local full-name = [ $(boostdoc-target).full-name ] ;
- local target-path = [ path.relative-to $(this-path) $(full-name:D) ] ;
- lib-doc-boostdoc-refs += $(target-path)//boostdoc ;
- #ECHO " ::" $(target-path)//boostdoc ;
- }
- }
- }
- # Build non-integrated library docs for release.
- if "--release-build" in [ modules.peek : ARGV ]
- {
- alias release-build : $(lib-doc-boostrelease-refs) ;
- }
- local rule component-order ( x y )
- {
- local a = [ MATCH "(/libs/[^/]+)" "(/tools/[^/]+)" : $(x:G) $(x:G=) ] ;
- local b = [ MATCH "(/libs/[^/]+)" "(/tools/[^/]+)" : $(y:G) $(y:G=) ] ;
- if $(a[1]) < $(b[1])
- {
- return true ;
- }
- else if $(a[1]) = $(b[1]) && $(x) < $(y)
- {
- return true ;
- }
- }
- rule xinclude-generator ( target : sources * : properties * )
- {
- print.output $(target) ;
- local includes ;
- sources = [ sequence.insertion-sort $(sources) : component-order ] ;
- locate = [ path.root [ on $(target) return $(LOCATE) ] [ path.pwd ] ] ;
- for local xml in $(sources)
- {
- local dir ;
- dir ?= [ on $(xml) return $(LOCATE) ] ;
- dir ?= [ on $(xml) return $(SEARCH) ] ;
- dir ?= "" ;
- dir = [ path.root $(dir[1]) [ path.pwd ] ] ;
- dir = [ path.relative-to $(locate) $(dir) ] ;
- includes += "<xi:include href=\"$(dir[1])/$(xml:G=)\"/>" ;
- }
- print.text
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- "<xml xmlns:xi=\"http://www.w3.org/2003/XInclude\">"
- $(includes)
- "</xml>"
- : overwrite ;
- }
- type.register XINCLUDE_XML : xinclude : XML ;
- generators.register-composing $(__name__).xinclude-generator : XML : XINCLUDE_XML ;
- rule xinclude ( name : sources * : requirements * : default-build * : usage-requirements * )
- {
- targets.create-typed-target XINCLUDE_XML
- : [ project.current ]
- : $(name)
- : $(sources)
- : $(requirements)
- : $(default-build)
- : $(usage-requirements)
- ;
- }
- xinclude libraries :
- $(lib-doc-boostdoc-refs)
- ;
- explicit libraries ;
- xinclude tools :
- ../tools/quickbook/doc//quickbook
- ../tools/boostbook/doc//boostbook
- ;
- explicit tools ;
- boostbook doc
- :
- src/boost.xml
- :
- <xsl:param>generate.consistent.ids=1
- <use>$(lib-doc-boostdoc-refs)
- <dependency>libraries
- <implicit-dependency>libraries
- <dependency>tools
- <implicit-dependency>tools
- <dependency>images
- <dependency>callouts
- <xsl:path>$(BOOST_DOC)
- ;
- install images : [ glob src/images/*.png ] : <location>html/images ;
- explicit images ;
- install callouts : [ glob src/images/callouts/*.png ] : <location>html/images/callouts ;
- explicit callouts ;
|