Pagai
Pagai

Reputation: 11

How to tell rpmbuild to install package A only when packages B C D are not installed?

I try to build an RPM package on RHEL8 with rpmbuild version 4.14.3.

This package shall have a dependency, that at least OpenJDK 1.8.0 is installed.

This OpenJDK 1.8.0 shall not be installed if java-11-openjdk or java-17-openjdk or java-21-openjdk are installed.

# rpm -qa | grep java
java-11-openjdk-devel-11.0.23.0.9-3.el8.x86_64
tzdata-java-2024a-1.el8.noarch
javapackages-filesystem-5.3.0-1.module+el8+2447+6f56d9a6.noarch
java-11-openjdk-11.0.23.0.9-3.el8.x86_64
java-11-openjdk-headless-11.0.23.0.9-3.el8.x86_64
...

When yum install my package:

Dependencies resolved.
===================================
 Package                           
===================================
Installing:
 packageblabla         
Installing dependencies:
 java-1.8.0-openjdk                
 java-1.8.0-openjdk-devel          
 java-1.8.0-openjdk-headless       
Installing weak dependencies:
 gtk2      

The SPEC-file:

%{?_with_rhel8:Requires: (( java-1.8.0-openjdk-devel or java-11-openjdk-devel ) and ( java-1.8.0-openjdk-devel or java-17-openjdk-devel ) and ( java-1.8.0-openjdk-devel or java-21-openjdk-devel )) }

I tried with "unless" following https://rpm-software-management.github.io/rpm/manual/boolean_dependencies.html But rpmbuild complains that I shall use "or".

error: line 150: Illegal context for 'unless', please use 'or' instead: Requires: (( java-1.8.0-openjdk-devel unless java-11-openjdk-devel ) and ( java-1.8.0-openjdk-devel unless java-17-openjdk-devel ) and ( java-1.8.0-openjdk-devel unless java-21-openjdk-devel ))

Additionally the build is also then needed for RHEL7, which comes with rpm version 4.11.

Kind regards, Marcus

Upvotes: 1

Views: 40

Answers (1)

Vicente Bolea
Vicente Bolea

Reputation: 1583

You are looking for the Conflicts directive in your spec. Consider adding it in this manner:

Conflicts: java-11-openjdk
Conflicts: java-17-openjdk
Conflicts: java-21-openjdk

Source: https://fedoraproject.org/wiki/Packaging:Conflicts

Upvotes: 1

Related Questions