From patchwork Mon Jan 8 14:52:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthias Schiffer X-Patchwork-Id: 858331 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (helo) smtp.helo=arrakis.dune.hu (client-ip=78.24.191.176; helo=arrakis.dune.hu; envelope-from=openwrt-devel-bounces@lists.openwrt.org; receiver=) Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zGsRS5vg2z9ryv for ; Thu, 11 Jan 2018 01:52:04 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 9F9ECB915D1; Wed, 10 Jan 2018 10:22:11 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.1 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP; Wed, 10 Jan 2018 10:22:11 +0100 (CET) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id C2196B90E9E for ; Mon, 8 Jan 2018 15:52:48 +0100 (CET) X-policyd-weight: using cached result; rate: -6.1 Received: from orthanc.universe-factory.net (orthanc.universe-factory.net [104.238.176.138]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Mon, 8 Jan 2018 15:52:48 +0100 (CET) Received: from avalon.lan (unknown [IPv6:2001:19f0:6c01:100::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by orthanc.universe-factory.net (Postfix) with ESMTPSA id 9E58C2049F; Mon, 8 Jan 2018 15:52:47 +0100 (CET) From: Matthias Schiffer To: lede-dev@lists.infradead.org, openwrt-devel@lists.openwrt.org, jo@mein.io, nbd@nbd.name Date: Mon, 8 Jan 2018 15:52:24 +0100 Message-Id: X-Mailer: git-send-email 2.15.1 In-Reply-To: References: In-Reply-To: References: Subject: [OpenWrt-Devel] [PATCH 11/15] metadata: handle target build depends together with host build depends X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" 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 --- scripts/package-metadata.pl | 60 +++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl index 9372191166..e492cc8a09 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"; + } } }