if(MINGW)
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40838
# here we are trying to workaround the problem
- include(CheckCXXCompilerFlag)
- CHECK_CXX_COMPILER_FLAG(-mstackrealign HAVE_STACKREALIGN_FLAG)
- if(HAVE_STACKREALIGN_FLAG)
- set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} -mstackrealign")
- else()
- CHECK_CXX_COMPILER_FLAG(-mpreferred-stack-boundary=2 HAVE_PREFERRED_STACKBOUNDARY_FLAG)
- if(HAVE_PREFERRED_STACKBOUNDARY_FLAG)
- set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} -mstackrealign")
- endif()
+ add_extra_compiler_option(-mstackrealign)
+ if(NOT HAVE_CXX_MSTACKREALIGN)
+ add_extra_compiler_option(-mpreferred-stack-boundary=2)
endif()
endif()
endforeach()
endmacro()
-
-include(CheckCXXCompilerFlag)
-include(CheckCCompilerFlag)
+set(OCV_COMPILER_FAIL_REGEX
+ "command line option .* is valid for .* but not for C\\+\\+" # GNU
+ "unrecognized .*option" # GNU
+ "unknown .*option" # Clang
+ "ignoring unknown option" # MSVC
+ "warning D9002" # MSVC, any lang
+ "option .*not supported" # Intel
+ "[Uu]nknown option" # HP
+ "[Ww]arning: [Oo]ption" # SunPro
+ "command option .* is not recognized" # XL
+ "not supported in this configuration; ignored" # AIX
+ "File with unknown suffix passed to linker" # PGI
+ "WARNING: unknown flag:" # Open64
+ )
+
+MACRO(ocv_check_compiler_flag LANG FLAG RESULT)
+ if("_${LANG}_" MATCHES "_CXX_")
+ set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx")
+ FILE(WRITE "${_fname}" "int main() { return 0;}\n")
+ elseif("_${LANG}_" MATCHES "_C_")
+ set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c")
+ FILE(WRITE "${_fname}" "int main(void) { return 0;}\n")
+ else()
+ unset(_fname)
+ endif()
+ if(_fname)
+ MESSAGE(STATUS "Performing Test ${RESULT}")
+ TRY_COMPILE(${RESULT}
+ ${CMAKE_BINARY_DIR}
+ "${_fname}"
+ COMPILE_DEFINITIONS "${FLAG}"
+ OUTPUT_VARIABLE OUTPUT)
+
+ FOREACH(_regex ${OCV_COMPILER_FAIL_REGEX})
+ IF("${OUTPUT}" MATCHES "${_regex}")
+ SET(${RESULT} 0)
+ break()
+ ENDIF()
+ ENDFOREACH()
+
+ IF(${RESULT})
+ SET(${RESULT} 1 CACHE INTERNAL "Test ${RESULT}")
+ MESSAGE(STATUS "Performing Test ${RESULT} - Success")
+ ELSE(${RESULT})
+ MESSAGE(STATUS "Performing Test ${RESULT} - Failed")
+ SET(${RESULT} "" CACHE INTERNAL "Test ${RESULT}")
+ ENDIF(${RESULT})
+ else()
+ SET(${RESULT} 0)
+ endif()
+ENDMACRO()
macro(ocv_check_flag_support lang flag varname)
if("_${lang}_" MATCHES "_CXX_")
set(_lang CXX)
- elseif("_${lang}_" MATCHES ".*_C_.*")
+ elseif("_${lang}_" MATCHES "_C_")
set(_lang C)
else()
set(_lang ${lang})
string(REGEX REPLACE "^(/|-)" "HAVE_${_lang}_" ${varname} "${${varname}}")
string(REGEX REPLACE " -|-|=| |\\." "_" ${varname} "${${varname}}")
- if(_lang STREQUAL "CXX")
- CHECK_CXX_COMPILER_FLAG("${ARGN} ${flag}" ${${varname}})
- elseif(_lang STREQUAL "C")
- CHECK_C_COMPILER_FLAG("${ARGN} ${flag}" ${${varname}})
- else()
- set(${varname} FALSE)
- endif()
+ ocv_check_compiler_flag("${_lang}" "${ARGN} ${flag}" ${${varname}})
endmacro()
# turns off warnings