replace Meson version check with a specification-compliant version comparator
The current check compares the integers split out from `meson --version` one by one. This is an ad-hoc version comparison algorithm with a few flaws, notably that it doesn't truly understand how version components fit together, and that broke once Meson bumped the major version. There are other potential issues that could show up but haven't yet, such as versions with words in them (release candidates). The packaging module is a high-quality library that provides a standard version parsing algorithm, with which you can simply say "is this version object greater than that one". Use it instead. Fixes #1545
This commit is contained in:
parent
19e0e2fe8d
commit
c4ec49e125
|
@ -18,6 +18,8 @@ import subprocess
|
||||||
import struct
|
import struct
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
|
from packaging.version import Version
|
||||||
|
|
||||||
from litex import get_data_mod
|
from litex import get_data_mod
|
||||||
from litex.gen import colorer
|
from litex.gen import colorer
|
||||||
|
|
||||||
|
@ -253,20 +255,18 @@ class Builder:
|
||||||
def _check_meson(self):
|
def _check_meson(self):
|
||||||
# Check Meson install/version.
|
# Check Meson install/version.
|
||||||
meson_present = (shutil.which("meson") is not None)
|
meson_present = (shutil.which("meson") is not None)
|
||||||
meson_version = [0, 0, 0]
|
meson_req = '0.59'
|
||||||
meson_major_min = 0
|
|
||||||
meson_minor_min = 59
|
|
||||||
if meson_present:
|
if meson_present:
|
||||||
meson_version = subprocess.check_output(["meson", "-v"]).decode("utf-8").split(".")
|
meson_version = subprocess.check_output(["meson", "-v"]).decode("utf-8")
|
||||||
if (not meson_present):
|
if not Version(meson_version) >= Version(meson_req):
|
||||||
|
msg = f"Meson version to old. Found: {meson_version}. Required: {meson_req}.\n"
|
||||||
|
msg += "Try updating with:\n"
|
||||||
|
msg += "- pip3 install -U meson.\n"
|
||||||
|
raise OSError(msg)
|
||||||
|
else:
|
||||||
msg = "Unable to find valid Meson build system, please install it with:\n"
|
msg = "Unable to find valid Meson build system, please install it with:\n"
|
||||||
msg += "- pip3 install meson.\n"
|
msg += "- pip3 install meson.\n"
|
||||||
raise OSError(msg)
|
raise OSError(msg)
|
||||||
if (int(meson_version[0]) < meson_major_min) or (int(meson_version[0]) == meson_major_min and int(meson_version[1]) < meson_minor_min):
|
|
||||||
msg = f"Meson version to old. Found: {meson_version[0]}.{meson_version[1]}. Required: {meson_major_min}.{meson_minor_min}.\n"
|
|
||||||
msg += "Try updating with:\n"
|
|
||||||
msg += "- pip3 install -U meson.\n"
|
|
||||||
raise OSError(msg)
|
|
||||||
|
|
||||||
def _prepare_rom_software(self):
|
def _prepare_rom_software(self):
|
||||||
# Create directories for all software packages.
|
# Create directories for all software packages.
|
||||||
|
|
Loading…
Reference in New Issue