On Tue, Apr 28, 2020 at 9:55 AM Nicolas Mailhot via devel devel@lists.fedoraproject.org wrote:
Le mardi 28 avril 2020 à 08:43 +0200, Petr Pisar a écrit :
On Mon, Apr 27, 2020 at 04:33:52PM +0200, Petr Šabata wrote:
%_use_ncurses %{lua: if rpm.expand("%{name}") == "yourpackage1" or rpm.expand("%{name}") == "yourpackage2" then print(rpm.expand("%{bcond_with foo}%{with foo}")) else print(rpm.expand("%{bcond_without foo}%{with foo}")) end }
%{name} use in macro logic is unsafe because %{name} does not exist in the preamble before the Name: line, and the Name: line does not exist before you start declaring package headers.
Once you’re in package header declaration mode rpm parser behaviour will prevent you from doing logic between headers blocks, so it all needs interleaving, which ends un not possible sanely in any semi-complex spec file.
You're correct but I can't think of any solution besides not using the macros before you define Name, just like in your example below. It's certainly a drawback.
P
The rpm parser will now insult you with messages like warning: undefined macro(s) in %{_sourcedir}: /var/lib/builder/rpmbuild/SOURCES/%{name}
if you try to use %{name} at the srpm level.
This is an rpm 4.15 change https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/83
Regards,
-- Nicolas Mailhot