| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/usr/bin/python
- # Copyright 2006 Vladimir Prus.
- # Copyright Nikita Kniazev 2020.
- # Distributed under the Boost Software License, Version 1.0. (See
- # accompanying file LICENSE.txt or copy at
- # https://www.bfgroup.xyz/b2/LICENSE.txt)
- import BoostBuild
- from time import sleep
- t = BoostBuild.Tester()
- t.write("jamroot.jam", """
- import pch ;
- project : requirements <warnings-as-errors>on ;
- cpp-pch pch : pch.hpp ;
- cpp-pch pch-afx : pch.hpp : <define>HELLO ;
- cpp-pch pch-msvc-source : pch.hpp : <toolset>msvc:<source>pch.cpp ;
- exe hello : hello.cpp pch ;
- exe hello-afx : hello-afx.cpp pch-afx : <define>HELLO ;
- exe hello-msvc-source : hello-msvc-source.cpp pch-msvc-source ;
- """)
- pch_content = """\
- #undef HELLO
- class TestClass
- {
- public:
- TestClass( int, int ) {}
- };
- """
- t.write("pch.hpp", pch_content)
- t.write("pch.cpp", """#include <pch.hpp>
- """)
- toolset = BoostBuild.get_toolset()
- for name in ("hello.cpp", "hello-afx.cpp", "hello-msvc-source.cpp"):
- t.write(name, """int main() { TestClass c(1, 2); }
- """)
- t.run_build_system()
- t.expect_addition("bin/$toolset/debug*/hello.exe")
- t.expect_addition("bin/$toolset/debug*/hello-afx.exe")
- t.expect_addition("bin/$toolset/debug*/hello-msvc-source.exe")
- # Now make the header unusable, replace its content with some garbage, but
- # preserve the size and timestamp to fool the compiler. If everything is OK,
- # B2 will not recreate PCH, and compiler will happily use pre-compiled
- # header, not noticing that the real header is bad.
- t.rename("pch.hpp", "pch.hpp.orig")
- s = "THIS WILL NOT COMPILE. "
- t.write("pch.hpp", s + (len(pch_content) - len(s)) * 'x')
- t.copy_timestamp("pch.hpp.orig", "pch.hpp")
- t.rm("bin/$toolset/debug*/hello.obj")
- t.rm("bin/$toolset/debug*/hello-afx.obj")
- t.rm("bin/$toolset/debug*/hello-msvc-source.obj")
- t.run_build_system()
- t.expect_addition("bin/$toolset/debug*/hello.obj")
- t.expect_addition("bin/$toolset/debug*/hello-afx.obj")
- t.expect_addition("bin/$toolset/debug*/hello-msvc-source.obj")
- t.cleanup()
|