File: 0001-Check-if-libatomic-is-needed.patch

package info (click to toggle)
scitokens-cpp 1.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,172 kB
  • sloc: cpp: 11,717; ansic: 596; sh: 161; python: 132; makefile: 22
file content (82 lines) | stat: -rw-r--r-- 2,835 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
From 2404e50c9fe8c5b687b4518caa78d191933361cf Mon Sep 17 00:00:00 2001
From: Mattias Ellert <mattias.ellert@physics.uu.se>
Date: Sun, 1 Feb 2026 10:11:25 +0100
Subject: [PATCH] Check if libatomic is needed

/usr/bin/powerpc-linux-gnu-ld.bfd: CMakeFiles/scitokens-integration-test.dir/integration_test.cpp.o: undefined reference to symbol '__atomic_load_8@@LIBATOMIC_1.0'
/usr/bin/powerpc-linux-gnu-ld.bfd: /usr/lib/powerpc-linux-gnu/libatomic.so.1: error adding symbols: DSO missing from command line
---
 cmake/FindAtomic.cmake | 42 ++++++++++++++++++++++++++++++++++++++++++
 test/CMakeLists.txt    |  3 ++-
 2 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 cmake/FindAtomic.cmake

diff --git a/cmake/FindAtomic.cmake b/cmake/FindAtomic.cmake
new file mode 100644
index 0000000..2848e00
--- /dev/null
+++ b/cmake/FindAtomic.cmake
@@ -0,0 +1,42 @@
+include(CheckSourceCompiles)
+
+function( check_working_cxx_atomics varname )
+  CHECK_SOURCE_COMPILES( CXX "
+    #include <cstdlib>
+    #include <atomic>
+    #include <cstdint>
+
+    int main() {
+      std::atomic<uint8_t> a1;
+      std::atomic<uint16_t> a2;
+      std::atomic<uint32_t> a3;
+      std::atomic<uint64_t> a4;
+      return a1++ + a2++ + a3++ + a4++;
+    }" ${varname}
+  )
+endfunction( check_working_cxx_atomics varname )
+
+set( _found FALSE )
+check_working_cxx_atomics( CXX_ATOMIC_NO_LINK_NEEDED )
+if( CXX_ATOMIC_NO_LINK_NEEDED )
+  set( _found TRUE )
+else()
+  set( OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} )
+  list( APPEND CMAKE_REQUIRED_LIBRARIES "atomic" )
+  check_working_cxx_atomics( HAVE_CXX_ATOMICS_WITH_LIB )
+  set( CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES} )
+  if( HAVE_CXX_ATOMICS_WITH_LIB )
+    set( _found TRUE )
+  endif()
+endif()
+
+add_library( std::atomic INTERFACE IMPORTED )
+
+if( HAVE_CXX_ATOMICS_WITH_LIB )
+  set_property( TARGET std::atomic APPEND PROPERTY INTERFACE_LINK_LIBRARIES atomic )
+endif()
+
+set( Atomic_FOUND ${_found} CACHE BOOL "TRUE if we can run a program using std::atomic" FORCE )
+if( Atomic_FIND_REQUIRED AND NOT Atomic_FOUND )
+    message( FATAL_ERROR "Cannot run simple program using std::atomic" )
+endif()
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 6f1f9a4..b3d4b5f 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -51,11 +51,12 @@ add_test(
   )
 
 # Integration test executable
+find_package( Atomic REQUIRED )
 add_executable(scitokens-integration-test integration_test.cpp)
 if( NOT SCITOKENS_EXTERNAL_GTEST )
     add_dependencies(scitokens-integration-test gtest)
 endif()
-target_link_libraries(scitokens-integration-test SciTokens "${LIBGTEST}" pthread)
+target_link_libraries(scitokens-integration-test SciTokens "${LIBGTEST}" pthread std::atomic)
 
 # Integration test fixture - setup
 add_test(
-- 
2.52.0