diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2006-10-17 20:51:25 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2006-10-17 20:51:25 +0000 | 
| commit | 17cead0483ce1633110ddf8d888b4ed3df5be0b7 (patch) | |
| tree | 97eef4619c629adb201a2da60f30e4b2e3a5bf35 | |
| parent | 15230af45d228f8311beb6f5216620cbe794a0c9 (diff) | |
fix submenu sorting
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@5195 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rwxr-xr-x | scripts/gen_menuconfig.pl | 55 | 
1 files changed, 32 insertions, 23 deletions
diff --git a/scripts/gen_menuconfig.pl b/scripts/gen_menuconfig.pl index 2a2511212..9c705af56 100755 --- a/scripts/gen_menuconfig.pl +++ b/scripts/gen_menuconfig.pl @@ -13,19 +13,7 @@ my $makefile;  my $pkg;  my %package;  my %category; -my $cur_menu; -my $cur_menu_dep; -sub close_submenu { -	if ($cur_menu) { -		print "endmenu\n"; -		$cur_menu_dep and do { -			print "endif\n"; -			$cur_menu_dep = undef; -		}; -		undef $cur_menu; -	}  -}  sub find_dep($$) {  	my $pkg = shift; @@ -45,6 +33,7 @@ sub depends($$) {  	my $b = shift;  	my $ret; +	return 0 if ($a->{submenu} ne $b->{submenu});  	if (find_dep($a, $b->{name}) == 1) {  		$ret = 1;  	} elsif (find_dep($b, $a->{name}) == 1) { @@ -59,25 +48,42 @@ sub depends($$) {  sub print_category($) {  	my $cat = shift; +	my %menus; +	my %menu_dep;  	return unless $category{$cat};  	print "menu \"$cat\"\n\n";  	my %spkg = %{$category{$cat}}; +	  	foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) { +		foreach my $pkg (@{$spkg{$spkg}}) { +			my $menu = $pkg->{submenu}; +			if ($menu) { +				$menu_dep{$menu} or $menu_dep{$menu} = $pkg->{submenudep}; +			} else { +				$menu = 'undef'; +			} +			$menus{$menu} or $menus{$menu} = []; +			push @{$menus{$menu}}, $pkg; +		} +	} +	my @menus = sort { +		($a eq 'undef' ?  1 : 0) or +		($b eq 'undef' ? -1 : 0) or +		($a cmp $b) +	} keys %menus; + +	foreach my $menu (@menus) {  		my @pkgs = sort {  			depends($a, $b) or -			$a->{submenu}."->".$a->{name} cmp $b->{submenu}."->".$b->{name} -		} @{$spkg{$spkg}}; +			($a->{name} cmp $b->{name}) +		} @{$menus{$menu}}; +		if ($menu ne 'undef') { +			$menu_dep{$menu} and print "if $menu_dep{$menu}\n"; +			print "menu \"$menu\"\n"; +		}  		foreach my $pkg (@pkgs) { -			if ($cur_menu ne $pkg->{submenu}) { -				close_submenu(); -				if ($pkg->{submenu}) { -					$cur_menu = $pkg->{submenu}; -					$cur_menu_dep = $pkg->{submenudep} and print "if $cur_menu_dep\n"; -					print "menu \"$cur_menu\"\n"; -				} -			}  			my $title = $pkg->{name};  			my $c = (72 - length($pkg->{name}) - length($pkg->{title}));  			if ($c > 0) { @@ -110,8 +116,11 @@ sub print_category($) {  			$pkg->{config} and print $pkg->{config}."\n";  		} +		if ($menu ne 'undef') { +			print "endmenu\n"; +			$menu_dep{$menu} and print "endif\n"; +		}  	} -	close_submenu();  	print "endmenu\n\n";  	undef $category{$cat};  | 
