Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/PC/layout/support/nuspec.py
12 views
1
"""
2
Provides .props file.
3
"""
4
5
import os
6
import sys
7
8
from .constants import *
9
10
__all__ = ["get_nuspec_layout"]
11
12
PYTHON_NUSPEC_NAME = "python.nuspec"
13
14
NUSPEC_DATA = {
15
"PYTHON_TAG": VER_DOT,
16
"PYTHON_VERSION": os.getenv("PYTHON_NUSPEC_VERSION"),
17
"FILELIST": r' <file src="**\*" exclude="python.png" target="tools" />',
18
"GIT": sys._git,
19
}
20
21
NUSPEC_PLATFORM_DATA = dict(
22
_keys=("PYTHON_BITNESS", "PACKAGENAME", "PACKAGETITLE"),
23
win32=("32-bit", "pythonx86", "Python (32-bit)"),
24
amd64=("64-bit", "python", "Python"),
25
arm32=("ARM", "pythonarm", "Python (ARM)"),
26
arm64=("ARM64", "pythonarm64", "Python (ARM64)"),
27
)
28
29
if not NUSPEC_DATA["PYTHON_VERSION"]:
30
NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}{}{}".format(
31
VER_DOT, VER_MICRO, "-" if VER_SUFFIX else "", VER_SUFFIX
32
)
33
34
FILELIST_WITH_PROPS = r""" <file src="**\*" exclude="python.png;python.props" target="tools" />
35
<file src="python.props" target="build\native" />"""
36
37
NUSPEC_TEMPLATE = r"""<?xml version="1.0"?>
38
<package>
39
<metadata>
40
<id>{PACKAGENAME}</id>
41
<title>{PACKAGETITLE}</title>
42
<version>{PYTHON_VERSION}</version>
43
<authors>Python Software Foundation</authors>
44
<license type="file">tools\LICENSE.txt</license>
45
<projectUrl>https://www.python.org/</projectUrl>
46
<description>Installs {PYTHON_BITNESS} Python for use in build scenarios.</description>
47
<icon>images\python.png</icon>
48
<iconUrl>https://www.python.org/static/favicon.ico</iconUrl>
49
<tags>python</tags>
50
<repository type="git" url="https://github.com/Python/CPython.git" commit="{GIT[2]}" />
51
</metadata>
52
<files>
53
<file src="python.png" target="images" />
54
{FILELIST}
55
</files>
56
</package>
57
"""
58
59
60
def _get_nuspec_data_overrides(ns):
61
for k, v in zip(NUSPEC_PLATFORM_DATA["_keys"], NUSPEC_PLATFORM_DATA[ns.arch]):
62
ev = os.getenv("PYTHON_NUSPEC_" + k)
63
if ev:
64
yield k, ev
65
yield k, v
66
67
68
def get_nuspec_layout(ns):
69
if ns.include_all or ns.include_nuspec:
70
data = dict(NUSPEC_DATA)
71
for k, v in _get_nuspec_data_overrides(ns):
72
if not data.get(k):
73
data[k] = v
74
if ns.include_all or ns.include_props:
75
data["FILELIST"] = FILELIST_WITH_PROPS
76
nuspec = NUSPEC_TEMPLATE.format_map(data)
77
yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))
78
yield "python.png", ns.source / "PC" / "icons" / "logox128.png"
79
80