Commit 6dcb26d21ed116016f0f3ee7630f532a70a66b79

Authored by Jay Berkenbilt
1 parent 198b9647

Fix test for whether atomic library is needed

Some platforms need it for atomic<long long> but not for atomic<int>.
CMakeLists.txt
@@ -154,6 +154,7 @@ if(WIN32 AND NOT SKIP_OS_SECURE_RANDOM) @@ -154,6 +154,7 @@ if(WIN32 AND NOT SKIP_OS_SECURE_RANDOM)
154 endif() 154 endif()
155 155
156 include(CheckCXXSourceCompiles) 156 include(CheckCXXSourceCompiles)
  157 +set(ATOMIC_LIBRARY)
157 function(check_atomic) 158 function(check_atomic)
158 foreach(I 0 1) 159 foreach(I 0 1)
159 if(I) 160 if(I)
@@ -162,8 +163,8 @@ function(check_atomic) @@ -162,8 +163,8 @@ function(check_atomic)
162 check_cxx_source_compiles( 163 check_cxx_source_compiles(
163 "#include <atomic> 164 "#include <atomic>
164 int main() { 165 int main() {
165 - static std::atomic<int> a{0};  
166 - a = a.fetch_add(1); 166 + static std::atomic<unsigned long long> a{0};
  167 + a = a.fetch_add(1LL);
167 return 0; 168 return 0;
168 }" 169 }"
169 ATOMIC_WORKED${I}) 170 ATOMIC_WORKED${I})
@@ -172,7 +173,7 @@ int main() { @@ -172,7 +173,7 @@ int main() {
172 endif() 173 endif()
173 endforeach() 174 endforeach()
174 if(ATOMIC_WORKED1) 175 if(ATOMIC_WORKED1)
175 - list(APPEND CMAKE_REQUIRED_LIBRARIES atomic) 176 + set(ATOMIC_WORKED1 atomic PARENT_SCOPE)
176 endif() 177 endif()
177 endfunction() 178 endfunction()
178 check_atomic() 179 check_atomic()
libqpdf/CMakeLists.txt
@@ -410,6 +410,9 @@ target_include_directories(${OBJECT_LIB} @@ -410,6 +410,9 @@ target_include_directories(${OBJECT_LIB}
410 ${CMAKE_CURRENT_BINARY_DIR}) 410 ${CMAKE_CURRENT_BINARY_DIR})
411 target_link_directories(${OBJECT_LIB} INTERFACE ${dep_link_directories}) 411 target_link_directories(${OBJECT_LIB} INTERFACE ${dep_link_directories})
412 target_link_libraries(${OBJECT_LIB} INTERFACE ${dep_link_libraries}) 412 target_link_libraries(${OBJECT_LIB} INTERFACE ${dep_link_libraries})
  413 +if(ATOMIC_LIBRARY)
  414 + target_link_libraries(${OBJECT_LIB} INTERFACE ${ATOMIC_LIBRARY})
  415 +endif()
413 416
414 set(LD_VERSION_FLAGS "") 417 set(LD_VERSION_FLAGS "")
415 function(ld_version_script) 418 function(ld_version_script)
@@ -490,6 +493,9 @@ if(BUILD_SHARED_LIBS) @@ -490,6 +493,9 @@ if(BUILD_SHARED_LIBS)
490 $<INSTALL_INTERFACE:include>) 493 $<INSTALL_INTERFACE:include>)
491 target_link_directories(${SHARED_LIB} PRIVATE ${dep_link_directories}) 494 target_link_directories(${SHARED_LIB} PRIVATE ${dep_link_directories})
492 target_link_libraries(${SHARED_LIB} PRIVATE ${dep_link_libraries}) 495 target_link_libraries(${SHARED_LIB} PRIVATE ${dep_link_libraries})
  496 + if(ATOMIC_LIBRARY)
  497 + target_link_libraries(${SHARED_LIB} PRIVATE ${ATOMIC_LIBRARY})
  498 + endif()
493 if(LD_VERSION_FLAGS) 499 if(LD_VERSION_FLAGS)
494 target_link_options(${SHARED_LIB} PRIVATE ${LD_VERSION_FLAGS}) 500 target_link_options(${SHARED_LIB} PRIVATE ${LD_VERSION_FLAGS})
495 endif() 501 endif()
@@ -527,6 +533,9 @@ if(BUILD_STATIC_LIBS) @@ -527,6 +533,9 @@ if(BUILD_STATIC_LIBS)
527 INTERFACE $<BUILD_INTERFACE:${dep_link_directories}> 533 INTERFACE $<BUILD_INTERFACE:${dep_link_directories}>
528 PRIVATE $<INSTALL_INTERFACE:${dep_link_directories}>) 534 PRIVATE $<INSTALL_INTERFACE:${dep_link_directories}>)
529 target_link_libraries(${STATIC_LIB} INTERFACE ${dep_link_libraries}) 535 target_link_libraries(${STATIC_LIB} INTERFACE ${dep_link_libraries})
  536 + if(ATOMIC_LIBRARY)
  537 + target_link_libraries(${STATIC_LIB} INTERFACE ${ATOMIC_LIBRARY})
  538 + endif()
530 539
531 # Avoid name clashes on Windows with the the DLL import library. 540 # Avoid name clashes on Windows with the the DLL import library.
532 if(NOT DEFINED STATIC_SUFFIX AND BUILD_SHARED_LIBS) 541 if(NOT DEFINED STATIC_SUFFIX AND BUILD_SHARED_LIBS)