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 <mschif...@universe-factory.net>
---
 scripts/feeds               |  4 ++--
 scripts/metadata.pm         | 51 ++++++++++++++++++++++-----------------------
 scripts/package-metadata.pl | 14 ++++++-------
 3 files changed, 34 insertions(+), 35 deletions(-)

diff --git a/scripts/feeds b/scripts/feeds
index 31481edcb1..b531fbac62 100755
--- a/scripts/feeds
+++ b/scripts/feeds
@@ -494,7 +494,7 @@ sub install_package {
                warn "WARNING: Package '$name' is not available in feed 
$feed->[1].\n";
                return 0;
        };
-       my $src = $pkg->{src};
+       my $src = $pkg->{src}->{name};
        my $type = $feed->[0];
        $src or $src = $name;
 
@@ -663,7 +663,7 @@ sub uninstall {
                                warn "WARNING: $name not installed\n";
                                next;
                        };
-                       $pkg->{src} and $name = $pkg->{src};
+                       $pkg->{src} and $name = $pkg->{src}->{name};
                        warn "Uninstalling package '$name'\n";
                        system("rm -f ./package/feeds/*/$name");
                        $uninstall = 1;
diff --git a/scripts/metadata.pm b/scripts/metadata.pm
index 404309dc4e..0577390eda 100644
--- a/scripts/metadata.pm
+++ b/scripts/metadata.pm
@@ -193,9 +193,7 @@ sub parse_package_metadata($) {
        my $file = shift;
        my $pkg;
        my $feature;
-       my $makefile;
        my $preconfig;
-       my $subdir;
        my $src;
        my $override;
        my %ignore = map { $_ => 1 } @ignore;
@@ -206,41 +204,42 @@ sub parse_package_metadata($) {
        };
        while (<FILE>) {
                chomp;
-               /^Source-Makefile: \s*((.+\/)([^\/]+)\/Makefile)\s*$/ and do {
-                       $makefile = $1;
-                       $subdir = $2;
-                       $src = $3;
-                       $subdir =~ s/^package\///;
-                       $subdir{$src} = $subdir;
-                       $srcpackage{$src} = {
-                               makefile => $makefile,
+               /^Source-Makefile: 
\s*(package\/((?:.+\/)?)([^\/]+)\/Makefile)\s*$/ and do {
+                       $subdir{$3} = $2;
+
+                       $src = {
+                               makefile => $1,
+                               subdir => $2,
+                               name => $3,
+                               ignore => $ignore{$3},
                                packages => [],
                                buildtypes => [],
                                builddepends => [],
                        };
+                       $srcpackage{$3} = $src;
                        $override = "";
                        undef $pkg;
                };
                /^Override: \s*(.+?)\s*$/ and do {
                        $override = $1;
-                       $overrides{$src} = 1;
+                       $overrides{$src->{name}} = 1;
                };
                next unless $src;
                /^Package:\s*(.+?)\s*$/ and do {
                        undef $feature;
                        $pkg = {};
-                       $pkg->{ignore} = $ignore{$src};
+                       $pkg->{ignore} = $src->{ignore};
                        $pkg->{src} = $src;
-                       $pkg->{makefile} = $makefile;
+                       $pkg->{makefile} = $src->{makefile};
                        $pkg->{name} = $1;
                        $pkg->{title} = "";
                        $pkg->{depends} = [];
                        $pkg->{mdepends} = [];
-                       $pkg->{subdir} = $subdir;
+                       $pkg->{subdir} = $src->{subdir};
                        $pkg->{tristate} = 1;
                        $pkg->{override} = $override;
                        $package{$1} = $pkg;
-                       push @{$srcpackage{$src}->{packages}}, $pkg;
+                       push @{$src->{packages}}, $pkg;
                };
                /^Feature:\s*(.+?)\s*$/ and do {
                        undef $pkg;
@@ -251,7 +250,7 @@ sub parse_package_metadata($) {
                $feature and do {
                        /^Target-Name:\s*(.+?)\s*$/ and do {
                                $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;
                        /^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");
                        next;
                };
-               /^Build-Depends: \s*(.+)\s*$/ and 
$srcpackage{$src}->{builddepends} = [ split /\s+/, $1 ];
-               /^Build-Depends\/(\w+): \s*(.+)\s*$/ and 
$srcpackage{$src}->{"builddepends/$1"} = [ split /\s+/, $2 ];
-               /^Build-Types:\s*(.+)\s*$/ and $srcpackage{$src}->{buildtypes} 
= [ split /\s+/, $1 ];
+               /^Build-Depends: \s*(.+)\s*$/ and $src->{builddepends} = [ 
split /\s+/, $1 ];
+               /^Build-Depends\/(\w+): \s*(.+)\s*$/ and 
$src->{"builddepends/$1"} = [ split /\s+/, $2 ];
+               /^Build-Types:\s*(.+)\s*$/ and $src->{buildtypes} = [ split 
/\s+/, $1 ];
                next unless $pkg;
                /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
                /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
@@ -279,8 +278,8 @@ sub parse_package_metadata($) {
                                        name => $vpkg,
                                        vdepends => [],
                                        src => $src,
-                                       subdir => $subdir,
-                                       makefile => $makefile
+                                       subdir => $src->{subdir},
+                                       makefile => $src->{makefile},
                                };
                                push @{$package{$vpkg}->{vdepends}}, 
$pkg->{name};
                        }
@@ -296,8 +295,8 @@ sub parse_package_metadata($) {
                /^Category: \s*(.+)\s*$/ and do {
                        $pkg->{category} = $1;
                        defined $category{$1} or $category{$1} = {};
-                       defined $category{$1}->{$src} or $category{$1}->{$src} 
= [];
-                       push @{$category{$1}->{$src}}, $pkg;
+                       defined $category{$1}->{$src->{name}} or 
$category{$1}->{$src->{name}} = [];
+                       push @{$category{$1}->{$src->{name}}}, $pkg;
                };
                /^Description: \s*(.*)\s*$/ and $pkg->{description} = "\t\t 
$1\n". get_multiline(*FILE, "\t\t ");
                /^Type: \s*(.+)\s*$/ and do {
@@ -318,7 +317,7 @@ sub parse_package_metadata($) {
                                $preconfig = {
                                        id => $1
                                };
-                               $preconfig{$pkgname}->{$1} = $preconfig unless 
$ignore{$src};
+                               $preconfig{$pkgname}->{$1} = $preconfig unless 
$src->{ignore};
                        }
                };
                /^Preconfig-Type:\s*(.*?)\s*$/ and $preconfig->{type} = $1;
@@ -329,9 +328,9 @@ sub parse_package_metadata($) {
 
                        for my $ugspec (@ugspecs) {
                                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) {
-                                       
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;
                                }
                        }
                };
diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl
index 077956e6a1..2369c37e2b 100755
--- a/scripts/package-metadata.pl
+++ b/scripts/package-metadata.pl
@@ -484,12 +484,12 @@ sub gen_package_mk() {
                                my $idx = "";
                                my $pkg_dep = $package{$dep};
                                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",
-                                                       $src->{makefile}, 
$type, $pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype;
+                                                       $src->{makefile}, 
$type, $pkg_dep->{src}->{name}, $deptype, $pkg_dep->{makefile}, $deptype;
                                                next;
                                        }
-                                       $idx = 
$pkg_dep->{subdir}.$pkg_dep->{src};
+                                       $idx = 
$pkg_dep->{subdir}.$pkg_dep->{src}->{name};
                                } elsif (defined($srcpackage{$dep})) {
                                        $idx = $subdir{$dep}.$dep;
                                } else {
@@ -538,12 +538,12 @@ sub gen_package_mk() {
                        foreach my $dep (@deps) {
                                $pkg_dep = $package{$deps};
                                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",
-                                                       $src->{makefile}, 
$pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype;
+                                                       $src->{makefile}, 
$pkg_dep->{src}->{name}, $deptype, $pkg_dep->{makefile}, $deptype;
                                                next;
                                        }
-                                       $idx = 
$pkg_dep->{subdir}.$pkg_dep->{src};
+                                       $idx = 
$pkg_dep->{subdir}.$pkg_dep->{src}->{name};
                                } elsif (defined($srcpackage{$dep})) {
                                        $idx = $subdir{$dep}.$dep;
                                }
@@ -552,7 +552,7 @@ sub gen_package_mk() {
                                        $idx .= $suffix;
 
                                        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{$srcname."->($dep)".$idx} 
and $pkg_dep->{vdepends};
                                        my $depstr;
-- 
2.15.1


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to