Package: libboost-thread1.74.0
Version: 1.74.0+ds1-20
Severity: serious
Tags: patch
User: debian...@lists.debian.org
Usertags: piuparts

Hi,

while analyzing piuparts bullseye->bookworm upgrade logs, I noticed
several cases where apt has problems upgrading libboost-regex1.74.0
because obsolete packages depending on the virtual package
libboost-regex1.74.0-icu67 make apt keep the old version installed.
The new version provides libboost-regex1.74.0-icu72, but the score
between the two virtual ones is usually a tie, favoring the installed
one.

While there is no direct dependency relationship between
libboost-regex1.74.0 and libboost-thread1.74.0, in all cases I looked
into libboost-thread1.74.0 was installed, too, and had a higher score,
thus making it an ideal candidate for adding some Breaks.

One prominent example is wesnoth which fails to upgrade:

...
  Starting 2 pkgProblemResolver with broken count: 2
  Investigating (0) wesnoth-1.14-core:amd64 < 1:1.14.15-1 @ii mK Ib >
  Broken wesnoth-1.14-core:amd64 Depends on libboost-regex1.74.0-icu67:amd64 < 
none @un H >
    Considering libboost-regex1.74.0:amd64 1 as a solution to 
wesnoth-1.14-core:amd64 34
    Added libboost-regex1.74.0:amd64 to the remove list
    Fixing wesnoth-1.14-core:amd64 via keep of libboost-regex1.74.0:amd64
  Investigating (0) wesnoth-1.16-core:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-core:amd64 Depends on libboost-regex1.74.0-icu72:amd64 < 
none @un H >
    Considering libboost-regex1.74.0:amd64 1 as a solution to 
wesnoth-1.16-core:amd64 33
    Holding Back wesnoth-1.16-core:amd64 rather than change 
libboost-regex1.74.0-icu72:amd64
   Try to Re-Instate (0) libboost-regex1.74.0:amd64
  Investigating (0) wesnoth-1.16-utbs:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-utbs:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-utbs:amd64 0
    Holding Back wesnoth-1.16-utbs:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-trow:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-trow:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-trow:amd64 0
    Holding Back wesnoth-1.16-trow:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-dw:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-dw:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-dw:amd64 0
    Holding Back wesnoth-1.16-dw:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-dm:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-dm:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-dm:amd64 0
    Holding Back wesnoth-1.16-dm:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-sof:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-sof:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-sof:amd64 0
    Holding Back wesnoth-1.16-sof:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-ei:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-ei:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-ei:amd64 0
    Holding Back wesnoth-1.16-ei:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-nr:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-nr:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-nr:amd64 0
    Holding Back wesnoth-1.16-nr:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-tsg:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-tsg:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-tsg:amd64 0
    Holding Back wesnoth-1.16-tsg:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-ttb:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-ttb:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-ttb:amd64 0
    Holding Back wesnoth-1.16-ttb:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-sotbe:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-sotbe:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-sotbe:amd64 0
    Holding Back wesnoth-1.16-sotbe:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-did:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-did:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-did:amd64 0
    Holding Back wesnoth-1.16-did:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-low:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-low:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-low:amd64 0
    Holding Back wesnoth-1.16-low:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16.9-1)
    Considering wesnoth-1.16-core:amd64 33 as a solution to wesnoth-1.16:amd64 0
    Holding Back wesnoth-1.16:amd64 rather than change wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-l:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-l:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-l:amd64 0
    Holding Back wesnoth-1.16-l:amd64 rather than change wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-thot:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-thot:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-thot:amd64 0
    Holding Back wesnoth-1.16-thot:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-httt:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-httt:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-httt:amd64 0
    Holding Back wesnoth-1.16-httt:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) wesnoth-1.16-sota:amd64 < none -> 1:1.16.9-1 @un uN Ib >
  Broken wesnoth-1.16-sota:amd64 Depends on wesnoth-1.16-core:amd64 < none | 
1:1.16.9-1 @un uH > (>= 1:1.16)
    Considering wesnoth-1.16-core:amd64 33 as a solution to 
wesnoth-1.16-sota:amd64 0
    Holding Back wesnoth-1.16-sota:amd64 rather than change 
wesnoth-1.16-core:amd64
  Investigating (0) libsemanage1:amd64 < 3.1-1+b2 @ii mK Ib >
  Broken libsemanage1:amd64 Depends on libsemanage-common:amd64 < 3.1-1 -> 
3.4-1 @ii umU > (= 3.1-1)
    Considering libsemanage-common:amd64 1 as a solution to libsemanage1:amd64 
-2
    Removing libsemanage1:amd64 rather than change libsemanage-common:amd64
  Investigating (1) wesnoth:amd64 < 1:1.14.15-1 -> 1:1.16.9-1 @ii umU Ib >
  Broken wesnoth:amd64 Depends on wesnoth-1.16:amd64 < none | 1:1.16.9-1 @un uH 
> (>= 1:1.16.9-1)
    Considering wesnoth-1.16:amd64 0 as a solution to wesnoth:amd64 0
    Holding Back wesnoth:amd64 rather than change wesnoth-1.16:amd64
   Try to Re-Instate (2) wesnoth:amd64
  Done
  
  The following packages were automatically installed and are no longer 
required:
    libflac8 libfluidsynth2 libtiff5 libwebp6 libwrap0 libxinerama1 libxxf86vm1
    ucf
  Use 'sudo apt autoremove' to remove them.
  The following packages will be REMOVED:
    libsemanage1
  The following NEW packages will be installed:
    gcc-12-base libcap2 libdecor-0-0 libffi8 libfile-find-rule-perl libflac12
    libfluidsynth3 libgdbm-compat4 libgdbm6 libgomp1 libicu72 liblerc4
    libmp3lame0 libnumber-compare-perl libperl5.36 libsemanage2 libsepol2
    libssl3 libtext-glob-perl libtiff6 libwebp7 libx11-xcb1 perl
    perl-modules-5.36 usrmerge util-linux-extra
  The following packages have been kept back:
    libboost-regex1.74.0 wesnoth
  The following packages will be upgraded:
...

While with the Breaks in place, apt finally decides to remove all the
wesnoth-1.14-* packages to allow wesnoth-1.16-* to be installed:

...
  Investigating (3) libboost-thread1.74.0:amd64 < 1.74.0-9 -> 
1.74.0+ds1-20.1~deb12anbe1 @ii umU Ib >
  Broken libboost-thread1.74.0:amd64 Breaks on libboost-regex1.74.0-icu67:amd64 
< none @un H >
    Considering libboost-regex1.74.0:amd64 34 as a solution to 
libboost-thread1.74.0:amd64 38
    Upgrading libboost-regex1.74.0:amd64 due to Breaks field in 
libboost-thread1.74.0:amd64
  Investigating (3) wesnoth-1.14-core:amd64 < 1:1.14.15-1 @ii mK Ib >
  Broken wesnoth-1.14-core:amd64 Depends on libboost-regex1.74.0-icu67:amd64 < 
none @un H >
    Considering libboost-regex1.74.0:amd64 34 as a solution to 
wesnoth-1.14-core:amd64 34
    Removing wesnoth-1.14-core:amd64 rather than change 
libboost-regex1.74.0-icu67:amd64
  Investigating (3) wesnoth-1.14-sota:amd64 < 1:1.14.15-1 @ii mK Ib >
  Broken wesnoth-1.14-sota:amd64 Depends on wesnoth-1.14-core:amd64 < 
1:1.14.15-1 @ii mR > (>= 1:1.14)
    Considering wesnoth-1.14-core:amd64 34 as a solution to 
wesnoth-1.14-sota:amd64 -1
    Removing wesnoth-1.14-sota:amd64 rather than change wesnoth-1.14-core:amd64
  Investigating (3) wesnoth-1.14-low:amd64 < 1:1.14.15-1 @ii mK Ib >
  Broken wesnoth-1.14-low:amd64 Depends on wesnoth-1.14-core:amd64 < 
1:1.14.15-1 @ii mR > (>= 1:1.14)
    Considering wesnoth-1.14-core:amd64 34 as a solution to 
wesnoth-1.14-low:amd64 -1
    Removing wesnoth-1.14-low:amd64 rather than change wesnoth-1.14-core:amd64
  Investigating (3) wesnoth-1.14-httt:amd64 < 1:1.14.15-1 @ii mK Ib >
  Broken wesnoth-1.14-httt:amd64 Depends on wesnoth-1.14-core:amd64 < 
1:1.14.15-1 @ii mR > (>= 1:1.14)
    Considering wesnoth-1.14-core:amd64 34 as a solution to 
wesnoth-1.14-httt:amd64 -1
    Removing wesnoth-1.14-httt:amd64 rather than change wesnoth-1.14-core:amd64
  Investigating (3) wesnoth-1.14-ttb:amd64 < 1:1.14.15-1 @ii mK Ib >
  Broken wesnoth-1.14-ttb:amd64 Depends on wesnoth-1.14-core:amd64 < 
1:1.14.15-1 @ii mR > (>= 1:1.14)
    Considering wesnoth-1.14-core:amd64 34 as a solution to 
wesnoth-1.14-ttb:amd64 -1
    Removing wesnoth-1.14-ttb:amd64 rather than change wesnoth-1.14-core:amd64
...

This was not an issue in previous Debian releases since there was always
a boost version bump, thus all library package names changed and old and
new versions were co-installable.

Please consider applying the attached patch.


Andreas
diff -Nru boost1.74-1.74.0+ds1/debian/changelog 
boost1.74-1.74.0+ds1/debian/changelog
--- boost1.74-1.74.0+ds1/debian/changelog       2023-01-30 18:20:12.000000000 
+0100
+++ boost1.74-1.74.0+ds1/debian/changelog       2023-05-10 22:35:56.000000000 
+0200
@@ -1,3 +1,10 @@
+boost1.74 (1.74.0+ds1-21) UNRELEASED; urgency=medium
+
+  * libboost-thread1.74.0: Add Breaks: libboost-regex1.74.0-icu67 for smoother
+    upgrades from bullseye.
+
+ -- Andreas Beckmann <a...@debian.org>  Wed, 10 May 2023 22:35:56 +0200
+
 boost1.74 (1.74.0+ds1-20) unstable; urgency=medium
 
   * [dc6fadf] Better handling of the upstream version number.
diff -Nru boost1.74-1.74.0+ds1/debian/control 
boost1.74-1.74.0+ds1/debian/control
--- boost1.74-1.74.0+ds1/debian/control 2023-01-30 06:41:56.000000000 +0100
+++ boost1.74-1.74.0+ds1/debian/control 2023-05-10 22:35:46.000000000 +0200
@@ -1342,6 +1342,7 @@
 Multi-Arch: same
 Depends: ${misc:Depends}, ${shlibs:Depends}
 Pre-Depends: ${misc:Pre-Depends}
+Breaks: libboost-regex1.74.0-icu67,
 Description: portable C++ multi-threading
  This package forms part of the Boost C++ Libraries collection.
  .

Reply via email to