# Copyright David Abrahams 2006. 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)
import docutils ;

import path ;
sources = [ path.glob . : *.rst ] ;
bases = $(sources:S=) ;
  
# This is a path relative to the html/ subdirectory where the
# generated output will eventually be moved.
stylesheet = "--stylesheet=rst.css" ;

for local b in $(bases)
{
    html $(b) : $(b).rst : 
      
      # 
      <docutils-html>"-gdt --link-stylesheet --traceback --trim-footnote-reference-space --footnote-references=superscript "$(stylesheet)
  ;
}

alias htmls : $(bases) ;
stage html : $(bases) ;
