@@ -318,14 +318,22 @@ def get_default_scheme():
318
318
319
319
def get_makefile_filename ():
320
320
"""Return the path of the Makefile."""
321
+
322
+ # GH-127429: When cross-compiling, use the Makefile from the target, instead of the host Python.
323
+ if cross_base := os .environ .get ('_PYTHON_PROJECT_BASE' ):
324
+ return os .path .join (cross_base , 'Makefile' )
325
+
321
326
if _PYTHON_BUILD :
322
327
return os .path .join (_PROJECT_BASE , "Makefile" )
328
+
323
329
if hasattr (sys , 'abiflags' ):
324
330
config_dir_name = f'config-{ _PY_VERSION_SHORT } { sys .abiflags } '
325
331
else :
326
332
config_dir_name = 'config'
333
+
327
334
if hasattr (sys .implementation , '_multiarch' ):
328
335
config_dir_name += f'-{ sys .implementation ._multiarch } '
336
+
329
337
return os .path .join (get_path ('stdlib' ), config_dir_name , 'Makefile' )
330
338
331
339
@@ -464,27 +472,44 @@ def get_path(name, scheme=get_default_scheme(), vars=None, expand=True):
464
472
def _init_config_vars ():
465
473
global _CONFIG_VARS
466
474
_CONFIG_VARS = {}
475
+
476
+ prefix = _PREFIX
477
+ exec_prefix = _EXEC_PREFIX
478
+ base_prefix = _BASE_PREFIX
479
+ base_exec_prefix = _BASE_EXEC_PREFIX
480
+
481
+ try :
482
+ abiflags = sys .abiflags
483
+ except AttributeError :
484
+ abiflags = ''
485
+
486
+ if os .name == 'posix' :
487
+ _init_posix (_CONFIG_VARS )
488
+ # If we are cross-compiling, load the prefixes from the Makefile instead.
489
+ if '_PYTHON_PROJECT_BASE' in os .environ :
490
+ prefix = _CONFIG_VARS ['prefix' ]
491
+ exec_prefix = _CONFIG_VARS ['exec_prefix' ]
492
+ base_prefix = _CONFIG_VARS ['prefix' ]
493
+ base_exec_prefix = _CONFIG_VARS ['exec_prefix' ]
494
+ abiflags = _CONFIG_VARS ['ABIFLAGS' ]
495
+
467
496
# Normalized versions of prefix and exec_prefix are handy to have;
468
497
# in fact, these are the standard versions used most places in the
469
498
# Distutils.
470
- _CONFIG_VARS ['prefix' ] = _PREFIX
471
- _CONFIG_VARS ['exec_prefix' ] = _EXEC_PREFIX
499
+ _CONFIG_VARS ['prefix' ] = prefix
500
+ _CONFIG_VARS ['exec_prefix' ] = exec_prefix
472
501
_CONFIG_VARS ['py_version' ] = _PY_VERSION
473
502
_CONFIG_VARS ['py_version_short' ] = _PY_VERSION_SHORT
474
503
_CONFIG_VARS ['py_version_nodot' ] = _PY_VERSION_SHORT_NO_DOT
475
- _CONFIG_VARS ['installed_base' ] = _BASE_PREFIX
476
- _CONFIG_VARS ['base' ] = _PREFIX
477
- _CONFIG_VARS ['installed_platbase' ] = _BASE_EXEC_PREFIX
478
- _CONFIG_VARS ['platbase' ] = _EXEC_PREFIX
504
+ _CONFIG_VARS ['installed_base' ] = base_prefix
505
+ _CONFIG_VARS ['base' ] = prefix
506
+ _CONFIG_VARS ['installed_platbase' ] = base_exec_prefix
507
+ _CONFIG_VARS ['platbase' ] = exec_prefix
479
508
_CONFIG_VARS ['projectbase' ] = _PROJECT_BASE
480
509
_CONFIG_VARS ['platlibdir' ] = sys .platlibdir
481
510
_CONFIG_VARS ['implementation' ] = _get_implementation ()
482
511
_CONFIG_VARS ['implementation_lower' ] = _get_implementation ().lower ()
483
- try :
484
- _CONFIG_VARS ['abiflags' ] = sys .abiflags
485
- except AttributeError :
486
- # sys.abiflags may not be defined on all platforms.
487
- _CONFIG_VARS ['abiflags' ] = ''
512
+ _CONFIG_VARS ['abiflags' ] = abiflags
488
513
try :
489
514
_CONFIG_VARS ['py_version_nodot_plat' ] = sys .winver .replace ('.' , '' )
490
515
except AttributeError :
@@ -493,8 +518,6 @@ def _init_config_vars():
493
518
if os .name == 'nt' :
494
519
_init_non_posix (_CONFIG_VARS )
495
520
_CONFIG_VARS ['VPATH' ] = sys ._vpath
496
- if os .name == 'posix' :
497
- _init_posix (_CONFIG_VARS )
498
521
if _HAS_USER_BASE :
499
522
# Setting 'userbase' is done below the call to the
500
523
# init function to enable using 'get_config_var' in
0 commit comments