# Jamfile.v2
#
# Copyright (c) 2009
# Steven Watanabe
#
# 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)

using quickbook ;
using doxygen ;
import boostbook ;
import regex ;
import os ;
import path ;

doxygen_files =
    additive_combine
    bernoulli_distribution
    binomial_distribution
    cauchy_distribution
    discard_block
    exponential_distribution
    gamma_distribution
    geometric_distribution
    inversive_congruential
    lagged_fibonacci
    linear_congruential
    linear_feedback_shift
    lognormal_distribution
    mersenne_twister
    normal_distribution
    poisson_distribution
    random_number_generator
    ranlux
    shuffle_output
    subtract_with_carry
    triangle_distribution
    uniform_01
    uniform_int
    uniform_on_sphere
    uniform_real
    uniform_smallint
    variate_generator
    xor_combine
;

path-constant here : . ;
path-constant boost-root : ../../.. ;

# Figure out where the root of the boost tree is relative
# to the html directory.
local BOOST_ROOT = [ path.relative-to
                       [ path.join [ path.pwd ] html ]
                       [ path.root
                           [ path.make $(boost-root) ]
                           [ path.pwd ] ] ] ;

doxygen reference :
    $(here)/../../../boost/random/$(doxygen_files).hpp
    $(here)/../../../boost/nondet_random.hpp
    $(here)/../../../boost/random.hpp
  :
    <doxygen:param>EXPAND_ONLY_PREDEF=YES
    <doxygen:param>"ALIASES= \\
        xmlnote=\"@xmlonly <note><para> @endxmlonly\" \\
        endxmlnote=\"@xmlonly </para></note> @endxmlonly\" \\
        blockquote=\"@xmlonly <blockquote><para> @endxmlonly\" \\
        endblockquote=\"@xmlonly </para></blockquote> @endxmlonly\" \\
        boost=\"$(BOOST_ROOT)\" \\
        random_distribution=\"@xmlonly <link linkend=\\\"boost_random.reference.concepts.random_distribution\\\">random distribution</link> @endxmlonly\" \\
        pseudo_random_number_generator=\"@xmlonly <link linkend=\\\"boost_random.reference.concepts.pseudo_random_number_generator\\\">pseudo-random number generator</link> @endxmlonly\" \\
        uniform_random_number_generator=\"@xmlonly <link linkend=\\\"boost_random.reference.concepts.uniform_random_number_generator\\\">uniform random number generator</link> @endxmlonly\" \\
        nondeterministic_random_number_generator=\"@xmlonly <link linkend=\\\"boost_random.reference.concepts.non_deterministic_uniform_random_number_generator\\\">non-deterministic random number generator</link> @endxmlonly\" \\
        number_generator=\"@xmlonly <link linkend=\\\"boost_random.reference.concepts.number_generator\\\">number generator</link> @endxmlonly\" \\
        generators=\"@xmlonly <link linkend=\\\"boost_random.reference.generators\\\">generators</link> @endxmlonly\" \\
        distributions=\"@xmlonly <link linkend=\\\"boost_random.reference.distributions\\\">distributions</link> @endxmlonly\" \\
        additive_combine=\"@xmlonly <classname alt=\\\"boost::random::additive_combine\\\">additive_combine</classname> @endxmlonly\" \\
        discard_block=\"@xmlonly <classname alt=\\\"boost::random::discard_block\\\">discard_block</classname> @endxmlonly\" \\
        lagged_fibonacci=\"@xmlonly<classname alt=\\\"boost::random::lagged_fibonacci\\\">lagged_fibonacci</classname>@endxmlonly\" \\
        linear_congruential=\"@xmlonly<classname alt=\\\"boost::random::linear_congruential\\\">linear_congruential</classname>@endxmlonly\" \\
        minstd_rand=\"@xmlonly <classname alt=\\\"boost::minstd_rand\\\">minstd_rand</classname> @endxmlonly\" \\
        minstd_rand0=\"@xmlonly <classname alt=\\\"boost::minstd_rand0\\\">minstd_rand0</classname> @endxmlonly\" \\
        rand48=\"@xmlonly <classname alt=\\\"boost::rand48\\\">rand48</classname> @endxmlonly\" \\
        mt11213b=\"@xmlonly <classname alt=\\\"boost::mt11213b\\\">mt11213b</classname> @endxmlonly\" \\
        mt19937=\"@xmlonly <classname alt=\\\"boost::mt19937\\\">mt19937</classname> @endxmlonly\" \\
        ecuyer1988=\"@xmlonly <classname alt=\\\"boost::ecuyer1988\\\">ecuyer1988</classname> @endxmlonly\" \\
        lagged_fibonacci607=\"@xmlonly <classname alt=\\\"boost::lagged_fibonacci607\\\">lagged_fibonacci607</classname> @endxmlonly\" \\
        lagged_fibonacci44497=\"@xmlonly <classname alt=\\\"boost::lagged_fibonacci44497\\\">lagged_fibonacci44497</classname> @endxmlonly\" \\
        bernoulli_distribution=\"@xmlonly <classname alt=\\\"boost::bernoulli_distribution\\\">bernoulli_distribution</classname> @endxmlonly\" \\
        cauchy_distribution=\"@xmlonly <classname alt=\\\"boost::cauchy_distribution\\\">cauchy_distribution</classname> @endxmlonly\" \\
        uniform_01=\"@xmlonly<classname alt=\\\"boost::uniform_01\\\">uniform_01</classname>@endxmlonly\" \\
        random_device=\"@xmlonly<classname alt=\\\"boost::random_device\\\">random_device</classname>@endxmlonly\""
    <doxygen:param>HIDE_UNDOC_MEMBERS=NO
    <doxygen:param>QUIET=YES
    <doxygen:param>WARN_IF_UNDOCUMENTED=NO
    <doxygen:param>EXTRACT_PRIVATE=NO
    <doxygen:param>ENABLE_PREPROCESSING=YES
    <doxygen:param>MACRO_EXPANSION=YES
    <doxygen:param>SEARCH_INCLUDES=NO
    <doxygen:param>"PREDEFINED= \\
        \"BOOST_RANDOM_DOXYGEN=1\" \\
        \"BOOST_PREVENT_MACRO_SUBSTITUTION=\" \\
        \"BOOST_STATIC_ASSERT(x)=\" \\
        \"BOOST_STATIC_CONSTANT(type,value)=static const type value\" \\
        \"BOOST_RANDOM_DETAIL_ARITHMETIC_CONSTRUCTOR(Self,T,t)=explicit Self(T t)\" \\
        \"BOOST_RANDOM_DETAIL_GENERATOR_CONSTRUCTOR(Self,T,t)=template<class T> explicit Self(T& t)\" \\
        \"BOOST_RANDOM_DETAIL_ARITHMETIC_SEED(Self,T,t)=void seed(T t)\" \\
        \"BOOST_RANDOM_DETAIL_GENERATOR_SEED(Self,T,t)=template<class T> void seed(T& t)\""
    <reftitle>"Headers"
    <doxygen:xml-imagedir>images/random
;

xml random : random.qbk : <dependency>reference ;

boostbook standalone :
    random
  :
    <implicit-dependency>reference
    <xsl:param>boost.root=../../../..
    <xsl:param>chunk.section.depth=2
;
