summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/runqueue.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r--bitbake/lib/bb/runqueue.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 462c685d2f..60ef5ea976 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -875,7 +875,7 @@ class RunQueue:
875 bb.msg.fatal("RunQueue", "check_stamps fatal internal error") 875 bb.msg.fatal("RunQueue", "check_stamps fatal internal error")
876 return current 876 return current
877 877
878 def check_stamp_task(self, task, taskname = None, recurse = False): 878 def check_stamp_task(self, task, taskname = None, recurse = False, cache = None):
879 def get_timestamp(f): 879 def get_timestamp(f):
880 try: 880 try:
881 if not os.access(f, os.F_OK): 881 if not os.access(f, os.F_OK):
@@ -911,10 +911,16 @@ class RunQueue:
911 if taskname != "do_setscene" and taskname.endswith("_setscene"): 911 if taskname != "do_setscene" and taskname.endswith("_setscene"):
912 return True 912 return True
913 913
914 if cache is None:
915 cache = {}
916
914 iscurrent = True 917 iscurrent = True
915 t1 = get_timestamp(stampfile) 918 t1 = get_timestamp(stampfile)
916 for dep in self.rqdata.runq_depends[task]: 919 for dep in self.rqdata.runq_depends[task]:
917 if iscurrent: 920 if iscurrent:
921 if dep in cache:
922 iscurrent = cache[dep]
923 continue
918 fn2 = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[dep]] 924 fn2 = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[dep]]
919 taskname2 = self.rqdata.runq_task[dep] 925 taskname2 = self.rqdata.runq_task[dep]
920 stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCache, fn2) 926 stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCache, fn2)
@@ -931,7 +937,9 @@ class RunQueue:
931 logger.debug(2, 'Stampfile %s < %s', stampfile, stampfile2) 937 logger.debug(2, 'Stampfile %s < %s', stampfile, stampfile2)
932 iscurrent = False 938 iscurrent = False
933 if recurse and iscurrent: 939 if recurse and iscurrent:
934 iscurrent = self.check_stamp_task(dep, recurse=True) 940 iscurrent = self.check_stamp_task(dep, recurse=True, cache=cache)
941 cache[dep] = iscurrent
942 cache[task] = iscurrent
935 return iscurrent 943 return iscurrent
936 944
937 def execute_runqueue(self): 945 def execute_runqueue(self):
@@ -1041,6 +1049,8 @@ class RunQueueExecute:
1041 self.build_stamps = {} 1049 self.build_stamps = {}
1042 self.failed_fnids = [] 1050 self.failed_fnids = []
1043 1051
1052 self.stampcache = {}
1053
1044 def runqueue_process_waitpid(self): 1054 def runqueue_process_waitpid(self):
1045 """ 1055 """
1046 Return none is there are no processes awaiting result collection, otherwise 1056 Return none is there are no processes awaiting result collection, otherwise
@@ -1384,7 +1394,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
1384 self.task_skip(task) 1394 self.task_skip(task)
1385 return True 1395 return True
1386 1396
1387 if self.rq.check_stamp_task(task, taskname): 1397 if self.rq.check_stamp_task(task, taskname, cache=self.stampcache):
1388 logger.debug(2, "Stamp current task %s (%s)", task, 1398 logger.debug(2, "Stamp current task %s (%s)", task,
1389 self.rqdata.get_user_idstring(task)) 1399 self.rqdata.get_user_idstring(task))
1390 self.task_skip(task) 1400 self.task_skip(task)
@@ -1568,7 +1578,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1568 bb.build.make_stamp(taskname + "_setscene", self.rqdata.dataCache, fn) 1578 bb.build.make_stamp(taskname + "_setscene", self.rqdata.dataCache, fn)
1569 continue 1579 continue
1570 1580
1571 if self.rq.check_stamp_task(realtask, taskname + "_setscene"): 1581 if self.rq.check_stamp_task(realtask, taskname + "_setscene", cache=self.stampcache):
1572 logger.debug(2, 'Setscene stamp current for task %s(%s)', task, self.rqdata.get_user_idstring(realtask)) 1582 logger.debug(2, 'Setscene stamp current for task %s(%s)', task, self.rqdata.get_user_idstring(realtask))
1573 stamppresent.append(task) 1583 stamppresent.append(task)
1574 self.task_skip(task) 1584 self.task_skip(task)
@@ -1661,7 +1671,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1661 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]] 1671 fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]]
1662 1672
1663 taskname = self.rqdata.runq_task[realtask] + "_setscene" 1673 taskname = self.rqdata.runq_task[realtask] + "_setscene"
1664 if self.rq.check_stamp_task(realtask, self.rqdata.runq_task[realtask], recurse = True): 1674 if self.rq.check_stamp_task(realtask, self.rqdata.runq_task[realtask], recurse = True, cache=self.stampcache):
1665 logger.debug(2, 'Stamp for underlying task %s(%s) is current, so skipping setscene variant', 1675 logger.debug(2, 'Stamp for underlying task %s(%s) is current, so skipping setscene variant',
1666 task, self.rqdata.get_user_idstring(realtask)) 1676 task, self.rqdata.get_user_idstring(realtask))
1667 self.task_failoutright(task) 1677 self.task_failoutright(task)
@@ -1673,7 +1683,7 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
1673 self.task_failoutright(task) 1683 self.task_failoutright(task)
1674 return True 1684 return True
1675 1685
1676 if self.rq.check_stamp_task(realtask, taskname): 1686 if self.rq.check_stamp_task(realtask, taskname, cache=self.stampcache):
1677 logger.debug(2, 'Setscene stamp current task %s(%s), so skip it and its dependencies', 1687 logger.debug(2, 'Setscene stamp current task %s(%s), so skip it and its dependencies',
1678 task, self.rqdata.get_user_idstring(realtask)) 1688 task, self.rqdata.get_user_idstring(realtask))
1679 self.task_skip(task) 1689 self.task_skip(task)