我会用一个例子来说明我的意思,因为它很难解释。
我有一个spec
文件,用于本机和交叉编译。我使用rpmbuild
选项将许多变量传递给--define
。我想要一个与之相当的宏:
%{?myvar:myvar=%{myvar}}
所以, iff myvar
存在,我希望它扩展为myvar=%{myvar}
,然后myvar=myval
。
我尝试使用%{expand:}
一点点(src),但是当我有多个参数时遇到了麻烦。因为看起来宏的参数转到EOL,并且我在最终输出中需要它们全部在一行,这也成为一个要求。
我不知道lua
,这可能有助于迭代各种参数,例如:
%expvar myvar1 myvar2 myvar3
=> myvar1=myval1 myvar2=myval2 myvar3=myval3
感谢您的任何想法!
答案 0 :(得分:1)
我不确定我是否理解EOL
,但这可以使用lua。
%expvar() %{lua: \
for i = 1, rpm.expand("%#") do \
local var = rpm.expand([[%]]..i) \
local evar = rpm.expand([[%]]..var) \
if [[%]]..var ~= evar then \
print(var.."="..evar.." ") \
end \
end \
}
使用是:
rpm -E 'blah %{expvar __cp __rm}foo'
实际上,鉴于我对你想要的内容有了更新的理解,我认为这是一个更好的答案(尽管这只能在一个宏上运行):
%expvar() %{expand:%%{?%1:%1=%%{%1}}}
使用是:
rpm -E 'foo %{expvar __cp} %{expvar xx} %{expvar __rm} blah'
从理论上讲,我认为应该可以将其作为递归宏编写,以便它可以处理多个参数,但我实际上从来没有能够使这种事情发挥作用。