mirror of
https://github.com/boostorg/predef.git
synced 2026-08-03 20:24:11 +02:00
153 lines
5.7 KiB
Python
153 lines
5.7 KiB
Python
|
|
# Copyright Rene Rivera 2016-2019
|
|
#
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
from __future__ import print_function
|
|
|
|
import os.path
|
|
import shutil
|
|
import sys
|
|
from common import toolset_info, main, utils, script_common, ci_cli, set_arg
|
|
|
|
__dirname__ = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
|
|
class script(script_common):
|
|
'''
|
|
Main script to test a Boost C++ Library.
|
|
'''
|
|
|
|
def __init__(self, ci_klass, **kargs):
|
|
script_common.__init__(self, ci_klass, **kargs)
|
|
|
|
def init(self, opt, kargs):
|
|
opt.add_option(
|
|
'--toolset',
|
|
help="single toolset to test with")
|
|
opt.add_option(
|
|
'--target',
|
|
help="test target to build for testing, defaults to TARGET or 'minimal'")
|
|
opt.add_option(
|
|
'--address-model',
|
|
help="address model to test, ie 64 or 32")
|
|
opt.add_option(
|
|
'--variant',
|
|
help="variant to test, ie debug, release")
|
|
set_arg(kargs, 'toolset', os.getenv("TOOLSET"))
|
|
set_arg(kargs, 'target', os.getenv('TARGET', 'minimal'))
|
|
set_arg(kargs, 'address_model', os.getenv("ADDRESS_MODEL", None))
|
|
set_arg(kargs, 'variant', os.getenv("VARIANT", "debug"))
|
|
set_arg(kargs, 'cxxstd', os.getenv("CXXSTD", None))
|
|
set_arg(kargs, 'cxxdialect', os.getenv("CXXDIALECT", None))
|
|
set_arg(kargs, 'cxxdefs', os.getenv("CXXDEFS", None))
|
|
return kargs
|
|
|
|
def start(self):
|
|
script_common.start(self)
|
|
# Some setup we need to redo for each invocation.
|
|
self.b2_dir = os.path.join(self.build_dir, 'b2')
|
|
|
|
def command_install(self):
|
|
script_common.command_install(self)
|
|
# Fetch & install toolset..
|
|
utils.log("Install toolset: %s" % (self.toolset))
|
|
if self.toolset:
|
|
self.command_install_toolset(self.toolset)
|
|
|
|
def command_before_build(self):
|
|
script_common.command_before_build(self)
|
|
|
|
# Fetch dependencies.
|
|
utils.git_clone('boostorg', 'build', 'develop', repo_dir=self.b2_dir)
|
|
|
|
# Create config file for b2 toolset.
|
|
if not isinstance(self.ci, ci_cli):
|
|
utils.make_file(os.path.join(self.repo_dir, 'project-config.jam'),
|
|
"""
|
|
using %(toolset)s : %(version)s : %(command)s ;
|
|
""" % {
|
|
'toolset': toolset_info[self.toolset]['toolset'],
|
|
'version': toolset_info[self.toolset]['version'],
|
|
'command': toolset_info[self.toolset]['command'],
|
|
})
|
|
|
|
# # "Convert" boostorg-predef into standalone b2 project.
|
|
# if os.path.exists(os.path.join(self.repo_dir, 'build.jam')) and not os.path.exists(os.path.join(self.repo_dir, 'project-root.jam')):
|
|
# os.rename(os.path.join(self.repo_dir, 'build.jam'),
|
|
# os.path.join(self.repo_dir, 'project-root.jam'))
|
|
|
|
def command_build(self):
|
|
script_common.command_build(self)
|
|
|
|
# Set up tools.
|
|
if not isinstance(self.ci, ci_cli) and toolset_info[self.toolset]['command']:
|
|
os.environ['PATH'] = os.pathsep.join([
|
|
os.path.dirname(toolset_info[self.toolset]['command']),
|
|
os.environ['PATH']])
|
|
|
|
# Bootstrap Boost Build engine.
|
|
os.chdir(self.b2_dir)
|
|
if sys.platform == 'win32':
|
|
utils.check_call(".\\bootstrap.bat")
|
|
else:
|
|
utils.check_call("./bootstrap.sh")
|
|
os.environ['PATH'] = os.pathsep.join([self.b2_dir, os.environ['PATH']])
|
|
os.environ['BOOST_BUILD_PATH'] = self.b2_dir
|
|
|
|
# Run the limited tests.
|
|
print("--- Testing %s ---" % (self.repo_dir))
|
|
os.chdir(os.path.join(self.repo_dir, 'test'))
|
|
toolset_to_test = ""
|
|
if self.toolset:
|
|
if not isinstance(self.ci, ci_cli):
|
|
toolset_to_test = toolset_info[self.toolset]['toolset']
|
|
else:
|
|
toolset_to_test = self.toolset
|
|
cxxdefs = []
|
|
if self.cxxdefs:
|
|
cxxdefs = ['define=%s' % (d) for d in self.cxxdefs.split(',')]
|
|
self.b2(
|
|
'-d1',
|
|
'-p0',
|
|
'preserve-test-targets=off',
|
|
'--dump-tests',
|
|
'--verbose-test',
|
|
'--build-dir=%s' % (self.build_dir),
|
|
'--out-xml=%s' % (os.path.join(self.build_dir, 'regression.xml')),
|
|
'' if not toolset_to_test else 'toolset=%s' % (toolset_to_test),
|
|
'' if not self.address_model else 'address-model=%s' % (
|
|
self.address_model),
|
|
'variant=%s' % (self.variant),
|
|
'' if not self.cxxstd else 'cxxstd=%s' % (
|
|
self.cxxstd),
|
|
'' if not self.cxxdialect else 'cxxstd-dialect=%s' % (
|
|
self.cxxdialect),
|
|
self.target,
|
|
*cxxdefs
|
|
)
|
|
|
|
# Generate a readable test report.
|
|
import build_log
|
|
log_main = build_log.Main([
|
|
'--output=console',
|
|
os.path.join(self.build_dir, 'regression.xml')])
|
|
# And exit with an error if the report contains failures.
|
|
# This lets the CI notice the error and report a failed build.
|
|
# And hence trigger the failure machinery, like sending emails.
|
|
if log_main.failed:
|
|
self.ci.finish(-1)
|
|
|
|
def command_before_cache(self):
|
|
script_common.command_before_cache(self)
|
|
os.chdir(self.b2_dir)
|
|
utils.check_call("git", "clean", "-dfqx")
|
|
utils.check_call("git", "status", "-bs")
|
|
# utils.check_call("git","submodule","--quiet","foreach","git","clean","-dfqx")
|
|
# utils.check_call("git","submodule","foreach","git","status","-bs")
|
|
|
|
|
|
main(script)
|