metadata: change pkg->{src} field to hold a reference

We often want to access fields of a source packages through pkg->{src}.
Allow accessing them directly instead of resolving the source hash through
srcpackages.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
v19.07.3_mercusys_ac12_duma
Matthias Schiffer 6 years ago
parent 47f292ff78
commit 504cb913eb
No known key found for this signature in database
GPG Key ID: 16EF3F64CB201D9C

@ -494,7 +494,7 @@ sub install_package {
warn "WARNING: Package '$name' is not available in feed $feed->[1].\n"; warn "WARNING: Package '$name' is not available in feed $feed->[1].\n";
return 0; return 0;
}; };
my $src = $pkg->{src}; my $src = $pkg->{src}{name};
my $type = $feed->[0]; my $type = $feed->[0];
$src or $src = $name; $src or $src = $name;
@ -663,7 +663,7 @@ sub uninstall {
warn "WARNING: $name not installed\n"; warn "WARNING: $name not installed\n";
next; next;
}; };
$pkg->{src} and $name = $pkg->{src}; $pkg->{src} and $name = $pkg->{src}{name};
warn "Uninstalling package '$name'\n"; warn "Uninstalling package '$name'\n";
system("rm -f ./package/feeds/*/$name"); system("rm -f ./package/feeds/*/$name");
$uninstall = 1; $uninstall = 1;

@ -193,9 +193,7 @@ sub parse_package_metadata($) {
my $file = shift; my $file = shift;
my $pkg; my $pkg;
my $feature; my $feature;
my $makefile;
my $preconfig; my $preconfig;
my $subdir;
my $src; my $src;
my $override; my $override;
my %ignore = map { $_ => 1 } @ignore; my %ignore = map { $_ => 1 } @ignore;
@ -206,41 +204,42 @@ sub parse_package_metadata($) {
}; };
while (<FILE>) { while (<FILE>) {
chomp; chomp;
/^Source-Makefile: \s*((.+\/)([^\/]+)\/Makefile)\s*$/ and do { /^Source-Makefile: \s*((?:package\/)?((?:.+\/)?)([^\/]+)\/Makefile)\s*$/ and do {
$makefile = $1; $subdir{$3} = $2;
$subdir = $2;
$src = $3; $src = {
$subdir =~ s/^package\///; makefile => $1,
$subdir{$src} = $subdir; subdir => $2,
$srcpackage{$src} = { name => $3,
makefile => $makefile, ignore => $ignore{$3},
packages => [], packages => [],
buildtypes => [], buildtypes => [],
builddepends => [], builddepends => [],
}; };
$srcpackage{$3} = $src;
$override = ""; $override = "";
undef $pkg; undef $pkg;
}; };
/^Override: \s*(.+?)\s*$/ and do { /^Override: \s*(.+?)\s*$/ and do {
$override = $1; $override = $1;
$overrides{$src} = 1; $overrides{$src->{name}} = 1;
}; };
next unless $src; next unless $src;
/^Package:\s*(.+?)\s*$/ and do { /^Package:\s*(.+?)\s*$/ and do {
undef $feature; undef $feature;
$pkg = {}; $pkg = {};
$pkg->{ignore} = $ignore{$src}; $pkg->{ignore} = $src->{ignore};
$pkg->{src} = $src; $pkg->{src} = $src;
$pkg->{makefile} = $makefile; $pkg->{makefile} = $src->{makefile};
$pkg->{name} = $1; $pkg->{name} = $1;
$pkg->{title} = ""; $pkg->{title} = "";
$pkg->{depends} = []; $pkg->{depends} = [];
$pkg->{mdepends} = []; $pkg->{mdepends} = [];
$pkg->{subdir} = $subdir; $pkg->{subdir} = $src->{subdir};
$pkg->{tristate} = 1; $pkg->{tristate} = 1;
$pkg->{override} = $override; $pkg->{override} = $override;
$package{$1} = $pkg; $package{$1} = $pkg;
push @{$srcpackage{$src}{packages}}, $pkg; push @{$src->{packages}}, $pkg;
}; };
/^Feature:\s*(.+?)\s*$/ and do { /^Feature:\s*(.+?)\s*$/ and do {
undef $pkg; undef $pkg;
@ -251,7 +250,7 @@ sub parse_package_metadata($) {
$feature and do { $feature and do {
/^Target-Name:\s*(.+?)\s*$/ and do { /^Target-Name:\s*(.+?)\s*$/ and do {
$features{$1} or $features{$1} = []; $features{$1} or $features{$1} = [];
push @{$features{$1}}, $feature unless $ignore{$src}; push @{$features{$1}}, $feature unless $src->{ignore};
}; };
/^Target-Title:\s*(.+?)\s*$/ and $feature->{target_title} = $1; /^Target-Title:\s*(.+?)\s*$/ and $feature->{target_title} = $1;
/^Feature-Priority:\s*(\d+)\s*$/ and $feature->{priority} = $1; /^Feature-Priority:\s*(\d+)\s*$/ and $feature->{priority} = $1;
@ -259,9 +258,9 @@ sub parse_package_metadata($) {
/^Feature-Description:/ and $feature->{description} = get_multiline(\*FILE, "\t\t\t"); /^Feature-Description:/ and $feature->{description} = get_multiline(\*FILE, "\t\t\t");
next; next;
}; };
/^Build-Depends: \s*(.+)\s*$/ and $srcpackage{$src}{builddepends} = [ split /\s+/, $1 ]; /^Build-Depends: \s*(.+)\s*$/ and $src->{builddepends} = [ split /\s+/, $1 ];
/^Build-Depends\/(\w+): \s*(.+)\s*$/ and $srcpackage{$src}{"builddepends/$1"} = [ split /\s+/, $2 ]; /^Build-Depends\/(\w+): \s*(.+)\s*$/ and $src->{"builddepends/$1"} = [ split /\s+/, $2 ];
/^Build-Types:\s*(.+)\s*$/ and $srcpackage{$src}{buildtypes} = [ split /\s+/, $1 ]; /^Build-Types:\s*(.+)\s*$/ and $src->{buildtypes} = [ split /\s+/, $1 ];
next unless $pkg; next unless $pkg;
/^Version: \s*(.+)\s*$/ and $pkg->{version} = $1; /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
/^Title: \s*(.+)\s*$/ and $pkg->{title} = $1; /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
@ -279,8 +278,8 @@ sub parse_package_metadata($) {
name => $vpkg, name => $vpkg,
vdepends => [], vdepends => [],
src => $src, src => $src,
subdir => $subdir, subdir => $src->{subdir},
makefile => $makefile makefile => $src->{makefile},
}; };
push @{$package{$vpkg}->{vdepends}}, $pkg->{name}; push @{$package{$vpkg}->{vdepends}}, $pkg->{name};
} }
@ -296,8 +295,8 @@ sub parse_package_metadata($) {
/^Category: \s*(.+)\s*$/ and do { /^Category: \s*(.+)\s*$/ and do {
$pkg->{category} = $1; $pkg->{category} = $1;
defined $category{$1} or $category{$1} = {}; defined $category{$1} or $category{$1} = {};
defined $category{$1}->{$src} or $category{$1}->{$src} = []; defined $category{$1}{$src->{name}} or $category{$1}{$src->{name}} = [];
push @{$category{$1}->{$src}}, $pkg; push @{$category{$1}{$src->{name}}}, $pkg;
}; };
/^Description: \s*(.*)\s*$/ and $pkg->{description} = "\t\t $1\n". get_multiline(*FILE, "\t\t "); /^Description: \s*(.*)\s*$/ and $pkg->{description} = "\t\t $1\n". get_multiline(*FILE, "\t\t ");
/^Type: \s*(.+)\s*$/ and do { /^Type: \s*(.+)\s*$/ and do {
@ -318,7 +317,7 @@ sub parse_package_metadata($) {
$preconfig = { $preconfig = {
id => $1 id => $1
}; };
$preconfig{$pkgname}->{$1} = $preconfig unless $ignore{$src}; $preconfig{$pkgname}{$1} = $preconfig unless $src->{ignore};
} }
}; };
/^Preconfig-Type:\s*(.*?)\s*$/ and $preconfig->{type} = $1; /^Preconfig-Type:\s*(.*?)\s*$/ and $preconfig->{type} = $1;
@ -329,9 +328,9 @@ sub parse_package_metadata($) {
for my $ugspec (@ugspecs) { for my $ugspec (@ugspecs) {
my @ugspec = split /:/, $ugspec, 2; my @ugspec = split /:/, $ugspec, 2;
parse_package_metadata_usergroup($makefile, "user", \%usernames, \%userids, $ugspec[0]) or return 0; parse_package_metadata_usergroup($src->{makefile}, "user", \%usernames, \%userids, $ugspec[0]) or return 0;
if (@ugspec > 1) { if (@ugspec > 1) {
parse_package_metadata_usergroup($makefile, "group", \%groupnames, \%groupids, $ugspec[1]) or return 0; parse_package_metadata_usergroup($src->{makefile}, "group", \%groupnames, \%groupids, $ugspec[1]) or return 0;
} }
} }
}; };

@ -484,12 +484,12 @@ sub gen_package_mk() {
my $idx = ""; my $idx = "";
my $pkg_dep = $package{$dep}; my $pkg_dep = $package{$dep};
if (defined($pkg_dep) && defined($pkg_dep->{src})) { if (defined($pkg_dep) && defined($pkg_dep->{src})) {
unless (!$deptype || grep { $_ eq $deptype } @{$srcpackage{$pkg_dep->{src}}{buildtypes}}) { unless (!$deptype || grep { $_ eq $deptype } @{$pkg_dep->{src}{buildtypes}}) {
warn sprintf "WARNING: Makefile '%s' has a %s build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n", warn sprintf "WARNING: Makefile '%s' has a %s build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n",
$src->{makefile}, $type, $pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype; $src->{makefile}, $type, $pkg_dep->{src}{name}, $deptype, $pkg_dep->{makefile}, $deptype;
next; next;
} }
$idx = $pkg_dep->{subdir}.$pkg_dep->{src}; $idx = $pkg_dep->{subdir}.$pkg_dep->{src}{name};
} elsif (defined($srcpackage{$dep})) { } elsif (defined($srcpackage{$dep})) {
$idx = $subdir{$dep}.$dep; $idx = $subdir{$dep}.$dep;
} else { } else {
@ -538,12 +538,12 @@ sub gen_package_mk() {
foreach my $dep (@deps) { foreach my $dep (@deps) {
$pkg_dep = $package{$deps}; $pkg_dep = $package{$deps};
if (defined $pkg_dep->{src}) { if (defined $pkg_dep->{src}) {
unless (!$deptype || grep { $_ eq $deptype } @{$srcpackage{$pkg_dep->{src}}{buildtypes}}) { unless (!$deptype || grep { $_ eq $deptype } @{$pkg_dep->{src}{buildtypes}}) {
warn sprintf "WARNING: Makefile '%s' has a build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n", warn sprintf "WARNING: Makefile '%s' has a build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n",
$src->{makefile}, $pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype; $src->{makefile}, $pkg_dep->{src}{name}, $deptype, $pkg_dep->{makefile}, $deptype;
next; next;
} }
$idx = $pkg_dep->{subdir}.$pkg_dep->{src}; $idx = $pkg_dep->{subdir}.$pkg_dep->{src}{name};
} elsif (defined($srcpackage{$dep})) { } elsif (defined($srcpackage{$dep})) {
$idx = $subdir{$dep}.$dep; $idx = $subdir{$dep}.$dep;
} }
@ -552,7 +552,7 @@ sub gen_package_mk() {
$idx .= $suffix; $idx .= $suffix;
my $depline; my $depline;
next if $srcname eq $pkg_dep->{src}.$suffix; next if $srcname eq $pkg_dep->{src}{name}.$suffix;
next if $dep{$condition.":".$srcname."->".$idx}; next if $dep{$condition.":".$srcname."->".$idx};
next if $dep{$srcname."->($dep)".$idx} and $pkg_dep->{vdepends}; next if $dep{$srcname."->($dep)".$idx} and $pkg_dep->{vdepends};
my $depstr; my $depstr;

Loading…
Cancel
Save