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 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 if (NOT DEFINED CMAKE_CXX_COMPILER)
80 set(CMAKE_CXX_COMPILER ${MPI_HOME}/bin/mpic++)
81 endif(NOT DEFINED CMAKE_CXX_COMPILER)
82 message ( STATUS "MPI C++ compiler is ${CMAKE_CXX_COMPILER}" )
83 if (NOT DEFINED CMAKE_C_COMPILER)
84 set(CMAKE_C_COMPILER ${MPI_HOME}/bin/mpicc)
85 endif(NOT DEFINED CMAKE_C_COMPILER)
86 message ( STATUS "MPI C compiler is ${CMAKE_C_COMPILER}" )
87 else( DEFINED ENV{MPI_HOME} OR MPI_HOME )
88 set(SOLVERLAB_WITH_MPI OFF)
89 endif( DEFINED ENV{MPI_HOME} OR MPI_HOME )
91 # Definition of MPI4PY_ROOT_DIR from either the environment or petsc
92 if( ${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
93 message(STATUS "Defining MPI4PY directory" )
94 if( DEFINED ENV{MPI4PY_ROOT_DIR})
95 set(MPI4PY_ROOT_DIR $ENV{MPI4PY_ROOT_DIR})
96 else( DEFINED ENV{MPI4PY_ROOT_DIR})
97 set(MPI4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/mpi4py)
98 endif( DEFINED ENV{MPI4PY_ROOT_DIR})
99 endif(${SOLVERLAB_WITH_PYTHON} AND ${SOLVERLAB_WITH_MPI} AND NOT ${MPI4PY_ROOT_DIR})
102 message(STATUS "MPI4PY directory is ${MPI4PY_ROOT_DIR}" )
103 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMPI4PY_ROOT_DIR=${MPI4PY_ROOT_DIR})#Necessary for swig generation of mpi structures
104 endif( MPI4PY_ROOT_DIR)
106 ############################
107 # Definition of HDF5_ROOT #
108 ############################
109 if ( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
110 if ( DEFINED ENV{HDF5_ROOT_DIR} )
111 set(HDF5_ROOT $ENV{HDF5_ROOT_DIR})
112 else ( DEFINED ENV{HDF5_ROOT_DIR} )
113 set(HDF5_ROOT ${HDF5_ROOT_DIR})
114 endif( DEFINED ENV{HDF5_ROOT_DIR} )
115 endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
117 ######################################################
118 # Detection or compilation of PETSc+SLEPc+HDF5 #
119 ######################################################
120 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
122 set(PETSC_DIR $ENV{PETSC_DIR})
123 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
125 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
128 find_package (PETSc 3.4 REQUIRED)
131 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
132 message ( STATUS "PETSc compiler is ${PETSC_COMPILER}" )
133 message ( STATUS "PETSc executable is ${PETSC_MPIEXEC}")
135 set(PETSC_INSTALL ${PETSC_DIR})
137 #Define and search slepc variables
139 if ( DEFINED ENV{SLEPC_DIR} )
140 set(SLEPC_DIR $ENV{SLEPC_DIR})
141 else ( DEFINED ENV{SLEPC_DIR} )
142 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
143 endif( DEFINED ENV{SLEPC_DIR} )
144 endif( NOT SLEPC_DIR)
146 message ( STATUS "Checking variable SLEPC_DIR" )
147 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
148 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
149 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
150 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
152 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
155 #define hdf5 variables
156 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
157 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
158 set(HDF5_ROOT $ENV{HDF5_ROOT})
159 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
160 #HDF5 to be found in petsc external packages
161 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
162 endif( DEFINED ENV{HDF5_ROOT} )
163 endif( NOT HDF5_ROOT )
165 find_package(HDF5 COMPONENTS CXX HL)
167 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
168 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
169 endif( NOT HDF5_FOUND)
171 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
172 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
174 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
175 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
176 message ( STATUS "PETSC library found in /usr/lib64" )
178 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
179 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
181 file(STRINGS /usr/include/petsc/petscversion.h petscversion_file)
182 FOREACH(line ${petscversion_file})
183 string(FIND "${line}" "#define PETSC_VERSION_MAJOR " pos)
184 IF(NOT ${pos} EQUAL -1)
185 string(LENGTH ${line} line_length_major)#length of the line
186 MATH(EXPR petsc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
187 string(SUBSTRING ${line} ${petsc_version_major} 1 PETSC_VERSION_MAJOR)
189 ENDIF(NOT ${pos} EQUAL -1)
190 ENDFOREACH(line ${petscversion_file})
191 FOREACH(line ${petscversion_file})
192 string(FIND "${line}" "#define PETSC_VERSION_MINOR " pos)
193 IF(NOT ${pos} EQUAL -1)
194 string(LENGTH ${line} line_length_minor)#length of the line
195 if(${line_length_minor} EQUAL ${line_length_major})
196 MATH(EXPR petsc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
197 string(SUBSTRING ${line} ${petsc_version_minor} 1 PETSC_VERSION_MINOR)
199 else(${line_length_minor} EQUAL ${line_length_major})
200 MATH(EXPR petsc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
201 string(SUBSTRING ${line} ${petsc_version_minor} 2 PETSC_VERSION_MINOR)
202 endif(${line_length_minor} EQUAL ${line_length_major})
203 ENDIF(NOT ${pos} EQUAL -1)
204 ENDFOREACH(line ${petscversion_file})
205 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
206 message(STATUS "PETSc detected, version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}" )
208 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
209 set(PETSC_INSTALL ${PETSC_DIR})
211 #Define and search slepc variables
212 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
213 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
214 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
216 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
217 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
218 file(STRINGS /usr/include/slepc/slepcversion.h slepcversion_file)
219 FOREACH(line ${slepcversion_file})
220 string(FIND "${line}" "#define SLEPC_VERSION_MAJOR " pos)
221 IF(NOT ${pos} EQUAL -1)
222 string(LENGTH ${line} line_length_major)#length of the line
223 MATH(EXPR slepc_version_major "${line_length_major}-1")#line ends with "x", that counts for 1 character
224 string(SUBSTRING ${line} ${slepc_version_major} 1 SLEPC_VERSION_MAJOR)
226 ENDIF(NOT ${pos} EQUAL -1)
227 ENDFOREACH(line ${slepcversion_file})
228 FOREACH(line ${slepcversion_file})
229 string(FIND "${line}" "#define SLEPC_VERSION_MINOR " pos)
230 IF(NOT ${pos} EQUAL -1)
231 string(LENGTH ${line} line_length_minor)#length of the line
232 if(${line_length_minor} EQUAL ${line_length_major})
233 MATH(EXPR slepc_version_minor "${line_length_minor}-1")#line ends with "y", that counts for 1 character
234 string(SUBSTRING ${line} ${slepc_version_minor} 1 SLEPC_VERSION_MINOR)
236 else(${line_length_minor} EQUAL ${line_length_major})
237 MATH(EXPR slepc_version_minor "${line_length_minor}-2")#line ends with "yy", that counts for two characters
238 string(SUBSTRING ${line} ${slepc_version_minor} 2 SLEPC_VERSION_MINOR)
239 endif(${line_length_minor} EQUAL ${line_length_major})
240 ENDIF(NOT ${pos} EQUAL -1)
241 ENDFOREACH(line ${slepcversion_file})
242 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
243 message(STATUS "SLEPc detected, version is ${SLEPC_VERSION_MAJOR}.${SLEPC_VERSION_MINOR}" )
244 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
245 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
246 message( FATAL_ERROR "SLEPc not found in the system" )
247 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
249 #HDF5 to be found in the system
250 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
251 find_package(HDF5 REQUIRED)
252 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
253 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
254 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
256 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
257 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
258 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
259 # set(PETSC_DIR /usr/lib/petsc/)
260 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
261 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
263 # find_package (PETSc 3.4 REQUIRED)
264 # petsc_get_version ()
265 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
267 # Define and search slepc variables
268 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
269 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
270 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
271 # set(SLEPC_DIR /usr/lib/slepc/)
272 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
273 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
274 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
275 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
276 # message( FATAL_ERROR "SLEPc not found in the system" )
277 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
279 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
281 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
282 message (STATUS "PETSC not found in the system")
283 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
284 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
285 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
287 #extract petsc tarball name
288 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
289 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
290 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
291 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
292 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
294 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
295 set(PETSC_ARCH arch-linux-c-opt)
296 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/lib/petsc)#folder to copy petsc libraries and include files
298 ExternalProject_Add (PETSc
299 URL ${DOWNLOAD_PETSC}
300 SOURCE_DIR ${PETSC_DIR}
302 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}
303 BUILD_COMMAND make all
304 TEST_COMMAND make check
305 INSTALL_COMMAND make install
306 INSTALL_DIR ${PETSC_DIR}
307 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
308 LOG_DOWNLOAD TRUE # Wrap download in script to log output
309 LOG_UPDATE TRUE # Wrap update in script to log output
310 LOG_CONFIGURE TRUE # Wrap configure in script to log output
311 LOG_BUILD TRUE # Wrap build in script to log output
312 LOG_TEST TRUE # Wrap test in script to log output
313 LOG_INSTALL TRUE # Wrap install in script to log output
316 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
318 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
319 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
320 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
321 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
322 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
324 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
325 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
327 #extract slepc tarball name
328 string(LENGTH "${DOWNLOAD_SLEPC}" tarball_url_length)#length of the tarball
329 string(FIND "${DOWNLOAD_SLEPC}" "/" start_tarball_name REVERSE )# last occurence of "/"
330 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
331 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
332 string(SUBSTRING ${DOWNLOAD_SLEPC} ${start_tarball_name} ${tarball_name_length} SLEPC_TARBALL_NAME)
334 #extract slepc version
335 string(LENGTH "${SLEPC_TARBALL_NAME}" tarball_name_length)#length of the tarball
336 string(FIND "${SLEPC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
337 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
338 string(SUBSTRING ${SLEPC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} SLEPC_VERSION)
339 message( STATUS "SLEPc version ${SLEPC_VERSION} will be installed" )
341 #define slepc variables
342 set(SLEPC_DIR ${PETSC_INSTALL})
343 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/include )
344 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/installed-arch-linux2-c-opt/lib/libslepc.so)
345 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
347 #define hdf5 variables
348 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
349 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
350 set(HDF5_ROOT $ENV{HDF5_ROOT})
351 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
352 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
353 endif( DEFINED ENV{HDF5_ROOT} )
354 endif( NOT HDF5_ROOT )
355 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
356 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
358 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
359 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
361 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
362 add_definitions(-DPETSC_VERSION_GREATER_3_5)
363 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
365 if ( ${SOLVERLAB_WITH_PYTHON} )
366 set(SLEPC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/slepc4py)# or use FindSLEPC4PY
367 set(PETSC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc4py)# or use FindPETSC4PY
368 endif( ${SOLVERLAB_WITH_PYTHON} )
370 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
372 add_library(petsc SHARED IMPORTED)
373 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
374 add_library(slepc SHARED IMPORTED)
375 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
377 ######################################################
378 # Detection or compilation of MEDFile #
379 ######################################################
380 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
382 if ( NOT MEDFILE_ROOT_DIR )
383 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
384 endif( NOT MEDFILE_ROOT_DIR )
386 find_package (MEDFile REQUIRED)
388 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
390 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
392 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
393 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
395 #extraction of the tarball archive name
396 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
397 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
398 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
399 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
400 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
402 ExternalProject_Add (MED
403 URL ${DOWNLOAD_MED} #location of med tarball
404 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
406 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
408 INSTALL_COMMAND make install
409 INSTALL_DIR ${MEDFILE_ROOT_DIR}
410 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
411 LOG_DOWNLOAD TRUE # Wrap download in script to log output
412 LOG_UPDATE TRUE # Wrap update in script to log output
413 LOG_CONFIGURE TRUE # Wrap configure in script to log output
414 LOG_BUILD TRUE # Wrap build in script to log output
415 LOG_TEST TRUE # Wrap test in script to log output
416 LOG_INSTALL TRUE # Wrap install in script to log output
419 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
420 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
421 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
423 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
425 add_library(med SHARED IMPORTED)
426 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
427 add_library(medC SHARED IMPORTED)
428 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
430 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
432 ######################################################
433 # Detection or compilation of MEDCoupling #
434 ######################################################
435 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
437 if ( NOT MEDCOUPLING_ROOT_DIR )
438 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
439 endif( NOT MEDCOUPLING_ROOT_DIR )
441 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
443 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
444 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
445 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
447 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
448 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
449 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
450 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
452 #extraction of the tarball archive name
453 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
454 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
455 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
456 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
457 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
458 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
460 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
462 ExternalProject_Add (MEDCoupling
463 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
464 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
466 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
468 INSTALL_COMMAND make install
469 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
470 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
471 LOG_DOWNLOAD TRUE # Wrap download in script to log output
472 LOG_UPDATE TRUE # Wrap update in script to log output
473 LOG_CONFIGURE TRUE # Wrap configure in script to log output
474 LOG_BUILD TRUE # Wrap build in script to log output
475 LOG_TEST TRUE # Wrap test in script to log output
476 LOG_INSTALL TRUE # Wrap install in script to log output
479 add_library(medloader SHARED IMPORTED )
480 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
482 SET(MEDCOUPLING_USE_64BIT_IDS ON)
484 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
486 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
487 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
489 add_library(medcoupling SHARED IMPORTED )
490 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
492 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
493 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
494 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
496 if (TARGET MED AND TARGET PETSc)
497 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
498 endif(TARGET MED AND TARGET PETSc)
500 if (TARGET MED AND TARGET MEDCoupling)
501 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
502 endif(TARGET MED AND TARGET MEDCoupling)
504 if (TARGET PETSc AND TARGET MEDCoupling)
505 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
506 endif(TARGET PETSc AND TARGET MEDCoupling)
508 IF(MEDCOUPLING_USE_64BIT_IDS)
509 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
510 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
516 # Paraview variables to choose python version and for env_SOLVERLAB.sh
517 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
518 if ( PARAVIEW_ROOT_DIR )
519 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
520 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
521 else( PARAVIEW_ROOT_DIR )
522 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
523 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
524 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
525 endif( PARAVIEW_ROOT_DIR )
526 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
527 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview in the system.")
528 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
529 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/:/usr/lib/x86_64-linux-gnu)
530 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
532 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
533 if ( NOT DEFINED PARAVIEW_VERSION )
534 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
535 endif( NOT DEFINED PARAVIEW_VERSION )
536 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
537 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
538 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 )
539 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
541 #extraction of the paraview version"
542 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
543 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
544 set( PARAVIEW_VERSION "5.8")
545 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
546 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
547 file(STRINGS ${vtkConfig_file} vtkConfig)
548 FOREACH(line ${vtkConfig})
549 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
550 IF(NOT ${pos} EQUAL -1)
551 string(LENGTH ${line} line_length)#length of the tarball
552 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
553 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
555 ENDIF(NOT ${pos} EQUAL -1)
556 ENDFOREACH(line ${vtkConfig})
557 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
558 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
559 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
561 #Choose python 2 or 3
562 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
564 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
565 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
567 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
568 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
571 IF ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
572 IF ( PYTHON_ROOT_DIR )
573 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
574 ELSE( PYTHON_ROOT_DIR )
575 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
576 ENDIF( PYTHON_ROOT_DIR)
577 ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
579 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
580 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
581 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
582 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
583 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
584 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
585 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
586 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
587 set(Python_VERSION ${PYTHON_VERSION_STRING})
588 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
589 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
590 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
592 message(STATUS "Python version found is ${Python_VERSION}")
595 IF ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
596 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
597 ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
600 IF ( NOT DEFINED PYQT5_ROOT_DIR )
601 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
602 ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
604 #Paraview library paths
605 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})
606 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)
608 # Detection of python-paraview
609 string(REPLACE ":" ";" PV_PYTHON_DIR_PATHS "${PV_PYTHON_DIR}")# use semicolon instead of colon in PATH search
610 find_file(python-paraview simple.py PATHS ${PV_PYTHON_DIR_PATHS})
611 if( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
612 message(WARNING "Python Paraview library not found. Post processing will fail in SOLVERLAB scripts.")
613 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
614 else( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
615 if( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
616 message ( STATUS "Using system Paraview python libraries on Ubuntu 20.04 requires the presence and preload of library netcdf (bug in linkage)." )
617 if( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
618 message ( STATUS "Library netcdf found in the system. Paraview python libraries should be functional." )
619 set(PRELOAD_NETCDF_ON_UBUNTU20 ON)
620 else( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
621 message ( WARNING "Library netcdf not found in system. Paraview python libraries may not be functional (bug in linkage)." )
622 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
623 endif( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
624 else( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
625 message(STATUS "Python Paraview library found. Post processing will work in SOLVERLAB scripts.")
626 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
627 endif( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
628 endif( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
631 IF ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
632 IF ( DEFINED SWIG_ROOT_DIR )
633 set(SWIG_EXECUTABLE ${SWIG_ROOT_DIR}/bin/swig )
634 ELSE ( DEFINED SWIG_ROOT_DIR )
635 set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig )
636 ENDIF( DEFINED SWIG_ROOT_DIR)
637 ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
638 find_package (SWIG 3.0 REQUIRED)
641 if (SOLVERLAB_WITH_DOCUMENTATION) #
642 IF ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
643 IF ( DEFINED DOXYGEN_ROOT_DIR )
644 set(DOXYGEN_EXECUTABLE ${DOXYGEN_ROOT_DIR}/bin/doxygen )
645 ELSE ( DEFINED DOXYGEN_ROOT_DIR )
646 set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen )
647 ENDIF( DEFINED DOXYGEN_ROOT_DIR)
648 ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
649 find_package (Doxygen) #
650 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
651 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
652 if (NOT DOXYGEN_FOUND)
653 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
654 endif(NOT DOXYGEN_FOUND)
656 configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
657 add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile SOURCES ${PROJECT_BINARY_DIR}/Doxyfile) #
658 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/solverlab-dev-doc OPTIONAL) #
660 if ( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
662 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) #
663 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Utilities/html DESTINATION share/doc/solverlab-gui-doc OPTIONAL) #
664 endif( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
665 endif(SOLVERLAB_WITH_DOCUMENTATION)
667 if (SOLVERLAB_WITH_TESTS) #
669 IF ( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
670 IF ( DEFINED CPPUNIT_ROOT_DIR )
671 set(CPPUNIT_ROOT_USER ${CPPUNIT_ROOT_DIR} )
672 ELSE ( DEFINED CPPUNIT_ROOT_DIR )
673 set(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT_DIR} )
674 ENDIF( DEFINED CPPUNIT_ROOT_DIR)
675 ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
676 find_package (CPPUNIT REQUIRED)
678 add_custom_target (cpp COMMAND ctest -R .exe)# may be replace ctest -R with ctest -L
679 add_custom_target (mpi COMMAND ctest -R Proc)# may be replace ctest -R with ctest -L
680 endif(SOLVERLAB_WITH_TESTS)
682 # Enter subdirectories
683 set(CDMATH_WITH_POSTPRO ${SOLVERLAB_WITH_POSTPRO} )
684 set(CDMATH_WITH_PETSC ${SOLVERLAB_WITH_PETSC} )
685 set(CDMATH_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
686 set(CDMATH_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
687 set(CDMATH_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
688 set(CDMATH_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
689 add_subdirectory (CDMATH)
690 if(SOLVERLAB_WITH_COREFLOWS)
691 set(COREFLOWS_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
692 set(COREFLOWS_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
693 set(COREFLOWS_WITH_GUI ${SOLVERLAB_WITH_GUI} )
694 set(COREFLOWS_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
695 set(COREFLOWS_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
696 add_subdirectory (CoreFlows)
697 endif(SOLVERLAB_WITH_COREFLOWS)
701 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
702 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh