From 21796bdb9ff1bca40a93e875254c2ca42cba5104 Mon Sep 17 00:00:00 2001 From: Omer Pereg Date: Tue, 26 Jul 2022 22:09:29 +0300 Subject: [PATCH] handle OSError exception in run function --- mesonbuild/mesonmain.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py index 7589b6c8f5db..ec4bfff35c9b 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 @@ def run(self, args): 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 @@ def run(self, args): # - 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