4.4. RPM 条件
RPM 条件により、さまざまなバージョンの SPEC ファイルを条件付きで含めることができます。
条件を含めるには通常、次を処理します。
- アーキテクチャー固有のセクション
- オペレーティングシステム固有のセクション
- さまざまなバージョンのオペレーティング間の互換性の問題
- マクロの存在と定義
4.4.1. RPM 条件構文
RPM 条件では、次の構文を使用します。
expression が真であれば、以下のアクションを実行します。
%if expression … %endif
expression が真であれば、別のアクションを実行し、別の場合には別のアクションを実行します。
%if expression … %else … %endif
4.4.2. RPM 条件例
このセクションでは、RPM 条件の例を複数示します。
4.4.2.1. %if 条件
例4.3 RHEL 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 スクリプトから削除されます。
例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
の間にある SPEC ファイルのすべてのコンテンツは、32 ビット AMD および Intel のアーキテクチャー、または SunMAJOROS ベースのシステムでのみ処理されます。
4.4.2.2.2. %ifnarch 条件
% ifnarch
条件には、%ifarch
条件よりもリバース論理があります。
例4.6 %ifnarch 条件の使用例
%ifnarch alpha … %endif
SPEC ファイルの % ifnarch
と % endif
との間のすべてのコンテンツは、Digital Alpha/AXP ベースのシステムで処理されない場合に限り処理されます。
4.4.2.2.3. %ifos 条件
%ifos
条件は、ビルドのオペレーティングシステムに基づいて処理を制御するために使用されます。その後に複数のオペレーティングシステム名を指定できます。
例4.7 %ifos 条件の使用例
%ifos linux … %endif
SPEC ファイルの %ifos
と %endif
と の間のすべてのコンテンツは、ビルドが Linux システムで実行された場合にのみ処理されます。