The liblzma target was recently changed to link against Threads::Threads
with the PRIVATE keyword. I had forgotten that xz itself depends on
pthreads too due to pthread_sigmask(). Thus, the build broke when
building shared liblzma and pthread_sigmask() wasn't in libc.
Thanks to Peter Seiderer for the bug report.
Fixes: ac05f1b0d7cda1e7ae79775a8dfecc54601d7f1c
Fixes: https://github.com/tukaani-project/xz/issues/129#issuecomment-2204522994
(cherry picked from commit
b3e53122f42796aaebd767bab920cf7bedf69966)
target_link_libraries(xz PRIVATE liblzma libgnu)
+ if(USE_POSIX_THREADS)
+ # src/xz/signals.c uses mythread_sigmask() which with POSIX
+ # threads calls pthread_sigmask(). Thus, we need the threading
+ # library as a dependency for xz. The liblzma target links against
+ # Threads::Threads PRIVATEly, thus that won't provide the pthreads
+ # symbols for xz.
+ #
+ # NOTE: The build may work without this if the symbol is in libc
+ # but it is mandatory to have this here to keep it working with
+ # all pthread implementations.
+ target_link_libraries(xz PRIVATE Threads::Threads)
+ endif()
+
target_compile_definitions(xz PRIVATE ASSUME_RAM=128)
if(WIN32)