https://github.com/python/cpython/commit/42d014086098d3d70cacb4d8993f04cace120c12
commit: 42d014086098d3d70cacb4d8993f04cace120c12
branch: main
author: Savannah Ostrowski <[email protected]>
committer: savannahostrowski <[email protected]>
date: 2025-11-06T11:58:01-08:00
summary:
GH-136895: Fixes for pulling LLVM as a release artifact (#141002)
files:
M PCbuild/get_external.py
M Tools/jit/_llvm.py
diff --git a/PCbuild/get_external.py b/PCbuild/get_external.py
index 07970624e8647e..edf14ce578bce6 100755
--- a/PCbuild/get_external.py
+++ b/PCbuild/get_external.py
@@ -3,8 +3,8 @@
import argparse
import os
import pathlib
-import shutil
import sys
+import tarfile
import time
import urllib.error
import urllib.request
@@ -56,7 +56,8 @@ def fetch_release(tag, tarball_dir, *, org='python',
verbose=False):
def extract_tarball(externals_dir, tarball_path, tag):
output_path = externals_dir / tag
- shutil.unpack_archive(os.fspath(tarball_path), os.fspath(output_path))
+ with tarfile.open(tarball_path) as tf:
+ tf.extractall(os.fspath(externals_dir))
return output_path
@@ -115,21 +116,23 @@ def main():
verbose=args.verbose,
)
extracted = extract_zip(args.externals_dir, zip_path)
- for wait in [1, 2, 3, 5, 8, 0]:
- try:
- extracted.replace(final_name)
- break
- except PermissionError as ex:
- retry = f" Retrying in {wait}s..." if wait else ""
- print(f"Encountered permission error '{ex}'.{retry}",
file=sys.stderr)
- time.sleep(wait)
- else:
- print(
- f"ERROR: Failed to extract {final_name}.",
- "You may need to restart your build",
- file=sys.stderr,
- )
- sys.exit(1)
+
+ if extracted != final_name:
+ for wait in [1, 2, 3, 5, 8, 0]:
+ try:
+ extracted.replace(final_name)
+ break
+ except PermissionError as ex:
+ retry = f" Retrying in {wait}s..." if wait else ""
+ print(f"Encountered permission error '{ex}'.{retry}",
file=sys.stderr)
+ time.sleep(wait)
+ else:
+ print(
+ f"ERROR: Failed to rename {extracted} to {final_name}.",
+ "You may need to restart your build",
+ file=sys.stderr,
+ )
+ sys.exit(1)
if __name__ == '__main__':
diff --git a/Tools/jit/_llvm.py b/Tools/jit/_llvm.py
index 54c2bf86a36ed6..f1b0ad3f5dbc43 100644
--- a/Tools/jit/_llvm.py
+++ b/Tools/jit/_llvm.py
@@ -83,6 +83,11 @@ async def _find_tool(tool: str, llvm_version: str, *, echo:
bool = False) -> str
# PCbuild externals:
externals = os.environ.get("EXTERNALS_DIR", _targets.EXTERNALS)
path = os.path.join(externals, _EXTERNALS_LLVM_TAG, "bin", tool)
+ # On Windows, executables need .exe extension
+ if os.name == "nt" and not path.endswith(".exe"):
+ path_with_exe = path + ".exe"
+ if os.path.exists(path_with_exe):
+ path = path_with_exe
if await _check_tool_version(path, llvm_version, echo=echo):
return path
# Homebrew-installed executables:
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]