blob: 6ef860eeb043545fa1170e2471f8942539f4f594 [file] [edit]
import io
import json
from . import constants
_LEVELS = {
0xA0: "alpha",
0xB0: "beta",
0xC0: "candidate",
0xF0: "final",
}
_TEMPLATE = {
"schema_version": "1.0",
"base_prefix": ".",
"base_interpreter": "python.exe",
"platform": None, # Set later
"language": {
"version": f"{constants.VER_MAJOR}.{constants.VER_MINOR}",
"version_info": {
"major": constants.VER_MAJOR,
"minor": constants.VER_MINOR,
"micro": constants.VER_MICRO,
"releaselevel": _LEVELS.get(constants.VER_FIELD4 & 0xF0, "final"),
"serial": constants.VER_FIELD4 & 0x0F,
},
},
"implementation": {
"name": "cpython",
"cache_tag": f"cpython-{constants.VER_MAJOR}{constants.VER_MINOR}",
"version": {
"major": constants.VER_MAJOR,
"minor": constants.VER_MINOR,
"micro": constants.VER_MICRO,
"releaselevel": _LEVELS.get(constants.VER_FIELD4 & 0xF0, "final"),
"serial": constants.VER_FIELD4 & 0x0F,
},
"hexversion": constants.VER_HEXVERSION,
},
"abi": {
"flags": [],
"extension_suffix": ".pyd",
"stable_abi_suffix": ".pyd",
},
"suffixes": {
"source": [".py", ".pyw"],
"bytecode": [".pyc"],
"extensions": [".pyd"],
},
"libpython": {
"dynamic": constants.PYTHON_DLL_NAME,
"dynamic_stableabi": constants.PYTHON_STABLE_DLL_NAME,
"link_extensions": True,
},
"c_api": {
},
}
def _with_d(path):
pre, sep, post = path.partition(".")
return pre + "_d" + sep + post
def _add_d(data, *args):
for a in args[:-1]:
data = data[a]
a = args[-1]
v = data[a]
if isinstance(v, list):
data[a] = [_with_d(i) for i in data[a]]
else:
data[a] = _with_d(data[a])
def get_builddetails(ns):
if not ns.include_builddetails_json:
return
details = dict(_TEMPLATE)
plat = {
"win32": "win32",
"amd64": "win-amd64",
"arm64": "win-arm64",
}.get(ns.arch, ns.arch)
pyd_abi_flags = ""
if ns.include_freethreaded:
details["abi"]["flags"].append("t")
pyd_abi_flags += "t"
if ns.debug:
details["abi"]["flags"].append("d")
norm_plat = plat.replace("-", "_")
ext_suffix = f".cp{constants.VER_MAJOR}{constants.VER_MINOR}{pyd_abi_flags}-{norm_plat}.pyd"
details["abi"]["extension_suffix"] = ext_suffix
details["suffixes"]["extensions"].insert(0, ext_suffix)
details["platform"] = plat
if ns.include_dev:
details["c_api"]["headers"] = "Include"
if ns.include_freethreaded:
details["libpython"]["dynamic"] = constants.FREETHREADED_PYTHON_DLL_NAME
details["libpython"]["dynamic_stableabi"] = constants.FREETHREADED_PYTHON_STABLE_DLL_NAME
if ns.debug:
_add_d(details, "base_interpreter")
_add_d(details, "abi", "stable_abi_suffix")
_add_d(details, "abi", "extension_suffix")
_add_d(details, "suffixes", "extensions")
_add_d(details, "libpython", "dynamic")
_add_d(details, "libpython", "dynamic_stableabi")
buffer = io.StringIO()
json.dump(details, buffer, indent=2)
yield "build-details.json", ("build-details.json", buffer.getvalue().encode())