diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
| -rw-r--r-- | bitbake/lib/bb/runqueue.py | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index b9c1399efe..b697cee536 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
| @@ -164,6 +164,12 @@ class RunQueue: | |||
| 164 | taskname = self.runq_task[task] | 164 | taskname = self.runq_task[task] |
| 165 | return "%s, %s" % (fn, taskname) | 165 | return "%s, %s" % (fn, taskname) |
| 166 | 166 | ||
| 167 | def get_task_id(self, fnid, taskname): | ||
| 168 | for listid in range(len(self.runq_fnid)): | ||
| 169 | if self.runq_fnid[listid] == fnid and self.runq_task[listid] == taskname: | ||
| 170 | return listid | ||
| 171 | return None | ||
| 172 | |||
| 167 | def circular_depchains_handler(self, tasks): | 173 | def circular_depchains_handler(self, tasks): |
| 168 | """ | 174 | """ |
| 169 | Some tasks aren't buildable, likely due to circular dependency issues. | 175 | Some tasks aren't buildable, likely due to circular dependency issues. |
| @@ -398,8 +404,12 @@ class RunQueue: | |||
| 398 | return [] | 404 | return [] |
| 399 | if task in recursive_tdepends: | 405 | if task in recursive_tdepends: |
| 400 | return recursive_tdepends[task] | 406 | return recursive_tdepends[task] |
| 401 | rectdepends = [task] | 407 | |
| 402 | nextdeps = [task] | 408 | fnid = taskData.tasks_fnid[task] |
| 409 | taskids = taskData.gettask_ids(fnid) | ||
| 410 | |||
| 411 | rectdepends = taskids | ||
| 412 | nextdeps = taskids | ||
| 403 | while len(nextdeps) != 0: | 413 | while len(nextdeps) != 0: |
| 404 | newdeps = [] | 414 | newdeps = [] |
| 405 | for nextdep in nextdeps: | 415 | for nextdep in nextdeps: |
| @@ -776,7 +786,7 @@ class RunQueue: | |||
| 776 | bb.fatal("check_stamps fatal internal error") | 786 | bb.fatal("check_stamps fatal internal error") |
| 777 | return current | 787 | return current |
| 778 | 788 | ||
| 779 | def check_stamp(self, task): | 789 | def check_stamp_task(self, task): |
| 780 | 790 | ||
| 781 | if self.stamppolicy == "perfile": | 791 | if self.stamppolicy == "perfile": |
| 782 | fulldeptree = False | 792 | fulldeptree = False |
| @@ -791,10 +801,12 @@ class RunQueue: | |||
| 791 | stampfile = "%s.%s" % (self.dataCache.stamp[fn], taskname) | 801 | stampfile = "%s.%s" % (self.dataCache.stamp[fn], taskname) |
| 792 | # If the stamp is missing its not current | 802 | # If the stamp is missing its not current |
| 793 | if not os.access(stampfile, os.F_OK): | 803 | if not os.access(stampfile, os.F_OK): |
| 804 | bb.msg.debug(2, bb.msg.domain.RunQueue, "Stampfile %s not available\n" % stampfile) | ||
| 794 | return False | 805 | return False |
| 795 | # If its a 'nostamp' task, it's not current | 806 | # If its a 'nostamp' task, it's not current |
| 796 | taskdep = self.dataCache.task_deps[fn] | 807 | taskdep = self.dataCache.task_deps[fn] |
| 797 | if 'nostamp' in taskdep and task in taskdep['nostamp']: | 808 | if 'nostamp' in taskdep and task in taskdep['nostamp']: |
| 809 | bb.msg.debug(2, bb.msg.domain.RunQueue, "%s.%s is nostamp\n" % (fn, taskname)) | ||
| 798 | return False | 810 | return False |
| 799 | 811 | ||
| 800 | iscurrent = True | 812 | iscurrent = True |
| @@ -808,8 +820,10 @@ class RunQueue: | |||
| 808 | try: | 820 | try: |
| 809 | t2 = os.stat(stampfile2)[stat.ST_MTIME] | 821 | t2 = os.stat(stampfile2)[stat.ST_MTIME] |
| 810 | if t1 < t2: | 822 | if t1 < t2: |
| 823 | bb.msg.debug(2, bb.msg.domain.RunQueue, "Stampfile %s < %s" % (stampfile,stampfile2)) | ||
| 811 | iscurrent = False | 824 | iscurrent = False |
| 812 | except: | 825 | except: |
| 826 | bb.msg.debug(2, bb.msg.domain.RunQueue, "Exception reading %s for %s" % (stampfile2 ,stampfile)) | ||
| 813 | iscurrent = False | 827 | iscurrent = False |
| 814 | 828 | ||
| 815 | return iscurrent | 829 | return iscurrent |
| @@ -907,7 +921,7 @@ class RunQueue: | |||
| 907 | fn = self.taskData.fn_index[self.runq_fnid[task]] | 921 | fn = self.taskData.fn_index[self.runq_fnid[task]] |
| 908 | 922 | ||
| 909 | taskname = self.runq_task[task] | 923 | taskname = self.runq_task[task] |
| 910 | if self.check_stamp(task): | 924 | if self.check_stamp_task(task): |
| 911 | bb.msg.debug(2, bb.msg.domain.RunQueue, "Stamp current task %s (%s)" % (task, self.get_user_idstring(task))) | 925 | bb.msg.debug(2, bb.msg.domain.RunQueue, "Stamp current task %s (%s)" % (task, self.get_user_idstring(task))) |
| 912 | self.runq_running[task] = 1 | 926 | self.runq_running[task] = 1 |
| 913 | self.task_complete(task) | 927 | self.task_complete(task) |
| @@ -916,6 +930,8 @@ class RunQueue: | |||
| 916 | continue | 930 | continue |
| 917 | 931 | ||
| 918 | bb.msg.note(1, bb.msg.domain.RunQueue, "Running task %d of %d (ID: %s, %s)" % (self.stats.completed + self.active_builds + 1, len(self.runq_fnid), task, self.get_user_idstring(task))) | 932 | bb.msg.note(1, bb.msg.domain.RunQueue, "Running task %d of %d (ID: %s, %s)" % (self.stats.completed + self.active_builds + 1, len(self.runq_fnid), task, self.get_user_idstring(task))) |
| 933 | sys.stdout.flush() | ||
| 934 | sys.stderr.flush() | ||
| 919 | try: | 935 | try: |
| 920 | pid = os.fork() | 936 | pid = os.fork() |
| 921 | except OSError, e: | 937 | except OSError, e: |
| @@ -930,7 +946,8 @@ class RunQueue: | |||
| 930 | newsi = os.open('/dev/null', os.O_RDWR) | 946 | newsi = os.open('/dev/null', os.O_RDWR) |
| 931 | os.dup2(newsi, sys.stdin.fileno()) | 947 | os.dup2(newsi, sys.stdin.fileno()) |
| 932 | self.cooker.configuration.cmd = taskname[3:] | 948 | self.cooker.configuration.cmd = taskname[3:] |
| 933 | try: | 949 | bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data) |
| 950 | try: | ||
| 934 | self.cooker.tryBuild(fn) | 951 | self.cooker.tryBuild(fn) |
| 935 | except bb.build.EventException: | 952 | except bb.build.EventException: |
| 936 | bb.msg.error(bb.msg.domain.Build, "Build of " + fn + " " + taskname + " failed") | 953 | bb.msg.error(bb.msg.domain.Build, "Build of " + fn + " " + taskname + " failed") |
| @@ -1023,3 +1040,13 @@ class RunQueue: | |||
| 1023 | self.runq_weight[task], | 1040 | self.runq_weight[task], |
| 1024 | self.runq_depends[task], | 1041 | self.runq_depends[task], |
| 1025 | self.runq_revdeps[task])) | 1042 | self.runq_revdeps[task])) |
| 1043 | |||
| 1044 | |||
| 1045 | def check_stamp_fn(fn, taskname, d): | ||
| 1046 | rq = bb.data.getVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", d) | ||
| 1047 | fnid = rq.taskData.getfn_id(fn) | ||
| 1048 | taskid = rq.get_task_id(fnid, taskname) | ||
| 1049 | if taskid is not None: | ||
| 1050 | return rq.check_stamp_task(taskid) | ||
| 1051 | return None | ||
| 1052 | |||
