[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