diff options
author | Richard Purdie <richard@openedhand.com> | 2007-08-15 08:39:19 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2007-08-15 08:39:19 +0000 |
commit | 75306742144eb1bd2d57c986d1f836a59a1f0e8b (patch) | |
tree | d1a15e84c1ae3c5c2dff906bbdba3d12bf5186e3 /bitbake/lib/bb/providers.py | |
parent | d7892c265b0e820a28e62a4aa0819d90ea354a5b (diff) | |
download | openembedded-core-75306742144eb1bd2d57c986d1f836a59a1f0e8b.tar.gz openembedded-core-75306742144eb1bd2d57c986d1f836a59a1f0e8b.tar.bz2 openembedded-core-75306742144eb1bd2d57c986d1f836a59a1f0e8b.zip |
bitbake: Sync with upstream 1.8 branch
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@2497 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'bitbake/lib/bb/providers.py')
-rw-r--r-- | bitbake/lib/bb/providers.py | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/bitbake/lib/bb/providers.py b/bitbake/lib/bb/providers.py index 81de85e760..e6f08fb4bd 100644 --- a/bitbake/lib/bb/providers.py +++ b/bitbake/lib/bb/providers.py @@ -120,7 +120,7 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None): 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 environment variables and previous build results @@ -128,6 +128,11 @@ def filterProviders(providers, item, cfgData, dataCache): eligible = [] 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 pkg_pn = {} for p in providers: @@ -187,7 +192,61 @@ def filterProviders(providers, item, cfgData, dataCache): eligible = [fn] + eligible 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): """ |