"""
Provides .props file.
"""
import os
import sys
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"),
"FILELIST": r' ',
"GIT": sys._git,
}
NUSPEC_PLATFORM_DATA = dict(
_keys=("PYTHON_BITNESS", "PACKAGENAME", "PACKAGETITLE"),
win32=("32-bit", "pythonx86", "Python (32-bit)"),
amd64=("64-bit", "python", "Python"),
arm32=("ARM", "pythonarm", "Python (ARM)"),
arm64=("ARM64", "pythonarm64", "Python (ARM64)"),
win32t=("32-bit free-threaded", "pythonx86-freethreaded", "Python (32-bit, free-threaded)"),
amd64t=("64-bit free-threaded", "python-freethreaded", "Python (free-threaded)"),
arm32t=("ARM free-threaded", "pythonarm-freethreaded", "Python (ARM, free-threaded)"),
arm64t=("ARM64 free-threaded", "pythonarm64-freethreaded", "Python (ARM64, free-threaded)"),
)
if not NUSPEC_DATA["PYTHON_VERSION"]:
NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}{}{}".format(
VER_DOT, VER_MICRO, "-" if VER_SUFFIX else "", VER_SUFFIX
)
FILELIST_WITH_PROPS = r"""
"""
NUSPEC_TEMPLATE = r"""
{PACKAGENAME}
{PACKAGETITLE}
{PYTHON_VERSION}
Python Software Foundation
tools\LICENSE.txt
https://www.python.org/
Installs {PYTHON_BITNESS} Python for use in build scenarios.
images\python.png
https://www.python.org/static/favicon.ico
python
{FILELIST}
"""
def _get_nuspec_data_overrides(ns):
arch = ns.arch
if ns.include_freethreaded:
arch += "t"
for k, v in zip(NUSPEC_PLATFORM_DATA["_keys"], NUSPEC_PLATFORM_DATA[arch]):
ev = os.getenv("PYTHON_NUSPEC_" + k)
if ev:
yield k, ev
yield k, v
def get_nuspec_layout(ns):
if ns.include_all or ns.include_nuspec:
data = dict(NUSPEC_DATA)
for k, v in _get_nuspec_data_overrides(ns):
if not data.get(k):
data[k] = v
if ns.include_all or ns.include_props:
data["FILELIST"] = FILELIST_WITH_PROPS
nuspec = NUSPEC_TEMPLATE.format_map(data)
yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))
yield "python.png", ns.source / "PC" / "icons" / "logox128.png"