|
- #!/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
|