2017-03-20 3 views
1

Je dois définir la valeur d'une déclaration% define dans un fichier spec basé sur la version d'un autre RPM qui est supposé être déjà installé dans le système.comment puis-je définir un% define dans un fichier spec basé sur la version d'un autre RPM?

Je l'ai déjà essayé et je suis ayant des erreurs:

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

Pouvez-vous poster les erreurs? Ce n'est pas une bonne idée de dépendre d'un autre paquet de cette façon. – iamauser

Répondre

1

Si votre colis dépend du paquet foo, alors vous devez préparer le fichier de spécification de manière appropriée, par exemple,

Une exigence de temps de construction du paquet foo (si une certaine version, puis le rendre explicite), devrait avoir

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

une exigence de l'exécution de pa ckage foo (si une certaine version, puis le rendre explicite), devrait avoir

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

Vous pouvez ensuite utiliser définir pour d'autres conditions, par exemple,

%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

Vous confondez l'exécution shell avec RPM évaluation macro . Vous devez exécuter le code de shell au moment de l'évaluation de la macro, en utilisant la syntaxe %(). Par exemple, comme ceci:

%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