Skip to content

Commit

Permalink
CMake: Link xz against Threads::Threads if using pthreads
Browse files Browse the repository at this point in the history
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: ac05f1b
Fixes: #129 (comment)
  • Loading branch information
Larhzu committed Jul 3, 2024
1 parent 5742ec1 commit b3e5312
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2029,6 +2029,19 @@ if(XZ_TOOL_XZ)

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()

set(XZ_ASSUME_RAM "128" CACHE STRING "Assume that the system has \
this many MiB of RAM if xz cannot determine the amount at runtime")
target_compile_definitions(xz PRIVATE "ASSUME_RAM=${XZ_ASSUME_RAM}")
Expand Down

0 comments on commit b3e5312

Please sign in to comment.