CMake: Link xz against Threads::Threads if using pthreads

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: ac05f1b0d7
Fixes: https://github.com/tukaani-project/xz/issues/129#issuecomment-2204522994
(cherry picked from commit b3e53122f4)
This commit is contained in:
Lasse Collin 2024-07-03 20:45:48 +03:00
parent eccb4d258b
commit 07f52c3528
No known key found for this signature in database
GPG Key ID: 38EE757D69184620
1 changed files with 13 additions and 0 deletions

View File

@ -1776,6 +1776,19 @@ if(NOT MSVC OR MSVC_VERSION GREATER_EQUAL 1900)
target_link_libraries(xz PRIVATE liblzma libgnu) 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) target_compile_definitions(xz PRIVATE ASSUME_RAM=128)
if(WIN32) if(WIN32)