scripts/metadata.pl: move parse_target_metadata() to metadata.pm
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 44776
This commit is contained in:
		| @@ -6,12 +6,6 @@ use metadata; | ||||
|  | ||||
| my %board; | ||||
|  | ||||
| sub confstr($) { | ||||
| 	my $conf = shift; | ||||
| 	$conf =~ tr#/\.\-/#___#; | ||||
| 	return $conf; | ||||
| } | ||||
|  | ||||
| sub version_to_num($) { | ||||
| 	my $str = shift; | ||||
| 	my $num = 0; | ||||
| @@ -53,84 +47,6 @@ sub version_filter_list(@) { | ||||
| 	return @items; | ||||
| } | ||||
|  | ||||
| sub parse_target_metadata() { | ||||
| 	my $file = shift @ARGV; | ||||
| 	my ($target, @target, $profile); | ||||
| 	my %target; | ||||
|  | ||||
| 	open FILE, "<$file" or do { | ||||
| 		warn "Can't open file '$file': $!\n"; | ||||
| 		return; | ||||
| 	}; | ||||
| 	while (<FILE>) { | ||||
| 		chomp; | ||||
| 		/^Target:\s*(.+)\s*$/ and do { | ||||
| 			my $name = $1; | ||||
| 			$target = { | ||||
| 				id => $name, | ||||
| 				board => $name, | ||||
| 				boardconf => confstr($name), | ||||
| 				conf => confstr($name), | ||||
| 				profiles => [], | ||||
| 				features => [], | ||||
| 				depends => [], | ||||
| 				subtargets => [] | ||||
| 			}; | ||||
| 			push @target, $target; | ||||
| 			$target{$name} = $target; | ||||
| 			if ($name =~ /([^\/]+)\/([^\/]+)/) { | ||||
| 				push @{$target{$1}->{subtargets}}, $2; | ||||
| 				$target->{board} = $1; | ||||
| 				$target->{boardconf} = confstr($1); | ||||
| 				$target->{subtarget} = 1; | ||||
| 				$target->{parent} = $target{$1}; | ||||
| 			} | ||||
| 		}; | ||||
| 		/^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-Arch-Packages:\s*(.+)\s*$/ and $target->{arch_packages} = $1; | ||||
| 		/^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ]; | ||||
| 		/^Target-Depends:\s*(.+)\s*$/ and $target->{depends} = [ split(/\s+/, $1) ]; | ||||
| 		/^Target-Description:/ and $target->{desc} = get_multiline(*FILE); | ||||
| 		/^Target-Optimization:\s*(.+)\s*$/ and $target->{cflags} = $1; | ||||
| 		/^CPU-Type:\s*(.+)\s*$/ and $target->{cputype} = $1; | ||||
| 		/^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-Subtarget:\s*(.+)\s*$/ and $target->{def_subtarget} = $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-Profile-Description:\s*(.*)\s*/ and $profile->{desc} = get_multiline(*FILE); | ||||
| 		/^Target-Profile-Config:/ and $profile->{config} = get_multiline(*FILE, "\t"); | ||||
| 		/^Target-Profile-Kconfig:/ and $profile->{kconfig} = 1; | ||||
| 	} | ||||
| 	close FILE; | ||||
| 	foreach my $target (@target) { | ||||
| 		if (@{$target->{subtargets}} > 0) { | ||||
| 			$target->{profiles} = []; | ||||
| 			next; | ||||
| 		} | ||||
| 		@{$target->{profiles}} > 0 or $target->{profiles} = [ | ||||
| 			{ | ||||
| 				id => 'Default', | ||||
| 				name => 'Default', | ||||
| 				packages => [] | ||||
| 			} | ||||
| 		]; | ||||
| 	} | ||||
| 	return @target; | ||||
| } | ||||
|  | ||||
| sub gen_kconfig_overrides() { | ||||
| 	my %config; | ||||
| 	my %kconfig; | ||||
| @@ -313,7 +229,8 @@ EOF | ||||
| } | ||||
|  | ||||
| sub gen_target_config() { | ||||
| 	my @target = parse_target_metadata(); | ||||
| 	my $file = shift @ARGV; | ||||
| 	my @target = parse_target_metadata($file); | ||||
| 	my %defaults; | ||||
|  | ||||
| 	my @target_sort = sort { | ||||
|   | ||||
| @@ -2,7 +2,7 @@ package metadata; | ||||
| use base 'Exporter'; | ||||
| use strict; | ||||
| use warnings; | ||||
| our @EXPORT = qw(%package %srcpackage %category %subdir %preconfig %features %overrides clear_packages parse_package_metadata get_multiline); | ||||
| our @EXPORT = qw(%package %srcpackage %category %subdir %preconfig %features %overrides clear_packages parse_package_metadata parse_target_metadata get_multiline); | ||||
|  | ||||
| our %package; | ||||
| our %preconfig; | ||||
| @@ -24,6 +24,90 @@ sub get_multiline { | ||||
| 	return $str ? $str : ""; | ||||
| } | ||||
|  | ||||
| sub confstr($) { | ||||
| 	my $conf = shift; | ||||
| 	$conf =~ tr#/\.\-/#___#; | ||||
| 	return $conf; | ||||
| } | ||||
|  | ||||
| sub parse_target_metadata($) { | ||||
| 	my $file = shift; | ||||
| 	my ($target, @target, $profile); | ||||
| 	my %target; | ||||
|  | ||||
| 	open FILE, "<$file" or do { | ||||
| 		warn "Can't open file '$file': $!\n"; | ||||
| 		return; | ||||
| 	}; | ||||
| 	while (<FILE>) { | ||||
| 		chomp; | ||||
| 		/^Target:\s*(.+)\s*$/ and do { | ||||
| 			my $name = $1; | ||||
| 			$target = { | ||||
| 				id => $name, | ||||
| 				board => $name, | ||||
| 				boardconf => confstr($name), | ||||
| 				conf => confstr($name), | ||||
| 				profiles => [], | ||||
| 				features => [], | ||||
| 				depends => [], | ||||
| 				subtargets => [] | ||||
| 			}; | ||||
| 			push @target, $target; | ||||
| 			$target{$name} = $target; | ||||
| 			if ($name =~ /([^\/]+)\/([^\/]+)/) { | ||||
| 				push @{$target{$1}->{subtargets}}, $2; | ||||
| 				$target->{board} = $1; | ||||
| 				$target->{boardconf} = confstr($1); | ||||
| 				$target->{subtarget} = 1; | ||||
| 				$target->{parent} = $target{$1}; | ||||
| 			} | ||||
| 		}; | ||||
| 		/^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-Arch-Packages:\s*(.+)\s*$/ and $target->{arch_packages} = $1; | ||||
| 		/^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ]; | ||||
| 		/^Target-Depends:\s*(.+)\s*$/ and $target->{depends} = [ split(/\s+/, $1) ]; | ||||
| 		/^Target-Description:/ and $target->{desc} = get_multiline(*FILE); | ||||
| 		/^Target-Optimization:\s*(.+)\s*$/ and $target->{cflags} = $1; | ||||
| 		/^CPU-Type:\s*(.+)\s*$/ and $target->{cputype} = $1; | ||||
| 		/^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-Subtarget:\s*(.+)\s*$/ and $target->{def_subtarget} = $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-Profile-Description:\s*(.*)\s*/ and $profile->{desc} = get_multiline(*FILE); | ||||
| 		/^Target-Profile-Config:/ and $profile->{config} = get_multiline(*FILE, "\t"); | ||||
| 		/^Target-Profile-Kconfig:/ and $profile->{kconfig} = 1; | ||||
| 	} | ||||
| 	close FILE; | ||||
| 	foreach my $target (@target) { | ||||
| 		if (@{$target->{subtargets}} > 0) { | ||||
| 			$target->{profiles} = []; | ||||
| 			next; | ||||
| 		} | ||||
| 		@{$target->{profiles}} > 0 or $target->{profiles} = [ | ||||
| 			{ | ||||
| 				id => 'Default', | ||||
| 				name => 'Default', | ||||
| 				packages => [] | ||||
| 			} | ||||
| 		]; | ||||
| 	} | ||||
| 	return @target; | ||||
| } | ||||
|  | ||||
| sub clear_packages() { | ||||
| 	%subdir = (); | ||||
| 	%preconfig = (); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau