Bug 1532293

Summary: File conflict between cmake-rpm-macros and cmake-data
Product: [Fedora] Fedora Reporter: Alexander Todorov <atodorov>
Component: cmakeAssignee: Björn 'besser82' Esser <besser82>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: high Docs Contact:
Priority: high    
Version: 26CC: bart, besser82, jreznik, jth, kevin, mikejsmitty, nathan95, orion, pix, rdieter, trailtotale, walter.pete
Target Milestone: ---Keywords: Reopened
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: cmake-3.10.1-11.fc27 cmake-3.10.1-11.fc26 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2018-01-17 16:20:05 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Alexander Todorov 2018-01-08 15:33:05 UTC
Description of problem:

A dnf install operation fails with:
Transaction check error:
  file /usr/lib/rpm/macros.d/macros.cmake from install of cmake-rpm-macros-3.10.1-4.fc26.noarch conflicts with file from package cmake-data-3.10.0-1.fc26.noarch

The command triggering this is:

dnf install -y rpm-build



Full log can be found at:
https://api.travis-ci.org/v3/job/326352250/log.txt


This is part of building a Docker container which builds and RPM for an existing project and the result of this bug is that all tests that rely on this fail.

Comment 1 Björn 'besser82' Esser 2018-01-09 10:07:11 UTC
For the linked build.log:

```
[0mThe command '/bin/sh -c dnf install -y rpm-build && dnf clean all' returned a non-zero code: 1
```

You should simply update cmake *before* installing rpm-build:

`dnf -y upgrade cmake && dnf install -y rpm-build && dnf clean all`

Comment 2 Rex Dieter 2018-01-13 15:23:10 UTC
%changelog
* Sat Jan 13 2018 Rex Dieter <rdieter> 3.10.1-9
- -rpm-macros: Conflicts: cmake < 3.10.1-2 (#1532293)

Probably not worth issuing an update just for this, but will be included when/if there is one.


Feel free to re-open if workaround suggested in comment #1 is not viable or if problems persist (and we can reconsider an update sooner rather than later)

Comment 3 Björn 'besser82' Esser 2018-01-14 15:40:58 UTC
(In reply to Rex Dieter from comment #2)
> %changelog
> * Sat Jan 13 2018 Rex Dieter <rdieter> 3.10.1-9
> - -rpm-macros: Conflicts: cmake < 3.10.1-2 (#1532293)
> 
> Probably not worth issuing an update just for this, but will be included
> when/if there is one.
> 
> Feel free to re-open if workaround suggested in comment #1 is not viable or
> if problems persist (and we can reconsider an update sooner rather than
> later)

I've modified your fix to use rich boolean dependencies instead of a simple Conflicts:

# when subpkg introduced, works on new distros only
%if 0%{?fedora} || 0%{?rhel} >= 8
Requires:       (%{name}-data = %{version}-%{release} if %{name}-data < 3.10.1-2)
%endif

This has the benefit, that cmake-data (and thus cmake by implicit dependency) will be updated automatically when cmake-rpm-macros is installed and they are out-dated , but are *not* pulled in if they are not installed.

Rich boolean dependencies are allowed in Fedora now:  https://fedoraproject.org/wiki/Packaging:Guidelines#Rich.2FBoolean_dependencies

Comment 4 Björn 'besser82' Esser 2018-01-14 15:47:37 UTC
As this bug affects Fedora 26+, I'll submit an updated package after the builds have finished.

Comment 5 Fedora Update System 2018-01-14 18:49:55 UTC
cmake-3.10.1-11.fc27 has been submitted as an update to Fedora 27. https://bodhi.fedoraproject.org/updates/FEDORA-2018-2e46af3527

Comment 6 Fedora Update System 2018-01-14 18:50:07 UTC
cmake-3.10.1-11.fc26 has been submitted as an update to Fedora 26. https://bodhi.fedoraproject.org/updates/FEDORA-2018-2a1b7a74b7

Comment 7 Fedora Update System 2018-01-15 18:34:08 UTC
cmake-3.10.1-11.fc27 has been pushed to the Fedora 27 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2018-2e46af3527

Comment 8 Fedora Update System 2018-01-15 18:42:30 UTC
cmake-3.10.1-11.fc26 has been pushed to the Fedora 26 testing repository. If problems still persist, please make note of it in this bug report.
See https://fedoraproject.org/wiki/QA:Updates_Testing for
instructions on how to install test updates.
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2018-2a1b7a74b7

Comment 9 Fedora Update System 2018-01-17 16:20:05 UTC
cmake-3.10.1-11.fc27 has been pushed to the Fedora 27 stable repository. If problems still persist, please make note of it in this bug report.

Comment 10 Kevin Kofler 2018-01-18 14:57:36 UTC
> I've modified your fix to use rich boolean dependencies instead of a simple
> Conflicts:
>
> # when subpkg introduced, works on new distros only
> %if 0%{?fedora} || 0%{?rhel} >= 8
> Requires:       (%{name}-data = %{version}-%{release} if %{name}-data < 3.10.1-2)
> %endif
>
> This has the benefit, that cmake-data (and thus cmake by implicit dependency)
> will be updated automatically when cmake-rpm-macros is installed and they are
> out-dated , but are *not* pulled in if they are not installed.

Conflicts: %{name}-data < 3.10.1-2
would also achieve the exact same thing. At least in my experience, the depsolvers are smart enough to upgrade a package to resolve such a <-versioned Conflicts.

Requires: (%{name}-data = %{version}-%{release} if %{name}-data < 3.10.1-2)
just means that we require either %{name}-data = %{version}-%{release} to be installed or %{name}-data < 3.10.1-2 to not be installed or both. (The "if" there is just a boolean "if", which means "or not", with an inclusive "or".) Since dnf won't coinstall 2 versions of the same package (if it is not a kernel), this is equivalent to the Conflicts (because the first option implies the second, so the second is equivalent to the entire disjunction, and the Conflicts just states the second option).

Comment 11 Fedora Update System 2018-01-18 21:11:10 UTC
cmake-3.10.1-11.fc26 has been pushed to the Fedora 26 stable repository. If problems still persist, please make note of it in this bug report.

Comment 12 Mike 2018-01-23 05:23:53 UTC
Not sure if this should be a new bug report, but it looks like there's a circular dependency now, at least in yum/mock on CentOS 7:

$ mock -r fedora-27-x86_64 --install cmake
...
--> Running transaction check
---> Package cmake.x86_64 0:3.10.1-11.fc27 will be installed
--> Processing Dependency: cmake-data = 3.10.1-11.fc27 for package: cmake-3.10.1-11.fc27.x86_64
--> Processing Dependency: cmake-filesystem(x86-64) = 3.10.1-11.fc27 for package: cmake-3.10.1-11.fc27.x86_64
--> Processing Dependency: cmake-rpm-macros = 3.10.1-11.fc27 for package: cmake-3.10.1-11.fc27.x86_64
--> Processing Dependency: libjsoncpp.so.19()(64bit) for package: cmake-3.10.1-11.fc27.x86_64
--> Processing Dependency: librhash.so.0()(64bit) for package: cmake-3.10.1-11.fc27.x86_64
--> Processing Dependency: libuv.so.1()(64bit) for package: cmake-3.10.1-11.fc27.x86_64
--> Running transaction check
---> Package cmake-data.noarch 0:3.10.1-11.fc27 will be installed
--> Processing Dependency: emacs-filesystem >= 25.3 for package: cmake-data-3.10.1-11.fc27.noarch
---> Package cmake-filesystem.x86_64 0:3.10.1-11.fc27 will be installed
---> Package cmake-rpm-macros.noarch 0:3.10.1-4.fc27 will be updated
---> Package cmake-rpm-macros.noarch 0:3.10.1-11.fc27 will be an update
--> Processing Dependency: (cmake = 3.10.1-11.fc27 if cmake < 3.10.1-11.fc27) for package: cmake-rpm-macros-3.10.1-11.fc27.noarch
--> Processing Dependency: (cmake-data = 3.10.1-11.fc27 if cmake-data < 3.10.1-11.fc27) for package: cmake-rpm-macros-3.10.1-11.fc27.noarch
---> Package jsoncpp.x86_64 0:1.8.3-1.fc27 will be installed
---> Package libuv.x86_64 1:1.16.0-1.fc27 will be installed
---> Package rhash.x86_64 0:1.3.5-1.fc27 will be installed
--> Running transaction check
---> Package cmake-rpm-macros.noarch 0:3.10.1-11.fc27 will be an update
--> Processing Dependency: (cmake = 3.10.1-11.fc27 if cmake < 3.10.1-11.fc27) for package: cmake-rpm-macros-3.10.1-11.fc27.noarch
--> Processing Dependency: (cmake-data = 3.10.1-11.fc27 if cmake-data < 3.10.1-11.fc27) for package: cmake-rpm-macros-3.10.1-11.fc27.noarch
---> Package emacs-filesystem.noarch 1:25.3-3.fc27 will be installed
--> Finished Dependency Resolution
Error: Package: cmake-rpm-macros-3.10.1-11.fc27.noarch (updates)
           Requires: (cmake-data = 3.10.1-11.fc27 if cmake-data < 3.10.1-11.fc27)
Error: Package: cmake-rpm-macros-3.10.1-11.fc27.noarch (updates)
           Requires: (cmake = 3.10.1-11.fc27 if cmake < 3.10.1-11.fc27)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
ERROR: Command failed: 
 # /usr/bin/yum --installroot /var/lib/mock/fedora-27-x86_64/root/ --releasever 27 install cmake

Comment 13 Mike 2018-01-23 05:32:05 UTC
Should also note that the results are the same if cmake-rpm-macros is removed before installing the new version of cmake and sub-packages.

Comment 14 John Florian 2018-02-15 20:52:02 UTC
I'm running into the following with my Koji which can't populate its buildroots:

DEBUG util.py:479:  Error: Package: cmake-rpm-macros-3.10.1-11.fc26.noarch (build)
DEBUG util.py:479:             Requires: (cmake-data = 3.10.1-11.fc26 if cmake-data < 3.10.1-11.fc26)
DEBUG util.py:479:  Error: Package: cmake-rpm-macros-3.10.1-11.fc26.noarch (build)
DEBUG util.py:479:             Requires: (cmake = 3.10.1-11.fc26 if cmake < 3.10.1-11.fc26)
DEBUG util.py:617:  Child return code was: 1


Does this indicate a problem still exists in this package?  Or is it that I need to adjust my private Koji somehow to cope with the rich dependencies?  Oddly I only have problems with all builds for F26; those for F27 continue to work just fine.

Comment 15 Joergen Thomsen 2018-03-06 20:25:40 UTC
It appears to me, that there still is a circular reference between cmake and cmake-rpm-macros in Fedora 27

When upgrading an older system with an earlier cmake it was not possible to install the cmake-rpm-macros because of the old cmake and vice versa it was not possible to install cmake because of the dependency in cmake-rpm-macros of a newer cmake.

At the end I used rpm to install cmake-rpm-macros from the downloaded package file using the --force parameter. Then I could get on with my work.