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:
Felix Fietkau 2015-03-15 11:07:40 +00:00
parent f8b95e05f1
commit acb43b3df7
2 changed files with 87 additions and 86 deletions

View file

@ -6,12 +6,6 @@ use metadata;
my %board; my %board;
sub confstr($) {
my $conf = shift;
$conf =~ tr#/\.\-/#___#;
return $conf;
}
sub version_to_num($) { sub version_to_num($) {
my $str = shift; my $str = shift;
my $num = 0; my $num = 0;
@ -53,84 +47,6 @@ sub version_filter_list(@) {
return @items; 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() { sub gen_kconfig_overrides() {
my %config; my %config;
my %kconfig; my %kconfig;
@ -313,7 +229,8 @@ EOF
} }
sub gen_target_config() { sub gen_target_config() {
my @target = parse_target_metadata(); my $file = shift @ARGV;
my @target = parse_target_metadata($file);
my %defaults; my %defaults;
my @target_sort = sort { my @target_sort = sort {

View file

@ -2,7 +2,7 @@ package metadata;
use base 'Exporter'; use base 'Exporter';
use strict; use strict;
use warnings; 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 %package;
our %preconfig; our %preconfig;
@ -24,6 +24,90 @@ sub get_multiline {
return $str ? $str : ""; 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() { sub clear_packages() {
%subdir = (); %subdir = ();
%preconfig = (); %preconfig = ();