2
0
mirror of https://gitlab.com/ita1024/waf.git synced 2024-12-26 11:05:51 +01:00
waf/waflib/Errors.py
2011-09-10 11:13:51 +02:00

71 lines
1.6 KiB
Python

#!/usr/bin/env python
# encoding: utf-8
# Thomas Nagy, 2010 (ita)
"""
Exceptions used in the Waf code
"""
import traceback, sys
class WafError(Exception):
"""Base class for all Waf errors"""
def __init__(self, msg='', ex=None):
"""
:param msg: error message
:type msg: string
:param ex: exception causing this error (optional)
:type ex: exception
"""
self.msg = msg
assert not isinstance(msg, Exception)
self.stack = []
if ex:
if not msg:
self.msg = str(ex)
if isinstance(ex, WafError):
self.stack = ex.stack
else:
self.stack = traceback.extract_tb(sys.exc_info()[2])
self.stack += traceback.extract_stack()[:-1]
self.verbose_msg = ''.join(traceback.format_list(self.stack))
def __str__(self):
return str(self.msg)
class BuildError(WafError):
"""
Errors raised during the build and install phases
"""
def __init__(self, error_tasks=[]):
"""
:param error_tasks: tasks that could not complete normally
:type error_tasks: list of task objects
"""
self.tasks = error_tasks
WafError.__init__(self, self.format_error())
def format_error(self):
"""format the error messages from the tasks that failed"""
lst = ['Build failed']
for tsk in self.tasks:
txt = tsk.format_error()
if txt: lst.append(txt)
return '\n'.join(lst)
class ConfigurationError(WafError):
"""
Configuration exception raised in particular by :py:meth:`waflib.Context.Context.fatal`
"""
pass
class TaskRescan(WafError):
"""task-specific exception type, trigger a signature recomputation"""
pass
class TaskNotReady(WafError):
"""task-specific exception type, raised when the task signature cannot be computed"""
pass