Created attachment 876263 [details] emerge --info output Setting the glslang flag causes the merge to fail during the abi_x86_32 configure stage. Build proceeds as usual without errors with USE=-glslang. Current USE="X alsa cpudetection dav1d doc encode gpl iconv lcms libdrm lv2 mp3 network opencl opengl openssl postproc pulseaudio sdl svg threads truetype vaapi vorbis vulkan x264 x265 xvid zlib" ABI_X86="32 64" Relevant portion of config.log: test_cc BEGIN /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.c 1 #include <glslang/Include/glslang_c_interface.h> 2 #include <stdint.h> 3 long check_glslang_initialize_process(void) { return (long) glslang_initialize_process; } 4 int main(void) { int ret = 0; 5 ret |= ((intptr_t)check_glslang_initialize_process) & 0xFFFF; 6 return ret; } END /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.c gcc -m32 -mfpmath=sse -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -march=bdver2 -O2 -ftree-vectorize -fsched-pressure -march=bdver2 -std=c11 -fPIC -pthread -I/usr/include/lilv-0 -I/usr/include/serd-0 -I/usr/include/sord-0 -I/usr/include/sratom-0 -I/usr/include/libdrm -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -c -o /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.o /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.c gcc -m32 -mfpmath=sse -Wl,--as-needed,-O2 -fuse-ld=lld -march=bdver2 -Wl,--as-needed -Wl,-z,noexecstack -o /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.o -lglslang -lMachineIndependent -lOSDependent -lHLSL -lOGLCompiler -lGenericCodeGen -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm ld.lld: error: unable to find library -lSPIRV-Tools-opt ld.lld: error: unable to find library -lSPIRV-Tools collect2: error: ld returned 1 exit status require spirv_compiler glslang/Include/glslang_c_interface.h glslang_initialize_process -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm check_lib spirv_compiler glslang/Include/glslang_c_interface.h glslang_initialize_process -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm check_func_headers glslang/Include/glslang_c_interface.h glslang_initialize_process -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm test_ld cc -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm test_cc BEGIN /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.c 1 #include <glslang/Include/glslang_c_interface.h> 2 #include <stdint.h> 3 long check_glslang_initialize_process(void) { return (long) glslang_initialize_process; } 4 int main(void) { int ret = 0; 5 ret |= ((intptr_t)check_glslang_initialize_process) & 0xFFFF; 6 return ret; } END /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.c gcc -m32 -mfpmath=sse -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -march=bdver2 -O2 -ftree-vectorize -fsched-pressure -march=bdver2 -std=c11 -fPIC -pthread -I/usr/include/lilv-0 -I/usr/include/serd-0 -I/usr/include/sord-0 -I/usr/include/sratom-0 -I/usr/include/libdrm -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -c -o /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.o /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.c gcc -m32 -mfpmath=sse -Wl,--as-needed,-O2 -fuse-ld=lld -march=bdver2 -Wl,--as-needed -Wl,-z,noexecstack -o /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test /tmp/portage/media-video/ffmpeg-6.1/temp/ffconf.OyvtunbL/test.o -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ -lm ld.lld: error: unable to find library -lSPIRV-Tools-opt ld.lld: error: unable to find library -lSPIRV-Tools collect2: error: ld returned 1 exit status ERROR: spirv_compiler not found Did some digging, dev-util/spirv-tools was installed but only for ABI_X86_64. Rebuilt it for both 32 and 64 bits and merge proceeded normally with USE=glslang. I'm guessing a missing multilib dependency in the ebuild?
Please include the full build.log and in this case also the full config.log
Created attachment 876276 [details] emerge log
Created attachment 876277 [details] config.log
*** Bug 922449 has been marked as a duplicate of this bug. ***
Maybe it helps, I found this forum entry: https://www.linuxquestions.org/questions/slackware-14/regression-on-current-with-ffmpeg-4175728462/ And this ffmpeg mailing list entry: https://ffmpeg.org/pipermail/ffmpeg-devel/2024-January/319892.html I tried ffmpeg-9999 in hope that the patch is included (I did not check it; the build fails with the same error btw) and I noticed we don't have glslang 14 on gentoo, which is the version the mailing list entry talks about. So I tried to unmask glslang-9999 and got into a big web of masked vulkan and spirv packages and couldn't untangle it to try out if more recent software solves the problem. It ffmpeg worked with glslang-1.3.268, but that cannot be installed while simultaneously having llvm-17, because dev-util/spirv-llvm-translator-17.0.0-r2 requires glslang-1.3.275. An older ebuild of spirv-llvm-translator-17.0.0 (was it -r1?) worked with glslang-1.3.268 but was removed from the portage tree.
Thanks Mark, patch from https://ffmpeg.org/pipermail/ffmpeg-devel/2024-January/319892.html did work for me with ffmpeg-6.1.1-r2
That patch does the trick, thank you.
Created attachment 886244 [details, diff] patch from the ffmpeg ML please add the patch, it also works with (and is required for) -r4
had the same issue with ffmppeg-6.6.1-r5 and applied to /etc/portage/patches fixed the issue. this is pretty old surprised it hasn't been addressed
...and media-video/ffmpeg-6.1.1-r5 was somehow stabilized despite this...:sigh:... You could add bug 922333 to duplicates. The relevant upstream commit (only on 7.0 branch and later) is https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/e43615fc2ab27d562ed7e087803f4a364a7d1175.
...however that commit is still incorrect, at least for Gentoo. MachineIndependent and GenericCodeGen are only built as separate libs when glslang isn't built as a shared library. ffmpeg upstream should be notified about this, if they're not aware yet (I don't see any more recent commits on this topic).
So, first of all, I can confirm the bug. Next, the bug persisted also with ffmpeg-6.1.1-r5, r6 and now r8. Finally, I fixed it by creating a patch (glslang.patch), putting it in the files dir, and adding a line in the ebuild to call it. With the patch, all versions compile and, so far, work quite well for me.
Created attachment 898462 [details] Ebuild for ffmpeg-6.1.1-r8 including the call to the patch (see comment 12)
Created attachment 898463 [details, diff] Patch called by the ebuild for ffmpeg-6.1.1-r8
I just noticed my patch is almost identical to the one first uploaded by Mark in January! Oops... :) Kudos to Mark, I guess.