[Debian-pan-maintainers] Bug#1030295: tomopy: please fix build on atomic architectures

Gianfranco Costamagna locutusofborg at debian.org
Thu Feb 2 07:28:42 GMT 2023


Source: tomopy
Version: 1.10.4+ds1-7
tags: patch

Hello, looks like tomopy is FTBFS on architectures where libatomic is needed

I created a patch from CheckAtomic.cmake (cmake-extras-modules package), and I plan to submit upstream

diff -Nru tomopy-1.10.4+ds1/debian/patches/fix-build.patch tomopy-1.10.4+ds1/debian/patches/fix-build.patch
--- tomopy-1.10.4+ds1/debian/patches/fix-build.patch	1970-01-01 00:00:00.000000000 +0000
+++ tomopy-1.10.4+ds1/debian/patches/fix-build.patch	2023-02-01 10:07:39.000000000 +0000
@@ -0,0 +1,146 @@
+Description: Link with latomic where needed
+Author: Gianfranco Costamagna <locutusofborg at debian.org>
+Bug-Debian: https://bugs.debian.org/
+Forwarded:
+Last-Update: 2023-02-01
+
+Index: tomopy-1.10.4+ds1/CMakeLists.txt
+===================================================================
+--- tomopy-1.10.4+ds1.orig/CMakeLists.txt
++++ tomopy-1.10.4+ds1/CMakeLists.txt
+@@ -40,6 +40,7 @@
+ include(BuildSettings)
+ include(Packages)
+ include(ClangFormat)
++include(CheckAtomic)
+
+ ################################################################################
+ #   tomopy source
+Index: tomopy-1.10.4+ds1/PTL/cmake/Modules/Packages.cmake
+===================================================================
+--- tomopy-1.10.4+ds1.orig/PTL/cmake/Modules/Packages.cmake
++++ tomopy-1.10.4+ds1/PTL/cmake/Modules/Packages.cmake
+@@ -165,6 +165,9 @@
+
+ endif()
+
++if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++    list(APPEND EXTERNAL_LIBRARIES "atomic")
++endif()
+
+ ################################################################################
+ #
+Index: tomopy-1.10.4+ds1/cmake/Modules/CheckAtomic.cmake
+===================================================================
+--- /dev/null
++++ tomopy-1.10.4+ds1/cmake/Modules/CheckAtomic.cmake
+@@ -0,0 +1,95 @@
++# SPDX-FileCopyrightText: 2003-2018 University of Illinois at Urbana-Champaign.
++#
++# SPDX-License-Identifier: BSD-3-Clause
++
++#[=======================================================================[.rst:
++CheckAtomic
++-----------
++
++Check if the compiler supports std:atomic out of the box or if libatomic is
++needed for atomic support. If it is needed libatomicis added to
++``CMAKE_REQUIRED_LIBRARIES``. So after running CheckAtomic you can use
++std:atomic.
++
++Since 5.75.0.
++#]=======================================================================]
++
++include(CheckCXXSourceCompiles)
++include(CheckLibraryExists)
++
++# Sometimes linking against libatomic is required for atomic ops, if
++# the platform doesn't support lock-free atomics.
++
++function(check_working_cxx_atomics varname)
++  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
++  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
++  check_cxx_source_compiles("
++  #include <atomic>
++  std::atomic<int> x;
++  std::atomic<short> y;
++  std::atomic<char> z;
++  int main() {
++    ++z;
++    ++y;
++    return ++x;
++  }
++  " ${varname})
++  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++endfunction()
++
++function(check_working_cxx_atomics64 varname)
++  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
++  set(CMAKE_REQUIRED_FLAGS "-std=c++11 ${CMAKE_REQUIRED_FLAGS}")
++  check_cxx_source_compiles("
++  #include <atomic>
++  #include <cstdint>
++  std::atomic<uint64_t> x (0);
++  int main() {
++    uint64_t i = x.load(std::memory_order_relaxed);
++    return 0;
++  }
++  " ${varname})
++  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++endfunction()
++
++# Check for (non-64-bit) atomic operations.
++if(MSVC)
++  set(HAVE_CXX_ATOMICS_WITHOUT_LIB True)
++elseif(LLVM_COMPILER_IS_GCC_COMPATIBLE)
++  # First check if atomics work without the library.
++  check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
++  # If not, check if the library exists, and atomics work with it.
++  if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
++    check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
++    if(HAVE_LIBATOMIC)
++      list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
++      check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)
++      if (NOT HAVE_CXX_ATOMICS_WITH_LIB)
++        message(FATAL_ERROR "Host compiler must support std::atomic!")
++      endif()
++    else()
++      message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")
++    endif()
++  endif()
++endif()
++
++# Check for 64 bit atomic operations.
++if(MSVC)
++  set(HAVE_CXX_ATOMICS64_WITHOUT_LIB True)
++elseif(LLVM_COMPILER_IS_GCC_COMPATIBLE)
++  # First check if atomics work without the library.
++  check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++  # If not, check if the library exists, and atomics work with it.
++  if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++    check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64)
++    if(HAVE_CXX_LIBATOMICS64)
++      list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
++      check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB)
++      if (NOT HAVE_CXX_ATOMICS64_WITH_LIB)
++        message(FATAL_ERROR "Host compiler must support 64-bit std::atomic!")
++      endif()
++    else()
++      message(FATAL_ERROR "Host compiler appears to require libatomic for 64-bit operations, but cannot find it.")
++    endif()
++  endif()
++endif()
+Index: tomopy-1.10.4+ds1/cmake/Modules/Packages.cmake
+===================================================================
+--- tomopy-1.10.4+ds1.orig/cmake/Modules/Packages.cmake
++++ tomopy-1.10.4+ds1/cmake/Modules/Packages.cmake
+@@ -280,6 +280,9 @@
+
+ endif()
+
++if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++    list(APPEND TOMOPY_EXTERNAL_LIBRARIES "atomic")
++endif()
+
+ ################################################################################
+ #
diff -Nru tomopy-1.10.4+ds1/debian/patches/series tomopy-1.10.4+ds1/debian/patches/series
--- tomopy-1.10.4+ds1/debian/patches/series	2023-01-31 10:21:12.000000000 +0000
+++ tomopy-1.10.4+ds1/debian/patches/series	2023-02-01 10:07:39.000000000 +0000
@@ -2,3 +2,4 @@
  0002-Don-t-try-to-git-clone-the-PTL-submodule.patch
  cmake-args.patch
  0004-Check-for-appropriate-version-of-libufo.patch
+fix-build.patch


thanks for considering it,

Gianfranco
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/debian-pan-maintainers/attachments/20230202/85d11af5/attachment-0001.sig>


More information about the Debian-pan-maintainers mailing list