From b250b7a3e0c9385d3f73e6b496d4f6cf7886f22c Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Fri, 6 Jan 2012 15:01:16 +0100
Subject: [PATCH] Introduced Find cmake script and enabled OGS_PROFILE option.

---
 CMakeLists.txt                    | 19 ++++++++++++-------
 scripts/cmake/CompilerSetup.cmake | 27 ++++++++++++++++-----------
 scripts/cmake/Find.cmake          | 26 ++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 18 deletions(-)
 create mode 100644 scripts/cmake/Find.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d2b49da461..640161747aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,7 @@
+#####################
+### OGS-6 Project ###
+#####################
+
 # Specify minimum CMake version
 cmake_minimum_required(VERSION 2.6)
 
@@ -7,15 +11,16 @@ project( OGS-6 )
 ### CMake includes ###
 INCLUDE(scripts/cmake/CMakeSetup.cmake)
 INCLUDE(scripts/cmake/CompilerSetup.cmake)
+INCLUDE(scripts/cmake/Find.cmake)
 
-# Finds
-FIND_PACKAGE(OpenMP)
-IF(OPENMP_FOUND)
-	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
-	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-ENDIF()
-
+###############
+### Options ###
+###############
 
+# Profiling
+IF((CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) AND GPROF_PATH)
+	OPTION(OGS_PROFILE "Enables compiling with flags set for profiling with gprof." OFF)
+ENDIF() # GCC AND GPROF_PATH
 
 # Set build directories
 SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin )
diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake
index 927dfcbde3d..a8beb71af65 100644
--- a/scripts/cmake/CompilerSetup.cmake
+++ b/scripts/cmake/CompilerSetup.cmake
@@ -3,7 +3,7 @@ INCLUDE(SetDefaultBuildType)
 SET_DEFAULT_BUILD_TYPE(Debug)
 INCLUDE(MSVCMultipleProcessCompile) # /MP switch (multi processor) for VS
 
-### GNU C/CXX
+### GNU C/CXX compiler
 IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
 		get_gcc_version(GCC_VERSION)
         IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" )
@@ -19,16 +19,9 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
         # -g
         SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall -Wextra -fno-nonansi-builtins")
         ADD_DEFINITIONS( -DGCC )
-		IF (OGS_PROFILE)
-			IF( NOT CMAKE_BUILD_TYPE STREQUAL "Release" )
-				MESSAGE(Warning "When using profiling you should set CMAKE_BUILD_TYPE to Release.")
-			ENDIF()
-			SET(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG -fno-inline-functions-called-once -fno-optimize-sibling-calls")
-			SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}")
-		ENDIF (OGS_PROFILE)
 ENDIF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
 
-### Intel
+### Intel compiler
 IF (${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES "icpc.*$")
         IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" )
                 MESSAGE(STATUS "Set Intel release flags")
@@ -39,6 +32,19 @@ IF (${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES "icpc.
 ENDIF(${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES
 "icpc.*$")
 
+# Profiling
+IF (OGS_PROFILE)
+	IF( NOT CMAKE_BUILD_TYPE STREQUAL "Release" )
+		MESSAGE(STATUS "When using profiling you should set CMAKE_BUILD_TYPE to Release.")
+	ENDIF()
+	SET(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG")
+	# clang compiler does not know the following flags
+	IF(CMAKE_CXX_COMPILER MATCHES "!clang")
+		SET(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once -fno-optimize-sibling-calls")
+	ENDIF()
+	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}")
+ENDIF (OGS_PROFILE)
+
 ### Windows
 IF (WIN32)
 	## For Visual Studio compiler
@@ -47,10 +53,9 @@ IF (WIN32)
 			-D_CRT_XNONSTDC_NO_WARNINGS)
 		# Sets warning level 3 and ignores some warnings
 		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /wd4290 /wd4267")
-		SET(GCC OFF)
 	# cygwin
 	ELSE (MSVC)
 		MESSAGE (STATUS "Might be GCC under cygwin.")
-		SET(GCC ON)
+		ADD_DEFINITIONS( -DGCC )
 	ENDIF (MSVC)
 ENDIF (WIN32)
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
new file mode 100644
index 00000000000..68d15c85434
--- /dev/null
+++ b/scripts/cmake/Find.cmake
@@ -0,0 +1,26 @@
+######################
+### Find tools     ###
+######################
+
+# Find dot tool from graphviz
+FIND_PROGRAM(DOT_TOOL_PATH dot DOC "Dot tool from graphviz")
+
+# Find doxygen
+FIND_PACKAGE(Doxygen)
+
+# Find gnu profiler gprof
+FIND_PROGRAM(GPROF_PATH gprof DOC "GNU profiler gprof")
+
+FIND_PACKAGE(cppcheck)
+
+
+######################
+### Find libraries ###
+######################
+
+FIND_PACKAGE(OpenMP)
+IF(OPENMP_FOUND)
+	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+ENDIF()
+
-- 
GitLab