bitbake: Sync with upstream 1.8 branch
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@2497 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
parent
d7892c265b
commit
7530674214
|
@ -97,17 +97,23 @@ class MalformedUrl(Exception):
|
||||||
#######################################################################
|
#######################################################################
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
|
def plain(*args):
|
||||||
|
bb.msg.warn(''.join(args))
|
||||||
|
|
||||||
def debug(lvl, *args):
|
def debug(lvl, *args):
|
||||||
bb.msg.std_debug(lvl, ''.join(args))
|
bb.msg.debug(lvl, None, ''.join(args))
|
||||||
|
|
||||||
def note(*args):
|
def note(*args):
|
||||||
bb.msg.std_note(''.join(args))
|
bb.msg.note(1, None, ''.join(args))
|
||||||
|
|
||||||
|
def warn(*args):
|
||||||
|
bb.msg.warn(1, None, ''.join(args))
|
||||||
|
|
||||||
def error(*args):
|
def error(*args):
|
||||||
bb.msg.std_error(''.join(args))
|
bb.msg.error(None, ''.join(args))
|
||||||
|
|
||||||
def fatal(*args):
|
def fatal(*args):
|
||||||
bb.msg.std_fatal(''.join(args))
|
bb.msg.fatal(None, ''.join(args))
|
||||||
|
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
|
@ -66,6 +66,9 @@ class MsgError(MsgBase):
|
||||||
class MsgFatal(MsgBase):
|
class MsgFatal(MsgBase):
|
||||||
"""Fatal Message"""
|
"""Fatal Message"""
|
||||||
|
|
||||||
|
class MsgPlain(MsgBase):
|
||||||
|
"""General output"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Message control functions
|
# Message control functions
|
||||||
#
|
#
|
||||||
|
@ -87,51 +90,40 @@ def set_debug_domains(domains):
|
||||||
bb.msg.debug_level[ddomain] = bb.msg.debug_level[ddomain] + 1
|
bb.msg.debug_level[ddomain] = bb.msg.debug_level[ddomain] + 1
|
||||||
found = True
|
found = True
|
||||||
if not found:
|
if not found:
|
||||||
std_warn("Logging domain %s is not valid, ignoring" % domain)
|
bb.msg.warn(None, "Logging domain %s is not valid, ignoring" % domain)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Message handling functions
|
# Message handling functions
|
||||||
#
|
#
|
||||||
|
|
||||||
def debug(level, domain, msg, fn = None):
|
def debug(level, domain, msg, fn = None):
|
||||||
|
bb.event.fire(MsgDebug(msg, None))
|
||||||
|
if not domain:
|
||||||
|
domain = 'default'
|
||||||
if debug_level[domain] >= level:
|
if debug_level[domain] >= level:
|
||||||
bb.event.fire(MsgDebug(msg, None))
|
|
||||||
print 'DEBUG: ' + msg
|
print 'DEBUG: ' + msg
|
||||||
|
|
||||||
def note(level, domain, msg, fn = None):
|
def note(level, domain, msg, fn = None):
|
||||||
|
bb.event.fire(MsgNote(msg, None))
|
||||||
|
if not domain:
|
||||||
|
domain = 'default'
|
||||||
if level == 1 or verbose or debug_level[domain] >= 1:
|
if level == 1 or verbose or debug_level[domain] >= 1:
|
||||||
std_note(msg)
|
print 'NOTE: ' + msg
|
||||||
|
|
||||||
def warn(domain, msg, fn = None):
|
def warn(domain, msg, fn = None):
|
||||||
std_warn(msg)
|
|
||||||
|
|
||||||
def error(domain, msg, fn = None):
|
|
||||||
std_error(msg)
|
|
||||||
|
|
||||||
def fatal(domain, msg, fn = None):
|
|
||||||
std_fatal(msg)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Compatibility functions for the original message interface
|
|
||||||
#
|
|
||||||
def std_debug(lvl, msg):
|
|
||||||
if debug_level['default'] >= lvl:
|
|
||||||
bb.event.fire(MsgDebug(msg, None))
|
|
||||||
print 'DEBUG: ' + msg
|
|
||||||
|
|
||||||
def std_note(msg):
|
|
||||||
bb.event.fire(MsgNote(msg, None))
|
|
||||||
print 'NOTE: ' + msg
|
|
||||||
|
|
||||||
def std_warn(msg):
|
|
||||||
bb.event.fire(MsgWarn(msg, None))
|
bb.event.fire(MsgWarn(msg, None))
|
||||||
print 'WARNING: ' + msg
|
print 'WARNING: ' + msg
|
||||||
|
|
||||||
def std_error(msg):
|
def error(domain, msg, fn = None):
|
||||||
bb.event.fire(MsgError(msg, None))
|
bb.event.fire(MsgError(msg, None))
|
||||||
print 'ERROR: ' + msg
|
print 'ERROR: ' + msg
|
||||||
|
|
||||||
def std_fatal(msg):
|
def fatal(domain, msg, fn = None):
|
||||||
bb.event.fire(MsgFatal(msg, None))
|
bb.event.fire(MsgFatal(msg, None))
|
||||||
print 'ERROR: ' + msg
|
print 'ERROR: ' + msg
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
def plain(msg, fn = None):
|
||||||
|
bb.event.fire(MsgPlain(msg, None))
|
||||||
|
print msg
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None):
|
||||||
|
|
||||||
return (latest,latest_f,preferred_ver, preferred_file)
|
return (latest,latest_f,preferred_ver, preferred_file)
|
||||||
|
|
||||||
def filterProviders(providers, item, cfgData, dataCache):
|
def _filterProviders(providers, item, cfgData, dataCache):
|
||||||
"""
|
"""
|
||||||
Take a list of providers and filter/reorder according to the
|
Take a list of providers and filter/reorder according to the
|
||||||
environment variables and previous build results
|
environment variables and previous build results
|
||||||
|
@ -128,6 +128,11 @@ def filterProviders(providers, item, cfgData, dataCache):
|
||||||
eligible = []
|
eligible = []
|
||||||
preferred_versions = {}
|
preferred_versions = {}
|
||||||
|
|
||||||
|
# The order of providers depends on the order of the files on the disk
|
||||||
|
# up to here. Sort pkg_pn to make dependency issues reproducible rather
|
||||||
|
# than effectively random.
|
||||||
|
providers.sort()
|
||||||
|
|
||||||
# Collate providers by PN
|
# Collate providers by PN
|
||||||
pkg_pn = {}
|
pkg_pn = {}
|
||||||
for p in providers:
|
for p in providers:
|
||||||
|
@ -187,7 +192,61 @@ def filterProviders(providers, item, cfgData, dataCache):
|
||||||
eligible = [fn] + eligible
|
eligible = [fn] + eligible
|
||||||
break
|
break
|
||||||
|
|
||||||
return eligible
|
return eligible, preferred_versions
|
||||||
|
|
||||||
|
|
||||||
|
def filterProviders(providers, item, cfgData, dataCache):
|
||||||
|
"""
|
||||||
|
Take a list of providers and filter/reorder according to the
|
||||||
|
environment variables and previous build results
|
||||||
|
Takes a "normal" target item
|
||||||
|
"""
|
||||||
|
|
||||||
|
eligible, pref_vers = _filterProviders(providers, item, cfgData, dataCache)
|
||||||
|
|
||||||
|
prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % item, cfgData, 1)
|
||||||
|
if prefervar:
|
||||||
|
dataCache.preferred[item] = prefervar
|
||||||
|
|
||||||
|
foundUnique = False
|
||||||
|
if item in dataCache.preferred:
|
||||||
|
for p in eligible:
|
||||||
|
pn = dataCache.pkg_fn[p]
|
||||||
|
if dataCache.preferred[item] == pn:
|
||||||
|
bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy %s due to PREFERRED_PROVIDERS" % (pn, item))
|
||||||
|
eligible.remove(p)
|
||||||
|
eligible = [p] + eligible
|
||||||
|
foundUnique = True
|
||||||
|
break
|
||||||
|
|
||||||
|
return eligible, foundUnique
|
||||||
|
|
||||||
|
def filterProvidersRunTime(providers, item, cfgData, dataCache):
|
||||||
|
"""
|
||||||
|
Take a list of providers and filter/reorder according to the
|
||||||
|
environment variables and previous build results
|
||||||
|
Takes a "runtime" target item
|
||||||
|
"""
|
||||||
|
|
||||||
|
eligible, pref_vers = _filterProviders(providers, item, cfgData, dataCache)
|
||||||
|
|
||||||
|
# Should use dataCache.preferred here?
|
||||||
|
preferred = []
|
||||||
|
for p in eligible:
|
||||||
|
pn = dataCache.pkg_fn[p]
|
||||||
|
provides = dataCache.pn_provides[pn]
|
||||||
|
for provide in provides:
|
||||||
|
prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % provide, cfgData, 1)
|
||||||
|
if prefervar == pn:
|
||||||
|
bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy runtime %s due to PREFERRED_PROVIDERS" % (pn, item))
|
||||||
|
eligible.remove(p)
|
||||||
|
eligible = [p] + eligible
|
||||||
|
preferred.append(p)
|
||||||
|
break
|
||||||
|
|
||||||
|
numberPreferred = len(preferred)
|
||||||
|
|
||||||
|
return eligible, numberPreferred
|
||||||
|
|
||||||
def getRuntimeProviders(dataCache, rdepend):
|
def getRuntimeProviders(dataCache, rdepend):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -23,7 +23,7 @@ Task data collection and handling
|
||||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
from bb import data, fetch, event, mkdirhier, utils
|
from bb import data, event, mkdirhier, utils
|
||||||
import bb, os
|
import bb, os
|
||||||
|
|
||||||
class TaskData:
|
class TaskData:
|
||||||
|
@ -357,7 +357,7 @@ class TaskData:
|
||||||
|
|
||||||
all_p = dataCache.providers[item]
|
all_p = dataCache.providers[item]
|
||||||
|
|
||||||
eligible = bb.providers.filterProviders(all_p, item, cfgData, dataCache)
|
eligible, foundUnique = bb.providers.filterProviders(all_p, item, cfgData, dataCache)
|
||||||
|
|
||||||
for p in eligible:
|
for p in eligible:
|
||||||
fnid = self.getfn_id(p)
|
fnid = self.getfn_id(p)
|
||||||
|
@ -369,22 +369,7 @@ class TaskData:
|
||||||
bb.event.fire(bb.event.NoProvider(item, cfgData))
|
bb.event.fire(bb.event.NoProvider(item, cfgData))
|
||||||
raise bb.providers.NoProvider(item)
|
raise bb.providers.NoProvider(item)
|
||||||
|
|
||||||
prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % item, cfgData, 1)
|
if len(eligible) > 1 and foundUnique == False:
|
||||||
if prefervar:
|
|
||||||
dataCache.preferred[item] = prefervar
|
|
||||||
|
|
||||||
discriminated = False
|
|
||||||
if item in dataCache.preferred:
|
|
||||||
for p in eligible:
|
|
||||||
pn = dataCache.pkg_fn[p]
|
|
||||||
if dataCache.preferred[item] == pn:
|
|
||||||
bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy %s due to PREFERRED_PROVIDERS" % (pn, item))
|
|
||||||
eligible.remove(p)
|
|
||||||
eligible = [p] + eligible
|
|
||||||
discriminated = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if len(eligible) > 1 and discriminated == False:
|
|
||||||
if item not in self.consider_msgs_cache:
|
if item not in self.consider_msgs_cache:
|
||||||
providers_list = []
|
providers_list = []
|
||||||
for fn in eligible:
|
for fn in eligible:
|
||||||
|
@ -424,7 +409,7 @@ class TaskData:
|
||||||
bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True))
|
bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True))
|
||||||
raise bb.providers.NoRProvider(item)
|
raise bb.providers.NoRProvider(item)
|
||||||
|
|
||||||
eligible = bb.providers.filterProviders(all_p, item, cfgData, dataCache)
|
eligible, numberPreferred = bb.providers.filterProvidersRunTime(all_p, item, cfgData, dataCache)
|
||||||
|
|
||||||
for p in eligible:
|
for p in eligible:
|
||||||
fnid = self.getfn_id(p)
|
fnid = self.getfn_id(p)
|
||||||
|
@ -436,21 +421,7 @@ class TaskData:
|
||||||
bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True))
|
bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True))
|
||||||
raise bb.providers.NoRProvider(item)
|
raise bb.providers.NoRProvider(item)
|
||||||
|
|
||||||
# Should use dataCache.preferred here?
|
if len(eligible) > 1 and numberPreferred == 0:
|
||||||
preferred = []
|
|
||||||
for p in eligible:
|
|
||||||
pn = dataCache.pkg_fn[p]
|
|
||||||
provides = dataCache.pn_provides[pn]
|
|
||||||
for provide in provides:
|
|
||||||
prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % provide, cfgData, 1)
|
|
||||||
if prefervar == pn:
|
|
||||||
bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy runtime %s due to PREFERRED_PROVIDERS" % (pn, item))
|
|
||||||
eligible.remove(p)
|
|
||||||
eligible = [p] + eligible
|
|
||||||
preferred.append(p)
|
|
||||||
break
|
|
||||||
|
|
||||||
if len(eligible) > 1 and len(preferred) == 0:
|
|
||||||
if item not in self.consider_msgs_cache:
|
if item not in self.consider_msgs_cache:
|
||||||
providers_list = []
|
providers_list = []
|
||||||
for fn in eligible:
|
for fn in eligible:
|
||||||
|
@ -460,12 +431,12 @@ class TaskData:
|
||||||
bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True))
|
bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True))
|
||||||
self.consider_msgs_cache.append(item)
|
self.consider_msgs_cache.append(item)
|
||||||
|
|
||||||
if len(preferred) > 1:
|
if numberPreferred > 1:
|
||||||
if item not in self.consider_msgs_cache:
|
if item not in self.consider_msgs_cache:
|
||||||
providers_list = []
|
providers_list = []
|
||||||
for fn in preferred:
|
for fn in eligible:
|
||||||
providers_list.append(dataCache.pkg_fn[fn])
|
providers_list.append(dataCache.pkg_fn[fn])
|
||||||
bb.msg.note(2, bb.msg.domain.Provider, "multiple preferred providers are available for runtime %s (%s);" % (item, ", ".join(providers_list)))
|
bb.msg.note(2, bb.msg.domain.Provider, "multiple providers are available for runtime %s (top %s entries preferred) (%s);" % (item, numberPreferred, ", ".join(providers_list)))
|
||||||
bb.msg.note(2, bb.msg.domain.Provider, "consider defining only one PREFERRED_PROVIDER entry to match runtime %s" % item)
|
bb.msg.note(2, bb.msg.domain.Provider, "consider defining only one PREFERRED_PROVIDER entry to match runtime %s" % item)
|
||||||
bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True))
|
bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True))
|
||||||
self.consider_msgs_cache.append(item)
|
self.consider_msgs_cache.append(item)
|
||||||
|
@ -538,6 +509,7 @@ class TaskData:
|
||||||
except bb.providers.NoProvider:
|
except bb.providers.NoProvider:
|
||||||
targetid = self.getbuild_id(target)
|
targetid = self.getbuild_id(target)
|
||||||
if self.abort and targetid in self.external_targets:
|
if self.abort and targetid in self.external_targets:
|
||||||
|
bb.msg.error(bb.msg.domain.Provider, "No providers of build target %s (for %s)" % (target, self.get_dependees_str(target)))
|
||||||
raise
|
raise
|
||||||
self.remove_buildtarget(targetid)
|
self.remove_buildtarget(targetid)
|
||||||
for target in self.get_unresolved_run_targets(dataCache):
|
for target in self.get_unresolved_run_targets(dataCache):
|
||||||
|
|
Loading…
Reference in New Issue