diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl index fe6e25b3c8..b092db3565 100755 --- a/scripts/package-metadata.pl +++ b/scripts/package-metadata.pl @@ -408,6 +408,7 @@ sub gen_package_mk() { my $src = $srcpackage{$srcname}; my $variant_default; my @srcdeps; + my %deplines = ('' => {}); foreach my $pkg (@{$src->{packages}}) { next if defined $pkg->{vdepends}; @@ -441,19 +442,23 @@ sub gen_package_mk() { print "buildtypes-$src->{path} = ".join(' ', @{$src->{buildtypes}})."\n"; } - foreach my $dep (@{$src->{builddepends}}, map { @{$_->{depends}} } @{$src->{packages}}) { + foreach my $dep (map { @{$_->{depends}} } @{$src->{packages}}) { $dep =~ /@/ or do { $dep =~ s/\+//g; push @srcdeps, $dep; }; } - foreach my $type (@{$src->{buildtypes}}) { - my @extra_deps; - my %deplines; + foreach my $type ('', @{$src->{buildtypes}}) { + my $suffix = ''; - next unless $src->{"builddepends/$type"}; - foreach my $dep (@{$src->{"builddepends/$type"}}) { - my $suffix = ""; + $suffix = "/$type" if $type; + + next unless $src->{"builddepends$suffix"}; + + defined $deplines{$suffix} or $deplines{$suffix} = {}; + + foreach my $dep (@{$src->{"builddepends$suffix"}}) { + my $depsuffix = ""; my $deptype = ""; my $condition; @@ -464,37 +469,26 @@ sub gen_package_mk() { if ($dep =~ /^(.+)\/(.+)/) { $dep = $1; $deptype = $2; - $suffix = "/$2"; + $depsuffix = "/$2"; } - my $idx = ""; - my $pkg_dep = $package{$dep}; - if (defined($pkg_dep) && defined($pkg_dep->{src})) { - 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}{name}, $deptype, $pkg_dep->{src}{makefile}, $deptype; - next; - } - $idx = $pkg_dep->{src}{path}; - } elsif (defined($srcpackage{$dep})) { - $idx = $srcpackage{$dep}{path}; - } else { + next if $srcname.$suffix eq $dep.$depsuffix; + + my $src_dep = $srcpackage{$dep}; + unless (defined($src_dep) && (!$deptype || grep { $_ eq $deptype } @{$src_dep->{buildtypes}})) { + warn sprintf "WARNING: Makefile '%s' has a build dependency on '%s%s', which does not exist\n", + $src->{makefile}, $dep, $depsuffix; next; } - my $depstr = "\$(curdir)/$idx$suffix/compile"; + + my $depstr = "\$(curdir)/$src_dep->{path}$depsuffix/compile"; my $depline = get_conditional_dep($condition, $depstr); if ($depline) { - $deplines{$depline}++; + $deplines{$suffix}{$depline}++; } } - my $depline = join(" ", sort keys %deplines); - if ($depline) { - $line .= "\$(curdir)/$src->{path}/$type/compile += $depline\n"; - } } - my $hasdeps = 0; - my %deplines; foreach my $deps (@srcdeps) { my $idx; my $condition; @@ -552,14 +546,16 @@ sub gen_package_mk() { } $depline = get_conditional_dep($condition, $depstr); if ($depline) { - $deplines{$depline}++; + $deplines{''}{$depline}++; } } } } - my $depline = join(" ", sort keys %deplines); - if ($depline) { - $line .= "\$(curdir)/$src->{path}/compile += $depline\n"; + foreach my $suffix (sort keys %deplines) { + my $depline = join(" ", sort keys %{$deplines{$suffix}}); + if ($depline) { + $line .= "\$(curdir)/$src->{path}$suffix/compile += $depline\n"; + } } }