Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
gh-84461: Use HOSTRUNNER to run regression tests
  • Loading branch information
tiran committed Jun 10, 2022
commit f88511cc18e5b2e56052f98cc78f51051d4dcfe7
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
``run_tests.py`` now handles cross compiling env vars correctly and pass
``HOSTRUNNER`` to regression tests.
45 changes: 41 additions & 4 deletions Tools/scripts/run_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
"""

import os
import shlex
import sys
import sysconfig
import test.support


Expand All @@ -19,15 +21,36 @@ def is_multiprocess_flag(arg):
def is_resource_use_flag(arg):
return arg.startswith('-u') or arg.startswith('--use')

def is_python_flag(arg):
return arg.startswith('-p') or arg.startswith('--python')


def main(regrtest_args):
args = [sys.executable,
'-u', # Unbuffered stdout and stderr
'-W', 'default', # Warnings set to 'default'
'-bb', # Warnings about bytes/bytearray
'-E', # Ignore environment variables
]

cross_compile = '_PYTHON_HOST_PLATFORM' in os.environ
hostrunner = sysconfig.get_config_var("HOSTRUNNER")
if cross_compile:
# emulate -E, but keep PYTHONPATH + cross compile env vars, so
# test executable can load correct sysconfigdata file.
keep = {
'_PYTHON_PROJECT_BASE',
'_PYTHON_HOST_PLATFORM',
'_PYTHON_SYSCONFIGDATA_NAME',
'PYTHONPATH'
}
environ = {
name: value for name, value in os.environ.items()
if not name.startswith(('PYTHON', '_PYTHON')) or name in keep
}
else:
environ = os.environ.copy()
args.append("-E")

# Allow user-specified interpreter options to override our defaults.
args.extend(test.support.args_from_interpreter_flags())

Expand All @@ -38,16 +61,30 @@ def main(regrtest_args):
if sys.platform == 'win32':
args.append('-n') # Silence alerts under Windows
if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
args.extend(['-j', '0']) # Use all CPU cores
if cross_compile and hostrunner:
# For now use only one core for cross compiled builds.
# hostrunner can be expensive.
Comment thread
tiran marked this conversation as resolved.
Outdated
args.extend(['-j', '1'])
else:
args.extend(['-j', '0']) # Use all CPU cores
if not any(is_resource_use_flag(arg) for arg in regrtest_args):
args.extend(['-u', 'all,-largefile,-audio,-gui'])

if cross_compile and hostrunner:
# If HOSTRUNNER is set and -p/--python option is not given, then
# use hostrunner to execute python binary for tests.
if not any(is_python_flag(arg) for arg in regrtest_args):
buildpython = sysconfig.get_config_var("BUILDPYTHON")
args.extend(["--python", f"{hostrunner} {buildpython}"])

args.extend(regrtest_args)
print(' '.join(args))

print(shlex.join(args))
if sys.platform == 'win32':
from subprocess import call
sys.exit(call(args))
else:
os.execv(sys.executable, args)
os.execve(sys.executable, args, environ)


if __name__ == '__main__':
Expand Down