Bug 2345985

Summary: pipewire-jack-audio-connection-kit-libs selected by dnf to provide libjack.so.0, ld.so.conf not included
Product: [Fedora] Fedora Reporter: Otto Liljalaakso <otto.liljalaakso>
Component: pipewireAssignee: Wim Taymans <wtaymans>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: high Docs Contact:
Priority: unspecified    
Version: 42CC: brunovern.a, code, eclipseo, fweimer, mads, ngompa13, nphilipp, robatino, suraj.ghimire7, wtaymans
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
URL: https://koji.fedoraproject.org/koji/taskinfo?taskID=129180906
Whiteboard:
Fixed In Version: pipewire-1.4.0-2.fc43 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2025-03-07 13:47:55 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2291263    

Description Otto Liljalaakso 2025-02-16 12:48:21 UTC
Recently, dosbox-staging went FTBFS in Rawhide. Failure happens when building the statically linked parts, due to not finding libjack.so.0. Previously, that library came from package jack-audio-connection-kit, but for the failing build, dnf has switched into resolving that dependency with pipewire-jack-audio-connection-kit-libs.

The reason for not finding the shared object is that the pipewire variant puts the shared object under /usr/lib64/pipewire/jack/, which is not searched by default. There is a ld.so.conf file to add it to search path, but that is in another subpackage pipewire-jack-audio-connection-kit, which is not included when dnf automatically resolves the shared object dependency.

Please make it so that when dnf pulls in both shared object and the needed ld.so.conf file.

Reproducible: Always

Steps to Reproduce:
Run 'fedpkg mockbuild' for dosbox-staging.
Actual Results:  
Build fails with errors like:

FAILED: dosbox 
g++  -o dosbox dosbox.p/src_main.cpp.o dosbox.p/src_dosbox.cpp.o dosbox.p/src_libs_ghc_fs_std_impl.cpp.o -Wl,--as-needed -Wl,--no-undefined -Wl,-Map,dosbox.map -Wl,--Map,dosbox.map -rdynamic -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wl,--start-group src/misc/libmisc.a src/libs/loguru/libloguru.a src/libs/whereami/libwhereami.a src/capture/libcapture.a src/libs/zmbv/libzmbv.a src/cpu/libcpu.a src/dos/libdos.a src/libs/decoders/libdecoders.a src/fpu/libfpu.a src/gui/libgui.a src/hardware/libhardware.a src/libs/ESFMu/libesfmu.a src/libs/nuked/libnuked.a src/libs/residfp/libresidfp.a src/libs/YM7128B_emu/libym7128bemu.a src/ints/libints.a src/midi/libmidi.a src/shell/libshell.a src/libs/tal-chorus/libtalchorus.a src/libs/manymouse/libmanymouse.a -latomic -lstdc++fs /usr/lib64/libSDL2.so -pthread /usr/lib64/libiir.so /usr/lib64/libslirp.so /usr/lib64/libglib-2.0.so -lstdc++fs -ldl /usr/lib64/libpng16.so /usr/lib64/libz.so /usr/lib64/libSDL2_net.so /usr/lib64/libopusfile.so /usr/lib64/libGL.so /usr/lib64/libspeexdsp.so /usr/lib64/libfluidsynth.so /usr/lib64/libmt32emu.so /usr/lib64/libasound.so /usr/lib64/libXi.so -Wl,--end-group
/usr/bin/ld: warning: libjack.so.0, needed by /usr/lib64/libfluidsynth.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_set_buffer_size_callback'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_activate'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_port_get_buffer'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_port_register'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_set_process_callback'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_on_shutdown'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_client_close'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_set_port_registration_callback'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_get_sample_rate'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_get_ports'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_client_open'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_free'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_port_name'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_connect'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_set_sample_rate_callback'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_midi_event_get'
/usr/bin/ld: /usr/lib64/libfluidsynth.so: undefined reference to `jack_midi_get_event_count'
collect2: error: ld returned 1 exit status

Expected Results:  
Build succeeds

Failing build: https://koji.fedoraproject.org/koji/taskinfo?taskID=129180906
Koschei's view on changed dependency resolution: https://koschei.fedoraproject.org/package/dosbox-staging?collection=f43

Comment 1 Nils Philippsen 2025-02-17 00:20:48 UTC
I experience the same issue with ardour8 failing to build, see here: https://src.fedoraproject.org/rpms/ardour8/pull-request/1

I can confirm that with the ld.so.conf file present, the package builds.

Comment 2 Robert-André Mauchin 🐧 2025-02-18 02:07:16 UTC
https://src.fedoraproject.org/rpms/pipewire/pull-request/30

Comment 3 Neal Gompa 2025-03-04 16:45:27 UTC
I've made adjustments and submitted PRs for this across all affected Fedora releases:

- rawhide: https://src.fedoraproject.org/rpms/pipewire/pull-request/31
- f42: https://src.fedoraproject.org/rpms/pipewire/pull-request/32
- f41: https://src.fedoraproject.org/rpms/pipewire/pull-request/33
- f40: https://src.fedoraproject.org/rpms/pipewire/pull-request/34

This needs to land asap because it's breaking KDE too.

Comment 4 Fedora Blocker Bugs Application 2025-03-04 16:46:30 UTC
Proposed as a Blocker for 42-beta by Fedora user ngompa using the blocker tracking app because:

 This is breaking builds and creating incoherent runtime issues with packages that link to libjack.

Comment 5 Neal Gompa 2025-03-06 13:42:57 UTC
*** Bug 2263486 has been marked as a duplicate of this bug. ***

Comment 6 Neal Gompa 2025-03-06 14:06:25 UTC
I've updated my PRs to install libjack to the default library location to just eliminate this wonkiness.

Comment 7 Fedora Update System 2025-03-07 12:12:15 UTC
FEDORA-2025-1da71d2444 (pipewire-1.4.0-2.fc43) has been submitted as an update to Fedora 43.
https://bodhi.fedoraproject.org/updates/FEDORA-2025-1da71d2444

Comment 8 Wim Taymans 2025-03-07 12:16:05 UTC
JACK2 and pipewire-jack need to be installable at the same time or else a required feature
of having jack2 as a pipewire backend can't be done anymore. This excludes having the same
libjack.so location.

The only solution then is to always install the ld.so.conf file when the -libs are pulled
in. I'm making a build with the ld.so.conf moved to the -libs package but I probably prefer
to just install the pipewire-jack-audio-connection-kit package as a Requires, like the patch
from Robert-Andre.

Doing this breaks the ability to choose where to run a jack application in case JACK2 is
installed as well (using pw-jack to send it to pipewire, otherwise it goes to JACK2). I think
this is an acceptable breakage, I don't know anyone who does or wants to do that. We could
eventually fix this again if we allow swapping between jack2 for
pipewire-jack-audio-connection-kit (like we do for the pulseaudio server), but I don't want to
spend much time thinking about that niche case.

Comment 9 Fedora Update System 2025-03-07 13:47:55 UTC
FEDORA-2025-1da71d2444 (pipewire-1.4.0-2.fc43) has been pushed to the Fedora 43 stable repository.
If problem still persists, please make note of it in this bug report.