Add -fobjc-exceptions flag to ObjectiveC sources if supported (bug #2657)
authorAndrey Kamaev <andrey.kamaev@itseez.com>
Tue, 29 Jan 2013 13:08:26 +0000 (17:08 +0400)
committerAndrey Kamaev <andrey.kamaev@itseez.com>
Tue, 29 Jan 2013 13:09:23 +0000 (17:09 +0400)
cmake/OpenCVUtils.cmake
modules/highgui/CMakeLists.txt

index 879d332..f40cc6d 100644 (file)
@@ -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()
index b4b2896..4ddd217 100644 (file)
@@ -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()