# Regression test status reporting tools build Jamfile

# Copyright Rene Rivera

# Distributed under the Boost Software License, Version 1.0.
# See http://www.boost.org/LICENSE_1_0.txt
 

if [ glob ../../../boost-build.jam ]
{
    use-project /boost : ../../.. ;
}
else
{
    import modules ;
    use-project /boost : [ MATCH --boost=(.*) : [ modules.peek : ARGV ] ] ;
}

if ! [ glob ../src/process_jam_log.cpp ]
{
    project boost/regression
        :
        source-location ..
        ;
}
else
{
    project boost/regression
        :
        source-location ../src
        ;
}

obj tiny_xml
    :
    detail/tiny_xml.cpp
    :
    <define>BOOST_ALL_NO_LIB=1
    <define>_CRT_SECURE_NO_WARNINGS
    <use>/boost//headers
    :
    release
    ;
explicit tiny_xml ;

exe process_jam_log
    :
    process_jam_log.cpp
    tiny_xml
    /boost/filesystem//boost_filesystem/<link>static
    :
    <define>BOOST_ALL_NO_LIB=1
    <define>_CRT_SECURE_NO_WARNINGS
    <use>/boost//headers
    :
    release
    ;
#~ explicit process_jam_log ;

exe compiler_status
    :
    compiler_status.cpp
    tiny_xml
    /boost/filesystem//boost_filesystem/<link>static
    :
    <define>BOOST_ALL_NO_LIB=1
    <use>/boost//headers
    :
    release
    ;
explicit compiler_status ;

exe library_status
    :
    library_status.cpp
    tiny_xml
    /boost/filesystem//boost_filesystem/<link>static
    :
    <define>BOOST_ALL_NO_LIB=1
    <use>/boost//headers
    :
    release
    ;
explicit library_status ;
