5.4. RPM 条件
RPM 条件により、spec
ファイルのさまざまなセクションを条件付きで含めることができます。
条件を含めるには通常、次を処理します。
- アーキテクチャー固有のセクション
- オペレーティングシステム固有のセクション
- さまざまなバージョンのオペレーティング間の互換性の問題
- マクロの存在と定義
5.4.1. RPM 条件構文
RPM 条件では、次の構文を使用します。
expression が真であれば、以下のアクションを実行します。
%if expression … %endif
expression が真であれば、別のアクションを実行し、別の場合には別のアクションを実行します。
%if expression … %else … %endif
5.4.2. %if 条件
次の例は、%if
RPM 条件の使用法を示しています。
例5.3 Red Hat Enterprise Linux 8 と他のオペレーティングシステム間の互換性を処理するために %if を使用
%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 用にビルドされ、RHEL 8 で対応していない AS_FUNCTION_DESCRIBE への参照が autoconfig スクリプトから削除されます。
例5.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
マクロが再定義されます。
5.4.3. %if 条件の特殊なバリアント
%ifarch
条件、%ifnarch
条件、%ifos
条件は、%if
条件の特殊なバリアントです。これらのバリアントは一般的に使用されるため、独自のマクロがあります。
%ifarch 条件
%ifarch
条件は、アーキテクチャー固有の spec
ファイルのブロックを開始するために使用されます。この後に、アーキテクチャー指定子が続きます。これらは、それぞれコンマまたは空白で区切ります。
例5.5 %ifarch 条件の使用例
%ifarch i386 sparc … %endif
%ifarch
と %endif
の間にある spec
ファイルのすべての内容は、32 ビット AMD および Intel アーキテクチャーまたは Sun SPARC ベースのシステムでのみ処理されます。
%ifnarch 条件
% ifnarch
条件には、%ifarch
条件よりもリバース論理があります。
例5.6 %ifnarch 条件の使用例
%ifnarch alpha … %endif
%ifnarch
と %endif
の間にある spec
ファイルのすべての内容は、Digital Alpha/AXP ベース以外のシステムでのみ処理されます。
%ifos 条件
%ifos
条件は、ビルドのオペレーティングシステムに基づいて処理を制御するために使用されます。その後に複数のオペレーティングシステム名を指定できます。
例5.7 %ifos 条件の使用例
%ifos linux … %endif
%ifos
と %endif
の間にある spec
ファイルのすべての内容は、ビルドが Linux システムで実行された場合にのみ処理されます。