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,22 @@ 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 = os.path.join(os.path.dirname(__file__), + "check-tested-lit-timeout-ability") +if not os.path.exists(testing_script_path): + print("__file__: ", __file__) + print("testing_script_path: ", testing_script_path) +proc = subprocess.run(["python3", testing_script_path], stderr=subprocess.PIPE, + env=config.environment, universal_newlines=True) +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.')