Enable support for OpenMP in Clang if detected.

- Previously we disabled OpenMP if Clang was detected, as it did not
  support it.  However as of Clang 3.8 (and potentially Xcode 8) OpenMP
  is supported.

Change-Id: Ia39dac9fe746f1fc6310e08553f85f3c37349707
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 25c8ae2..845c949 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -400,31 +400,25 @@
 endif (NOT CUSTOM_BLAS)
 
 if (OPENMP)
-  # Clang does not (yet) support OpenMP.
-  if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+  # Find quietly, as we can continue without OpenMP if it is not found.
+  find_package(OpenMP QUIET)
+  if (OPENMP_FOUND)
+    message("-- Building with OpenMP.")
+    list(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+    if (UNIX)
+      # At least on Linux, we need pthreads to be enabled for mutex to
+      # compile.  This may not work on Windows or Android.
+      find_package(Threads REQUIRED)
+      list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_PTHREAD)
+      list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_RWLOCK)
+    endif (UNIX)
+  else (OPENMP_FOUND)
+    message("-- Failed to find OpenMP, disabling. This is expected on "
+      "Clang < 3.8, and at least Xcode <= 7.")
     update_cache_variable(OPENMP OFF)
-    message("-- Compiler is Clang, disabling OpenMP.")
     list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
-  else (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-    # Find quietly s/t as we can continue without OpenMP if it is not found.
-    find_package(OpenMP QUIET)
-    if (OPENMP_FOUND)
-      message("-- Building with OpenMP.")
-      list(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP)
-      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-      if (UNIX)
-        # At least on Linux, we need pthreads to be enabled for mutex to
-        # compile.  This may not work on Windows or Android.
-        find_package(Threads REQUIRED)
-        list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_PTHREAD)
-        list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_RWLOCK)
-      endif (UNIX)
-    else (OPENMP_FOUND)
-      message("-- Failed to find OpenMP, disabling.")
-      update_cache_variable(OPENMP OFF)
-      list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
-    endif (OPENMP_FOUND)
-  endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+  endif (OPENMP_FOUND)
 else (OPENMP)
   message("-- Building without OpenMP (disabling multithreading).")
   list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 74b0799..c352e0e 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -152,10 +152,13 @@
 endif (BLAS_FOUND AND LAPACK_FOUND)
 
 if (OPENMP_FOUND)
-  if (NOT MSVC)
+  # OpenMP support in Clang requires a non-GNU OpenMP library.
+  if (CMAKE_COMPILER_IS_GNUCXX)
     list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES gomp)
+  endif()
+  if (NOT MSVC)
     list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CMAKE_THREAD_LIBS_INIT})
-  endif (NOT MSVC)
+  endif()
 endif (OPENMP_FOUND)
 
 set(CERES_LIBRARY_SOURCE