aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/metadata.pm
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-03-15 11:07:40 +0000
committerFelix Fietkau <nbd@openwrt.org>2015-03-15 11:07:40 +0000
commitacb43b3df75642955fceb58feea24a5046ce318c (patch)
tree4b7aa74995912b2eb55a99619eef4c1b286bb5e6 /scripts/metadata.pm
parentf8b95e05f1dd0ac81abe6fb307f71451b70bc47b (diff)
downloadupstream-acb43b3df75642955fceb58feea24a5046ce318c.tar.gz
upstream-acb43b3df75642955fceb58feea24a5046ce318c.tar.bz2
upstream-acb43b3df75642955fceb58feea24a5046ce318c.zip
scripts/metadata.pl: move parse_target_metadata() to metadata.pm
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 44776
Diffstat (limited to 'scripts/metadata.pm')
-rw-r--r--scripts/metadata.pm86
1 files changed, 85 insertions, 1 deletions
diff --git a/scripts/metadata.pm b/scripts/metadata.pm
index 4bf70bbbde..aa82fcd95d 100644
--- a/scripts/metadata.pm
+++ b/scripts/metadata.pm
@@ -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 = ();