4.4. RPM 条件
RPM 条件可启用 SPEC 文件的各种部分的条件。
条件包括通常会处理:
- 特定于架构的部分
- 特定于操作系统的部分
- 不同操作系统版本之间的兼容性问题
- 宏的存在和定义
4.4.1. RPM 条件语法
RPM 条件使用以下语法:
如果 expression 为 true,则执行一些操作:
%if expression … %endif
如果 expression为 true,则执行一些操作,在其他情况下执行另一个操作:
%if expression … %else … %endif
4.4.2. RPM 条件示例
这部分提供了 RPM 条件的多个示例。
4.4.2.1. %if 条件
例 4.3. 使用 %if 条件来处理 8 和其他操作系统间的兼容性
%if 0%{?rhel} == 8
sed -i '/AS_FUNCTION_DESCRIBE/ s/^//' configure.in sed -i '/AS_FUNCTION_DESCRIBE/ s/^//' acinclude.m4
%endif
这个条件在支持 AS_FUNCTION_DESCRIBE 宏时处理 RHEL 8 和其他操作系统间的兼容性。如果为 RHEL 构建软件包,则会定义 %rhel
宏,并将其扩展到 RHEL 版本。如果它的值是 8,表示软件包是为 RHEL 8 构建的。然后对 AS_FUNCTION_DESCRIBE 的引用(不被 RHEL 8 支持)会从 autoconfig 脚本中删除。
例 4.4. 使用 %if 条件句处理宏定义
%define ruby_archive %{name}-%{ruby_version} %if 0%{?milestone:1}%{?revision:1} != 0 %define ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision:r%{revision}}} %endif
这个条件处理宏的定义。如果设置了 %milestone
或 %revision
宏,则会重新定义用于定义上游 tarball 名称的 %ruby_archive
宏。
4.4.2.2. %if 条件的专用变体
%ifarch
条件、%ifnarch
条件和 %ifos
条件是 %if
条件的专用变体。这些变体常被使用,因此它们有自己的宏。
4.4.2.2.1. %ifarch 条件
%ifarch
条件用于开始特定于体系结构的 SPEC 文件的块。它后接一个或多个架构说明符,各自以逗号或空格分开。
例 4.5. 使用 %ifarch 条件的示例
%ifarch i386 sparc … %endif
在 %ifarch
和 %endif
if 之间所有 SPEC 文件的内容都仅在 32 位 AMD 和 Intel 构架或 Sun SPARC 的系统中处理。
4.4.2.2.2. %ifnarch 条件
%ifnarch
条件的逻辑与 %ifarch
条件的逻辑相反。
例 4.6. 使用 %ifnarch 条件的示例
%ifnarch alpha … %endif
只有在基于 Digital Alpha/AXP 的系统上的数字 Alpha/AXP 系统上执行时,才会处理 %ifnarch
和 %endif
之间的 SPEC 文件的内容。
4.4.2.2.3. %ifos 条件
%ifos
条件用于根据构建的操作系统控制处理。其后可以使用一个或多个操作系统名称。
例 4.7. 使用 %ifos 条件的示例
%ifos linux … %endif
只有 Linux 系统上完成构建时,才会处理 %ifos
和 %endif
之间的 SPEC 文件的内容。