[oe-commits] org.nslu2-linux.bitbake bitbake: bitbake revision 334
jbowler commit
openembedded-commits at lists.openembedded.org
Mon Oct 23 17:45:00 UTC 2006
bitbake: bitbake revision 334
Author: jbowler at nslu2-linux.org
Branch: org.nslu2-linux.bitbake
Revision: ea870eecc49ed17f6243578a4bab1f0490defb99
ViewMTN: http://monotone.openembedded.org/revision.psp?id=ea870eecc49ed17f6243578a4bab1f0490defb99
Files:
1
bin/bitbake
lib/bb/shell.py
lib/bb/utils.py
Diffs:
#
# mt diff -r334c0d2dc58bf8d889b6996772fd3589ac3ce552 -rea870eecc49ed17f6243578a4bab1f0490defb99
#
#
#
# patch "bin/bitbake"
# from [b1b0d707f65b8305610e2e45986075c0aa3db275]
# to [25fb9c4ac042ff3480dbb054833a9ad94d10220b]
#
# patch "lib/bb/shell.py"
# from [9d77708d9910f911076f9678ca01f0a63c47e6b1]
# to [d677b17a7543b340148012477ada298fa7b06716]
#
# patch "lib/bb/utils.py"
# from [57700a024b4313687805256e95231349e6c426c5]
# to [4bbc84348f12fb1ee2feb0f7dbc5baf0a38aa323]
#
============================================================
--- bin/bitbake b1b0d707f65b8305610e2e45986075c0aa3db275
+++ bin/bitbake 25fb9c4ac042ff3480dbb054833a9ad94d10220b
@@ -219,42 +219,17 @@ class BBCooker:
self.build_cache_fail.append(fn)
raise
- def regexpsMatch(self, regexps, substring):
- for regexp in regexps:
- if regexp.match(substring):
- return 1
- return 0
-
- def removeSelfDeps(self, the_data, deps_list):
- clean_deps = []
- dpackagesRe = []
- # Remove any dependencies which map to ourselves to avoid circular dependencies
- packages = (bb.data.getVar('PACKAGES', the_data, 1) or "").split()
- dpackages = (bb.data.getVar('PACKAGES_DYNAMIC', the_data, 1) or "").split()
- bb.note("deps_list: %s" % " ".join(deps_list))
- for dpackage in dpackages:
- dpackagesRe.append(re.compile(dpackage))
- for subdep in deps_list:
- if subdep in packages:
- continue
- if not self.regexpsMatch(dpackagesRe, subdep):
- clean_deps.append(subdep)
- bb.note("clean %s" % ":".join(clean_deps))
- return clean_deps
-
def tryBuild( self, fn, virtual , itemtype , buildAllDeps ):
"""Build a provider and its dependencies"""
the_data = self.pkgdata[fn]
if not buildAllDeps:
- buildAllDeps = bb.data.getVar('BUILD_ALL_DEPS', the_data, 1) or False
+ buildAllDeps = bb.data.getVar('BUILD_ALL_DEPS', the_data, True) or False
- self.addRunDeps(fn, virtual , buildAllDeps)
-
if fn in self.building_list:
if itemtype == "runtime":
- return True
+ return self.addRunDeps(fn, virtual , buildAllDeps)
else:
bb.error("%s depends on itself (eventually)" % fn)
bb.error("upwards chain is: %s" % (" -> ".join(self.build_path)))
@@ -267,11 +242,8 @@ class BBCooker:
pathstr = "%s (%s)" % (item, virtual)
self.build_path.append(pathstr)
+ depends_list = (bb.data.getVar('DEPENDS', the_data, True) or "").split()
- depends_list = (bb.data.getVar('DEPENDS', the_data, 1) or "").split()
-
- bb.note("build 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)))
@@ -309,6 +281,9 @@ class BBCooker:
self.stats.deps += 1
return False
+ if not self.addRunDeps(fn, virtual , buildAllDeps):
+ return False
+
if bb.build.stamp_is_current('do_%s' % self.configuration.cmd, the_data):
self.build_cache.append(fn)
return True
@@ -347,7 +322,7 @@ class BBCooker:
bb.data.setVar('OVERRIDES', "%s:%s" % (pn, data.getVar('OVERRIDES', localdata)), localdata)
bb.data.update_data(localdata)
- preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, localdata, 1)
+ preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, localdata, True)
if preferred_v:
m = re.match('(.*)_(.*)', preferred_v)
if m:
@@ -441,53 +416,17 @@ class BBCooker:
if data.getVarFlag( e, 'python', self.configuration.data ):
sys.__stdout__.write("\npython %s () {\n%s}\n" % (e, data.getVar(e, self.configuration.data, 1)))
- def getProviders(self, item, buildAllDeps):
-
- if item in self.status.providers:
- return self.status.providers[item]
-
- if not buildAllDeps:
- return False
-
- if item in self.status.rproviders:
- return self.status.rproviders[item]
-
- if item in self.status.packages:
- return self.status.packages[item]
-
- matches = []
- for pattern in self.status.packages_dynamic:
- regexp = re.compile(pattern)
- if regexp.match(item):
- for fn in self.status.packages_dynamic[pattern]:
- matches.append(fn)
-
- if matches:
- return matches
-
- return False
-
- 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))
- 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)
- return 1
-
+ def filterProviders(self, providers, item):
+ """
+ Take a list of providers and filter/reorder according to the
+ environment variables and previous build results
+ """
eligible = []
preferred_versions = {}
# Collate providers by PN
pkg_pn = {}
- for p in all_p:
+ for p in providers:
pn = self.status.pkg_fn[p]
if pn not in pkg_pn:
pkg_pn[pn] = []
@@ -510,7 +449,7 @@ class BBCooker:
# 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:
+ for p in providers:
the_data = self.pkgdata[p]
pn = bb.data.getVar('PN', the_data, 1)
pv = bb.data.getVar('PV', the_data, 1)
@@ -535,6 +474,30 @@ class BBCooker:
discriminated = True
break
+ return eligible
+
+ def buildProvider( self, item , buildAllDeps ):
+ """
+ Build something to provide a named build requirement
+ (takes item names from DEPENDS namespace)
+ """
+
+ fn = None
+ discriminated = False
+
+ if not item in self.status.providers:
+ bb.error("Nothing provides dependency %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)
+ return 1
+
+ eligible = self.filterProviders(all_p, item)
+
prefervar = bb.data.getVar('PREFERRED_PROVIDER_%s' % item, self.configuration.data, 1)
if prefervar:
self.preferred[item] = prefervar
@@ -562,142 +525,43 @@ 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))
+ bb.debug(2, "selecting %s to satisfy %s" % (fn, item))
if self.tryBuild(fn, item, "build", 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 ):
+ """
+ Build something to provide a named runtime requirement
+ (takes item names from RDEPENDS/PACKAGES namespace)
+ """
fn = None
all_p = []
discriminated = False
if not buildAllDeps:
- bb.note("not building all deps")
- return 1
+ return True
all_p = self.getProvidersRun(item)
if not all_p:
bb.error("Nothing provides runtime dependency %s" % (item))
- return 0
+ return False
for p in all_p:
if p in self.rbuild_cache:
- bb.note("already built %s providing runtime %s\n" % (p,item))
- return 1
+ bb.debug(2, "Already built %s providing runtime %s\n" % (p,item))
+ return True
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
+ bb.debug(2, "Already built %s but adding any further RDEPENDS for %s\n" % (p, item))
+ return self.addRunDeps(p, item , buildAllDeps)
- eligible = []
- preferred_versions = {}
+ eligible = self.filterProviders(all_p, item)
- # 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:
@@ -719,13 +583,70 @@ class BBCooker:
# 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))
+ bb.debug(2, "selecting %s to satisfy runtime %s" % (fn, item))
if self.tryBuild(fn, item, "runtime", buildAllDeps):
- return 1
+ return True
- bb.note("no buildable providers for runtime %s" % item)
- return 0
+ bb.error("No buildable providers for runtime %s" % item)
+ return False
+ def getProvidersRun(self, rdepend):
+ """
+ Return any potential providers of runtime 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):
+ """
+ Add any runtime dependencies of runtime item provided by fn
+ as long as item has't previously been processed by this function.
+ """
+
+ if item in self.rbuild_cache:
+ return True
+
+ if not buildAllDeps:
+ return True
+
+ rdepends = []
+ self.rbuild_cache.append(item)
+ the_data = self.pkgdata[fn]
+ pn = self.status.pkg_fn[fn]
+
+ if (item == pn):
+ rdepends += bb.utils.explode_deps(bb.data.getVar('RDEPENDS', the_data, True) or "")
+ rdepends += bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS', the_data, True) 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, True) or "")
+ rdepends += bb.utils.explode_deps(bb.data.getVar("RRECOMMENDS_%s" % package, the_data, True) or "")
+
+ bb.debug(2, "Additional runtime dependencies for %s are: %s" % (item, " ".join(rdepends)))
+
+ for rdepend in rdepends:
+ if not self.buildRProvider(rdepend, buildAllDeps):
+ return False
+ return True
+
def buildDepgraph( self ):
all_depends = self.status.all_depends
pn_provides = self.status.pn_provides
============================================================
--- lib/bb/shell.py 9d77708d9910f911076f9678ca01f0a63c47e6b1
+++ lib/bb/shell.py d677b17a7543b340148012477ada298fa7b06716
@@ -157,7 +157,7 @@ class BitBakeShellCommands:
for name in names:
try:
- cooker.buildProvider( name )
+ cooker.buildProvider( name, data.getVar("BUILD_ALL_DEPS", cooker.configuration.data, True) )
except build.EventException, e:
print "ERROR: Couldn't build '%s'" % name
global last_exception
===============================================%s
>>> DIFF TRUNCATED @ 16K
More information about the Openembedded-commits
mailing list