summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/mesonmain.py15
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