On 03/16/2011 08:34 AM, Eric Blake wrote:
On 03/16/2011 05:54 AM, Jiri Denemark wrote:
> ---
> If anyone knows how to make rpm to evaluate %(...) immediately and not
> at every appearance of rhel/fedora, that would be really cool.
It looks like %{lua: expression} is the trick to do an immediate
evaluation; my problem is that I don't know the appropriate lua
expression to replace your sed script.
http://www.rpm.org/wiki/PackagerDocs/RpmLua
> +++ b/libvirt.spec.in
> @@ -1,5 +1,11 @@
> # -*- rpm-spec -*-
>
> +# if neither fedora nor rhel was defined, try to guess them from %{dist}
> +%if !0%{?rhel} && !0%{?fedora}
> +%define rhel %(echo "%{?dist}" | sed -ne
's/^\\.el\\([0-9]\\+\\).*/\\1/p')
> +%define fedora %(echo "%{?dist}" | sed -ne
's/^\\.fc\\?\\([0-9]\\+\\).*/\\1/p')
> +%endif
This looks reasonable as is, but like you said, it would be nicer to
compute it once.
This works for one-shot evaluation:
# if neither fedora nor rhel was defined, try to guess them from %{dist}
%if !0%{?rhel} && !0%{?fedora}
%define rhel %{lua: v=string.match(rpm.expand("%{?dist}"),
"^%.el([0-9]+).*"); if v ~= nil then print(v) end}
%define fedora %{lua: v=string.match(rpm.expand("%{?dist}"),
"^%.fc?([0-9]+).*"); if v ~= nil then print(v) end}
%endif
It creates a temporary lua variable which is either nil or the matched
substring, and prints only the matched substring.
I tested it with lots of %{echo:...} and various manipulations of
%define/%undefine.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org