diff options
| -rw-r--r-- | mesonbuild/mesonmain.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py index 7589b6c8f..ec4bfff35 100644 --- a/mesonbuild/mesonmain.py +++ b/mesonbuild/mesonmain.py @@ -13,6 +13,7 @@ # limitations under the License. # Work around some pathlib bugs... + from . import _pathlib import sys sys.modules['pathlib'] = _pathlib @@ -158,6 +159,18 @@ class CommandLineParser: if os.environ.get('MESON_FORCE_BACKTRACE'): raise return 1 + except OSError as e: + if os.environ.get('MESON_FORCE_BACKTRACE'): + raise + traceback.print_exc() + error_msg = os.linesep.join([ + "Unhandled python exception", + f"{e.strerror} - {e.args}", + "this is probably not a Meson bug."]) + + mlog.exception(error_msg) + return e.errno + except Exception as e: if os.environ.get('MESON_FORCE_BACKTRACE'): raise @@ -168,7 +181,7 @@ class CommandLineParser: # - PermissionError is always a problem in the user environment # - runpython doesn't run Meson's own code, even though it is # dispatched by our run() - if command != 'runpython' and not isinstance(e, PermissionError): + if command != 'runpython': msg = 'Unhandled python exception' if all(getattr(e, a, None) is not None for a in ['file', 'lineno', 'colno']): e = MesonBugException(msg, e.file, e.lineno, e.colno) # type: ignore |
