Salome HOME
New version of cmake tools completely re-written
[modules/kernel.git] / salome_adm / cmake_files / FindPTHREADS.cmake
index 514f2ed52b1cab801d04bc7b4ab2a62249303725..1f4808cd3467e2d95b1c7b79e9504257703e2ac2 100644 (file)
 #
 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-SET(PTHREADS_ROOT $ENV{PTHREADS_ROOT})
-IF(PTHREADS_ROOT)
-  FIND_PATH(PTHREADS_INCLUDE_DIR pthread.h ${PTHREADS_ROOT}/include)
+# ------
+
+MESSAGE(STATUS "Check for pthreads ...")
+
+# ------
+
+IF(PTHREADS_IS_MANDATORY STREQUAL 0)
+  SET(PTHREADS_IS_MANDATORY 0)
+  SET(PTHREADS_IS_OPTIONAL 1)
+ENDIF(PTHREADS_IS_MANDATORY STREQUAL 0)
+IF(PTHREADS_IS_OPTIONAL STREQUAL 0)
+  SET(PTHREADS_IS_MANDATORY 1)
+  SET(PTHREADS_IS_OPTIONAL 0)
+ENDIF(PTHREADS_IS_OPTIONAL STREQUAL 0)
+IF(NOT PTHREADS_IS_MANDATORY AND NOT PTHREADS_IS_OPTIONAL)
+  SET(PTHREADS_IS_MANDATORY 1)
+  SET(PTHREADS_IS_OPTIONAL 0)
+ENDIF(NOT PTHREADS_IS_MANDATORY AND NOT PTHREADS_IS_OPTIONAL)
+
+# ------
+
+SET(PTHREADS_STATUS 1)
+IF(WITHOUT_PTHREADS OR WITH_PTHREADS STREQUAL 0)
+  SET(PTHREADS_STATUS 0)
+  MESSAGE(STATUS "pthreads disabled from command line.")
+ENDIF(WITHOUT_PTHREADS OR WITH_PTHREADS STREQUAL 0)
+
+# ------
+
+IF(PTHREADS_STATUS)
+  IF(WITH_PTHREADS)
+    SET(PTHREADS_ROOT_USER ${WITH_PTHREADS})
+  ELSE(WITH_PTHREADS)
+    SET(PTHREADS_ROOT_USER $ENV{PTHREADS_ROOT})
+  ENDIF(WITH_PTHREADS)
+ENDIF(PTHREADS_STATUS)
+
+# -----
+
+IF(PTHREADS_STATUS)
+  IF(PTHREADS_ROOT_USER)
+    SET(PTHREADS_FIND_PATHS_OPTION NO_DEFAULT_PATH)
+  ELSE(PTHREADS_ROOT_USER)
+    SET(PTHREADS_FIND_PATHS_OPTION)
+  ENDIF(PTHREADS_ROOT_USER)
+ENDIF(PTHREADS_STATUS)
+
+# -----
+
+IF(PTHREADS_STATUS)
+  IF(PTHREADS_ROOT_USER)
+    SET(PTHREADS_INCLUDE_PATHS ${PTHREADS_ROOT_USER}/include)
+  ELSE(PTHREADS_ROOT_USER)
+    SET(PTHREADS_INCLUDE_PATHS)
+  ENDIF(PTHREADS_ROOT_USER)
+  SET(PTHREADS_INCLUDE_TO_FIND pthread.h)
+  FIND_PATH(PTHREADS_INCLUDE_DIR ${PTHREADS_INCLUDE_TO_FIND} PATHS ${PTHREADS_INCLUDE_PATHS} ${PTHREADS_FIND_PATHS_OPTION})
   IF(PTHREADS_INCLUDE_DIR)
-    SET(PTHREADS_INCLUDES -I${PTHREADS_INCLUDE_DIR})
+    IF(PTHREADS_ROOT_USER)
+      SET(PTHREAD_CFLAGS -I${PTHREADS_INCLUDE_DIR})
+    ENDIF(PTHREADS_ROOT_USER)
+    MESSAGE(STATUS "${PTHREADS_INCLUDE_TO_FIND} found in ${PTHREADS_INCLUDE_DIR}")
+  ELSE(PTHREADS_INCLUDE_DIR)
+    SET(PTHREADS_STATUS 0)
+    IF(PTHREADS_ROOT_USER)
+      MESSAGE(STATUS "${PTHREADS_INCLUDE_TO_FIND} not found in ${PTHREADS_INCLUDE_PATHS}, check your PTHREADS installation.")
+    ELSE(PTHREADS_ROOT_USER)
+      MESSAGE(STATUS "${PTHREADS_INCLUDE_TO_FIND} not found on system, try to use WITH_PTHREADS option or PTHREADS_ROOT environment variable.")
+    ENDIF(PTHREADS_ROOT_USER)
   ENDIF(PTHREADS_INCLUDE_DIR)
-  IF(CMAKE_BUILD_TYPE STREQUAL Release)
-    FIND_LIBRARY(PTHREADS_LIBRARY pthreadVSE2 ${PTHREADS_ROOT}/lib)
-  ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
-    FIND_LIBRARY(PTHREADS_LIBRARY pthreadVSE2d ${PTHREADS_ROOT}/lib)
-  ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
-ENDIF(PTHREADS_ROOT)
+ENDIF(PTHREADS_STATUS)
+
+# ----
+
+IF(PTHREADS_STATUS)
+  IF(PTHREADS_ROOT_USER)
+    SET(PTHREADS_LIB_PATHS ${PTHREADS_ROOT_USER}/lib)
+  ELSE(PTHREADS_ROOT_USER)
+    SET(PTHREADS_LIB_PATHS)
+  ENDIF(PTHREADS_ROOT_USER)
+ENDIF(PTHREADS_STATUS)
+
+IF(PTHREADS_STATUS)
+  IF(WINDOWS)
+    IF(CMAKE_BUILD_TYPE STREQUAL Release)
+      FIND_LIBRARY(PTHREAD_LIB pthreadVSE2 PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION})
+    ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
+      FIND_LIBRARY(PTHREAD_LIB pthreadVSE2d PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION})
+    ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
+  ELSE(WINDOWS)
+    FIND_LIBRARY(PTHREAD_LIB pthread PATHS ${PTHREADS_LIB_PATHS} ${PTHREADS_FIND_PATHS_OPTION})
+  ENDIF(WINDOWS)
+  SET(PTHREAD_LIBS)
+  IF(PTHREAD_LIB)
+    SET(PTHREAD_LIBS ${PTHREAD_LIBS} ${PTHREAD_LIB})
+    MESSAGE(STATUS "pthread lib found: ${PTHREAD_LIB}")
+  ELSE(PTHREAD_LIB)
+    SET(PTHREADS_STATUS 0)
+    IF(PTHREADS_ROOT_USER)
+      MESSAGE(STATUS "pthread lib not found in ${PTHREADS_LIB_PATHS}, check your PTHREADS installation.")
+    ELSE(PTHREADS_ROOT_USER)
+      MESSAGE(STATUS "pthread lib not found on system, try to use WITH_PTHREADS option or PTHREADS_ROOT environment variable.")
+    ENDIF(PTHREADS_ROOT_USER)
+  ENDIF(PTHREAD_LIB)
+ENDIF(PTHREADS_STATUS)
+
+# ----
+
+IF(PTHREADS_STATUS)
+ELSE(PTHREADS_STATUS)
+  IF(PTHREADS_IS_MANDATORY)
+    MESSAGE(FATAL_ERROR "pthreads not found ... mandatory ... abort")
+  ELSE(PTHREADS_IS_MANDATORY)
+    MESSAGE(STATUS "pthreads not found ... optional ... disabled")
+  ENDIF(PTHREADS_IS_MANDATORY)
+ENDIF(PTHREADS_STATUS)