From 6dcb26d21ed116016f0f3ee7630f532a70a66b79 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 19 Mar 2022 18:19:44 -0400 Subject: [PATCH] Fix test for whether atomic library is needed Some platforms need it for atomic but not for atomic. --- CMakeLists.txt | 7 ++++--- libqpdf/CMakeLists.txt | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d58f76c9..33ff69aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,6 +154,7 @@ if(WIN32 AND NOT SKIP_OS_SECURE_RANDOM) endif() include(CheckCXXSourceCompiles) +set(ATOMIC_LIBRARY) function(check_atomic) foreach(I 0 1) if(I) @@ -162,8 +163,8 @@ function(check_atomic) check_cxx_source_compiles( "#include int main() { - static std::atomic a{0}; - a = a.fetch_add(1); + static std::atomic a{0}; + a = a.fetch_add(1LL); return 0; }" ATOMIC_WORKED${I}) @@ -172,7 +173,7 @@ int main() { endif() endforeach() if(ATOMIC_WORKED1) - list(APPEND CMAKE_REQUIRED_LIBRARIES atomic) + set(ATOMIC_WORKED1 atomic PARENT_SCOPE) endif() endfunction() check_atomic() diff --git a/libqpdf/CMakeLists.txt b/libqpdf/CMakeLists.txt index c5525db2..0875ccd4 100644 --- a/libqpdf/CMakeLists.txt +++ b/libqpdf/CMakeLists.txt @@ -410,6 +410,9 @@ target_include_directories(${OBJECT_LIB} ${CMAKE_CURRENT_BINARY_DIR}) target_link_directories(${OBJECT_LIB} INTERFACE ${dep_link_directories}) target_link_libraries(${OBJECT_LIB} INTERFACE ${dep_link_libraries}) +if(ATOMIC_LIBRARY) + target_link_libraries(${OBJECT_LIB} INTERFACE ${ATOMIC_LIBRARY}) +endif() set(LD_VERSION_FLAGS "") function(ld_version_script) @@ -490,6 +493,9 @@ if(BUILD_SHARED_LIBS) $) target_link_directories(${SHARED_LIB} PRIVATE ${dep_link_directories}) target_link_libraries(${SHARED_LIB} PRIVATE ${dep_link_libraries}) + if(ATOMIC_LIBRARY) + target_link_libraries(${SHARED_LIB} PRIVATE ${ATOMIC_LIBRARY}) + endif() if(LD_VERSION_FLAGS) target_link_options(${SHARED_LIB} PRIVATE ${LD_VERSION_FLAGS}) endif() @@ -527,6 +533,9 @@ if(BUILD_STATIC_LIBS) INTERFACE $ PRIVATE $) target_link_libraries(${STATIC_LIB} INTERFACE ${dep_link_libraries}) + if(ATOMIC_LIBRARY) + target_link_libraries(${STATIC_LIB} INTERFACE ${ATOMIC_LIBRARY}) + endif() # Avoid name clashes on Windows with the the DLL import library. if(NOT DEFINED STATIC_SUFFIX AND BUILD_SHARED_LIBS)