diff options
Diffstat (limited to 'bitbake/lib')
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/configurator.py | 18 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hobeventhandler.py | 67 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/hob.py | 24 |
3 files changed, 77 insertions, 32 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/configurator.py b/bitbake/lib/bb/ui/crumbs/configurator.py index 6481608483..ec48a4f3f0 100644 --- a/bitbake/lib/bb/ui/crumbs/configurator.py +++ b/bitbake/lib/bb/ui/crumbs/configurator.py | |||
| @@ -244,6 +244,24 @@ class Configurator(gobject.GObject): | |||
| 244 | del self.orig_config | 244 | del self.orig_config |
| 245 | self.orig_config = copy.deepcopy(self.config) | 245 | self.orig_config = copy.deepcopy(self.config) |
| 246 | 246 | ||
| 247 | def insertTempBBPath(self, bbpath, bbfiles): | ||
| 248 | # Create a backup of the local.conf | ||
| 249 | bkup = "%s~" % self.local | ||
| 250 | os.rename(self.local, bkup) | ||
| 251 | |||
| 252 | # read the original conf into a list | ||
| 253 | with open(bkup, 'r') as config: | ||
| 254 | config_lines = config.readlines() | ||
| 255 | |||
| 256 | if bbpath: | ||
| 257 | config_lines.append("BBPATH := \"${BBPATH}:%s\"\n" % bbpath) | ||
| 258 | if bbfiles: | ||
| 259 | config_lines.append("BBFILES := \"${BBFILES} %s\"\n" % bbfiles) | ||
| 260 | |||
| 261 | # Write the updated lines list object to the local.conf | ||
| 262 | with open(self.local, "w") as n: | ||
| 263 | n.write("".join(config_lines)) | ||
| 264 | |||
| 247 | def writeLayerConf(self): | 265 | def writeLayerConf(self): |
| 248 | # If we've not added/removed new layers don't write | 266 | # If we've not added/removed new layers don't write |
| 249 | if not self._isLayerConfDirty(): | 267 | if not self._isLayerConfDirty(): |
diff --git a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py index d10c8588dc..4897bccd26 100644 --- a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py +++ b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py | |||
| @@ -52,16 +52,13 @@ class HobHandler(gobject.GObject): | |||
| 52 | "error" : (gobject.SIGNAL_RUN_LAST, | 52 | "error" : (gobject.SIGNAL_RUN_LAST, |
| 53 | gobject.TYPE_NONE, | 53 | gobject.TYPE_NONE, |
| 54 | (gobject.TYPE_STRING,)), | 54 | (gobject.TYPE_STRING,)), |
| 55 | "build-complete" : (gobject.SIGNAL_RUN_LAST, | ||
| 56 | gobject.TYPE_NONE, | ||
| 57 | ()), | ||
| 58 | "reload-triggered" : (gobject.SIGNAL_RUN_LAST, | 55 | "reload-triggered" : (gobject.SIGNAL_RUN_LAST, |
| 59 | gobject.TYPE_NONE, | 56 | gobject.TYPE_NONE, |
| 60 | (gobject.TYPE_STRING, | 57 | (gobject.TYPE_STRING, |
| 61 | gobject.TYPE_STRING)), | 58 | gobject.TYPE_STRING)), |
| 62 | } | 59 | } |
| 63 | 60 | ||
| 64 | (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) = range(9) | 61 | (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) |
| 65 | 62 | ||
| 66 | def __init__(self, taskmodel, server): | 63 | def __init__(self, taskmodel, server): |
| 67 | gobject.GObject.__init__(self) | 64 | gobject.GObject.__init__(self) |
| @@ -111,8 +108,21 @@ class HobHandler(gobject.GObject): | |||
| 111 | self.generating = False | 108 | self.generating = False |
| 112 | self.current_command = None | 109 | self.current_command = None |
| 113 | elif self.current_command == self.REPARSE_FILES: | 110 | elif self.current_command == self.REPARSE_FILES: |
| 114 | self.current_command = self.CFG_PATH_LAYERS | 111 | if self.build_queue: |
| 112 | self.current_command = self.BUILD_IMAGE | ||
| 113 | else: | ||
| 114 | self.current_command = self.CFG_PATH_LAYERS | ||
| 115 | self.server.runCommand(["reparseFiles"]) | 115 | self.server.runCommand(["reparseFiles"]) |
| 116 | elif self.current_command == self.BUILD_IMAGE: | ||
| 117 | self.building = "image" | ||
| 118 | if self.generating: | ||
| 119 | self.emit("data-generated") | ||
| 120 | self.generating = False | ||
| 121 | bbpath = self.server.runCommand(["getVariable", "BBPATH"]) | ||
| 122 | bbfiles = self.server.runCommand(["getVariable", "BBFILES"]) | ||
| 123 | self.server.runCommand(["buildTargets", self.build_queue, "build"]) | ||
| 124 | self.build_queue = [] | ||
| 125 | self.current_command = None | ||
| 116 | 126 | ||
| 117 | def handle_event(self, event, running_build, pbar): | 127 | def handle_event(self, event, running_build, pbar): |
| 118 | if not event: | 128 | if not event: |
| @@ -208,27 +218,48 @@ class HobHandler(gobject.GObject): | |||
| 208 | pmake = "-j %s" % threads | 218 | pmake = "-j %s" % threads |
| 209 | self.server.runCommand(["setVariable", "BB_NUMBER_THREADS", pmake]) | 219 | self.server.runCommand(["setVariable", "BB_NUMBER_THREADS", pmake]) |
| 210 | 220 | ||
| 211 | def run_build(self, tgts): | 221 | def build_image(self, image, image_path, configurator): |
| 212 | self.building = "image" | ||
| 213 | targets = [] | 222 | targets = [] |
| 214 | targets.append(tgts) | 223 | targets.append(image) |
| 215 | if self.build_toolchain and self.build_toolchain_headers: | 224 | if self.build_toolchain and self.build_toolchain_headers: |
| 216 | targets = ["meta-toolchain-sdk"] + targets | 225 | targets.append("meta-toolchain-sdk") |
| 217 | elif self.build_toolchain: | 226 | elif self.build_toolchain: |
| 218 | targets = ["meta-toolchain"] + targets | 227 | targets.append("meta-toolchain") |
| 219 | self.server.runCommand(["buildTargets", targets, "build"]) | 228 | self.build_queue = targets |
| 229 | |||
| 230 | bbpath_ok = False | ||
| 231 | bbpath = self.server.runCommand(["getVariable", "BBPATH"]) | ||
| 232 | if image_path in bbpath.split(":"): | ||
| 233 | bbpath_ok = True | ||
| 234 | |||
| 235 | bbfiles_ok = False | ||
| 236 | bbfiles = self.server.runCommand(["getVariable", "BBFILES"]).split(" ") | ||
| 237 | for files in bbfiles: | ||
| 238 | import re | ||
| 239 | pattern = "%s/\*.bb" % image_path | ||
| 240 | if re.match(pattern, files): | ||
| 241 | bbfiles_ok = True | ||
| 242 | |||
| 243 | if not bbpath_ok: | ||
| 244 | nbbp = image_path | ||
| 245 | else: | ||
| 246 | nbbp = None | ||
| 247 | |||
| 248 | if not bbfiles_ok: | ||
| 249 | nbbf = "%s/*.bb" % image_path | ||
| 250 | else: | ||
| 251 | nbbf = None | ||
| 252 | |||
| 253 | if not bbfiles_ok or not bbpath_ok: | ||
| 254 | configurator.insertTempBBPath(nbbp, nbbf) | ||
| 255 | |||
| 256 | self.current_command = self.REPARSE_FILES | ||
| 257 | self.run_next_command() | ||
| 220 | 258 | ||
| 221 | def build_packages(self, pkgs): | 259 | def build_packages(self, pkgs): |
| 222 | self.building = "packages" | 260 | self.building = "packages" |
| 223 | if 'meta-toolchain' in self.build_queue: | ||
| 224 | self.build_queue.remove('meta-toolchain') | ||
| 225 | pkgs.extend('meta-toolchain') | ||
| 226 | self.server.runCommand(["buildTargets", pkgs, "build"]) | 261 | self.server.runCommand(["buildTargets", pkgs, "build"]) |
| 227 | 262 | ||
| 228 | def build_file(self, image): | ||
| 229 | self.building = "image" | ||
| 230 | self.server.runCommand(["buildFile", image, "build"]) | ||
| 231 | |||
| 232 | def cancel_build(self, force=False): | 263 | def cancel_build(self, force=False): |
| 233 | if force: | 264 | if force: |
| 234 | # Force the cooker to stop as quickly as possible | 265 | # Force the cooker to stop as quickly as possible |
diff --git a/bitbake/lib/bb/ui/hob.py b/bitbake/lib/bb/ui/hob.py index 448d590e49..654d2dfc71 100644 --- a/bitbake/lib/bb/ui/hob.py +++ b/bitbake/lib/bb/ui/hob.py | |||
| @@ -65,10 +65,8 @@ class MainWindow (gtk.Window): | |||
| 65 | 65 | ||
| 66 | self.build = RunningBuild() | 66 | self.build = RunningBuild() |
| 67 | self.build.connect("build-failed", self.running_build_failed_cb) | 67 | self.build.connect("build-failed", self.running_build_failed_cb) |
| 68 | self.build.connect("build-complete", self.handler.build_complete_cb) | ||
| 69 | self.build.connect("build-started", self.build_started_cb) | 68 | self.build.connect("build-started", self.build_started_cb) |
| 70 | 69 | self.build.connect("build-complete", self.build_complete_cb) | |
| 71 | self.handler.connect("build-complete", self.build_complete_cb) | ||
| 72 | 70 | ||
| 73 | vbox = gtk.VBox(False, 0) | 71 | vbox = gtk.VBox(False, 0) |
| 74 | vbox.set_border_width(0) | 72 | vbox.set_border_width(0) |
| @@ -373,16 +371,15 @@ class MainWindow (gtk.Window): | |||
| 373 | dialog.destroy() | 371 | dialog.destroy() |
| 374 | if response == gtk.RESPONSE_CANCEL: | 372 | if response == gtk.RESPONSE_CANCEL: |
| 375 | return | 373 | return |
| 376 | else: | ||
| 377 | # TODO: show a confirmation dialog ? | ||
| 378 | if not self.save_path: | ||
| 379 | import tempfile, datetime | ||
| 380 | image_name = "hob-%s-variant-%s.bb" % (rep.base_image, datetime.date.today().isoformat()) | ||
| 381 | image_dir = os.path.join(tempfile.gettempdir(), 'hob-images') | ||
| 382 | bb.utils.mkdirhier(image_dir) | ||
| 383 | recipepath = os.path.join(image_dir, image_name) | ||
| 384 | else: | 374 | else: |
| 385 | recipepath = self.save_path | 375 | self.handler.build_packages(rep.allpkgs.split(" ")) |
| 376 | else: | ||
| 377 | import tempfile, datetime | ||
| 378 | image_name = "hob-%s-variant-%s" % (rep.base_image, datetime.date.today().isoformat()) | ||
| 379 | image_file = "%s.bb" % (image_name) | ||
| 380 | image_dir = os.path.join(tempfile.gettempdir(), 'hob-images') | ||
| 381 | bb.utils.mkdirhier(image_dir) | ||
| 382 | recipepath = os.path.join(image_dir, image_file) | ||
| 386 | 383 | ||
| 387 | rep.writeRecipe(recipepath, self.model) | 384 | rep.writeRecipe(recipepath, self.model) |
| 388 | # In the case where we saved the file for the purpose of building | 385 | # In the case where we saved the file for the purpose of building |
| @@ -391,9 +388,8 @@ class MainWindow (gtk.Window): | |||
| 391 | if not self.save_path: | 388 | if not self.save_path: |
| 392 | self.files_to_clean.append(recipepath) | 389 | self.files_to_clean.append(recipepath) |
| 393 | 390 | ||
| 394 | self.handler.queue_image_recipe_path(recipepath) | 391 | self.handler.build_image(image_name, image_dir, self.configurator) |
| 395 | 392 | ||
| 396 | self.handler.build_packages(rep.allpkgs.split(" ")) | ||
| 397 | self.nb.set_current_page(1) | 393 | self.nb.set_current_page(1) |
| 398 | 394 | ||
| 399 | def back_button_clicked_cb(self, button): | 395 | def back_button_clicked_cb(self, button): |
