FS#58947 - [boost-libs] Add all provided .so files to "provides" array
Attached to Project:
Arch Linux
Opened by Martin L. (wuestengecko) - Saturday, 09 June 2018, 16:54 GMT
Last edited by Doug Newgard (Scimmia) - Monday, 18 June 2018, 14:29 GMT
Opened by Martin L. (wuestengecko) - Saturday, 09 June 2018, 16:54 GMT
Last edited by Doug Newgard (Scimmia) - Monday, 18 June 2018, 14:29 GMT
|
Details
Description:
The current PKGBUILD for boost-libs (pkgbase boost) only lists libboost_context.so in its "provides" array. However, as boost regularly does soname bumps on updates, it would be beneficial to have all provided libraries listed in order to more easily spot possible incompatibilities, and to allow packages to depend on the version they were built against simply by listing the required libraries in their "depends" arrays. Additional info: boost-libs version 1.67.0-4 provides these libraries: 'libboost_atomic.so' 'libboost_chrono.so' 'libboost_container.so' 'libboost_context.so' 'libboost_contract.so' 'libboost_coroutine.so' 'libboost_date_time.so' 'libboost_fiber.so' 'libboost_filesystem.so' 'libboost_graph.so' 'libboost_graph_parallel.so' 'libboost_iostreams.so' 'libboost_locale.so' 'libboost_log.so' 'libboost_log_setup.so' 'libboost_math_c99.so' 'libboost_math_c99f.so' 'libboost_math_c99l.so' 'libboost_math_tr1.so' 'libboost_math_tr1f.so' 'libboost_math_tr1l.so' 'libboost_mpi.so' 'libboost_mpi_python.so' 'libboost_numpy.so' 'libboost_numpy27.so' 'libboost_numpy3.so' 'libboost_numpy36.so' 'libboost_prg_exec_monitor.so' 'libboost_program_options.so' 'libboost_python.so' 'libboost_python27.so' 'libboost_python3.so' 'libboost_python36.so' 'libboost_random.so' 'libboost_regex.so' 'libboost_serialization.so' 'libboost_signals.so' 'libboost_stacktrace_addr2line.so' 'libboost_stacktrace_basic.so' 'libboost_stacktrace_noop.so' 'libboost_system.so' 'libboost_thread.so' 'libboost_timer.so' 'libboost_type_erasure.so' 'libboost_unit_test_framework.so' 'libboost_wave.so' 'libboost_wserialization.so' 'mpi.so' This list can also be dynamically generated at build time with a line at the end of the package_boost-libs() function like this: provides=( $(find /usr/lib -type f -name '*.so' -printf '%f\n') ) Steps to reproduce: 1. Build and install any package that depends on a boost library, except libboost_context.so. An example is the icinga2 AUR package, which requires libboost_program_options.so, libboost_regex.so, libboost_system.so and libboost_thread.so. 2. Upgrade (or downgrade) the boost-libs package across a soname bump, e.g. 1.66.0-3 -> 1.67.0-4. 3. Notice that the built icinga2 binary is no longer able to find its libraries, and thus is unable to run. Icinga2 has to be rebuilt against the newer library versions. This could have been avoided if pacman were able to see the soname bump, and notice that icinga2 would not be compatible with the newer versions. (Of course this also requires changes to icinga2's PKGBUILD.) |
This task depends upon
Closed by Doug Newgard (Scimmia)
Monday, 18 June 2018, 14:29 GMT
Reason for closing: Won't implement
Monday, 18 June 2018, 14:29 GMT
Reason for closing: Won't implement
FS#51779for the one cherry-picked lib. But we usually use rebuild lists for boost...@Eli Schwartz maintaining a rebuild list sounds tedious, and even more so if you have no control over when new packages get pushed to the official repos. And really, taking care of dependencies and their versions is literally pacman's job. I still don't see why adding information about the libraries would be a bad thing.
Arch Linux does not support partial updates in the first place, why should boost be special?
$ printf %s\\n /usr/lib/lib*.so | wc -l
1123
That's a lot of libs that don't use libprovides.
This change seems wholly motivated by being able to catch AUR packages that aren't rebuilt. And AUR packages are the place this hurts the most, since unless you do like we do when building official packages and build in clean chroots, it becomes very difficult to update at all.
So this request can be closed.
FWIW, you could try the lddd command from devtools. It greps all binaries/libraries on your system to see if ldd returns "not found" errors, then lists the packages that provide any/each broken things.