1 # ex:ts=4:sw=4:sts=4:et
2 # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
4 BitBake Utility Functions
6 This program is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free Software
8 Foundation; either version 2 of the License, or (at your option) any later
11 This program is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
17 Place, Suite 330, Boston, MA 02111-1307 USA.
19 This file is part of the BitBake build tools.
23 ascii_letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
27 def explode_version(s):
29 alpha_regexp = re.compile('^([a-zA-Z]+)(.*)$')
30 numeric_regexp = re.compile('^(\d+)(.*)$')
33 m = numeric_regexp.match(s)
34 r.append(int(m.group(1)))
37 if s[0] in ascii_letters:
38 m = alpha_regexp.match(s)
45 def vercmp_part(a, b):
46 va = explode_version(a)
47 vb = explode_version(b)
57 if ca == None and cb == None:
68 r = vercmp_part(va, vb)
70 r = vercmp_part(ra, rb)
75 Take an RDEPENDS style string of format:
76 "DEPEND1 (optional version) DEPEND2 (optional version) ..."
77 and return a list of dependencies.
78 Version information is ignored.
91 if flag and i.endswith(')'):
94 #r[-1] += ' ' + ' '.join(j)
98 def better_compile(text, file, realfile):
100 A better compile method. This method
101 will print the offending lines.
104 return compile(text, file, "exec")
108 # split the text into lines again
109 body = text.split('\n')
110 bb.error("Error in compiling: ", realfile)
111 bb.error("The lines resulting into this error were:")
112 bb.error("\t%d:%s:'%s'" % (e.lineno, e.__class__.__name__, body[e.lineno-1]))
113 # print the environment of the method
114 bb.error("Printing the environment of the function")
115 min_line = max(1,e.lineno-4)
116 max_line = min(e.lineno+4,len(body))
117 for i in range(min_line,max_line+1):
118 bb.error("\t%.4d:%s" % (i, body[i-1]) )
123 def better_exec(code, context, text, realfile):
125 Similiar to better_compile, better_exec will
126 print the lines that are responsible for the
133 (t,value,tb) = sys.exc_info()
135 if t == bb.parse.SkipPackage:
138 # print the Header of the Error Message
139 bb.error("Error in executing: ", realfile)
140 bb.error("Exception:%s Message:%s" % (t,value) )
142 # let us find the line number now
147 line = traceback.tb_lineno(tb)
150 body = text.split('\n')
151 bb.error("The lines resulting into this error were:")
152 bb.error("\t%d:'%s'" % (line, body[line-1]))
154 # print the environment of the method
155 bb.error("Printing the environment of the function")
156 min_line = max(1,line-4)
157 max_line = min(line+4,len(body))
158 for i in range(min_line,max_line+1):
159 bb.error("\t%.4d:%s" % (i, body[i-1]) )