meson-python: Improve logging on build failure by displaying file contents of `meson-log.txt`

The current output from pip when encountering a build error is very poor. gh-231 will fix one part of that, by reducing the traceback of irrelevant pip/meson-python internals. There is a second part however which we need to improve on, which is showing the actual root cause of a build failure when possible. Now what happens is the user sees something like:

../../scipy/meson.build:40:0: ERROR: Command "/usr/bin/python3 -c import os; os.chdir(".."); import numpy; print(numpy.get_include())" failed with status 1.

A full log can be found at /tmp/pip-install-3okqoo15/scipy_a5afe2fae16c4250875f20d9db43706f/.mesonpy-u88p7q3f/build/meson-logs/meson-log.txt

and is then left wondering "why does import numpy fail, given numpy is a build dependency?". The answer is in meson-log.txt, which pip has unhelpfully already cleaned up. So it’s impossible to diagnose the issue (latest example for scipy here).

Two options to improve here that I can think of:

  1. Don’t clean up the log file
  2. Print to log file contents to stdout (possibly followed by repeating the root cause from the original stdout content)

(2) is probably better than (1).

About this issue

  • Original URL
  • State: open
  • Created 2 years ago
  • Comments: 21 (19 by maintainers)

Most upvoted comments

Suggestion by @oscarbenjamin in https://github.com/mesonbuild/meson-python/discussions/602#discussioncomment-8870523:

[what] would be very helpful in this situation is an easy way to get it to show the full logs like a MESON_PYTHON_SHOW_LOGS environment variable

I think we should do both avoid cleaning up ourselves and improve terminal output. Right now I think pip will still clean up for a regular isolated build, so the user trying to diagnose a build failure still has a problem.