From 8c470c77ac2b750fc4f59b191b0a17e538c574af Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 1 May 2026 11:34:18 +0100 Subject: [PATCH 1/5] Add support for new build layout in Windows free-threaded builds --- windows-release/azure-pipelines.yml | 7 +++++++ windows-release/stage-build.yml | 26 +++++++++++++++----------- windows-release/stage-msi.yml | 13 +++++++------ 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/windows-release/azure-pipelines.yml b/windows-release/azure-pipelines.yml index c4460195..a57a9e9c 100644 --- a/windows-release/azure-pipelines.yml +++ b/windows-release/azure-pipelines.yml @@ -42,6 +42,10 @@ parameters: displayName: "Signature description" type: string default: '(default)' +- name: Post315OutputDir + displayName: "Separate free-threaded outputs (3.15.0b1 and later)" + type: boolean + default: false - name: DoTailCalling displayName: "Build with tail-calling support (3.15 and later)" type: boolean @@ -196,6 +200,8 @@ stages: TailCallingOption: '' ${{ else }}: TailCallingOption: '--tail-call-interp' + ArchSuffix: iif(eq(parameters.Post315OutputDir, 'true'), 't', '') + - stage: Sign displayName: Sign binaries dependsOn: Build @@ -269,6 +275,7 @@ stages: DoARM64: ${{ parameters.DoARM64}} DoFreethreaded: ${{ parameters.DoFreethreaded }} SigningCertificate: ${{ iif(eq(parameters.SigningCertificate, 'Unsigned'), '', parameters.SigningCertificate) }} + ArchSuffix: iif(eq(parameters.Post315OutputDir, 'true'), 't', '') - ${{ if eq(parameters.DoMSIX, 'true') }}: - template: stage-pack-msix.yml parameters: diff --git a/windows-release/stage-build.yml b/windows-release/stage-build.yml index 12d8076e..7c791e3b 100644 --- a/windows-release/stage-build.yml +++ b/windows-release/stage-build.yml @@ -7,6 +7,7 @@ parameters: ExtraOptions: '' ExtraOptionsFreethreaded: '--disable-gil' TailCallingOption: '' + ArchSuffix: '' jobs: - job: Build_Docs @@ -108,7 +109,7 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: win32_t: Name: win32_t - Arch: win32 + Arch: win32${{ parameters.ArchSuffix }} Platform: x86 Configuration: Release _HostPython: .\python @@ -119,7 +120,7 @@ jobs: Artifact: bin_win32_t win32_td: Name: win32_td - Arch: win32 + Arch: win32${{ parameters.ArchSuffix }} Platform: x86 Configuration: Debug _HostPython: .\python @@ -128,7 +129,7 @@ jobs: ${{ if ne(parameters.DoPGO, 'true') }}: amd64_t: Name: amd64_t - Arch: amd64 + Arch: amd64${{ parameters.ArchSuffix }} Platform: x64 Configuration: Release _HostPython: .\python @@ -139,7 +140,7 @@ jobs: Artifact: bin_amd64_t amd64_td: Name: amd64_td - Arch: amd64 + Arch: amd64${{ parameters.ArchSuffix }} Platform: x64 Configuration: Debug _HostPython: .\python @@ -148,7 +149,7 @@ jobs: ${{ if or(ne(parameters.DoPGO, 'true'), ne(parameters.DoPGOARM64, 'true')) }}: arm64_t: Name: arm64_t - Arch: arm64 + Arch: arm64${{ parameters.ArchSuffix }} Platform: ARM64 Configuration: Release _HostPython: python @@ -159,7 +160,7 @@ jobs: Artifact: bin_arm64_t arm64_td: Name: arm64_td - Arch: arm64 + Arch: arm64${{ parameters.ArchSuffix }} Platform: ARM64 Configuration: Debug _HostPython: python @@ -194,7 +195,7 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: amd64_t: Name: amd64_t - Arch: amd64 + Arch: amd64${{ parameters.ArchSuffix }} Platform: x64 _HostPython: .\python PythonExePattern: python3*t.exe @@ -220,7 +221,6 @@ jobs: clean: all variables: - Arch: arm64 Platform: ARM64 _HostPython: python @@ -228,6 +228,7 @@ jobs: matrix: arm64: Name: arm64 + Arch: arm64 PythonExePattern: python.exe ExtraOptions: ${{ parameters.ExtraOptions }} ${{ if eq(parameters.ToBeSigned, 'true') }}: @@ -237,7 +238,8 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: arm64_t: Name: arm64_t - PythonExePattern: python3*t.exe + Arch: arm64${{ parameters.ArchSuffix }} + PythonExePattern314: python3*t.exe ExtraOptions: ${{ parameters.ExtraOptionsFreethreaded }} ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64_t @@ -263,13 +265,13 @@ jobs: clean: all variables: - Arch: arm64 Platform: ARM64 strategy: matrix: arm64: Name: arm64 + Arch: arm64 PythonExePattern: python.exe ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64 @@ -278,6 +280,7 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: arm64_t: Name: arm64_t + Arch: arm64${{ parameters.ArchSuffix }} PythonExePattern: python3*t.exe ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64_t @@ -297,7 +300,6 @@ jobs: clean: all variables: - Arch: arm64 Platform: ARM64 _HostPython: python @@ -305,6 +307,7 @@ jobs: matrix: arm64: Name: arm64 + Arch: arm64 PythonExePattern: python.exe ExtraOptions: ${{ parameters.ExtraOptions }} ${{ if eq(parameters.ToBeSigned, 'true') }}: @@ -314,6 +317,7 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: arm64_t: Name: arm64_t + Arch: arm64${{ parameters.ArchSuffix }} PythonExePattern: python3*t.exe ExtraOptions: ${{ parameters.ExtraOptionsFreethreaded }} ${{ if eq(parameters.ToBeSigned, 'true') }}: diff --git a/windows-release/stage-msi.yml b/windows-release/stage-msi.yml index 4342a470..a7209c01 100644 --- a/windows-release/stage-msi.yml +++ b/windows-release/stage-msi.yml @@ -3,6 +3,7 @@ parameters: DoARM64: true DoFreethreaded: false SigningCertificate: '' + ArchSuffix: '' jobs: - job: Make_MSI @@ -52,18 +53,18 @@ jobs: # are not overwritten. - ${{ if eq(parameters.DoFreethreaded, 'true') }}: - artifact: bin_win32_t - target: $(Build.BinariesDirectory)\win32 + target: $(Build.BinariesDirectory)\win32${{parameters.ArchSuffix}} - artifact: bin_win32_td - target: $(Build.BinariesDirectory)\win32 + target: $(Build.BinariesDirectory)\win32${{parameters.ArchSuffix}} - artifact: bin_amd64_t - target: $(Build.BinariesDirectory)\amd64 + target: $(Build.BinariesDirectory)\amd64${{parameters.ArchSuffix}} - artifact: bin_amd64_td - target: $(Build.BinariesDirectory)\amd64 + target: $(Build.BinariesDirectory)\amd64${{parameters.ArchSuffix}} - ${{ if eq(parameters.DoARM64, 'true') }}: - artifact: bin_arm64_t - target: $(Build.BinariesDirectory)\arm64 + target: $(Build.BinariesDirectory)\arm64${{parameters.ArchSuffix}} - artifact: bin_arm64_td - target: $(Build.BinariesDirectory)\arm64 + target: $(Build.BinariesDirectory)\arm64${{parameters.ArchSuffix}} Bundles: - bundle: win32 Platform: x86 From f494f630c99df09f8fb4f6aaea6f43de474c08ae Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 1 May 2026 12:19:35 +0100 Subject: [PATCH 2/5] Quote parameter --- windows-release/azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/windows-release/azure-pipelines.yml b/windows-release/azure-pipelines.yml index a57a9e9c..ffe38ba1 100644 --- a/windows-release/azure-pipelines.yml +++ b/windows-release/azure-pipelines.yml @@ -200,7 +200,7 @@ stages: TailCallingOption: '' ${{ else }}: TailCallingOption: '--tail-call-interp' - ArchSuffix: iif(eq(parameters.Post315OutputDir, 'true'), 't', '') + ArchSuffix: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 't', '') }} - stage: Sign displayName: Sign binaries @@ -275,7 +275,7 @@ stages: DoARM64: ${{ parameters.DoARM64}} DoFreethreaded: ${{ parameters.DoFreethreaded }} SigningCertificate: ${{ iif(eq(parameters.SigningCertificate, 'Unsigned'), '', parameters.SigningCertificate) }} - ArchSuffix: iif(eq(parameters.Post315OutputDir, 'true'), 't', '') + ArchSuffix: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 't', '') }} - ${{ if eq(parameters.DoMSIX, 'true') }}: - template: stage-pack-msix.yml parameters: From b3fe9b6adfa9dcac13cf3e43a4e60aabd4dc3d3f Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 1 May 2026 12:54:06 +0100 Subject: [PATCH 3/5] Fix arch suffix applying too broadly --- windows-release/build-steps-pgo.yml | 18 ++++++------- windows-release/build-steps.yml | 8 +++--- windows-release/stage-build.yml | 40 +++++++++++++++++++++-------- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/windows-release/build-steps-pgo.yml b/windows-release/build-steps-pgo.yml index f55ec42c..5823cbd5 100644 --- a/windows-release/build-steps-pgo.yml +++ b/windows-release/build-steps-pgo.yml @@ -31,7 +31,7 @@ steps: - ${{ if ne(parameters.PGRun, 'true') }}: # Not running in this job, so we publish our entire build and object files - - publish: '$(Build.BinariesDirectory)\bin\$(Arch)\instrumented' + - publish: '$(Build.BinariesDirectory)\bin\$(ArchDir)\instrumented' artifact: instrumented_bin_$(Name) displayName: 'Publish binaries for profiling' @@ -54,10 +54,10 @@ steps: inputs: buildType: current artifact: instrumented_bin_$(Name) - targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)\instrumented' + targetPath: '$(Build.BinariesDirectory)\bin\$(ArchDir)\instrumented' - powershell: | - $exe = (gci "$(Build.BinariesDirectory)\bin\$(Arch)\instrumented\$(PythonExePattern)" | select -First 1) + $exe = (gci "$(Build.BinariesDirectory)\bin\$(ArchDir)\instrumented\$(PythonExePattern)" | select -First 1) & $exe -m test --pgo ignoreLASTEXITCODE: true displayName: 'Collect profile' @@ -67,7 +67,7 @@ steps: - ${{ if ne(parameters.PGUpdate, 'true') }}: # Not finishing in this job, so publish the binaries - - publish: '$(Build.BinariesDirectory)\bin\$(Arch)\instrumented' + - publish: '$(Build.BinariesDirectory)\bin\$(ArchDir)\instrumented' artifact: profile_bin_$(Name) displayName: 'Publish collected data and binaries' @@ -80,7 +80,7 @@ steps: inputs: buildType: current artifact: profile_bin_$(Name) - targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)\instrumented' + targetPath: '$(Build.BinariesDirectory)\bin\$(ArchDir)\instrumented' - task: DownloadPipelineArtifact@2 displayName: 'Download artifact: instrumented_obj_$(Name)' @@ -125,20 +125,20 @@ steps: } displayName: 'Generate catalog' env: - CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python + CAT: $(Build.BinariesDirectory)\bin\$(ArchDir)\python PYTHON_HEXVERSION: $(VersionHex) - powershell: | del instrumented -r -EA 0 del *.pgc, *.pgd, *.exp displayName: 'Cleanup build' - workingDirectory: '$(Build.BinariesDirectory)\bin\$(Arch)' + workingDirectory: '$(Build.BinariesDirectory)\bin\$(ArchDir)' - powershell: | copy "$(Build.SourcesDirectory)\Lib\venv\scripts\common\Activate.ps1" . displayName: 'Copy Powershell scripts from source' - workingDirectory: '$(Build.BinariesDirectory)\bin\$(Arch)' + workingDirectory: '$(Build.BinariesDirectory)\bin\$(ArchDir)' - - publish: '$(Build.BinariesDirectory)\bin\$(Arch)' + - publish: '$(Build.BinariesDirectory)\bin\$(ArchDir)' artifact: $(Artifact) displayName: 'Publish binaries' diff --git a/windows-release/build-steps.yml b/windows-release/build-steps.yml index 300d7e79..727c3634 100644 --- a/windows-release/build-steps.yml +++ b/windows-release/build-steps.yml @@ -52,19 +52,19 @@ steps: } displayName: 'Generate catalog' env: - CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python + CAT: $(Build.BinariesDirectory)\bin\$(ArchDir)\python PYTHON_HEXVERSION: $(VersionHex) - powershell: | del *.pgc, *.pgd, *.exp displayName: 'Cleanup binaries' - workingDirectory: '$(Build.BinariesDirectory)\bin\$(Arch)' + workingDirectory: '$(Build.BinariesDirectory)\bin\$(ArchDir)' - powershell: | copy "$(Build.SourcesDirectory)\Lib\venv\scripts\common\Activate.ps1" . displayName: 'Copy Powershell scripts from source' - workingDirectory: '$(Build.BinariesDirectory)\bin\$(Arch)' + workingDirectory: '$(Build.BinariesDirectory)\bin\$(ArchDir)' -- publish: '$(Build.BinariesDirectory)\bin\$(Arch)' +- publish: '$(Build.BinariesDirectory)\bin\$(ArchDir)' artifact: $(Artifact) displayName: 'Publish binaries' diff --git a/windows-release/stage-build.yml b/windows-release/stage-build.yml index 7c791e3b..b200f990 100644 --- a/windows-release/stage-build.yml +++ b/windows-release/stage-build.yml @@ -50,6 +50,7 @@ jobs: win32: Name: win32 Arch: win32 + ArchDir: win32 Platform: x86 Configuration: Release _HostPython: .\python @@ -61,6 +62,7 @@ jobs: win32_d: Name: win32_d Arch: win32 + ArchDir: win32 Platform: x86 Configuration: Debug _HostPython: .\python @@ -70,6 +72,7 @@ jobs: amd64: Name: amd64 Arch: amd64 + ArchDir: amd64 Platform: x64 Configuration: Release _HostPython: .\python @@ -81,6 +84,7 @@ jobs: amd64_d: Name: amd64_d Arch: amd64 + ArchDir: amd64 Platform: x64 Configuration: Debug _HostPython: .\python @@ -90,6 +94,7 @@ jobs: arm64: Name: arm64 Arch: arm64 + ArchDir: arm64 Platform: ARM64 Configuration: Release _HostPython: python @@ -101,6 +106,7 @@ jobs: arm64_d: Name: arm64_d Arch: arm64 + ArchDir: arm64 Platform: ARM64 Configuration: Debug _HostPython: python @@ -109,7 +115,8 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: win32_t: Name: win32_t - Arch: win32${{ parameters.ArchSuffix }} + Arch: win32 + ArchDir: win32${{ parameters.ArchSuffix }} Platform: x86 Configuration: Release _HostPython: .\python @@ -120,7 +127,8 @@ jobs: Artifact: bin_win32_t win32_td: Name: win32_td - Arch: win32${{ parameters.ArchSuffix }} + Arch: win32 + ArchDir: win32${{ parameters.ArchSuffix }} Platform: x86 Configuration: Debug _HostPython: .\python @@ -129,7 +137,8 @@ jobs: ${{ if ne(parameters.DoPGO, 'true') }}: amd64_t: Name: amd64_t - Arch: amd64${{ parameters.ArchSuffix }} + Arch: amd64 + ArchDir: amd64${{ parameters.ArchSuffix }} Platform: x64 Configuration: Release _HostPython: .\python @@ -140,7 +149,8 @@ jobs: Artifact: bin_amd64_t amd64_td: Name: amd64_td - Arch: amd64${{ parameters.ArchSuffix }} + Arch: amd64 + ArchDir: amd64${{ parameters.ArchSuffix }} Platform: x64 Configuration: Debug _HostPython: .\python @@ -149,7 +159,8 @@ jobs: ${{ if or(ne(parameters.DoPGO, 'true'), ne(parameters.DoPGOARM64, 'true')) }}: arm64_t: Name: arm64_t - Arch: arm64${{ parameters.ArchSuffix }} + Arch: arm64 + ArchDir: arm64${{ parameters.ArchSuffix }} Platform: ARM64 Configuration: Release _HostPython: python @@ -160,7 +171,8 @@ jobs: Artifact: bin_arm64_t arm64_td: Name: arm64_td - Arch: arm64${{ parameters.ArchSuffix }} + Arch: arm64 + ArchDir: arm64${{ parameters.ArchSuffix }} Platform: ARM64 Configuration: Debug _HostPython: python @@ -184,6 +196,7 @@ jobs: amd64: Name: amd64 Arch: amd64 + ArchDir: amd64 Platform: x64 _HostPython: .\python PythonExePattern: python.exe @@ -195,7 +208,8 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: amd64_t: Name: amd64_t - Arch: amd64${{ parameters.ArchSuffix }} + Arch: amd64 + ArchDir: amd64${{ parameters.ArchSuffix }} Platform: x64 _HostPython: .\python PythonExePattern: python3*t.exe @@ -229,6 +243,7 @@ jobs: arm64: Name: arm64 Arch: arm64 + ArchDir: arm64 PythonExePattern: python.exe ExtraOptions: ${{ parameters.ExtraOptions }} ${{ if eq(parameters.ToBeSigned, 'true') }}: @@ -238,7 +253,8 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: arm64_t: Name: arm64_t - Arch: arm64${{ parameters.ArchSuffix }} + Arch: arm64 + ArchDir: arm64${{ parameters.ArchSuffix }} PythonExePattern314: python3*t.exe ExtraOptions: ${{ parameters.ExtraOptionsFreethreaded }} ${{ if eq(parameters.ToBeSigned, 'true') }}: @@ -272,6 +288,7 @@ jobs: arm64: Name: arm64 Arch: arm64 + ArchDir: arm64 PythonExePattern: python.exe ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64 @@ -280,7 +297,8 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: arm64_t: Name: arm64_t - Arch: arm64${{ parameters.ArchSuffix }} + Arch: arm64 + ArchDir: arm64${{ parameters.ArchSuffix }} PythonExePattern: python3*t.exe ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64_t @@ -308,6 +326,7 @@ jobs: arm64: Name: arm64 Arch: arm64 + ArchDir: arm64 PythonExePattern: python.exe ExtraOptions: ${{ parameters.ExtraOptions }} ${{ if eq(parameters.ToBeSigned, 'true') }}: @@ -317,7 +336,8 @@ jobs: ${{ if eq(parameters.DoFreethreaded, 'true') }}: arm64_t: Name: arm64_t - Arch: arm64${{ parameters.ArchSuffix }} + Arch: arm64 + ArchDir: arm64${{ parameters.ArchSuffix }} PythonExePattern: python3*t.exe ExtraOptions: ${{ parameters.ExtraOptionsFreethreaded }} ${{ if eq(parameters.ToBeSigned, 'true') }}: From ef14a4f73ce6895944e281ced8c4f12de1083fb0 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 1 May 2026 15:42:27 +0100 Subject: [PATCH 4/5] Pass parameter differently --- windows-release/azure-pipelines.yml | 4 +-- windows-release/stage-build.yml | 30 ++++++++++---------- windows-release/stage-msi.yml | 43 +++++++++++++++++++---------- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/windows-release/azure-pipelines.yml b/windows-release/azure-pipelines.yml index ffe38ba1..2ef27545 100644 --- a/windows-release/azure-pipelines.yml +++ b/windows-release/azure-pipelines.yml @@ -200,7 +200,7 @@ stages: TailCallingOption: '' ${{ else }}: TailCallingOption: '--tail-call-interp' - ArchSuffix: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 't', '') }} + Post315OutputDir: ${{ parameters.Post315OutputDir }} - stage: Sign displayName: Sign binaries @@ -275,7 +275,7 @@ stages: DoARM64: ${{ parameters.DoARM64}} DoFreethreaded: ${{ parameters.DoFreethreaded }} SigningCertificate: ${{ iif(eq(parameters.SigningCertificate, 'Unsigned'), '', parameters.SigningCertificate) }} - ArchSuffix: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 't', '') }} + Post315OutputDir: ${{ parameters.Post315OutputDir }} - ${{ if eq(parameters.DoMSIX, 'true') }}: - template: stage-pack-msix.yml parameters: diff --git a/windows-release/stage-build.yml b/windows-release/stage-build.yml index b200f990..3facc985 100644 --- a/windows-release/stage-build.yml +++ b/windows-release/stage-build.yml @@ -7,7 +7,7 @@ parameters: ExtraOptions: '' ExtraOptionsFreethreaded: '--disable-gil' TailCallingOption: '' - ArchSuffix: '' + Post315OutputDir: false jobs: - job: Build_Docs @@ -116,7 +116,7 @@ jobs: win32_t: Name: win32_t Arch: win32 - ArchDir: win32${{ parameters.ArchSuffix }} + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'win32t', 'win32') }} Platform: x86 Configuration: Release _HostPython: .\python @@ -128,7 +128,7 @@ jobs: win32_td: Name: win32_td Arch: win32 - ArchDir: win32${{ parameters.ArchSuffix }} + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'win32t', 'win32') }} Platform: x86 Configuration: Debug _HostPython: .\python @@ -138,7 +138,7 @@ jobs: amd64_t: Name: amd64_t Arch: amd64 - ArchDir: amd64${{ parameters.ArchSuffix }} + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'amd64t', 'amd64') }} Platform: x64 Configuration: Release _HostPython: .\python @@ -150,7 +150,7 @@ jobs: amd64_td: Name: amd64_td Arch: amd64 - ArchDir: amd64${{ parameters.ArchSuffix }} + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'amd64t', 'amd64') }} Platform: x64 Configuration: Debug _HostPython: .\python @@ -160,7 +160,7 @@ jobs: arm64_t: Name: arm64_t Arch: arm64 - ArchDir: arm64${{ parameters.ArchSuffix }} + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'arm64t', 'arm64') }} Platform: ARM64 Configuration: Release _HostPython: python @@ -172,7 +172,7 @@ jobs: arm64_td: Name: arm64_td Arch: arm64 - ArchDir: arm64${{ parameters.ArchSuffix }} + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'arm64t', 'arm64') }} Platform: ARM64 Configuration: Debug _HostPython: python @@ -209,10 +209,10 @@ jobs: amd64_t: Name: amd64_t Arch: amd64 - ArchDir: amd64${{ parameters.ArchSuffix }} + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'amd64t', 'amd64') }} Platform: x64 _HostPython: .\python - PythonExePattern: python3*t.exe + PythonExePattern: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'python.exe', 'python3*t.exe') }} ExtraOptions: ${{ parameters.ExtraOptionsFreethreaded }} ${{ parameters.TailCallingOption }} ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_amd64_t @@ -254,8 +254,8 @@ jobs: arm64_t: Name: arm64_t Arch: arm64 - ArchDir: arm64${{ parameters.ArchSuffix }} - PythonExePattern314: python3*t.exe + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'arm64t', 'arm64') }} + PythonExePattern: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'python.exe', 'python3*t.exe') }} ExtraOptions: ${{ parameters.ExtraOptionsFreethreaded }} ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64_t @@ -298,8 +298,8 @@ jobs: arm64_t: Name: arm64_t Arch: arm64 - ArchDir: arm64${{ parameters.ArchSuffix }} - PythonExePattern: python3*t.exe + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'arm64t', 'arm64') }} + PythonExePattern: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'python.exe', 'python3*t.exe') }} ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64_t ${{ else }}: @@ -337,8 +337,8 @@ jobs: arm64_t: Name: arm64_t Arch: arm64 - ArchDir: arm64${{ parameters.ArchSuffix }} - PythonExePattern: python3*t.exe + ArchDir: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'arm64t', 'arm64') }} + PythonExePattern: ${{ iif(eq(parameters.Post315OutputDir, 'true'), 'python.exe', 'python3*t.exe') }} ExtraOptions: ${{ parameters.ExtraOptionsFreethreaded }} ${{ if eq(parameters.ToBeSigned, 'true') }}: Artifact: unsigned_arm64_t diff --git a/windows-release/stage-msi.yml b/windows-release/stage-msi.yml index a7209c01..42474f19 100644 --- a/windows-release/stage-msi.yml +++ b/windows-release/stage-msi.yml @@ -3,7 +3,7 @@ parameters: DoARM64: true DoFreethreaded: false SigningCertificate: '' - ArchSuffix: '' + Post315OutputDir: false jobs: - job: Make_MSI @@ -52,19 +52,34 @@ jobs: # Freethreaded binaries copy into the same target directory, but files # are not overwritten. - ${{ if eq(parameters.DoFreethreaded, 'true') }}: - - artifact: bin_win32_t - target: $(Build.BinariesDirectory)\win32${{parameters.ArchSuffix}} - - artifact: bin_win32_td - target: $(Build.BinariesDirectory)\win32${{parameters.ArchSuffix}} - - artifact: bin_amd64_t - target: $(Build.BinariesDirectory)\amd64${{parameters.ArchSuffix}} - - artifact: bin_amd64_td - target: $(Build.BinariesDirectory)\amd64${{parameters.ArchSuffix}} - - ${{ if eq(parameters.DoARM64, 'true') }}: - - artifact: bin_arm64_t - target: $(Build.BinariesDirectory)\arm64${{parameters.ArchSuffix}} - - artifact: bin_arm64_td - target: $(Build.BinariesDirectory)\arm64${{parameters.ArchSuffix}} + - ${{ if eq(parameters.Post315OutputDir, 'true') }}: + - artifact: bin_win32_t + target: $(Build.BinariesDirectory)\win32t + - artifact: bin_win32_td + target: $(Build.BinariesDirectory)\win32t + - artifact: bin_amd64_t + target: $(Build.BinariesDirectory)\amd64t + - artifact: bin_amd64_td + target: $(Build.BinariesDirectory)\amd64t + - ${{ if eq(parameters.DoARM64, 'true') }}: + - artifact: bin_arm64_t + target: $(Build.BinariesDirectory)\arm64t + - artifact: bin_arm64_td + target: $(Build.BinariesDirectory)\arm64t + - ${{ else }}: + - artifact: bin_win32_t + target: $(Build.BinariesDirectory)\win32 + - artifact: bin_win32_td + target: $(Build.BinariesDirectory)\win32 + - artifact: bin_amd64_t + target: $(Build.BinariesDirectory)\amd64 + - artifact: bin_amd64_td + target: $(Build.BinariesDirectory)\amd64 + - ${{ if eq(parameters.DoARM64, 'true') }}: + - artifact: bin_arm64_t + target: $(Build.BinariesDirectory)\arm64 + - artifact: bin_arm64_td + target: $(Build.BinariesDirectory)\arm64 Bundles: - bundle: win32 Platform: x86 From 545f3520f0a1f5827a20805c397e9c65197cf055 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 1 May 2026 20:37:57 +0100 Subject: [PATCH 5/5] Update windows-release/azure-pipelines.yml Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- windows-release/azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows-release/azure-pipelines.yml b/windows-release/azure-pipelines.yml index 2ef27545..3a1c9100 100644 --- a/windows-release/azure-pipelines.yml +++ b/windows-release/azure-pipelines.yml @@ -43,7 +43,7 @@ parameters: type: string default: '(default)' - name: Post315OutputDir - displayName: "Separate free-threaded outputs (3.15.0b1 and later)" + displayName: "Separate free-threaded outputs (3.15 and later)" type: boolean default: false - name: DoTailCalling