Salome HOME
CMake - Add new macros:
[modules/kernel.git] / salome_adm / cmake_files / FindSalomePython.cmake
index f20071707ca63584e529e3a720fbcd797a700af1..c775e0163e47a143033141dbf941ad46a28c2100 100644 (file)
 #  !! Please read the generic detection procedure in SalomeMacros.cmake !!
 #
 # The interpreter is found first, and if OK, the corresponding libraries are searched.
-# We ensure the version of the libraries matches the one of the interpreter. 
+# We ensure the version of the libraries matches the one of the interpreter.
+#
+# We also look for an installation of NumPy, and if found the following variables are set
+#   NUMPY_INCLUDE_DIR  - NumPy header location
+#   NUMPY_DEFINITIONS  - compiler flag
+# and are automatically appended to PYTHON_INCLUDE_DIRS (and PYTHON_DEFINITIONS resp.)    
 #
 
 # 1. Load environment or any previously detected Python
@@ -40,6 +45,12 @@ ENDIF()
 SET(PYTHON_ROOT_DIR "${_dflt_value}" CACHE PATH "Path to Python directory (interpreter and libs)")
 
 # 2. Find package - config mode first (i.e. looking for XYZ-config.cmake)
+IF(WIN32)
+ IF(CMAKE_BUILD_TYPE STREQUAL Debug)
+  SET(PythonInterp_FIND_VERSION _d)
+  SET(PYTHON_DEFINITIONS "-DHAVE_DEBUG_PYTHON")
+ ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug)
+ENDIF(WIN32)
 IF(EXISTS "${PYTHON_ROOT_DIR}")
   # Hope to find direclty a CMake config file there
   SET(_CONF_DIR "${PYTHON_ROOT_DIR}/share/cmake") 
@@ -89,10 +100,14 @@ IF (PYTHONINTERP_FOUND)
   SET(SalomePython_FIND_VERSION "${_old_VERSION}")
 ENDIF()
 
-# Set the FOUND flag for SalomePython:
+# Set the FOUND flag for SalomePython and Python:
 SET(SALOMEPYTHON_FOUND FALSE)
 IF (_found1 AND PYTHONLIBS_FOUND)
   SET(SALOMEPYTHON_FOUND TRUE)
+  SET(Python_FOUND TRUE)
+ELSE()
+SET(SALOMEPYTHON_FOUND FALSE)
+  SET(Python_FOUND FALSE)
 ENDIF()
 
 IF (SALOMEPYTHON_FOUND)
@@ -104,7 +119,9 @@ IF (SALOMEPYTHON_FOUND)
   # For Python this is the grand-parent of the
   # include directory:
   GET_FILENAME_COMPONENT(_tmp_ROOT_DIR "${PYTHON_INCLUDE_DIR}" PATH)
-  GET_FILENAME_COMPONENT(_tmp_ROOT_DIR "${_tmp_ROOT_DIR}" PATH)
+  IF(NOT WIN32)
+    GET_FILENAME_COMPONENT(_tmp_ROOT_DIR "${_tmp_ROOT_DIR}" PATH)
+  ENDIF()
 
   # 4. Warn if CMake found something not located under ENV(XYZ_ROOT_DIR)
   IF(DEFINED ENV{PYTHON_ROOT_DIR})
@@ -129,10 +146,36 @@ IF (SALOMEPYTHON_FOUND)
       ENDIF()        
   ENDIF()
 
-  # 6. Specifics
+  ##
+  ## 6. Save the final detected installation
+  ##
+  SET(PYTHON_ROOT_DIR "${_tmp_ROOT_DIR}")
+  SALOME_ACCUMULATE_HEADERS(PYTHON_INCLUDE_DIR)
+
+  ## 7. Specifics
+  ##
+  
+  # NumPy detection 
+  EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import numpy ; import sys ; sys.stdout.write(numpy.get_include())" OUTPUT_VARIABLE NUMPY_INCLUDE_DIR ERROR_QUIET )
+  IF(NUMPY_INCLUDE_DIR)
+    SET(NUMPY_FOUND TRUE)
+  ENDIF(NUMPY_INCLUDE_DIR)
+  IF(NUMPY_FOUND)
+    SET(PYTHON_INCLUDE_DIRS ${NUMPY_INCLUDE_DIR} ${PYTHON_INCLUDE_DIRS})
+    SET(PYTHON_DEFINITIONS "${PYTHON_DEFINITIONS} -DWITH_NUMPY")
+    MESSAGE(STATUS "NumPy found : ${NUMPY_INCLUDE_DIR}")
+  ELSE(NUMPY_FOUND)
+    MESSAGE(STATUS "NumPy not found.")
+  ENDIF(NUMPY_FOUND)
+
   ## None here    
 ELSE()
-  MESSAGE(STATUS "Python was only partially (or not at all) found .")  
+  MESSAGE(STATUS "Python was only partially (or not at all) found .")
 ENDIF()
 
-
+IF(SALOMEPYTHON_FOUND) 
+  #SALOME_ACCUMULATE_HEADERS(PYTHON_INCLUDE_DIR)
+  SALOME_ACCUMULATE_ENVIRONMENT(PATH ${PYTHON_ROOT_DIR}/bin)
+  SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH ${PYTHON_ROOT_DIR}/lib)
+  SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH ${PYTHON_ROOT_DIR}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
+ENDIF()