summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/ui/crumbs/configurator.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/ui/crumbs/configurator.py')
-rw-r--r--bitbake/lib/bb/ui/crumbs/configurator.py94
1 files changed, 63 insertions, 31 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/configurator.py b/bitbake/lib/bb/ui/crumbs/configurator.py
index c37e9175ea..458e05626d 100644
--- a/bitbake/lib/bb/ui/crumbs/configurator.py
+++ b/bitbake/lib/bb/ui/crumbs/configurator.py
@@ -40,12 +40,13 @@ class Configurator(gobject.GObject):
40 40
41 def __init__(self): 41 def __init__(self):
42 gobject.GObject.__init__(self) 42 gobject.GObject.__init__(self)
43 self.local = None
44 self.bblayers = None 43 self.bblayers = None
45 self.enabled_layers = {} 44 self.enabled_layers = {}
46 self.loaded_layers = {} 45 self.loaded_layers = {}
47 self.config = {} 46 self.config = {}
48 self.orig_config = {} 47 self.orig_config = {}
48 self.preconf = None
49 self.postconf = None
49 50
50 # NOTE: cribbed from the cooker... 51 # NOTE: cribbed from the cooker...
51 def _parse(self, f, data, include=False): 52 def _parse(self, f, data, include=False):
@@ -55,18 +56,16 @@ class Configurator(gobject.GObject):
55 parselog.critical("Unable to parse %s: %s" % (f, exc)) 56 parselog.critical("Unable to parse %s: %s" % (f, exc))
56 sys.exit(1) 57 sys.exit(1)
57 58
58 def _loadLocalConf(self, path): 59 def _loadConf(self, path):
59 def getString(var): 60 def getString(var):
60 return bb.data.getVar(var, data, True) or "" 61 return bb.data.getVar(var, data, True) or ""
61 62
62 self.local = path
63
64 if self.orig_config: 63 if self.orig_config:
65 del self.orig_config 64 del self.orig_config
66 self.orig_config = {} 65 self.orig_config = {}
67 66
68 data = bb.data.init() 67 data = bb.data.init()
69 data = self._parse(self.local, data) 68 data = self._parse(path, data)
70 69
71 # We only need to care about certain variables 70 # We only need to care about certain variables
72 mach = getString('MACHINE') 71 mach = getString('MACHINE')
@@ -76,6 +75,8 @@ class Configurator(gobject.GObject):
76 if sdkmach and sdkmach != self.config.get('SDKMACHINE', ''): 75 if sdkmach and sdkmach != self.config.get('SDKMACHINE', ''):
77 self.config['SDKMACHINE'] = sdkmach 76 self.config['SDKMACHINE'] = sdkmach
78 distro = getString('DISTRO') 77 distro = getString('DISTRO')
78 if not distro:
79 distro = "defaultsetup"
79 if distro and distro != self.config.get('DISTRO', ''): 80 if distro and distro != self.config.get('DISTRO', ''):
80 self.config['DISTRO'] = distro 81 self.config['DISTRO'] = distro
81 bbnum = getString('BB_NUMBER_THREADS') 82 bbnum = getString('BB_NUMBER_THREADS')
@@ -109,10 +110,10 @@ class Configurator(gobject.GObject):
109 110
110 self.orig_config = copy.deepcopy(self.config) 111 self.orig_config = copy.deepcopy(self.config)
111 112
112 def setLocalConfVar(self, var, val): 113 def setConfVar(self, var, val):
113 self.config[var] = val 114 self.config[var] = val
114 115
115 def getLocalConfVar(self, var): 116 def getConfVar(self, var):
116 if var in self.config: 117 if var in self.config:
117 return self.config[var] 118 return self.config[var]
118 else: 119 else:
@@ -135,9 +136,17 @@ class Configurator(gobject.GObject):
135 self.emit("layers-loaded") 136 self.emit("layers-loaded")
136 137
137 def _addConfigFile(self, path): 138 def _addConfigFile(self, path):
139 conffiles = ["local.conf", "hob-pre.conf", "hob-post.conf"]
138 pref, sep, filename = path.rpartition("/") 140 pref, sep, filename = path.rpartition("/")
139 if filename == "local.conf" or filename == "hob.local.conf": 141
140 self._loadLocalConf(path) 142 if filename == "hob-pre.conf":
143 self.preconf = path
144
145 if filename == "hob-post.conf":
146 self.postconf = path
147
148 if filename in conffiles:
149 self._loadConf(path)
141 elif filename == "bblayers.conf": 150 elif filename == "bblayers.conf":
142 self._loadLayerConf(path) 151 self._loadLayerConf(path)
143 152
@@ -220,22 +229,8 @@ class Configurator(gobject.GObject):
220 with open(conffile, "w") as new: 229 with open(conffile, "w") as new:
221 new.write("".join(contents)) 230 new.write("".join(contents))
222 231
223 def writeLocalConf(self): 232 def updateConf(self, orig_lines, changed_values):
224 # Dictionary containing only new or modified variables 233 new_config_lines = []
225 changed_values = {}
226 for var in self.config:
227 val = self.config[var]
228 if self.orig_config.get(var, None) != val:
229 changed_values[var] = val
230
231 if not len(changed_values):
232 return
233
234 # read the original conf into a list
235 with open(self.local, 'r') as config:
236 config_lines = config.readlines()
237
238 new_config_lines = ["\n"]
239 for var in changed_values: 234 for var in changed_values:
240 # Convenience function for re.subn(). If the pattern matches 235 # Convenience function for re.subn(). If the pattern matches
241 # return a string which contains an assignment using the same 236 # return a string which contains an assignment using the same
@@ -254,10 +249,10 @@ class Configurator(gobject.GObject):
254 # Iterate over the local.conf lines and if they are a match 249 # Iterate over the local.conf lines and if they are a match
255 # for the pattern comment out the line and append a new line 250 # for the pattern comment out the line and append a new line
256 # with the new VAR op "value" entry 251 # with the new VAR op "value" entry
257 for line in config_lines: 252 for line in orig_lines:
258 new_line, replacements = p.subn(replace_val, line) 253 new_line, replacements = p.subn(replace_val, line)
259 if replacements: 254 if replacements:
260 config_lines[cnt] = "#%s" % line 255 orig_lines[cnt] = "#%s" % line
261 new_config_lines.append(new_line) 256 new_config_lines.append(new_line)
262 replaced = True 257 replaced = True
263 cnt = cnt + 1 258 cnt = cnt + 1
@@ -266,16 +261,53 @@ class Configurator(gobject.GObject):
266 new_config_lines.append("%s = \"%s\"\n" % (var, changed_values[var])) 261 new_config_lines.append("%s = \"%s\"\n" % (var, changed_values[var]))
267 262
268 # Add the modified variables 263 # Add the modified variables
269 config_lines.extend(new_config_lines) 264 orig_lines.extend(new_config_lines)
265 return orig_lines
266
267 def writeConf(self):
268 pre_vars = ["MACHINE", "SDKMACHINE", "DISTRO",
269 "INCOMPATIBLE_LICENSE"]
270 post_vars = ["BB_NUMBER_THREADS", "PARALLEL_MAKE", "PACKAGE_CLASSES",
271 "IMAGE_FSTYPES", "HOB_BUILD_TOOLCHAIN",
272 "HOB_BUILD_TOOLCHAIN_HEADERS"]
273 pre_values = {}
274 post_values = {}
275 changed_values = {}
276 pre_lines = None
277 post_lines = None
270 278
271 self.writeConfFile(self.local, config_lines) 279 for var in self.config:
280 val = self.config[var]
281 if self.orig_config.get(var, None) != val:
282 changed_values[var] = val
283
284 if not len(changed_values):
285 return
286
287 for var in changed_values:
288 if var in pre_vars:
289 pre_values[var] = changed_values[var]
290 elif var in post_vars:
291 post_values[var] = changed_values[var]
292
293 with open(self.preconf, 'r') as pre:
294 pre_lines = pre.readlines()
295 pre_lines = self.updateConf(pre_lines, pre_values)
296 if len(pre_lines):
297 self.writeConfFile(self.preconf, pre_lines)
298
299 with open(self.postconf, 'r') as post:
300 post_lines = post.readlines()
301 post_lines = self.updateConf(post_lines, post_values)
302 if len(post_lines):
303 self.writeConfFile(self.postconf, post_lines)
272 304
273 del self.orig_config 305 del self.orig_config
274 self.orig_config = copy.deepcopy(self.config) 306 self.orig_config = copy.deepcopy(self.config)
275 307
276 def insertTempBBPath(self, bbpath, bbfiles): 308 def insertTempBBPath(self, bbpath, bbfiles):
277 # read the original conf into a list 309 # read the original conf into a list
278 with open(self.local, 'r') as config: 310 with open(self.postconf, 'r') as config:
279 config_lines = config.readlines() 311 config_lines = config.readlines()
280 312
281 if bbpath: 313 if bbpath:
@@ -283,7 +315,7 @@ class Configurator(gobject.GObject):
283 if bbfiles: 315 if bbfiles:
284 config_lines.append("BBFILES := \"${BBFILES} %s\"\n" % bbfiles) 316 config_lines.append("BBFILES := \"${BBFILES} %s\"\n" % bbfiles)
285 317
286 self.writeConfFile(self.local, config_lines) 318 self.writeConfFile(self.postconf, config_lines)
287 319
288 def writeLayerConf(self): 320 def writeLayerConf(self):
289 # If we've not added/removed new layers don't write 321 # If we've not added/removed new layers don't write