Salome HOME
update CoreFlows
[tools/solverlab.git] / CoreFlows / cmake_files / FindPYTHON.cmake
1 # Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 #
3 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 #
6 # This library is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU Lesser General Public
8 # License as published by the Free Software Foundation; either
9 # version 2.1 of the License.
10 #
11 # This library is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # Lesser General Public License for more details.
15 #
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with this library; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 #
20 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #
22
23 # ------
24
25 MESSAGE(STATUS "Check for python ...")
26
27 # ------
28
29 IF(PYTHON_IS_MANDATORY STREQUAL 0)
30   SET(PYTHON_IS_MANDATORY 0)
31   SET(PYTHON_IS_OPTIONAL 1)
32 ENDIF(PYTHON_IS_MANDATORY STREQUAL 0)
33 IF(PYTHON_IS_OPTIONAL STREQUAL 0)
34   SET(PYTHON_IS_MANDATORY 1)
35   SET(PYTHON_IS_OPTIONAL 0)
36 ENDIF(PYTHON_IS_OPTIONAL STREQUAL 0)
37 IF(NOT PYTHON_IS_MANDATORY AND NOT PYTHON_IS_OPTIONAL)
38   SET(PYTHON_IS_MANDATORY 1)
39   SET(PYTHON_IS_OPTIONAL 0)
40 ENDIF(NOT PYTHON_IS_MANDATORY AND NOT PYTHON_IS_OPTIONAL)
41
42 # ------
43
44 SET(PYTHON_STATUS 1)
45 IF(WITHOUT_PYTHON OR WITH_PYTHON STREQUAL 0)
46   SET(PYTHON_STATUS 0)
47   MESSAGE(STATUS "python disabled from command line.")
48 ENDIF(WITHOUT_PYTHON OR WITH_PYTHON STREQUAL 0)
49
50 # ------
51
52 IF(PYTHON_STATUS)
53   IF(WITH_PYTHON)
54     SET(PYTHON_ROOT_USER ${WITH_PYTHON})
55   ENDIF(WITH_PYTHON)
56   IF(NOT PYTHON_ROOT_USER)
57     SET(PYTHON_ROOT_USER $ENV{PYTHON_ROOT})
58   ENDIF(NOT PYTHON_ROOT_USER)
59   IF(NOT PYTHON_ROOT_USER)
60     SET(PYTHON_ROOT_USER $ENV{PYTHONHOME})
61   ENDIF(NOT PYTHON_ROOT_USER)
62   IF(NOT PYTHON_ROOT_USER)
63     SET(PYTHON_ROOT_USER /usr)
64   ENDIF(NOT PYTHON_ROOT_USER)
65 ENDIF(PYTHON_STATUS)
66
67 # ------
68
69 IF(PYTHON_STATUS)
70   IF(PYTHON_ROOT_USER)
71     SET(PYTHON_FIND_PATHS_OPTION NO_DEFAULT_PATH)
72   ELSE(PYTHON_ROOT_USER)
73     SET(PYTHON_FIND_PATHS_OPTION)
74   ENDIF(PYTHON_ROOT_USER)
75 ENDIF(PYTHON_STATUS)
76
77 # ------
78
79 IF(PYTHON_STATUS)
80   IF(WINDOWS)
81     IF(CMAKE_BUILD_TYPE STREQUAL Release)
82       SET(PYTHON_EXECUTABLE_TO_FIND python)
83     ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
84       SET(PYTHON_EXECUTABLE_TO_FIND python_d)
85     ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
86   ELSE(WINDOWS)
87     SET(PYTHON_EXECUTABLE_TO_FIND python)
88   ENDIF(WINDOWS)
89   IF(NOT PYTHON_ROOT_USER)
90     SET(PYTHON_EXECUTABLE_PATHS)
91   ELSE(NOT PYTHON_ROOT_USER)
92     IF(WINDOWS)
93       SET(PYTHON_EXECUTABLE_PATHS ${PYTHON_ROOT_USER})
94     ELSE(WINDOWS)
95       SET(PYTHON_EXECUTABLE_PATHS ${PYTHON_ROOT_USER}/bin)
96     ENDIF(WINDOWS)
97   ENDIF(NOT PYTHON_ROOT_USER)
98   FIND_PROGRAM(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE_TO_FIND} PATHS ${PYTHON_EXECUTABLE_PATHS} ${PYTHON_FIND_PATHS_OPTION})
99   IF(PYTHON_EXECUTABLE)
100     MESSAGE(STATUS "python found: ${PYTHON_EXECUTABLE}")
101     IF(PYTHON_EXECUTABLE STREQUAL /usr/bin/python)
102     ELSE(PYTHON_EXECUTABLE STREQUAL /usr/bin/python)
103       SET(PYTHON_ROOT_USER ${PYTHON_EXECUTABLE})
104       GET_FILENAME_COMPONENT(PYTHON_ROOT_USER ${PYTHON_ROOT_USER} PATH)
105       IF(NOT WINDOWS)
106         GET_FILENAME_COMPONENT(PYTHON_ROOT_USER ${PYTHON_ROOT_USER} PATH)
107       ENDIF(NOT WINDOWS)
108     ENDIF(PYTHON_EXECUTABLE STREQUAL /usr/bin/python)
109   ELSE(PYTHON_EXECUTABLE)
110     IF(PYTHON_ROOT_USER)
111       MESSAGE(STATUS "${PYTHON_EXECUTABLE_TO_FIND} not found in ${PYTHON_EXECUTABLE_PATHS}, check your PYTHON installation.")
112     ELSE(PYTHON_ROOT_USER)
113       MESSAGE(STATUS "${PYTHON_EXECUTABLE_TO_FIND} not found on system, try to use WITH_PYTHON option or PYTHON_ROOT environment variable.")
114     ENDIF(PYTHON_ROOT_USER)
115     SET(PYTHON_STATUS 0)
116   ENDIF(PYTHON_EXECUTABLE)
117 ENDIF(PYTHON_STATUS)
118
119 # ------
120
121 IF(PYTHON_STATUS)
122   EXECUTE_PROCESS(
123     COMMAND ${PYTHON_EXECUTABLE} -c "import sys; sys.stdout.write(sys.version[:3])"
124     OUTPUT_VARIABLE PYTHON_VERSION
125     )
126 ENDIF(PYTHON_STATUS)
127
128 # ------
129
130 IF(PYTHON_STATUS)
131   IF(PYTHON_ROOT_USER)
132     SET(PYTHON_FIND_PATHS_OPTION NO_DEFAULT_PATH)
133   ELSE(PYTHON_ROOT_USER)
134     SET(PYTHON_FIND_PATHS_OPTION)
135   ENDIF(PYTHON_ROOT_USER)
136 ENDIF(PYTHON_STATUS)
137
138 # ------
139
140 IF(PYTHON_STATUS)
141   IF(PYTHON_ROOT_USER)
142     SET(PYTHON_INCLUDE_PATHS ${PYTHON_ROOT_USER}/include ${PYTHON_ROOT_USER}/include/python${PYTHON_VERSION})
143   ELSE(PYTHON_ROOT_USER)
144     SET(PYTHON_INCLUDE_PATHS /usr/include/python${PYTHON_VERSION})
145   ENDIF(PYTHON_ROOT_USER)
146   SET(PYTHON_INCLUDE_TO_FIND Python.h)
147   FIND_PATH(PYTHON_INCLUDE_DIR ${PYTHON_INCLUDE_TO_FIND} PATHS ${PYTHON_INCLUDE_PATHS} ${PYTHON_FIND_PATHS_OPTION})
148   SET(PYTHON_DEFINITIONS)
149   IF(PYTHON_INCLUDE_DIR)
150     SET(PYTHON_INCLUDES -I${PYTHON_INCLUDE_DIR})# to remove
151     SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR})
152     IF(WINDOWS)
153       IF(CMAKE_BUILD_TYPE STREQUAL Release)
154       ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
155         SET(PYTHON_INCLUDES ${PYTHON_INCLUDES} -DHAVE_DEBUG_PYTHON)# to remove
156         SET(PYTHON_DEFINITIONS "-DHAVE_DEBUG_PYTHON")
157       ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
158     ENDIF(WINDOWS)
159     MESSAGE(STATUS "${PYTHON_INCLUDE_TO_FIND} found in ${PYTHON_INCLUDE_DIR}")
160   ELSE(PYTHON_INCLUDE_DIR)
161     SET(PYTHON_STATUS 0)
162     IF(PYTHON_ROOT_USER)
163       MESSAGE(STATUS "${PYTHON_INCLUDE_TO_FIND} not found in ${PYTHON_INCLUDE_PATHS}, check your PYTHON installation.")
164     ELSE(PYTHON_ROOT_USER)
165       MESSAGE(STATUS "${PYTHON_INCLUDE_TO_FIND} not found on system, try to use WITH_PYTHON option or PYTHON_ROOT environment variable.")
166     ENDIF(PYTHON_ROOT_USER)
167   ENDIF(PYTHON_INCLUDE_DIR)
168 ENDIF(PYTHON_STATUS)
169
170 # ----
171
172 IF(PYTHON_STATUS)
173   IF(PYTHON_ROOT_USER)
174     IF(WINDOWS)
175       SET(PYTHON_LIB_PATHS ${PYTHON_ROOT_USER}/libs)
176     ELSE(WINDOWS)
177       SET(PYTHON_LIB_PATHS ${PYTHON_ROOT_USER}/lib ${PYTHON_ROOT_USER}/lib/python${PYTHON_VERSION}/config)
178     ENDIF(WINDOWS)
179   ELSE(PYTHON_ROOT_USER)
180     SET(PYTHON_LIB_PATHS)
181   ENDIF(PYTHON_ROOT_USER)
182   IF(WINDOWS)
183     STRING(REPLACE "." "" PYTHON_VERSION_WITHOUT_DOT ${PYTHON_VERSION})
184     IF(CMAKE_BUILD_TYPE STREQUAL Release)
185       FIND_LIBRARY(PYTHON_LIB python${PYTHON_VERSION_WITHOUT_DOT} PATHS ${PYTHON_LIB_PATHS} ${PYTHON_FIND_PATHS_OPTION})
186     ELSE(CMAKE_BUILD_TYPE STREQUAL Release)
187       FIND_LIBRARY(PYTHON_LIB python${PYTHON_VERSION_WITHOUT_DOT}_d PATHS ${PYTHON_LIB_PATHS} ${PYTHON_FIND_PATHS_OPTION})
188     ENDIF(CMAKE_BUILD_TYPE STREQUAL Release)
189   ELSE(WINDOWS)
190     FIND_LIBRARY(PYTHON_LIB python${PYTHON_VERSION} PATHS ${PYTHON_LIB_PATHS} ${PYTHON_FIND_PATHS_OPTION})
191   ENDIF(WINDOWS)
192   SET(PYTHON_LIBS)
193   IF(PYTHON_LIB)
194     SET(PYTHON_LIBS ${PYTHON_LIBS} ${PYTHON_LIB})
195     MESSAGE(STATUS "python lib found: ${PYTHON_LIB}")
196   ELSE(PYTHON_LIB)
197     SET(PYTHON_STATUS 0)
198     IF(PYTHON_ROOT_USER)
199       MESSAGE(STATUS "python lib not found in ${PYTHON_LIB_PATHS}, check your PYTHON installation.")
200     ELSE(PYTHON_ROOT_USER)
201       MESSAGE(STATUS "python lib not found on system, try to use WITH_PYTHON option or PYTHON_ROOT environment variable.")
202     ENDIF(PYTHON_ROOT_USER)
203   ENDIF(PYTHON_LIB)
204 ENDIF(PYTHON_STATUS)
205
206 # ----
207
208 SET(NUMPY_STATUS 0)
209 IF(PYTHON_STATUS)
210   EXECUTE_PROCESS(
211     COMMAND ${PYTHON_EXECUTABLE} -c "import numpy ; import sys ; sys.stdout.write(numpy.get_include())"
212     OUTPUT_VARIABLE NUMPY_INCLUDE_DIR
213     ERROR_QUIET
214     )
215   IF(NUMPY_INCLUDE_DIR)
216     SET(NUMPY_STATUS 1)
217   ENDIF(NUMPY_INCLUDE_DIR)
218   IF(NUMPY_STATUS)
219     SET(PYTHON_INCLUDES ${PYTHON_INCLUDES} -DWITH_NUMPY -I${NUMPY_INCLUDE_DIR})# to remove
220     SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR})
221     SET(PYTHON_DEFINITIONS "${PYTHON_DEFINITIONS} -DWITH_NUMPY")
222     MESSAGE(STATUS "numpy found : ${NUMPY_INCLUDE_DIR}")
223   ELSE(NUMPY_STATUS)
224     MESSAGE(STATUS "numpy not found")
225   ENDIF(NUMPY_STATUS)
226 ENDIF(PYTHON_STATUS)
227
228 # ----
229
230 IF(PYTHON_STATUS)
231   SET(PYTHON_CPPFLAGS ${PYTHON_INCLUDES})# to remove
232   SET(PYLOGLEVEL WARNING)
233 ELSE(PYTHON_STATUS)
234   IF(PYTHON_IS_MANDATORY)
235     MESSAGE(FATAL_ERROR "python not found ... mandatory ... abort")
236   ELSE(PYTHON_IS_MANDATORY)
237     MESSAGE(STATUS "python not found ... optional ... disabled")
238   ENDIF(PYTHON_IS_MANDATORY)
239 ENDIF(PYTHON_STATUS)