[OpenWrt-Devel,03/15] metadata: move 'buildtypes' from binary to source packages

Message ID d368605e974fe0ccb272185330643ed3bad11793.1515421834.git.mschiffer@universe-factory.net
State Superseded
Headers show
Series
  • Metadata generator refactoring, cleanup and PROVIDES improvements
Related show

Commit Message

Matthias Schiffer Jan. 8, 2018, 2:52 p.m.
Build types are a property of source rather than binary packages. This is a
preparation for followup cleanup.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
---
 scripts/metadata.pm         |  4 ++--
 scripts/package-metadata.pl | 13 +++++++------
 2 files changed, 9 insertions(+), 8 deletions(-)

Patch

diff --git a/scripts/metadata.pm b/scripts/metadata.pm
index 297abc9f12..985e6237a6 100644
--- a/scripts/metadata.pm
+++ b/scripts/metadata.pm
@@ -214,6 +214,7 @@  sub parse_package_metadata($) {
 			$subdir{$src} = $subdir;
 			$srcpackage{$src} = {
 				packages => [],
+				buildtypes => [],
 			};
 			$override = "";
 			undef $pkg;
@@ -234,7 +235,6 @@  sub parse_package_metadata($) {
 			$pkg->{depends} = [];
 			$pkg->{mdepends} = [];
 			$pkg->{builddepends} = [];
-			$pkg->{buildtypes} = [];
 			$pkg->{subdir} = $subdir;
 			$pkg->{tristate} = 1;
 			$pkg->{override} = $override;
@@ -258,6 +258,7 @@  sub parse_package_metadata($) {
 			/^Feature-Description:/ and $feature->{description} = get_multiline(\*FILE, "\t\t\t");
 			next;
 		};
+		/^Build-Types:\s*(.+)\s*$/ and $srcpackage{$src}->{buildtypes} = [ split /\s+/, $1 ];
 		next unless $pkg;
 		/^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;
 		/^Title: \s*(.+)\s*$/ and $pkg->{title} = $1;
@@ -290,7 +291,6 @@  sub parse_package_metadata($) {
 		/^Build-Only: \s*(.+)\s*$/ and $pkg->{buildonly} = 1;
 		/^Build-Depends: \s*(.+)\s*$/ and $pkg->{builddepends} = [ split /\s+/, $1 ];
 		/^Build-Depends\/(\w+): \s*(.+)\s*$/ and $pkg->{"builddepends/$1"} = [ split /\s+/, $2 ];
-		/^Build-Types:\s*(.+)\s*$/ and $pkg->{buildtypes} = [ split /\s+/, $1 ];
 		/^Repository:\s*(.+?)\s*$/ and $pkg->{repository} = $1;
 		/^Category: \s*(.+)\s*$/ and do {
 			$pkg->{category} = $1;
diff --git a/scripts/package-metadata.pl b/scripts/package-metadata.pl
index 3a176c8024..08c2343ade 100755
--- a/scripts/package-metadata.pl
+++ b/scripts/package-metadata.pl
@@ -421,6 +421,7 @@  sub gen_package_mk() {
 	foreach my $name (sort {uc($a) cmp uc($b)} keys %package) {
 		my $config;
 		my $pkg = $package{$name};
+		my $src = $srcpackage{$pkg->{src}};
 		my @srcdeps;
 
 		next if defined $pkg->{vdepends};
@@ -441,11 +442,11 @@  sub gen_package_mk() {
 		next if $done{$pkg->{src}};
 		$done{$pkg->{src}} = 1;
 
-		if (@{$pkg->{buildtypes}} > 0) {
-			print "buildtypes-$pkg->{subdir}$pkg->{src} = ".join(' ', @{$pkg->{buildtypes}})."\n";
+		if (@{$src->{buildtypes}} > 0) {
+			print "buildtypes-$pkg->{subdir}$pkg->{src} = ".join(' ', @{$src->{buildtypes}})."\n";
 		}
 
-		foreach my $spkg (@{$srcpackage{$pkg->{src}}->{packages}}) {
+		foreach my $spkg (@{$src->{packages}}) {
 			foreach my $dep (@{$spkg->{depends}}, @{$spkg->{builddepends}}) {
 				$dep =~ /@/ or do {
 					$dep =~ s/\+//g;
@@ -453,7 +454,7 @@  sub gen_package_mk() {
 				};
 			}
 		}
-		foreach my $type (@{$pkg->{buildtypes}}) {
+		foreach my $type (@{$src->{buildtypes}}) {
 			my @extra_deps;
 			my %deplines;
 
@@ -476,7 +477,7 @@  sub gen_package_mk() {
 				my $idx = "";
 				my $pkg_dep = $package{$dep};
 				if (defined($pkg_dep) && defined($pkg_dep->{src})) {
-					unless (!$deptype || grep { $_ eq $deptype } @{$pkg_dep->{buildtypes}}) {
+					unless (!$deptype || grep { $_ eq $deptype } @{$srcpackage{$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",
 							$pkg->{makefile}, $type, $pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype;
 						next;
@@ -530,7 +531,7 @@  sub gen_package_mk() {
 			foreach my $dep (@deps) {
 				$pkg_dep = $package{$deps};
 				if (defined $pkg_dep->{src}) {
-					unless (!$deptype || grep { $_ eq $deptype } @{$pkg_dep->{buildtypes}}) {
+					unless (!$deptype || grep { $_ eq $deptype } @{$srcpackage{$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",
 							$pkg->{makefile}, $pkg_dep->{src}, $deptype, $pkg_dep->{makefile}, $deptype;
 						next;