201 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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";
 | 
