# Boost Interprocess 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 interprocess_test : [ test_all r ] : <threading>multi ; 
