From: Andreas Schneider Date: Tue, 9 Apr 2013 12:11:59 +0000 (+0200) Subject: cmake: Fix check for fortify source. X-Git-Tag: cmocka-1.1.1~237 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8449202e6ad57c1a86097c5cd3d3d26ec5046d68;p=platform%2Fupstream%2Fcmocka.git cmake: Fix check for fortify source. --- diff --git a/cmake/Modules/MacroCheckCCompilerFlagSSP.cmake b/cmake/Modules/CheckCCompilerFlagSSP.cmake similarity index 58% rename from cmake/Modules/MacroCheckCCompilerFlagSSP.cmake rename to cmake/Modules/CheckCCompilerFlagSSP.cmake index b64fb45..2fe4395 100644 --- a/cmake/Modules/MacroCheckCCompilerFlagSSP.cmake +++ b/cmake/Modules/CheckCCompilerFlagSSP.cmake @@ -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. @@ -15,12 +16,11 @@ # 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) diff --git a/cmake/Modules/DefineCompilerFlags.cmake b/cmake/Modules/DefineCompilerFlags.cmake index 239ddeb..aea8128 100644 --- a/cmake/Modules/DefineCompilerFlags.cmake +++ b/cmake/Modules/DefineCompilerFlags.cmake @@ -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