commit:     144edbafdebe29ac1d2d3edede2385364d740ea6
Author:     listout <listout <AT> protonmail <DOT> com>
AuthorDate: Tue Sep 13 10:20:17 2022 +0000
Commit:     Guilherme Amadio <amadio <AT> gentoo <DOT> org>
CommitDate: Wed Sep 14 14:54:52 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=144edbaf

sci-physics/geant: Fix building on musl, avoid execinfo.h

Avoid including execinfo.h and calling backtrace function on system that
don't provide the header.

Closes: https://bugs.gentoo.org/829151
Closes: https://github.com/gentoo/gentoo/pull/26313
Signed-off-by: brahmajit das <listout <AT> protonmail.com>
Signed-off-by: Guilherme Amadio <amadio <AT> gentoo.org>

 .../files/geant-4.11.0.2-musl-avoid-execinfo.patch | 100 +++++++++++++++++++++
 sci-physics/geant/geant-4.11.0.2-r1.ebuild         |   4 +
 2 files changed, 104 insertions(+)

diff --git a/sci-physics/geant/files/geant-4.11.0.2-musl-avoid-execinfo.patch 
b/sci-physics/geant/files/geant-4.11.0.2-musl-avoid-execinfo.patch
new file mode 100644
index 000000000000..e73a9c24c597
--- /dev/null
+++ b/sci-physics/geant/files/geant-4.11.0.2-musl-avoid-execinfo.patch
@@ -0,0 +1,100 @@
+# Avoid including execinfo and calling backtrace function when execinfo.h is
+# not present or supplied by system's libc
+#
+# Closes: https://bugs.gentoo.org/829151
+--- a/source/global/management/include/G4Backtrace.hh
++++ b/source/global/management/include/G4Backtrace.hh
+@@ -85,23 +85,6 @@
+ #  endif
+ #endif
+
+-#if defined(G4UNIX) && !defined(WIN32)
+-#  include <cxxabi.h>
+-#  include <execinfo.h>
+-#  include <unistd.h>
+-#endif
+-
+-#if defined(G4LINUX)
+-#  include <features.h>
+-#endif
+-
+-#include <cfenv>
+-#include <csignal>
+-#include <type_traits>
+-
+-template <typename FuncT, typename... ArgTypes>
+-using G4ResultOf_t = std::invoke_result_t<FuncT, ArgTypes...>;
+-
+ // compatible OS and compiler
+ #if defined(G4UNIX) &&                                                        
 \
+   (defined(__GNUC__) || defined(__clang__) || defined(_INTEL_COMPILER))
+@@ -109,7 +92,9 @@ using G4ResultOf_t = std::invoke_result_t<FuncT, 
ArgTypes...>;
+ #    define G4SIGNAL_AVAILABLE
+ #  endif
+ #  if !defined(G4DEMANGLE_AVAILABLE)
+-#    define G4DEMANGLE_AVAILABLE
++#    if defined(G4UNIX) && defined(HAVE_EXECINFO_H)
++#       define G4DEMANGLE_AVAILABLE
++#    endif
+ #  endif
+ #endif
+
+@@ -121,6 +106,25 @@ using G4ResultOf_t = std::invoke_result_t<FuncT, 
ArgTypes...>;
+ #  endif
+ #endif
+
++#if defined(G4UNIX) && !defined(WIN32)
++#  include <cxxabi.h>
++#if defined(HAVE_EXECINFO_H)
++#  include <execinfo.h>
++#endif
++#  include <unistd.h>
++#endif
++
++#if defined(G4LINUX)
++#  include <features.h>
++#endif
++
++#include <cfenv>
++#include <csignal>
++#include <type_traits>
++
++template <typename FuncT, typename... ArgTypes>
++using G4ResultOf_t = std::invoke_result_t<FuncT, ArgTypes...>;
++
+ 
//----------------------------------------------------------------------------//
+
+ inline G4String G4Demangle(const char* _str)
+@@ -368,6 +372,7 @@ G4Backtrace::GetMangled(FuncT&& func)
+   std::array<type, Depth> btrace;
+   btrace.fill((std::is_pointer<type>::value) ? nullptr : type{});
+
++#if defined(G4DEMANGLE_AVAILABLE)
+   // plus one for this stack-frame
+   std::array<void*, Depth + Offset> buffer;
+   // size of returned buffer
+@@ -387,6 +392,7 @@ G4Backtrace::GetMangled(FuncT&& func)
+       btrace[i] = func(bsym[i]);
+     free(bsym);
+   }
++#endif
+   return btrace;
+ }
+
+--- a/source/global/management/sources.cmake
++++ b/source/global/management/sources.cmake
+@@ -6,6 +6,14 @@ set(G4MULTITHREADED ${GEANT4_BUILD_MULTITHREADED})
+ set(G4_STORE_TRAJECTORY ${GEANT4_BUILD_STORE_TRAJECTORY})
+ set(G4VERBOSE ${GEANT4_BUILD_VERBOSE_CODE})
+
++include(CheckIncludeFile)
++
++check_include_file(execinfo.h HAVE_EXECINFO_H)
++
++if(HAVE_SYS_TYPES_H)
++      list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_EXECINFO_H)
++endif()
++
+ configure_file(${CMAKE_CURRENT_LIST_DIR}/include/G4GlobalConfig.hh.in
+   ${CMAKE_CURRENT_BINARY_DIR}/include/G4GlobalConfig.hh)
+

diff --git a/sci-physics/geant/geant-4.11.0.2-r1.ebuild 
b/sci-physics/geant/geant-4.11.0.2-r1.ebuild
index 1eaf3d9af34b..e43a735dfdc4 100644
--- a/sci-physics/geant/geant-4.11.0.2-r1.ebuild
+++ b/sci-physics/geant/geant-4.11.0.2-r1.ebuild
@@ -75,6 +75,10 @@ RDEPEND="
 
 S="${WORKDIR}/${MY_P}"
 
+PATCHES=(
+       "${FILESDIR}"/${PN}-4.11.0.2-musl-avoid-execinfo.patch
+)
+
 src_configure() {
        local mycmakeargs=(
                -DCMAKE_INSTALL_DATADIR="${EPREFIX}/usr/share/geant4"

Reply via email to