menuconfig: include dependency checking in submenu sorting function
authorFelix Fietkau <nbd@openwrt.org>
Tue, 17 Oct 2006 17:45:14 +0000 (17:45 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 17 Oct 2006 17:45:14 +0000 (17:45 +0000)
SVN-Revision: 5193

scripts/gen_menuconfig.pl

index c0279d5..fe0dc27 100755 (executable)
@@ -11,6 +11,7 @@ use strict;
 my $src;
 my $makefile;
 my $pkg;
 my $src;
 my $makefile;
 my $pkg;
+my %package;
 my %category;
 my $cur_menu;
 my $cur_menu_dep;
 my %category;
 my $cur_menu;
 my $cur_menu_dep;
@@ -26,6 +27,35 @@ sub close_submenu {
        } 
 }
 
        } 
 }
 
+sub find_dep($$) {
+       my $pkg = shift;
+       my $name = shift;
+       
+       return 0 unless defined $pkg->{depends};
+       foreach my $dep (@{$pkg->{depends}}) {
+               return 1 if $dep eq $name;
+               return 1 if ($package{$dep} and (find_dep($package{$dep},$name) == 1));
+       }
+       return 0;
+}
+
+sub depends($$) {
+       my $a = shift;
+       my $b = shift;
+       my $ret;
+       
+       if (find_dep($a, $b->{name}) == 1) {
+               $ret = 1;
+       } elsif (find_dep($b, $a->{name}) == 1) {
+               $ret = -1;
+       } else {
+               $ret = 0;
+       }
+#      print STDERR "depends($a->{name}, $b->{name}) == $ret\n";
+       return $ret;
+}
+
+
 sub print_category($) {
        my $cat = shift;
        
 sub print_category($) {
        my $cat = shift;
        
@@ -35,6 +65,7 @@ sub print_category($) {
        my %spkg = %{$category{$cat}};
        foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) {
                my @pkgs = sort {
        my %spkg = %{$category{$cat}};
        foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) {
                my @pkgs = sort {
+                       depends($a, $b) or
                        $a->{submenu}."->".$a->{name} cmp $b->{submenu}."->".$b->{name}
                } @{$spkg{$spkg}};
                foreach my $pkg (@pkgs) {
                        $a->{submenu}."->".$a->{name} cmp $b->{submenu}."->".$b->{name}
                } @{$spkg{$spkg}};
                foreach my $pkg (@pkgs) {
@@ -93,6 +124,7 @@ while ($line = <>) {
                $pkg->{makefile} = $makefile;
                $pkg->{name} = $1;
                $pkg->{default} = "m if ALL";
                $pkg->{makefile} = $makefile;
                $pkg->{name} = $1;
                $pkg->{default} = "m if ALL";
+               $package{$1} = $pkg;
        };
        $line =~ /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
        $line =~ /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
        };
        $line =~ /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
        $line =~ /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;