]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake/cooker.py: Misc sync with upstream
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 16:23:42 +0000 (17:23 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 19:38:27 +0000 (20:38 +0100)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/bin/bitbake
bitbake/lib/bb/build.py
bitbake/lib/bb/cooker.py
bitbake/lib/bb/runqueue.py

index 520e54912a5fb04a7fa55747935e621c5287e34b..c348e5e6288ae985dd541f14c012da8836789f1e 100755 (executable)
@@ -170,7 +170,6 @@ Default BBFILES are the .bb files in the current directory.""")
 
     configuration = BBConfiguration(options)
     configuration.pkgs_to_build.extend(args[1:])
-    configuration.initial_path = os.environ['PATH']
 
     ui_main = get_ui(configuration)
 
index f1384ef31217d69feec478c157ce341b371cc830..0f047364e4b7fbb3c0cfe9fa833f7833cf0cd683 100644 (file)
@@ -28,6 +28,7 @@
 import os
 import sys
 import logging
+import shlex
 import bb
 import bb.msg
 import bb.process
index b66d0038ac0eaec54059ddde45b9961ed2a4c959..dc196ae80138a225f8fa10df55df567323405708 100644 (file)
@@ -28,7 +28,6 @@ import atexit
 import itertools
 import logging
 import multiprocessing
-import signal
 import sre_constants
 import threading
 from cStringIO import StringIO
@@ -148,6 +147,8 @@ class BBCooker:
         self.command = bb.command.Command(self)
         self.state = state.initial
 
+        self.parser = None
+
     def parseConfiguration(self):
 
 
@@ -799,9 +800,6 @@ class BBCooker:
         buildname = bb.data.getVar("BUILDNAME", self.configuration.data)
         bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.configuration.event_data)
 
-        # Clear locks
-        bb.fetch.persistent_database_connection = {}
-
         # Execute the runqueue
         runlist = [[item, "do_%s" % task]]
 
@@ -821,6 +819,10 @@ class BBCooker:
                     buildlog.error("'%s' failed" % taskdata.fn_index[fnid])
                 failures += len(exc.args)
                 retval = False
+            except SystemExit as exc:
+                self.command.finishAsyncCommand()
+                return False
+
             if not retval:
                 bb.event.fire(bb.event.BuildCompleted(buildname, item, failures), self.configuration.event_data)
                 self.command.finishAsyncCommand()
@@ -858,6 +860,10 @@ class BBCooker:
                     buildlog.error("'%s' failed" % taskdata.fn_index[fnid])
                 failures += len(exc.args)
                 retval = False
+            except SystemExit as exc:
+                self.command.finishAsyncCommand()
+                return False
+
             if not retval:
                 bb.event.fire(bb.event.BuildCompleted(buildname, targets, failures), self.configuration.event_data)
                 self.command.finishAsyncCommand()
@@ -883,9 +889,6 @@ class BBCooker:
             runlist.append([k, "do_%s" % task])
         taskdata.add_unresolved(localdata, self.status)
 
-        # Clear locks
-        bb.fetch.persistent_database_connection = {}
-
         rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist)
 
         self.server_registration_cb(buildTargetsIdle, rq)
@@ -894,6 +897,10 @@ class BBCooker:
         if self.state == state.running:
             return
 
+        if self.state in (state.shutdown, state.stop):
+            self.parser.shutdown(clean=False)
+            sys.exit(1)
+
         if self.state != state.parsing:
             self.parseConfiguration ()
 
@@ -1194,9 +1201,8 @@ class CookerParser(object):
 
     def start(self):
         def init(cfg):
-            signal.signal(signal.SIGINT, signal.SIG_IGN)
-            multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, args=(self.cooker.configuration.data, ), exitpriority=1)
             parse_file.cfg = cfg
+            multiprocessing.util.Finalize(None, bb.codeparser.parser_cache_save, args=(self.cooker.configuration.data, ), exitpriority=1)
 
         self.results = self.load_cached()
 
@@ -1225,7 +1231,7 @@ class CookerParser(object):
 
         sync = threading.Thread(target=self.bb_cache.sync)
         sync.start()
-        atexit.register(lambda: sync.join())
+        multiprocessing.util.Finalize(None, sync.join, exitpriority=-100)
         bb.codeparser.parser_cache_savemerge(self.cooker.configuration.data)
 
     def load_cached(self):
@@ -1239,9 +1245,6 @@ class CookerParser(object):
         except StopIteration:
             self.shutdown()
             return False
-        except KeyboardInterrupt:
-            self.shutdown(clean=False)
-            raise
         except ParsingFailure as exc:
             self.shutdown(clean=False)
             bb.fatal('Unable to parse %s: %s' %
index afa1f8d736a5b42b462bcd5c4cc7ca9766ff5a95..52360accdb5d8dcc0466794205673d48c668b07d 100644 (file)
@@ -753,7 +753,6 @@ class RunQueueData:
                            self.rqdata.runq_depends[task],
                            self.rqdata.runq_revdeps[task])
 
-
 class RunQueue:
     def __init__(self, cooker, cfgData, dataCache, taskData, targets):
 
@@ -1106,8 +1105,10 @@ class RunQueueExecute:
             newsi = os.open(os.devnull, os.O_RDWR)
             os.dup2(newsi, sys.stdin.fileno())
 
-
             bb.data.setVar("BB_WORKERCONTEXT", "1", self.cooker.configuration.data)
+            bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data)
+            bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data)
+            bb.parse.siggen.set_taskdata(self.rqdata.hashes, self.rqdata.hash_deps)
 
             the_data = bb.cache.Cache.loadDataFull(fn, self.cooker.get_file_appends(fn), self.cooker.configuration.data)
 
@@ -1124,9 +1125,6 @@ class RunQueueExecute:
             if quieterrors:
                 the_data.setVarFlag(taskname, "quieterrors", "1")
 
-            bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data)
-            bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data)
-            bb.parse.siggen.set_taskdata(self.rqdata.hashes, self.rqdata.hash_deps)
 
             for h in self.rqdata.hashes:
                 bb.data.setVar("BBHASH_%s" % h, self.rqdata.hashes[h], the_data)