From caaf03af4a2c81a39cb095ba5bc7c8067861e303 Mon Sep 17 00:00:00 2001 From: Ricardo Dias Date: Thu, 19 Feb 2026 12:50:58 +0000 Subject: [PATCH] multibuild: add `buildemptyflavor` attribute to _multibuild xml This commit adds support for a new `_multibuild` root attribute, `buildemptyflavor`, with boolean values `true|false`. With this attribute we can control whether the base package should be built or not when using multibuilds. In summary this implementation includes: * Extend multibuild XML parsing to accept `buildemptyflavor`. * Validate `buildemptyflavor` in multibuild verification logic. * Keep existing behavior by default (true when unset): build base package plus flavored packages. * When `buildemptyflavor="false"`, skip the base package task and build only `pkg:flavor` entries. Signed-off-by: Ricardo Dias --- PBuild/Multibuild.pm | 3 +++ PBuild/Verify.pm | 3 +++ 2 files changed, 6 insertions(+) diff --git a/PBuild/Multibuild.pm b/PBuild/Multibuild.pm index 3ba82e8c8..c9d22f87e 100644 --- a/PBuild/Multibuild.pm +++ b/PBuild/Multibuild.pm @@ -27,6 +27,7 @@ use PBuild::Verify; my $dtd_multibuild = [ 'multibuild' => + 'buildemptyflavor', [ 'package' ], # obsolete [ 'flavor' ], ]; @@ -73,10 +74,12 @@ sub expand_multibuilds { my $mb = getmultibuild_fromfiles($p->{'dir'}, $p->{'files'}); next unless $mb; my @mbp = @{$mb->{'flavor'} || $mb->{'package'} || []}; + my $buildemptyflavor = !defined($mb->{'buildemptyflavor'}) || $mb->{'buildemptyflavor'} eq 'true' ? 1 : 0; for my $flavor (@mbp) { my $mpkg = "$pkg:$flavor"; $pkgs->{$mpkg} = { %$p, 'pkg' => $mpkg, 'flavor' => $flavor, 'originpackage' => $pkg }; } + delete $pkgs->{$pkg} if @mbp && !$buildemptyflavor; } } diff --git a/PBuild/Verify.pm b/PBuild/Verify.pm index e5081474f..050045ff7 100644 --- a/PBuild/Verify.pm +++ b/PBuild/Verify.pm @@ -82,6 +82,9 @@ sub verify_nevraquery { sub verify_multibuild { my ($mb) = @_; + if (defined($mb->{'buildemptyflavor'})) { + die("buildemptyflavor must be either 'true' or 'false'\n") unless $mb->{'buildemptyflavor'} eq 'true' || $mb->{'buildemptyflavor'} eq 'false'; + } die("multibuild cannot have both package and flavor elements\n") if $mb->{'package'} && $mb->{'flavor'}; for my $packid (@{$mb->{'package'} || []}) { verify_packid($packid);