summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/cooker.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/cooker.py')
-rw-r--r--bitbake/lib/bb/cooker.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 80710fb97d..34fbfb0701 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -186,6 +186,12 @@ class BBCooker:
186 filtered_keys = bb.utils.approved_variables() 186 filtered_keys = bb.utils.approved_variables()
187 bb.data.inheritFromOS(self.configuration.data, self.savedenv, filtered_keys) 187 bb.data.inheritFromOS(self.configuration.data, self.savedenv, filtered_keys)
188 188
189 def enableDataTracking(self):
190 self.configuration.data.enableTracking()
191
192 def disableDataTracking(self):
193 self.configuration.data.disableTracking()
194
189 def loadConfigurationData(self): 195 def loadConfigurationData(self):
190 self.initConfigurationData() 196 self.initConfigurationData()
191 197
@@ -201,6 +207,89 @@ class BBCooker:
201 if not self.configuration.cmd: 207 if not self.configuration.cmd:
202 self.configuration.cmd = self.configuration.data.getVar("BB_DEFAULT_TASK", True) or "build" 208 self.configuration.cmd = self.configuration.data.getVar("BB_DEFAULT_TASK", True) or "build"
203 209
210 def saveConfigurationVar(self, var, val, default_file):
211
212 replaced = False
213 #do not save if nothing changed
214 if str(val) == self.configuration.data.getVar(var):
215 return
216
217 conf_files = self.configuration.data.varhistory.get_variable_files(var)
218
219 #format the value when it is a list
220 if isinstance(val, list):
221 listval = ""
222 for value in val:
223 listval += "%s " % value
224 val = listval
225
226 topdir = self.configuration.data.getVar("TOPDIR")
227
228 #comment or replace operations made on var
229 for conf_file in conf_files:
230 if topdir in conf_file:
231 with open(conf_file, 'r') as f:
232 contents = f.readlines()
233 f.close()
234
235 lines = self.configuration.data.varhistory.get_variable_lines(var, conf_file)
236 for line in lines:
237 total = ""
238 i = 0
239 for c in contents:
240 total += c
241 i = i + 1
242 if i==int(line):
243 end_index = len(total)
244 index = total.rfind(var, 0, end_index)
245
246 begin_line = total.count("\n",0,index)
247 end_line = int(line)
248
249 #check if the variable was saved before in the same way
250 #if true it replace the place where the variable was declared
251 #else it comments it
252 if contents[begin_line-1]== "#added by bitbake\n":
253 contents[begin_line] = "%s = \"%s\"\n" % (var, val)
254 replaced = True
255 else:
256 for ii in range(begin_line, end_line):
257 contents[ii] = "#" + contents[ii]
258
259 total = ""
260 for c in contents:
261 total += c
262 with open(conf_file, 'w') as f:
263 f.write(total)
264 f.close()
265
266 if replaced == False:
267 #remove var from history
268 self.configuration.data.varhistory.del_var_history(var)
269
270 #add var to the end of default_file
271 default_file = self._findConfigFile(default_file)
272
273 with open(default_file, 'r') as f:
274 contents = f.readlines()
275 f.close()
276
277 total = ""
278 for c in contents:
279 total += c
280
281 #add the variable on a single line, to be easy to replace the second time
282 total += "#added by bitbake"
283 total += "\n%s = \"%s\"\n" % (var, val)
284
285 with open(default_file, 'w') as f:
286 f.write(total)
287 f.close()
288
289 #add to history
290 loginfo = {"op":set, "file":default_file, "line":total.count("\n")}
291 self.configuration.data.setVar(var, val, **loginfo)
292
204 def parseConfiguration(self): 293 def parseConfiguration(self):
205 294
206 # Set log file verbosity 295 # Set log file verbosity