summaryrefslogtreecommitdiff
path: root/PC/layout/support/nuspec.py
blob: ba26ff337e91e6b8359c601e3d2ce50e14031bd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
Provides .props file.
"""

import os

from .constants import *

__all__ = ["get_nuspec_layout"]

PYTHON_NUSPEC_NAME = "python.nuspec"

NUSPEC_DATA = {
    "PYTHON_TAG": VER_DOT,
    "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" />',
}

if not NUSPEC_DATA["PYTHON_VERSION"]:
    if VER_NAME:
        NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}-{}{}".format(
            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" />
    <file src="python.props" target="build\native" />"""

NUSPEC_TEMPLATE = r"""<?xml version="1.0"?>
<package>
  <metadata>
    <id>{PACKAGENAME}</id>
    <title>{PACKAGETITLE}</title>
    <version>{PYTHON_VERSION}</version>
    <authors>Python Software Foundation</authors>
    <license type="file">tools\LICENSE.txt</license>
    <projectUrl>https://www.python.org/</projectUrl>
    <description>Installs {PYTHON_BITNESS} Python for use in build scenarios.</description>
    <iconUrl>https://www.python.org/static/favicon.ico</iconUrl>
    <tags>python</tags>
  </metadata>
  <files>
{FILELIST}
  </files>
</package>
"""


def get_nuspec_layout(ns):
    if ns.include_all or ns.include_nuspec:
        data = NUSPEC_DATA
        if ns.include_all or ns.include_props:
            data = dict(data)
            data["FILELIST"] = FILELIST_WITH_PROPS
        nuspec = NUSPEC_TEMPLATE.format_map(data)
        yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))