From 0b1fe53a467972d25bca84c729c7509a65d60de4 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Tue, 29 Jan 2013 17:08:26 +0400 Subject: [PATCH] Add -fobjc-exceptions flag to ObjectiveC sources if supported (bug #2657) --- cmake/OpenCVUtils.cmake | 9 +++++++++ modules/highgui/CMakeLists.txt | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index 879d332532..f40cc6d19c 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -64,6 +64,13 @@ MACRO(ocv_check_compiler_flag LANG FLAG RESULT) else() FILE(WRITE "${_fname}" "#pragma\nint main(void) { return 0; }\n") endif() + elseif("_${LANG}_" MATCHES "_OBJCXX_") + set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.mm") + if("${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror " OR "${CMAKE_CXX_FLAGS} ${FLAG} " MATCHES "-Werror=unknown-pragmas ") + FILE(WRITE "${_fname}" "int main() { return 0; }\n") + else() + FILE(WRITE "${_fname}" "#pragma\nint main() { return 0; }\n") + endif() else() unset(_fname) endif() @@ -100,6 +107,8 @@ macro(ocv_check_flag_support lang flag varname) set(_lang CXX) elseif("_${lang}_" MATCHES "_C_") set(_lang C) + elseif("_${lang}_" MATCHES "_OBJCXX_") + set(_lang OBJCXX) else() set(_lang ${lang}) endif() diff --git a/modules/highgui/CMakeLists.txt b/modules/highgui/CMakeLists.txt index b4b2896d7a..4ddd2179e3 100644 --- a/modules/highgui/CMakeLists.txt +++ b/modules/highgui/CMakeLists.txt @@ -230,6 +230,24 @@ ocv_module_include_directories() ocv_create_module(${GRFMT_LIBS} ${HIGHGUI_LIBRARIES}) +if(APPLE) + ocv_check_flag_support(OBJCXX "-fobjc-exceptions" HAVE_OBJC_EXCEPTIONS) + if(HAVE_OBJC_EXCEPTIONS) + foreach(source ${OPENCV_MODULE_${the_module}_SOURCES}) + if("${source}" MATCHES "\\.mm$") + get_source_file_property(flags "${source}" COMPILE_FLAGS) + if(flags) + set(flags "${_flags} -fobjc-exceptions") + else() + set(flags "-fobjc-exceptions") + endif() + + set_source_files_properties("${source}" PROPERTIES COMPILE_FLAGS "${flags}") + endif() + endforeach() + endif() +endif() + if(BUILD_SHARED_LIBS) add_definitions(-DHIGHGUI_EXPORTS) endif()