[oe-commits] org.nslu2-linux.bitbake disapproval of revision 'c50bd9ca9065d6f61495b07412f5c7a774eec3aa'
jbowler commit
openembedded-commits at lists.openembedded.org
Mon Oct 23 17:45:04 UTC 2006
disapproval of revision 'c50bd9ca9065d6f61495b07412f5c7a774eec3aa'
Author: jbowler at nslu2-linux.org
Branch: org.nslu2-linux.bitbake
Revision: 802347a6b239128e23fc708646f3ad414a749eee
ViewMTN: http://monotone.openembedded.org/revision.psp?id=802347a6b239128e23fc708646f3ad414a749eee
Files:
1
bin/bitbake
Diffs:
#
# mt diff -r334c0d2dc58bf8d889b6996772fd3589ac3ce552 -r802347a6b239128e23fc708646f3ad414a749eee
#
#
#
# patch "bin/bitbake"
# from [b1b0d707f65b8305610e2e45986075c0aa3db275]
# to [d39d47aac1a22bc0d210b1d322ae49d5b84a67ff]
#
============================================================
--- bin/bitbake b1b0d707f65b8305610e2e45986075c0aa3db275
+++ bin/bitbake d39d47aac1a22bc0d210b1d322ae49d5b84a67ff
@@ -182,7 +182,6 @@ class BBCooker:
def __init__( self ):
self.build_cache_fail = []
self.build_cache = []
- self.rbuild_cache = []
self.building_list = []
self.build_path = []
self.consider_msgs_cache = []
@@ -242,24 +241,14 @@ class BBCooker:
bb.note("clean %s" % ":".join(clean_deps))
return clean_deps
- def tryBuild( self, fn, virtual , itemtype , buildAllDeps ):
+ def tryBuild( self, fn, virtual , buildAllDeps ):
"""Build a provider and its dependencies"""
+ if fn in self.building_list:
+ bb.error("%s depends on itself (eventually)" % fn)
+ bb.error("upwards chain is: %s" % (" -> ".join(self.build_path)))
+ return False
the_data = self.pkgdata[fn]
-
- if not buildAllDeps:
- buildAllDeps = bb.data.getVar('BUILD_ALL_DEPS', the_data, 1) or False
-
- self.addRunDeps(fn, virtual , buildAllDeps)
-
- if fn in self.building_list:
- if itemtype == "runtime":
- return True
- else:
- bb.error("%s depends on itself (eventually)" % fn)
- bb.error("upwards chain is: %s" % (" -> ".join(self.build_path)))
- return False
-
item = self.status.pkg_fn[fn]
self.building_list.append(fn)
@@ -267,15 +256,37 @@ class BBCooker:
pathstr = "%s (%s)" % (item, virtual)
self.build_path.append(pathstr)
+ depends_list = (bb.data.getVar('DEPENDS', the_data, 1) or "").split()
+ if not buildAllDeps:
+ buildAllDeps = bb.data.getVar('BUILD_ALL_DEPS', the_data, 1) or False
- depends_list = (bb.data.getVar('DEPENDS', the_data, 1) or "").split()
+ bb.note("dependencies for %s are: %s" % (item, " ".join(depends_list)))
- bb.note("build dependencies for %s are: %s" % (item, " ".join(depends_list)))
+ if buildAllDeps:
+ bb.note("building all deps")
+ subdeps = []
+ subdeps += bb.utils.explode_deps(bb.data.getVar('RDEPENDS', the_data, 1) or "")
+ subdeps += bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS', the_data, 1) or "")
+ # Need to include subpackage dependencies but not circular ones
+ packages = (bb.data.getVar('PACKAGES', the_data, 1).split() or "")
+ for package in packages:
+ #if virtual != package:
+ #bb.note("%s: %s not equal to %s, skipping" % (item, virtual, package))
+ #continue
+ subdeps += bb.utils.explode_deps(bb.data.getVar("RDEPENDS_%s" % package, the_data, 1) or "")
+ subdeps += bb.utils.explode_deps(bb.data.getVar("RRECOMMENDS_%s" % package, the_data, 1) or "")
+ depends_list += self.removeSelfDeps(the_data, subdeps)
+ else:
+ bb.note("not building all deps")
+ bb.note("dependencies for %s are: %s" % (item, " ".join(depends_list)))
+
if self.configuration.verbose:
bb.note("current path: %s" % (" -> ".join(self.build_path)))
bb.note("dependencies for %s are: %s" % (item, " ".join(depends_list)))
+
+
try:
failed = False
@@ -469,14 +480,15 @@ class BBCooker:
def buildProvider( self, item , buildAllDeps ):
fn = None
+
discriminated = False
- if not item in self.status.providers:
- bb.error("Nothing provides %s dependency %s" % (itemtype, item))
+ all_p = self.getProviders(item, buildAllDeps)
+
+ if not all_p:
+ bb.error("Nothing provides %s" % item)
return 0
- all_p = self.status.providers[item]
-
for p in all_p:
if p in self.build_cache:
bb.debug(1, "already built %s in this run\n" % p)
@@ -562,170 +574,13 @@ class BBCooker:
# run through the list until we find one that we can build
for fn in eligible:
- bb.note( "selecting %s to satisfy %s" % (fn, item))
- if self.tryBuild(fn, item, "build", buildAllDeps):
+ bb.debug(2, "selecting %s to satisfy %s" % (fn, item))
+ if self.tryBuild(fn, item, buildAllDeps):
return 1
bb.note("no buildable providers for %s" % item)
return 0
- def getProvidersRun(self, rdepend):
- # Get the providers of run time dependency rdepend
- rproviders = []
-
- if rdepend in self.status.rproviders:
- rproviders += self.status.rproviders[rdepend]
-
- if rdepend in self.status.packages:
- rproviders += self.status.packages[rdepend]
-
- if rproviders:
- return rproviders
-
- # Only search dynamic packages if we can't find anything in other variables
- for pattern in self.status.packages_dynamic:
- regexp = re.compile(pattern)
- if regexp.match(rdepend):
- rproviders += self.status.packages_dynamic[pattern]
-
- return rproviders
-
- def addRunDeps(self , fn, item , buildAllDeps):
-
- if item in self.rbuild_cache:
- return
-
- rdepends = []
- self.rbuild_cache.append(item)
- the_data = self.pkgdata[fn]
- pn = self.status.pkg_fn[fn]
-
- bb.note("Building RDEPENDS for %s" % pn)
-
- if (item == pn):
- rdepends += bb.utils.explode_deps(bb.data.getVar('RDEPENDS', the_data, 1) or "")
- rdepends += bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS', the_data, 1) or "")
- else:
- packages = (bb.data.getVar('PACKAGES', the_data, 1).split() or "")
- for package in packages:
- if package == item:
- rdepends += bb.utils.explode_deps(bb.data.getVar("RDEPENDS_%s" % package, the_data, 1) or "")
- rdepends += bb.utils.explode_deps(bb.data.getVar("RRECOMMENDS_%s" % package, the_data, 1) or "")
-
- #depends_list += self.removeSelfDeps(the_data, subdeps)
-
- bb.note("runtime dependencies for %s are: %s" % (item, " ".join(rdepends)))
-
- for rdepend in rdepends:
- self.buildRProvider(rdepend, buildAllDeps)
-
- def buildRProvider( self, item , buildAllDeps ):
-
- fn = None
- all_p = []
- discriminated = False
-
- if not buildAllDeps:
- bb.note("not building all deps")
- return 1
-
- all_p = self.getProvidersRun(item)
-
- if not all_p:
- bb.error("Nothing provides runtime dependency %s" % (item))
- return 0
-
- for p in all_p:
- if p in self.rbuild_cache:
- bb.note("already built %s providing runtime %s\n" % (p,item))
- return 1
- if p in self.build_cache:
- bb.note("Already built %s but adding any further RDEPENDS for %s\n" % (p, item))
- self.addRunDeps(p, item , buildAllDeps)
- return 1
-
- eligible = []
- preferred_versions = {}
-
- # Collate providers by PN
- pkg_pn = {}
- for p in all_p:
- pn = self.status.pkg_fn[p]
- if pn not in pkg_pn:
- pkg_pn[pn] = []
- pkg_pn[pn].append(p)
-
- bb.note("providers for runtime %s are: %s" % (item, pkg_pn.keys()))
-
- for pn in pkg_pn.keys():
- preferred_versions[pn] = self.findBestProvider(pn, pkg_pn)[2:4]
- eligible.append(preferred_versions[pn][1])
-
- for p in eligible:
- if p in self.build_cache_fail:
- bb.note("rejecting already-failed %s" % p)
- eligible.remove(p)
-
- if len(eligible) == 0:
- bb.error("no eligible providers for runtime %s" % item)
- return 0
-
- # look to see if one of them is already staged, or marked as preferred.
- # if so, bump it to the head of the queue
- for p in all_p:
- the_data = self.pkgdata[p]
- pn = bb.data.getVar('PN', the_data, 1)
- pv = bb.data.getVar('PV', the_data, 1)
- pr = bb.data.getVar('PR', the_data, 1)
- tmpdir = bb.data.getVar('TMPDIR', the_data, 1)
- stamp = '%s/stamps/%s-%s-%s.do_populate_staging' % (tmpdir, pn, pv, pr)
- if os.path.exists(stamp):
- (newvers, fn) = preferred_versions[pn]
- if not fn in eligible:
- # package was made ineligible by already-failed check
- continue
- oldver = "%s-%s" % (pv, pr)
- newver = '-'.join(newvers)
- if (newver != oldver):
- extra_chat = "; upgrading from %s to %s" % (oldver, newver)
- else:
- extra_chat = ""
- if self.configuration.verbose:
- bb.note("selecting already-staged %s to satisfy %s%s" % (pn, item, extra_chat))
- eligible.remove(fn)
- eligible = [fn] + eligible
- discriminated = True
- break
-
- for p in eligible:
- pn = self.status.pkg_fn[p]
- prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % pn, self.configuration.data, 1)
- if prefervar:
- if self.configuration.verbose:
- bb.note("selecting %s to satisfy runtime %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:
- providers_list = []
- for fn in eligible:
- providers_list.append(self.status.pkg_fn[fn])
- bb.note("multiple providers are available (%s);" % ", ".join(providers_list))
- bb.note("consider defining a PREFERRED_PROVIDER to match runtime %s" % item)
- self.consider_msgs_cache.append(item)
-
- # run through the list until we find one that we can build
- for fn in eligible:
- bb.note("selecting %s to satisfy runtime %s" % (fn, item))
- if self.tryBuild(fn, item, "runtime", buildAllDeps):
- return 1
-
- bb.note("no buildable providers for runtime %s" % item)
- return 0
-
def buildDepgraph( self ):
all_depends = self.status.all_depends
pn_provides = self.status.pn_provides
More information about the Openembedded-commits
mailing list