1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
5 IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
6 CMAKE_POLICY(SET CMP0057 NEW)
10 project (SOLVERLAB C CXX)
11 set (SOLVERLAB_VERSION_MAJOR 9)
12 set (SOLVERLAB_VERSION_MINOR 8)
13 set (SOLVERLAB_VERSION_SUBMINOR 0)
15 option (SOLVERLAB_WITH_DOCUMENTATION "Generate SOLVERLAB documentation" ON)
16 option (SOLVERLAB_WITH_PYTHON "Generate Python interface of SOLVERLAB using SWIG" ON)
17 option (SOLVERLAB_WITH_GUI "Compile a Graphic user Interface for SOLVERLAB" OFF)
18 option (SOLVERLAB_WITH_PACKAGE "Generate RPM, Debian and tarball packages" OFF)
19 option (SOLVERLAB_WITH_COREFLOWS "Generate COREFLOWS module" ON)
20 option (SOLVERLAB_WITH_TESTS "Generate SOLVERLAB example tests" ON)
21 option (SOLVERLAB_WITH_MPI "Generate a parallel version of SOLVERLAB" OFF)
23 #Path to installed libraries
24 set (PETSC_DIR OFF CACHE STRING "PETSc library path" )
25 set (SLEPC_DIR OFF CACHE STRING "SLEPc library path" )
26 set (HDF5_ROOT OFF CACHE STRING "HDF5 library path" )#For the compilation of MED with a specific version of HDF5
27 set (MEDFILE_ROOT_DIR OFF CACHE STRING "MED library path" )
28 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
29 set (PYTHON_ROOT_DIR OFF CACHE STRING "Python library path" )
30 set (PARAVIEW_ROOT_DIR OFF CACHE STRING "PARAVIEW library path" )
31 set (MPI4PY_ROOT_DIR OFF CACHE STRING "MPI4PY library path" )
33 #url of tarball librairies
34 set (DOWNLOAD_PETSC http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.16.0.tar.gz
35 CACHE STRING "PETSc tarball path/url" )
36 set (DOWNLOAD_SLEPC https://slepc.upv.es/download/distrib/slepc-3.16.0.tar.gz
37 CACHE STRING "SLEPC tarball path/url" )
38 set (DOWNLOAD_F2CBLASLAPACK https://www.mcs.anl.gov/petsc/mirror/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz
39 CACHE STRING "F2CBLASLAPACK tarball path/url" )
40 set (DOWNLOAD_HDF5 https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/src/hdf5-1.10.3.tar.gz
41 CACHE STRING "HDF5 tarball path/url" )
42 set (DOWNLOAD_MED http://files.salome-platform.org/Salome/other/med-4.1.0.tar.gz
43 CACHE STRING "MED tarball path/url")
44 set (DOWNLOAD_MEDCOUPLING http://files.salome-platform.org/Salome/other/medCoupling-9.7.0.tar.gz
45 CACHE STRING "MEDCoupling tarball path/url" )
46 set (DOWNLOAD_OPENMPI https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.6.tar.gz
47 CACHE STRING "OPENMPI tarball path/url" )
48 set (DOWNLOAD_HYPRE https://github.com/hypre-space/hypre/archive/v2.23.0.zip
49 CACHE STRING "HYPRE tarball path/url" )
50 set (DOWNLOAD_MPI4PY https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-3.1.2.tar.gz
51 CACHE STRING "MPY4PY tarball path/url" )
53 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
55 include(ExternalProject)#For PETSc, MED and MEDCoupling
57 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
60 #############################
61 # Detection of MPI + MPI4PY #
62 #############################
64 set(MPI_HOME ${MPI_ROOT_DIR})
67 # Definition of SOLVERLAB_WITH_MPI
68 if( DEFINED ENV{MPI_HOME} OR MPI_HOME )
69 set(SOLVERLAB_WITH_MPI ON)
71 if( ${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
72 set ( MPI_LIBRARY ${MPI_HOME}/lib/libmpi.so )
73 endif(${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
74 message ( STATUS "MPI executable is ${MPIEXEC}" )
75 if (NOT DEFINED CMAKE_CXX_COMPILER)
76 set(CMAKE_CXX_COMPILER ${MPI_HOME}/bin/mpic++)
77 endif(NOT DEFINED CMAKE_CXX_COMPILER)
78 message ( STATUS "MPI C++ compiler is ${CMAKE_CXX_COMPILER}" )
79 if (NOT DEFINED CMAKE_C_COMPILER)
80 set(CMAKE_C_COMPILER ${MPI_HOME}/bin/mpicc)
81 endif(NOT DEFINED CMAKE_C_COMPILER)
82 message ( STATUS "MPI C compiler is ${CMAKE_C_COMPILER}" )
83 else( DEFINED ENV{MPI_HOME} OR MPI_HOME )
84 set(SOLVERLAB_WITH_MPI OFF)
85 endif( DEFINED ENV{MPI_HOME} OR MPI_HOME )
87 # Definition of MPI4PY_ROOT_DIR from either the environment or petsc
88 if( ${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
89 message(STATUS "Defining MPI4PY directory" )
90 if( DEFINED ENV{MPI4PY_ROOT_DIR})
91 set(MPI4PY_ROOT_DIR $ENV{MPI4PY_ROOT_DIR})
92 else( DEFINED ENV{MPI4PY_ROOT_DIR})
93 set(MPI4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/mpi4py)
94 endif( DEFINED ENV{MPI4PY_ROOT_DIR})
95 endif(${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
98 message(STATUS "MPI4PY directory is ${MPI4PY_ROOT_DIR}" )
99 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMPI4PY_ROOT_DIR=${MPI4PY_ROOT_DIR})#Necessary for swig generation of mpi structures
100 endif( MPI4PY_ROOT_DIR)
102 ############################
103 # Definition of HDF5_ROOT #
104 ############################
105 if ( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
106 if ( DEFINED ENV{HDF5_ROOT_DIR} )
107 set(HDF5_ROOT $ENV{HDF5_ROOT_DIR})
108 else ( DEFINED ENV{HDF5_ROOT_DIR} )
109 set(HDF5_ROOT ${HDF5_ROOT_DIR})
110 endif( DEFINED ENV{HDF5_ROOT_DIR} )
111 endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
113 ######################################################
114 # Detection or compilation of PETSc+SLEPc+HDF5 #
115 ######################################################
116 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
118 set(PETSC_DIR $ENV{PETSC_DIR})
119 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
121 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
124 find_package (PETSc 3.4 REQUIRED)
127 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
128 message ( STATUS "PETSc compiler is ${PETSC_COMPILER}" )
129 message ( STATUS "PETSc executable is ${PETSC_MPIEXEC}")
131 set(PETSC_INSTALL ${PETSC_DIR})
133 #Define and search slepc variables
135 if ( DEFINED ENV{SLEPC_DIR} )
136 set(SLEPC_DIR $ENV{SLEPC_DIR})
137 else ( DEFINED ENV{SLEPC_DIR} )
138 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
139 endif( DEFINED ENV{SLEPC_DIR} )
140 endif( NOT SLEPC_DIR)
142 message ( STATUS "Checking variable SLEPC_DIR" )
143 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
144 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
145 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
146 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
148 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
151 #define hdf5 variables
152 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
153 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
154 set(HDF5_ROOT $ENV{HDF5_ROOT})
155 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
156 #HDF5 to be found in petsc external packages
157 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
158 endif( DEFINED ENV{HDF5_ROOT} )
159 endif( NOT HDF5_ROOT )
161 find_package(HDF5 COMPONENTS CXX HL)
163 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
164 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
165 endif( NOT HDF5_FOUND)
167 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
168 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
170 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
171 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
172 message ( STATUS "PETSC library found in /usr/lib64" )
174 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
175 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
177 file(STRINGS /usr/include/petsc/petscversion.h petscversion_file)
178 FOREACH(line ${petscversion_file})
179 string(FIND "${line}" "#define PETSC_VERSION_MAJOR " pos)
180 IF(NOT ${pos} EQUAL -1)
181 string(LENGTH ${line} line_length_major)#length of the line
182 MATH(EXPR petsc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
183 string(SUBSTRING ${line} ${petsc_version_major} 1 PETSC_VERSION_MAJOR)
185 ENDIF(NOT ${pos} EQUAL -1)
186 ENDFOREACH(line ${petscversion_file})
187 FOREACH(line ${petscversion_file})
188 string(FIND "${line}" "#define PETSC_VERSION_MINOR " pos)
189 IF(NOT ${pos} EQUAL -1)
190 string(LENGTH ${line} line_length_minor)#length of the line
191 if(${line_length_minor} EQUAL ${line_length_major})
192 MATH(EXPR petsc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
193 string(SUBSTRING ${line} ${petsc_version_minor} 1 PETSC_VERSION_MINOR)
195 else(${line_length_minor} EQUAL ${line_length_major})
196 MATH(EXPR petsc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
197 string(SUBSTRING ${line} ${petsc_version_minor} 2 PETSC_VERSION_MINOR)
198 endif(${line_length_minor} EQUAL ${line_length_major})
199 ENDIF(NOT ${pos} EQUAL -1)
200 ENDFOREACH(line ${petscversion_file})
201 set(PETSC_VERSION ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}) #3.8 for fedora 26 , 3.9 for fedora 29 , 3.10 for fedora 30 , 3.12 for fedora 32 , 3.14 for fedora 34 , 3.15 for fedora 35
202 message(STATUS "PETSc detected, version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}" )
204 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
205 set(PETSC_INSTALL ${PETSC_DIR})
207 #Define and search slepc variables
208 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
209 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
210 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
212 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
213 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
214 file(STRINGS /usr/include/slepc/slepcversion.h slepcversion_file)
215 FOREACH(line ${slepcversion_file})
216 string(FIND "${line}" "#define SLEPC_VERSION_MAJOR " pos)
217 IF(NOT ${pos} EQUAL -1)
218 string(LENGTH ${line} line_length_major)#length of the line
219 MATH(EXPR slepc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
220 string(SUBSTRING ${line} ${slepc_version_major} 1 SLEPC_VERSION_MAJOR)
222 ENDIF(NOT ${pos} EQUAL -1)
223 ENDFOREACH(line ${slepcversion_file})
224 FOREACH(line ${slepcversion_file})
225 string(FIND "${line}" "#define SLEPC_VERSION_MINOR " pos)
226 IF(NOT ${pos} EQUAL -1)
227 string(LENGTH ${line} line_length_minor)#length of the line
228 if(${line_length_minor} EQUAL ${line_length_major})
229 MATH(EXPR slepc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
230 string(SUBSTRING ${line} ${slepc_version_minor} 1 SLEPC_VERSION_MINOR)
232 else(${line_length_minor} EQUAL ${line_length_major})
233 MATH(EXPR slepc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
234 string(SUBSTRING ${line} ${slepc_version_minor} 2 SLEPC_VERSION_MINOR)
235 endif(${line_length_minor} EQUAL ${line_length_major})
236 ENDIF(NOT ${pos} EQUAL -1)
237 ENDFOREACH(line ${slepcversion_file})
238 set(SLEPC_VERSION ${SLEPC_VERSION_MAJOR}.${SLEPC_VERSION_MINOR}) #3.8 for fedora 26 , 3.9 for fedora 29 , 3.10 for fedora 30 , 3.12 for fedora 32 , 3.14 for fedora 34 , 3.15 for fedora 35
239 message(STATUS "SLEPc detected, version is ${SLEPC_VERSION_MAJOR}.${SLEPC_VERSION_MINOR}" )
240 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
241 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
242 message( FATAL_ERROR "SLEPc not found in the system" )
243 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
245 #HDF5 to be found in the system
246 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
247 find_package(HDF5 REQUIRED)
248 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
249 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
250 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
252 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
253 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
254 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
255 # set(PETSC_DIR /usr/lib/petsc/)
256 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
257 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
259 # find_package (PETSc 3.4 REQUIRED)
260 # petsc_get_version ()
261 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
263 # Define and search slepc variables
264 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
265 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
266 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
267 # set(SLEPC_DIR /usr/lib/slepc/)
268 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
269 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
270 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
271 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
272 # message( FATAL_ERROR "SLEPc not found in the system" )
273 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
275 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
277 else ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) # No petsc in system, do compile petsc along with slepc as an external package
278 message (STATUS "PETSC not found in the system")
279 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
280 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
281 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
283 #extract petsc tarball name
284 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
285 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
286 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
287 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
288 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
290 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
291 set(PETSC_ARCH arch-linux-c-opt)
292 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/lib/petsc)#folder to copy petsc libraries and include files
294 ExternalProject_Add (PETSc
295 URL ${DOWNLOAD_PETSC}
296 SOURCE_DIR ${PETSC_DIR}
298 CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PETSC_INSTALL} --with-debugging=0 --download-f2cblaslapack=${DOWNLOAD_F2CBLASLAPACK} --with-mpi=0 --with-fc=0 --download-slepc=${DOWNLOAD_SLEPC} --download-hdf5=${DOWNLOAD_HDF5} --with-petsc4py=yes --download-slepc-configure-arguments="--with-slepc4py=yes" # --download-openmpi=${DOWNLOAD_OPENMPI} --download-hypre=${DOWNLOAD_HYPRE} --download-mpi4py=${DOWNLOAD_MPI4PY}
299 BUILD_COMMAND make all
300 TEST_COMMAND make check
301 INSTALL_COMMAND make install
302 INSTALL_DIR ${PETSC_DIR}
303 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
304 LOG_DOWNLOAD TRUE # Wrap download in script to log output
305 LOG_UPDATE TRUE # Wrap update in script to log output
306 LOG_CONFIGURE TRUE # Wrap configure in script to log output
307 LOG_BUILD TRUE # Wrap build in script to log output
308 LOG_TEST TRUE # Wrap test in script to log output
309 LOG_INSTALL TRUE # Wrap install in script to log output
312 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
314 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
315 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
316 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
317 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
318 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
320 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
321 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
323 #extract slepc tarball name
324 string(LENGTH "${DOWNLOAD_SLEPC}" tarball_url_length)#length of the tarball
325 string(FIND "${DOWNLOAD_SLEPC}" "/" start_tarball_name REVERSE )# last occurence of "/"
326 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
327 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
328 string(SUBSTRING ${DOWNLOAD_SLEPC} ${start_tarball_name} ${tarball_name_length} SLEPC_TARBALL_NAME)
330 #extract slepc version
331 string(LENGTH "${SLEPC_TARBALL_NAME}" tarball_name_length)#length of the tarball
332 string(FIND "${SLEPC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
333 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
334 string(SUBSTRING ${SLEPC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} SLEPC_VERSION)
335 message( STATUS "SLEPc version ${SLEPC_VERSION} will be installed" )
337 #define slepc variables
338 set(SLEPC_DIR ${PETSC_INSTALL})
339 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/include )
340 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/installed-arch-linux2-c-opt/lib/libslepc.so)
341 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
343 #define hdf5 variables
344 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
345 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
346 set(HDF5_ROOT $ENV{HDF5_ROOT})
347 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
348 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
349 endif( DEFINED ENV{HDF5_ROOT} )
350 endif( NOT HDF5_ROOT )
351 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
352 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
354 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
355 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
357 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
358 add_definitions(-DPETSC_VERSION_GREATER_3_5)
359 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
361 if ( ${SOLVERLAB_WITH_PYTHON} )
362 set(SLEPC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/slepc4py)# or use FindSLEPC4PY
363 set(PETSC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc4py)# or use FindPETSC4PY
364 endif( ${SOLVERLAB_WITH_PYTHON} )
366 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
368 add_library(petsc SHARED IMPORTED)
369 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
370 add_library(slepc SHARED IMPORTED)
371 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
373 ######################################################
374 # Detection or compilation of MEDFile #
375 ######################################################
376 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
378 if ( NOT MEDFILE_ROOT_DIR )
379 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
380 endif( NOT MEDFILE_ROOT_DIR )
382 find_package (MEDFile REQUIRED)
384 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
386 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
388 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
389 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
391 #extraction of the tarball archive name
392 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
393 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
394 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
395 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
396 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
398 ExternalProject_Add (MED
399 URL ${DOWNLOAD_MED} #location of med tarball
400 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
402 CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${MEDFILE_ROOT_DIR} --with-hdf5=${HDF5_ROOT} --with-hdf5-include=${HDF5_ROOT}/include --with-hdf5-lib=${HDF5_LIBRARY_DIR} --with-hdf5-bin=${HDF5_ROOT}/bin --with-swig=yes --disable-fortran #CC=${PETSC_INSTALL}/bin/mpicc
404 INSTALL_COMMAND make install
405 INSTALL_DIR ${MEDFILE_ROOT_DIR}
406 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
407 LOG_DOWNLOAD TRUE # Wrap download in script to log output
408 LOG_UPDATE TRUE # Wrap update in script to log output
409 LOG_CONFIGURE TRUE # Wrap configure in script to log output
410 LOG_BUILD TRUE # Wrap build in script to log output
411 LOG_TEST TRUE # Wrap test in script to log output
412 LOG_INSTALL TRUE # Wrap install in script to log output
415 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
416 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
417 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
419 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
421 add_library(med SHARED IMPORTED)
422 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
423 add_library(medC SHARED IMPORTED)
424 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
426 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
428 ######################################################
429 # Detection or compilation of MEDCoupling #
430 ######################################################
431 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
433 if ( NOT MEDCOUPLING_ROOT_DIR )
434 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
435 endif( NOT MEDCOUPLING_ROOT_DIR )
437 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
439 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
440 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
441 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
443 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
444 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
445 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
446 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
448 #extraction of the tarball archive name
449 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
450 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
451 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
452 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
453 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
454 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
456 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
458 ExternalProject_Add (MEDCoupling
459 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
460 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
462 CONFIGURE_COMMAND cmake <SOURCE_DIR>/${MEDCOUPLING_TARBALL_NAME} -DCMAKE_INSTALL_PREFIX=${MEDCOUPLING_ROOT_DIR} -DCONFIGURATION_ROOT_DIR=<SOURCE_DIR>/configuration-${MEDCoupling_VERSION} -DMEDFILE_ROOT_DIR=${MEDFILE_ROOT_DIR} -DMEDCOUPLING_ENABLE_PARTITIONER=OFF -DMEDCOUPLING_PARTITIONER_METIS=OFF -DMEDCOUPLING_PARTITIONER_SCOTCH=OFF -DMEDCOUPLING_ENABLE_RENUMBER=OFF -DMEDCOUPLING_BUILD_DOC=OFF -DHDF5_ROOT_DIR=${HDF5_ROOT} -DMEDCOUPLING_USE_64BIT_IDS=ON #-DSALOME_USE_MPI=ON
464 INSTALL_COMMAND make install
465 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
466 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
467 LOG_DOWNLOAD TRUE # Wrap download in script to log output
468 LOG_UPDATE TRUE # Wrap update in script to log output
469 LOG_CONFIGURE TRUE # Wrap configure in script to log output
470 LOG_BUILD TRUE # Wrap build in script to log output
471 LOG_TEST TRUE # Wrap test in script to log output
472 LOG_INSTALL TRUE # Wrap install in script to log output
475 add_library(medloader SHARED IMPORTED )
476 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
478 SET(MEDCOUPLING_USE_64BIT_IDS ON)
480 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
482 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
483 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
485 add_library(medcoupling SHARED IMPORTED )
486 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
488 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
489 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
490 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
492 if (TARGET MED AND TARGET PETSc)
493 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
494 endif(TARGET MED AND TARGET PETSc)
496 if (TARGET MED AND TARGET MEDCoupling)
497 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
498 endif(TARGET MED AND TARGET MEDCoupling)
500 if (TARGET PETSc AND TARGET MEDCoupling)
501 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
502 endif(TARGET PETSc AND TARGET MEDCoupling)
504 IF(MEDCOUPLING_USE_64BIT_IDS)
505 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
506 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
512 # Paraview variables to choose python version and for env_SOLVERLAB.sh
513 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
514 if ( PARAVIEW_ROOT_DIR )
515 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
516 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
517 else( PARAVIEW_ROOT_DIR )
518 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
519 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
520 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
521 endif( PARAVIEW_ROOT_DIR )
522 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
523 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview in the system.")
524 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
525 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/:/usr/lib/x86_64-linux-gnu)
526 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
528 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
529 if ( NOT DEFINED PARAVIEW_VERSION )
530 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
531 endif( NOT DEFINED PARAVIEW_VERSION )
532 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
533 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
534 set( PARAVIEW_SUFFIXES paraview-5.0 paraview-5.1 paraview-5.2 paraview-5.3 paraview-5.4 paraview-5.5 paraview-5.6 paraview-5.7 paraview-5.8 paraview-5.9 )
535 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
537 #extraction of the paraview version"
538 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
539 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
540 set( PARAVIEW_VERSION "5.8")
541 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
542 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
543 file(STRINGS ${vtkConfig_file} vtkConfig)
544 FOREACH(line ${vtkConfig})
545 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
546 IF(NOT ${pos} EQUAL -1)
547 string(LENGTH ${line} line_length)#length of the tarball
548 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
549 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
551 ENDIF(NOT ${pos} EQUAL -1)
552 ENDFOREACH(line ${vtkConfig})
553 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
554 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
555 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
557 #Choose python 2 or 3
558 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
560 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
561 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
563 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
564 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
567 IF ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
568 IF ( PYTHON_ROOT_DIR )
569 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
570 ELSE( PYTHON_ROOT_DIR )
571 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
572 ENDIF( PYTHON_ROOT_DIR)
573 ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
575 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
576 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
577 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
578 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
579 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
580 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
581 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
582 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
583 set(Python_VERSION ${PYTHON_VERSION_STRING})
584 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
585 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
586 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
588 message(STATUS "Python version found is ${Python_VERSION}")
591 IF ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
592 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
593 ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
596 IF ( NOT DEFINED PYQT5_ROOT_DIR )
597 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
598 ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
600 #Paraview library paths
601 set (PV_LIB_DIR /usr/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/dist-packages/paraview/:/usr/lib64/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtk/:${MATPLOTLIB_ROOT_DIR}/lib/:${PARAVIEW_LIBRARIES_DIR})
602 set (PV_PYTHON_DIR /usr/lib/python${Python_VERSION_MAJOR}/dist-packages/:/usr/lib/python${Python_VERSION_MAJOR}/dist-packages/paraview/:/usr/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/dist-packages/paraview/:/usr/lib64/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtk/:/usr/lib64/paraview/site-packages/:/usr/lib64/paraview/site-packages/paraview/:/usr/lib64/paraview/site-packages/vtk/:/usr/lib64/paraview/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/:/usr/lib64/paraview/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/paraview/:/usr/lib64/paraview/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtkmodules:/usr/lib/paraview/site-packages/paraview:/usr/lib/paraview/site-packages/paraview/vtk:${PARAVIEW_ROOT_DIR}/lib/:${PARAVIEW_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/:${PARAVIEW_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtkmodules/:${MATPLOTLIB_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages:${PYQT5_ROOT_DIR}:${PYQT5_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages)
604 # Detection of python-paraview
605 string(REPLACE ":" ";" PV_PYTHON_DIR_PATHS "${PV_PYTHON_DIR}")# use semicolon instead of colon in PATH search
606 find_file(python-paraview simple.py PATHS ${PV_PYTHON_DIR_PATHS})
607 if( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
608 message(WARNING "Python Paraview library not found. Post processing will fail in SOLVERLAB scripts.")
609 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
610 else( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
611 if( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
612 message ( STATUS "Using system Paraview python libraries on Ubuntu 20.04 requires the presence and preload of library netcdf (bug in linkage)." )
613 if( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
614 message ( STATUS "Library netcdf found in the system. Paraview python libraries should be functional." )
615 set(PRELOAD_NETCDF_ON_UBUNTU20 ON)
616 else( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
617 message ( WARNING "Library netcdf not found in system. Paraview python libraries may not be functional (bug in linkage)." )
618 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
619 endif( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
620 else( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
621 message(STATUS "Python Paraview library found. Post processing will work in SOLVERLAB scripts.")
622 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
623 endif( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
624 endif( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
627 IF ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
628 IF ( DEFINED SWIG_ROOT_DIR )
629 set(SWIG_EXECUTABLE ${SWIG_ROOT_DIR}/bin/swig )
630 ELSE ( DEFINED SWIG_ROOT_DIR )
631 set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig )
632 ENDIF( DEFINED SWIG_ROOT_DIR)
633 ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
634 find_package (SWIG 3.0 REQUIRED)
637 if (SOLVERLAB_WITH_DOCUMENTATION) #
638 IF ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
639 IF ( DEFINED DOXYGEN_ROOT_DIR )
640 set(DOXYGEN_EXECUTABLE ${DOXYGEN_ROOT_DIR}/bin/doxygen )
641 ELSE ( DEFINED DOXYGEN_ROOT_DIR )
642 set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen )
643 ENDIF( DEFINED DOXYGEN_ROOT_DIR)
644 ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
645 find_package (Doxygen) #
646 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
647 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
648 if (NOT DOXYGEN_FOUND)
649 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
650 endif(NOT DOXYGEN_FOUND)
652 configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
653 add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile SOURCES ${PROJECT_BINARY_DIR}/Doxyfile) #
654 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/solverlab-dev-doc OPTIONAL) #
656 if ( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
658 add_custom_target (docGUI COMMAND ${SPHINX_EXECUTABLE} -M html "${PROJECT_SOURCE_DIR}/CoreFlows/gui/doc" "${PROJECT_BINARY_DIR}/CoreFlows/gui/doc" SOURCES ${PROJECT_SOURCE_DIR}/CoreFlows/gui/doc) #
659 install (DIRECTORY ${PROJECT_BINARY_DIR}/CoreFlows/gui/doc/html DESTINATION share/doc/solverlab-gui-doc OPTIONAL) #
660 endif( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
661 endif(SOLVERLAB_WITH_DOCUMENTATION)
663 if (SOLVERLAB_WITH_TESTS) #
665 IF ( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
666 IF ( DEFINED CPPUNIT_ROOT_DIR )
667 set(CPPUNIT_ROOT_USER ${CPPUNIT_ROOT_DIR} )
668 ELSE ( DEFINED CPPUNIT_ROOT_DIR )
669 set(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT_DIR} )
670 ENDIF( DEFINED CPPUNIT_ROOT_DIR)
671 ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
672 find_package (CPPUNIT REQUIRED)
674 add_custom_target (cpp COMMAND ctest -R .exe)# may be replace ctest -R with ctest -L
675 add_custom_target (mpi COMMAND ctest -R Proc)# may be replace ctest -R with ctest -L
676 endif(SOLVERLAB_WITH_TESTS)
678 # Enter subdirectories
679 set(CDMATH_WITH_POSTPRO ${SOLVERLAB_WITH_POSTPRO} )
680 set(CDMATH_WITH_PETSC ${SOLVERLAB_WITH_PETSC} )
681 set(CDMATH_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
682 set(CDMATH_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
683 set(CDMATH_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
684 set(CDMATH_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
685 add_subdirectory (CDMATH)
686 if(SOLVERLAB_WITH_COREFLOWS)
687 set(COREFLOWS_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
688 set(COREFLOWS_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
689 set(COREFLOWS_WITH_GUI ${SOLVERLAB_WITH_GUI} )
690 set(COREFLOWS_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
691 set(COREFLOWS_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
692 add_subdirectory (CoreFlows)
693 endif(SOLVERLAB_WITH_COREFLOWS)
697 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
698 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh