Ver Fonte

metadata.pl: add support for selecting packages available only via PROVIDES

Signed-off-by: Felix Fietkau <[email protected]>
Felix Fietkau há 9 anos atrás
pai
commit
4a3348ef09
1 ficheiros alterados com 30 adições e 20 exclusões
  1. 30 20
      scripts/metadata.pl

+ 30 - 20
scripts/metadata.pl

@@ -457,28 +457,38 @@ sub mconf_depends {
 			$depend = $2;
 		}
 		next if $package{$depend} and $package{$depend}->{buildonly};
-		if ($vdep = $package{$depend}->{vdepends}) {
-			$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
-		} else {
-			$flags =~ /\+/ and do {
-				# Menuconfig will not treat 'select FOO' as a real dependency
-				# thus if FOO depends on other config options, these dependencies
-				# will not be checked. To fix this, we simply emit all of FOO's
-				# depends here as well.
-				$package{$depend} and push @t_depends, [ $package{$depend}->{depends}, $condition ];
-
-				$m = "select";
-				next if $only_dep;
-			};
-			$flags =~ /@/ or $depend = "PACKAGE_$depend";
-			if ($condition) {
-				if ($m =~ /select/) {
-					next if $depend eq $condition;
-					$depend = "$depend if $condition";
-				} else {
-					$depend = "!($condition) || $depend" unless $dep->{$condition} eq 'select';
+		if ($flags =~ /\+/) {
+			if ($vdep = $package{$depend}->{vdepends}) {
+				my @vdeps = @$vdep;
+				$depend = shift @vdeps;
+				if (@vdeps > 1) {
+					$condition = '!('.join("||", map { "PACKAGE_".$_ } @vdeps).')';
+				} elsif (@vdeps > 0) {
+					$condition = '!PACKAGE_'.$vdeps[0];
 				}
 			}
+
+			# Menuconfig will not treat 'select FOO' as a real dependency
+			# thus if FOO depends on other config options, these dependencies
+			# will not be checked. To fix this, we simply emit all of FOO's
+			# depends here as well.
+			$package{$depend} and push @t_depends, [ $package{$depend}->{depends}, $condition ];
+
+			$m = "select";
+			next if $only_dep;
+		} else {
+			if ($vdep = $package{$depend}->{vdepends}) {
+				$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
+			}
+		}
+		$flags =~ /@/ or $depend = "PACKAGE_$depend";
+		if ($condition) {
+			if ($m =~ /select/) {
+				next if $depend eq $condition;
+				$depend = "$depend if $condition";
+			} else {
+				$depend = "!($condition) || $depend" unless $dep->{$condition} eq 'select';
+			}
 		}
 		$dep->{$depend} =~ /select/ or $dep->{$depend} = $m;
 	}