寻找宏来将变量扩展为名称+值

时间:2015-07-12 00:55:40

标签: rpm rpm-spec

我会用一个例子来说明我的意思,因为它很难解释。

我有一个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

感谢您的任何想法!

1 个答案:

答案 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'

从理论上讲,我认为应该可以将其作为递归宏编写,以便它可以处理多个参数,但我实际上从来没有能够使这种事情发挥作用。

相关问题