merge the scripts dealing with package/target metadata to remove some redundant code
SVN-Revision: 6088
This commit is contained in:
		
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							@@ -82,10 +82,10 @@ tmpinfo-clean: FORCE
 | 
				
			|||||||
	@-rm -rf tmp/.pkginfo tmp/.targetinfo
 | 
						@-rm -rf tmp/.pkginfo tmp/.targetinfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tmp/.config.in: tmp/.pkginfo
 | 
					tmp/.config.in: tmp/.pkginfo
 | 
				
			||||||
	@./scripts/gen_package_config.pl < $< > $@ || rm -f $@
 | 
						@./scripts/metadata.pl package_config < $< > $@ || rm -f $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tmp/.config-target.in: tmp/.targetinfo
 | 
					tmp/.config-target.in: tmp/.targetinfo
 | 
				
			||||||
	@./scripts/gen_target_config.pl < $< > $@ || rm -f $@
 | 
						@./scripts/metadata.pl target_config < $< > $@ || rm -f $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.config: ./scripts/config/conf tmp/.config.in tmp/.config-target.in
 | 
					.config: ./scripts/config/conf tmp/.config.in tmp/.config-target.in
 | 
				
			||||||
	@[ -f .config ] || $(NO_TRACE_MAKE) menuconfig
 | 
						@[ -f .config ] || $(NO_TRACE_MAKE) menuconfig
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,6 @@ $(TMP_DIR)/.target.mk: $(TOPDIR)/.target.mk
 | 
				
			|||||||
	$(CP) $< $@
 | 
						$(CP) $< $@
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
$(TMP_DIR)/.target.mk: $(TMP_DIR)/.targetinfo
 | 
					$(TMP_DIR)/.target.mk: $(TMP_DIR)/.targetinfo
 | 
				
			||||||
	$(SCRIPT_DIR)/gen_target_mk.pl < $(TMP_DIR)/.targetinfo > $@
 | 
						$(SCRIPT_DIR)/metadata.pl target_mk < $(TMP_DIR)/.targetinfo > $@
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,194 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/perl
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Copyright (C) 2006 OpenWrt.org
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This is free software, licensed under the GNU General Public License v2.
 | 
					 | 
				
			||||||
# See /LICENSE for more information.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use strict;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
my $src;
 | 
					 | 
				
			||||||
my $makefile;
 | 
					 | 
				
			||||||
my $pkg;
 | 
					 | 
				
			||||||
my %package;
 | 
					 | 
				
			||||||
my %category;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub find_dep($$) {
 | 
					 | 
				
			||||||
	my $pkg = shift;
 | 
					 | 
				
			||||||
	my $name = shift;
 | 
					 | 
				
			||||||
	my $deps = ($pkg->{vdepends} or $pkg->{depends});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0 unless defined $deps;
 | 
					 | 
				
			||||||
	foreach my $dep (@{$deps}) {
 | 
					 | 
				
			||||||
		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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return 0 if ($a->{submenu} ne $b->{submenu});
 | 
					 | 
				
			||||||
	if (find_dep($a, $b->{name}) == 1) {
 | 
					 | 
				
			||||||
		$ret = 1;
 | 
					 | 
				
			||||||
	} elsif (find_dep($b, $a->{name}) == 1) {
 | 
					 | 
				
			||||||
		$ret = -1;
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		return 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
#	print STDERR "depends($a->{name}, $b->{name}) == $ret\n";
 | 
					 | 
				
			||||||
	return $ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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;
 | 
					 | 
				
			||||||
			print "\tconfig DEFAULT_".$pkg->{name}."\n";
 | 
					 | 
				
			||||||
			print "\t\tbool\n\n";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	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->{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) {
 | 
					 | 
				
			||||||
			my $title = $pkg->{name};
 | 
					 | 
				
			||||||
			my $c = (72 - length($pkg->{name}) - length($pkg->{title}));
 | 
					 | 
				
			||||||
			if ($c > 0) {
 | 
					 | 
				
			||||||
				$title .= ("." x $c). " ". $pkg->{title};
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			print "\t";
 | 
					 | 
				
			||||||
			$pkg->{menu} and print "menu";
 | 
					 | 
				
			||||||
			print "config PACKAGE_".$pkg->{name}."\n";
 | 
					 | 
				
			||||||
			print "\t\ttristate \"$title\"\n";
 | 
					 | 
				
			||||||
			print "\t\tdefault y if DEFAULT_".$pkg->{name}."\n";
 | 
					 | 
				
			||||||
			foreach my $default (split /\s*,\s*/, $pkg->{default}) {
 | 
					 | 
				
			||||||
				print "\t\tdefault $default\n";
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			foreach my $depend (@{$pkg->{depends}}) {
 | 
					 | 
				
			||||||
				my $m = "depends";
 | 
					 | 
				
			||||||
				$depend =~ s/^([@\+]+)//;
 | 
					 | 
				
			||||||
				my $flags = $1;
 | 
					 | 
				
			||||||
				my $vdep;
 | 
					 | 
				
			||||||
				
 | 
					 | 
				
			||||||
				if ($vdep = $package{$depend}->{vdepends}) {
 | 
					 | 
				
			||||||
					$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					$flags =~ /@/ or $depend = "PACKAGE_$depend";
 | 
					 | 
				
			||||||
					$flags =~ /\+/ and $m = "select";
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				print "\t\t$m $depend\n";
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			print "\t\thelp\n";
 | 
					 | 
				
			||||||
			print $pkg->{description};
 | 
					 | 
				
			||||||
			print "\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			$pkg->{config} and print $pkg->{config}."\n";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if ($menu ne 'undef') {
 | 
					 | 
				
			||||||
			print "endmenu\n";
 | 
					 | 
				
			||||||
			$menu_dep{$menu} and print "endif\n";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	print "endmenu\n\n";
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	undef $category{$cat};
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
my $line;
 | 
					 | 
				
			||||||
while ($line = <>) {
 | 
					 | 
				
			||||||
	chomp $line;
 | 
					 | 
				
			||||||
	$line =~ /^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do {
 | 
					 | 
				
			||||||
		$makefile = $1;
 | 
					 | 
				
			||||||
		$src = $2;
 | 
					 | 
				
			||||||
		undef $pkg;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	$line =~ /^Package: \s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		$pkg = {};
 | 
					 | 
				
			||||||
		$pkg->{src} = $src;
 | 
					 | 
				
			||||||
		$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 =~ /^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1;
 | 
					 | 
				
			||||||
	$line =~ /^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1;
 | 
					 | 
				
			||||||
	$line =~ /^Submenu-Depends: \s*(.+)\s*$/ and $pkg->{submenudep} = $1;
 | 
					 | 
				
			||||||
	$line =~ /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
 | 
					 | 
				
			||||||
	$line =~ /^Provides: \s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		my @vpkg = split /\s+/, $1;
 | 
					 | 
				
			||||||
		foreach my $vpkg (@vpkg) {
 | 
					 | 
				
			||||||
			$package{$vpkg} or $package{$vpkg} = { vdepends => [] };
 | 
					 | 
				
			||||||
			push @{$package{$vpkg}->{vdepends}}, $pkg->{name};
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	$line =~ /^Depends: \s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		my @dep = split /\s+/, $1;
 | 
					 | 
				
			||||||
		$pkg->{depends} = \@dep;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	$line =~ /^Category: \s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		$pkg->{category} = $1;
 | 
					 | 
				
			||||||
		defined $category{$1} or $category{$1} = {};
 | 
					 | 
				
			||||||
		defined $category{$1}->{$src} or $category{$1}->{$src} = [];
 | 
					 | 
				
			||||||
		push @{$category{$1}->{$src}}, $pkg;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	$line =~ /^Description: \s*(.*)\s*$/ and do {
 | 
					 | 
				
			||||||
		my $desc = "\t\t$1\n\n";
 | 
					 | 
				
			||||||
		my $line;
 | 
					 | 
				
			||||||
		while ($line = <>) {
 | 
					 | 
				
			||||||
			last if $line =~ /^@@/;
 | 
					 | 
				
			||||||
			$desc .= "\t\t$line";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		$pkg->{description} = $desc;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	$line =~ /^Config: \s*(.*)\s*$/ and do {
 | 
					 | 
				
			||||||
		my $conf = "$1\n";
 | 
					 | 
				
			||||||
		my $line;
 | 
					 | 
				
			||||||
		while ($line = <>) {
 | 
					 | 
				
			||||||
			last if $line =~ /^@@/;
 | 
					 | 
				
			||||||
			$conf .= "$line";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		$pkg->{config} = $conf;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
print_category 'Base system';
 | 
					 | 
				
			||||||
foreach my $cat (keys %category) {
 | 
					 | 
				
			||||||
	print_category $cat;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,200 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/perl
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Copyright (C) 2006 OpenWrt.org
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This is free software, licensed under the GNU General Public License v2.
 | 
					 | 
				
			||||||
# See /LICENSE for more information.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use strict;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
my @target;
 | 
					 | 
				
			||||||
my $target;
 | 
					 | 
				
			||||||
my $profiles;
 | 
					 | 
				
			||||||
my $profile;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sub features(@) {
 | 
					 | 
				
			||||||
	my $ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	while ($_ = shift @_) {
 | 
					 | 
				
			||||||
		/broken/ and $ret .= "\tdepends BROKEN\n";
 | 
					 | 
				
			||||||
		/pci/ and $ret .= "\tselect PCI_SUPPORT\n";
 | 
					 | 
				
			||||||
		/usb/ and $ret .= "\tselect USB_SUPPORT\n";
 | 
					 | 
				
			||||||
		/atm/ and $ret .= "\tselect ATM_SUPPORT\n";
 | 
					 | 
				
			||||||
		/pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n";
 | 
					 | 
				
			||||||
		/squashfs/ and $ret .= "\tselect USES_SQUASHFS\n";
 | 
					 | 
				
			||||||
		/jffs2/ and $ret .= "\tselect USES_JFFS2\n";
 | 
					 | 
				
			||||||
		/ext2/ and $ret .= "\tselect USES_EXT2\n";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return $ret;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while (<>) {
 | 
					 | 
				
			||||||
	chomp;
 | 
					 | 
				
			||||||
	/^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do {
 | 
					 | 
				
			||||||
		my $conf = uc $3.'_'.$2;
 | 
					 | 
				
			||||||
		$conf =~ tr/\.-/__/;
 | 
					 | 
				
			||||||
		$target = {
 | 
					 | 
				
			||||||
			id => $1,
 | 
					 | 
				
			||||||
			conf => $conf,
 | 
					 | 
				
			||||||
			board => $2,
 | 
					 | 
				
			||||||
			kernel => $3
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		$target->{kernel} =~ tr/\./_/;
 | 
					 | 
				
			||||||
		push @target, $target;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1;
 | 
					 | 
				
			||||||
	/^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1;
 | 
					 | 
				
			||||||
	/^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1;
 | 
					 | 
				
			||||||
	/^Target-Features:\s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		my $f = [];
 | 
					 | 
				
			||||||
		$target->{features} = $f;
 | 
					 | 
				
			||||||
		@$f = split /\s+/, $1;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Target-Description:/ and do {
 | 
					 | 
				
			||||||
		my $desc;
 | 
					 | 
				
			||||||
		while (<>) {
 | 
					 | 
				
			||||||
			last if /^@@/;
 | 
					 | 
				
			||||||
			$desc .= $_;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		$target->{desc} = $desc;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1;
 | 
					 | 
				
			||||||
	/^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1;
 | 
					 | 
				
			||||||
	/^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1;
 | 
					 | 
				
			||||||
	/^Default-Packages:\s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		my @pkgs = split /\s+/, $1;
 | 
					 | 
				
			||||||
		$target->{defaultpkgs} = \@pkgs;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Target-Profile:\s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		$profiles = $target->{profiles} or $target->{profiles} = $profiles = [];
 | 
					 | 
				
			||||||
		$profile = {
 | 
					 | 
				
			||||||
			id => $1
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		push @$profiles, $profile;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
 | 
					 | 
				
			||||||
	/^Target-Profile-Packages:\s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		my @pkgs = split /\s+/, $1;
 | 
					 | 
				
			||||||
		$profile->{pkgs} = \@pkgs;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@target = sort {
 | 
					 | 
				
			||||||
	$a->{name} cmp $b->{name}
 | 
					 | 
				
			||||||
} @target;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
print <<EOF;
 | 
					 | 
				
			||||||
choice
 | 
					 | 
				
			||||||
	prompt "Target System"
 | 
					 | 
				
			||||||
	default LINUX_2_4_BRCM
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
foreach $target (@target) {
 | 
					 | 
				
			||||||
	my $features = features(@{$target->{features}});
 | 
					 | 
				
			||||||
	my $help = $target->{desc};
 | 
					 | 
				
			||||||
	chomp $features;
 | 
					 | 
				
			||||||
	$features .= "\n";
 | 
					 | 
				
			||||||
	if ($help =~ /\w+/) {
 | 
					 | 
				
			||||||
		$help =~ s/^\s*/\t  /mg;
 | 
					 | 
				
			||||||
		$help = "\thelp\n$help";
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		undef $help;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	print <<EOF
 | 
					 | 
				
			||||||
config LINUX_$target->{conf}
 | 
					 | 
				
			||||||
	bool "$target->{name}"
 | 
					 | 
				
			||||||
	select $target->{arch}
 | 
					 | 
				
			||||||
	select LINUX_$target->{kernel}
 | 
					 | 
				
			||||||
$features$help
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
print <<EOF;
 | 
					 | 
				
			||||||
if DEVEL
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_ARM
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED little-endian arm platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select arm
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_CRIS
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED cris platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select cris
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_M68K
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED m68k platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select m68k
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_SH3
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED little-endian sh3 platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select sh3
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_SH3EB
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED big-endian sh3 platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select sh3eb
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_SH4
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED little-endian sh4 platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select sh4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_SH4EB
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED big-endian sh4 platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select sh4eb
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config LINUX_2_6_SPARC
 | 
					 | 
				
			||||||
	bool "UNSUPPORTED sparc platform"
 | 
					 | 
				
			||||||
	depends BROKEN
 | 
					 | 
				
			||||||
	select LINUX_2_6
 | 
					 | 
				
			||||||
	select sparc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
endchoice
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
choice
 | 
					 | 
				
			||||||
	prompt "Target Profile"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
foreach $target (@target) {
 | 
					 | 
				
			||||||
	my $profiles;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	$profiles = $target->{profiles} or $profiles = [
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			id => 'Default',
 | 
					 | 
				
			||||||
			name => 'Default',
 | 
					 | 
				
			||||||
			pkgs => []
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	];
 | 
					 | 
				
			||||||
	foreach my $profile (@$profiles) {
 | 
					 | 
				
			||||||
		print <<EOF;
 | 
					 | 
				
			||||||
config LINUX_$target->{conf}_$profile->{id}
 | 
					 | 
				
			||||||
	bool "$profile->{name}"
 | 
					 | 
				
			||||||
	depends LINUX_$target->{conf}
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
		foreach my $pkg (@{$target->{defaultpkgs}}, @{$profile->{pkgs}}) {
 | 
					 | 
				
			||||||
			print "\tselect DEFAULT_$pkg\n";
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		print "\n";
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
print "endchoice\n";
 | 
					 | 
				
			||||||
@@ -1,88 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/perl
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Copyright (C) 2006 OpenWrt.org
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This is free software, licensed under the GNU General Public License v2.
 | 
					 | 
				
			||||||
# See /LICENSE for more information.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use strict;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
my @target;
 | 
					 | 
				
			||||||
my $target;
 | 
					 | 
				
			||||||
my $profile;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while (<>) {
 | 
					 | 
				
			||||||
	chomp;
 | 
					 | 
				
			||||||
	/^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do {
 | 
					 | 
				
			||||||
		$target = {
 | 
					 | 
				
			||||||
			id => $1,
 | 
					 | 
				
			||||||
			board => $2,
 | 
					 | 
				
			||||||
			kernel => $3,
 | 
					 | 
				
			||||||
			profiles => []
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		push @target, $target;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1;
 | 
					 | 
				
			||||||
	/^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1;
 | 
					 | 
				
			||||||
	/^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1;
 | 
					 | 
				
			||||||
	/^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ];
 | 
					 | 
				
			||||||
	/^Target-Description:/ and do {
 | 
					 | 
				
			||||||
		my $desc;
 | 
					 | 
				
			||||||
		while (<>) {
 | 
					 | 
				
			||||||
			last if /^@@/;
 | 
					 | 
				
			||||||
			$desc .= $_;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		$target->{desc} = $desc;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1;
 | 
					 | 
				
			||||||
	/^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1;
 | 
					 | 
				
			||||||
	/^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1;
 | 
					 | 
				
			||||||
	/^Default-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ];
 | 
					 | 
				
			||||||
	/^Target-Profile:\s*(.+)\s*$/ and do {
 | 
					 | 
				
			||||||
		$profile = {
 | 
					 | 
				
			||||||
			id => $1,
 | 
					 | 
				
			||||||
			name => $1,
 | 
					 | 
				
			||||||
			packages => []
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		push @{$target->{profiles}}, $profile;
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
 | 
					 | 
				
			||||||
	/^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@target = sort {
 | 
					 | 
				
			||||||
	$a->{id} cmp $b->{id}
 | 
					 | 
				
			||||||
} @target;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
foreach $target (@target) {
 | 
					 | 
				
			||||||
	my ($profiles_def, $profiles_eval);
 | 
					 | 
				
			||||||
	my $conf = uc $target->{kernel}.'_'.$target->{board};
 | 
					 | 
				
			||||||
	$conf =~ tr/\.-/__/;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	foreach my $profile (@{$target->{profiles}}) {
 | 
					 | 
				
			||||||
		$profiles_def .= "
 | 
					 | 
				
			||||||
  define Profile/$conf\_$profile->{id}
 | 
					 | 
				
			||||||
    ID:=$profile->{id}
 | 
					 | 
				
			||||||
    NAME:=$profile->{name}
 | 
					 | 
				
			||||||
    PACKAGES:=".join(" ", @{$profile->{packages}})."
 | 
					 | 
				
			||||||
  endef";
 | 
					 | 
				
			||||||
  $profiles_eval .= "
 | 
					 | 
				
			||||||
\$(eval \$(call Profile,$conf\_$profile->{id}))"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	print "
 | 
					 | 
				
			||||||
ifeq (\$(CONFIG_LINUX_$conf),y)
 | 
					 | 
				
			||||||
  define Target
 | 
					 | 
				
			||||||
    KERNEL:=$target->{kernel}
 | 
					 | 
				
			||||||
    BOARD:=$target->{board}
 | 
					 | 
				
			||||||
    BOARDNAME:=$target->{name}
 | 
					 | 
				
			||||||
    LINUX_VERSION:=$target->{version}
 | 
					 | 
				
			||||||
    LINUX_RELEASE:=$target->{release}
 | 
					 | 
				
			||||||
    LINUX_KARCH:=$target->{karch}
 | 
					 | 
				
			||||||
    DEFAULT_PACKAGES:=".join(" ", @{$target->{packages}})."
 | 
					 | 
				
			||||||
  endef$profiles_def
 | 
					 | 
				
			||||||
endif$profiles_eval
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
print "\$(eval \$(call Target))\n";
 | 
					 | 
				
			||||||
							
								
								
									
										435
									
								
								scripts/metadata.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										435
									
								
								scripts/metadata.pl
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,435 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/perl
 | 
				
			||||||
 | 
					use strict;
 | 
				
			||||||
 | 
					my %package;
 | 
				
			||||||
 | 
					my %category;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub parse_target_metadata() {
 | 
				
			||||||
 | 
						my ($target, @target, $profile);	
 | 
				
			||||||
 | 
						while (<>) {
 | 
				
			||||||
 | 
							chomp;
 | 
				
			||||||
 | 
							/^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do {
 | 
				
			||||||
 | 
								my $conf = uc $3.'_'.$2;
 | 
				
			||||||
 | 
								$conf =~ tr/\.-/__/;
 | 
				
			||||||
 | 
								$target = {
 | 
				
			||||||
 | 
									id => $1,
 | 
				
			||||||
 | 
									conf => $conf,
 | 
				
			||||||
 | 
									board => $2,
 | 
				
			||||||
 | 
									kernel => $3,
 | 
				
			||||||
 | 
									profiles => []
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								push @target, $target;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1;
 | 
				
			||||||
 | 
							/^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1;
 | 
				
			||||||
 | 
							/^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1;
 | 
				
			||||||
 | 
							/^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ];
 | 
				
			||||||
 | 
							/^Target-Description:/ and do {
 | 
				
			||||||
 | 
								my $desc;
 | 
				
			||||||
 | 
								while (<>) {
 | 
				
			||||||
 | 
									last if /^@@/;
 | 
				
			||||||
 | 
									$desc .= $_;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								$target->{desc} = $desc;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1;
 | 
				
			||||||
 | 
							/^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1;
 | 
				
			||||||
 | 
							/^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1;
 | 
				
			||||||
 | 
							/^Default-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ];
 | 
				
			||||||
 | 
							/^Target-Profile:\s*(.+)\s*$/ and do {
 | 
				
			||||||
 | 
								$profile = {
 | 
				
			||||||
 | 
									id => $1,
 | 
				
			||||||
 | 
									name => $1,
 | 
				
			||||||
 | 
									packages => []
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								push @{$target->{profiles}}, $profile;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
 | 
				
			||||||
 | 
							/^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return @target;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub parse_package_metadata() {
 | 
				
			||||||
 | 
						my $pkg;
 | 
				
			||||||
 | 
						my $makefile;
 | 
				
			||||||
 | 
						my $src;
 | 
				
			||||||
 | 
						while (<>) {
 | 
				
			||||||
 | 
							chomp;
 | 
				
			||||||
 | 
							/^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do {
 | 
				
			||||||
 | 
								$makefile = $1;
 | 
				
			||||||
 | 
								$src = $2;
 | 
				
			||||||
 | 
								undef $pkg;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Package: \s*(.+)\s*$/ and do {
 | 
				
			||||||
 | 
								$pkg = {};
 | 
				
			||||||
 | 
								$pkg->{src} = $src;
 | 
				
			||||||
 | 
								$pkg->{makefile} = $makefile;
 | 
				
			||||||
 | 
								$pkg->{name} = $1;
 | 
				
			||||||
 | 
								$pkg->{default} = "m if ALL";
 | 
				
			||||||
 | 
								$package{$1} = $pkg;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
 | 
				
			||||||
 | 
							/^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
 | 
				
			||||||
 | 
							/^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1;
 | 
				
			||||||
 | 
							/^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1;
 | 
				
			||||||
 | 
							/^Submenu-Depends: \s*(.+)\s*$/ and $pkg->{submenudep} = $1;
 | 
				
			||||||
 | 
							/^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
 | 
				
			||||||
 | 
							/^Provides: \s*(.+)\s*$/ and do {
 | 
				
			||||||
 | 
								my @vpkg = split /\s+/, $1;
 | 
				
			||||||
 | 
								foreach my $vpkg (@vpkg) {
 | 
				
			||||||
 | 
									$package{$vpkg} or $package{$vpkg} = { vdepends => [] };
 | 
				
			||||||
 | 
									push @{$package{$vpkg}->{vdepends}}, $pkg->{name};
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Depends: \s*(.+)\s*$/ and do {
 | 
				
			||||||
 | 
								my @dep = split /\s+/, $1;
 | 
				
			||||||
 | 
								$pkg->{depends} = \@dep;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Category: \s*(.+)\s*$/ and do {
 | 
				
			||||||
 | 
								$pkg->{category} = $1;
 | 
				
			||||||
 | 
								defined $category{$1} or $category{$1} = {};
 | 
				
			||||||
 | 
								defined $category{$1}->{$src} or $category{$1}->{$src} = [];
 | 
				
			||||||
 | 
								push @{$category{$1}->{$src}}, $pkg;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Description: \s*(.*)\s*$/ and do {
 | 
				
			||||||
 | 
								my $desc = "\t\t$1\n\n";
 | 
				
			||||||
 | 
								my $line;
 | 
				
			||||||
 | 
								while ($line = <>) {
 | 
				
			||||||
 | 
									last if $line =~ /^@@/;
 | 
				
			||||||
 | 
									$desc .= "\t\t$line";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								$pkg->{description} = $desc;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							/^Config: \s*(.*)\s*$/ and do {
 | 
				
			||||||
 | 
								my $conf = "$1\n";
 | 
				
			||||||
 | 
								my $line;
 | 
				
			||||||
 | 
								while ($line = <>) {
 | 
				
			||||||
 | 
									last if $line =~ /^@@/;
 | 
				
			||||||
 | 
									$conf .= "$line";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								$pkg->{config} = $conf;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return %category;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub gen_target_mk() {
 | 
				
			||||||
 | 
						my @target = parse_target_metadata();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@target = sort {
 | 
				
			||||||
 | 
							$a->{id} cmp $b->{id}
 | 
				
			||||||
 | 
						} @target;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						foreach my $target (@target) {
 | 
				
			||||||
 | 
							my ($profiles_def, $profiles_eval);
 | 
				
			||||||
 | 
							my $conf = uc $target->{kernel}.'_'.$target->{board};
 | 
				
			||||||
 | 
							$conf =~ tr/\.-/__/;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							foreach my $profile (@{$target->{profiles}}) {
 | 
				
			||||||
 | 
								$profiles_def .= "
 | 
				
			||||||
 | 
					  define Profile/$conf\_$profile->{id}
 | 
				
			||||||
 | 
					    ID:=$profile->{id}
 | 
				
			||||||
 | 
					    NAME:=$profile->{name}
 | 
				
			||||||
 | 
					    PACKAGES:=".join(" ", @{$profile->{packages}})."
 | 
				
			||||||
 | 
					  endef";
 | 
				
			||||||
 | 
					  $profiles_eval .= "
 | 
				
			||||||
 | 
					\$(eval \$(call Profile,$conf\_$profile->{id}))"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							print "
 | 
				
			||||||
 | 
					ifeq (\$(CONFIG_LINUX_$conf),y)
 | 
				
			||||||
 | 
					  define Target
 | 
				
			||||||
 | 
					    KERNEL:=$target->{kernel}
 | 
				
			||||||
 | 
					    BOARD:=$target->{board}
 | 
				
			||||||
 | 
					    BOARDNAME:=$target->{name}
 | 
				
			||||||
 | 
					    LINUX_VERSION:=$target->{version}
 | 
				
			||||||
 | 
					    LINUX_RELEASE:=$target->{release}
 | 
				
			||||||
 | 
					    LINUX_KARCH:=$target->{karch}
 | 
				
			||||||
 | 
					    DEFAULT_PACKAGES:=".join(" ", @{$target->{packages}})."
 | 
				
			||||||
 | 
					  endef$profiles_def
 | 
				
			||||||
 | 
					endif$profiles_eval
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						print "\$(eval \$(call Target))\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub target_config_features(@) {
 | 
				
			||||||
 | 
						my $ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while ($_ = shift @_) {
 | 
				
			||||||
 | 
							/broken/ and $ret .= "\tdepends BROKEN\n";
 | 
				
			||||||
 | 
							/pci/ and $ret .= "\tselect PCI_SUPPORT\n";
 | 
				
			||||||
 | 
							/usb/ and $ret .= "\tselect USB_SUPPORT\n";
 | 
				
			||||||
 | 
							/atm/ and $ret .= "\tselect ATM_SUPPORT\n";
 | 
				
			||||||
 | 
							/pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n";
 | 
				
			||||||
 | 
							/squashfs/ and $ret .= "\tselect USES_SQUASHFS\n";
 | 
				
			||||||
 | 
							/jffs2/ and $ret .= "\tselect USES_JFFS2\n";
 | 
				
			||||||
 | 
							/ext2/ and $ret .= "\tselect USES_EXT2\n";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub gen_target_config() {
 | 
				
			||||||
 | 
						my @target = parse_target_metadata();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@target = sort {
 | 
				
			||||||
 | 
							$a->{name} cmp $b->{name}
 | 
				
			||||||
 | 
						} @target;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						print <<EOF;
 | 
				
			||||||
 | 
					choice
 | 
				
			||||||
 | 
						prompt "Target System"
 | 
				
			||||||
 | 
						default LINUX_2_4_BRCM
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						foreach my $target (@target) {
 | 
				
			||||||
 | 
							my $features = target_config_features(@{$target->{features}});
 | 
				
			||||||
 | 
							my $help = $target->{desc};
 | 
				
			||||||
 | 
							my $kernel = $target->{kernel};
 | 
				
			||||||
 | 
							$kernel =~ tr/./_/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							chomp $features;
 | 
				
			||||||
 | 
							$features .= "\n";
 | 
				
			||||||
 | 
							if ($help =~ /\w+/) {
 | 
				
			||||||
 | 
								$help =~ s/^\s*/\t  /mg;
 | 
				
			||||||
 | 
								$help = "\thelp\n$help";
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								undef $help;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
							print <<EOF
 | 
				
			||||||
 | 
					config LINUX_$target->{conf}
 | 
				
			||||||
 | 
						bool "$target->{name}"
 | 
				
			||||||
 | 
						select $target->{arch}
 | 
				
			||||||
 | 
						select LINUX_$kernel
 | 
				
			||||||
 | 
					$features$help
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						print <<EOF;
 | 
				
			||||||
 | 
					if DEVEL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_ARM
 | 
				
			||||||
 | 
						bool "UNSUPPORTED little-endian arm platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select arm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_CRIS
 | 
				
			||||||
 | 
						bool "UNSUPPORTED cris platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select cris
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_M68K
 | 
				
			||||||
 | 
						bool "UNSUPPORTED m68k platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select m68k
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_SH3
 | 
				
			||||||
 | 
						bool "UNSUPPORTED little-endian sh3 platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select sh3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_SH3EB
 | 
				
			||||||
 | 
						bool "UNSUPPORTED big-endian sh3 platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select sh3eb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_SH4
 | 
				
			||||||
 | 
						bool "UNSUPPORTED little-endian sh4 platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select sh4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_SH4EB
 | 
				
			||||||
 | 
						bool "UNSUPPORTED big-endian sh4 platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select sh4eb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config LINUX_2_6_SPARC
 | 
				
			||||||
 | 
						bool "UNSUPPORTED sparc platform"
 | 
				
			||||||
 | 
						depends BROKEN
 | 
				
			||||||
 | 
						select LINUX_2_6
 | 
				
			||||||
 | 
						select sparc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endchoice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					choice
 | 
				
			||||||
 | 
						prompt "Target Profile"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						foreach my $target (@target) {
 | 
				
			||||||
 | 
							my $profiles = $target->{profiles};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							@$profiles > 0 or $profiles = [
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									id => 'Default',
 | 
				
			||||||
 | 
									name => 'Default',
 | 
				
			||||||
 | 
									packages => []
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							];
 | 
				
			||||||
 | 
							foreach my $profile (@$profiles) {
 | 
				
			||||||
 | 
								print <<EOF;
 | 
				
			||||||
 | 
					config LINUX_$target->{conf}_$profile->{id}
 | 
				
			||||||
 | 
						bool "$profile->{name}"
 | 
				
			||||||
 | 
						depends LINUX_$target->{conf}
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
								foreach my $pkg (@{$target->{packages}}, @{$profile->{packages}}) {
 | 
				
			||||||
 | 
									print "\tselect DEFAULT_$pkg\n";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								print "\n";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						print "endchoice\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub find_package_dep($$) {
 | 
				
			||||||
 | 
						my $pkg = shift;
 | 
				
			||||||
 | 
						my $name = shift;
 | 
				
			||||||
 | 
						my $deps = ($pkg->{vdepends} or $pkg->{depends});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0 unless defined $deps;
 | 
				
			||||||
 | 
						foreach my $dep (@{$deps}) {
 | 
				
			||||||
 | 
							return 1 if $dep eq $name;
 | 
				
			||||||
 | 
							return 1 if ($package{$dep} and (find_package_dep($package{$dep},$name) == 1));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub package_depends($$) {
 | 
				
			||||||
 | 
						my $a = shift;
 | 
				
			||||||
 | 
						my $b = shift;
 | 
				
			||||||
 | 
						my $ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0 if ($a->{submenu} ne $b->{submenu});
 | 
				
			||||||
 | 
						if (find_package_dep($a, $b->{name}) == 1) {
 | 
				
			||||||
 | 
							$ret = 1;
 | 
				
			||||||
 | 
						} elsif (find_package_dep($b, $a->{name}) == 1) {
 | 
				
			||||||
 | 
							$ret = -1;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub print_package_config_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;
 | 
				
			||||||
 | 
								print "\tconfig DEFAULT_".$pkg->{name}."\n";
 | 
				
			||||||
 | 
								print "\t\tbool\n\n";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						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 {
 | 
				
			||||||
 | 
								package_depends($a, $b) or
 | 
				
			||||||
 | 
								($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) {
 | 
				
			||||||
 | 
								my $title = $pkg->{name};
 | 
				
			||||||
 | 
								my $c = (72 - length($pkg->{name}) - length($pkg->{title}));
 | 
				
			||||||
 | 
								if ($c > 0) {
 | 
				
			||||||
 | 
									$title .= ("." x $c). " ". $pkg->{title};
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								print "\t";
 | 
				
			||||||
 | 
								$pkg->{menu} and print "menu";
 | 
				
			||||||
 | 
								print "config PACKAGE_".$pkg->{name}."\n";
 | 
				
			||||||
 | 
								print "\t\ttristate \"$title\"\n";
 | 
				
			||||||
 | 
								print "\t\tdefault y if DEFAULT_".$pkg->{name}."\n";
 | 
				
			||||||
 | 
								foreach my $default (split /\s*,\s*/, $pkg->{default}) {
 | 
				
			||||||
 | 
									print "\t\tdefault $default\n";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								foreach my $depend (@{$pkg->{depends}}) {
 | 
				
			||||||
 | 
									my $m = "depends";
 | 
				
			||||||
 | 
									$depend =~ s/^([@\+]+)//;
 | 
				
			||||||
 | 
									my $flags = $1;
 | 
				
			||||||
 | 
									my $vdep;
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									if ($vdep = $package{$depend}->{vdepends}) {
 | 
				
			||||||
 | 
										$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										$flags =~ /@/ or $depend = "PACKAGE_$depend";
 | 
				
			||||||
 | 
										$flags =~ /\+/ and $m = "select";
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									print "\t\t$m $depend\n";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								print "\t\thelp\n";
 | 
				
			||||||
 | 
								print $pkg->{description};
 | 
				
			||||||
 | 
								print "\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								$pkg->{config} and print $pkg->{config}."\n";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if ($menu ne 'undef') {
 | 
				
			||||||
 | 
								print "endmenu\n";
 | 
				
			||||||
 | 
								$menu_dep{$menu} and print "endif\n";
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						print "endmenu\n\n";
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						undef $category{$cat};
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub gen_package_config() {
 | 
				
			||||||
 | 
						parse_package_metadata();
 | 
				
			||||||
 | 
						print_package_config_category 'Base system';
 | 
				
			||||||
 | 
						foreach my $cat (keys %category) {
 | 
				
			||||||
 | 
							print_package_config_category $cat;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub parse_command() {
 | 
				
			||||||
 | 
						my $cmd = shift @ARGV;
 | 
				
			||||||
 | 
						for ($cmd) {
 | 
				
			||||||
 | 
							/^target_mk$/ and return gen_target_mk();
 | 
				
			||||||
 | 
							/^target_config$/ and return gen_target_config();
 | 
				
			||||||
 | 
							/^package_config$/ and return gen_package_config();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						print <<EOF
 | 
				
			||||||
 | 
					Available Commands:
 | 
				
			||||||
 | 
						$0 target_mk [file] 		Target metadata in makefile format
 | 
				
			||||||
 | 
						$0 target_config [file] 	Target metadata in Kconfig format
 | 
				
			||||||
 | 
						$0 package_config [file] 	Package metadata in Kconfig format
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					parse_command();
 | 
				
			||||||
		Reference in New Issue
	
	Block a user