diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/package-metadata.pl | 112 |
1 files changed, 41 insertions, 71 deletions
diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl index b092db3..c8ae27a 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) { |