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 <locutusofb...@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
OpenPGP_signature
Description: OpenPGP digital signature