From 492c9456d89d2839263c28f206db70ccd958538a Mon Sep 17 00:00:00 2001
From: Lukas Nellen <lukas@nucleares.unam.mx>
Date: Sun, 28 Feb 2021 20:39:22 -0600
Subject: [PATCH] Detect SCL compiler, deal with old ABI

---
 CMakeLists.txt                            | 4 ++++
 cmake/CorsikaDefines.cmake                | 9 +++++++--
 corsika/detail/framework/core/Logging.inl | 6 ++++++
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6f509f464..fba2a28df 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -80,6 +80,9 @@ set (CMAKE_CXX_EXTENSIONS OFF)
 # FYI: optimizer flags: -O2 would not trade speed for size, neither O2/3 use fast-math
 # debug: O0, relwithdebinfo: 02, release: O3, minsizerel: Os (all defaults)
 set (CMAKE_CXX_FLAGS "-Wall -pedantic -Wextra -Wno-ignored-qualifiers")
+if (CORSIKA_SCL_CXX)
+  add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
+endif()
 set (DEFAULT_BUILD_TYPE "Release")
 
 # clang produces a lot of unecessary warnings without this:
@@ -126,6 +129,7 @@ endif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
 #+++++++++++++++++++++++++++++
 # Setup external dependencies.
 #
+###
 include (conan) # self-provided in 'cmake' directory
 #
 # download and build all dependencies
diff --git a/cmake/CorsikaDefines.cmake b/cmake/CorsikaDefines.cmake
index 30b8fe33c..2019ce2f9 100644
--- a/cmake/CorsikaDefines.cmake
+++ b/cmake/CorsikaDefines.cmake
@@ -14,10 +14,15 @@ endif ()
 #
 if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
     set (CORSIKA_OS_WINDOWS TRUE)
-     set (CORSIKA_OS "Windows")
+    set (CORSIKA_OS "Windows")
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
     set (CORSIKA_OS_LINUX TRUE)
-     set (CORSIKA_OS "Linux")
+    set (CORSIKA_OS "Linux")
+    # check for RedHat/CentOS compiler from the software collections (scl)
+    string (FIND ${CMAKE_CXX_COMPILER} "/opt/rh/devtoolset-" index)
+    if (${index} EQUAL 0)
+      set (CORSIKA_SCL_CXX TRUE)
+    endif ()
 elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
     set (CORSIKA_OS_MAC TRUE)  
     set (CORSIKA_OS "Mac") 
diff --git a/corsika/detail/framework/core/Logging.inl b/corsika/detail/framework/core/Logging.inl
index e99e788b8..9abaa1636 100644
--- a/corsika/detail/framework/core/Logging.inl
+++ b/corsika/detail/framework/core/Logging.inl
@@ -47,7 +47,13 @@ namespace corsika {
     auto logger = spdlog::stdout_color_mt(name);
 
     // set the default C8 format
+#if (!defined(_GLIBCXX_USE_CXX11_ABI) || _GLIBCXX_USE_CXX11_ABI == 1)
     logger->set_pattern(logging::default_pattern);
+#else
+    // special case: gcc from the software collections devtoolset
+    std::string dp(default_pattern);
+    logger->set_pattern(dp);
+#endif
 
     // if defaultlog is True, we set this as the default spdlog logger.
     if (defaultlog) { spdlog::set_default_logger(logger); }
-- 
GitLab