mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 00:20:08 +00:00
bitbake: Sync with upstream.
* File licence headers were sanitised causing most of the diff. * cooker.py was created from bin/bitbake. * cvs fetcher port option was added * The -f force option was fixed to work correctly * Multiple entries in rrecrdeps are now handled correctly (allows adding do_deploy to image depends) git-svn-id: https://svn.o-hand.com/repos/poky/trunk@1129 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
+60
-35
@@ -5,20 +5,23 @@
|
||||
BitBake 'RunQueue' implementation
|
||||
|
||||
Handles preparation and execution of a queue of tasks
|
||||
|
||||
Copyright (C) 2006 Richard Purdie
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License version 2 as published by the Free
|
||||
Software Foundation
|
||||
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
"""
|
||||
|
||||
# Copyright (C) 2006 Richard Purdie
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
from bb import msg, data, fetch, event, mkdirhier, utils
|
||||
from sets import Set
|
||||
import bb, os, sys
|
||||
@@ -48,7 +51,7 @@ class RunQueue:
|
||||
taskname = self.runq_task[task]
|
||||
return "%s, %s" % (fn, taskname)
|
||||
|
||||
def prepare_runqueue(self, cfgData, dataCache, taskData, targets):
|
||||
def prepare_runqueue(self, cooker, cfgData, dataCache, taskData, targets):
|
||||
"""
|
||||
Turn a set of taskData into a RunQueue and compute data needed
|
||||
to optimise the execution order.
|
||||
@@ -104,9 +107,13 @@ class RunQueue:
|
||||
depdata = taskData.build_targets[depid][0]
|
||||
if depdata:
|
||||
dep = taskData.fn_index[depdata]
|
||||
taskid = taskData.gettask_id(dep, taskname)
|
||||
depends.append(taskid)
|
||||
fnid = taskData.tasks_fnid[taskid]
|
||||
# Need to avoid creating new tasks here
|
||||
taskid = taskData.gettask_id(dep, taskname, False)
|
||||
if taskid:
|
||||
depends.append(taskid)
|
||||
fnid = taskData.tasks_fnid[taskid]
|
||||
else:
|
||||
fnid = taskData.getfn_id(dep)
|
||||
for nextdepid in taskData.depids[fnid]:
|
||||
if nextdepid not in dep_seen:
|
||||
add_recursive_build(nextdepid)
|
||||
@@ -127,9 +134,13 @@ class RunQueue:
|
||||
depdata = taskData.run_targets[rdepid][0]
|
||||
if depdata:
|
||||
dep = taskData.fn_index[depdata]
|
||||
taskid = taskData.gettask_id(dep, taskname)
|
||||
depends.append(taskid)
|
||||
fnid = taskData.tasks_fnid[taskid]
|
||||
# Need to avoid creating new tasks here
|
||||
taskid = taskData.gettask_id(dep, taskname, False)
|
||||
if taskid:
|
||||
depends.append(taskid)
|
||||
fnid = taskData.tasks_fnid[taskid]
|
||||
else:
|
||||
fnid = taskData.getfn_id(dep)
|
||||
for nextdepid in taskData.depids[fnid]:
|
||||
if nextdepid not in dep_seen:
|
||||
add_recursive_build(nextdepid)
|
||||
@@ -143,11 +154,11 @@ class RunQueue:
|
||||
if 'recrdeptask' in task_deps and taskData.tasks_name[task] in task_deps['recrdeptask']:
|
||||
dep_seen = []
|
||||
rdep_seen = []
|
||||
taskname = task_deps['recrdeptask'][taskData.tasks_name[task]]
|
||||
for depid in taskData.depids[fnid]:
|
||||
add_recursive_build(depid)
|
||||
for rdepid in taskData.rdepids[fnid]:
|
||||
add_recursive_run(rdepid)
|
||||
for taskname in task_deps['recrdeptask'][taskData.tasks_name[task]].split():
|
||||
for depid in taskData.depids[fnid]:
|
||||
add_recursive_build(depid)
|
||||
for rdepid in taskData.rdepids[fnid]:
|
||||
add_recursive_run(rdepid)
|
||||
|
||||
#Prune self references
|
||||
if task in depends:
|
||||
@@ -188,13 +199,21 @@ class RunQueue:
|
||||
|
||||
for target in targets:
|
||||
targetid = taskData.getbuild_id(target[0])
|
||||
if targetid in taskData.failed_deps:
|
||||
continue
|
||||
|
||||
if targetid not in taskData.build_targets:
|
||||
continue
|
||||
|
||||
fnid = taskData.build_targets[targetid][0]
|
||||
|
||||
# Remove stamps for targets if force mode active
|
||||
if cooker.configuration.force:
|
||||
fn = taskData.fn_index[fnid]
|
||||
bb.msg.note(2, bb.msg.domain.RunQueue, "Remove stamp %s, %s" % (target[1], fn))
|
||||
bb.build.del_stamp(target[1], dataCache, fn)
|
||||
|
||||
if targetid in taskData.failed_deps:
|
||||
continue
|
||||
|
||||
if fnid in taskData.failed_fnids:
|
||||
continue
|
||||
|
||||
@@ -338,10 +357,13 @@ class RunQueue:
|
||||
|
||||
bb.msg.note(1, bb.msg.domain.RunQueue, "Executing runqueue")
|
||||
|
||||
active_builds = 0
|
||||
tasks_completed = 0
|
||||
tasks_skipped = 0
|
||||
|
||||
runq_buildable = []
|
||||
runq_running = []
|
||||
runq_complete = []
|
||||
active_builds = 0
|
||||
build_pids = {}
|
||||
failed_fnids = []
|
||||
|
||||
@@ -405,15 +427,15 @@ class RunQueue:
|
||||
fn = taskData.fn_index[self.runq_fnid[task]]
|
||||
taskname = self.runq_task[task]
|
||||
|
||||
if bb.build.stamp_is_current_cache(dataCache, fn, taskname):
|
||||
targetid = taskData.gettask_id(fn, taskname)
|
||||
if not (targetid in taskData.external_targets and cooker.configuration.force):
|
||||
bb.msg.debug(2, bb.msg.domain.RunQueue, "Stamp current task %s (%s)" % (task, self.get_user_idstring(task, taskData)))
|
||||
runq_running[task] = 1
|
||||
task_complete(self, task)
|
||||
continue
|
||||
if bb.build.stamp_is_current(taskname, dataCache, fn):
|
||||
bb.msg.debug(2, bb.msg.domain.RunQueue, "Stamp current task %s (%s)" % (task, self.get_user_idstring(task, taskData)))
|
||||
runq_running[task] = 1
|
||||
task_complete(self, task)
|
||||
tasks_completed = tasks_completed + 1
|
||||
tasks_skipped = tasks_skipped + 1
|
||||
continue
|
||||
|
||||
bb.msg.debug(1, bb.msg.domain.RunQueue, "Running task %s (%s)" % (task, self.get_user_idstring(task, taskData)))
|
||||
bb.msg.note(1, bb.msg.domain.RunQueue, "Running task %d of %d (ID: %s, %s)" % (tasks_completed + active_builds + 1, len(self.runq_fnid), task, self.get_user_idstring(task, taskData)))
|
||||
try:
|
||||
pid = os.fork()
|
||||
except OSError, e:
|
||||
@@ -451,6 +473,7 @@ class RunQueue:
|
||||
failed_fnids.append(self.runq_fnid[task])
|
||||
break
|
||||
task_complete(self, task)
|
||||
tasks_completed = tasks_completed + 1
|
||||
del build_pids[result[0]]
|
||||
continue
|
||||
break
|
||||
@@ -486,6 +509,8 @@ class RunQueue:
|
||||
if runq_complete[task] == 0:
|
||||
bb.msg.error(bb.msg.domain.RunQueue, "Task %s never completed!" % task)
|
||||
|
||||
bb.msg.note(1, bb.msg.domain.RunQueue, "Tasks Summary: Attempted %d tasks of which %d didn't need to be rerun and %d failed." % (tasks_completed, tasks_skipped, len(failed_fnids)))
|
||||
|
||||
return failed_fnids
|
||||
|
||||
def dump_data(self, taskQueue):
|
||||
|
||||
Reference in New Issue
Block a user