This seems like a simple question, but the docs don't seem to have anything to say on the subject. I would like to do something like Requires: vim or emacs
but when I do that, I in fact depend on vim
, or
and emacs
. What is the syntax for depending on one or another of two packages?

- 27,905
- 33
- 92
- 139
3 Answers
The standard way to do this is via virtual provides: the providing RPMs each state that they provide a virtual package, and the dependent RPM requires that virtual package. So, in your example, vim
and emacs
both Provides: text-editor
, and your package would Requires: text-editor
.
If the packages that you're depending on don't provide an appropriate virtual package, you could probably hack around this by making up your own. Make dummy my-package-vim-mode
and my-package-emacs-mode
RPMs that Requires: vim
and Requires: emacs
, respectively, and Provides: my-package-text-editor
, then have your package Requires: my-package-text-editor
.

- 56,064
- 19
- 146
- 246
If packages don't have common Provide, and you don't want to rebuild and maintain forks of that packages, but they both do provide same file, you can depend on a file. For example:
Requires: /usr/bin/pear
That way your package won't matter if pear binary is provided by php-pear or php53-pear.

- 340
- 4
- 9
There is no such capability in rpm. Require a virtual provides that the packages have in common, if there is one.

- 776,304
- 153
- 1,341
- 1,358