From bb3e18c211907024a4d77439f5640b3c820a8383 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 19 Jul 2026 12:23:37 +0800 Subject: [PATCH] Fix deps python3 build failure on Windows (#14831) * Fix deps python3 build failure on Windows * Fix build on other platforms --- deps/python3/01-windows-nuget.patch | 71 +++++++++++++++++++++++++++++ deps/python3/python3.cmake | 10 ++++ 2 files changed, 81 insertions(+) create mode 100644 deps/python3/01-windows-nuget.patch diff --git a/deps/python3/01-windows-nuget.patch b/deps/python3/01-windows-nuget.patch new file mode 100644 index 0000000000..a3b8439779 --- /dev/null +++ b/deps/python3/01-windows-nuget.patch @@ -0,0 +1,71 @@ +From b32e63f75046d186d93ee7d627c978f2f7c892f3 Mon Sep 17 00:00:00 2001 +From: Steve Dower +Date: Fri, 10 Jul 2026 14:04:00 +0100 +Subject: [PATCH] [3.13] gh-153438: Update NuGet download URL (GH-153482) + (GH-153515) + +gh-153438: Update NuGet download URL (GH-153482) +(cherry picked from commit 106eb532ea3b243423e62a702719e9d3c0e40c16) +(cherry picked from commit 62eb50d65d538dda5164f9c4a097a896454a0d1c) + +Co-authored-by: Steve Dower +Co-authored-by: Harjoth Khara +--- + Doc/using/windows.rst | 6 +++--- + .../Build/2026-07-09-22-45-00.gh-issue-153438.Qr7N2p.rst | 2 ++ + PCbuild/find_python.bat | 2 +- + Tools/msi/get_externals.bat | 2 +- + 4 files changed, 7 insertions(+), 5 deletions(-) + create mode 100644 Misc/NEWS.d/next/Build/2026-07-09-22-45-00.gh-issue-153438.Qr7N2p.rst + +diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst +index 2a507675044666..4800789ca2d6cc 100644 +--- a/Doc/using/windows.rst ++++ b/Doc/using/windows.rst +@@ -414,9 +414,9 @@ on using nuget. What follows is a summary that is sufficient for Python + developers. + + The ``nuget.exe`` command line tool may be downloaded directly from +-``https://aka.ms/nugetclidl``, for example, using curl or PowerShell. With the +-tool, the latest version of Python for 64-bit or 32-bit machines is installed +-using:: ++``https://dist.nuget.org/win-x86-commandline/latest/nuget.exe``, for example, ++using curl or PowerShell. With the tool, the latest version of Python for ++64-bit or 32-bit machines is installed using:: + + nuget.exe install python -ExcludeVersion -OutputDirectory . + nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory . +diff --git a/Misc/NEWS.d/next/Build/2026-07-09-22-45-00.gh-issue-153438.Qr7N2p.rst b/Misc/NEWS.d/next/Build/2026-07-09-22-45-00.gh-issue-153438.Qr7N2p.rst +new file mode 100644 +index 00000000000000..edab8e6ba7b259 +--- /dev/null ++++ b/Misc/NEWS.d/next/Build/2026-07-09-22-45-00.gh-issue-153438.Qr7N2p.rst +@@ -0,0 +1,2 @@ ++Update Windows build and installer tooling and documentation to use the ++current download URL for ``nuget.exe``. +diff --git a/PCbuild/find_python.bat b/PCbuild/find_python.bat +index 0af367a3efafad..9612a2860ef9c3 100644 +--- a/PCbuild/find_python.bat ++++ b/PCbuild/find_python.bat +@@ -52,7 +52,7 @@ + @set _Py_HOST_PYTHON=%HOST_PYTHON% + @if "%_Py_HOST_PYTHON%"=="" set _Py_HOST_PYTHON=py + @if "%_Py_NUGET%"=="" (set _Py_NUGET=%_Py_EXTERNALS_DIR%\nuget.exe) +-@if "%_Py_NUGET_URL%"=="" (set _Py_NUGET_URL=https://aka.ms/nugetclidl) ++@if "%_Py_NUGET_URL%"=="" (set _Py_NUGET_URL=https://dist.nuget.org/win-x86-commandline/latest/nuget.exe) + @if NOT exist "%_Py_NUGET%" ( + @if not "%_Py_Quiet%"=="1" @echo Downloading nuget... + @rem NB: Must use single quotes around NUGET here, NOT double! +diff --git a/Tools/msi/get_externals.bat b/Tools/msi/get_externals.bat +index f6602ce9588ff4..c7c7e9f470bc25 100644 +--- a/Tools/msi/get_externals.bat ++++ b/Tools/msi/get_externals.bat +@@ -6,7 +6,7 @@ set HERE=%~dp0 + if "%PCBUILD%"=="" (set PCBUILD=%HERE%..\..\PCbuild\) + if "%EXTERNALS_DIR%"=="" (set EXTERNALS_DIR=%HERE%..\..\externals\windows-installer) + if "%NUGET%"=="" (set NUGET=%EXTERNALS_DIR%\..\nuget.exe) +-if "%NUGET_URL%"=="" (set NUGET_URL=https://aka.ms/nugetclidl) ++if "%NUGET_URL%"=="" (set NUGET_URL=https://dist.nuget.org/win-x86-commandline/latest/nuget.exe) + + set DO_FETCH=true + set DO_CLEAN=false diff --git a/deps/python3/python3.cmake b/deps/python3/python3.cmake index 142d130c4d..e93045fe45 100644 --- a/deps/python3/python3.cmake +++ b/deps/python3/python3.cmake @@ -7,7 +7,16 @@ string(REGEX REPLACE "^([0-9]+\\.[0-9]+)\\..*" "\\1" _python_version_short "${_p set(_python_url "https://www.python.org/ftp/python/${_python_version}/Python-${_python_version}.tar.xz") set(_python_sha256 "c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684") + +set(_patch_cmd "") if(WIN32) + + # Fix python build failure on Windows if python is not available, due to wrong nuget download URL + # See https://github.com/python/cpython/issues/153438 + # Patch from https://github.com/python/cpython/pull/153608 + # This patch has not been merged to 3.12 yet so we need to apply it manually + set(_patch_cmd git init && ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/01-windows-nuget.patch) + if(MSVC_VERSION EQUAL 1800) set(_python_platform_toolset v120) elseif(MSVC_VERSION EQUAL 1900) @@ -253,6 +262,7 @@ endif() ExternalProject_Add(dep_python3 URL "${_python_url}" URL_HASH SHA256=${_python_sha256} + PATCH_COMMAND ${_patch_cmd} DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/python3 BUILD_IN_SOURCE ON CONFIGURE_COMMAND ${_conf_cmd}