2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-12 12:02:24 +00:00
Files
build/test/build_dir.py
Rene Rivera 40e7f0e8dd Fix tests to pass on Windows after removing toolset requirements ignore.
Various restructure of test framework handling of paths to avoid duplicate path editing which caused failed tests. Adjust many tests to deal with added subdirectories in build outputs now that toolset requirements are active.
2017-07-02 23:28:48 -05:00

108 lines
2.8 KiB
Python

#!/usr/bin/python
# Copyright 2003 Dave Abrahams
# Copyright 2002, 2003, 2005 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 we can change build directory using the 'build-dir' project
# attribute.
import BoostBuild
import string
import os
t = BoostBuild.Tester(use_test_config=False)
# Test that top-level project can affect build dir.
t.write("jamroot.jam", "import gcc ;")
t.write("jamfile.jam", """\
project : build-dir build ;
exe a : a.cpp ;
build-project src ;
""")
t.write("a.cpp", "int main() {}\n")
t.write("src/jamfile.jam", "exe b : b.cpp ; ")
t.write("src/b.cpp", "int main() {}\n")
t.run_build_system()
t.expect_addition(["build/$toolset/debug*/a.exe",
"build/src/$toolset/debug*/b.exe"])
# Test that building from child projects work.
t.run_build_system(subdir='src')
t.ignore("build/config.log")
t.ignore("build/project-cache.jam")
t.expect_nothing_more()
# Test that project can override build dir.
t.write("jamfile.jam", """\
exe a : a.cpp ;
build-project src ;
""")
t.write("src/jamfile.jam", """\
project : build-dir build ;
exe b : b.cpp ;
""")
t.run_build_system()
t.expect_addition(["bin/$toolset/debug*/a.exe",
"src/build/$toolset/debug*/b.exe"])
# Now test the '--build-dir' option.
t.rm(".")
t.write("jamroot.jam", "")
# Test that we get an error when no project id is specified.
t.run_build_system(["--build-dir=foo"])
t.fail_test(string.find(t.stdout(),
"warning: the --build-dir option will be ignored") == -1)
t.write("jamroot.jam", """\
project foo ;
exe a : a.cpp ;
build-project sub ;
""")
t.write("a.cpp", "int main() {}\n")
t.write("sub/jamfile.jam", "exe b : b.cpp ;\n")
t.write("sub/b.cpp", "int main() {}\n")
t.run_build_system(["--build-dir=build"])
t.expect_addition(["build/foo/$toolset/debug*/a.exe",
"build/foo/sub/$toolset/debug*/b.exe"])
t.write("jamroot.jam", """\
project foo : build-dir bin.v2 ;
exe a : a.cpp ;
build-project sub ;
""")
t.run_build_system(["--build-dir=build"])
t.expect_addition(["build/foo/bin.v2/$toolset/debug*/a.exe",
"build/foo/bin.v2/sub/$toolset/debug*/b.exe"])
# Try building in subdir. We expect that the entire build tree with be in
# 'sub/build'. Today, I am not sure if this is what the user expects, but let
# it be.
t.rm('build')
t.run_build_system(["--build-dir=build"], subdir="sub")
t.expect_addition(["sub/build/foo/bin.v2/sub/$toolset/debug*/b.exe"])
t.write("jamroot.jam", """\
project foo : build-dir %s ;
exe a : a.cpp ;
build-project sub ;
""" % string.replace(os.getcwd(), '\\', '\\\\'))
t.run_build_system(["--build-dir=build"], status=1)
t.fail_test(string.find(t.stdout(),
"Absolute directory specified via 'build-dir' project attribute") == -1)
t.cleanup()