diff --git a/llvm/utils/lit/tests/check-tested-lit-timeout-ability b/llvm/utils/lit/tests/check-tested-lit-timeout-ability new file mode 100755 --- /dev/null +++ b/llvm/utils/lit/tests/check-tested-lit-timeout-ability @@ -0,0 +1,11 @@ +#!/usr/bin/python3 + +import sys +from lit.util import killProcessAndChildrenIsSupported + +supported, errormsg = killProcessAndChildrenIsSupported() + +if not supported: + sys.exit(errormsg) + +sys.exit() diff --git a/llvm/utils/lit/tests/lit.cfg b/llvm/utils/lit/tests/lit.cfg --- a/llvm/utils/lit/tests/lit.cfg +++ b/llvm/utils/lit/tests/lit.cfg @@ -3,6 +3,7 @@ import os import platform import sys +import subprocess import lit.formats from lit.llvm import llvm_config @@ -71,11 +72,25 @@ config.environment['COVERAGE_PROCESS_START'] = os.path.join( os.path.dirname(__file__), ".coveragerc") -# Add a feature to detect if psutil is available -supported, errormsg = lit_config.maxIndividualTestTimeIsSupported -if supported: +# Add a feature to detect if test cancellation is available. Check the ability +# to do cancellation in the same environment as where RUN commands are run. +# The reason is that on most systems cancellation depends on psutil being +# available and RUN commands are run with a cleared PYTHONPATH and user site +# packages disabled. +testing_script_path = "/".join((os.path.dirname(__file__), + "check-tested-lit-timeout-ability")) +try: + proc = subprocess.run(["python3", testing_script_path], stderr=subprocess.PIPE, + env=config.environment, universal_newlines=True) +except FileNotFoundError as not_found: + filename = not_found.filename + msg = "__file__: {}, testing_script_path: {}, not_found filename: {}".format(__file__, + testing_script_path, filename) + raise OSError(msg) +if proc.returncode == 0: config.available_features.add("lit-max-individual-test-time") else: + errormsg = proc.stderr lit_config.warning('Setting a timeout per test not supported. ' + errormsg + ' Some tests will be skipped and the --timeout' ' command line argument will not work.')