summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/parse/ast.py
diff options
context:
space:
mode:
authorHolger Freyther <ich@tamarin.(none)>2009-05-18 19:24:07 +0200
committerRichard Purdie <rpurdie@linux.intel.com>2010-02-15 17:06:50 +0000
commit4b25b519ae46b283988a1847e56a19b01269b3a4 (patch)
tree00392d149975e64e1c685f7621844b2cc00a8792 /bitbake/lib/bb/parse/ast.py
parent5bac3403d7e51f72ee16c8123c2c8607a1d93ca9 (diff)
downloadpoky-4b25b519ae46b283988a1847e56a19b01269b3a4.tar.gz
bitbake: [parser] Cary a Statement Node through the parsing
When parsing we will collect a number of statements that can be evaluated...The plan is to be evaluate things twice (old+new) and then compare the result, it should be the same. Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'bitbake/lib/bb/parse/ast.py')
-rw-r--r--bitbake/lib/bb/parse/ast.py114
1 files changed, 61 insertions, 53 deletions
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
index 032b4961ba..8e7ba7fde8 100644
--- a/bitbake/lib/bb/parse/ast.py
+++ b/bitbake/lib/bb/parse/ast.py
@@ -21,23 +21,33 @@
21# with this program; if not, write to the Free Software Foundation, Inc., 21# with this program; if not, write to the Free Software Foundation, Inc.,
22# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 23
24import bb, re 24import bb, re, string
25 25
26__word__ = re.compile(r"\S+") 26__word__ = re.compile(r"\S+")
27__parsed_methods__ = methodpool.get_parsed_dict() 27__parsed_methods__ = bb.methodpool.get_parsed_dict()
28 28
29def handleInclude(m, fn, lineno, data, force): 29class StatementGroup:
30 def __init__(self):
31 self.statements = []
32
33 def eval(self, data):
34 """
35 Apply each statement on the data... in order
36 """
37 map(lambda x: x.eval(data), self.statements)
38
39def handleInclude(statements, m, fn, lineno, data, force):
30 s = bb.data.expand(m.group(1), data) 40 s = bb.data.expand(m.group(1), data)
31 bb.msg.debug(3, bb.msg.domain.Parsing, "CONF %s:%d: including %s" % (fn, lineno, s)) 41 bb.msg.debug(3, bb.msg.domain.Parsing, "CONF %s:%d: including %s" % (fn, lineno, s))
32 if force: 42 if force:
33 include(fn, s, data, "include required") 43 bb.parse.ConfHandler.include(statements, fn, s, data, "include required")
34 else: 44 else:
35 include(fn, s, data, False) 45 bb.parse.ConfHandler.include(statements, fn, s, data, False)
36 46
37def handleExport(m, data): 47def handleExport(statements, m, data):
38 bb.data.setVarFlag(m.group(1), "export", 1, data) 48 bb.data.setVarFlag(m.group(1), "export", 1, data)
39 49
40def handleData(groupd, data): 50def handleData(statements, groupd, data):
41 key = groupd["var"] 51 key = groupd["var"]
42 if "exp" in groupd and groupd["exp"] != None: 52 if "exp" in groupd and groupd["exp"] != None:
43 bb.data.setVarFlag(key, "export", 1, data) 53 bb.data.setVarFlag(key, "export", 1, data)
@@ -71,45 +81,43 @@ def getFunc(groupd, key, data):
71 else: 81 else:
72 return bb.data.getVar(key, data) 82 return bb.data.getVar(key, data)
73 83
74def handleMethod(func_name, lineno, fn, body, d): 84def handleMethod(statements, func_name, lineno, fn, body, d):
75 if func_name == "__anonymous": 85 if func_name == "__anonymous":
76 funcname = ("__anon_%s_%s" % (lineno, fn.translate(string.maketrans('/.+-', '____')))) 86 funcname = ("__anon_%s_%s" % (lineno, fn.translate(string.maketrans('/.+-', '____'))))
77 if not funcname in methodpool._parsed_fns: 87 if not funcname in bb.methodpool._parsed_fns:
78 text = "def %s(d):\n" % (funcname) + '\n'.join(body) 88 text = "def %s(d):\n" % (funcname) + '\n'.join(body)
79 methodpool.insert_method(funcname, text, fn) 89 bb.methodpool.insert_method(funcname, text, fn)
80 anonfuncs = data.getVar('__BBANONFUNCS', d) or [] 90 anonfuncs = bb.data.getVar('__BBANONFUNCS', d) or []
81 anonfuncs.append(funcname) 91 anonfuncs.append(funcname)
82 data.setVar('__BBANONFUNCS', anonfuncs, d) 92 bb.data.setVar('__BBANONFUNCS', anonfuncs, d)
83 else: 93 else:
84 data.setVarFlag(func_name, "func", 1, d) 94 bb.data.setVarFlag(func_name, "func", 1, d)
85 data.setVar(func_name, '\n'.join(body), d) 95 bb.data.setVar(func_name, '\n'.join(body), d)
86
87
88 96
89def handlePythonMethod(root, body, fn): 97def handlePythonMethod(statements, root, body, fn):
90 # Note we will add root to parsedmethods after having parse 98 # Note we will add root to parsedmethods after having parse
91 # 'this' file. This means we will not parse methods from 99 # 'this' file. This means we will not parse methods from
92 # bb classes twice 100 # bb classes twice
93 if not root in __parsed_methods__: 101 if not root in __parsed_methods__:
94 text = '\n'.join(body) 102 text = '\n'.join(body)
95 methodpool.insert_method(root, text, fn) 103 bb.methodpool.insert_method(root, text, fn)
96 104
97def handleMethodFlags(key, m, d): 105def handleMethodFlags(statements, key, m, d):
98 if data.getVar(key, d): 106 if bb.data.getVar(key, d):
99 # Clean up old version of this piece of metadata, as its 107 # Clean up old version of this piece of metadata, as its
100 # flags could cause problems 108 # flags could cause problems
101 data.setVarFlag(key, 'python', None, d) 109 bb.data.setVarFlag(key, 'python', None, d)
102 data.setVarFlag(key, 'fakeroot', None, d) 110 bb.data.setVarFlag(key, 'fakeroot', None, d)
103 if m.group("py") is not None: 111 if m.group("py") is not None:
104 data.setVarFlag(key, "python", "1", d) 112 bb.data.setVarFlag(key, "python", "1", d)
105 else: 113 else:
106 data.delVarFlag(key, "python", d) 114 bb.data.delVarFlag(key, "python", d)
107 if m.group("fr") is not None: 115 if m.group("fr") is not None:
108 data.setVarFlag(key, "fakeroot", "1", d) 116 bb.data.setVarFlag(key, "fakeroot", "1", d)
109 else: 117 else:
110 data.delVarFlag(key, "fakeroot", d) 118 bb.data.delVarFlag(key, "fakeroot", d)
111 119
112def handleExportFuncs(m, d): 120def handleExportFuncs(statements, m, classes, d):
113 fns = m.group(1) 121 fns = m.group(1)
114 n = __word__.findall(fns) 122 n = __word__.findall(fns)
115 for f in n: 123 for f in n:
@@ -125,27 +133,27 @@ def handleExportFuncs(m, d):
125 vars.append([allvars[0], allvars[2]]) 133 vars.append([allvars[0], allvars[2]])
126 134
127 for (var, calledvar) in vars: 135 for (var, calledvar) in vars:
128 if data.getVar(var, d) and not data.getVarFlag(var, 'export_func', d): 136 if bb.data.getVar(var, d) and not bb.data.getVarFlag(var, 'export_func', d):
129 continue 137 continue
130 138
131 if data.getVar(var, d): 139 if bb.data.getVar(var, d):
132 data.setVarFlag(var, 'python', None, d) 140 bb.data.setVarFlag(var, 'python', None, d)
133 data.setVarFlag(var, 'func', None, d) 141 bb.data.setVarFlag(var, 'func', None, d)
134 142
135 for flag in [ "func", "python" ]: 143 for flag in [ "func", "python" ]:
136 if data.getVarFlag(calledvar, flag, d): 144 if bb.data.getVarFlag(calledvar, flag, d):
137 data.setVarFlag(var, flag, data.getVarFlag(calledvar, flag, d), d) 145 bb.data.setVarFlag(var, flag, bb.data.getVarFlag(calledvar, flag, d), d)
138 for flag in [ "dirs" ]: 146 for flag in [ "dirs" ]:
139 if data.getVarFlag(var, flag, d): 147 if bb.data.getVarFlag(var, flag, d):
140 data.setVarFlag(calledvar, flag, data.getVarFlag(var, flag, d), d) 148 bb.data.setVarFlag(calledvar, flag, bb.data.getVarFlag(var, flag, d), d)
141 149
142 if data.getVarFlag(calledvar, "python", d): 150 if bb.data.getVarFlag(calledvar, "python", d):
143 data.setVar(var, "\tbb.build.exec_func('" + calledvar + "', d)\n", d) 151 bb.data.setVar(var, "\tbb.build.exec_func('" + calledvar + "', d)\n", d)
144 else: 152 else:
145 data.setVar(var, "\t" + calledvar + "\n", d) 153 bb.data.setVar(var, "\t" + calledvar + "\n", d)
146 data.setVarFlag(var, 'export_func', '1', d) 154 bb.data.setVarFlag(var, 'export_func', '1', d)
147 155
148def handleAddTask(m, d): 156def handleAddTask(statements, m, d):
149 func = m.group("func") 157 func = m.group("func")
150 before = m.group("before") 158 before = m.group("before")
151 after = m.group("after") 159 after = m.group("after")
@@ -154,38 +162,38 @@ def handleAddTask(m, d):
154 if func[:3] != "do_": 162 if func[:3] != "do_":
155 var = "do_" + func 163 var = "do_" + func
156 164
157 data.setVarFlag(var, "task", 1, d) 165 bb.data.setVarFlag(var, "task", 1, d)
158 166
159 bbtasks = data.getVar('__BBTASKS', d) or [] 167 bbtasks = bb.data.getVar('__BBTASKS', d) or []
160 if not var in bbtasks: 168 if not var in bbtasks:
161 bbtasks.append(var) 169 bbtasks.append(var)
162 data.setVar('__BBTASKS', bbtasks, d) 170 bb.data.setVar('__BBTASKS', bbtasks, d)
163 171
164 existing = data.getVarFlag(var, "deps", d) or [] 172 existing = bb.data.getVarFlag(var, "deps", d) or []
165 if after is not None: 173 if after is not None:
166 # set up deps for function 174 # set up deps for function
167 for entry in after.split(): 175 for entry in after.split():
168 if entry not in existing: 176 if entry not in existing:
169 existing.append(entry) 177 existing.append(entry)
170 data.setVarFlag(var, "deps", existing, d) 178 bb.data.setVarFlag(var, "deps", existing, d)
171 if before is not None: 179 if before is not None:
172 # set up things that depend on this func 180 # set up things that depend on this func
173 for entry in before.split(): 181 for entry in before.split():
174 existing = data.getVarFlag(entry, "deps", d) or [] 182 existing = bb.data.getVarFlag(entry, "deps", d) or []
175 if var not in existing: 183 if var not in existing:
176 data.setVarFlag(entry, "deps", [var] + existing, d) 184 bb.data.setVarFlag(entry, "deps", [var] + existing, d)
177 185
178def handleBBHandlers(m, d): 186def handleBBHandlers(statements, m, d):
179 fns = m.group(1) 187 fns = m.group(1)
180 hs = __word__.findall(fns) 188 hs = __word__.findall(fns)
181 bbhands = data.getVar('__BBHANDLERS', d) or [] 189 bbhands = bb.data.getVar('__BBHANDLERS', d) or []
182 for h in hs: 190 for h in hs:
183 bbhands.append(h) 191 bbhands.append(h)
184 data.setVarFlag(h, "handler", 1, d) 192 bb.data.setVarFlag(h, "handler", 1, d)
185 data.setVar('__BBHANDLERS', bbhands, d) 193 bb.data.setVar('__BBHANDLERS', bbhands, d)
186 194
187def handleInherit(m, d): 195def handleInherit(statements, m, d):
188 files = m.group(1) 196 files = m.group(1)
189 n = __word__.findall(files) 197 n = __word__.findall(files)
190 inherit(n, d) 198 bb.parse.BBHandler.inherit(statements, n, d)
191 199