aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/package-metadata.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/package-metadata.pl')
-rwxr-xr-xscripts/package-metadata.pl112
1 files changed, 41 insertions, 71 deletions
diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl
index b092db3565..c8ae27a730 100755
--- a/scripts/package-metadata.pl
+++ b/scripts/package-metadata.pl
@@ -399,18 +399,56 @@ sub get_conditional_dep($$) {
}
sub gen_package_mk() {
- my %conf;
- my %dep;
my $line;
parse_package_metadata($ARGV[0]) or exit 1;
foreach my $srcname (sort {uc($a) cmp uc($b)} keys %srcpackage) {
my $src = $srcpackage{$srcname};
my $variant_default;
- my @srcdeps;
my %deplines = ('' => {});
foreach my $pkg (@{$src->{packages}}) {
+ foreach my $dep (@{$pkg->{depends}}) {
+ next if ($dep =~ /@/);
+
+ my $condition;
+
+ $dep =~ s/\+//g;
+ if ($dep =~ /^(.+):(.+)/) {
+ $condition = $1;
+ $dep = $2;
+ }
+
+ my $pkg_dep = $package{$dep};
+ unless (defined $pkg_dep) {
+ warn sprintf "WARNING: Makefile '%s' has a dependency on '%s', which does not exist\n",
+ $src->{makefile}, $dep;
+ next;
+ }
+
+ unless ($pkg_dep->{vdepends}) {
+ next if $srcname eq $pkg_dep->{src}{name};
+
+ my $depstr = "\$(curdir)/$pkg_dep->{src}{path}/compile";
+ my $depline = get_conditional_dep($condition, $depstr);
+ if ($depline) {
+ $deplines{''}{$depline}++;
+ }
+ next;
+ }
+
+ foreach my $vdep (@{$pkg_dep->{vdepends}}) {
+ my $pkg_vdep = $package{$vdep};
+ next if $srcname eq $pkg_vdep->{src}{name};
+
+ my $depstr = "\$(if \$(CONFIG_PACKAGE_$vdep),\$(curdir)/$pkg_vdep->{src}{path}/compile)";
+ my $depline = get_conditional_dep($condition, $depstr);
+ if ($depline) {
+ $deplines{''}{$depline}++;
+ }
+ }
+ }
+
next if defined $pkg->{vdepends};
my $config = '';
@@ -442,12 +480,6 @@ sub gen_package_mk() {
print "buildtypes-$src->{path} = ".join(' ', @{$src->{buildtypes}})."\n";
}
- foreach my $dep (map { @{$_->{depends}} } @{$src->{packages}}) {
- $dep =~ /@/ or do {
- $dep =~ s/\+//g;
- push @srcdeps, $dep;
- };
- }
foreach my $type ('', @{$src->{buildtypes}}) {
my $suffix = '';
@@ -489,68 +521,6 @@ sub gen_package_mk() {
}
}
- foreach my $deps (@srcdeps) {
- my $idx;
- my $condition;
- my $prefix = "";
- my $suffix = "";
- my $deptype = "";
-
- if ($deps =~ /^(.+):(.+)/) {
- $condition = $1;
- $deps = $2;
- }
- if ($deps =~ /^(.+)\/(.+)/) {
- $deps = $1;
- $deptype = $2;
- $suffix = "/$2";
- }
-
- my $pkg_dep = $package{$deps};
- my @deps;
-
- if ($pkg_dep->{vdepends}) {
- @deps = @{$pkg_dep->{vdepends}};
- } else {
- @deps = ($deps);
- }
-
- foreach my $dep (@deps) {
- $pkg_dep = $package{$deps};
- if (defined $pkg_dep->{src}) {
- 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}{name}, $deptype, $pkg_dep->{src}{makefile}, $deptype;
- next;
- }
- $idx = $pkg_dep->{src}{path};
- } elsif (defined($srcpackage{$dep})) {
- $idx = $srcpackage{$dep}{path};
- }
-
- if ($idx) {
- $idx .= $suffix;
-
- my $depline;
- 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;
-
- if ($pkg_dep->{vdepends}) {
- $depstr = "\$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)";
- $dep{$srcname."->($dep)".$idx} = 1;
- } else {
- $depstr = "\$(curdir)/$idx/compile";
- $dep{$srcname."->".$idx} = 1;
- }
- $depline = get_conditional_dep($condition, $depstr);
- if ($depline) {
- $deplines{''}{$depline}++;
- }
- }
- }
- }
foreach my $suffix (sort keys %deplines) {
my $depline = join(" ", sort keys %{$deplines{$suffix}});
if ($depline) {