bpo-33125: Add support for building and releasing Windows ARM64 packages (GH-16828)
Note that the support is not actually enabled yet, and so we won't be publishing these packages. However, for those who want to build it themselves (even by reusing the Azure Pipelines definition), it's now relatively easy to enable.
This commit is contained in:
parent
abce2d9bc6
commit
de148f263f
|
@ -145,7 +145,7 @@ jobs:
|
||||||
buildOpt: '-p x64'
|
buildOpt: '-p x64'
|
||||||
testRunTitle: '$(Build.SourceBranchName)-win64'
|
testRunTitle: '$(Build.SourceBranchName)-win64'
|
||||||
testRunPlatform: win64
|
testRunPlatform: win64
|
||||||
maxParallel: 2
|
maxParallel: 4
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- template: ./windows-steps.yml
|
- template: ./windows-steps.yml
|
||||||
|
|
|
@ -145,7 +145,10 @@ jobs:
|
||||||
buildOpt: '-p x64'
|
buildOpt: '-p x64'
|
||||||
testRunTitle: '$(System.PullRequest.TargetBranch)-win64'
|
testRunTitle: '$(System.PullRequest.TargetBranch)-win64'
|
||||||
testRunPlatform: win64
|
testRunPlatform: win64
|
||||||
maxParallel: 2
|
winarm64:
|
||||||
|
arch: arm64
|
||||||
|
buildOpt: '-p arm64'
|
||||||
|
maxParallel: 4
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- template: ./windows-steps.yml
|
- template: ./windows-steps.yml
|
||||||
|
|
|
@ -43,7 +43,7 @@ steps:
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
$env:SigningCertificate = $null
|
$env:SigningCertificate = $null
|
||||||
.\python.bat PC\layout -vv -t "$(Build.BinariesDirectory)\catalog" --catalog "${env:CAT}.cdf" --preset-default
|
python PC\layout -vv -b "$(Build.BinariesDirectory)\bin" -t "$(Build.BinariesDirectory)\catalog" --catalog "${env:CAT}.cdf" --preset-default --arch $(Arch)
|
||||||
makecat "${env:CAT}.cdf"
|
makecat "${env:CAT}.cdf"
|
||||||
del "${env:CAT}.cdf"
|
del "${env:CAT}.cdf"
|
||||||
if (-not (Test-Path "${env:CAT}.cat")) {
|
if (-not (Test-Path "${env:CAT}.cat")) {
|
||||||
|
@ -52,6 +52,7 @@ steps:
|
||||||
displayName: 'Generate catalog'
|
displayName: 'Generate catalog'
|
||||||
env:
|
env:
|
||||||
CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
|
CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
|
||||||
|
PYTHON_HEXVERSION: $(VersionHex)
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- task: PublishPipelineArtifact@0
|
||||||
displayName: 'Publish binaries'
|
displayName: 'Publish binaries'
|
||||||
|
|
|
@ -1,12 +1,20 @@
|
||||||
steps:
|
steps:
|
||||||
|
- task: DownloadPipelineArtifact@1
|
||||||
|
displayName: 'Download artifact: bin_$(HostArch)'
|
||||||
|
condition: and(succeeded(), variables['HostArch'])
|
||||||
|
inputs:
|
||||||
|
artifactName: bin_$(HostArch)
|
||||||
|
targetPath: $(Build.BinariesDirectory)\bin_$(HostArch)
|
||||||
|
|
||||||
- powershell: >
|
- powershell: >
|
||||||
Write-Host (
|
Write-Host (
|
||||||
'##vso[task.setvariable variable=LayoutCmd]&
|
'##vso[task.setvariable variable=LayoutCmd]&
|
||||||
"{0}\bin\python.exe"
|
"$(Python)"
|
||||||
"{1}\PC\layout"
|
"{1}\PC\layout"
|
||||||
-vv
|
-vv
|
||||||
--source "{1}"
|
--source "{1}"
|
||||||
--build "{0}\bin"
|
--build "{0}\bin"
|
||||||
|
--arch "$(Name)"
|
||||||
--temp "{0}\layout-temp"
|
--temp "{0}\layout-temp"
|
||||||
--include-cat "{0}\bin\python.cat"
|
--include-cat "{0}\bin\python.cat"
|
||||||
--doc-build "{0}\doc"'
|
--doc-build "{0}\doc"'
|
||||||
|
|
|
@ -54,6 +54,7 @@ steps:
|
||||||
- powershell: |
|
- powershell: |
|
||||||
copy $(Build.BinariesDirectory)\amd64\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
copy $(Build.BinariesDirectory)\amd64\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
||||||
displayName: 'Copy signed files into sources'
|
displayName: 'Copy signed files into sources'
|
||||||
|
condition: and(succeeded(), variables['SigningCertificate'])
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
call Tools\msi\get_externals.bat
|
call Tools\msi\get_externals.bat
|
||||||
|
|
|
@ -16,14 +16,16 @@ jobs:
|
||||||
env:
|
env:
|
||||||
BUILDDIR: $(Build.BinariesDirectory)\Doc
|
BUILDDIR: $(Build.BinariesDirectory)\Doc
|
||||||
|
|
||||||
#- powershell: iwr "https://www.python.org/ftp/python/3.7.3/python373.chm" -OutFile "$(Build.BinariesDirectory)\python390a0.chm"
|
|
||||||
# displayName: 'Cheat at building CHM docs'
|
|
||||||
|
|
||||||
- script: Doc\make.bat htmlhelp
|
- script: Doc\make.bat htmlhelp
|
||||||
displayName: 'Build CHM docs'
|
displayName: 'Build CHM docs'
|
||||||
env:
|
env:
|
||||||
BUILDDIR: $(Build.BinariesDirectory)\Doc
|
BUILDDIR: $(Build.BinariesDirectory)\Doc
|
||||||
|
|
||||||
|
#- powershell: |
|
||||||
|
# mkdir -Force "$(Build.BinariesDirectory)\Doc\htmlhelp"
|
||||||
|
# iwr "https://www.python.org/ftp/python/3.8.0/python380.chm" -OutFile "$(Build.BinariesDirectory)\Doc\htmlhelp\python390a0.chm"
|
||||||
|
# displayName: 'Cheat at building CHM docs'
|
||||||
|
|
||||||
- task: CopyFiles@2
|
- task: CopyFiles@2
|
||||||
displayName: 'Assemble artifact: Doc'
|
displayName: 'Assemble artifact: Doc'
|
||||||
inputs:
|
inputs:
|
||||||
|
@ -65,6 +67,16 @@ jobs:
|
||||||
Arch: amd64
|
Arch: amd64
|
||||||
Platform: x64
|
Platform: x64
|
||||||
Configuration: Debug
|
Configuration: Debug
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
Arch: arm64
|
||||||
|
Platform: ARM64
|
||||||
|
Configuration: Release
|
||||||
|
arm64_d:
|
||||||
|
Name: arm64_d
|
||||||
|
Arch: arm64
|
||||||
|
Platform: ARM64
|
||||||
|
Configuration: Debug
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- template: ./build-steps.yml
|
- template: ./build-steps.yml
|
||||||
|
|
|
@ -19,6 +19,11 @@ jobs:
|
||||||
Name: amd64
|
Name: amd64
|
||||||
Python: $(Build.BinariesDirectory)\bin\python.exe
|
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||||
PYTHONHOME: $(Build.SourcesDirectory)
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
HostArch: amd64
|
||||||
|
Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
|
||||||
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- template: ./checkout.yml
|
- template: ./checkout.yml
|
||||||
|
|
|
@ -13,11 +13,18 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
win32:
|
win32:
|
||||||
Name: win32
|
Name: win32
|
||||||
Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||||
PYTHONHOME: $(Build.SourcesDirectory)
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||||
amd64:
|
amd64:
|
||||||
Name: amd64
|
Name: amd64
|
||||||
Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||||
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
HostArch: amd64
|
||||||
|
Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
|
||||||
PYTHONHOME: $(Build.SourcesDirectory)
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -43,13 +50,15 @@ jobs:
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
- task: DownloadPipelineArtifact@1
|
||||||
displayName: 'Download artifact: tcltk_lib_$(Name)'
|
displayName: 'Download artifact: tcltk_lib_$(Name)'
|
||||||
|
condition: and(succeeded(), variables['TclLibrary'])
|
||||||
inputs:
|
inputs:
|
||||||
artifactName: tcltk_lib_$(Name)
|
artifactName: tcltk_lib_$(Name)
|
||||||
targetPath: $(Build.BinariesDirectory)\tcltk_lib
|
targetPath: $(Build.BinariesDirectory)\tcltk_lib
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
copy $(Build.BinariesDirectory)\bin\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
copy "$(Build.BinariesDirectory)\bin\Activate.ps1" Lib\venv\scripts\common\Activate.ps1 -Force
|
||||||
displayName: 'Copy signed files into sources'
|
displayName: 'Copy signed files into sources'
|
||||||
|
condition: and(succeeded(), variables['SigningCertificate'])
|
||||||
|
|
||||||
- template: ./layout-command.yml
|
- template: ./layout-command.yml
|
||||||
|
|
||||||
|
@ -57,7 +66,7 @@ jobs:
|
||||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
|
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
|
||||||
displayName: 'Generate full layout'
|
displayName: 'Generate full layout'
|
||||||
env:
|
env:
|
||||||
TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
TCL_LIBRARY: $(TclLibrary)
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- task: PublishPipelineArtifact@0
|
||||||
displayName: 'Publish Artifact: layout_full_$(Name)'
|
displayName: 'Publish Artifact: layout_full_$(Name)'
|
||||||
|
|
|
@ -12,11 +12,18 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
#win32:
|
#win32:
|
||||||
# Name: win32
|
# Name: win32
|
||||||
# Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
# Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||||
# PYTHONHOME: $(Build.SourcesDirectory)
|
# PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
# TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||||
amd64:
|
amd64:
|
||||||
Name: amd64
|
Name: amd64
|
||||||
Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||||
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
HostArch: amd64
|
||||||
|
Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
|
||||||
PYTHONHOME: $(Build.SourcesDirectory)
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -36,13 +43,15 @@ jobs:
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
- task: DownloadPipelineArtifact@1
|
||||||
displayName: 'Download artifact: tcltk_lib_$(Name)'
|
displayName: 'Download artifact: tcltk_lib_$(Name)'
|
||||||
|
condition: and(succeeded(), variables['TclLibrary'])
|
||||||
inputs:
|
inputs:
|
||||||
artifactName: tcltk_lib_$(Name)
|
artifactName: tcltk_lib_$(Name)
|
||||||
targetPath: $(Build.BinariesDirectory)\tcltk_lib
|
targetPath: $(Build.BinariesDirectory)\tcltk_lib
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
copy $(Build.BinariesDirectory)\bin\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
copy "$(Build.BinariesDirectory)\bin\Activate.ps1" Lib\venv\scripts\common\Activate.ps1 -Force
|
||||||
displayName: 'Copy signed files into sources'
|
displayName: 'Copy signed files into sources'
|
||||||
|
condition: and(succeeded(), variables['SigningCertificate'])
|
||||||
|
|
||||||
- template: ./layout-command.yml
|
- template: ./layout-command.yml
|
||||||
|
|
||||||
|
@ -51,7 +60,7 @@ jobs:
|
||||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
|
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
|
||||||
displayName: 'Generate store APPX layout'
|
displayName: 'Generate store APPX layout'
|
||||||
env:
|
env:
|
||||||
TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
TCL_LIBRARY: $(TclLibrary)
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- task: PublishPipelineArtifact@0
|
||||||
displayName: 'Publish Artifact: layout_appxstore_$(Name)'
|
displayName: 'Publish Artifact: layout_appxstore_$(Name)'
|
||||||
|
@ -79,7 +88,7 @@ jobs:
|
||||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
|
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
|
||||||
displayName: 'Generate sideloading APPX layout'
|
displayName: 'Generate sideloading APPX layout'
|
||||||
env:
|
env:
|
||||||
TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
TCL_LIBRARY: $(TclLibrary)
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- task: PublishPipelineArtifact@0
|
||||||
displayName: 'Publish Artifact: layout_appx_$(Name)'
|
displayName: 'Publish Artifact: layout_appx_$(Name)'
|
||||||
|
|
|
@ -13,11 +13,16 @@ jobs:
|
||||||
matrix:
|
matrix:
|
||||||
win32:
|
win32:
|
||||||
Name: win32
|
Name: win32
|
||||||
Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||||
PYTHONHOME: $(Build.SourcesDirectory)
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
amd64:
|
amd64:
|
||||||
Name: amd64
|
Name: amd64
|
||||||
Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||||
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
HostArch: amd64
|
||||||
|
Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
|
||||||
PYTHONHOME: $(Build.SourcesDirectory)
|
PYTHONHOME: $(Build.SourcesDirectory)
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -32,14 +37,13 @@ jobs:
|
||||||
- powershell: |
|
- powershell: |
|
||||||
copy $(Build.BinariesDirectory)\bin\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
copy $(Build.BinariesDirectory)\bin\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
||||||
displayName: 'Copy signed files into sources'
|
displayName: 'Copy signed files into sources'
|
||||||
|
condition: and(succeeded(), variables['SigningCertificate'])
|
||||||
|
|
||||||
- template: ./layout-command.yml
|
- template: ./layout-command.yml
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
|
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
|
||||||
displayName: 'Generate nuget layout'
|
displayName: 'Generate nuget layout'
|
||||||
env:
|
|
||||||
TCL_LIBRARY: $(Build.BinariesDirectory)\bin_$(Name)\tcl\tcl8
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- task: PublishPipelineArtifact@0
|
||||||
displayName: 'Publish Artifact: layout_nuget_$(Name)'
|
displayName: 'Publish Artifact: layout_nuget_$(Name)'
|
||||||
|
|
|
@ -20,6 +20,16 @@ jobs:
|
||||||
Artifact: appxstore
|
Artifact: appxstore
|
||||||
Suffix: -store
|
Suffix: -store
|
||||||
Upload: true
|
Upload: true
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
Artifact: appx
|
||||||
|
Suffix:
|
||||||
|
ShouldSign: true
|
||||||
|
arm64_store:
|
||||||
|
Name: arm64
|
||||||
|
Artifact: appxstore
|
||||||
|
Suffix: -store
|
||||||
|
Upload: true
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- template: ./checkout.yml
|
- template: ./checkout.yml
|
||||||
|
|
|
@ -15,6 +15,8 @@ jobs:
|
||||||
Name: amd64
|
Name: amd64
|
||||||
win32:
|
win32:
|
||||||
Name: win32
|
Name: win32
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- checkout: none
|
- checkout: none
|
||||||
|
|
|
@ -31,6 +31,11 @@ jobs:
|
||||||
buildVersionToDownload: specific
|
buildVersionToDownload: specific
|
||||||
buildId: $(BuildToPublish)
|
buildId: $(BuildToPublish)
|
||||||
|
|
||||||
|
- powershell: gci pythonarm*.nupkg | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del
|
||||||
|
displayName: 'Prevent publishing ARM/ARM64 packages'
|
||||||
|
workingDirectory: '$(Build.BinariesDirectory)\nuget'
|
||||||
|
condition: and(succeeded(), not(variables['PublishArmPackages']))
|
||||||
|
|
||||||
- task: NuGetCommand@2
|
- task: NuGetCommand@2
|
||||||
displayName: Push packages
|
displayName: Push packages
|
||||||
condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
|
condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
|
||||||
|
|
|
@ -39,6 +39,10 @@ jobs:
|
||||||
artifactName: embed
|
artifactName: embed
|
||||||
downloadPath: $(Build.BinariesDirectory)
|
downloadPath: $(Build.BinariesDirectory)
|
||||||
|
|
||||||
|
- powershell: gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del
|
||||||
|
displayName: 'Prevent publishing ARM/ARM64 packages'
|
||||||
|
workingDirectory: '$(Build.BinariesDirectory)\embed'
|
||||||
|
condition: and(succeeded(), not(variables['PublishArmPackages']))
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
- task: DownloadPipelineArtifact@1
|
||||||
displayName: 'Download artifact from $(BuildToPublish): Doc'
|
displayName: 'Download artifact from $(BuildToPublish): Doc'
|
||||||
|
|
|
@ -19,6 +19,8 @@ jobs:
|
||||||
Name: win32
|
Name: win32
|
||||||
amd64:
|
amd64:
|
||||||
Name: amd64
|
Name: amd64
|
||||||
|
arm64:
|
||||||
|
Name: arm64
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- template: ./checkout.yml
|
- template: ./checkout.yml
|
||||||
|
|
|
@ -19,9 +19,11 @@ steps:
|
||||||
|
|
||||||
- script: python.bat -m test.pythoninfo
|
- script: python.bat -m test.pythoninfo
|
||||||
displayName: 'Display build info'
|
displayName: 'Display build info'
|
||||||
|
condition: and(succeeded(), variables['testRunPlatform'])
|
||||||
|
|
||||||
- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 --junit-xml="$(Build.BinariesDirectory)\test-results.xml" --tempdir="$(Build.BinariesDirectory)\test"
|
- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 --junit-xml="$(Build.BinariesDirectory)\test-results.xml" --tempdir="$(Build.BinariesDirectory)\test"
|
||||||
displayName: 'Tests'
|
displayName: 'Tests'
|
||||||
|
condition: and(succeeded(), variables['testRunPlatform'])
|
||||||
env:
|
env:
|
||||||
PREFIX: $(Py_OutDir)\$(arch)
|
PREFIX: $(Py_OutDir)\$(arch)
|
||||||
|
|
||||||
|
@ -32,4 +34,4 @@ steps:
|
||||||
mergeTestResults: true
|
mergeTestResults: true
|
||||||
testRunTitle: $(testRunTitle)
|
testRunTitle: $(testRunTitle)
|
||||||
platform: $(testRunPlatform)
|
platform: $(testRunPlatform)
|
||||||
condition: succeededOrFailed()
|
condition: and(succeededOrFailed(), variables['testRunPlatform'])
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add support for building and releasing Windows ARM64 packages.
|
|
@ -285,14 +285,13 @@ def _compile_one_py(src, dest, name, optimize, checked=True):
|
||||||
log_warning("Failed to compile {}", src)
|
log_warning("Failed to compile {}", src)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
# name argument added to address bpo-37641
|
# name argument added to address bpo-37641
|
||||||
def _py_temp_compile(src, name, ns, dest_dir=None, checked=True):
|
def _py_temp_compile(src, name, ns, dest_dir=None, checked=True):
|
||||||
if not ns.precompile or src not in PY_FILES or src.parent in DATA_DIRS:
|
if not ns.precompile or src not in PY_FILES or src.parent in DATA_DIRS:
|
||||||
return None
|
return None
|
||||||
dest = (dest_dir or ns.temp) / (src.stem + ".pyc")
|
dest = (dest_dir or ns.temp) / (src.stem + ".pyc")
|
||||||
return _compile_one_py(
|
return _compile_one_py(src, dest, name, optimize=2, checked=checked)
|
||||||
src, dest, name, optimize=2, checked=checked
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _write_to_zip(zf, dest, src, ns, checked=True):
|
def _write_to_zip(zf, dest, src, ns, checked=True):
|
||||||
|
@ -496,6 +495,13 @@ def main():
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-b", "--build", metavar="dir", help="Specify the build directory", type=Path
|
"-b", "--build", metavar="dir", help="Specify the build directory", type=Path
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--arch",
|
||||||
|
metavar="architecture",
|
||||||
|
help="Specify the target architecture",
|
||||||
|
type=str,
|
||||||
|
default=None,
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--doc-build",
|
"--doc-build",
|
||||||
metavar="dir",
|
metavar="dir",
|
||||||
|
@ -587,6 +593,8 @@ def main():
|
||||||
ns.doc_build = (Path.cwd() / ns.doc_build).resolve()
|
ns.doc_build = (Path.cwd() / ns.doc_build).resolve()
|
||||||
if ns.include_cat and not ns.include_cat.is_absolute():
|
if ns.include_cat and not ns.include_cat.is_absolute():
|
||||||
ns.include_cat = (Path.cwd() / ns.include_cat).resolve()
|
ns.include_cat = (Path.cwd() / ns.include_cat).resolve()
|
||||||
|
if not ns.arch:
|
||||||
|
ns.arch = "amd64" if sys.maxsize > 2 ** 32 else "win32"
|
||||||
|
|
||||||
if ns.copy and not ns.copy.is_absolute():
|
if ns.copy and not ns.copy.is_absolute():
|
||||||
ns.copy = (Path.cwd() / ns.copy).resolve()
|
ns.copy = (Path.cwd() / ns.copy).resolve()
|
||||||
|
@ -602,6 +610,7 @@ def main():
|
||||||
Source: {ns.source}
|
Source: {ns.source}
|
||||||
Build: {ns.build}
|
Build: {ns.build}
|
||||||
Temp: {ns.temp}
|
Temp: {ns.temp}
|
||||||
|
Arch: {ns.arch}
|
||||||
|
|
||||||
Copy to: {ns.copy}
|
Copy to: {ns.copy}
|
||||||
Zip to: {ns.zip}
|
Zip to: {ns.zip}
|
||||||
|
@ -609,6 +618,15 @@ Catalog: {ns.catalog}""",
|
||||||
ns=ns,
|
ns=ns,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if ns.arch not in ("win32", "amd64", "arm32", "arm64"):
|
||||||
|
log_error("--arch is not a valid value (win32, amd64, arm32, arm64)")
|
||||||
|
return 4
|
||||||
|
if ns.arch in ("arm32", "arm64"):
|
||||||
|
for n in ("include_idle", "include_tcltk"):
|
||||||
|
if getattr(ns, n):
|
||||||
|
log_warning(f"Disabling --{n.replace('_', '-')} on unsupported platform")
|
||||||
|
setattr(ns, n, False)
|
||||||
|
|
||||||
if ns.include_idle and not ns.include_tcltk:
|
if ns.include_idle and not ns.include_tcltk:
|
||||||
log_warning("Assuming --include-tcltk to support --include-idle")
|
log_warning("Assuming --include-tcltk to support --include-idle")
|
||||||
ns.include_tcltk = True
|
ns.include_tcltk = True
|
||||||
|
|
|
@ -28,7 +28,14 @@ APPX_DATA = dict(
|
||||||
),
|
),
|
||||||
DisplayName="Python {}".format(VER_DOT),
|
DisplayName="Python {}".format(VER_DOT),
|
||||||
Description="The Python {} runtime and console.".format(VER_DOT),
|
Description="The Python {} runtime and console.".format(VER_DOT),
|
||||||
ProcessorArchitecture="x64" if IS_X64 else "x86",
|
)
|
||||||
|
|
||||||
|
APPX_PLATFORM_DATA = dict(
|
||||||
|
_keys=("ProcessorArchitecture",),
|
||||||
|
win32=("x86",),
|
||||||
|
amd64=("x64",),
|
||||||
|
arm32=("arm",),
|
||||||
|
arm64=("arm64",),
|
||||||
)
|
)
|
||||||
|
|
||||||
PYTHON_VE_DATA = dict(
|
PYTHON_VE_DATA = dict(
|
||||||
|
@ -65,7 +72,7 @@ IDLE_VE_DATA = dict(
|
||||||
BackgroundColor="transparent",
|
BackgroundColor="transparent",
|
||||||
)
|
)
|
||||||
|
|
||||||
PY_PNG = '_resources/py.png'
|
PY_PNG = "_resources/py.png"
|
||||||
|
|
||||||
APPXMANIFEST_NS = {
|
APPXMANIFEST_NS = {
|
||||||
"": "http://schemas.microsoft.com/appx/manifest/foundation/windows10",
|
"": "http://schemas.microsoft.com/appx/manifest/foundation/windows10",
|
||||||
|
@ -147,18 +154,22 @@ RESOURCES_XML_TEMPLATE = r"""<?xml version="1.0" encoding="UTF-8" standalone="ye
|
||||||
|
|
||||||
SCCD_FILENAME = "PC/classicAppCompat.sccd"
|
SCCD_FILENAME = "PC/classicAppCompat.sccd"
|
||||||
|
|
||||||
|
SPECIAL_LOOKUP = object()
|
||||||
|
|
||||||
REGISTRY = {
|
REGISTRY = {
|
||||||
"HKCU\\Software\\Python\\PythonCore": {
|
"HKCU\\Software\\Python\\PythonCore": {
|
||||||
VER_DOT: {
|
VER_DOT: {
|
||||||
"DisplayName": APPX_DATA["DisplayName"],
|
"DisplayName": APPX_DATA["DisplayName"],
|
||||||
"SupportUrl": "https://www.python.org/",
|
"SupportUrl": "https://www.python.org/",
|
||||||
"SysArchitecture": "64bit" if IS_X64 else "32bit",
|
"SysArchitecture": SPECIAL_LOOKUP,
|
||||||
"SysVersion": VER_DOT,
|
"SysVersion": VER_DOT,
|
||||||
"Version": "{}.{}.{}".format(VER_MAJOR, VER_MINOR, VER_MICRO),
|
"Version": "{}.{}.{}".format(VER_MAJOR, VER_MINOR, VER_MICRO),
|
||||||
"InstallPath": {
|
"InstallPath": {
|
||||||
"": "[{AppVPackageRoot}]",
|
"": "[{AppVPackageRoot}]",
|
||||||
"ExecutablePath": "[{{AppVPackageRoot}}]\\python{}.exe".format(VER_DOT),
|
"ExecutablePath": "[{{AppVPackageRoot}}]\\python{}.exe".format(VER_DOT),
|
||||||
"WindowedExecutablePath": "[{{AppVPackageRoot}}]\\pythonw{}.exe".format(VER_DOT),
|
"WindowedExecutablePath": "[{{AppVPackageRoot}}]\\pythonw{}.exe".format(
|
||||||
|
VER_DOT
|
||||||
|
),
|
||||||
},
|
},
|
||||||
"Help": {
|
"Help": {
|
||||||
"Main Python Documentation": {
|
"Main Python Documentation": {
|
||||||
|
@ -338,6 +349,16 @@ def _get_registry_entries(ns, root="", d=None):
|
||||||
if len(fullkey.parts) > 1:
|
if len(fullkey.parts) > 1:
|
||||||
yield str(fullkey), None, None
|
yield str(fullkey), None, None
|
||||||
yield from _get_registry_entries(ns, fullkey, value)
|
yield from _get_registry_entries(ns, fullkey, value)
|
||||||
|
elif value is SPECIAL_LOOKUP:
|
||||||
|
if key == "SysArchitecture":
|
||||||
|
return {
|
||||||
|
"win32": "32bit",
|
||||||
|
"amd64": "64bit",
|
||||||
|
"arm32": "32bit",
|
||||||
|
"arm64": "64bit",
|
||||||
|
}[ns.arch]
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Key '{key}' unhandled for special lookup")
|
||||||
elif len(r.parts) > 1:
|
elif len(r.parts) > 1:
|
||||||
yield str(r), key, value
|
yield str(r), key, value
|
||||||
|
|
||||||
|
@ -376,14 +397,18 @@ def get_appxmanifest(ns):
|
||||||
NS = APPXMANIFEST_NS
|
NS = APPXMANIFEST_NS
|
||||||
QN = ET.QName
|
QN = ET.QName
|
||||||
|
|
||||||
|
data = dict(APPX_DATA)
|
||||||
|
for k, v in zip(APPX_PLATFORM_DATA["_keys"], APPX_PLATFORM_DATA[ns.arch]):
|
||||||
|
data[k] = v
|
||||||
|
|
||||||
node = xml.find("m:Identity", NS)
|
node = xml.find("m:Identity", NS)
|
||||||
for k in node.keys():
|
for k in node.keys():
|
||||||
value = APPX_DATA.get(k)
|
value = data.get(k)
|
||||||
if value:
|
if value:
|
||||||
node.set(k, value)
|
node.set(k, value)
|
||||||
|
|
||||||
for node in xml.find("m:Properties", NS):
|
for node in xml.find("m:Properties", NS):
|
||||||
value = APPX_DATA.get(node.tag.rpartition("}")[2])
|
value = data.get(node.tag.rpartition("}")[2])
|
||||||
if value:
|
if value:
|
||||||
node.text = value
|
node.text = value
|
||||||
|
|
||||||
|
@ -405,7 +430,7 @@ def get_appxmanifest(ns):
|
||||||
["python", "python{}".format(VER_MAJOR), "python{}".format(VER_DOT)],
|
["python", "python{}".format(VER_MAJOR), "python{}".format(VER_DOT)],
|
||||||
PYTHON_VE_DATA,
|
PYTHON_VE_DATA,
|
||||||
"console",
|
"console",
|
||||||
("python.file", [".py"], '"%1"', 'Python File', PY_PNG),
|
("python.file", [".py"], '"%1"', "Python File", PY_PNG),
|
||||||
)
|
)
|
||||||
|
|
||||||
add_application(
|
add_application(
|
||||||
|
@ -416,7 +441,7 @@ def get_appxmanifest(ns):
|
||||||
["pythonw", "pythonw{}".format(VER_MAJOR), "pythonw{}".format(VER_DOT)],
|
["pythonw", "pythonw{}".format(VER_MAJOR), "pythonw{}".format(VER_DOT)],
|
||||||
PYTHONW_VE_DATA,
|
PYTHONW_VE_DATA,
|
||||||
"windows",
|
"windows",
|
||||||
("python.windowedfile", [".pyw"], '"%1"', 'Python File (no console)', PY_PNG),
|
("python.windowedfile", [".pyw"], '"%1"', "Python File (no console)", PY_PNG),
|
||||||
)
|
)
|
||||||
|
|
||||||
if ns.include_pip and ns.include_launchers:
|
if ns.include_pip and ns.include_launchers:
|
||||||
|
@ -428,7 +453,7 @@ def get_appxmanifest(ns):
|
||||||
["pip", "pip{}".format(VER_MAJOR), "pip{}".format(VER_DOT)],
|
["pip", "pip{}".format(VER_MAJOR), "pip{}".format(VER_DOT)],
|
||||||
PIP_VE_DATA,
|
PIP_VE_DATA,
|
||||||
"console",
|
"console",
|
||||||
("python.wheel", [".whl"], 'install "%1"', 'Python Wheel'),
|
("python.wheel", [".whl"], 'install "%1"', "Python Wheel"),
|
||||||
)
|
)
|
||||||
|
|
||||||
if ns.include_idle and ns.include_launchers:
|
if ns.include_idle and ns.include_launchers:
|
||||||
|
|
|
@ -5,15 +5,31 @@ Constants for generating the layout.
|
||||||
__author__ = "Steve Dower <steve.dower@python.org>"
|
__author__ = "Steve Dower <steve.dower@python.org>"
|
||||||
__version__ = "3.8"
|
__version__ = "3.8"
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
VER_MAJOR, VER_MINOR, VER_MICRO, VER_FIELD4 = struct.pack(">i", sys.hexversion)
|
|
||||||
|
def _unpack_hexversion():
|
||||||
|
try:
|
||||||
|
hexversion = int(os.getenv("PYTHON_HEXVERSION"), 16)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
hexversion = sys.hexversion
|
||||||
|
return struct.pack(">i", sys.hexversion)
|
||||||
|
|
||||||
|
|
||||||
|
def _get_suffix(field4):
|
||||||
|
name = {0xA0: "a", 0xB0: "b", 0xC0: "c"}.get(field4 & 0xF0, "")
|
||||||
|
if name:
|
||||||
|
serial = field4 & 0x0F
|
||||||
|
return f"{name}{serial}"
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
VER_MAJOR, VER_MINOR, VER_MICRO, VER_FIELD4 = _unpack_hexversion()
|
||||||
|
VER_SUFFIX = _get_suffix(VER_FIELD4)
|
||||||
VER_FIELD3 = VER_MICRO << 8 | VER_FIELD4
|
VER_FIELD3 = VER_MICRO << 8 | VER_FIELD4
|
||||||
VER_NAME = {"alpha": "a", "beta": "b", "candidate": "rc"}.get(
|
|
||||||
sys.version_info.releaselevel, ""
|
|
||||||
)
|
|
||||||
VER_SERIAL = sys.version_info.serial if VER_NAME else ""
|
|
||||||
VER_DOT = "{}.{}".format(VER_MAJOR, VER_MINOR)
|
VER_DOT = "{}.{}".format(VER_MAJOR, VER_MINOR)
|
||||||
|
|
||||||
PYTHON_DLL_NAME = "python{}{}.dll".format(VER_MAJOR, VER_MINOR)
|
PYTHON_DLL_NAME = "python{}{}.dll".format(VER_MAJOR, VER_MINOR)
|
||||||
|
@ -21,8 +37,6 @@ PYTHON_STABLE_DLL_NAME = "python{}.dll".format(VER_MAJOR)
|
||||||
PYTHON_ZIP_NAME = "python{}{}.zip".format(VER_MAJOR, VER_MINOR)
|
PYTHON_ZIP_NAME = "python{}{}.zip".format(VER_MAJOR, VER_MINOR)
|
||||||
PYTHON_PTH_NAME = "python{}{}._pth".format(VER_MAJOR, VER_MINOR)
|
PYTHON_PTH_NAME = "python{}{}._pth".format(VER_MAJOR, VER_MINOR)
|
||||||
|
|
||||||
PYTHON_CHM_NAME = "python{}{}{}{}{}.chm".format(
|
PYTHON_CHM_NAME = "python{}{}{}{}.chm".format(
|
||||||
VER_MAJOR, VER_MINOR, VER_MICRO, VER_NAME, VER_SERIAL
|
VER_MAJOR, VER_MINOR, VER_MICRO, VER_SUFFIX
|
||||||
)
|
)
|
||||||
|
|
||||||
IS_X64 = sys.maxsize > 2 ** 32
|
|
||||||
|
|
|
@ -13,25 +13,21 @@ PYTHON_NUSPEC_NAME = "python.nuspec"
|
||||||
NUSPEC_DATA = {
|
NUSPEC_DATA = {
|
||||||
"PYTHON_TAG": VER_DOT,
|
"PYTHON_TAG": VER_DOT,
|
||||||
"PYTHON_VERSION": os.getenv("PYTHON_NUSPEC_VERSION"),
|
"PYTHON_VERSION": os.getenv("PYTHON_NUSPEC_VERSION"),
|
||||||
"PYTHON_BITNESS": "64-bit" if IS_X64 else "32-bit",
|
|
||||||
"PACKAGENAME": os.getenv("PYTHON_NUSPEC_PACKAGENAME"),
|
|
||||||
"PACKAGETITLE": os.getenv("PYTHON_NUSPEC_PACKAGETITLE"),
|
|
||||||
"FILELIST": r' <file src="**\*" target="tools" />',
|
"FILELIST": r' <file src="**\*" target="tools" />',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NUSPEC_PLATFORM_DATA = dict(
|
||||||
|
_keys=("PYTHON_BITNESS", "PACKAGENAME", "PACKAGETITLE"),
|
||||||
|
win32=("32-bit", "pythonx86", "Python (32-bit)"),
|
||||||
|
amd64=("64-bit", "python", "Python"),
|
||||||
|
arm32=("ARM", "pythonarm", "Python (ARM)"),
|
||||||
|
arm64=("ARM64", "pythonarm64", "Python (ARM64)"),
|
||||||
|
)
|
||||||
|
|
||||||
if not NUSPEC_DATA["PYTHON_VERSION"]:
|
if not NUSPEC_DATA["PYTHON_VERSION"]:
|
||||||
if VER_NAME:
|
NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}{}{}".format(
|
||||||
NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}-{}{}".format(
|
VER_DOT, VER_MICRO, "-" if VER_SUFFIX else "", VER_SUFFIX
|
||||||
VER_DOT, VER_MICRO, VER_NAME, VER_SERIAL
|
)
|
||||||
)
|
|
||||||
else:
|
|
||||||
NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}".format(VER_DOT, VER_MICRO)
|
|
||||||
|
|
||||||
if not NUSPEC_DATA["PACKAGETITLE"]:
|
|
||||||
NUSPEC_DATA["PACKAGETITLE"] = "Python" if IS_X64 else "Python (32-bit)"
|
|
||||||
|
|
||||||
if not NUSPEC_DATA["PACKAGENAME"]:
|
|
||||||
NUSPEC_DATA["PACKAGENAME"] = "python" if IS_X64 else "pythonx86"
|
|
||||||
|
|
||||||
FILELIST_WITH_PROPS = r""" <file src="**\*" exclude="python.props" target="tools" />
|
FILELIST_WITH_PROPS = r""" <file src="**\*" exclude="python.props" target="tools" />
|
||||||
<file src="python.props" target="build\native" />"""
|
<file src="python.props" target="build\native" />"""
|
||||||
|
@ -56,11 +52,21 @@ NUSPEC_TEMPLATE = r"""<?xml version="1.0"?>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def _get_nuspec_data_overrides(ns):
|
||||||
|
for k, v in zip(NUSPEC_PLATFORM_DATA["_keys"], NUSPEC_PLATFORM_DATA[ns.arch]):
|
||||||
|
ev = os.getenv("PYTHON_NUSPEC_" + k)
|
||||||
|
if ev:
|
||||||
|
yield k, ev
|
||||||
|
yield k, v
|
||||||
|
|
||||||
|
|
||||||
def get_nuspec_layout(ns):
|
def get_nuspec_layout(ns):
|
||||||
if ns.include_all or ns.include_nuspec:
|
if ns.include_all or ns.include_nuspec:
|
||||||
data = NUSPEC_DATA
|
data = dict(NUSPEC_DATA)
|
||||||
|
for k, v in _get_nuspec_data_overrides(ns):
|
||||||
|
if not data.get(k):
|
||||||
|
data[k] = v
|
||||||
if ns.include_all or ns.include_props:
|
if ns.include_all or ns.include_props:
|
||||||
data = dict(data)
|
|
||||||
data["FILELIST"] = FILELIST_WITH_PROPS
|
data["FILELIST"] = FILELIST_WITH_PROPS
|
||||||
nuspec = NUSPEC_TEMPLATE.format_map(data)
|
nuspec = NUSPEC_TEMPLATE.format_map(data)
|
||||||
yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))
|
yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))
|
||||||
|
|
|
@ -18,15 +18,9 @@ PROPS_DATA = {
|
||||||
}
|
}
|
||||||
|
|
||||||
if not PROPS_DATA["PYTHON_VERSION"]:
|
if not PROPS_DATA["PYTHON_VERSION"]:
|
||||||
if VER_NAME:
|
PROPS_DATA["PYTHON_VERSION"] = "{}.{}{}{}".format(
|
||||||
PROPS_DATA["PYTHON_VERSION"] = "{}.{}-{}{}".format(
|
VER_DOT, VER_MICRO, "-" if VER_SUFFIX else "", VER_SUFFIX
|
||||||
VER_DOT, VER_MICRO, VER_NAME, VER_SERIAL
|
)
|
||||||
)
|
|
||||||
else:
|
|
||||||
PROPS_DATA["PYTHON_VERSION"] = "{}.{}".format(VER_DOT, VER_MICRO)
|
|
||||||
|
|
||||||
if not PROPS_DATA["PYTHON_PLATFORM"]:
|
|
||||||
PROPS_DATA["PYTHON_PLATFORM"] = "x64" if IS_X64 else "Win32"
|
|
||||||
|
|
||||||
PROPS_DATA["PYTHON_TARGET"] = "_GetPythonRuntimeFilesDependsOn{}{}_{}".format(
|
PROPS_DATA["PYTHON_TARGET"] = "_GetPythonRuntimeFilesDependsOn{}{}_{}".format(
|
||||||
VER_MAJOR, VER_MINOR, PROPS_DATA["PYTHON_PLATFORM"]
|
VER_MAJOR, VER_MINOR, PROPS_DATA["PYTHON_PLATFORM"]
|
||||||
|
@ -94,5 +88,13 @@ PROPS_TEMPLATE = r"""<?xml version="1.0" encoding="utf-8"?>
|
||||||
def get_props_layout(ns):
|
def get_props_layout(ns):
|
||||||
if ns.include_all or ns.include_props:
|
if ns.include_all or ns.include_props:
|
||||||
# TODO: Filter contents of props file according to included/excluded items
|
# TODO: Filter contents of props file according to included/excluded items
|
||||||
props = PROPS_TEMPLATE.format_map(PROPS_DATA)
|
d = dict(PROPS_DATA)
|
||||||
|
if not d.get("PYTHON_PLATFORM"):
|
||||||
|
d["PYTHON_PLATFORM"] = {
|
||||||
|
"win32": "Win32",
|
||||||
|
"amd64": "X64",
|
||||||
|
"arm32": "ARM",
|
||||||
|
"arm64": "ARM64",
|
||||||
|
}[ns.arch]
|
||||||
|
props = PROPS_TEMPLATE.format_map(d)
|
||||||
yield "python.props", ("python.props", props.encode("utf-8"))
|
yield "python.props", ("python.props", props.encode("utf-8"))
|
||||||
|
|
|
@ -57,7 +57,7 @@ set conf=Release
|
||||||
set target=Build
|
set target=Build
|
||||||
set dir=%~dp0
|
set dir=%~dp0
|
||||||
set parallel=/m
|
set parallel=/m
|
||||||
set verbose=/nologo /v:m
|
set verbose=/nologo /v:m /clp:summary
|
||||||
set kill=
|
set kill=
|
||||||
set do_pgo=
|
set do_pgo=
|
||||||
set pgo_job=-m test --pgo
|
set pgo_job=-m test --pgo
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
@rem VS 2017 and later provide vswhere.exe, which can be used
|
@rem VS 2017 and later provide vswhere.exe, which can be used
|
||||||
@if not exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" goto :skip_vswhere
|
@if not exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" goto :skip_vswhere
|
||||||
@set _Py_MSBuild_Root=
|
@set _Py_MSBuild_Root=
|
||||||
@for /F "tokens=*" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -property installationPath -latest') DO @(set _Py_MSBuild_Root=%%i\MSBuild)
|
@for /F "tokens=*" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -property installationPath -latest -prerelease') DO @(set _Py_MSBuild_Root=%%i\MSBuild)
|
||||||
@if not defined _Py_MSBuild_Root goto :skip_vswhere
|
@if not defined _Py_MSBuild_Root goto :skip_vswhere
|
||||||
@for %%j in (Current 15.0) DO @if exist "%_Py_MSBuild_Root%\%%j\Bin\msbuild.exe" (set MSBUILD="%_Py_MSBuild_Root%\%%j\Bin\msbuild.exe")
|
@for %%j in (Current 15.0) DO @if exist "%_Py_MSBuild_Root%\%%j\Bin\msbuild.exe" (set MSBUILD="%_Py_MSBuild_Root%\%%j\Bin\msbuild.exe")
|
||||||
@set _Py_MSBuild_Root=
|
@set _Py_MSBuild_Root=
|
||||||
|
|
|
@ -52,7 +52,7 @@ echo.Fetching external libraries...
|
||||||
|
|
||||||
set libraries=
|
set libraries=
|
||||||
set libraries=%libraries% bzip2-1.0.6
|
set libraries=%libraries% bzip2-1.0.6
|
||||||
if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.3.0-rc0-r1
|
if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi
|
||||||
if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1d
|
if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1d
|
||||||
set libraries=%libraries% sqlite-3.28.0.0
|
set libraries=%libraries% sqlite-3.28.0.0
|
||||||
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0
|
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
<!-- _ssl will build _socket as well, which may cause conflicts in parallel builds -->
|
<!-- _ssl will build _socket as well, which may cause conflicts in parallel builds -->
|
||||||
<ExtensionModules Include="_socket" Condition="!$(IncludeSSL) or !$(IncludeExternals)" />
|
<ExtensionModules Include="_socket" Condition="!$(IncludeSSL) or !$(IncludeExternals)" />
|
||||||
<ExternalModules Include="_ssl;_hashlib" Condition="$(IncludeSSL)" />
|
<ExternalModules Include="_ssl;_hashlib" Condition="$(IncludeSSL)" />
|
||||||
<ExternalModules Include="_tkinter" Condition="$(IncludeTkinter)" />
|
<ExternalModules Include="_tkinter" Condition="$(IncludeTkinter) and $(Platform) != 'ARM' and $(Platform) != 'ARM64'" />
|
||||||
<ExtensionModules Include="@(ExternalModules->'%(Identity)')" Condition="$(IncludeExternals)" />
|
<ExtensionModules Include="@(ExternalModules->'%(Identity)')" Condition="$(IncludeExternals)" />
|
||||||
<Projects Include="@(ExtensionModules->'%(Identity).vcxproj')" Condition="$(IncludeExtensions)" />
|
<Projects Include="@(ExtensionModules->'%(Identity).vcxproj')" Condition="$(IncludeExtensions)" />
|
||||||
<!-- Test modules -->
|
<!-- Test modules -->
|
||||||
|
|
|
@ -93,7 +93,10 @@ echo LIBFFI_SOURCE: %LIBFFI_SOURCE%
|
||||||
echo MSVCC : %MSVCC%
|
echo MSVCC : %MSVCC%
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
if not exist Makefile.in (%SH% -lc "(cd $LIBFFI_SOURCE; ./autogen.sh;)")
|
if not exist Makefile.in (
|
||||||
|
%SH% -lc "(cd $LIBFFI_SOURCE; ./autogen.sh;)"
|
||||||
|
if errorlevel 1 exit /B 1
|
||||||
|
)
|
||||||
|
|
||||||
if "%BUILD_X64%"=="1" call :BuildOne x64 x86_64-w64-cygwin x86_64-w64-cygwin
|
if "%BUILD_X64%"=="1" call :BuildOne x64 x86_64-w64-cygwin x86_64-w64-cygwin
|
||||||
if "%BUILD_X86%"=="1" call :BuildOne x86 i686-pc-cygwin i686-pc-cygwin
|
if "%BUILD_X86%"=="1" call :BuildOne x86 i686-pc-cygwin i686-pc-cygwin
|
||||||
|
@ -158,11 +161,13 @@ echo ================================================================
|
||||||
echo Configure the build to generate fficonfig.h and ffi.h
|
echo Configure the build to generate fficonfig.h and ffi.h
|
||||||
echo ================================================================
|
echo ================================================================
|
||||||
%SH% -lc "(cd $OLDPWD; ./configure CC='%MSVCC% %ASSEMBLER% %BUILD_PDB%' CXX='%MSVCC% %ASSEMBLER% %BUILD_PDB%' LD='link' CPP='cl -nologo -EP' CXXCPP='cl -nologo -EP' CPPFLAGS='-DFFI_BUILDING_DLL' %BUILD_NOOPT% NM='dumpbin -symbols' STRIP=':' --build=$BUILD --host=$HOST;)"
|
%SH% -lc "(cd $OLDPWD; ./configure CC='%MSVCC% %ASSEMBLER% %BUILD_PDB%' CXX='%MSVCC% %ASSEMBLER% %BUILD_PDB%' LD='link' CPP='cl -nologo -EP' CXXCPP='cl -nologo -EP' CPPFLAGS='-DFFI_BUILDING_DLL' %BUILD_NOOPT% NM='dumpbin -symbols' STRIP=':' --build=$BUILD --host=$HOST;)"
|
||||||
|
if errorlevel 1 exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
echo ================================================================
|
echo ================================================================
|
||||||
echo Building libffi
|
echo Building libffi
|
||||||
echo ================================================================
|
echo ================================================================
|
||||||
%SH% -lc "(cd $OLDPWD; export PATH=/usr/bin:$PATH; cp src/%SRC_ARCHITECTURE%/ffitarget.h include; make; find .;)"
|
%SH% -lc "(cd $OLDPWD; export PATH=/usr/bin:$PATH; cp src/%SRC_ARCHITECTURE%/ffitarget.h include; make; find .;)"
|
||||||
|
if errorlevel 1 exit /B %ERRORLEVEL%
|
||||||
|
|
||||||
REM Tests are not needed to produce artifacts
|
REM Tests are not needed to produce artifacts
|
||||||
if "%LIBFFI_TEST%" EQU "1" (
|
if "%LIBFFI_TEST%" EQU "1" (
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|ARM">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|ARM64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
@ -9,6 +17,14 @@
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|ARM">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|ARM64">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="PGInstrument|Win32">
|
<ProjectConfiguration Include="PGInstrument|Win32">
|
||||||
<Configuration>PGInstrument</Configuration>
|
<Configuration>PGInstrument</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
@ -17,6 +33,14 @@
|
||||||
<Configuration>PGInstrument</Configuration>
|
<Configuration>PGInstrument</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|ARM">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|ARM64">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="PGUpdate|Win32">
|
<ProjectConfiguration Include="PGUpdate|Win32">
|
||||||
<Configuration>PGUpdate</Configuration>
|
<Configuration>PGUpdate</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
@ -25,6 +49,14 @@
|
||||||
<Configuration>PGUpdate</Configuration>
|
<Configuration>PGUpdate</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
<Configuration>Release</Configuration>
|
<Configuration>Release</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|ARM">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|ARM64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
@ -9,6 +17,14 @@
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|ARM">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|ARM64">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="PGInstrument|Win32">
|
<ProjectConfiguration Include="PGInstrument|Win32">
|
||||||
<Configuration>PGInstrument</Configuration>
|
<Configuration>PGInstrument</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
@ -17,6 +33,14 @@
|
||||||
<Configuration>PGInstrument</Configuration>
|
<Configuration>PGInstrument</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|ARM">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|ARM64">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="PGUpdate|Win32">
|
<ProjectConfiguration Include="PGUpdate|Win32">
|
||||||
<Configuration>PGUpdate</Configuration>
|
<Configuration>PGUpdate</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
@ -25,6 +49,14 @@
|
||||||
<Configuration>PGUpdate</Configuration>
|
<Configuration>PGUpdate</Configuration>
|
||||||
<Platform>x64</Platform>
|
<Platform>x64</Platform>
|
||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
<Configuration>Release</Configuration>
|
<Configuration>Release</Configuration>
|
||||||
<Platform>Win32</Platform>
|
<Platform>Win32</Platform>
|
||||||
|
|
Loading…
Reference in New Issue