Backport from https://github.com/Itseez/opencv/commit/a482dcce464acbd5368fb93c6c3d52ba8401776a

From a482dcce464acbd5368fb93c6c3d52ba8401776a Mon Sep 17 00:00:00 2001
From: Alexander Alekhin <alexander.alekhin@itseez.com>
Date: Thu, 11 Jun 2015 16:53:07 +0300
Subject: [PATCH] fix support for pthreads parallel_for

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
---
 CMakeLists.txt                         | 29 ++++++++++++++++++++++-------
 cmake/OpenCVFindLibsPerf.cmake         | 14 +++++++++-----
 cmake/templates/cvconfig.h.in          |  6 ++++++
 modules/core/src/parallel.cpp          | 13 ++++++++-----
 modules/core/src/parallel_pthreads.cpp |  2 +-
 modules/core/src/precomp.hpp           |  6 ------
 6 files changed, 46 insertions(+), 24 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d9a17b3..27d8470 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -188,7 +188,7 @@ OCV_OPTION(WITH_QUICKTIME      "Use QuickTime for Video I/O insted of QTKit" OFF
 OCV_OPTION(WITH_TBB            "Include Intel TBB support"                   OFF  IF (NOT IOS AND NOT WINRT) )
 OCV_OPTION(WITH_OPENMP         "Include OpenMP support"                      OFF)
 OCV_OPTION(WITH_CSTRIPES       "Include C= support"                          OFF  IF (WIN32 AND NOT WINRT)  )
-OCV_OPTION(WITH_PTHREADS_PF    "Use pthreads-based parallel_for"             OFF  IF (NOT WIN32) )
+OCV_OPTION(WITH_PTHREADS_PF    "Use pthreads-based parallel_for"             ON   IF (NOT WIN32) )
 OCV_OPTION(WITH_TIFF           "Include TIFF support"                        ON   IF (NOT IOS) )
 OCV_OPTION(WITH_UNICAP         "Include Unicap support (GPL)"                OFF  IF (UNIX AND NOT APPLE AND NOT ANDROID) )
 OCV_OPTION(WITH_V4L            "Include Video 4 Linux support"               ON   IF (UNIX AND NOT ANDROID) )
@@ -1026,6 +1026,27 @@ if(DEFINED WITH_GPHOTO2)
 endif(DEFINED WITH_GPHOTO2)
 
 
+# Order is similar to CV_PARALLEL_FRAMEWORK in core/src/parallel.cpp
+ocv_clear_vars(CV_PARALLEL_FRAMEWORK)
+if(HAVE_TBB)
+  set(CV_PARALLEL_FRAMEWORK "TBB (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})")
+elseif(HAVE_CSTRIPES)
+  set(CV_PARALLEL_FRAMEWORK "C=")
+elseif(HAVE_OPENMP)
+  set(CV_PARALLEL_FRAMEWORK "OpenMP")
+elseif(HAVE_GCD)
+  set(CV_PARALLEL_FRAMEWORK "GCD")
+elseif(WINRT OR HAVE_CONCURRENCY)
+  set(CV_PARALLEL_FRAMEWORK "Concurrency")
+elseif(HAVE_PTHREADS_PF)
+  set(CV_PARALLEL_FRAMEWORK "pthreads")
+else()
+  set(CV_PARALLEL_FRAMEWORK "none")
+endif()
+status("")
+status("  Parallel framework:" TRUE THEN "${CV_PARALLEL_FRAMEWORK}" ELSE NO)
+
+
 # ========================== Other third-party libraries ==========================
 status("")
 status("  Other third-party libraries:")
@@ -1045,12 +1066,6 @@ status("    Use IPP Async:"  HAVE_IPP_A       THEN "YES" ELSE NO)
 endif(DEFINED WITH_IPP_A)
 
 status("    Use Eigen:"      HAVE_EIGEN       THEN "YES (ver ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})" ELSE NO)
-status("    Use TBB:"        HAVE_TBB         THEN "YES (ver ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR} interface ${TBB_INTERFACE_VERSION})" ELSE NO)
-status("    Use OpenMP:"     HAVE_OPENMP      THEN YES ELSE NO)
-status("    Use GCD"         HAVE_GCD         THEN YES ELSE NO)
-status("    Use Concurrency" HAVE_CONCURRENCY THEN YES ELSE NO)
-status("    Use C=:"         HAVE_CSTRIPES    THEN YES ELSE NO)
-status("    Use pthreads for parallel for:"   HAVE_PTHREADS_PF THEN YES ELSE NO)
 status("    Use Cuda:"       HAVE_CUDA        THEN "YES (ver ${CUDA_VERSION_STRING})" ELSE NO)
 status("    Use OpenCL:"     HAVE_OPENCL      THEN YES ELSE NO)
 
diff --git a/cmake/OpenCVFindLibsPerf.cmake b/cmake/OpenCVFindLibsPerf.cmake
index bda5d79..d1bc541 100644
--- a/cmake/OpenCVFindLibsPerf.cmake
+++ b/cmake/OpenCVFindLibsPerf.cmake
@@ -120,12 +120,16 @@ if(WITH_OPENMP)
   set(HAVE_OPENMP "${OPENMP_FOUND}")
 endif()
 
-if(UNIX OR ANDROID)
-if(NOT APPLE AND NOT HAVE_TBB AND NOT HAVE_OPENMP)
-  set(HAVE_PTHREADS_PF 1)
-else()
-  set(HAVE_PTHREADS_PF 0)
+if(NOT MSVC AND NOT DEFINED HAVE_PTHREADS)
+  set(_fname "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/pthread_test.cpp")
+  file(WRITE "${_fname}" "#include <pthread.h>\nint main() { (void)pthread_self(); return 0; }\n")
+  try_compile(HAVE_PTHREADS "${CMAKE_BINARY_DIR}" "${_fname}")
+  file(REMOVE "${_fname}")
 endif()
+
+ocv_clear_vars(HAVE_PTHREADS_PF)
+if(WITH_PTHREADS_PF)
+  set(HAVE_PTHREADS_PF ${HAVE_PTHREADS})
 else()
   set(HAVE_PTHREADS_PF 0)
 endif()
diff --git a/cmake/templates/cvconfig.h.in b/cmake/templates/cvconfig.h.in
index 4a1d1c6..3330774 100644
--- a/cmake/templates/cvconfig.h.in
+++ b/cmake/templates/cvconfig.h.in
@@ -139,6 +139,12 @@
 /* PNG codec */
 #cmakedefine HAVE_PNG
 
+/* Posix threads (pthreads) */
+#cmakedefine HAVE_PTHREADS
+
+/* parallel_for with pthreads */
+#cmakedefine HAVE_PTHREADS_PF
+
 /* Qt support */
 #cmakedefine HAVE_QT
 
diff --git a/modules/core/src/parallel.cpp b/modules/core/src/parallel.cpp
index 0b593ee..caa8129 100644
--- a/modules/core/src/parallel.cpp
+++ b/modules/core/src/parallel.cpp
@@ -80,6 +80,7 @@
    4. HAVE_GCD         - system wide, used automatically        (APPLE only)
    5. WINRT            - system wide, used automatically        (Windows RT only)
    6. HAVE_CONCURRENCY - part of runtime, used automatically    (Windows only - MSVS 10, MSVS 11)
+   7. HAVE_PTHREADS_PF - pthreads if available
 */
 
 #if defined HAVE_TBB
@@ -125,14 +126,14 @@
 #  define CV_PARALLEL_FRAMEWORK "winrt-concurrency"
 #elif defined HAVE_CONCURRENCY
 #  define CV_PARALLEL_FRAMEWORK "ms-concurrency"
-#elif defined HAVE_PTHREADS
+#elif defined HAVE_PTHREADS_PF
 #  define CV_PARALLEL_FRAMEWORK "pthreads"
 #endif
 
 namespace cv
 {
     ParallelLoopBody::~ParallelLoopBody() {}
-#if defined HAVE_PTHREADS && HAVE_PTHREADS
+#ifdef HAVE_PTHREADS_PF
     void parallel_for_pthreads(const cv::Range& range, const cv::ParallelLoopBody& body, double nstripes);
     size_t parallel_pthreads_get_threads_num();
     void parallel_pthreads_set_threads_num(int num);
@@ -306,7 +307,7 @@ void cv::parallel_for_(const cv::Range& range, const cv::ParallelLoopBody& body,
             Concurrency::CurrentScheduler::Detach();
         }
 
-#elif defined HAVE_PTHREADS
+#elif defined HAVE_PTHREADS_PF
 
         parallel_for_pthreads(range, body, nstripes);
 
@@ -365,7 +366,7 @@ int cv::getNumThreads(void)
         ? Concurrency::CurrentScheduler::Get()->GetNumberOfVirtualProcessors()
         : pplScheduler->GetNumberOfVirtualProcessors());
 
-#elif defined HAVE_PTHREADS
+#elif defined HAVE_PTHREADS_PF
 
         return parallel_pthreads_get_threads_num();
 
@@ -426,7 +427,7 @@ void cv::setNumThreads( int threads )
                        Concurrency::MaxConcurrency, threads-1));
     }
 
-#elif defined HAVE_PTHREADS
+#elif defined HAVE_PTHREADS_PF
 
     parallel_pthreads_set_threads_num(threads);
 
@@ -452,6 +453,8 @@ int cv::getThreadNum(void)
     return 0;
 #elif defined HAVE_CONCURRENCY
     return std::max(0, (int)Concurrency::Context::VirtualProcessorId()); // zero for master thread, unique number for others but not necessary 1,2,3,...
+#elif defined HAVE_PTHREADS_PF
+    return (int)(size_t)(void*)pthread_self(); // no zero-based indexing
 #else
     return 0;
 #endif
diff --git a/modules/core/src/parallel_pthreads.cpp b/modules/core/src/parallel_pthreads.cpp
index 8c34959..091ea2d 100644
--- a/modules/core/src/parallel_pthreads.cpp
+++ b/modules/core/src/parallel_pthreads.cpp
@@ -42,7 +42,7 @@
 
 #include "precomp.hpp"
 
-#if defined HAVE_PTHREADS && HAVE_PTHREADS
+#ifdef HAVE_PTHREADS_PF
 
 #include <algorithm>
 #include <pthread.h>
diff --git a/modules/core/src/precomp.hpp b/modules/core/src/precomp.hpp
index d463126..88b60e4 100644
--- a/modules/core/src/precomp.hpp
+++ b/modules/core/src/precomp.hpp
@@ -292,12 +292,6 @@ TLSData<CoreTLSData>& getCoreTlsData();
 #define CL_RUNTIME_EXPORT
 #endif
 
-#ifndef HAVE_PTHREADS
-#if !(defined WIN32 || defined _WIN32 || defined WINCE || defined HAVE_WINRT)
-#define HAVE_PTHREADS 1
-#endif
-#endif
-
 extern bool __termination; // skip some cleanups, because process is terminating
                            // (for example, if ExitProcess() was already called)
 
-- 
2.4.4

