diff options
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/configurator.py | 94 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hobeventhandler.py | 11 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hobprefs.py | 22 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/hob.py | 4 |
4 files changed, 83 insertions, 48 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 |
diff --git a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py index fca4401420..66dffac223 100644 --- a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py +++ b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py | |||
| @@ -65,7 +65,7 @@ class HobHandler(gobject.GObject): | |||
| 65 | gobject.TYPE_STRING,)), | 65 | gobject.TYPE_STRING,)), |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | (CFG_PATH_LOCAL, CFG_PATH_HOB, CFG_PATH_LAYERS, CFG_FILES_DISTRO, CFG_FILES_MACH, CFG_FILES_SDK, FILES_MATCH_CLASS, GENERATE_TGTS, REPARSE_FILES, BUILD_IMAGE) = range(10) | 68 | (CFG_PATH_LOCAL, CFG_PATH_PRE, CFG_PATH_POST, CFG_PATH_LAYERS, CFG_FILES_DISTRO, CFG_FILES_MACH, CFG_FILES_SDK, FILES_MATCH_CLASS, GENERATE_TGTS, REPARSE_FILES, BUILD_IMAGE) = range(11) |
| 69 | 69 | ||
| 70 | def __init__(self, taskmodel, server): | 70 | def __init__(self, taskmodel, server): |
| 71 | gobject.GObject.__init__(self) | 71 | gobject.GObject.__init__(self) |
| @@ -90,9 +90,12 @@ class HobHandler(gobject.GObject): | |||
| 90 | self.generating = True | 90 | self.generating = True |
| 91 | 91 | ||
| 92 | if self.current_command == self.CFG_PATH_LOCAL: | 92 | if self.current_command == self.CFG_PATH_LOCAL: |
| 93 | self.current_command = self.CFG_PATH_HOB | 93 | self.current_command = self.CFG_PATH_PRE |
| 94 | self.server.runCommand(["findConfigFilePath", "hob.local.conf"]) | 94 | self.server.runCommand(["findConfigFilePath", "hob-pre.conf"]) |
| 95 | elif self.current_command == self.CFG_PATH_HOB: | 95 | elif self.current_command == self.CFG_PATH_PRE: |
| 96 | self.current_command = self.CFG_PATH_POST | ||
| 97 | self.server.runCommand(["findConfigFilePath", "hob-post.conf"]) | ||
| 98 | elif self.current_command == self.CFG_PATH_POST: | ||
| 96 | self.current_command = self.CFG_PATH_LAYERS | 99 | self.current_command = self.CFG_PATH_LAYERS |
| 97 | self.server.runCommand(["findConfigFilePath", "bblayers.conf"]) | 100 | self.server.runCommand(["findConfigFilePath", "bblayers.conf"]) |
| 98 | elif self.current_command == self.CFG_PATH_LAYERS: | 101 | elif self.current_command == self.CFG_PATH_LAYERS: |
diff --git a/bitbake/lib/bb/ui/crumbs/hobprefs.py b/bitbake/lib/bb/ui/crumbs/hobprefs.py index 3859b29a0f..14d6bc7b23 100644 --- a/bitbake/lib/bb/ui/crumbs/hobprefs.py +++ b/bitbake/lib/bb/ui/crumbs/hobprefs.py | |||
| @@ -38,13 +38,13 @@ class HobPrefs(gtk.Dialog): | |||
| 38 | else: | 38 | else: |
| 39 | self.selected_image_types = handler.remove_image_output_type(ot) | 39 | self.selected_image_types = handler.remove_image_output_type(ot) |
| 40 | 40 | ||
| 41 | self.configurator.setLocalConfVar('IMAGE_FSTYPES', "%s" % " ".join(self.selected_image_types).lstrip(" ")) | 41 | self.configurator.setConfVar('IMAGE_FSTYPES', "%s" % " ".join(self.selected_image_types).lstrip(" ")) |
| 42 | 42 | ||
| 43 | def sdk_machine_combo_changed_cb(self, combo, handler): | 43 | def sdk_machine_combo_changed_cb(self, combo, handler): |
| 44 | sdk_mach = combo.get_active_text() | 44 | sdk_mach = combo.get_active_text() |
| 45 | if sdk_mach != self.curr_sdk_mach: | 45 | if sdk_mach != self.curr_sdk_mach: |
| 46 | self.curr_sdk_mach = sdk_mach | 46 | self.curr_sdk_mach = sdk_mach |
| 47 | self.configurator.setLocalConfVar('SDKMACHINE', sdk_mach) | 47 | self.configurator.setConfVar('SDKMACHINE', sdk_mach) |
| 48 | handler.set_sdk_machine(sdk_mach) | 48 | handler.set_sdk_machine(sdk_mach) |
| 49 | 49 | ||
| 50 | def update_sdk_machines(self, handler, sdk_machines): | 50 | def update_sdk_machines(self, handler, sdk_machines): |
| @@ -67,7 +67,7 @@ class HobPrefs(gtk.Dialog): | |||
| 67 | distro = combo.get_active_text() | 67 | distro = combo.get_active_text() |
| 68 | if distro != self.curr_distro: | 68 | if distro != self.curr_distro: |
| 69 | self.curr_distro = distro | 69 | self.curr_distro = distro |
| 70 | self.configurator.setLocalConfVar('DISTRO', distro) | 70 | self.configurator.setConfVar('DISTRO', distro) |
| 71 | handler.set_distro(distro) | 71 | handler.set_distro(distro) |
| 72 | self.reload_required = True | 72 | self.reload_required = True |
| 73 | 73 | ||
| @@ -91,7 +91,7 @@ class HobPrefs(gtk.Dialog): | |||
| 91 | package_format = combo.get_active_text() | 91 | package_format = combo.get_active_text() |
| 92 | if package_format != self.curr_package_format: | 92 | if package_format != self.curr_package_format: |
| 93 | self.curr_package_format = package_format | 93 | self.curr_package_format = package_format |
| 94 | self.configurator.setLocalConfVar('PACKAGE_CLASSES', 'package_%s' % package_format) | 94 | self.configurator.setConfVar('PACKAGE_CLASSES', 'package_%s' % package_format) |
| 95 | handler.set_package_format(package_format) | 95 | handler.set_package_format(package_format) |
| 96 | self.reload_required = True | 96 | self.reload_required = True |
| 97 | 97 | ||
| @@ -113,7 +113,7 @@ class HobPrefs(gtk.Dialog): | |||
| 113 | 113 | ||
| 114 | def include_gplv3_cb(self, toggle): | 114 | def include_gplv3_cb(self, toggle): |
| 115 | excluded = toggle.get_active() | 115 | excluded = toggle.get_active() |
| 116 | orig_incompatible = self.configurator.getLocalConfVar('INCOMPATIBLE_LICENSE') | 116 | orig_incompatible = self.configurator.getConfVar('INCOMPATIBLE_LICENSE') |
| 117 | new_incompatible = "" | 117 | new_incompatible = "" |
| 118 | if excluded: | 118 | if excluded: |
| 119 | if not orig_incompatible: | 119 | if not orig_incompatible: |
| @@ -125,18 +125,18 @@ class HobPrefs(gtk.Dialog): | |||
| 125 | 125 | ||
| 126 | if new_incompatible != orig_incompatible: | 126 | if new_incompatible != orig_incompatible: |
| 127 | self.handler.set_incompatible_license(new_incompatible) | 127 | self.handler.set_incompatible_license(new_incompatible) |
| 128 | self.configurator.setLocalConfVar('INCOMPATIBLE_LICENSE', new_incompatible) | 128 | self.configurator.setConfVar('INCOMPATIBLE_LICENSE', new_incompatible) |
| 129 | self.reload_required = True | 129 | self.reload_required = True |
| 130 | 130 | ||
| 131 | def change_bb_threads_cb(self, spinner): | 131 | def change_bb_threads_cb(self, spinner): |
| 132 | val = spinner.get_value_as_int() | 132 | val = spinner.get_value_as_int() |
| 133 | self.handler.set_bbthreads(val) | 133 | self.handler.set_bbthreads(val) |
| 134 | self.configurator.setLocalConfVar('BB_NUMBER_THREADS', val) | 134 | self.configurator.setConfVar('BB_NUMBER_THREADS', val) |
| 135 | 135 | ||
| 136 | def change_make_threads_cb(self, spinner): | 136 | def change_make_threads_cb(self, spinner): |
| 137 | val = spinner.get_value_as_int() | 137 | val = spinner.get_value_as_int() |
| 138 | self.handler.set_pmake(val) | 138 | self.handler.set_pmake(val) |
| 139 | self.configurator.setLocalConfVar('PARALLEL_MAKE', "-j %s" % val) | 139 | self.configurator.setConfVar('PARALLEL_MAKE', "-j %s" % val) |
| 140 | 140 | ||
| 141 | def toggle_toolchain_cb(self, check): | 141 | def toggle_toolchain_cb(self, check): |
| 142 | enabled = check.get_active() | 142 | enabled = check.get_active() |
| @@ -144,7 +144,7 @@ class HobPrefs(gtk.Dialog): | |||
| 144 | if enabled: | 144 | if enabled: |
| 145 | toolchain = '1' | 145 | toolchain = '1' |
| 146 | self.handler.toggle_toolchain(enabled) | 146 | self.handler.toggle_toolchain(enabled) |
| 147 | self.configurator.setLocalConfVar('HOB_BUILD_TOOLCHAIN', toolchain) | 147 | self.configurator.setConfVar('HOB_BUILD_TOOLCHAIN', toolchain) |
| 148 | 148 | ||
| 149 | def toggle_headers_cb(self, check): | 149 | def toggle_headers_cb(self, check): |
| 150 | enabled = check.get_active() | 150 | enabled = check.get_active() |
| @@ -152,13 +152,13 @@ class HobPrefs(gtk.Dialog): | |||
| 152 | if enabled: | 152 | if enabled: |
| 153 | headers = '1' | 153 | headers = '1' |
| 154 | self.handler.toggle_toolchain_headers(enabled) | 154 | self.handler.toggle_toolchain_headers(enabled) |
| 155 | self.configurator.setLocalConfVar('HOB_BUILD_TOOLCHAIN_HEADERS', headers) | 155 | self.configurator.setConfVar('HOB_BUILD_TOOLCHAIN_HEADERS', headers) |
| 156 | 156 | ||
| 157 | def set_parent_window(self, parent): | 157 | def set_parent_window(self, parent): |
| 158 | self.set_transient_for(parent) | 158 | self.set_transient_for(parent) |
| 159 | 159 | ||
| 160 | def write_changes(self): | 160 | def write_changes(self): |
| 161 | self.configurator.writeLocalConf() | 161 | self.configurator.writeConf() |
| 162 | 162 | ||
| 163 | def prefs_response_cb(self, dialog, response): | 163 | def prefs_response_cb(self, dialog, response): |
| 164 | if self.reload_required: | 164 | if self.reload_required: |
diff --git a/bitbake/lib/bb/ui/hob.py b/bitbake/lib/bb/ui/hob.py index c2acadac91..c1302e51fa 100644 --- a/bitbake/lib/bb/ui/hob.py +++ b/bitbake/lib/bb/ui/hob.py | |||
| @@ -192,8 +192,8 @@ class MainWindow (gtk.Window): | |||
| 192 | self.curr_mach = mach | 192 | self.curr_mach = mach |
| 193 | # Flush this straight to the file as MACHINE is changed | 193 | # Flush this straight to the file as MACHINE is changed |
| 194 | # independently of other 'Preferences' | 194 | # independently of other 'Preferences' |
| 195 | self.configurator.setLocalConfVar('MACHINE', mach) | 195 | self.configurator.setConfVar('MACHINE', mach) |
| 196 | self.configurator.writeLocalConf() | 196 | self.configurator.writeConf() |
| 197 | handler.set_machine(mach) | 197 | handler.set_machine(mach) |
| 198 | handler.reload_data() | 198 | handler.reload_data() |
| 199 | 199 | ||
