如何根据另一个RPM的版本在spec文件中设置%define?

时间:2017-03-20 07:22:42

标签: rpm specifications

我需要根据应该在系统中安装的另一个RPM的版本,在spec文件中设置%define声明的值。

我已经尝试了这个,但我遇到了错误:

if [ -n "$(rpm -qa otherrpm)" ]; then
  %define THIS_VALUE value
else
  %define THIS_VALUE anothervalue
endif

2 个答案:

答案 0 :(得分:1)

如果您的包依赖于包foo,那么您需要正确准备规范文件,例如

foo的构建时间要求(如果某个版本,然后明确),应该有

BuildRequires: foo >= x.y.z-r

foo的运行时要求(如果某个版本,然后明确),应该有

Requires: foo >= x.y.z-r

然后,您可以将define用于其他条件,例如,

%global with_foo  1  # 1 means you need foo for build and install

%if %{with_foo}
%define THIS_VALUE value
BuildRequires: foo
Requires: foo
%else
%define THIS_VALUE anothervalue
%endif

答案 1 :(得分:1)

您正在将shell执行与RPM宏评估混合在一起。您需要使用%()语法在宏评估时运行shell代码。例如,像这样:

%define other_rpm_version %(rpm -q otherrpm | cut -d - -f 2)

%if "%other_rpm_version" == "1.0.0"
%define THIS_VALUE value
%else
%define THIS_VALUE othervalue
%endif