mirror of
https://github.com/AdaCore/cpython.git
synced 2026-02-12 12:57:15 -08:00
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:
@@ -145,7 +145,7 @@ jobs:
|
||||
buildOpt: '-p x64'
|
||||
testRunTitle: '$(Build.SourceBranchName)-win64'
|
||||
testRunPlatform: win64
|
||||
maxParallel: 2
|
||||
maxParallel: 4
|
||||
|
||||
steps:
|
||||
- template: ./windows-steps.yml
|
||||
|
||||
@@ -145,7 +145,10 @@ jobs:
|
||||
buildOpt: '-p x64'
|
||||
testRunTitle: '$(System.PullRequest.TargetBranch)-win64'
|
||||
testRunPlatform: win64
|
||||
maxParallel: 2
|
||||
winarm64:
|
||||
arch: arm64
|
||||
buildOpt: '-p arm64'
|
||||
maxParallel: 4
|
||||
|
||||
steps:
|
||||
- template: ./windows-steps.yml
|
||||
|
||||
@@ -43,7 +43,7 @@ steps:
|
||||
|
||||
- powershell: |
|
||||
$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"
|
||||
del "${env:CAT}.cdf"
|
||||
if (-not (Test-Path "${env:CAT}.cat")) {
|
||||
@@ -52,6 +52,7 @@ steps:
|
||||
displayName: 'Generate catalog'
|
||||
env:
|
||||
CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
|
||||
PYTHON_HEXVERSION: $(VersionHex)
|
||||
|
||||
- task: PublishPipelineArtifact@0
|
||||
displayName: 'Publish binaries'
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
steps:
|
||||
- task: DownloadPipelineArtifact@1
|
||||
displayName: 'Download artifact: bin_$(HostArch)'
|
||||
condition: and(succeeded(), variables['HostArch'])
|
||||
inputs:
|
||||
artifactName: bin_$(HostArch)
|
||||
targetPath: $(Build.BinariesDirectory)\bin_$(HostArch)
|
||||
|
||||
- powershell: >
|
||||
Write-Host (
|
||||
'##vso[task.setvariable variable=LayoutCmd]&
|
||||
"{0}\bin\python.exe"
|
||||
"$(Python)"
|
||||
"{1}\PC\layout"
|
||||
-vv
|
||||
--source "{1}"
|
||||
--build "{0}\bin"
|
||||
--arch "$(Name)"
|
||||
--temp "{0}\layout-temp"
|
||||
--include-cat "{0}\bin\python.cat"
|
||||
--doc-build "{0}\doc"'
|
||||
|
||||
@@ -54,6 +54,7 @@ steps:
|
||||
- powershell: |
|
||||
copy $(Build.BinariesDirectory)\amd64\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
||||
displayName: 'Copy signed files into sources'
|
||||
condition: and(succeeded(), variables['SigningCertificate'])
|
||||
|
||||
- script: |
|
||||
call Tools\msi\get_externals.bat
|
||||
|
||||
@@ -16,14 +16,16 @@ jobs:
|
||||
env:
|
||||
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
|
||||
displayName: 'Build CHM docs'
|
||||
env:
|
||||
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
|
||||
displayName: 'Assemble artifact: Doc'
|
||||
inputs:
|
||||
@@ -65,6 +67,16 @@ jobs:
|
||||
Arch: amd64
|
||||
Platform: x64
|
||||
Configuration: Debug
|
||||
arm64:
|
||||
Name: arm64
|
||||
Arch: arm64
|
||||
Platform: ARM64
|
||||
Configuration: Release
|
||||
arm64_d:
|
||||
Name: arm64_d
|
||||
Arch: arm64
|
||||
Platform: ARM64
|
||||
Configuration: Debug
|
||||
|
||||
steps:
|
||||
- template: ./build-steps.yml
|
||||
|
||||
@@ -19,6 +19,11 @@ jobs:
|
||||
Name: amd64
|
||||
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||
PYTHONHOME: $(Build.SourcesDirectory)
|
||||
arm64:
|
||||
Name: arm64
|
||||
HostArch: amd64
|
||||
Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
|
||||
PYTHONHOME: $(Build.SourcesDirectory)
|
||||
|
||||
steps:
|
||||
- template: ./checkout.yml
|
||||
|
||||
@@ -13,11 +13,18 @@ jobs:
|
||||
matrix:
|
||||
win32:
|
||||
Name: win32
|
||||
Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
||||
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||
PYTHONHOME: $(Build.SourcesDirectory)
|
||||
TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||
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)
|
||||
|
||||
steps:
|
||||
@@ -43,13 +50,15 @@ jobs:
|
||||
|
||||
- task: DownloadPipelineArtifact@1
|
||||
displayName: 'Download artifact: tcltk_lib_$(Name)'
|
||||
condition: and(succeeded(), variables['TclLibrary'])
|
||||
inputs:
|
||||
artifactName: tcltk_lib_$(Name)
|
||||
targetPath: $(Build.BinariesDirectory)\tcltk_lib
|
||||
|
||||
- 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'
|
||||
condition: and(succeeded(), variables['SigningCertificate'])
|
||||
|
||||
- template: ./layout-command.yml
|
||||
|
||||
@@ -57,7 +66,7 @@ jobs:
|
||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
|
||||
displayName: 'Generate full layout'
|
||||
env:
|
||||
TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||
TCL_LIBRARY: $(TclLibrary)
|
||||
|
||||
- task: PublishPipelineArtifact@0
|
||||
displayName: 'Publish Artifact: layout_full_$(Name)'
|
||||
|
||||
@@ -12,11 +12,18 @@ jobs:
|
||||
matrix:
|
||||
#win32:
|
||||
# Name: win32
|
||||
# Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
||||
# Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||
# PYTHONHOME: $(Build.SourcesDirectory)
|
||||
# TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||
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)
|
||||
|
||||
steps:
|
||||
@@ -36,13 +43,15 @@ jobs:
|
||||
|
||||
- task: DownloadPipelineArtifact@1
|
||||
displayName: 'Download artifact: tcltk_lib_$(Name)'
|
||||
condition: and(succeeded(), variables['TclLibrary'])
|
||||
inputs:
|
||||
artifactName: tcltk_lib_$(Name)
|
||||
targetPath: $(Build.BinariesDirectory)\tcltk_lib
|
||||
|
||||
- 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'
|
||||
condition: and(succeeded(), variables['SigningCertificate'])
|
||||
|
||||
- template: ./layout-command.yml
|
||||
|
||||
@@ -51,7 +60,7 @@ jobs:
|
||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
|
||||
displayName: 'Generate store APPX layout'
|
||||
env:
|
||||
TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||
TCL_LIBRARY: $(TclLibrary)
|
||||
|
||||
- task: PublishPipelineArtifact@0
|
||||
displayName: 'Publish Artifact: layout_appxstore_$(Name)'
|
||||
@@ -79,7 +88,7 @@ jobs:
|
||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
|
||||
displayName: 'Generate sideloading APPX layout'
|
||||
env:
|
||||
TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
|
||||
TCL_LIBRARY: $(TclLibrary)
|
||||
|
||||
- task: PublishPipelineArtifact@0
|
||||
displayName: 'Publish Artifact: layout_appx_$(Name)'
|
||||
|
||||
@@ -13,11 +13,16 @@ jobs:
|
||||
matrix:
|
||||
win32:
|
||||
Name: win32
|
||||
Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
|
||||
Python: $(Build.BinariesDirectory)\bin\python.exe
|
||||
PYTHONHOME: $(Build.SourcesDirectory)
|
||||
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)
|
||||
|
||||
steps:
|
||||
@@ -32,14 +37,13 @@ jobs:
|
||||
- powershell: |
|
||||
copy $(Build.BinariesDirectory)\bin\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
|
||||
displayName: 'Copy signed files into sources'
|
||||
condition: and(succeeded(), variables['SigningCertificate'])
|
||||
|
||||
- template: ./layout-command.yml
|
||||
|
||||
- powershell: |
|
||||
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
|
||||
displayName: 'Generate nuget layout'
|
||||
env:
|
||||
TCL_LIBRARY: $(Build.BinariesDirectory)\bin_$(Name)\tcl\tcl8
|
||||
|
||||
- task: PublishPipelineArtifact@0
|
||||
displayName: 'Publish Artifact: layout_nuget_$(Name)'
|
||||
|
||||
@@ -20,6 +20,16 @@ jobs:
|
||||
Artifact: appxstore
|
||||
Suffix: -store
|
||||
Upload: true
|
||||
arm64:
|
||||
Name: arm64
|
||||
Artifact: appx
|
||||
Suffix:
|
||||
ShouldSign: true
|
||||
arm64_store:
|
||||
Name: arm64
|
||||
Artifact: appxstore
|
||||
Suffix: -store
|
||||
Upload: true
|
||||
|
||||
steps:
|
||||
- template: ./checkout.yml
|
||||
|
||||
@@ -15,6 +15,8 @@ jobs:
|
||||
Name: amd64
|
||||
win32:
|
||||
Name: win32
|
||||
arm64:
|
||||
Name: arm64
|
||||
|
||||
steps:
|
||||
- checkout: none
|
||||
|
||||
@@ -31,6 +31,11 @@ jobs:
|
||||
buildVersionToDownload: specific
|
||||
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
|
||||
displayName: Push packages
|
||||
condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
|
||||
|
||||
@@ -39,6 +39,10 @@ jobs:
|
||||
artifactName: embed
|
||||
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
|
||||
displayName: 'Download artifact from $(BuildToPublish): Doc'
|
||||
|
||||
@@ -19,6 +19,8 @@ jobs:
|
||||
Name: win32
|
||||
amd64:
|
||||
Name: amd64
|
||||
arm64:
|
||||
Name: arm64
|
||||
|
||||
steps:
|
||||
- template: ./checkout.yml
|
||||
|
||||
@@ -19,9 +19,11 @@ steps:
|
||||
|
||||
- script: python.bat -m test.pythoninfo
|
||||
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"
|
||||
displayName: 'Tests'
|
||||
condition: and(succeeded(), variables['testRunPlatform'])
|
||||
env:
|
||||
PREFIX: $(Py_OutDir)\$(arch)
|
||||
|
||||
@@ -32,4 +34,4 @@ steps:
|
||||
mergeTestResults: true
|
||||
testRunTitle: $(testRunTitle)
|
||||
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)
|
||||
return None
|
||||
|
||||
|
||||
# name argument added to address bpo-37641
|
||||
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:
|
||||
return None
|
||||
dest = (dest_dir or ns.temp) / (src.stem + ".pyc")
|
||||
return _compile_one_py(
|
||||
src, dest, name, optimize=2, checked=checked
|
||||
)
|
||||
return _compile_one_py(src, dest, name, optimize=2, checked=checked)
|
||||
|
||||
|
||||
def _write_to_zip(zf, dest, src, ns, checked=True):
|
||||
@@ -496,6 +495,13 @@ def main():
|
||||
parser.add_argument(
|
||||
"-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(
|
||||
"--doc-build",
|
||||
metavar="dir",
|
||||
@@ -587,6 +593,8 @@ def main():
|
||||
ns.doc_build = (Path.cwd() / ns.doc_build).resolve()
|
||||
if ns.include_cat and not ns.include_cat.is_absolute():
|
||||
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():
|
||||
ns.copy = (Path.cwd() / ns.copy).resolve()
|
||||
@@ -602,6 +610,7 @@ def main():
|
||||
Source: {ns.source}
|
||||
Build: {ns.build}
|
||||
Temp: {ns.temp}
|
||||
Arch: {ns.arch}
|
||||
|
||||
Copy to: {ns.copy}
|
||||
Zip to: {ns.zip}
|
||||
@@ -609,6 +618,15 @@ Catalog: {ns.catalog}""",
|
||||
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:
|
||||
log_warning("Assuming --include-tcltk to support --include-idle")
|
||||
ns.include_tcltk = True
|
||||
|
||||
@@ -28,7 +28,14 @@ APPX_DATA = dict(
|
||||
),
|
||||
DisplayName="Python {}".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(
|
||||
@@ -65,7 +72,7 @@ IDLE_VE_DATA = dict(
|
||||
BackgroundColor="transparent",
|
||||
)
|
||||
|
||||
PY_PNG = '_resources/py.png'
|
||||
PY_PNG = "_resources/py.png"
|
||||
|
||||
APPXMANIFEST_NS = {
|
||||
"": "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"
|
||||
|
||||
SPECIAL_LOOKUP = object()
|
||||
|
||||
REGISTRY = {
|
||||
"HKCU\\Software\\Python\\PythonCore": {
|
||||
VER_DOT: {
|
||||
"DisplayName": APPX_DATA["DisplayName"],
|
||||
"SupportUrl": "https://www.python.org/",
|
||||
"SysArchitecture": "64bit" if IS_X64 else "32bit",
|
||||
"SysArchitecture": SPECIAL_LOOKUP,
|
||||
"SysVersion": VER_DOT,
|
||||
"Version": "{}.{}.{}".format(VER_MAJOR, VER_MINOR, VER_MICRO),
|
||||
"InstallPath": {
|
||||
"": "[{AppVPackageRoot}]",
|
||||
"ExecutablePath": "[{{AppVPackageRoot}}]\\python{}.exe".format(VER_DOT),
|
||||
"WindowedExecutablePath": "[{{AppVPackageRoot}}]\\pythonw{}.exe".format(VER_DOT),
|
||||
"WindowedExecutablePath": "[{{AppVPackageRoot}}]\\pythonw{}.exe".format(
|
||||
VER_DOT
|
||||
),
|
||||
},
|
||||
"Help": {
|
||||
"Main Python Documentation": {
|
||||
@@ -338,6 +349,16 @@ def _get_registry_entries(ns, root="", d=None):
|
||||
if len(fullkey.parts) > 1:
|
||||
yield str(fullkey), None, None
|
||||
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:
|
||||
yield str(r), key, value
|
||||
|
||||
@@ -376,14 +397,18 @@ def get_appxmanifest(ns):
|
||||
NS = APPXMANIFEST_NS
|
||||
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)
|
||||
for k in node.keys():
|
||||
value = APPX_DATA.get(k)
|
||||
value = data.get(k)
|
||||
if value:
|
||||
node.set(k, value)
|
||||
|
||||
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:
|
||||
node.text = value
|
||||
|
||||
@@ -405,7 +430,7 @@ def get_appxmanifest(ns):
|
||||
["python", "python{}".format(VER_MAJOR), "python{}".format(VER_DOT)],
|
||||
PYTHON_VE_DATA,
|
||||
"console",
|
||||
("python.file", [".py"], '"%1"', 'Python File', PY_PNG),
|
||||
("python.file", [".py"], '"%1"', "Python File", PY_PNG),
|
||||
)
|
||||
|
||||
add_application(
|
||||
@@ -416,7 +441,7 @@ def get_appxmanifest(ns):
|
||||
["pythonw", "pythonw{}".format(VER_MAJOR), "pythonw{}".format(VER_DOT)],
|
||||
PYTHONW_VE_DATA,
|
||||
"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:
|
||||
@@ -428,7 +453,7 @@ def get_appxmanifest(ns):
|
||||
["pip", "pip{}".format(VER_MAJOR), "pip{}".format(VER_DOT)],
|
||||
PIP_VE_DATA,
|
||||
"console",
|
||||
("python.wheel", [".whl"], 'install "%1"', 'Python Wheel'),
|
||||
("python.wheel", [".whl"], 'install "%1"', "Python Wheel"),
|
||||
)
|
||||
|
||||
if ns.include_idle and ns.include_launchers:
|
||||
|
||||
@@ -5,15 +5,31 @@ Constants for generating the layout.
|
||||
__author__ = "Steve Dower <steve.dower@python.org>"
|
||||
__version__ = "3.8"
|
||||
|
||||
import os
|
||||
import re
|
||||
import struct
|
||||
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_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)
|
||||
|
||||
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_PTH_NAME = "python{}{}._pth".format(VER_MAJOR, VER_MINOR)
|
||||
|
||||
PYTHON_CHM_NAME = "python{}{}{}{}{}.chm".format(
|
||||
VER_MAJOR, VER_MINOR, VER_MICRO, VER_NAME, VER_SERIAL
|
||||
PYTHON_CHM_NAME = "python{}{}{}{}.chm".format(
|
||||
VER_MAJOR, VER_MINOR, VER_MICRO, VER_SUFFIX
|
||||
)
|
||||
|
||||
IS_X64 = sys.maxsize > 2 ** 32
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user