changeset 3361:1a8178bcb1cc

only process build dependency for packages that are not installable.
author Han-Wen Nienhuys <hanwen@xs4all.nl>
date Sun, 29 Apr 2007 02:29:53 -0400
parents 096dbb1565ba
children f7a8ca187610
files bin/gub
diffstat 1 files changed, 29 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/bin/gub	Sun Apr 29 02:24:52 2007 -0400
+++ b/bin/gub	Sun Apr 29 02:29:53 2007 -0400
@@ -28,6 +28,8 @@
 sys.path.insert (0, 'lib/')
 
 import cross
+
+## fixme: double use of gub name.
 import gub
 import gup
 import misc
@@ -158,7 +160,7 @@
     if options.stage:
         (available[options.stage]) ()
         return
-
+    
     stages = ['download', 'untar', 'patch',
               'configure', 'compile', 'install',
               'src_package', 'package', 'clean']
@@ -319,18 +321,38 @@
             print v
         
 def build (settings, files):
+    try:
+        pm = gup.get_target_manager (settings)
+
+        ## Todo: have a readonly lock for local platform
+    except locker.LockedError:
+        print 'another build in progress. Skipping.'
+        if settings.options.skip_if_locked:
+            sys.exit (0)
+        raise
+
+
     (names, specs) = gup.get_source_packages (settings, files)
     def get_all_deps (name):
-        package = specs[name]
-        deps = package.get_build_dependencies ()
+        buildspec = specs[name]
+        deps = []
+
+        is_installable = misc.forall (pm.is_registered (package.name ())
+                                      and pm.is_installable (package.name ())
+                                      for package in buildspec.get_packages ())
+
+        if not is_installable:
+            deps = buildspec.get_build_dependencies ()
         if not settings.is_distro:
             deps = [gup.get_base_package_name (d) for d in deps]
+            
         return deps
 
     deps = gup.topologically_sorted (files, {}, get_all_deps, None)
     if settings.options.verbose:
         print 'deps:' + `deps`
 
+
     PATH = os.environ['PATH']
     os.environ['PATH'] = settings.expand ('%(local_prefix)s/bin:' + PATH)
 
@@ -344,17 +366,11 @@
             specs[i].download ()
         sys.exit (0)
 
-    try:
-        pm = gup.get_target_manager (settings)
+    if settings.options.stage:
+        names = files
 
-        ## Todo: have a readonly lock for local platform
-    except locker.LockedError:
-        print 'another build in progress. Skipping.'
-        if settings.options.skip_if_locked:
-            sys.exit (0)
-        raise
-
-    deps = filter (specs.has_key, names)
+    deps = filter (specs.has_key, deps)
+    
     run_builder (settings.options, settings, pm, deps, specs)
 
 def main ():