cmake: Fix check for fortify source.
authorAndreas Schneider <asn@cryptomilk.org>
Tue, 9 Apr 2013 12:11:59 +0000 (14:11 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Tue, 9 Apr 2013 12:11:59 +0000 (14:11 +0200)
cmake/Modules/CheckCCompilerFlagSSP.cmake [moved from cmake/Modules/MacroCheckCCompilerFlagSSP.cmake with 58% similarity]
cmake/Modules/DefineCompilerFlags.cmake

similarity index 58%
rename from cmake/Modules/MacroCheckCCompilerFlagSSP.cmake
rename to cmake/Modules/CheckCCompilerFlagSSP.cmake
index b64fb45..2fe4395 100644 (file)
@@ -1,11 +1,12 @@
 # - Check whether the C compiler supports a given flag in the
 # context of a stack checking compiler option.
+
 # CHECK_C_COMPILER_FLAG_SSP(FLAG VARIABLE)
 #
 #  FLAG - the compiler flag
 #  VARIABLE - variable to store the result
-# 
-#  This actually calls the check_c_source_compiles macro.
+#
+#  This actually calls check_c_source_compiles.
 #  See help for CheckCSourceCompiles for a listing of variables
 #  that can modify the build.
 
 # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
 
 
-INCLUDE(CheckCSourceCompiles)
-
-MACRO (CHECK_C_COMPILER_FLAG_SSP _FLAG _RESULT)
-   SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
-   SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
-   CHECK_C_SOURCE_COMPILES("int main(int argc, char **argv) { char buffer[256]; return buffer[argc]=0;}" ${_RESULT})
-   SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
-ENDMACRO (CHECK_C_COMPILER_FLAG_SSP)
+include(CheckCSourceCompiles)
 
+function(CHECK_C_COMPILER_FLAG_SSP _FLAG _RESULT)
+   set(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}")
+   set(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
+   check_c_source_compiles("int main(int argc, char **argv) { char buffer[256]; return buffer[argc]=0;}" ${_RESULT})
+   set(CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
+endfunction(CHECK_C_COMPILER_FLAG_SSP)
index 239ddeb..aea8128 100644 (file)
@@ -1,15 +1,16 @@
 # define system dependent compiler flags
 
 include(CheckCCompilerFlag)
-include(MacroCheckCCompilerFlagSSP)
+include(CheckCCompilerFlagSSP)
 
 if (UNIX AND NOT WIN32)
     #
     # Define GNUCC compiler flags
     #
-    if (${CMAKE_C_COMPILER_ID} MATCHES GNU)
+    if (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
+
         # add -Wconversion ?
-        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -pedantic")
+        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -pedantic -pedantic-errors")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wshadow -Wmissing-prototypes -Wdeclaration-after-statement")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wformat-security")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute")
@@ -25,16 +26,21 @@ if (UNIX AND NOT WIN32)
             set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
         endif (WITH_STACK_PROTECTOR)
 
-        check_c_compiler_flag("-D_FORTIFY_SOURCE=2" WITH_FORTIFY_SOURCE)
-        if (WITH_FORTIFY_SOURCE)
-            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
-        endif (WITH_FORTIFY_SOURCE)
+        if (CMAKE_BUILD_TYPE)
+            string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
+            if (NOT CMAKE_BUILD_TYPE_LOWER MATCHES debug)
+                check_c_compiler_flag("-D_FORTIFY_SOURCE=2" WITH_FORTIFY_SOURCE)
+                if (WITH_FORTIFY_SOURCE)
+                    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
+                endif (WITH_FORTIFY_SOURCE)
+            endif()
+        endif()
 
         check_c_compiler_flag("-D_GNU_SOURCE" WITH_GNU_SOURCE)
         if (WITH_GNU_SOURCE)
             set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
         endif (WITH_GNU_SOURCE)
-    endif (${CMAKE_C_COMPILER_ID} MATCHES GNU)
+    endif (${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
 
     #
     # Check for large filesystem support