mirror of
https://github.com/boostorg/build.git
synced 2026-02-13 12:22:17 +00:00
96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
#!/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(subdir='bootstrap-env',
|
|
extra_args='-sBOOST_BUILD_PATH=../boost-root/build',
|
|
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()
|