Skip to content

Commit 576a45a

Browse files
committed
fix: display quiet Meson configuration errors
1 parent 8da1266 commit 576a45a

2 files changed

Lines changed: 57 additions & 0 deletions

File tree

‎spin/cmds/meson.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,8 @@ def build(
385385
if not (os.path.exists(build_dir) and _meson_version_configured(build_dir)):
386386
p = _run(setup_cmd, sys_exit=False, output=not quiet)
387387
if p.returncode != 0:
388+
if quiet:
389+
print(p.stdout.decode("utf-8"), end="")
388390
raise RuntimeError(
389391
"Meson configuration failed; please try `spin build` again with the `--clean` flag."
390392
)

‎spin/tests/test_meson.py‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,67 @@
44
from os.path import join as pjoin
55
from os.path import normpath
66

7+
import click
78
import pytest
89

910
from spin.cmds import meson
1011
from spin.containers import DotDict
1112

1213

14+
@pytest.fixture
15+
def failing_meson(tmp_path, monkeypatch):
16+
monkeypatch.setenv("PYTHONIOENCODING", "utf-8")
17+
script = tmp_path / "meson.py"
18+
script.write_text(
19+
"import sys\n"
20+
"print('Meson setup: configuration error – wrong Cython version')\n"
21+
"print('Diagnostic from stderr', file=sys.stderr)\n"
22+
"sys.exit(1)\n",
23+
encoding="utf-8",
24+
)
25+
monkeypatch.setattr(meson, "_meson_cli", lambda: [sys.executable, str(script)])
26+
monkeypatch.setattr(meson, "get_config", lambda: DotDict({}))
27+
return str(tmp_path / "build")
28+
29+
30+
@pytest.mark.parametrize("quiet", [False, True])
31+
def test_configuration_failure_output(failing_meson, capfd, quiet):
32+
with pytest.raises(RuntimeError, match="Meson configuration failed"):
33+
meson.build.callback(
34+
meson_args=(), build_dir=failing_meson, prefix="/usr", quiet=quiet
35+
)
36+
captured = capfd.readouterr()
37+
output = captured.out + captured.err
38+
assert output.count("Meson setup: configuration error – wrong Cython version") == 1
39+
assert output.count("Diagnostic from stderr") == 1
40+
41+
42+
def test_run_configuration_failure_output(failing_meson, monkeypatch, capfd):
43+
monkeypatch.setattr(meson, "_get_configured_command", lambda name: meson.build)
44+
with (
45+
click.Context(meson.run),
46+
pytest.raises(RuntimeError, match="Meson configuration failed"),
47+
):
48+
meson.run.callback(
49+
args=("unused-command",), build=True, build_dir=failing_meson
50+
)
51+
captured = capfd.readouterr()
52+
assert "configuration error – wrong Cython version" in captured.err
53+
assert "Diagnostic from stderr" in captured.err
54+
assert "configuration error" not in captured.out
55+
56+
57+
def test_successful_quiet_build_output(failing_meson, capfd):
58+
script = os.path.join(os.path.dirname(failing_meson), "meson.py")
59+
with open(script, "w", encoding="utf-8") as file:
60+
file.write("print('Successful build output')\n")
61+
meson.build.callback(
62+
meson_args=(), build_dir=failing_meson, prefix="/usr", quiet=True
63+
)
64+
captured = capfd.readouterr()
65+
assert "Successful build output" not in captured.out + captured.err
66+
67+
1368
def make_paths(root, paths):
1469
for p in paths:
1570
os.makedirs(pjoin(root, p.lstrip("/")))

0 commit comments

Comments
 (0)