# Copyright 2008 Jurko Gospodnetic, Vladimir Prus
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)

#   Added to guard against a bug causing targets to be used before they
# themselves have finished building. This used to happen for targets built by a
# multi-file action that got triggered by another target, except when the target
# triggering the action was the first one in the list of targets produced by
# that action.
#
# Example:
#   When target A and target B were declared as created by a single action with
# A being the first one listed, and target B triggered running that action then
# while the action was still running, target A was already reporting as being
# built causing other targets depending on target A to be built prematurely.

if ! $(BJAM_SUBTEST)
{
    ECHO --- Testing -jN parallel execution of multi-file actions - 2... ;

    assert "...found 4 targets...
...updating 3 targets...
link dll
001 - linked
install installed_dll
002 - installed
...updated 3 targets...
" : (==) : [ SHELL "\"$(ARGV[1])\" -f parallel_multifile_actions_2.jam -sBJAM_SUBTEST=1 -j2" ] ;
}
else
{
    actions link
    {
        sleep 1
        echo 001 - linked
    }

    link dll lib ;

    actions install
    {
        echo 002 - installed
    }

    install installed_dll : dll ;
    DEPENDS installed_dll : dll ;

    DEPENDS all : lib installed_dll ;
}
