diff options
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): | |||
| 120 | 120 | ||
| 121 | return (latest,latest_f,preferred_ver, preferred_file) | 121 | return (latest,latest_f,preferred_ver, preferred_file) |
| 122 | 122 | ||
| 123 | def filterProviders(providers, item, cfgData, dataCache): | 123 | def _filterProviders(providers, item, cfgData, dataCache): |
| 124 | """ | 124 | """ |
| 125 | Take a list of providers and filter/reorder according to the | 125 | Take a list of providers and filter/reorder according to the |
| 126 | environment variables and previous build results | 126 | environment variables and previous build results |
| @@ -128,6 +128,11 @@ def filterProviders(providers, item, cfgData, dataCache): | |||
| 128 | eligible = [] | 128 | eligible = [] |
| 129 | preferred_versions = {} | 129 | preferred_versions = {} |
| 130 | 130 | ||
| 131 | # The order of providers depends on the order of the files on the disk | ||
| 132 | # up to here. Sort pkg_pn to make dependency issues reproducible rather | ||
| 133 | # than effectively random. | ||
| 134 | providers.sort() | ||
| 135 | |||
| 131 | # Collate providers by PN | 136 | # Collate providers by PN |
| 132 | pkg_pn = {} | 137 | pkg_pn = {} |
| 133 | for p in providers: | 138 | for p in providers: |
| @@ -187,7 +192,61 @@ def filterProviders(providers, item, cfgData, dataCache): | |||
| 187 | eligible = [fn] + eligible | 192 | eligible = [fn] + eligible |
| 188 | break | 193 | break |
| 189 | 194 | ||
| 190 | return eligible | 195 | return eligible, preferred_versions |
| 196 | |||
| 197 | |||
| 198 | def filterProviders(providers, item, cfgData, dataCache): | ||
| 199 | """ | ||
| 200 | Take a list of providers and filter/reorder according to the | ||
| 201 | environment variables and previous build results | ||
| 202 | Takes a "normal" target item | ||
| 203 | """ | ||
| 204 | |||
| 205 | eligible, pref_vers = _filterProviders(providers, item, cfgData, dataCache) | ||
| 206 | |||
| 207 | prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % item, cfgData, 1) | ||
| 208 | if prefervar: | ||
| 209 | dataCache.preferred[item] = prefervar | ||
| 210 | |||
| 211 | foundUnique = False | ||
| 212 | if item in dataCache.preferred: | ||
| 213 | for p in eligible: | ||
| 214 | pn = dataCache.pkg_fn[p] | ||
| 215 | if dataCache.preferred[item] == pn: | ||
| 216 | bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy %s due to PREFERRED_PROVIDERS" % (pn, item)) | ||
| 217 | eligible.remove(p) | ||
| 218 | eligible = [p] + eligible | ||
| 219 | foundUnique = True | ||
| 220 | break | ||
| 221 | |||
| 222 | return eligible, foundUnique | ||
| 223 | |||
| 224 | def filterProvidersRunTime(providers, item, cfgData, dataCache): | ||
| 225 | """ | ||
| 226 | Take a list of providers and filter/reorder according to the | ||
| 227 | environment variables and previous build results | ||
| 228 | Takes a "runtime" target item | ||
| 229 | """ | ||
| 230 | |||
| 231 | eligible, pref_vers = _filterProviders(providers, item, cfgData, dataCache) | ||
| 232 | |||
| 233 | # Should use dataCache.preferred here? | ||
| 234 | preferred = [] | ||
| 235 | for p in eligible: | ||
| 236 | pn = dataCache.pkg_fn[p] | ||
| 237 | provides = dataCache.pn_provides[pn] | ||
| 238 | for provide in provides: | ||
| 239 | prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % provide, cfgData, 1) | ||
| 240 | if prefervar == pn: | ||
| 241 | bb.msg.note(2, bb.msg.domain.Provider, "selecting %s to satisfy runtime %s due to PREFERRED_PROVIDERS" % (pn, item)) | ||
| 242 | eligible.remove(p) | ||
| 243 | eligible = [p] + eligible | ||
| 244 | preferred.append(p) | ||
| 245 | break | ||
| 246 | |||
| 247 | numberPreferred = len(preferred) | ||
| 248 | |||
| 249 | return eligible, numberPreferred | ||
| 191 | 250 | ||
| 192 | def getRuntimeProviders(dataCache, rdepend): | 251 | def getRuntimeProviders(dataCache, rdepend): |
| 193 | """ | 252 | """ |
