| #!/usr/bin/python |
| |
| # Copyright 2002 Dave Abrahams |
| # 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 |
| import os.path |
| import re |
| |
| |
| def check_for_existing_boost_build_jam(t): |
| """ |
| This test depends on no boost-build.jam file existing in any of the |
| folders along the current folder's path. If it does exist, not only would |
| this test fail but it could point to a completely wrong Boost Build |
| installation, thus causing headaches when attempting to diagnose the |
| problem. That is why we explicitly check for this scenario. |
| |
| """ |
| problem = find_up_to_root(t.workdir, "boost-build.jam") |
| if problem: |
| BoostBuild.annotation("misconfiguration", """\ |
| This test expects to be run from a folder with no 'boost-build.jam' file in any |
| of the folders along its path. |
| |
| Working folder: |
| '%s' |
| |
| Problematic boost-build.jam found at: |
| '%s' |
| |
| Please remove this file or change the test's working folder and rerun the test. |
| """ % (t.workdir, problem)) |
| t.fail_test(1, dump_stdio=False, dump_stack=False) |
| |
| |
| def find_up_to_root(folder, name): |
| last = "" |
| while last != folder: |
| candidate = os.path.join(folder, name) |
| if os.path.exists(candidate): |
| return candidate |
| last = folder |
| folder = os.path.dirname(folder) |
| |
| |
| def match_re(actual, expected): |
| return re.match(expected, actual, re.DOTALL) != None |
| |
| |
| t = BoostBuild.Tester(match=match_re, boost_build_path="", pass_toolset=0) |
| t.set_tree("startup") |
| check_for_existing_boost_build_jam(t) |
| |
| t.run_build_system(status=1, stdout= |
| r"""Unable to load Boost\.Build: could not find "boost-build\.jam" |
| .*Attempted search from .* up to the root""") |
| |
| t.run_build_system(status=1, subdir="no-bootstrap1", |
| stdout=r"Unable to load Boost\.Build: could not find build system\." |
| r".*attempted to load the build system by invoking" |
| r".*'boost-build ;'" |
| r'.*but we were unable to find "bootstrap\.jam"') |
| |
| # Descend to a subdirectory which /does not/ contain a boost-build.jam file, |
| # and try again to test the crawl-up behavior. |
| t.run_build_system(status=1, subdir=os.path.join("no-bootstrap1", "subdir"), |
| stdout=r"Unable to load Boost\.Build: could not find build system\." |
| r".*attempted to load the build system by invoking" |
| r".*'boost-build ;'" |
| r'.*but we were unable to find "bootstrap\.jam"') |
| |
| t.run_build_system(status=1, subdir="no-bootstrap2", |
| stdout=r"Unable to load Boost\.Build: could not find build system\." |
| r".*attempted to load the build system by invoking" |
| r".*'boost-build \. ;'" |
| r'.*but we were unable to find "bootstrap\.jam"') |
| |
| t.run_build_system(status=1, subdir='no-bootstrap3', stdout= |
| r"""Unable to load Boost.Build |
| .*boost-build\.jam" was found.* |
| However, it failed to call the "boost-build" rule""") |
| |
| # Test bootstrapping based on BOOST_BUILD_PATH. |
| t.run_build_system(["-sBOOST_BUILD_PATH=../boost-root/build"], |
| subdir="bootstrap-env", stdout="build system bootstrapped") |
| |
| # Test bootstrapping based on an explicit path in boost-build.jam. |
| t.run_build_system(subdir="bootstrap-explicit", |
| stdout="build system bootstrapped") |
| |
| t.cleanup() |