# Boost Intrusive Library Test Jamfile
#  (C) Copyright Ion Gaztanaga 2006.
# Use, modification and distribution are subject to 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)

# Adapted from John Maddock's TR1 Jamfile.v2
# Copyright John Maddock 2005.
# Use, modification and distribution are subject to 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)

# this rule enumerates through all the sources and invokes
# the run rule for each source, the result is a list of all
# the run rules, which we can pass on to the test_suite rule:

rule test_all
{
   local all_rules = ;

   for local fileb in [ glob *.cpp ]
   {
      all_rules += [ run $(fileb) /boost/thread//boost_thread
      :  # additional args
      :  # test-files
      :  # requirements
        <toolset>acc:<linkflags>-lrt
        <toolset>acc-pa_risc:<linkflags>-lrt
        <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32" 
        <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
      ] ;
   }

   return $(all_rules) ;
}

test-suite intrusive_test : [ test_all r ] : <threading>multi ;