bin/bitbake:
[vuplus_bitbake] / bin / bitbake
index 74d9acd..ac5a8b7 100755 (executable)
@@ -22,7 +22,7 @@
 # Place, Suite 330, Boston, MA 02111-1307 USA.
 
 import sys, os, getopt, glob, copy, os.path, re, time
-sys.path.append(os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib'))
+sys.path.insert(0,os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib'))
 import bb
 from bb import utils, data, parse, debug, event, fatal
 from sets import Set
@@ -77,10 +77,10 @@ class BBParsingStatus:
         pr       = bb.data.getVar('PR', bb_data, True)
         dp       = int(bb.data.getVar('DEFAULT_PREFERENCE', bb_data, True) or "0")
         provides = Set([pn] + (bb.data.getVar("PROVIDES", bb_data, 1) or "").split())
-        rprovides = (bb.data.getVar("RPROVIDES", bb_data, 1) or "").split()
         depends  = (bb.data.getVar("DEPENDS", bb_data, True) or "").split()
         packages = (bb.data.getVar('PACKAGES', bb_data, True) or "").split()
         packages_dynamic = (bb.data.getVar('PACKAGES_DYNAMIC', bb_data, True) or "").split()
+        rprovides = (bb.data.getVar("RPROVIDES", bb_data, 1) or "").split()
 
 
         # build PackageName to FileName lookup table
@@ -110,11 +110,11 @@ class BBParsingStatus:
 
         # Build reverse hash for PACKAGES, so runtime dependencies 
         # can be be resolved (RDEPENDS, RRECOMMENDS etc.)
-    
         for package in packages:
             if not package in self.packages:
                 self.packages[package] = []
             self.packages[package].append(file_name)
+            rprovides += (bb.data.getVar("RPROVIDES_%s" % package, bb_data, 1) or "").split() 
 
         for package in packages_dynamic:
             if not package in self.packages_dynamic:
@@ -493,6 +493,7 @@ class BBCooker:
 
         if not item in self.status.providers:
             bb.error("Nothing provides dependency %s" % item)
+            bb.event.fire(bb.event.NoProvider(item,self.configuration.data))
             return 0
 
         all_p = self.status.providers[item]
@@ -529,6 +530,7 @@ class BBCooker:
                     providers_list.append(self.status.pkg_fn[fn])
                 bb.note("multiple providers are available (%s);" % ", ".join(providers_list))
                 bb.note("consider defining PREFERRED_PROVIDER_%s" % item)
+                bb.event.fire(bb.event.MultipleProviders(item,providers_list,self.configuration.data))
             self.consider_msgs_cache.append(item)
 
 
@@ -539,6 +541,7 @@ class BBCooker:
                 return 1
 
         bb.note("no buildable providers for %s" % item)
+        bb.event.fire(bb.event.NoProvider(item,self.configuration.data))
         return 0
 
     def buildRProvider( self, item , buildAllDeps ):
@@ -558,6 +561,7 @@ class BBCooker:
 
         if not all_p:
             bb.error("Nothing provides runtime dependency %s" % (item))
+            bb.event.fire(bb.event.NoProvider(item,self.configuration.data,runtime=True))
             return False
 
         for p in all_p:
@@ -592,6 +596,7 @@ class BBCooker:
                     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)
+                bb.event.fire(bb.event.MultipleProviders(item,providers_list,self.configuration.data,runtime=True))
             self.consider_msgs_cache.append(item)
 
         if len(preferred) > 1:
@@ -601,6 +606,7 @@ class BBCooker:
                     providers_list.append(self.status.pkg_fn[fn])
                 bb.note("multiple preferred providers are available (%s);" % ", ".join(providers_list))
                 bb.note("consider defining only one PREFERRED_PROVIDER to match runtime %s" % item)
+                bb.event.fire(bb.event.MultipleProviders(item,providers_list,self.configuration.data,runtime=True))
             self.consider_msgs_cache.append(item)
 
         # run through the list until we find one that we can build
@@ -610,6 +616,7 @@ class BBCooker:
                 return True
 
         bb.error("No buildable providers for runtime %s" % item)
+        bb.event.fire(bb.event.NoProvider(item,self.configuration.data))
         return False
 
     def getProvidersRun(self, rdepend):
@@ -656,6 +663,7 @@ class BBCooker:
             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 "")
             rdepends += bb.utils.explode_deps(bb.data.getVar("RDEPENDS_%s" % pn, the_data, True) or "")
+            rdepends += bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS_%s' % pn, the_data, True) or "")
         else:
             packages = (bb.data.getVar('PACKAGES', the_data, 1).split() or "")
             for package in packages:
@@ -693,7 +701,12 @@ class BBCooker:
         for p in self.pkgdata.keys():
             self.status.bbfile_priority[p] = calc_bbfile_priority(p)
 
-        # Build package list for "bitbake world"
+    def buildWorldTargetList(self):
+        """
+         Build package list for "bitbake world"
+        """
+        all_depends = self.status.all_depends
+        pn_provides = self.status.pn_provides
         bb.debug(1, "collating packages for \"world\"")
         for f in self.status.possible_world:
             terminal = True
@@ -875,12 +888,14 @@ class BBCooker:
                 self.showVersions()
                 sys.exit( 0 )
             if 'world' in pkgs_to_build:
+                self.buildWorldTargetList()
                 pkgs_to_build.remove('world')
                 for t in self.status.world_target:
                     pkgs_to_build.append(t)
 
             bb.event.fire(bb.event.BuildStarted(buildname, pkgs_to_build, self.configuration.data))
 
+            failures = 0
             for k in pkgs_to_build:
                 failed = False
                 try:
@@ -892,10 +907,11 @@ class BBCooker:
                     failed = True
 
                 if failed:
+                    failures += failures
                     if self.configuration.abort:
                         sys.exit(1)
 
-            bb.event.fire(bb.event.BuildCompleted(buildname, pkgs_to_build, self.configuration.data))
+            bb.event.fire(bb.event.BuildCompleted(buildname, pkgs_to_build, self.configuration.data, failures))
 
             sys.exit( self.stats.show() )
 
@@ -1041,9 +1057,6 @@ class BBCooker:
                                 if not os.path.isabs(aof):
                                     aof = os.path.join(os.path.dirname(f),aof)
                                 files.append(aof)
-                    for var in bb_data.keys():
-                        if data.getVarFlag(var, "handler", bb_data) and data.getVar(var, bb_data):
-                            event.register(data.getVar(var, bb_data))
                     self.pkgdata[f] = bb_data
 
                 # now inform the caller
@@ -1068,8 +1081,7 @@ class BBCooker:
 # main
 #============================================================================#
 
-if __name__ == "__main__":
-
+def main():
     parser = optparse.OptionParser( version = "BitBake Build Tool Core version %s, %%prog version %s" % ( bb.__version__, __version__ ),
     usage = """%prog [options] [package ...]
 
@@ -1121,3 +1133,8 @@ Default BBFILES are the .bb files in the current directory.""" )
 
     cooker = BBCooker()
     cooker.cook( BBConfiguration( options ), args[1:] )
+
+
+
+if __name__ == "__main__":
+    main()