52 lines
1.9 KiB
Python
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}")
|