use base 'Exporter';
use strict;
use warnings;
-our @EXPORT = qw(%package %srcpackage %category %subdir %preconfig %features %overrides clear_packages parse_package_metadata parse_target_metadata get_multiline);
+our @EXPORT = qw(%package %srcpackage %category %subdir %preconfig %features %overrides clear_packages parse_package_metadata parse_target_metadata get_multiline @ignore);
our %package;
our %preconfig;
our %subdir;
our %features;
our %overrides;
+our @ignore;
sub get_multiline {
my $fh = shift;
my $file = shift;
my ($target, @target, $profile);
my %target;
+ my $makefile;
open FILE, "<$file" or do {
warn "Can't open file '$file': $!\n";
};
while (<FILE>) {
chomp;
+ /^Source-Makefile: \s*((.+\/)([^\/]+)\/Makefile)\s*$/ and $makefile = $1;
/^Target:\s*(.+)\s*$/ and do {
my $name = $1;
$target = {
id => $name,
board => $name,
+ makefile => $makefile,
boardconf => confstr($name),
conf => confstr($name),
profiles => [],
}
};
/^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) ];
$profile = {
id => $1,
name => $1,
+ priority => 999,
packages => []
};
push @{$target->{profiles}}, $profile;
};
/^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1;
+ /^Target-Profile-Priority:\s*(\d+)\s*$/ and do {
+ $profile->{priority} = $1;
+ $target->{sort} = 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) {
packages => []
}
];
+
+ $target->{sort} and @{$target->{profiles}} = sort {
+ $a->{priority} <=> $b->{priority} or
+ $a->{name} cmp $b->{name};
+ } @{$target->{profiles}};
}
return @target;
}
my $subdir;
my $src;
my $override;
+ my %ignore = map { $_ => 1 } @ignore;
open FILE, "<$file" or do {
warn "Cannot open '$file': $!\n";
$overrides{$src} = 1;
};
next unless $src;
+ next if $ignore{$src};
/^Package:\s*(.+?)\s*$/ and do {
undef $feature;
$pkg = {};
/^Build-Depends: \s*(.+)\s*$/ and $pkg->{builddepends} = [ split /\s+/, $1 ];
/^Build-Depends\/(\w+): \s*(.+)\s*$/ and $pkg->{"builddepends/$1"} = [ split /\s+/, $2 ];
/^Build-Types:\s*(.+)\s*$/ and $pkg->{buildtypes} = [ split /\s+/, $1 ];
- /^Feed:\s*(.+?)\s*$/ and $pkg->{feed} = $1;
+ /^Repository:\s*(.+?)\s*$/ and $pkg->{repository} = $1;
/^Category: \s*(.+)\s*$/ and do {
$pkg->{category} = $1;
defined $category{$1} or $category{$1} = {};