forked from mirror/doctest
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.7 KiB
Python
100 lines
2.7 KiB
Python
import os
|
|
import sys
|
|
|
|
_os = sys.argv[1]
|
|
assert _os in ["Linux", "macOS", "Windows"]
|
|
|
|
_arch = sys.argv[2]
|
|
assert _arch in ["x86", "x64"]
|
|
|
|
_compiler = sys.argv[3]
|
|
assert _compiler in ["cl", "clang-cl", "clang", "gcc", "xcode"]
|
|
|
|
_version = sys.argv[4] if len(sys.argv) >= 5 else ""
|
|
|
|
print("Env: " + "; ".join([_os, _arch, _compiler, _version]))
|
|
|
|
if _compiler == "gcc":
|
|
used_cxx = "g++"
|
|
elif _compiler == "clang" or _compiler == "xcode":
|
|
used_cxx = "clang++"
|
|
else:
|
|
used_cxx = _compiler
|
|
|
|
if _os == "Linux":
|
|
used_cxx += "-" + _version
|
|
|
|
|
|
def log_and_call(command):
|
|
print(command)
|
|
return os.system(command)
|
|
|
|
|
|
def run_test(build_type, test_mode, flags, test = True):
|
|
print("Running: " + "; ".join([build_type, test_mode, flags, str(test)]))
|
|
if log_and_call("cmake -E remove_directory build"):
|
|
exit(1)
|
|
if log_and_call(
|
|
f"cmake -S . "
|
|
f"-B build "
|
|
f"-D CMAKE_BUILD_TYPE={build_type} "
|
|
f"-D DOCTEST_TEST_MODE={test_mode} "
|
|
+ (flags and f'-D CMAKE_CXX_FLAGS="{flags}" ') +
|
|
f"-D CMAKE_CXX_COMPILER={used_cxx}"
|
|
):
|
|
exit(2)
|
|
if log_and_call("cmake --build build"):
|
|
exit(3)
|
|
if test and log_and_call("ctest --test-dir build --no-tests=error"):
|
|
exit(4)
|
|
|
|
|
|
def version_tuple(v):
|
|
return tuple(map(int, (v.split("."))))
|
|
|
|
|
|
flags = "-fsanitize=address,undefined -fno-omit-frame-pointer"
|
|
if _os == "Windows":
|
|
flags = ""
|
|
elif _os == "Linux":
|
|
if _compiler == "clang":
|
|
if version_tuple(_version) <= version_tuple("6.0"):
|
|
flags = ""
|
|
elif _compiler == "gcc":
|
|
if version_tuple(_version) <= version_tuple("5.0"):
|
|
flags = ""
|
|
|
|
if _os == "Linux" and _compiler == "gcc":
|
|
flags += " -static-libasan"
|
|
|
|
tsan_flags = "-fsanitize=thread -pie -fPIE"
|
|
if _os == "Windows":
|
|
tsan_flags = ""
|
|
elif _os == "Linux":
|
|
if _compiler == "clang":
|
|
if version_tuple(_version) <= version_tuple("3.9"):
|
|
tsan_flags = ""
|
|
elif _compiler == "gcc":
|
|
if version_tuple(_version) <= version_tuple("6.0"):
|
|
tsan_flags = ""
|
|
|
|
if _os == "Linux" and _compiler == "gcc":
|
|
tsan_flags += " -static-libtsan"
|
|
|
|
x86_flag = " -m32" if _arch == "x86" and _compiler != "cl" else ""
|
|
|
|
for configuration in ["Debug", "Release"]:
|
|
run_test(configuration, "COMPARE", flags + x86_flag)
|
|
if tsan_flags != "":
|
|
run_test(configuration, "COMPARE", tsan_flags)
|
|
if _os != "Windows":
|
|
run_test(
|
|
configuration,
|
|
"COMPARE",
|
|
"-fno-exceptions -D DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS",
|
|
test = False,
|
|
)
|
|
run_test(configuration, "COMPARE", "-fno-rtti")
|
|
if _os == "Linux":
|
|
run_test(configuration, "VALGRIND", x86_flag)
|