builder.braak.pro/buildbot/config/worker/blender/version.py
2024-11-20 16:13:44 +01:00

60 lines
2 KiB
Python

# SPDX-License-Identifier: GPL-2.0-or-later
# SPDX-FileCopyrightText: 2011-2024 Blender Authors
# <pep8 compliant>
import pathlib
import re
import worker.blender
class VersionInfo:
def __init__(self, builder: worker.blender.CodeBuilder):
# Get version information
buildinfo_h = builder.build_dir / "source" / "creator" / "buildinfo.h"
blender_h = (
builder.blender_dir
/ "source"
/ "blender"
/ "blenkernel"
/ "BKE_blender_version.h"
)
version_number = int(self._parse_header_file(blender_h, "BLENDER_VERSION"))
version_number_patch = int(
self._parse_header_file(blender_h, "BLENDER_VERSION_PATCH")
)
self.major, self.minor, self.patch = (
version_number // 100,
version_number % 100,
version_number_patch,
)
if self.major >= 3:
self.short_version = "%d.%d" % (self.major, self.minor)
self.version = "%d.%d.%d" % (self.major, self.minor, self.patch)
else:
self.short_version = "%d.%02d" % (self.major, self.minor)
self.version = "%d.%02d.%d" % (self.major, self.minor, self.patch)
self.version_cycle = self._parse_header_file(blender_h, "BLENDER_VERSION_CYCLE")
if buildinfo_h.exists():
self.hash = self._parse_header_file(buildinfo_h, "BUILD_HASH")[1:-1]
else:
self.hash = ""
self.risk_id = self.version_cycle.replace("release", "stable").replace(
"rc", "candidate"
)
self.is_development_build = self.version_cycle == "alpha"
def _parse_header_file(self, filename: pathlib.Path, define: str) -> str:
regex = re.compile(r"^#\s*define\s+%s\s+(.*)" % define)
with open(filename, "r") as file:
for line in file:
match = regex.match(line)
if match:
return match.group(1)
raise BaseException(f"Failed to parse {filename.name} header for {define}")