#!/usr/bin/python

# Copyright 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)

# Test that the <library> property has no effect on "obj" targets. Previously,
# it affected all targets, so
#
#    project : requirements <library>foo ;
#    exe a : a.cpp helper ;
#    obj helper : helper.cpp : <optimization>off ;
#
# caused 'foo' to be built with and without optimization.

import BoostBuild

t = BoostBuild.Tester()

t.write("jamroot.jam", """
project : requirements <library>lib//x ;
exe a : a.cpp foo ;
obj foo : foo.cpp : <variant>release ;
""")

t.write("a.cpp", """
void aux();
int main() { aux(); }
""")

t.write("foo.cpp", """
void gee();
void aux() { gee(); }
""")

t.write("lib/x.cpp", """
void
#if defined(_WIN32)
__declspec(dllexport)
#endif
gee() {}
""")

t.write("lib/jamfile.jam", """
lib x : x.cpp ;
""")

t.write("lib/jamroot.jam", """
""")


t.run_build_system()
t.expect_addition("bin/$toolset/debug/a.exe")
t.expect_nothing("lib/bin/$toolset/release/x.obj")

t.cleanup()
