Update of /cvsroot/fink/scripts/buildfink
In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv32215

Modified Files:
        buildfink 
Log Message:
Oops, we had dep lists inside-out

Index: buildfink
===================================================================
RCS file: /cvsroot/fink/scripts/buildfink/buildfink,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- buildfink   27 Oct 2006 15:25:40 -0000      1.36
+++ buildfink   31 Oct 2006 05:33:38 -0000      1.37
@@ -310,8 +310,8 @@
                        doLog("Couldn't get dependencies for $pkg: $@");
                        next;
                }
-               foreach my $altlist (@deps) {
-                       foreach my $alt (map {$_->get_name()} @$altlist) {
+               foreach my $dep (@deps) {
+                       foreach my $alt (map {$_->get_name()} @$dep) {
                                $dependents{$alt} ||= {};
                                $dependents{$alt}->{$pkg} = 1;
                        }
@@ -643,59 +643,42 @@
                return;
        }
 
-       # @deps is in conjunctive normal form.  That is, it is a list like:
-       #       {{A ^ B ^ C} v {D ^ E} v {F}}
-       # In other words, a list of alternatives, and each alternative is a
-       # series of packages which must all be satisfied.
-       my $satisfied = 0;
-       my @faildep;
-       my @satisfiable_alts;
-       CHECKSAT: foreach my $alternative (@deps) {
-               foreach my $altdep (@$alternative) {
-                       my $depname = $altdep->get_name();
-                       my $depstat = $pkglist->{$depname};
+       # @deps is in disjunctive normal form.  That is, it is a list like:
+       #       {{A v B v C} ^ {D v E} ^ {F}}
+       # In other words, a list of dependencies, and each dependency is a
+       # list of packages which can satisfy it.
+       DEP: foreach my $dep (@deps) {
+               my @alts = sort {
+                       # Prefer already-installed deps.
+       
+                       my $status_a = $pkglist->{$a};
+                       my $score_a = 0;
+                       $score_a = 1 if defined($status_a) and $status_a == 
PKGSTATUS_INSTALLED;
+                       my $status_b = $pkglist->{$b};
+                       my $score_b = 0;
+                       $score_b = 1 if defined($status_b) and $status_b == 
PKGSTATUS_INSTALLED;
+
+                       $score_b <=> $score_a;
+               } filterSplitoffs(map {$_->get_name()} @$dep);
+
+               foreach my $alt (@alts) {
+                       my $depstat = $pkglist->{$alt};
                        $depstat = PKGSTATUS_INSTALL unless defined($depstat);
                        if($depstat == PKGSTATUS_FAILED or $depstat == 
PKGSTATUS_PROCESSING) {
-                               push @faildep, $depname;
-                               next CHECKSAT;
+                               next;
                        }
-               }
 
-               push @satisfiable_alts, $alternative;
-       }
-
-       foreach my $alternative (sort {
-               # Count the number of uninstalled packages in this alternative.
-               # If we have an alternative that doesn't require any extra
-               # building, pick that one.
-
-               my @pkgs_a = map {$_->get_name()} @$a;
-               my $unsats_a = grep {!defined($pkglist->{$_}) or $pkglist->{$_} 
!= PKGSTATUS_INSTALLED} @pkgs_a;
-
-               my @pkgs_b = map {$_->get_name()} @$b;
-               my $unsats_b = grep {!defined($pkglist->{$_}) or $pkglist->{$_} 
!= PKGSTATUS_INSTALLED} @pkgs_b;
-
-               $unsats_a <=> $unsats_b;
-       } @satisfiable_alts) {
-               # This alternative is satisfiable
-               foreach my $altdep (@$alternative) {
-                       my $depname = $altdep->get_name();
-                       $pkglist->{$depname} = PKGSTATUS_INSTALL if 
!defined($pkglist->{$depname});
-                       next if $pkglist->{$depname} == PKGSTATUS_INSTALLED;
-                       recurseOnDepends($pkglist, filterSplitoffs($depname), 
1, $finkfiles);
-                       if($pkglist->{$depname} == PKGSTATUS_FAILED) {
-                               push @faildep, $depname;
-                               next CHECKSAT;
+                       $pkglist->{$alt} = PKGSTATUS_INSTALL if 
!defined($pkglist->{$alt});
+                       next if $pkglist->{$alt} == PKGSTATUS_INSTALLED;
+                       recurseOnDepends($pkglist, $alt, 1, $finkfiles);
+                       if($pkglist->{$alt} == PKGSTATUS_FAILED) {
+                               next;
                        }
-               }
-
-               $satisfied = 1;
-               last;
-       }
 
-       if(!$satisfied) {
-               logPackageFail($pkg, "Can't figure out how to build.  
Unsatisfied dependencies: " . join(" ", sort @faildep));
-               return;
+                       next DEP;
+                       logPackageFail($pkg, "Can't figure out how to build.  
Unsatisfied dependencies: " . join(" ", @alts));
+                       return;
+               }
        }
 
        if($DoValidate) {


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Fink-commits mailing list
Fink-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to