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

Looking for a macro to expand a variable to the name + value

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

我有一个 spec 文件,用于本机和交叉编译。我使用 --define 选项将许多变量传递给 rpmbuild。我想要一个相当于这个的宏:

%{?myvar:myvar=%{myvar}}

所以,iff​​ myvar 存在,我希望它扩展到 myvar=%{myvar} 那么就是 myvar=myval.

我尝试使用 %{expand:} 一点点 (src),但是当我有多个参数时 运行 遇到了麻烦。由于宏的参数似乎进入了 EOL,而我需要在最终输出中将它们全部放在一行中,这也成为一项要求。

我不知道 lua,这可能有助于迭代各种参数,例如:

%expvar myvar1 myvar2 myvar3 => myvar1=myval1 myvar2=myval2 myvar3=myval3

感谢任何想法!

我不确定我是否理解有关 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'

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