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")
63 if ( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
64 if ( DEFINED ENV{MPI_ROOT_DIR} )
65 set(MPI_HOME $ENV{MPI_ROOT_DIR})
66 else ( DEFINED ENV{MPI_ROOT_DIR} )
67 set(MPI_HOME ${MPI_ROOT_DIR})
68 endif( DEFINED ENV{MPI_ROOT_DIR} )
69 endif( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
71 # Definition of SOLVERLAB_WITH_MPI
72 if( DEFINED ENV{MPI_HOME} OR MPI_HOME )
73 set(SOLVERLAB_WITH_MPI ON)
75 if( ${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
76 set ( MPI_LIBRARY ${MPI_HOME}/lib/libmpi.so )
77 endif(${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
78 message ( STATUS "MPI executable is ${MPIEXEC}" )
79 else( DEFINED ENV{MPI_HOME} OR MPI_HOME )
80 set(SOLVERLAB_WITH_MPI OFF)
81 endif( DEFINED ENV{MPI_HOME} OR MPI_HOME )
83 # Definition of MPI4PY_ROOT_DIR
84 if( ${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
85 message(STATUS "Defining MPI4PY directory" )
86 if( DEFINED ENV{MPI4PY_ROOT_DIR})
87 set(MPI4PY_ROOT_DIR $ENV{MPI4PY_ROOT_DIR})
88 else( DEFINED ENV{MPI4PY_ROOT_DIR})
89 set(MPI4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/mpi4py)
90 endif( DEFINED ENV{MPI4PY_ROOT_DIR})
91 endif(${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
94 message(STATUS "MPI4PY directory is ${MPI4PY_ROOT_DIR}" )
95 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMPI4PY_ROOT_DIR=${MPI4PY_ROOT_DIR})
96 endif( MPI4PY_ROOT_DIR)
98 ############################
99 # Definition of HDF5_ROOT #
100 ############################
101 if ( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
102 if ( DEFINED ENV{HDF5_ROOT_DIR} )
103 set(HDF5_ROOT $ENV{HDF5_ROOT_DIR})
104 else ( DEFINED ENV{HDF5_ROOT_DIR} )
105 set(HDF5_ROOT ${HDF5_ROOT_DIR})
106 endif( DEFINED ENV{HDF5_ROOT_DIR} )
107 endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
109 ######################################################
110 # Detection or compilation of PETSc+SLEPc+HDF5 #
111 ######################################################
112 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
114 set(PETSC_DIR $ENV{PETSC_DIR})
115 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
117 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
120 find_package (PETSc 3.4 REQUIRED)
123 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
124 message ( STATUS "PETSc compiler is ${PETSC_COMPILER}" )
125 message ( STATUS "PETSc executable is ${PETSC_MPIEXEC}")
127 set(PETSC_INSTALL ${PETSC_DIR})
129 #Define and search slepc variables
131 if ( DEFINED ENV{SLEPC_DIR} )
132 set(SLEPC_DIR $ENV{SLEPC_DIR})
133 else ( DEFINED ENV{SLEPC_DIR} )
134 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
135 endif( DEFINED ENV{SLEPC_DIR} )
136 endif( NOT SLEPC_DIR)
138 message ( STATUS "Checking variable SLEPC_DIR" )
139 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
140 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
141 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
142 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
144 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
147 #define hdf5 variables
148 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
149 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
150 set(HDF5_ROOT $ENV{HDF5_ROOT})
151 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
152 #HDF5 to be found in petsc external packages
153 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
154 endif( DEFINED ENV{HDF5_ROOT} )
155 endif( NOT HDF5_ROOT )
157 find_package(HDF5 COMPONENTS CXX HL)
159 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
160 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
161 endif( NOT HDF5_FOUND)
163 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
164 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
166 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
167 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
168 message ( STATUS "PETSC library found in /usr/lib64" )
170 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
171 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
173 file(STRINGS /usr/include/petsc/petscversion.h petscversion_file)
174 FOREACH(line ${petscversion_file})
175 string(FIND "${line}" "#define PETSC_VERSION_MAJOR " pos)
176 IF(NOT ${pos} EQUAL -1)
177 string(LENGTH ${line} line_length_major)#length of the line
178 MATH(EXPR petsc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
179 string(SUBSTRING ${line} ${petsc_version_major} 1 PETSC_VERSION_MAJOR)
181 ENDIF(NOT ${pos} EQUAL -1)
182 ENDFOREACH(line ${petscversion_file})
183 FOREACH(line ${petscversion_file})
184 string(FIND "${line}" "#define PETSC_VERSION_MINOR " pos)
185 IF(NOT ${pos} EQUAL -1)
186 string(LENGTH ${line} line_length_minor)#length of the line
187 if(${line_length_minor} EQUAL ${line_length_major})
188 MATH(EXPR petsc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
189 string(SUBSTRING ${line} ${petsc_version_minor} 1 PETSC_VERSION_MINOR)
191 else(${line_length_minor} EQUAL ${line_length_major})
192 MATH(EXPR petsc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
193 string(SUBSTRING ${line} ${petsc_version_minor} 2 PETSC_VERSION_MINOR)
194 endif(${line_length_minor} EQUAL ${line_length_major})
195 ENDIF(NOT ${pos} EQUAL -1)
196 ENDFOREACH(line ${petscversion_file})
197 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
198 message(STATUS "PETSc detected, version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}" )
200 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
201 set(PETSC_INSTALL ${PETSC_DIR})
203 #Define and search slepc variables
204 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
205 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
206 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
208 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
209 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
210 file(STRINGS /usr/include/slepc/slepcversion.h slepcversion_file)
211 FOREACH(line ${slepcversion_file})
212 string(FIND "${line}" "#define SLEPC_VERSION_MAJOR " pos)
213 IF(NOT ${pos} EQUAL -1)
214 string(LENGTH ${line} line_length_major)#length of the line
215 MATH(EXPR slepc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
216 string(SUBSTRING ${line} ${slepc_version_major} 1 SLEPC_VERSION_MAJOR)
218 ENDIF(NOT ${pos} EQUAL -1)
219 ENDFOREACH(line ${slepcversion_file})
220 FOREACH(line ${slepcversion_file})
221 string(FIND "${line}" "#define SLEPC_VERSION_MINOR " pos)
222 IF(NOT ${pos} EQUAL -1)
223 string(LENGTH ${line} line_length_minor)#length of the line
224 if(${line_length_minor} EQUAL ${line_length_major})
225 MATH(EXPR slepc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
226 string(SUBSTRING ${line} ${slepc_version_minor} 1 SLEPC_VERSION_MINOR)
228 else(${line_length_minor} EQUAL ${line_length_major})
229 MATH(EXPR slepc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
230 string(SUBSTRING ${line} ${slepc_version_minor} 2 SLEPC_VERSION_MINOR)
231 endif(${line_length_minor} EQUAL ${line_length_major})
232 ENDIF(NOT ${pos} EQUAL -1)
233 ENDFOREACH(line ${slepcversion_file})
234 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
235 message(STATUS "SLEPc detected, version is ${SLEPC_VERSION_MAJOR}.${SLEPC_VERSION_MINOR}" )
236 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
237 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
238 message( FATAL_ERROR "SLEPc not found in the system" )
239 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
241 #HDF5 to be found in the system
242 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
243 find_package(HDF5 REQUIRED)
244 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
245 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
246 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
248 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
249 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
250 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
251 # set(PETSC_DIR /usr/lib/petsc/)
252 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
253 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
255 # find_package (PETSc 3.4 REQUIRED)
256 # petsc_get_version ()
257 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
259 # Define and search slepc variables
260 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
261 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
262 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
263 # set(SLEPC_DIR /usr/lib/slepc/)
264 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
265 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
266 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
267 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
268 # message( FATAL_ERROR "SLEPc not found in the system" )
269 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
271 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
273 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
274 message (STATUS "PETSC not found in the system")
275 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
276 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
277 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
279 #extract petsc tarball name
280 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
281 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
282 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
283 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
284 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
286 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
287 set(PETSC_ARCH arch-linux-c-opt)
288 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/lib/petsc)#folder to copy petsc libraries and include files
290 ExternalProject_Add (PETSc
291 URL ${DOWNLOAD_PETSC}
292 SOURCE_DIR ${PETSC_DIR}
294 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}
295 BUILD_COMMAND make all
296 TEST_COMMAND make check
297 INSTALL_COMMAND make install
298 INSTALL_DIR ${PETSC_DIR}
299 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
300 LOG_DOWNLOAD TRUE # Wrap download in script to log output
301 LOG_UPDATE TRUE # Wrap update in script to log output
302 LOG_CONFIGURE TRUE # Wrap configure in script to log output
303 LOG_BUILD TRUE # Wrap build in script to log output
304 LOG_TEST TRUE # Wrap test in script to log output
305 LOG_INSTALL TRUE # Wrap install in script to log output
308 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
310 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
311 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
312 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
313 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
314 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
316 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
317 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
319 #extract slepc tarball name
320 string(LENGTH "${DOWNLOAD_SLEPC}" tarball_url_length)#length of the tarball
321 string(FIND "${DOWNLOAD_SLEPC}" "/" start_tarball_name REVERSE )# last occurence of "/"
322 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
323 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
324 string(SUBSTRING ${DOWNLOAD_SLEPC} ${start_tarball_name} ${tarball_name_length} SLEPC_TARBALL_NAME)
326 #extract slepc version
327 string(LENGTH "${SLEPC_TARBALL_NAME}" tarball_name_length)#length of the tarball
328 string(FIND "${SLEPC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
329 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
330 string(SUBSTRING ${SLEPC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} SLEPC_VERSION)
331 message( STATUS "SLEPc version ${SLEPC_VERSION} will be installed" )
333 #define slepc variables
334 set(SLEPC_DIR ${PETSC_INSTALL})
335 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/include )
336 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/installed-arch-linux2-c-opt/lib/libslepc.so)
337 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
339 #define hdf5 variables
340 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
341 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
342 set(HDF5_ROOT $ENV{HDF5_ROOT})
343 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
344 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
345 endif( DEFINED ENV{HDF5_ROOT} )
346 endif( NOT HDF5_ROOT )
347 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
348 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
350 #define MPI variables
351 #set(SOLVERLAB_WITH_MPI ON)
352 #set(MPI_HOME ${PETSC_INSTALL} )
353 #set(MPI_LIBRARY ${PETSC_INSTALL}/lib/libmpi.so)
354 #set(MPIEXEC ${PETSC_INSTALL}/bin/mpiexec)
355 #set(MPI4PY_ROOT_DIR ${PETSC_INSTALL}/lib/mpi4py )
357 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
358 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
360 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
361 add_definitions(-DPETSC_VERSION_GREATER_3_5)
362 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
364 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
366 add_library(petsc SHARED IMPORTED)
367 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
368 add_library(slepc SHARED IMPORTED)
369 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
371 ######################################################
372 # Detection or compilation of MEDFile #
373 ######################################################
374 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
376 if ( NOT MEDFILE_ROOT_DIR )
377 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
378 endif( NOT MEDFILE_ROOT_DIR )
380 find_package (MEDFile REQUIRED)
382 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
384 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
386 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
387 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
389 #extraction of the tarball archive name
390 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
391 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
392 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
393 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
394 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
396 ExternalProject_Add (MED
397 URL ${DOWNLOAD_MED} #location of med tarball
398 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
400 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
402 INSTALL_COMMAND make install
403 INSTALL_DIR ${MEDFILE_ROOT_DIR}
404 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
405 LOG_DOWNLOAD TRUE # Wrap download in script to log output
406 LOG_UPDATE TRUE # Wrap update in script to log output
407 LOG_CONFIGURE TRUE # Wrap configure in script to log output
408 LOG_BUILD TRUE # Wrap build in script to log output
409 LOG_TEST TRUE # Wrap test in script to log output
410 LOG_INSTALL TRUE # Wrap install in script to log output
413 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
414 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
415 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
417 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
419 add_library(med SHARED IMPORTED)
420 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
421 add_library(medC SHARED IMPORTED)
422 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
424 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
426 ######################################################
427 # Detection or compilation of MEDCoupling #
428 ######################################################
429 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
431 if ( NOT MEDCOUPLING_ROOT_DIR )
432 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
433 endif( NOT MEDCOUPLING_ROOT_DIR )
435 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
437 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
438 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
439 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
441 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
442 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
443 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
444 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
446 #extraction of the tarball archive name
447 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
448 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
449 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
450 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
451 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
452 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
454 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
456 ExternalProject_Add (MEDCoupling
457 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
458 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
460 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
462 INSTALL_COMMAND make install
463 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
464 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
465 LOG_DOWNLOAD TRUE # Wrap download in script to log output
466 LOG_UPDATE TRUE # Wrap update in script to log output
467 LOG_CONFIGURE TRUE # Wrap configure in script to log output
468 LOG_BUILD TRUE # Wrap build in script to log output
469 LOG_TEST TRUE # Wrap test in script to log output
470 LOG_INSTALL TRUE # Wrap install in script to log output
473 add_library(medloader SHARED IMPORTED )
474 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
476 SET(MEDCOUPLING_USE_64BIT_IDS ON)
478 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
480 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
481 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
483 add_library(medcoupling SHARED IMPORTED )
484 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
486 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
487 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
488 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
490 if (TARGET MED AND TARGET PETSc)
491 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
492 endif(TARGET MED AND TARGET PETSc)
494 if (TARGET MED AND TARGET MEDCoupling)
495 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
496 endif(TARGET MED AND TARGET MEDCoupling)
498 if (TARGET PETSc AND TARGET MEDCoupling)
499 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
500 endif(TARGET PETSc AND TARGET MEDCoupling)
502 IF(MEDCOUPLING_USE_64BIT_IDS)
503 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
504 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
510 # Paraview variables to choose python version and for env_SOLVERLAB.sh
511 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
512 if ( PARAVIEW_ROOT_DIR )
513 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
514 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
515 else( PARAVIEW_ROOT_DIR )
516 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
517 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
518 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
519 endif( PARAVIEW_ROOT_DIR )
520 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
521 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview in the system.")
522 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
523 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/:/usr/lib/x86_64-linux-gnu)
524 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
526 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
527 if ( NOT DEFINED PARAVIEW_VERSION )
528 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
529 endif( NOT DEFINED PARAVIEW_VERSION )
530 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
531 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
532 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 )
533 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
535 #extraction of the paraview version"
536 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
537 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
538 set( PARAVIEW_VERSION "5.8")
539 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
540 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
541 file(STRINGS ${vtkConfig_file} vtkConfig)
542 FOREACH(line ${vtkConfig})
543 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
544 IF(NOT ${pos} EQUAL -1)
545 string(LENGTH ${line} line_length)#length of the tarball
546 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
547 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
549 ENDIF(NOT ${pos} EQUAL -1)
550 ENDFOREACH(line ${vtkConfig})
551 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
552 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
553 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
555 #Choose python 2 or 3
556 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
558 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
559 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
561 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
562 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
565 IF ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
566 IF ( PYTHON_ROOT_DIR )
567 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
568 ELSE( PYTHON_ROOT_DIR )
569 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
570 ENDIF( PYTHON_ROOT_DIR)
571 ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
573 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
574 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
575 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
576 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
577 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
578 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
579 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
580 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
581 set(Python_VERSION ${PYTHON_VERSION_STRING})
582 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
583 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
584 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
586 message(STATUS "Python version found is ${Python_VERSION}")
589 IF ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
590 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
591 ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
594 IF ( NOT DEFINED PYQT5_ROOT_DIR )
595 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
596 ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
598 #Paraview library paths
599 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})
600 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)
602 # Detection of python-paraview
603 string(REPLACE ":" ";" PV_PYTHON_DIR_PATHS "${PV_PYTHON_DIR}")# use semicolon instead of colon in PATH search
604 find_file(python-paraview simple.py PATHS ${PV_PYTHON_DIR_PATHS})
605 if( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
606 message(WARNING "Python Paraview library not found. Post processing will fail in SOLVERLAB scripts.")
607 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
608 else( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
609 if( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
610 message ( STATUS "Using system Paraview python libraries on Ubuntu 20.04 requires the presence and preload of library netcdf (bug in linkage)." )
611 if( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
612 message ( STATUS "Library netcdf found in the system. Paraview python libraries should be functional." )
613 set(PRELOAD_NETCDF_ON_UBUNTU20 ON)
614 else( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
615 message ( WARNING "Library netcdf not found in system. Paraview python libraries may not be functional (bug in linkage)." )
616 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
617 endif( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
618 else( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
619 message(STATUS "Python Paraview library found. Post processing will work in SOLVERLAB scripts.")
620 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
621 endif( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
622 endif( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
625 IF ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
626 IF ( DEFINED SWIG_ROOT_DIR )
627 set(SWIG_EXECUTABLE ${SWIG_ROOT_DIR}/bin/swig )
628 ELSE ( DEFINED SWIG_ROOT_DIR )
629 set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig )
630 ENDIF( DEFINED SWIG_ROOT_DIR)
631 ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
632 find_package (SWIG 3.0 REQUIRED)
635 if (SOLVERLAB_WITH_DOCUMENTATION) #
636 IF ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
637 IF ( DEFINED DOXYGEN_ROOT_DIR )
638 set(DOXYGEN_EXECUTABLE ${DOXYGEN_ROOT_DIR}/bin/doxygen )
639 ELSE ( DEFINED DOXYGEN_ROOT_DIR )
640 set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen )
641 ENDIF( DEFINED DOXYGEN_ROOT_DIR)
642 ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
643 find_package (Doxygen) #
644 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
645 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
646 if (NOT DOXYGEN_FOUND)
647 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
648 endif(NOT DOXYGEN_FOUND)
650 configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
651 add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile SOURCES ${PROJECT_BINARY_DIR}/Doxyfile) #
652 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/solverlab-dev-doc OPTIONAL) #
653 endif(SOLVERLAB_WITH_DOCUMENTATION)
655 if (SOLVERLAB_WITH_TESTS) #
657 IF ( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
658 IF ( DEFINED CPPUNIT_ROOT_DIR )
659 set(CPPUNIT_ROOT_USER ${CPPUNIT_ROOT_DIR} )
660 ELSE ( DEFINED CPPUNIT_ROOT_DIR )
661 set(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT_DIR} )
662 ENDIF( DEFINED CPPUNIT_ROOT_DIR)
663 ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
664 find_package (CPPUNIT REQUIRED)
666 add_custom_target (cpp COMMAND ctest -R .exe)# may be replace ctest -R with ctest -L
667 add_custom_target (mpi COMMAND ctest -R Proc)# may be replace ctest -R with ctest -L
668 endif(SOLVERLAB_WITH_TESTS)
670 # Enter subdirectories
671 set(CDMATH_WITH_POSTPRO ${SOLVERLAB_WITH_POSTPRO} )
672 set(CDMATH_WITH_PETSC ${SOLVERLAB_WITH_PETSC} )
673 set(CDMATH_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
674 set(CDMATH_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
675 set(CDMATH_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
676 set(CDMATH_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
677 add_subdirectory (CDMATH)
678 if(SOLVERLAB_WITH_COREFLOWS)
679 set(COREFLOWS_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
680 set(COREFLOWS_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
681 set(COREFLOWS_WITH_GUI ${SOLVERLAB_WITH_GUI} )
682 set(COREFLOWS_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
683 set(COREFLOWS_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
684 add_subdirectory (CoreFlows)
685 endif(SOLVERLAB_WITH_COREFLOWS)
689 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
690 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh