diff options
Diffstat (limited to 'bitbake/lib/bb/utils.py')
| -rw-r--r-- | bitbake/lib/bb/utils.py | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 5b3cb38d81..d7383f44b2 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
| @@ -103,11 +103,11 @@ def _print_trace(body, line): | |||
| 103 | import bb | 103 | import bb |
| 104 | 104 | ||
| 105 | # print the environment of the method | 105 | # print the environment of the method |
| 106 | bb.error("Printing the environment of the function") | 106 | bb.msg.error(bb.msg.domain.Util, "Printing the environment of the function") |
| 107 | min_line = max(1,line-4) | 107 | min_line = max(1,line-4) |
| 108 | max_line = min(line+4,len(body)-1) | 108 | max_line = min(line+4,len(body)-1) |
| 109 | for i in range(min_line,max_line+1): | 109 | for i in range(min_line,max_line+1): |
| 110 | bb.error("\t%.4d:%s" % (i, body[i-1]) ) | 110 | bb.msg.error(bb.msg.domain.Util, "\t%.4d:%s" % (i, body[i-1]) ) |
| 111 | 111 | ||
| 112 | 112 | ||
| 113 | def better_compile(text, file, realfile): | 113 | def better_compile(text, file, realfile): |
| @@ -122,9 +122,9 @@ def better_compile(text, file, realfile): | |||
| 122 | 122 | ||
| 123 | # split the text into lines again | 123 | # split the text into lines again |
| 124 | body = text.split('\n') | 124 | body = text.split('\n') |
| 125 | bb.error("Error in compiling: ", realfile) | 125 | bb.msg.error(bb.msg.domain.Util, "Error in compiling: ", realfile) |
| 126 | bb.error("The lines resulting into this error were:") | 126 | bb.msg.error(bb.msg.domain.Util, "The lines resulting into this error were:") |
| 127 | bb.error("\t%d:%s:'%s'" % (e.lineno, e.__class__.__name__, body[e.lineno-1])) | 127 | bb.msg.error(bb.msg.domain.Util, "\t%d:%s:'%s'" % (e.lineno, e.__class__.__name__, body[e.lineno-1])) |
| 128 | 128 | ||
| 129 | _print_trace(body, e.lineno) | 129 | _print_trace(body, e.lineno) |
| 130 | 130 | ||
| @@ -147,8 +147,8 @@ def better_exec(code, context, text, realfile): | |||
| 147 | raise | 147 | raise |
| 148 | 148 | ||
| 149 | # print the Header of the Error Message | 149 | # print the Header of the Error Message |
| 150 | bb.error("Error in executing: ", realfile) | 150 | bb.msg.error(bb.msg.domain.Util, "Error in executing: ", realfile) |
| 151 | bb.error("Exception:%s Message:%s" % (t,value) ) | 151 | bb.msg.error(bb.msg.domain.Util, "Exception:%s Message:%s" % (t,value) ) |
| 152 | 152 | ||
| 153 | # let us find the line number now | 153 | # let us find the line number now |
| 154 | while tb.tb_next: | 154 | while tb.tb_next: |
| @@ -160,3 +160,43 @@ def better_exec(code, context, text, realfile): | |||
| 160 | _print_trace( text.split('\n'), line ) | 160 | _print_trace( text.split('\n'), line ) |
| 161 | 161 | ||
| 162 | raise | 162 | raise |
| 163 | |||
| 164 | def Enum(*names): | ||
| 165 | """ | ||
| 166 | A simple class to give Enum support | ||
| 167 | """ | ||
| 168 | |||
| 169 | assert names, "Empty enums are not supported" | ||
| 170 | |||
| 171 | class EnumClass(object): | ||
| 172 | __slots__ = names | ||
| 173 | def __iter__(self): return iter(constants) | ||
| 174 | def __len__(self): return len(constants) | ||
| 175 | def __getitem__(self, i): return constants[i] | ||
| 176 | def __repr__(self): return 'Enum' + str(names) | ||
| 177 | def __str__(self): return 'enum ' + str(constants) | ||
| 178 | |||
| 179 | class EnumValue(object): | ||
| 180 | __slots__ = ('__value') | ||
| 181 | def __init__(self, value): self.__value = value | ||
| 182 | Value = property(lambda self: self.__value) | ||
| 183 | EnumType = property(lambda self: EnumType) | ||
| 184 | def __hash__(self): return hash(self.__value) | ||
| 185 | def __cmp__(self, other): | ||
| 186 | # C fans might want to remove the following assertion | ||
| 187 | # to make all enums comparable by ordinal value {;)) | ||
| 188 | assert self.EnumType is other.EnumType, "Only values from the same enum are comparable" | ||
| 189 | return cmp(self.__value, other.__value) | ||
| 190 | def __invert__(self): return constants[maximum - self.__value] | ||
| 191 | def __nonzero__(self): return bool(self.__value) | ||
| 192 | def __repr__(self): return str(names[self.__value]) | ||
| 193 | |||
| 194 | maximum = len(names) - 1 | ||
| 195 | constants = [None] * len(names) | ||
| 196 | for i, each in enumerate(names): | ||
| 197 | val = EnumValue(i) | ||
| 198 | setattr(EnumClass, each, val) | ||
| 199 | constants[i] = val | ||
| 200 | constants = tuple(constants) | ||
| 201 | EnumType = EnumClass() | ||
| 202 | return EnumType | ||
