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 #############################
63 if ( DEFINED MPI_ROOT_DIR )
64 set(MPI_HOME ${MPI_ROOT_DIR})
65 endif( 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 from either the environment or petsc
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})#Necessary for swig generation of mpi structures
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 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
347 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
349 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
350 add_definitions(-DPETSC_VERSION_GREATER_3_5)
351 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
353 if ( ${SOLVERLAB_WITH_PYTHON} )
354 set(SLEPC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/slepc4py)# or use FindSLEPC4PY
355 set(PETSC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc4py)# or use FindPETSC4PY
356 endif( ${SOLVERLAB_WITH_PYTHON} )
358 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
360 add_library(petsc SHARED IMPORTED)
361 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
362 add_library(slepc SHARED IMPORTED)
363 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
365 ######################################################
366 # Detection or compilation of MEDFile #
367 ######################################################
368 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
370 if ( NOT MEDFILE_ROOT_DIR )
371 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
372 endif( NOT MEDFILE_ROOT_DIR )
374 find_package (MEDFile REQUIRED)
376 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
378 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
380 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
381 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
383 #extraction of the tarball archive name
384 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
385 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
386 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
387 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
388 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
390 ExternalProject_Add (MED
391 URL ${DOWNLOAD_MED} #location of med tarball
392 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
394 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
396 INSTALL_COMMAND make install
397 INSTALL_DIR ${MEDFILE_ROOT_DIR}
398 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
399 LOG_DOWNLOAD TRUE # Wrap download in script to log output
400 LOG_UPDATE TRUE # Wrap update in script to log output
401 LOG_CONFIGURE TRUE # Wrap configure in script to log output
402 LOG_BUILD TRUE # Wrap build in script to log output
403 LOG_TEST TRUE # Wrap test in script to log output
404 LOG_INSTALL TRUE # Wrap install in script to log output
407 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
408 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
409 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
411 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
413 add_library(med SHARED IMPORTED)
414 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
415 add_library(medC SHARED IMPORTED)
416 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
418 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
420 ######################################################
421 # Detection or compilation of MEDCoupling #
422 ######################################################
423 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
425 if ( NOT MEDCOUPLING_ROOT_DIR )
426 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
427 endif( NOT MEDCOUPLING_ROOT_DIR )
429 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
431 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
432 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
433 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
435 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
436 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
437 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
438 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
440 #extraction of the tarball archive name
441 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
442 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
443 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
444 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
445 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
446 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
448 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
450 ExternalProject_Add (MEDCoupling
451 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
452 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
454 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
456 INSTALL_COMMAND make install
457 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
458 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
459 LOG_DOWNLOAD TRUE # Wrap download in script to log output
460 LOG_UPDATE TRUE # Wrap update in script to log output
461 LOG_CONFIGURE TRUE # Wrap configure in script to log output
462 LOG_BUILD TRUE # Wrap build in script to log output
463 LOG_TEST TRUE # Wrap test in script to log output
464 LOG_INSTALL TRUE # Wrap install in script to log output
467 add_library(medloader SHARED IMPORTED )
468 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
470 SET(MEDCOUPLING_USE_64BIT_IDS ON)
472 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
474 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
475 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
477 add_library(medcoupling SHARED IMPORTED )
478 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
480 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
481 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
482 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
484 if (TARGET MED AND TARGET PETSc)
485 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
486 endif(TARGET MED AND TARGET PETSc)
488 if (TARGET MED AND TARGET MEDCoupling)
489 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
490 endif(TARGET MED AND TARGET MEDCoupling)
492 if (TARGET PETSc AND TARGET MEDCoupling)
493 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
494 endif(TARGET PETSc AND TARGET MEDCoupling)
496 IF(MEDCOUPLING_USE_64BIT_IDS)
497 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
498 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
504 # Paraview variables to choose python version and for env_SOLVERLAB.sh
505 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
506 if ( PARAVIEW_ROOT_DIR )
507 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
508 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
509 else( PARAVIEW_ROOT_DIR )
510 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
511 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
512 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
513 endif( PARAVIEW_ROOT_DIR )
514 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
515 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview in the system.")
516 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
517 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/:/usr/lib/x86_64-linux-gnu)
518 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
520 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
521 if ( NOT DEFINED PARAVIEW_VERSION )
522 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
523 endif( NOT DEFINED PARAVIEW_VERSION )
524 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
525 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
526 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 )
527 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
529 #extraction of the paraview version"
530 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
531 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
532 set( PARAVIEW_VERSION "5.8")
533 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
534 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
535 file(STRINGS ${vtkConfig_file} vtkConfig)
536 FOREACH(line ${vtkConfig})
537 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
538 IF(NOT ${pos} EQUAL -1)
539 string(LENGTH ${line} line_length)#length of the tarball
540 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
541 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
543 ENDIF(NOT ${pos} EQUAL -1)
544 ENDFOREACH(line ${vtkConfig})
545 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
546 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
547 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
549 #Choose python 2 or 3
550 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
552 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
553 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
555 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
556 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
559 IF ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
560 IF ( PYTHON_ROOT_DIR )
561 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
562 ELSE( PYTHON_ROOT_DIR )
563 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
564 ENDIF( PYTHON_ROOT_DIR)
565 ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
567 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
568 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
569 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
570 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
571 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
572 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
573 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
574 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
575 set(Python_VERSION ${PYTHON_VERSION_STRING})
576 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
577 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
578 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
580 message(STATUS "Python version found is ${Python_VERSION}")
583 IF ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
584 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
585 ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
588 IF ( NOT DEFINED PYQT5_ROOT_DIR )
589 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
590 ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
592 #Paraview library paths
593 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})
594 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)
596 # Detection of python-paraview
597 string(REPLACE ":" ";" PV_PYTHON_DIR_PATHS "${PV_PYTHON_DIR}")# use semicolon instead of colon in PATH search
598 find_file(python-paraview simple.py PATHS ${PV_PYTHON_DIR_PATHS})
599 if( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
600 message(WARNING "Python Paraview library not found. Post processing will fail in SOLVERLAB scripts.")
601 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
602 else( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
603 if( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
604 message ( STATUS "Using system Paraview python libraries on Ubuntu 20.04 requires the presence and preload of library netcdf (bug in linkage)." )
605 if( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
606 message ( STATUS "Library netcdf found in the system. Paraview python libraries should be functional." )
607 set(PRELOAD_NETCDF_ON_UBUNTU20 ON)
608 else( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
609 message ( WARNING "Library netcdf not found in system. Paraview python libraries may not be functional (bug in linkage)." )
610 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
611 endif( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
612 else( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
613 message(STATUS "Python Paraview library found. Post processing will work in SOLVERLAB scripts.")
614 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
615 endif( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
616 endif( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
619 IF ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
620 IF ( DEFINED SWIG_ROOT_DIR )
621 set(SWIG_EXECUTABLE ${SWIG_ROOT_DIR}/bin/swig )
622 ELSE ( DEFINED SWIG_ROOT_DIR )
623 set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig )
624 ENDIF( DEFINED SWIG_ROOT_DIR)
625 ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
626 find_package (SWIG 3.0 REQUIRED)
629 if (SOLVERLAB_WITH_DOCUMENTATION) #
630 IF ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
631 IF ( DEFINED DOXYGEN_ROOT_DIR )
632 set(DOXYGEN_EXECUTABLE ${DOXYGEN_ROOT_DIR}/bin/doxygen )
633 ELSE ( DEFINED DOXYGEN_ROOT_DIR )
634 set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen )
635 ENDIF( DEFINED DOXYGEN_ROOT_DIR)
636 ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
637 find_package (Doxygen) #
638 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
639 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
640 if (NOT DOXYGEN_FOUND)
641 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
642 endif(NOT DOXYGEN_FOUND)
644 configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
645 add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile SOURCES ${PROJECT_BINARY_DIR}/Doxyfile) #
646 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/solverlab-dev-doc OPTIONAL) #
648 if ( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
650 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) #
651 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Utilities/html DESTINATION share/doc/solverlab-gui-doc OPTIONAL) #
652 endif( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
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