builder.braak.pro/config/worker/blender/version.py
2024-11-19 21:41:39 +01:00

52 lines
1.9 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 l in file:
match = regex.match(l)
if match:
return match.group(1)
raise BaseException(f"Failed to parse {filename.name} header for {define}")