gh-84461: Use HOSTRUNNER to run regression tests (GH-93694) · python/cpython@4c88104

GitHub

@@ -8,7 +8,9 @@

88"""

991010importos

11+importshlex

1112importsys

13+importsysconfig

1214importtest.support

13151416@@ -19,15 +21,37 @@ def is_multiprocess_flag(arg):

1921defis_resource_use_flag(arg):

2022returnarg.startswith('-u') orarg.startswith('--use')

212324+defis_python_flag(arg):

25+returnarg.startswith('-p') orarg.startswith('--python')

26+22272328defmain(regrtest_args):

2429args= [sys.executable,

2530'-u', # Unbuffered stdout and stderr

2631'-W', 'default', # Warnings set to 'default'

2732'-bb', # Warnings about bytes/bytearray

28-'-E', # Ignore environment variables

2933 ]

303435+cross_compile='_PYTHON_HOST_PLATFORM'inos.environ

36+if (hostrunner:=os.environ.get("_PYTHON_HOSTRUNNER")) isNone:

37+hostrunner=sysconfig.get_config_var("HOSTRUNNER")

38+ifcross_compile:

39+# emulate -E, but keep PYTHONPATH + cross compile env vars, so

40+# test executable can load correct sysconfigdata file.

41+keep= {

42+'_PYTHON_PROJECT_BASE',

43+'_PYTHON_HOST_PLATFORM',

44+'_PYTHON_SYSCONFIGDATA_NAME',

45+'PYTHONPATH'

46+ }

47+environ= {

48+name: valueforname, valueinos.environ.items()

49+ifnotname.startswith(('PYTHON', '_PYTHON')) ornameinkeep

50+ }

51+else:

52+environ=os.environ.copy()

53+args.append("-E")

54+3155# Allow user-specified interpreter options to override our defaults.

3256args.extend(test.support.args_from_interpreter_flags())

3357@@ -38,16 +62,30 @@ def main(regrtest_args):

3862ifsys.platform=='win32':

3963args.append('-n') # Silence alerts under Windows

4064ifnotany(is_multiprocess_flag(arg) forarginregrtest_args):

41-args.extend(['-j', '0']) # Use all CPU cores

65+ifcross_compileandhostrunner:

66+# For now use only one core for cross-compiled builds;

67+# hostrunner can be expensive.

68+args.extend(['-j', '1'])

69+else:

70+args.extend(['-j', '0']) # Use all CPU cores

4271ifnotany(is_resource_use_flag(arg) forarginregrtest_args):

4372args.extend(['-u', 'all,-largefile,-audio,-gui'])

73+74+ifcross_compileandhostrunner:

75+# If HOSTRUNNER is set and -p/--python option is not given, then

76+# use hostrunner to execute python binary for tests.

77+ifnotany(is_python_flag(arg) forarginregrtest_args):

78+buildpython=sysconfig.get_config_var("BUILDPYTHON")

79+args.extend(["--python", f"{hostrunner}{buildpython}"])

80+4481args.extend(regrtest_args)

45-print(' '.join(args))

82+83+print(shlex.join(args))

4684ifsys.platform=='win32':

4785fromsubprocessimportcall

4886sys.exit(call(args))

4987else:

50-os.execv(sys.executable, args)

88+os.execve(sys.executable, args, environ)

518952905391if__name__=='__main__':