6.2. spec ファイルの条件分岐
仕様 ファイルの条件式を使用することで、仕様 ファイルのさまざまなセクションを条件付きで含めることを可能にします。
通常、条件分岐は次の側面を扱います。
- アーキテクチャー固有のセクション
- オペレーティングシステム固有のセクション
- さまざまなバージョンのオペレーティングシステム間の互換性に関する問題
spec の条件分岐はさまざまな目的で使用できます。次に例を示します。
条件式 (
%if)。%ifは複数の目的で使用できます。たとえば、次のような構文で使用できます。“式が真であれば、ある操作を実行する”:
%if expression ... %endif“式が真であればある操作を実行し、そうでない場合は別の操作を実行する”:
%if expression ... %elsif expression ... %else ... %endif%ifの後には、任意の数の%elif条件分岐 (ネストされた%elsif) を指定することもできます。次に例を示します。%if expression %elif expression ... %else %endif
システムアーキテクチャー (
%ifarch、%ifnarch)。%ifarchは、現在のターゲットシステムのアーキテクチャーが一致するかどうかをテストします。%ifarchを使用すると、複数のプラットフォーム用の RPM パッケージをビルドできます。次に例を示します。%ifarch s390 s390x BuildRequires: s390utils-devel %endif-
オペレーティングシステム (
%ifos、%ifnos)。%ifosは、ビルド対象のオペレーティングシステムに応じてspecファイルの処理を制御します。
6.2.1. %if 条件分岐の使用例 リンクのコピーリンクがクリップボードにコピーされました!
仕様 ファイル内で %if 条件式を使用する方法を示す以下の例を確認してください。
例6.1 %if 条件分岐を使用して Red Hat Enterprise Linux 10 と他のオペレーティングシステム間の互換性を処理する
%if 0%{?rhel} == 10
sed -i '/AS_FUNCTION_DESCRIBE/ s/^/#/' configure.in
sed -i '/AS_FUNCTION_DESCRIBE/ s/^/#/' acinclude.m4
%endif
RHEL 10 でパッケージをビルドする際、この条件分岐により、%rhel マクロの値が 10 に設定されている場合に、対象となる autoconf スクリプトから AS_FUNCTION_DESCRIBE 行がコメントアウトされます。
例6.2 %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 マクロが設定されている場合、アップストリームのアーカイブの名前を定義する %ruby_archive マクロが再定義されます。