
On 03/20/2018 01:00 PM, Daniel P. Berrangé wrote:
Macros in RPMs are expanded before line continuations, so when we write
%systemd_preun foo \ bar
What happens is that it expands to
if [ $1 -eq 0 ] ; then # Package removal, not upgrade systemctl --no-reload disable --now foo \ > /dev/null 2>&1 || : fi bar
which is obviously complete garbage and not what we expected. It is simply not safe to ever use line continuations in combination with macros.
I forgot to ask this in the previous message - would it be reasonable to have a syntax-check rule that forbid any line in libvirt.spec.in that started with "<whitespace>%" and ended with \ ? (Personally I had no idea of this rule, and I'm sure most others didn't either).
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- libvirt.spec.in | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/libvirt.spec.in b/libvirt.spec.in index bc8257f34b..6bf8368476 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -1512,9 +1512,9 @@ exit 0
%if %{with_systemd} %if %{with_systemd_macros} - %systemd_post virtlockd.socket virtlockd-admin.socket \ - virtlogd.socket virtlogd-admin.socket \ - libvirtd.service + %systemd_post virtlockd.socket virtlockd-admin.socket + %systemd_post virtlogd.socket virtlogd-admin.socket + %systemd_post libvirtd.service %else if [ $1 -eq 1 ] ; then # Initial installation @@ -1549,9 +1549,9 @@ touch %{_localstatedir}/lib/rpm-state/libvirt/restart || : %preun daemon %if %{with_systemd} %if %{with_systemd_macros} - %systemd_preun libvirtd.service \ - virtlogd.socket virtlogd-admin.socket virtlogd.service \ - virtlockd.socket virtlockd-admin.socket virtlockd.service + %systemd_preun libvirtd.service + %systemd_preun virtlogd.socket virtlogd-admin.socket virtlogd.service + %systemd_preun virtlockd.socket virtlockd-admin.socket virtlockd.service %else if [ $1 -eq 0 ] ; then # Package removal, not upgrade