#!/usr/bin/python

# Copyright 2003, 2004 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)

import BoostBuild

t = BoostBuild.Tester()

# Regression test: when staging V2 used to change suffixes on targets
# corresponding to real files.
t.write("jamfile.jam", """
import type : register ;
register A : a1 a2 a3 ;
stage a : a.a3 ;
""")

t.write("jamroot.jam", "")
t.write("a.a3", "")

t.run_build_system()
t.expect_addition("a/a.a3");

# Regression test: we should be able to specify empty suffix for derived target
# type, even if base type has non-empty suffix.
t.write("a.cpp", "")

t.write("suffixes.jam", """
import type ;
import generators ;
import common ;

type.register First : first : ;
type.register Second : "" : First ;

generators.register-standard $(__name__).second : CPP : Second ;

rule second
{
    TOUCH on $(<) = [ common.file-creation-command ] ;
}

actions second
{
    $(TOUCH) $(<)
}
""")

t.write("jamroot.jam", """
import suffixes ;
""")

t.write("jamfile.jam", """
second a : a.cpp ;
""")

t.run_build_system()
t.expect_addition("bin/$toolset/debug/a")

t.cleanup()
