Blame tools/build/src/tools/docutils.jam

Packit 58578d
# Copyright David Abrahams 2004. Distributed under the Boost
Packit 58578d
# Software License, Version 1.0. (See accompanying
Packit 58578d
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Packit 58578d
Packit 58578d
# Support for docutils ReStructuredText processing.
Packit 58578d
Packit 58578d
import type ;
Packit 58578d
import scanner ;
Packit 58578d
import generators ;
Packit 58578d
import os ;
Packit 58578d
import common ;
Packit 58578d
import toolset ;
Packit 58578d
import path ;
Packit 58578d
import feature : feature ;
Packit 58578d
import property ;
Packit 58578d
import errors ;
Packit 58578d
Packit 58578d
.initialized = ;
Packit 58578d
Packit 58578d
type.register ReST : rst ;
Packit 58578d
Packit 58578d
class rst-scanner : common-scanner
Packit 58578d
{
Packit 58578d
    rule __init__ ( paths * )
Packit 58578d
    {
Packit 58578d
        common-scanner.__init__ . $(paths) ;
Packit 58578d
    }
Packit 58578d
    
Packit 58578d
    rule pattern ( )
Packit 58578d
    {
Packit 58578d
         return "^[ 	]*\\.\\.[ 	]+include::[ 	]+([^
Packit 58578d
]+)"
Packit 58578d
        "^[ 	]*\\.\\.[ 	]+image::[ 	]+([^
Packit 58578d
]+)"
Packit 58578d
        "^[ 	]*\\.\\.[ 	]+figure::[ 	]+([^
Packit 58578d
]+)"
Packit 58578d
        ;
Packit 58578d
    }
Packit 58578d
}
Packit 58578d
Packit 58578d
scanner.register rst-scanner : include ;
Packit 58578d
type.set-scanner ReST : rst-scanner ;
Packit 58578d
Packit 58578d
generators.register-standard docutils.html : ReST : HTML ;
Packit 58578d
Packit 58578d
rule init ( docutils-dir ? : tools-dir ? )
Packit 58578d
{
Packit 58578d
    docutils-dir ?= [ modules.peek : DOCUTILS_DIR ] ;
Packit 58578d
    tools-dir ?= $(docutils-dir)/tools ;
Packit 58578d
Packit 58578d
    if ! $(.initialized)
Packit 58578d
    {
Packit 58578d
        .initialized = true ;
Packit 58578d
        if $(docutils-dir)
Packit 58578d
        {
Packit 58578d
            .docutils-dir = $(docutils-dir) ;
Packit 58578d
            .tools-dir = $(tools-dir:R="") ;
Packit 58578d
           
Packit 58578d
            .setup = [ 
Packit 58578d
                common.prepend-path-variable-command PYTHONPATH 
Packit 58578d
                    : $(.docutils-dir) $(.docutils-dir)/extras ] ;
Packit 58578d
            RST2XXX = [ common.find-tool rst2html ] ;
Packit 58578d
        }
Packit 58578d
        else
Packit 58578d
        {
Packit 58578d
            RST2XXX_PY = [ common.find-tool rst2html.py ] ;
Packit 58578d
        }
Packit 58578d
    }
Packit 58578d
}
Packit 58578d
Packit 58578d
rule html ( target : source : properties *  )
Packit 58578d
{
Packit 58578d
    if ! [ on $(target) return $(RST2XXX) ]
Packit 58578d
    {
Packit 58578d
        local python-cmd = [ property.select <python.interpreter> : $(properties) ] ;
Packit 58578d
        if ! $(.tools-dir) && ! $(RST2XXX_PY) {
Packit 58578d
            errors.user-error
Packit 58578d
            "The docutils module is used, but not configured. "
Packit 58578d
            : ""
Packit 58578d
            : "Please modify your user-config.jam or project-config.jam to contain:"
Packit 58578d
            : ""
Packit 58578d
            : "    using docutils : <docutils-dir> ;"
Packit 58578d
            : ""
Packit 58578d
            : "On Ubuntu, 'docutils-common' package will create /usr/share/docutils."
Packit 58578d
            : "Other flavours of Linux likely have docutils as package as well."
Packit 58578d
            : "On Windows, you can install from http://docutils.sourceforge.net/."
Packit 58578d
            ;
Packit 58578d
        }
Packit 58578d
        
Packit 58578d
        if $(RST2XXX_PY)
Packit 58578d
        {
Packit 58578d
            if $(RST2XXX_PY:D)
Packit 58578d
            {
Packit 58578d
                # If we have a path to the rst2html.py script, we need to use
Packit 58578d
                # the python interpreter to load it up.
Packit 58578d
                RST2XXX on $(target) = $(python-cmd:G=:E="python") $(RST2XXX_PY) ;
Packit 58578d
            }
Packit 58578d
            else
Packit 58578d
            {
Packit 58578d
                # Otherwise, bare rst2html.py, we can just exec that directly.
Packit 58578d
                # This work for both Nix, and the standard Windows Python installs.
Packit 58578d
                RST2XXX on $(target) = $(RST2XXX_PY) ;
Packit 58578d
            }
Packit 58578d
        }
Packit 58578d
        else
Packit 58578d
        {
Packit 58578d
            RST2XXX on $(target) = $(python-cmd:G=:E="python") $(.tools-dir)/rst2html.py ;
Packit 58578d
        }
Packit 58578d
    }
Packit 58578d
}
Packit 58578d
Packit 58578d
Packit 58578d
feature docutils : : free ;
Packit 58578d
feature docutils-html : : free ;
Packit 58578d
feature docutils-cmd : : free ;
Packit 58578d
toolset.flags docutils COMMON-FLAGS : <docutils> ;
Packit 58578d
toolset.flags docutils HTML-FLAGS : <docutils-html> ;
Packit 58578d
toolset.flags docutils RST2XXX : <docutils-cmd> ;
Packit 58578d
  
Packit 58578d
actions html
Packit 58578d
{
Packit 58578d
    $(.setup)
Packit 58578d
    "$(RST2XXX)" $(COMMON-FLAGS) $(HTML-FLAGS) $(>) $(<)
Packit 58578d
}
Packit 58578d