2017-03-20 1 views
1

システムにすでにインストールされているはずの別のRPMのバージョンに基づいて、スペックファイルに%define宣言の値を設定する必要があります。別のRPMのバージョンに基づいて仕様ファイルに%defineを設定するにはどうしたらいいですか?

私はすでにこれを試してみました、私はエラーを持っている:

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

エラーを報告できますか?このように別のパッケージに依存することはお勧めできません。 – iamauser

答えて

1

あなたのパッケージは、パッケージfooに依存している場合、あなたは適切にspecファイルを準備する必要があり、例えば、

をビルド時間の要件パッケージfooの(特定のバージョンならば、それを明示的)、

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

PAの実行時間の要件を持っている必要がありますckage foo(特定のバージョンならば、それを明示的に)、あなたはその後、例えば、他の条件のための定義に使用することができます

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

を持っている必要があり、

%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 
0

あなたはRPMマクロの評価でシェルの実行を混合しています。 %()構文を使用して、マクロ評価時にシェルコードを実行する必要があります。たとえば、次のようになります。

%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 
関連する問題