Switch to potential new distutils environment variable
This commit is contained in:
+5
-60
@@ -133,50 +133,10 @@ def setup_setuptools_cross_compile(
|
|||||||
python_configuration: PythonConfiguration,
|
python_configuration: PythonConfiguration,
|
||||||
python_libs_base: Path,
|
python_libs_base: Path,
|
||||||
env: dict[str, str],
|
env: dict[str, str],
|
||||||
cleanup_command_list: list[Callable[[], Any]],
|
|
||||||
) -> None:
|
) -> None:
|
||||||
# We write to distutils_cfg for distutils-based builds to override some
|
distutils_cfg = python_libs_base / "extra-setup.cfg"
|
||||||
# settings. Ideally, we'd pass them on the command line, but since we don't
|
env["DISTUTILS_EXTRA_CONFIG"] = str(distutils_cfg)
|
||||||
# know that setuptools is going to be used, we can't do it.
|
log.notice(f"Setting DISTUTILS_EXTRA_CONFIG={distutils_cfg} for cross-compilation")
|
||||||
userprofile = os.getenv("USERPROFILE")
|
|
||||||
if not userprofile:
|
|
||||||
log.warning(
|
|
||||||
"Unable to configure setuptools for cross-compiling because USERPROFILE was not found"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
distutils_cfg = Path(userprofile) / "pydistutils.cfg"
|
|
||||||
if distutils_cfg.is_file():
|
|
||||||
# More than 1000 backup files is likely a different issue, so don't
|
|
||||||
# bother going further than that.
|
|
||||||
for counter in range(1000):
|
|
||||||
distutils_bak = distutils_cfg.with_suffix(f".{counter}.bak")
|
|
||||||
if not distutils_bak.exists():
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
log.warning(
|
|
||||||
f"Unable to configure setuptools for cross-compiling because existing {distutils_cfg} file cannot be backed up: Too many existing backup files were found"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Move the existing file and restore it when we exit
|
|
||||||
log.notice(
|
|
||||||
f"Preserving {distutils_cfg} as {distutils_bak.name}. It will be restored afterwards."
|
|
||||||
)
|
|
||||||
try:
|
|
||||||
distutils_cfg.replace(distutils_bak)
|
|
||||||
except OSError as exc:
|
|
||||||
log.warning(
|
|
||||||
f"Unable to configure setuptools for cross-compiling because existing {distutils_cfg} file cannot be backed up. Error was {exc}"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
cleanup_command_list.append(lambda: distutils_bak.replace(distutils_cfg))
|
|
||||||
elif distutils_cfg.is_dir():
|
|
||||||
log.warning(
|
|
||||||
f"Unable to configure setuptools for cross-compiling because {distutils_cfg} is a directory"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
cleanup_command_list.append(lambda: distutils_cfg.unlink())
|
|
||||||
|
|
||||||
# Ensure our additional import libraries are made available, and explicitly
|
# Ensure our additional import libraries are made available, and explicitly
|
||||||
# set the platform name
|
# set the platform name
|
||||||
@@ -186,8 +146,6 @@ def setup_setuptools_cross_compile(
|
|||||||
distutils_cfg.write_text(
|
distutils_cfg.write_text(
|
||||||
textwrap.dedent(
|
textwrap.dedent(
|
||||||
f"""\
|
f"""\
|
||||||
# I am a temporary configuration file generated by cibuildwheel.
|
|
||||||
# Please remove me or I will likely break your other builds.
|
|
||||||
[build]
|
[build]
|
||||||
plat_name={plat_name}
|
plat_name={plat_name}
|
||||||
[build_ext]
|
[build_ext]
|
||||||
@@ -221,7 +179,6 @@ def setup_rust_cross_compile(
|
|||||||
python_configuration: PythonConfiguration,
|
python_configuration: PythonConfiguration,
|
||||||
python_libs_base: Path,
|
python_libs_base: Path,
|
||||||
env: dict[str, str],
|
env: dict[str, str],
|
||||||
cleanup_command_list: list[Callable[[], Any]],
|
|
||||||
) -> None:
|
) -> None:
|
||||||
# Assume that MSVC will be used, because we already know that we are
|
# Assume that MSVC will be used, because we already know that we are
|
||||||
# cross-compiling. MinGW users can set CARGO_BUILD_TARGET themselves
|
# cross-compiling. MinGW users can set CARGO_BUILD_TARGET themselves
|
||||||
@@ -252,7 +209,6 @@ def setup_python(
|
|||||||
dependency_constraint_flags: Sequence[PathOrStr],
|
dependency_constraint_flags: Sequence[PathOrStr],
|
||||||
environment: ParsedEnvironment,
|
environment: ParsedEnvironment,
|
||||||
build_frontend: BuildFrontend,
|
build_frontend: BuildFrontend,
|
||||||
cleanup_command_list: list[Callable[[], Any]],
|
|
||||||
) -> dict[str, str]:
|
) -> dict[str, str]:
|
||||||
tmp.mkdir()
|
tmp.mkdir()
|
||||||
implementation_id = python_configuration.identifier.split("-")[0]
|
implementation_id = python_configuration.identifier.split("-")[0]
|
||||||
@@ -374,10 +330,8 @@ def setup_python(
|
|||||||
|
|
||||||
if python_libs_base:
|
if python_libs_base:
|
||||||
# Set up the environment for various backends to enable cross-compilation
|
# Set up the environment for various backends to enable cross-compilation
|
||||||
setup_setuptools_cross_compile(
|
setup_setuptools_cross_compile(python_configuration, python_libs_base, env)
|
||||||
python_configuration, python_libs_base, env, cleanup_command_list
|
setup_rust_cross_compile(python_configuration, python_libs_base, env)
|
||||||
)
|
|
||||||
setup_rust_cross_compile(python_configuration, python_libs_base, env, cleanup_command_list)
|
|
||||||
|
|
||||||
return env
|
return env
|
||||||
|
|
||||||
@@ -420,9 +374,6 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
build_options.dependency_constraints.get_for_python_version(config.version),
|
build_options.dependency_constraints.get_for_python_version(config.version),
|
||||||
]
|
]
|
||||||
|
|
||||||
# list of callables to do any urgent cleanup, for example,
|
|
||||||
# config files that may bleed into other builds
|
|
||||||
cleanup_command_list: list[Callable[[], Any]] = []
|
|
||||||
# install Python
|
# install Python
|
||||||
env = setup_python(
|
env = setup_python(
|
||||||
identifier_tmp_dir / "build",
|
identifier_tmp_dir / "build",
|
||||||
@@ -430,10 +381,8 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
dependency_constraint_flags,
|
dependency_constraint_flags,
|
||||||
build_options.environment,
|
build_options.environment,
|
||||||
build_options.build_frontend,
|
build_options.build_frontend,
|
||||||
cleanup_command_list,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
|
||||||
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
compatible_wheel = find_compatible_wheel(built_wheels, config.identifier)
|
||||||
if compatible_wheel:
|
if compatible_wheel:
|
||||||
log.step_end()
|
log.step_end()
|
||||||
@@ -529,10 +478,6 @@ def build(options: Options, tmp_path: Path) -> None:
|
|||||||
if repaired_wheel.name in {wheel.name for wheel in built_wheels}:
|
if repaired_wheel.name in {wheel.name for wheel in built_wheels}:
|
||||||
raise AlreadyBuiltWheelError(repaired_wheel.name)
|
raise AlreadyBuiltWheelError(repaired_wheel.name)
|
||||||
|
|
||||||
finally:
|
|
||||||
while cleanup_command_list:
|
|
||||||
cleanup_command_list.pop(0)()
|
|
||||||
|
|
||||||
if build_options.test_command and options.globals.test_selector(config.identifier):
|
if build_options.test_command and options.globals.test_selector(config.identifier):
|
||||||
if config.arch == "ARM64" != platform_module.machine():
|
if config.arch == "ARM64" != platform_module.machine():
|
||||||
log.warning(
|
log.warning(
|
||||||
|
|||||||
Reference in New Issue
Block a user