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"