1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
6 project (SOLVERLAB C CXX)
7 set (SOLVERLAB_VERSION_MAJOR 9)
8 set (SOLVERLAB_VERSION_MINOR 7)
9 set (SOLVERLAB_VERSION_SUBMINOR alpha)
11 option (SOLVERLAB_WITH_DOCUMENTATION "Generate SOLVERLAB documentation" ON)
12 option (SOLVERLAB_WITH_PYTHON "Generate Python interface of SOLVERLAB using SWIG" ON)
13 option (SOLVERLAB_WITH_GUI "Compile a Graphic user Interface for SOLVERLAB" OFF)
14 option (SOLVERLAB_WITH_PACKAGE "Generate RPM, Debian and tarball packages" OFF)
15 option (SOLVERLAB_WITH_COREFLOWS "Generate COREFLOWS module" ON)
16 option (SOLVERLAB_WITH_TESTS "Generate SOLVERLAB example tests" ON)
17 option (SOLVERLAB_WITH_MPI "Generate a parallel version of SOLVERLAB" OFF)
19 #Path to installed libraries
20 set (PETSC_DIR OFF CACHE STRING "PETSc library path" )
21 set (SLEPC_DIR OFF CACHE STRING "SLEPc library path" )
22 set (HDF5_ROOT OFF CACHE STRING "HDF5 library path" )#For the compilation of MED with a specific version of HDF5
23 set (MEDFILE_ROOT_DIR OFF CACHE STRING "MED library path" )
24 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
25 set (PYTHON_ROOT_DIR OFF CACHE STRING "Python library path" )
26 set (PARAVIEW_ROOT_DIR OFF CACHE STRING "PARAVIEW library path" )
27 set (MPI4PY_ROOT_DIR OFF CACHE STRING "MPI4PY library path" )
29 #url of tarball librairies
30 set (DOWNLOAD_PETSC http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.16.0.tar.gz
31 CACHE STRING "PETSc tarball path/url" )
32 set (DOWNLOAD_SLEPC https://slepc.upv.es/download/distrib/slepc-3.16.0.tar.gz
33 CACHE STRING "SLEPC tarball path/url" )
34 set (DOWNLOAD_F2CBLASLAPACK https://www.mcs.anl.gov/petsc/mirror/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz
35 CACHE STRING "F2CBLASLAPACK tarball path/url" )
36 set (DOWNLOAD_HDF5 https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/src/hdf5-1.10.3.tar.gz
37 CACHE STRING "HDF5 tarball path/url" )
38 set (DOWNLOAD_MED http://files.salome-platform.org/Salome/other/med-4.1.0.tar.gz
39 CACHE STRING "MED tarball path/url")
40 set (DOWNLOAD_MEDCOUPLING http://files.salome-platform.org/Salome/other/medCoupling-9.7.0.tar.gz
41 CACHE STRING "MEDCoupling tarball path/url" )
42 set (DOWNLOAD_OPENMPI https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.6.tar.gz
43 CACHE STRING "OPENMPI tarball path/url" )
44 set (DOWNLOAD_HYPRE https://github.com/hypre-space/hypre/archive/v2.23.0.zip
45 CACHE STRING "HYPRE tarball path/url" )
46 set (DOWNLOAD_MPI4PY https://bitbucket.org/mpi4py/mpi4py/downloads/mpi4py-3.1.2.tar.gz
47 CACHE STRING "MPY4PY tarball path/url" )
49 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
51 include(ExternalProject)#For PETSc, MED and MEDCoupling
53 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
59 if ( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
60 if ( DEFINED ENV{MPI_ROOT_DIR} )
61 set(MPI_HOME $ENV{MPI_ROOT_DIR})
62 else ( DEFINED ENV{MPI_ROOT_DIR} )
63 set(MPI_HOME ${MPI_ROOT_DIR})
64 endif( DEFINED ENV{MPI_ROOT_DIR} )
65 endif( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED 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 else( DEFINED ENV{MPI_HOME} OR MPI_HOME )
76 set(SOLVERLAB_WITH_MPI OFF)
77 endif( DEFINED ENV{MPI_HOME} OR MPI_HOME )
79 # Definition of MPI4PY_ROOT_DIR
80 if( ${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
81 message(STATUS "Defining MPI4PY directory" )
82 if( DEFINED ENV{MPI4PY_ROOT_DIR})
83 set(MPI4PY_ROOT_DIR $ENV{MPI4PY_ROOT_DIR})
84 else( DEFINED ENV{MPI4PY_ROOT_DIR})
85 set(MPI4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/mpi4py)
86 endif( DEFINED ENV{MPI4PY_ROOT_DIR})
87 endif(${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
90 message(STATUS "MPI4PY directory is ${MPI4PY_ROOT_DIR}" )
91 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMPI4PY_ROOT_DIR=${MPI4PY_ROOT_DIR})
92 endif( MPI4PY_ROOT_DIR)
94 ############################
95 # Definition of HDF5_ROOT #
96 ############################
97 if ( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
98 if ( DEFINED ENV{HDF5_ROOT_DIR} )
99 set(HDF5_ROOT $ENV{HDF5_ROOT_DIR})
100 else ( DEFINED ENV{HDF5_ROOT_DIR} )
101 set(HDF5_ROOT ${HDF5_ROOT_DIR})
102 endif( DEFINED ENV{HDF5_ROOT_DIR} )
103 endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
105 ######################################################
106 # Detection or compilation of PETSc+SLEPc+HDF5 #
107 ######################################################
108 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
110 set(PETSC_DIR $ENV{PETSC_DIR})
111 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
113 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
116 find_package (PETSc 3.4 REQUIRED)
119 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
120 message ( STATUS "PETSc compiler is ${PETSC_COMPILER}" )
121 message ( STATUS "PETSc executable is ${PETSC_MPIEXEC}")
123 set(PETSC_INSTALL ${PETSC_DIR})
125 #Define and search slepc variables
127 if ( DEFINED ENV{SLEPC_DIR} )
128 set(SLEPC_DIR $ENV{SLEPC_DIR})
129 else ( DEFINED ENV{SLEPC_DIR} )
130 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
131 endif( DEFINED ENV{SLEPC_DIR} )
132 endif( NOT SLEPC_DIR)
134 message ( STATUS "Checking variable SLEPC_DIR" )
135 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
136 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
137 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
138 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
140 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
143 #define hdf5 variables
144 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
145 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
146 set(HDF5_ROOT $ENV{HDF5_ROOT})
147 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
148 #HDF5 to be found in petsc external packages
149 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
150 endif( DEFINED ENV{HDF5_ROOT} )
151 endif( NOT HDF5_ROOT )
153 find_package(HDF5 COMPONENTS CXX HL)
155 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
156 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
157 endif( NOT HDF5_FOUND)
159 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
160 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
162 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
163 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
164 message ( STATUS "PETSC library found in /usr/lib64" )
166 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
167 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
169 file(STRINGS /usr/include/petsc/petscversion.h petscversion_file)
170 FOREACH(line ${petscversion_file})
171 string(FIND "${line}" "#define PETSC_VERSION_MAJOR " pos)
172 IF(NOT ${pos} EQUAL -1)
173 string(LENGTH ${line} line_length_major)#length of the line
174 MATH(EXPR petsc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
175 string(SUBSTRING ${line} ${petsc_version_major} 1 PETSC_VERSION_MAJOR)
177 ENDIF(NOT ${pos} EQUAL -1)
178 ENDFOREACH(line ${petscversion_file})
179 FOREACH(line ${petscversion_file})
180 string(FIND "${line}" "#define PETSC_VERSION_MINOR " pos)
181 IF(NOT ${pos} EQUAL -1)
182 string(LENGTH ${line} line_length_minor)#length of the line
183 if(${line_length_minor} EQUAL ${line_length_major})
184 MATH(EXPR petsc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
185 string(SUBSTRING ${line} ${petsc_version_minor} 1 PETSC_VERSION_MINOR)
187 else(${line_length_minor} EQUAL ${line_length_major})
188 MATH(EXPR petsc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
189 string(SUBSTRING ${line} ${petsc_version_minor} 2 PETSC_VERSION_MINOR)
190 endif(${line_length_minor} EQUAL ${line_length_major})
191 ENDIF(NOT ${pos} EQUAL -1)
192 ENDFOREACH(line ${petscversion_file})
193 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
194 message(STATUS "PETSc detected, version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}" )
196 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
197 set(PETSC_INSTALL ${PETSC_DIR})
199 #Define and search slepc variables
200 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
201 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
202 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
204 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
205 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
206 file(STRINGS /usr/include/slepc/slepcversion.h slepcversion_file)
207 FOREACH(line ${slepcversion_file})
208 string(FIND "${line}" "#define SLEPC_VERSION_MAJOR " pos)
209 IF(NOT ${pos} EQUAL -1)
210 string(LENGTH ${line} line_length_major)#length of the line
211 MATH(EXPR slepc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
212 string(SUBSTRING ${line} ${slepc_version_major} 1 SLEPC_VERSION_MAJOR)
214 ENDIF(NOT ${pos} EQUAL -1)
215 ENDFOREACH(line ${slepcversion_file})
216 FOREACH(line ${slepcversion_file})
217 string(FIND "${line}" "#define SLEPC_VERSION_MINOR " pos)
218 IF(NOT ${pos} EQUAL -1)
219 string(LENGTH ${line} line_length_minor)#length of the line
220 if(${line_length_minor} EQUAL ${line_length_major})
221 MATH(EXPR slepc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
222 string(SUBSTRING ${line} ${slepc_version_minor} 1 SLEPC_VERSION_MINOR)
224 else(${line_length_minor} EQUAL ${line_length_major})
225 MATH(EXPR slepc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
226 string(SUBSTRING ${line} ${slepc_version_minor} 2 SLEPC_VERSION_MINOR)
227 endif(${line_length_minor} EQUAL ${line_length_major})
228 ENDIF(NOT ${pos} EQUAL -1)
229 ENDFOREACH(line ${slepcversion_file})
230 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
231 message(STATUS "SLEPc detected, version is ${SLEPC_VERSION_MAJOR}.${SLEPC_VERSION_MINOR}" )
232 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
233 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
234 message( FATAL_ERROR "SLEPc not found in the system" )
235 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
237 #HDF5 to be found in the system
238 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
239 find_package(HDF5 REQUIRED)
240 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
241 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
242 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
244 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
245 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
246 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
247 # set(PETSC_DIR /usr/lib/petsc/)
248 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
249 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
251 # find_package (PETSc 3.4 REQUIRED)
252 # petsc_get_version ()
253 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
255 # Define and search slepc variables
256 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
257 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
258 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
259 # set(SLEPC_DIR /usr/lib/slepc/)
260 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
261 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
262 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
263 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
264 # message( FATAL_ERROR "SLEPc not found in the system" )
265 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
267 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
269 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
270 message (STATUS "PETSC not found in the system")
271 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
272 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
273 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
275 #extract petsc tarball name
276 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
277 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
278 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
279 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
280 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
282 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
283 set(PETSC_ARCH arch-linux-c-opt)
284 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/lib/petsc)#folder to copy petsc libraries and include files
286 ExternalProject_Add (PETSc
287 URL ${DOWNLOAD_PETSC}
288 SOURCE_DIR ${PETSC_DIR}
290 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}
291 BUILD_COMMAND make all
292 TEST_COMMAND make check
293 INSTALL_COMMAND make install
294 INSTALL_DIR ${PETSC_DIR}
295 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
296 LOG_DOWNLOAD TRUE # Wrap download in script to log output
297 LOG_UPDATE TRUE # Wrap update in script to log output
298 LOG_CONFIGURE TRUE # Wrap configure in script to log output
299 LOG_BUILD TRUE # Wrap build in script to log output
300 LOG_TEST TRUE # Wrap test in script to log output
301 LOG_INSTALL TRUE # Wrap install in script to log output
304 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
306 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
307 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
308 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
309 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
310 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
312 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
313 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
315 #extract slepc tarball name
316 string(LENGTH "${DOWNLOAD_SLEPC}" tarball_url_length)#length of the tarball
317 string(FIND "${DOWNLOAD_SLEPC}" "/" start_tarball_name REVERSE )# last occurence of "/"
318 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
319 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
320 string(SUBSTRING ${DOWNLOAD_SLEPC} ${start_tarball_name} ${tarball_name_length} SLEPC_TARBALL_NAME)
322 #extract slepc version
323 string(LENGTH "${SLEPC_TARBALL_NAME}" tarball_name_length)#length of the tarball
324 string(FIND "${SLEPC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
325 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
326 string(SUBSTRING ${SLEPC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} SLEPC_VERSION)
327 message( STATUS "SLEPc version ${SLEPC_VERSION} will be installed" )
329 #define slepc variables
330 set(SLEPC_DIR ${PETSC_INSTALL})
331 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/include )
332 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/installed-arch-linux2-c-opt/lib/libslepc.so)
333 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
335 #define hdf5 variables
336 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
337 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
338 set(HDF5_ROOT $ENV{HDF5_ROOT})
339 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
340 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
341 endif( DEFINED ENV{HDF5_ROOT} )
342 endif( NOT HDF5_ROOT )
343 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
344 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
346 #define MPI variables
347 #set(SOLVERLAB_WITH_MPI ON)
348 #set(MPI_HOME ${PETSC_INSTALL} )
349 #set(MPI_LIBRARY ${PETSC_INSTALL}/lib/libmpi.so)
350 #set(MPIEXEC ${PETSC_INSTALL}/bin/mpiexec)
351 #set(MPI4PY_ROOT_DIR ${PETSC_INSTALL}/lib/mpi4py )
353 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
354 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
356 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
357 add_definitions(-DPETSC_VERSION_GREATER_3_5)
358 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
360 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
362 add_library(petsc SHARED IMPORTED)
363 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
364 add_library(slepc SHARED IMPORTED)
365 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
367 ######################################################
368 # Detection or compilation of MEDFile #
369 ######################################################
370 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
372 if ( NOT MEDFILE_ROOT_DIR )
373 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
374 endif( NOT MEDFILE_ROOT_DIR )
376 find_package (MEDFile REQUIRED)
378 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
380 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
382 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
383 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
385 #extraction of the tarball archive name
386 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
387 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
388 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
389 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
390 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
392 ExternalProject_Add (MED
393 URL ${DOWNLOAD_MED} #location of med tarball
394 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
396 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
398 INSTALL_COMMAND make install
399 INSTALL_DIR ${MEDFILE_ROOT_DIR}
400 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
401 LOG_DOWNLOAD TRUE # Wrap download in script to log output
402 LOG_UPDATE TRUE # Wrap update in script to log output
403 LOG_CONFIGURE TRUE # Wrap configure in script to log output
404 LOG_BUILD TRUE # Wrap build in script to log output
405 LOG_TEST TRUE # Wrap test in script to log output
406 LOG_INSTALL TRUE # Wrap install in script to log output
409 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
410 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
411 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
413 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
415 add_library(med SHARED IMPORTED)
416 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
417 add_library(medC SHARED IMPORTED)
418 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
420 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
422 ######################################################
423 # Detection or compilation of MEDCoupling #
424 ######################################################
425 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
427 if ( NOT MEDCOUPLING_ROOT_DIR )
428 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
429 endif( NOT MEDCOUPLING_ROOT_DIR )
431 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
433 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
434 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
435 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
437 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
438 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
439 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
440 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
442 #extraction of the tarball archive name
443 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
444 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
445 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
446 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
447 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
448 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
450 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
452 ExternalProject_Add (MEDCoupling
453 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
454 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
456 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
458 INSTALL_COMMAND make install
459 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
460 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
461 LOG_DOWNLOAD TRUE # Wrap download in script to log output
462 LOG_UPDATE TRUE # Wrap update in script to log output
463 LOG_CONFIGURE TRUE # Wrap configure in script to log output
464 LOG_BUILD TRUE # Wrap build in script to log output
465 LOG_TEST TRUE # Wrap test in script to log output
466 LOG_INSTALL TRUE # Wrap install in script to log output
469 add_library(medloader SHARED IMPORTED )
470 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
472 SET(MEDCOUPLING_USE_64BIT_IDS ON)
474 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
476 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
477 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
479 add_library(medcoupling SHARED IMPORTED )
480 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
482 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
483 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
484 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
486 if (TARGET MED AND TARGET PETSc)
487 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
488 endif(TARGET MED AND TARGET PETSc)
490 if (TARGET MED AND TARGET MEDCoupling)
491 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
492 endif(TARGET MED AND TARGET MEDCoupling)
494 if (TARGET PETSc AND TARGET MEDCoupling)
495 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
496 endif(TARGET PETSc AND TARGET MEDCoupling)
498 IF(MEDCOUPLING_USE_64BIT_IDS)
499 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
500 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
506 # Paraview variables to choose python version and for env_SOLVERLAB.sh
507 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
508 if ( PARAVIEW_ROOT_DIR )
509 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
510 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
511 else( PARAVIEW_ROOT_DIR )
512 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
513 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
514 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
515 endif( PARAVIEW_ROOT_DIR )
516 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
517 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview in the system.")
518 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
519 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/:/usr/lib/x86_64-linux-gnu)
520 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
522 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
523 if ( NOT DEFINED PARAVIEW_VERSION )
524 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
525 endif( NOT DEFINED PARAVIEW_VERSION )
526 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
527 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
528 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 )
529 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
531 #extraction of the paraview version"
532 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
533 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
534 set( PARAVIEW_VERSION "5.8")
535 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
536 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
537 file(STRINGS ${vtkConfig_file} vtkConfig)
538 FOREACH(line ${vtkConfig})
539 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
540 IF(NOT ${pos} EQUAL -1)
541 string(LENGTH ${line} line_length)#length of the tarball
542 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
543 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
545 ENDIF(NOT ${pos} EQUAL -1)
546 ENDFOREACH(line ${vtkConfig})
547 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
548 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
549 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
551 #Choose python 2 or 3
552 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
554 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
555 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
557 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
558 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
561 IF ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
562 IF ( PYTHON_ROOT_DIR )
563 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
564 ELSE( PYTHON_ROOT_DIR )
565 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
566 ENDIF( PYTHON_ROOT_DIR)
567 ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
569 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
570 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
571 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
572 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
573 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
574 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
575 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
576 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
577 set(Python_VERSION ${PYTHON_VERSION_STRING})
578 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
579 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
580 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
582 message(STATUS "Python version found is ${Python_VERSION}")
585 IF ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
586 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
587 ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
590 IF ( NOT DEFINED PYQT5_ROOT_DIR )
591 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
592 ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
594 #Paraview library paths
595 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})
596 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)
598 # Detection of python-paraview
599 string(REPLACE ":" ";" PV_PYTHON_DIR_PATHS "${PV_PYTHON_DIR}")# use semicolon instead of colon in PATH search
600 find_file(python-paraview simple.py PATHS ${PV_PYTHON_DIR_PATHS})
601 if( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
602 message(WARNING "Python Paraview library not found. Post processing will fail in SOLVERLAB scripts.")
603 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
604 else( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
605 if( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
606 message ( STATUS "Using system Paraview python libraries on Ubuntu 20.04 requires the presence and preload of library netcdf (bug in linkage)." )
607 if( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
608 message ( STATUS "Library netcdf found in the system. Paraview python libraries should be functional." )
609 set(PRELOAD_NETCDF_ON_UBUNTU20 ON)
610 else( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
611 message ( WARNING "Library netcdf not found in system. Paraview python libraries may not be functional (bug in linkage)." )
612 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
613 endif( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
614 else( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
615 message(STATUS "Python Paraview library found. Post processing will work in SOLVERLAB scripts.")
616 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
617 endif( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
618 endif( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
621 IF ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
622 IF ( DEFINED SWIG_ROOT_DIR )
623 set(SWIG_EXECUTABLE ${SWIG_ROOT_DIR}/bin/swig )
624 ELSE ( DEFINED SWIG_ROOT_DIR )
625 set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig )
626 ENDIF( DEFINED SWIG_ROOT_DIR)
627 ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
628 find_package (SWIG 3.0 REQUIRED)
631 if (SOLVERLAB_WITH_DOCUMENTATION) #
632 IF ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
633 IF ( DEFINED DOXYGEN_ROOT_DIR )
634 set(DOXYGEN_EXECUTABLE ${DOXYGEN_ROOT_DIR}/bin/doxygen )
635 ELSE ( DEFINED DOXYGEN_ROOT_DIR )
636 set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen )
637 ENDIF( DEFINED DOXYGEN_ROOT_DIR)
638 ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
639 find_package (Doxygen) #
640 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
641 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
642 if (NOT DOXYGEN_FOUND)
643 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
644 endif(NOT DOXYGEN_FOUND)
645 endif(SOLVERLAB_WITH_DOCUMENTATION)
647 if (SOLVERLAB_WITH_TESTS) #
649 IF ( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
650 IF ( DEFINED CPPUNIT_ROOT_DIR )
651 set(CPPUNIT_ROOT_USER ${CPPUNIT_ROOT_DIR} )
652 ELSE ( DEFINED CPPUNIT_ROOT_DIR )
653 set(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT_DIR} )
654 ENDIF( DEFINED CPPUNIT_ROOT_DIR)
655 ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
656 find_package (CPPUNIT REQUIRED)
657 endif(SOLVERLAB_WITH_TESTS)
659 # Enter subdirectories
660 set(CDMATH_WITH_POSTPRO ${SOLVERLAB_WITH_POSTPRO} )
661 set(CDMATH_WITH_PETSC ${SOLVERLAB_WITH_PETSC} )
662 set(CDMATH_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
663 set(CDMATH_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
664 set(CDMATH_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
665 set(CDMATH_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
666 add_subdirectory (CDMATH)
667 if(SOLVERLAB_WITH_COREFLOWS)
668 set(COREFLOWS_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
669 set(COREFLOWS_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
670 set(COREFLOWS_WITH_GUI ${SOLVERLAB_WITH_GUI} )
671 set(COREFLOWS_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
672 set(COREFLOWS_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
673 add_subdirectory (CoreFlows)
674 endif(SOLVERLAB_WITH_COREFLOWS)
678 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
679 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh