summaryrefslogtreecommitdiffstats
path: root/PC/layout/support/appxmanifest.py
diff options
context:
space:
mode:
Diffstat (limited to 'PC/layout/support/appxmanifest.py')
-rw-r--r--PC/layout/support/appxmanifest.py43
1 files changed, 34 insertions, 9 deletions
diff --git a/PC/layout/support/appxmanifest.py b/PC/layout/support/appxmanifest.py
index de5813a..9e008f7 100644
--- a/PC/layout/support/appxmanifest.py
+++ b/PC/layout/support/appxmanifest.py
@@ -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: