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]

Reply via email to