diff --git a/rpm-4.16.1.3-bcond-macros.patch b/rpm-4.16.1.3-bcond-macros.patch new file mode 100644 index 0000000..6162193 --- /dev/null +++ b/rpm-4.16.1.3-bcond-macros.patch @@ -0,0 +1,217 @@ +From 7b1fc619a5c828828dad7c1f61f525d957b9e2c5 Mon Sep 17 00:00:00 2001 +From: Petr Viktorin +Date: Wed, 27 Jan 2021 17:32:51 +0100 +Subject: [PATCH] Add %bcond macro for defining build conditionals + +Move documentation from comments to reference manual +Fixes: https://github.com/rpm-software-management/rpm/issues/941 + +(cherry picked from commit a99b6373af0774f4bef62aa89defc84cfcacc078) +--- + macros.in | 54 +++++++---------------- + tests/Makefile.am | 1 + + tests/data/SPECS/bcondtest.spec | 33 +++++++++++++++ + tests/rpmbuild.at | 73 ++++++++++++++++++++++++++++++++ + 5 files changed, 157 insertions(+), 42 deletions(-) + create mode 100644 tests/data/SPECS/bcondtest.spec + +diff --git a/macros.in b/macros.in +index 7c458f5d8a..35462c933c 100644 +--- a/macros.in ++++ b/macros.in +@@ -78,47 +78,25 @@ + %defined() %{expand:%%{?%{1}:1}%%{!?%{1}:0}} + %undefined() %{expand:%%{?%{1}:0}%%{!?%{1}:1}} + +-# Shorthand for %{defined with_...} ++# Handle conditional builds. ++# (see 'conditionalbuilds' in the manual) ++# ++# Internally, the `--with foo` option defines the macro `_with_foo` and the ++# `--without foo` option defines the macro `_without_foo`. ++# Based on those and a default (used when neither is given), bcond macros ++# define the macro `with_foo`, which should later be checked: ++ ++%bcond() %[ (%2)\ ++ ? "%{expand:%%{!?_without_%{1}:%%global with_%{1} 1}}"\ ++ : "%{expand:%%{?_with_%{1}:%%global with_%{1} 1}}"\ ++] ++%bcond_with() %bcond %{1} 0 ++%bcond_without() %bcond %{1} 1 ++ ++# Shorthands for %{defined with_...}: + %with() %{expand:%%{?with_%{1}:1}%%{!?with_%{1}:0}} + %without() %{expand:%%{?with_%{1}:0}%%{!?with_%{1}:1}} + +-# Handle conditional builds. %bcond_with is for case when feature is +-# default off and needs to be activated with --with ... command line +-# switch. %bcond_without is for the dual case. +-# +-# %bcond_with foo defines symbol with_foo if --with foo was specified on +-# command line. +-# %bcond_without foo defines symbol with_foo if --without foo was *not* +-# specified on command line. +-# +-# For example (spec file): +-# +-# (at the beginning) +-# %bcond_with extra_fonts +-# %bcond_without static +-# (and later) +-# %if %{with extra_fonts} +-# ... +-# %else +-# ... +-# %endif +-# %if ! %{with static} +-# ... +-# %endif +-# %if %{with static} +-# ... +-# %endif +-# %{?with_static: ... } +-# %{!?with_static: ... } +-# %{?with_extra_fonts: ... } +-# %{!?with_extra_fonts: ... } +- +-# +-# The bottom line: never use without_foo, _with_foo nor _without_foo, only +-# with_foo. This way changing default set of bconds for given spec is just +-# a matter of changing single line in it and syntax is more readable. +-%bcond_with() %{expand:%%{?_with_%{1}:%%global with_%{1} 1}} +-%bcond_without() %{expand:%%{!?_without_%{1}:%%global with_%{1} 1}} + # + #============================================================================== + # ---- Required rpmrc macros. +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 66cee3273b..6d41ef93c5 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -40,6 +40,7 @@ EXTRA_DIST += $(TESTSUITE_AT) + + ## testsuite data + EXTRA_DIST += data/SPECS/attrtest.spec ++EXTRA_DIST += data/SPECS/bcondtest.spec + EXTRA_DIST += data/SPECS/buildrequires.spec + EXTRA_DIST += data/SPECS/docmiss.spec + EXTRA_DIST += data/SPECS/hello.spec +diff --git a/tests/data/SPECS/bcondtest.spec b/tests/data/SPECS/bcondtest.spec +new file mode 100644 +index 0000000000..7172a31d29 +--- /dev/null ++++ b/tests/data/SPECS/bcondtest.spec +@@ -0,0 +1,33 @@ ++Name: bcondtest ++Version: 1.0 ++Release: 1 ++Group: Testing ++License: CC0 ++BuildArch: noarch ++Summary: Test package for the bcond macro ++ ++%bcond normally_on 1 ++%bcond normally_off 0 ++%bcond both_features %[%{with normally_on} && %{with normally_off}] ++ ++%if %{with normally_on} ++Provides: has_bcond(normally_on) ++%endif ++%if %{with normally_off} ++Provides: has_bcond(normally_off) ++%endif ++%if %{with both_features} ++Provides: has_bcond(both_features) ++%endif ++ ++%description ++%{summary} ++ ++%install ++mkdir -p %{buildroot}/opt ++touch %{buildroot}/opt/file ++ ++%files ++/opt/file ++ ++%changelog +diff --git a/tests/rpmbuild.at b/tests/rpmbuild.at +index 30d8e6895d..f378a4af2a 100644 +--- a/tests/rpmbuild.at ++++ b/tests/rpmbuild.at +@@ -1801,3 +1801,76 @@ runroot rpmbuild -ba --quiet \ + [], + []) + AT_CLEANUP ++ ++AT_SETUP([bcond macro]) ++AT_KEYWORDS([bcond build]) ++RPMDB_INIT ++ ++# basic bcond behavior with --eval ++AT_CHECK([ ++runroot rpm \ ++ --eval "%bcond normally_on 1" \ ++ --eval "%bcond normally_off 0" \ ++ --eval "%bcond both_features %[[%{with normally_on} && %{with normally_off}]]" \ ++ --eval "%{with normally_on}" \ ++ --eval "%{with normally_off}" \ ++ --eval "%{with both_features}" ++], ++[0], ++[ ++ ++ ++1 ++0 ++0 ++], ++[]) ++ ++# bcond behavior, without CLI options ++AT_CHECK([ ++runroot rpmbuild -bb --quiet /data/SPECS/bcondtest.spec ++runroot rpm -q --provides -p /build/RPMS/noarch/bcondtest-1.0-1.noarch.rpm | ++ grep has_bcond | sort ++], ++[0], ++[has_bcond(normally_on) ++], ++[]) ++ ++# bcond behavior, --with ++AT_CHECK([ ++runroot rpmbuild -bb --quiet --with normally_on --with normally_off \ ++ /data/SPECS/bcondtest.spec ++runroot rpm -q --provides -p /build/RPMS/noarch/bcondtest-1.0-1.noarch.rpm | ++ grep has_bcond | sort ++], ++[0], ++[has_bcond(both_features) ++has_bcond(normally_off) ++has_bcond(normally_on) ++], ++[]) ++ ++# bcond behavior, --without ++AT_CHECK([ ++runroot rpmbuild -bb --quiet --without normally_on --without normally_off \ ++ /data/SPECS/bcondtest.spec ++runroot rpm -q --provides -p /build/RPMS/noarch/bcondtest-1.0-1.noarch.rpm | ++ grep has_bcond | sort ++], ++[0], ++[], ++[]) ++ ++# bcond behavior, CLI overriding a complex defailt ++AT_CHECK([ ++runroot rpmbuild -bb --quiet --with both_features /data/SPECS/bcondtest.spec ++runroot rpm -q --provides -p /build/RPMS/noarch/bcondtest-1.0-1.noarch.rpm | ++ grep has_bcond | sort ++], ++[0], ++[has_bcond(both_features) ++has_bcond(normally_on) ++], ++[]) ++AT_CLEANUP diff --git a/rpm.spec b/rpm.spec index 5d4709a..0d7678a 100644 --- a/rpm.spec +++ b/rpm.spec @@ -32,7 +32,7 @@ %global rpmver 4.16.1.3 #global snapver rc1 -%global rel 19 +%global rel 20 %global sover 9 %global srcver %{rpmver}%{?snapver:-%{snapver}} @@ -84,6 +84,7 @@ Patch112: rpm-4.16.1.3-fix-regression-reading-rpm-v3-pkgs.patch Patch113: rpm-4.16.1.3-fix-spurious-transfiletriggerpostun-execution.patch Patch114: rpm-4.16.1.3-Make-rpm2cpio.sh-more-robust.patch Patch115: rpm-4.16.1.3-fapolicyd-make-write-nonblocking.patch +Patch116: rpm-4.16.1.3-bcond-macros.patch # These are not yet upstream Patch906: rpm-4.7.1-geode-i686.patch @@ -615,6 +616,9 @@ fi %doc doc/librpm/html/* %changelog +* Mon Nov 07 2022 Florian Festi - 4.16.1.3-20 +- Add bcond macros (#2129060) + * Fri Oct 21 2022 Michal Domonkos - 4.16.1.3-19 - Bump release for rebuild