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 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 from either the environment or petsc
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})#Necessary for swig generation of mpi structures
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 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
351 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
353 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
354 add_definitions(-DPETSC_VERSION_GREATER_3_5)
355 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
357 if ( ${SOLVERLAB_WITH_PYTHON} )
358 set(SLEPC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/slepc4py)# or use FindSLEPC4PY
359 set(PETSC4PY_ROOT_DIR ${PETSC_DIR}/${PETSC_ARCH}/lib/petsc4py)# or use FindPETSC4PY
360 endif( ${SOLVERLAB_WITH_PYTHON} )
362 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
364 add_library(petsc SHARED IMPORTED)
365 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
366 add_library(slepc SHARED IMPORTED)
367 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
369 ######################################################
370 # Detection or compilation of MEDFile #
371 ######################################################
372 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
374 if ( NOT MEDFILE_ROOT_DIR )
375 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
376 endif( NOT MEDFILE_ROOT_DIR )
378 find_package (MEDFile REQUIRED)
380 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
382 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
384 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
385 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
387 #extraction of the tarball archive name
388 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
389 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
390 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
391 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
392 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
394 ExternalProject_Add (MED
395 URL ${DOWNLOAD_MED} #location of med tarball
396 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
398 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
400 INSTALL_COMMAND make install
401 INSTALL_DIR ${MEDFILE_ROOT_DIR}
402 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
403 LOG_DOWNLOAD TRUE # Wrap download in script to log output
404 LOG_UPDATE TRUE # Wrap update in script to log output
405 LOG_CONFIGURE TRUE # Wrap configure in script to log output
406 LOG_BUILD TRUE # Wrap build in script to log output
407 LOG_TEST TRUE # Wrap test in script to log output
408 LOG_INSTALL TRUE # Wrap install in script to log output
411 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
412 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
413 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
415 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
417 add_library(med SHARED IMPORTED)
418 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
419 add_library(medC SHARED IMPORTED)
420 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
422 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
424 ######################################################
425 # Detection or compilation of MEDCoupling #
426 ######################################################
427 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
429 if ( NOT MEDCOUPLING_ROOT_DIR )
430 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
431 endif( NOT MEDCOUPLING_ROOT_DIR )
433 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
435 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
436 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
437 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
439 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
440 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
441 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
442 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
444 #extraction of the tarball archive name
445 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
446 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
447 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
448 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
449 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
450 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
452 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
454 ExternalProject_Add (MEDCoupling
455 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
456 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
458 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
460 INSTALL_COMMAND make install
461 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
462 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
463 LOG_DOWNLOAD TRUE # Wrap download in script to log output
464 LOG_UPDATE TRUE # Wrap update in script to log output
465 LOG_CONFIGURE TRUE # Wrap configure in script to log output
466 LOG_BUILD TRUE # Wrap build in script to log output
467 LOG_TEST TRUE # Wrap test in script to log output
468 LOG_INSTALL TRUE # Wrap install in script to log output
471 add_library(medloader SHARED IMPORTED )
472 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
474 SET(MEDCOUPLING_USE_64BIT_IDS ON)
476 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
478 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
479 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
481 add_library(medcoupling SHARED IMPORTED )
482 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
484 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
485 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
486 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
488 if (TARGET MED AND TARGET PETSc)
489 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
490 endif(TARGET MED AND TARGET PETSc)
492 if (TARGET MED AND TARGET MEDCoupling)
493 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
494 endif(TARGET MED AND TARGET MEDCoupling)
496 if (TARGET PETSc AND TARGET MEDCoupling)
497 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
498 endif(TARGET PETSc AND TARGET MEDCoupling)
500 IF(MEDCOUPLING_USE_64BIT_IDS)
501 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
502 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
508 # Paraview variables to choose python version and for env_SOLVERLAB.sh
509 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
510 if ( PARAVIEW_ROOT_DIR )
511 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
512 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
513 else( PARAVIEW_ROOT_DIR )
514 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
515 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
516 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
517 endif( PARAVIEW_ROOT_DIR )
518 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
519 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview in the system.")
520 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
521 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/:/usr/lib/x86_64-linux-gnu)
522 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
524 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
525 if ( NOT DEFINED PARAVIEW_VERSION )
526 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
527 endif( NOT DEFINED PARAVIEW_VERSION )
528 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
529 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
530 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 )
531 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
533 #extraction of the paraview version"
534 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
535 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
536 set( PARAVIEW_VERSION "5.8")
537 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
538 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
539 file(STRINGS ${vtkConfig_file} vtkConfig)
540 FOREACH(line ${vtkConfig})
541 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
542 IF(NOT ${pos} EQUAL -1)
543 string(LENGTH ${line} line_length)#length of the tarball
544 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
545 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
547 ENDIF(NOT ${pos} EQUAL -1)
548 ENDFOREACH(line ${vtkConfig})
549 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
550 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
551 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
553 #Choose python 2 or 3
554 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
556 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
557 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
559 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
560 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
563 IF ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
564 IF ( PYTHON_ROOT_DIR )
565 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
566 ELSE( PYTHON_ROOT_DIR )
567 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
568 ENDIF( PYTHON_ROOT_DIR)
569 ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
571 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
572 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
573 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
574 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
575 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
576 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
577 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
578 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
579 set(Python_VERSION ${PYTHON_VERSION_STRING})
580 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
581 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
582 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
584 message(STATUS "Python version found is ${Python_VERSION}")
587 IF ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
588 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
589 ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
592 IF ( NOT DEFINED PYQT5_ROOT_DIR )
593 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
594 ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
596 #Paraview library paths
597 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})
598 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)
600 # Detection of python-paraview
601 string(REPLACE ":" ";" PV_PYTHON_DIR_PATHS "${PV_PYTHON_DIR}")# use semicolon instead of colon in PATH search
602 find_file(python-paraview simple.py PATHS ${PV_PYTHON_DIR_PATHS})
603 if( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
604 message(WARNING "Python Paraview library not found. Post processing will fail in SOLVERLAB scripts.")
605 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
606 else( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
607 if( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
608 message ( STATUS "Using system Paraview python libraries on Ubuntu 20.04 requires the presence and preload of library netcdf (bug in linkage)." )
609 if( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
610 message ( STATUS "Library netcdf found in the system. Paraview python libraries should be functional." )
611 set(PRELOAD_NETCDF_ON_UBUNTU20 ON)
612 else( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
613 message ( WARNING "Library netcdf not found in system. Paraview python libraries may not be functional (bug in linkage)." )
614 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
615 endif( EXISTS "/usr/lib/x86_64-linux-gnu/libnetcdf.so" )
616 else( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
617 message(STATUS "Python Paraview library found. Post processing will work in SOLVERLAB scripts.")
618 set(PRELOAD_NETCDF_ON_UBUNTU20 OFF)
619 endif( ${python-paraview} STREQUAL "/usr/lib/python3/dist-packages/paraview/simple.py" )
620 endif( ${python-paraview} STREQUAL "python-paraview-NOTFOUND" )
623 IF ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
624 IF ( DEFINED SWIG_ROOT_DIR )
625 set(SWIG_EXECUTABLE ${SWIG_ROOT_DIR}/bin/swig )
626 ELSE ( DEFINED SWIG_ROOT_DIR )
627 set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig )
628 ENDIF( DEFINED SWIG_ROOT_DIR)
629 ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
630 find_package (SWIG 3.0 REQUIRED)
633 if (SOLVERLAB_WITH_DOCUMENTATION) #
634 IF ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
635 IF ( DEFINED DOXYGEN_ROOT_DIR )
636 set(DOXYGEN_EXECUTABLE ${DOXYGEN_ROOT_DIR}/bin/doxygen )
637 ELSE ( DEFINED DOXYGEN_ROOT_DIR )
638 set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen )
639 ENDIF( DEFINED DOXYGEN_ROOT_DIR)
640 ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
641 find_package (Doxygen) #
642 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
643 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
644 if (NOT DOXYGEN_FOUND)
645 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
646 endif(NOT DOXYGEN_FOUND)
648 configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
649 add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile SOURCES ${PROJECT_BINARY_DIR}/Doxyfile) #
650 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/solverlab-dev-doc OPTIONAL) #
652 if ( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
654 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) #
655 install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Utilities/html DESTINATION share/doc/solverlab-gui-doc OPTIONAL) #
656 endif( SOLVERLAB_WITH_GUI OR COREFLOWS_WITH_GUI )
657 endif(SOLVERLAB_WITH_DOCUMENTATION)
659 if (SOLVERLAB_WITH_TESTS) #
661 IF ( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
662 IF ( DEFINED CPPUNIT_ROOT_DIR )
663 set(CPPUNIT_ROOT_USER ${CPPUNIT_ROOT_DIR} )
664 ELSE ( DEFINED CPPUNIT_ROOT_DIR )
665 set(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT_DIR} )
666 ENDIF( DEFINED CPPUNIT_ROOT_DIR)
667 ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
668 find_package (CPPUNIT REQUIRED)
670 add_custom_target (cpp COMMAND ctest -R .exe)# may be replace ctest -R with ctest -L
671 add_custom_target (mpi COMMAND ctest -R Proc)# may be replace ctest -R with ctest -L
672 endif(SOLVERLAB_WITH_TESTS)
674 # Enter subdirectories
675 set(CDMATH_WITH_POSTPRO ${SOLVERLAB_WITH_POSTPRO} )
676 set(CDMATH_WITH_PETSC ${SOLVERLAB_WITH_PETSC} )
677 set(CDMATH_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
678 set(CDMATH_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
679 set(CDMATH_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
680 set(CDMATH_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
681 add_subdirectory (CDMATH)
682 if(SOLVERLAB_WITH_COREFLOWS)
683 set(COREFLOWS_WITH_DOCUMENTATION ${SOLVERLAB_WITH_DOCUMENTATION} )
684 set(COREFLOWS_WITH_PYTHON ${SOLVERLAB_WITH_PYTHON} )
685 set(COREFLOWS_WITH_GUI ${SOLVERLAB_WITH_GUI} )
686 set(COREFLOWS_WITH_PACKAGE ${SOLVERLAB_WITH_PACKAGE} )
687 set(COREFLOWS_WITH_TESTS ${SOLVERLAB_WITH_TESTS} )
688 add_subdirectory (CoreFlows)
689 endif(SOLVERLAB_WITH_COREFLOWS)
693 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
694 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh