| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #!/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.txt or https://www.bfgroup.xyz/b2/LICENSE.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, stderr=
- r"""Unable to load B2: could not find 'boost-build\.jam'
- .*Attempted search from .* up to the root at '.*'""")
- t.run_build_system(status=1, subdir="no-bootstrap1",
- stderr=
- r"""Unable to load B2: could not find build system\.
- -----------------------------------------------
- .*attempted to load the build system by invoking
- .*'boost-build ;'
- .*but we were unable to find 'bootstrap\.jam' in the specified directory or in BOOST_BUILD_PATH:""")
- # 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"),
- stderr=r"Unable to load B2: 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' in the specified directory or in BOOST_BUILD_PATH:")
- t.run_build_system(status=1, subdir="no-bootstrap2",
- stderr=r"Unable to load B2: 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' in the specified directory or in BOOST_BUILD_PATH:")
- t.run_build_system(status=1, subdir='no-bootstrap3', stderr=
- r"""Unable to load B2
- .*boost-build\.jam' was found.*
- However, it failed to call the 'boost-build' rule to indicate the location of the build system.""")
- # 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()
|