aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2018-01-07 23:11:11 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2018-01-13 19:54:44 +0100
commit5b479f7dcf03e661abac1ae2cfbf5d5a477ab650 (patch)
tree642596ceb9432091bb10425ab7b0ed1343caffe8
parent37cf77d9467fb92a3fb352230e95aab77a5342ba (diff)
downloadupstream-5b479f7dcf03e661abac1ae2cfbf5d5a477ab650.tar.gz
upstream-5b479f7dcf03e661abac1ae2cfbf5d5a477ab650.tar.bz2
upstream-5b479f7dcf03e661abac1ae2cfbf5d5a477ab650.zip
metadata: handle target build depends together with host build depends
Target build depends are similar to host build depends in that they refer to source packages rather than binary packages. Therefore, it makes sense to handle them together, rather than putting them in a list together with runtime depends and trying to figure out if the entries refer to source or to binary packages afterwards. This does lead to PKG_BUILD_DEPENDS entries referring to binary package names not working anymore, which requires some fixes in the package repositories. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
-rwxr-xr-xscripts/package-metadata.pl60
1 files changed, 28 insertions, 32 deletions
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";
+ }
}
}