From 5e3b5a39c8d8c2e3cd6e2531b879ef9966ab8c08 Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Wed, 29 Jul 2020 09:44:26 +0200
Subject: [PATCH] add cmake macro to setup compiler flags

In particular: we want to set -std=c++11 for older gcc versions
---
 CMakeLists.txt             |  2 ++
 cmake_support/QMEAN2.cmake | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 67dd807..a5546a9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -61,6 +61,8 @@ endif()
 
 file(MAKE_DIRECTORY ${STAGE_DIR} ${HEADER_STAGE_PATH} ${LIB_STAGE_PATH})
 
+setup_compiler_flags()
+
 # Python needed before Boost
 find_package(Python 3.6.0 REQUIRED)
 # Split version string
diff --git a/cmake_support/QMEAN2.cmake b/cmake_support/QMEAN2.cmake
index 38dd051..6d61230 100644
--- a/cmake_support/QMEAN2.cmake
+++ b/cmake_support/QMEAN2.cmake
@@ -899,3 +899,36 @@ macro(find_path_recursive VARIABLE)
     set(_fst_subs ${_tmp_dlist})
   endwhile(_fst_subs)
 endmacro(find_path_recursive)
+
+
+function(get_compiler_version _OUTPUT_VERSION)
+  exec_program(${CMAKE_CXX_COMPILER}
+               ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
+               OUTPUT_VARIABLE _COMPILER_VERSION
+  )
+  string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
+    _COMPILER_VERSION ${_COMPILER_VERSION})
+
+  set(${_OUTPUT_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE)
+endfunction(get_compiler_version)
+
+
+macro(setup_compiler_flags)
+  if(CMAKE_COMPILER_IS_GNUCXX)
+    get_compiler_version(_GCC_VERSION)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
+    if(_GCC_VERSION MATCHES "44")
+      # gcc 4.4. is very strict about aliasing rules. the shared_count
+      # implementation that is used boost's shared_ptr violates these rules. To
+      # silence the warnings and prevent miscompiles, enable
+      #  -fno-strict-aliasing
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing" )
+    endif()
+    #message(STATUS "GCC VERSION " ${_GCC_VERSION})
+    if (_GCC_VERSION LESS "60")
+      # for older compilers we need to enable C++11
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+    endif()
+  endif()
+endmacro(setup_compiler_flags)
+
-- 
GitLab