2011-09-10 11:13:51 +02:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# encoding: utf-8
|
2018-01-01 20:53:49 +01:00
|
|
|
# Thomas Nagy, 2010-2018 (ita)
|
2011-09-10 11:13:51 +02:00
|
|
|
|
|
|
|
"""
|
|
|
|
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
|
|
|
|
"""
|
2017-04-17 12:24:33 +02:00
|
|
|
Exception.__init__(self)
|
2011-09-10 11:13:51 +02:00
|
|
|
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):
|
2016-06-24 13:31:06 +02:00
|
|
|
"""Error raised during the build and install phases"""
|
2011-09-10 11:13:51 +02:00
|
|
|
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):
|
2016-06-24 13:31:06 +02:00
|
|
|
"""Formats the error messages from the tasks that failed"""
|
2011-09-10 11:13:51 +02:00
|
|
|
lst = ['Build failed']
|
|
|
|
for tsk in self.tasks:
|
|
|
|
txt = tsk.format_error()
|
2017-04-17 12:26:47 +02:00
|
|
|
if txt:
|
|
|
|
lst.append(txt)
|
2011-09-10 11:13:51 +02:00
|
|
|
return '\n'.join(lst)
|
|
|
|
|
|
|
|
class ConfigurationError(WafError):
|
2016-06-24 13:31:06 +02:00
|
|
|
"""Configuration exception raised in particular by :py:meth:`waflib.Context.Context.fatal`"""
|
2011-09-10 11:13:51 +02:00
|
|
|
pass
|
|
|
|
|
|
|
|
class TaskRescan(WafError):
|
2016-06-24 13:31:06 +02:00
|
|
|
"""Task-specific exception type signalling required signature recalculations"""
|
2011-09-10 11:13:51 +02:00
|
|
|
pass
|
|
|
|
|
|
|
|
class TaskNotReady(WafError):
|
2016-06-24 13:31:06 +02:00
|
|
|
"""Task-specific exception type signalling that task signatures cannot be computed"""
|
2011-09-10 11:13:51 +02:00
|
|
|
pass
|
|
|
|
|