2006-11-16 15:02:15 +00:00
#!/usr/bin/env python
# ex:ts=4:sw=4:sts=4:et
# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
"""
BitBake ' TaskData ' implementation
Task data collection and handling
"""
2007-01-08 23:53:01 +00:00
# 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.
2010-06-10 17:35:31 +00:00
import logging
2010-11-23 22:30:23 +00:00
import re
2010-01-20 18:46:02 +00:00
import bb
2010-06-10 17:35:31 +00:00
logger = logging . getLogger ( " BitBake.TaskData " )
2010-01-20 18:46:02 +00:00
def re_match_strings ( target , strings ) :
"""
Whether or not the string ' target ' matches
any one string of the strings which can be regular expression string
"""
2010-11-23 22:30:45 +00:00
return any ( name == target or re . match ( name , target )
2010-11-23 22:30:23 +00:00
for name in strings )
2006-11-16 15:02:15 +00:00
class TaskData :
"""
BitBake Task Data implementation
"""
2008-10-28 22:15:06 +00:00
def __init__ ( self , abort = True , tryaltconfigs = False ) :
2006-11-16 15:02:15 +00:00
self . build_names_index = [ ]
self . run_names_index = [ ]
self . fn_index = [ ]
self . build_targets = { }
self . run_targets = { }
self . external_targets = [ ]
self . tasks_fnid = [ ]
self . tasks_name = [ ]
self . tasks_tdepends = [ ]
2007-04-01 15:04:49 +00:00
self . tasks_idepends = [ ]
2006-11-16 15:02:15 +00:00
# Cache to speed up task ID lookups
self . tasks_lookup = { }
self . depids = { }
self . rdepids = { }
self . consider_msgs_cache = [ ]
self . failed_deps = [ ]
self . failed_rdeps = [ ]
self . failed_fnids = [ ]
self . abort = abort
2008-10-28 22:15:06 +00:00
self . tryaltconfigs = tryaltconfigs
2006-11-16 15:02:15 +00:00
def getbuild_id ( self , name ) :
"""
Return an ID number for the build target name .
If it doesn ' t exist, create one.
"""
if not name in self . build_names_index :
self . build_names_index . append ( name )
return len ( self . build_names_index ) - 1
return self . build_names_index . index ( name )
def getrun_id ( self , name ) :
"""
2010-03-24 23:56:12 +00:00
Return an ID number for the run target name .
2006-11-16 15:02:15 +00:00
If it doesn ' t exist, create one.
"""
if not name in self . run_names_index :
self . run_names_index . append ( name )
return len ( self . run_names_index ) - 1
return self . run_names_index . index ( name )
def getfn_id ( self , name ) :
"""
2010-03-24 23:56:12 +00:00
Return an ID number for the filename .
2006-11-16 15:02:15 +00:00
If it doesn ' t exist, create one.
"""
if not name in self . fn_index :
self . fn_index . append ( name )
return len ( self . fn_index ) - 1
return self . fn_index . index ( name )
2008-05-13 07:53:18 +00:00
def gettask_ids ( self , fnid ) :
"""
Return an array of the ID numbers matching a given fnid .
"""
ids = [ ]
if fnid in self . tasks_lookup :
for task in self . tasks_lookup [ fnid ] :
ids . append ( self . tasks_lookup [ fnid ] [ task ] )
return ids
2007-01-08 23:53:01 +00:00
def gettask_id ( self , fn , task , create = True ) :
2006-11-16 15:02:15 +00:00
"""
Return an ID number for the task matching fn and task .
2007-01-08 23:53:01 +00:00
If it doesn ' t exist, create one by default.
Optionally return None instead .
2006-11-16 15:02:15 +00:00
"""
fnid = self . getfn_id ( fn )
if fnid in self . tasks_lookup :
if task in self . tasks_lookup [ fnid ] :
return self . tasks_lookup [ fnid ] [ task ]
2007-01-08 23:53:01 +00:00
if not create :
return None
2006-11-16 15:02:15 +00:00
self . tasks_name . append ( task )
self . tasks_fnid . append ( fnid )
self . tasks_tdepends . append ( [ ] )
2007-04-01 15:04:49 +00:00
self . tasks_idepends . append ( [ ] )
2006-11-16 15:02:15 +00:00
listid = len ( self . tasks_name ) - 1
if fnid not in self . tasks_lookup :
self . tasks_lookup [ fnid ] = { }
self . tasks_lookup [ fnid ] [ task ] = listid
return listid
def add_tasks ( self , fn , dataCache ) :
"""
Add tasks for a given fn to the database
"""
task_deps = dataCache . task_deps [ fn ]
fnid = self . getfn_id ( fn )
if fnid in self . failed_fnids :
bb . msg . fatal ( bb . msg . domain . TaskData , " Trying to re-add a failed file? Something is broken... " )
# Check if we've already seen this fn
if fnid in self . tasks_fnid :
return
2008-03-03 22:01:45 +00:00
for task in task_deps [ ' tasks ' ] :
2007-04-01 15:04:49 +00:00
# Work out task dependencies
2006-11-16 15:02:15 +00:00
parentids = [ ]
2008-03-03 22:01:45 +00:00
for dep in task_deps [ ' parents ' ] [ task ] :
2006-11-16 15:02:15 +00:00
parentid = self . gettask_id ( fn , dep )
parentids . append ( parentid )
taskid = self . gettask_id ( fn , task )
self . tasks_tdepends [ taskid ] . extend ( parentids )
2007-04-01 15:04:49 +00:00
# Touch all intertask dependencies
if ' depends ' in task_deps and task in task_deps [ ' depends ' ] :
ids = [ ]
2007-10-12 07:51:50 +00:00
for dep in task_deps [ ' depends ' ] [ task ] . split ( ) :
2007-04-01 15:04:49 +00:00
if dep :
2009-12-17 21:39:51 +00:00
if " : " not in dep :
2010-03-25 00:48:49 +00:00
bb . msg . fatal ( bb . msg . domain . TaskData , " Error, dependency %s does not contain ' : ' character \n . Task ' depends ' should be specified in the form ' packagename:task ' " % ( dep , fn ) )
2008-03-14 11:44:34 +00:00
ids . append ( ( ( self . getbuild_id ( dep . split ( " : " ) [ 0 ] ) ) , dep . split ( " : " ) [ 1 ] ) )
2007-04-01 15:04:49 +00:00
self . tasks_idepends [ taskid ] . extend ( ids )
2006-11-16 15:02:15 +00:00
# Work out build dependencies
if not fnid in self . depids :
dependids = { }
for depend in dataCache . deps [ fn ] :
2010-06-10 17:35:31 +00:00
logger . debug ( 2 , " Added dependency %s for %s " , depend , fn )
2006-11-16 15:02:15 +00:00
dependids [ self . getbuild_id ( depend ) ] = None
self . depids [ fnid ] = dependids . keys ( )
# Work out runtime dependencies
if not fnid in self . rdepids :
rdependids = { }
rdepends = dataCache . rundeps [ fn ]
rrecs = dataCache . runrecs [ fn ]
for package in rdepends :
2010-11-16 20:01:51 +00:00
for rdepend in rdepends [ package ] :
2010-06-10 17:35:31 +00:00
logger . debug ( 2 , " Added runtime dependency %s for %s " , rdepend , fn )
2006-11-16 15:02:15 +00:00
rdependids [ self . getrun_id ( rdepend ) ] = None
for package in rrecs :
2010-11-16 20:01:51 +00:00
for rdepend in rrecs [ package ] :
2010-06-10 17:35:31 +00:00
logger . debug ( 2 , " Added runtime recommendation %s for %s " , rdepend , fn )
2006-11-16 15:02:15 +00:00
rdependids [ self . getrun_id ( rdepend ) ] = None
self . rdepids [ fnid ] = rdependids . keys ( )
for dep in self . depids [ fnid ] :
if dep in self . failed_deps :
self . fail_fnid ( fnid )
return
for dep in self . rdepids [ fnid ] :
if dep in self . failed_rdeps :
self . fail_fnid ( fnid )
return
def have_build_target ( self , target ) :
"""
Have we a build target matching this name ?
"""
targetid = self . getbuild_id ( target )
if targetid in self . build_targets :
return True
return False
def have_runtime_target ( self , target ) :
"""
Have we a runtime target matching this name ?
"""
targetid = self . getrun_id ( target )
if targetid in self . run_targets :
return True
return False
def add_build_target ( self , fn , item ) :
"""
Add a build target .
If already present , append the provider fn to the list
"""
targetid = self . getbuild_id ( item )
fnid = self . getfn_id ( fn )
if targetid in self . build_targets :
if fnid in self . build_targets [ targetid ] :
return
self . build_targets [ targetid ] . append ( fnid )
return
self . build_targets [ targetid ] = [ fnid ]
def add_runtime_target ( self , fn , item ) :
"""
Add a runtime target .
If already present , append the provider fn to the list
"""
targetid = self . getrun_id ( item )
fnid = self . getfn_id ( fn )
if targetid in self . run_targets :
if fnid in self . run_targets [ targetid ] :
return
self . run_targets [ targetid ] . append ( fnid )
return
self . run_targets [ targetid ] = [ fnid ]
def mark_external_target ( self , item ) :
"""
Mark a build target as being externally requested
"""
targetid = self . getbuild_id ( item )
if targetid not in self . external_targets :
self . external_targets . append ( targetid )
def get_unresolved_build_targets ( self , dataCache ) :
"""
2010-03-24 23:56:12 +00:00
Return a list of build targets who ' s providers
2006-11-16 15:02:15 +00:00
are unknown .
"""
unresolved = [ ]
for target in self . build_names_index :
2010-01-20 18:46:02 +00:00
if re_match_strings ( target , dataCache . ignored_dependencies ) :
2006-11-16 15:02:15 +00:00
continue
if self . build_names_index . index ( target ) in self . failed_deps :
continue
if not self . have_build_target ( target ) :
unresolved . append ( target )
return unresolved
def get_unresolved_run_targets ( self , dataCache ) :
"""
2010-03-24 23:56:12 +00:00
Return a list of runtime targets who ' s providers
2006-11-16 15:02:15 +00:00
are unknown .
"""
unresolved = [ ]
for target in self . run_names_index :
2010-01-20 18:46:02 +00:00
if re_match_strings ( target , dataCache . ignored_dependencies ) :
2006-11-16 15:02:15 +00:00
continue
if self . run_names_index . index ( target ) in self . failed_rdeps :
continue
if not self . have_runtime_target ( target ) :
unresolved . append ( target )
return unresolved
def get_provider ( self , item ) :
"""
Return a list of providers of item
"""
targetid = self . getbuild_id ( item )
2010-03-24 23:56:12 +00:00
2006-11-16 15:02:15 +00:00
return self . build_targets [ targetid ]
def get_dependees ( self , itemid ) :
"""
Return a list of targets which depend on item
"""
dependees = [ ]
for fnid in self . depids :
if itemid in self . depids [ fnid ] :
dependees . append ( fnid )
return dependees
def get_dependees_str ( self , item ) :
"""
Return a list of targets which depend on item as a user readable string
"""
itemid = self . getbuild_id ( item )
dependees = [ ]
for fnid in self . depids :
if itemid in self . depids [ fnid ] :
dependees . append ( self . fn_index [ fnid ] )
return dependees
def get_rdependees ( self , itemid ) :
"""
Return a list of targets which depend on runtime item
"""
dependees = [ ]
for fnid in self . rdepids :
if itemid in self . rdepids [ fnid ] :
dependees . append ( fnid )
return dependees
def get_rdependees_str ( self , item ) :
"""
Return a list of targets which depend on runtime item as a user readable string
"""
itemid = self . getrun_id ( item )
dependees = [ ]
for fnid in self . rdepids :
if itemid in self . rdepids [ fnid ] :
dependees . append ( self . fn_index [ fnid ] )
return dependees
def add_provider ( self , cfgData , dataCache , item ) :
try :
self . add_provider_internal ( cfgData , dataCache , item )
except bb . providers . NoProvider :
if self . abort :
raise
2010-06-08 20:20:35 +00:00
self . remove_buildtarget ( self . getbuild_id ( item ) )
2006-11-16 15:02:15 +00:00
self . mark_external_target ( item )
def add_provider_internal ( self , cfgData , dataCache , item ) :
"""
Add the providers of item to the task data
2010-03-24 23:56:12 +00:00
Mark entries were specifically added externally as against dependencies
2006-11-16 15:02:15 +00:00
added internally during dependency resolution
"""
2010-01-20 18:46:02 +00:00
if re_match_strings ( item , dataCache . ignored_dependencies ) :
2006-11-16 15:02:15 +00:00
return
if not item in dataCache . providers :
2010-06-08 20:20:35 +00:00
bb . event . fire ( bb . event . NoProvider ( item , dependees = self . get_rdependees_str ( item ) ) , cfgData )
2006-11-16 15:02:15 +00:00
raise bb . providers . NoProvider ( item )
if self . have_build_target ( item ) :
return
all_p = dataCache . providers [ item ]
2007-08-15 08:39:19 +00:00
eligible , foundUnique = bb . providers . filterProviders ( all_p , item , cfgData , dataCache )
2009-11-03 23:20:15 +00:00
eligible = [ p for p in eligible if not self . getfn_id ( p ) in self . failed_fnids ]
2006-11-16 15:02:15 +00:00
if not eligible :
2010-06-08 20:20:35 +00:00
bb . event . fire ( bb . event . NoProvider ( item , dependees = self . get_dependees_str ( item ) ) , cfgData )
2006-11-16 15:02:15 +00:00
raise bb . providers . NoProvider ( item )
2007-08-15 08:39:19 +00:00
if len ( eligible ) > 1 and foundUnique == False :
2006-11-16 15:02:15 +00:00
if item not in self . consider_msgs_cache :
providers_list = [ ]
for fn in eligible :
providers_list . append ( dataCache . pkg_fn [ fn ] )
2010-01-20 18:46:02 +00:00
bb . event . fire ( bb . event . MultipleProviders ( item , providers_list ) , cfgData )
2006-11-16 15:02:15 +00:00
self . consider_msgs_cache . append ( item )
for fn in eligible :
fnid = self . getfn_id ( fn )
if fnid in self . failed_fnids :
continue
2010-06-10 17:35:31 +00:00
logger . debug ( 2 , " adding %s to satisfy %s " , fn , item )
2006-11-16 15:02:15 +00:00
self . add_build_target ( fn , item )
self . add_tasks ( fn , dataCache )
#item = dataCache.pkg_fn[fn]
def add_rprovider ( self , cfgData , dataCache , item ) :
"""
Add the runtime providers of item to the task data
( takes item names from RDEPENDS / PACKAGES namespace )
"""
2010-01-20 18:46:02 +00:00
if re_match_strings ( item , dataCache . ignored_dependencies ) :
2006-11-16 15:02:15 +00:00
return
if self . have_runtime_target ( item ) :
return
all_p = bb . providers . getRuntimeProviders ( dataCache , item )
if not all_p :
2010-06-08 20:20:35 +00:00
bb . event . fire ( bb . event . NoProvider ( item , runtime = True , dependees = self . get_rdependees_str ( item ) ) , cfgData )
2006-11-16 15:02:15 +00:00
raise bb . providers . NoRProvider ( item )
2007-08-15 08:39:19 +00:00
eligible , numberPreferred = bb . providers . filterProvidersRunTime ( all_p , item , cfgData , dataCache )
2009-11-03 23:20:15 +00:00
eligible = [ p for p in eligible if not self . getfn_id ( p ) in self . failed_fnids ]
2006-11-16 15:02:15 +00:00
if not eligible :
2010-06-08 20:20:35 +00:00
bb . event . fire ( bb . event . NoProvider ( item , runtime = True , dependees = self . get_rdependees_str ( item ) ) , cfgData )
2006-11-16 15:02:15 +00:00
raise bb . providers . NoRProvider ( item )
2007-08-15 08:39:19 +00:00
if len ( eligible ) > 1 and numberPreferred == 0 :
2006-11-16 15:02:15 +00:00
if item not in self . consider_msgs_cache :
providers_list = [ ]
for fn in eligible :
providers_list . append ( dataCache . pkg_fn [ fn ] )
2010-03-24 23:56:12 +00:00
bb . event . fire ( bb . event . MultipleProviders ( item , providers_list , runtime = True ) , cfgData )
2006-11-16 15:02:15 +00:00
self . consider_msgs_cache . append ( item )
2007-08-15 08:39:19 +00:00
if numberPreferred > 1 :
2006-11-16 15:02:15 +00:00
if item not in self . consider_msgs_cache :
providers_list = [ ]
2007-08-15 08:39:19 +00:00
for fn in eligible :
2006-11-16 15:02:15 +00:00
providers_list . append ( dataCache . pkg_fn [ fn ] )
2010-03-24 23:56:12 +00:00
bb . event . fire ( bb . event . MultipleProviders ( item , providers_list , runtime = True ) , cfgData )
2006-11-16 15:02:15 +00:00
self . consider_msgs_cache . append ( item )
# run through the list until we find one that we can build
for fn in eligible :
fnid = self . getfn_id ( fn )
if fnid in self . failed_fnids :
continue
2010-06-10 17:35:31 +00:00
logger . debug ( 2 , " adding ' %s ' to satisfy runtime ' %s ' " , fn , item )
2006-11-16 15:02:15 +00:00
self . add_runtime_target ( fn , item )
self . add_tasks ( fn , dataCache )
2007-08-20 07:48:43 +00:00
def fail_fnid ( self , fnid , missing_list = [ ] ) :
2006-11-16 15:02:15 +00:00
"""
Mark a file as failed ( unbuildable )
Remove any references from build and runtime provider lists
2007-08-20 07:48:43 +00:00
missing_list , A list of missing requirements for this target
2006-11-16 15:02:15 +00:00
"""
if fnid in self . failed_fnids :
return
2010-06-10 17:35:31 +00:00
logger . debug ( 1 , " File ' %s ' is unbuildable, removing... " , self . fn_index [ fnid ] )
2006-11-16 15:02:15 +00:00
self . failed_fnids . append ( fnid )
for target in self . build_targets :
if fnid in self . build_targets [ target ] :
self . build_targets [ target ] . remove ( fnid )
if len ( self . build_targets [ target ] ) == 0 :
2007-08-20 07:48:43 +00:00
self . remove_buildtarget ( target , missing_list )
2006-11-16 15:02:15 +00:00
for target in self . run_targets :
if fnid in self . run_targets [ target ] :
self . run_targets [ target ] . remove ( fnid )
if len ( self . run_targets [ target ] ) == 0 :
2007-08-20 07:48:43 +00:00
self . remove_runtarget ( target , missing_list )
2006-11-16 15:02:15 +00:00
2007-08-20 07:48:43 +00:00
def remove_buildtarget ( self , targetid , missing_list = [ ] ) :
2006-11-16 15:02:15 +00:00
"""
Mark a build target as failed ( unbuildable )
Trigger removal of any files that have this as a dependency
"""
2008-01-20 12:09:31 +00:00
if not missing_list :
missing_list = [ self . build_names_index [ targetid ] ]
else :
missing_list = [ self . build_names_index [ targetid ] ] + missing_list
2010-09-07 22:09:24 +00:00
logger . verbose ( " Target ' %s ' is unbuildable, removing... \n Missing or unbuildable dependency chain was: %s " , self . build_names_index [ targetid ] , missing_list )
2006-11-16 15:02:15 +00:00
self . failed_deps . append ( targetid )
dependees = self . get_dependees ( targetid )
for fnid in dependees :
2008-01-20 12:09:31 +00:00
self . fail_fnid ( fnid , missing_list )
2010-11-19 20:39:22 +00:00
for taskid in xrange ( len ( self . tasks_idepends ) ) :
2008-03-14 11:44:34 +00:00
idepends = self . tasks_idepends [ taskid ]
for ( idependid , idependtask ) in idepends :
if idependid == targetid :
self . fail_fnid ( self . tasks_fnid [ taskid ] , missing_list )
2006-11-16 15:02:15 +00:00
if self . abort and targetid in self . external_targets :
2010-06-08 20:20:35 +00:00
target = self . build_names_index [ targetid ]
2010-09-07 22:09:24 +00:00
logger . error ( " Required build target ' %s ' has no buildable providers. \n Missing or unbuildable dependency chain was: %s " , target , missing_list )
2010-06-08 20:20:35 +00:00
raise bb . providers . NoProvider ( target )
2006-11-16 15:02:15 +00:00
2007-08-20 07:48:43 +00:00
def remove_runtarget ( self , targetid , missing_list = [ ] ) :
2006-11-16 15:02:15 +00:00
"""
Mark a run target as failed ( unbuildable )
Trigger removal of any files that have this as a dependency
"""
2008-01-20 12:09:31 +00:00
if not missing_list :
missing_list = [ self . run_names_index [ targetid ] ]
else :
missing_list = [ self . run_names_index [ targetid ] ] + missing_list
2010-09-07 22:09:24 +00:00
logger . info ( " Runtime target ' %s ' is unbuildable, removing... \n Missing or unbuildable dependency chain was: %s " , self . run_names_index [ targetid ] , missing_list )
2006-11-16 15:02:15 +00:00
self . failed_rdeps . append ( targetid )
dependees = self . get_rdependees ( targetid )
for fnid in dependees :
2008-01-20 12:09:31 +00:00
self . fail_fnid ( fnid , missing_list )
2006-11-16 15:02:15 +00:00
def add_unresolved ( self , cfgData , dataCache ) :
"""
Resolve all unresolved build and runtime targets
"""
2010-06-10 17:35:31 +00:00
logger . info ( " Resolving any missing task queue dependencies " )
2010-04-12 00:03:55 +00:00
while True :
2006-11-16 15:02:15 +00:00
added = 0
for target in self . get_unresolved_build_targets ( dataCache ) :
try :
self . add_provider_internal ( cfgData , dataCache , target )
added = added + 1
except bb . providers . NoProvider :
targetid = self . getbuild_id ( target )
if self . abort and targetid in self . external_targets :
raise
self . remove_buildtarget ( targetid )
for target in self . get_unresolved_run_targets ( dataCache ) :
try :
self . add_rprovider ( cfgData , dataCache , target )
added = added + 1
except bb . providers . NoRProvider :
self . remove_runtarget ( self . getrun_id ( target ) )
2010-06-10 17:35:31 +00:00
logger . debug ( 1 , " Resolved " + str ( added ) + " extra dependencies " )
2006-11-16 15:02:15 +00:00
if added == 0 :
break
2007-01-08 23:53:01 +00:00
# self.dump_data()
2006-11-16 15:02:15 +00:00
def dump_data ( self ) :
"""
Dump some debug information on the internal data structures
"""
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " build_names: " )
logger . debug ( 3 , " , " . join ( self . build_names_index ) )
2007-08-20 07:48:43 +00:00
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " run_names: " )
logger . debug ( 3 , " , " . join ( self . run_names_index ) )
2007-08-20 07:48:43 +00:00
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " build_targets: " )
2010-11-19 20:39:22 +00:00
for buildid in xrange ( len ( self . build_names_index ) ) :
2007-08-20 07:48:43 +00:00
target = self . build_names_index [ buildid ]
targets = " None "
if buildid in self . build_targets :
targets = self . build_targets [ buildid ]
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " ( %s ) %s : %s " , buildid , target , targets )
2007-08-20 07:48:43 +00:00
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " run_targets: " )
2010-11-19 20:39:22 +00:00
for runid in xrange ( len ( self . run_names_index ) ) :
2007-08-20 07:48:43 +00:00
target = self . run_names_index [ runid ]
targets = " None "
if runid in self . run_targets :
targets = self . run_targets [ runid ]
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " ( %s ) %s : %s " , runid , target , targets )
2007-08-20 07:48:43 +00:00
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " tasks: " )
2010-11-19 20:39:22 +00:00
for task in xrange ( len ( self . tasks_name ) ) :
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " ( %s ) %s - %s : %s " ,
task ,
self . fn_index [ self . tasks_fnid [ task ] ] ,
self . tasks_name [ task ] ,
self . tasks_tdepends [ task ] )
2007-08-20 07:48:43 +00:00
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " dependency ids (per fn): " )
2007-10-30 11:46:19 +00:00
for fnid in self . depids :
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " %s %s : %s " , fnid , self . fn_index [ fnid ] , self . depids [ fnid ] )
2007-10-30 11:46:19 +00:00
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " runtime dependency ids (per fn): " )
2006-11-16 15:02:15 +00:00
for fnid in self . rdepids :
2010-06-10 17:35:31 +00:00
logger . debug ( 3 , " %s %s : %s " , fnid , self . fn_index [ fnid ] , self . rdepids [ fnid ] )