Blame doc/Jamfile.v2

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