Am Samstag, dem 30.10.2021 um 22:00 +0200 schrieb Alexander Ploumistos:
Hello,
I'm wondering if there's an "elegant" and "rpm" way to do
the
following, without calling an external tool (and maybe adding another
dependency to a package):
Project "foo" tracks the development of project "bar" and both use
basic semantic versioning, X.Y.Z. Project "bar" rarely increments the
patch version and only for internal development purposes. Regular
releases always carry a patch version of 0, e.g. 16.5.0. Project "foo"
follows the same major and minor versions as "bar", but they also
publish releases with incremented patch versions. Any given foo
release should be built against a bar release with the same major and
minor versions. Does rpm provide a way to require that part of the
version string, e.g. for foo-16.5.4:
Requires: bar >= 16.5
without hard coding the actual values?
This should solve your problem as described:
```
# These lines go *after* the package version has been set.
# Name: foo
# Version: X.Y.Z
# …
%global ver_major %(echo %{version} | cut -d. -f1) # X
%global ver_minor %(echo %{version} | cut -d. -f2) # Y
%global ver_minor_next %(echo $((%{ver_minor}+1))) # Y+1
# BuildRequires with versioning
BuildRequires: bar-devel >= %{ver_major}.%{ver_minor} # X.Y
BuildRequires: bar-devel < %{ver_major}.%{ver_minor_next} # X.(Y+1)
# Archful runtime Requires with versioning
Requires: bar%{?_isa} >= %{ver_major}.%{ver_minor}
Requires: bar%{?_isa} < %{ver_major}.%{ver_minor_next}
# Archless runtime Requires with versioning, if bar is noarch.
Requires: bar >= %{ver_major}.%{ver_minor}
Requires: bar < %{ver_major}.%{ver_minor_next}
```
This does not take into account if bar has an epoch in its EVR.
Björn