Reputation: 11
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
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