1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
6 project (SOLVERLAB C CXX)
7 set (SOLVERLAB_VERSION_MAJOR 9)
8 set (SOLVERLAB_VERSION_MINOR 7)
9 set (SOLVERLAB_VERSION_SUBMINOR alpha)
11 option (SOLVERLAB_WITH_DOCUMENTATION "Generate SOLVERLAB documentation" ON)
12 option (SOLVERLAB_WITH_PYTHON "Compile Python interface of SOLVERLAB" ON)
13 option (SOLVERLAB_WITH_GUI "Compile a Graphic user Interface for SOLVERLAB" OFF)
14 option (SOLVERLAB_WITH_PACKAGE "Generate RPM, Debian and tarball packages" OFF)
15 option (SOLVERLAB_WITH_COREFLOWS "Generate COREFLOWS module" ON)
16 option (SOLVERLAB_WITH_TESTS "Generate SOLVERLAB example tests" ON)
18 #Path to installed libraries
19 set (PETSC_DIR OFF CACHE STRING "PETSc library path" )
20 set (SLEPC_DIR OFF CACHE STRING "SLEPc library path" )
21 set (HDF5_ROOT OFF CACHE STRING "HDF5 library path" )#For the compilation of MED with a specific version of HDF5
22 set (MEDFILE_ROOT_DIR OFF CACHE STRING "MED library path" )
23 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
24 set (PYTHON_ROOT_DIR OFF CACHE STRING "Python library path" )
25 set (PARAVIEW_ROOT_DIR OFF CACHE STRING "PARAVIEW library path" )
27 #url of tarball librairies
28 set (DOWNLOAD_PETSC http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.14.2.tar.gz
29 CACHE STRING "PETSc tarball path/url" )
30 set (DOWNLOAD_SLEPC https://slepc.upv.es/download/distrib/slepc-3.14.1.tar.gz
31 CACHE STRING "SLEPC tarball path/url" )
32 set (DOWNLOAD_F2CBLASLAPACK https://www.mcs.anl.gov/petsc/mirror/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz
33 CACHE STRING "F2CBLASLAPACK tarball path/url" )
34 set (DOWNLOAD_HDF5 https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/src/hdf5-1.10.3.tar.gz
35 CACHE STRING "HDF5 tarball path/url" )
36 set (DOWNLOAD_MED http://files.salome-platform.org/Salome/other/med-4.1.0.tar.gz
37 CACHE STRING "MED tarball path/url")
38 set (DOWNLOAD_MEDCOUPLING http://files.salome-platform.org/Salome/other/medCoupling-9.6.0.tar.gz
39 CACHE STRING "MEDCoupling tarball path/url" )
40 set (DOWNLOAD_OPENMPI https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.6.tar.gz
41 CACHE STRING "OPENMPI tarball path/url" )
42 set (DOWNLOAD_HYPRE https://github.com/hypre-space/hypre/archive/v2.20.0.zip
43 CACHE STRING "HYPRE tarball path/url" )
45 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
47 include(ExternalProject)#For PETSc, MED and MEDCoupling
49 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
51 if( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
52 set(SOLVERLAB_WITH_MPI ON)
54 if( ${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
55 set ( MPI_LIBRARY ${MPI_HOME}/lib/libmpi.so )
56 endif(${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
57 message ( STATUS "MPI executable is ${MPIEXEC}" )
58 else( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
59 set(SOLVERLAB_WITH_MPI OFF)
60 endif( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
62 ######################################################
63 # Detection or compilation of PETSc+SLEPc+HDF5 #
64 ######################################################
65 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
67 set(PETSC_DIR $ENV{PETSC_DIR})
68 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
70 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
73 find_package (PETSc 3.4 REQUIRED)
76 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
77 message ( STATUS "PETSc compiler is ${PETSC_COMPILER}" )
78 message ( STATUS "PETSc executable is ${PETSC_MPIEXEC}")
80 set(PETSC_INSTALL ${PETSC_DIR})
82 #Define and search slepc variables
84 if ( DEFINED ENV{SLEPC_DIR} )
85 set(SLEPC_DIR $ENV{SLEPC_DIR})
86 else ( DEFINED ENV{SLEPC_DIR} )
87 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
88 endif( DEFINED ENV{SLEPC_DIR} )
91 message ( STATUS "Checking variable SLEPC_DIR" )
92 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
93 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
94 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
95 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
97 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
100 #define hdf5 variables
101 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
102 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
103 set(HDF5_ROOT $ENV{HDF5_ROOT})
104 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
105 #HDF5 to be found in petsc external packages
106 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
107 endif( DEFINED ENV{HDF5_ROOT} )
108 endif( NOT HDF5_ROOT )
110 find_package(HDF5 COMPONENTS CXX HL)
112 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
113 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
114 endif( NOT HDF5_FOUND)
116 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
117 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
119 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
120 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
121 message ( STATUS "PETSC library found in /usr/lib64" )
123 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
124 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
126 set(PETSC_VERSION "3.8") #3.8 for fedora 26 , 3.9 for fedora 29 , 3.10 for fedora 30, , 3.12 for fedora 32
128 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
129 set(PETSC_INSTALL ${PETSC_DIR})
131 #Define and search slepc variables
132 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
133 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
134 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
136 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
137 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
138 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
139 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
140 message( FATAL_ERROR "SLEPc not found in the system" )
141 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
143 #HDF5 to be found in the system
144 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
145 find_package(HDF5 REQUIRED)
146 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
147 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
148 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
150 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
151 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
152 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
153 # set(PETSC_DIR /usr/lib/petsc/)
154 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
155 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
157 # find_package (PETSc 3.4 REQUIRED)
158 # petsc_get_version ()
159 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
161 # Define and search slepc variables
162 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
163 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
164 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
165 # set(SLEPC_DIR /usr/lib/slepc/)
166 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
167 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
168 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
169 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
170 # message( FATAL_ERROR "SLEPc not found in the system" )
171 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
173 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
175 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
176 message (STATUS "PETSC not found in the system")
177 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
178 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
179 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
181 #extract tarball name
182 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
183 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
184 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
185 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
186 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
188 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
189 set(PETSC_ARCH arch-linux-c-opt)
190 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/lib/petsc)#folder to copy petsc libraries and include files
192 ExternalProject_Add (PETSc
193 URL ${DOWNLOAD_PETSC}
194 SOURCE_DIR ${PETSC_DIR}
196 CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PETSC_INSTALL} --with-debugging=0 --download-f2cblaslapack=${DOWNLOAD_F2CBLASLAPACK} --with-fc=0 --download-slepc=${DOWNLOAD_SLEPC} --download-hdf5=${DOWNLOAD_HDF5} --with-mpi=0 # --download-openmpi=${DOWNLOAD_OPENMPI} --download-hypre=${DOWNLOAD_HYPRE}
197 BUILD_COMMAND make all
198 TEST_COMMAND make check
199 INSTALL_COMMAND make install
200 INSTALL_DIR ${PETSC_DIR}
201 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
202 LOG_DOWNLOAD TRUE # Wrap download in script to log output
203 LOG_UPDATE TRUE # Wrap update in script to log output
204 LOG_CONFIGURE TRUE # Wrap configure in script to log output
205 LOG_BUILD TRUE # Wrap build in script to log output
206 LOG_TEST TRUE # Wrap test in script to log output
207 LOG_INSTALL TRUE # Wrap install in script to log output
210 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
212 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
213 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
214 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
215 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
216 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
218 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
219 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
221 #define slepc variables
222 set(SLEPC_DIR ${PETSC_INSTALL})
223 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.14.1/include )
224 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.14.1/installed-arch-linux2-c-opt/lib/libslepc.so)
225 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
227 #define hdf5 variables
228 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
229 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
230 set(HDF5_ROOT $ENV{HDF5_ROOT})
231 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
232 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
233 endif( DEFINED ENV{HDF5_ROOT} )
234 endif( NOT HDF5_ROOT )
235 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
236 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
238 #define MPI variables
239 #set(SOLVERLAB_WITH_MPI ON)
240 #set(MPI_HOME ${PETSC_INSTALL} )
241 #set(MPI_LIBRARY ${PETSC_INSTALL}/lib/libmpi.so)
242 #set(MPIEXEC ${PETSC_INSTALL}/bin/mpiexec)
244 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
245 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
247 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
248 add_definitions(-DPETSC_VERSION_GREATER_3_5)
249 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
251 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
253 add_library(petsc SHARED IMPORTED)
254 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
255 add_library(slepc SHARED IMPORTED)
256 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
258 ######################################################
259 # Detection or compilation of MEDFile #
260 ######################################################
261 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
263 if ( NOT MEDFILE_ROOT_DIR )
264 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
265 endif( NOT MEDFILE_ROOT_DIR )
267 find_package (MEDFile REQUIRED)
269 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
271 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
273 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
274 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
276 #extraction of the tarball archive name
277 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
278 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
279 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
280 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
281 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
283 ExternalProject_Add (MED
284 URL ${DOWNLOAD_MED} #location of med tarball
285 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
287 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
289 INSTALL_COMMAND make install
290 INSTALL_DIR ${MEDFILE_ROOT_DIR}
291 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
292 LOG_DOWNLOAD TRUE # Wrap download in script to log output
293 LOG_UPDATE TRUE # Wrap update in script to log output
294 LOG_CONFIGURE TRUE # Wrap configure in script to log output
295 LOG_BUILD TRUE # Wrap build in script to log output
296 LOG_TEST TRUE # Wrap test in script to log output
297 LOG_INSTALL TRUE # Wrap install in script to log output
300 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
301 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
302 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
304 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
306 add_library(med SHARED IMPORTED)
307 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
308 add_library(medC SHARED IMPORTED)
309 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
311 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
313 ######################################################
314 # Detection or compilation of MEDCoupling #
315 ######################################################
316 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
318 if ( NOT MEDCOUPLING_ROOT_DIR )
319 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
320 endif( NOT MEDCOUPLING_ROOT_DIR )
322 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
324 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
325 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
326 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
328 else( DEFINED MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
329 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
330 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
331 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
333 #extraction of the tarball archive name
334 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
335 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
336 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
337 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
338 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
339 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
341 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
343 ExternalProject_Add (MEDCoupling
344 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
345 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
347 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
349 INSTALL_COMMAND make install
350 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
351 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
352 LOG_DOWNLOAD TRUE # Wrap download in script to log output
353 LOG_UPDATE TRUE # Wrap update in script to log output
354 LOG_CONFIGURE TRUE # Wrap configure in script to log output
355 LOG_BUILD TRUE # Wrap build in script to log output
356 LOG_TEST TRUE # Wrap test in script to log output
357 LOG_INSTALL TRUE # Wrap install in script to log output
360 add_library(medloader SHARED IMPORTED )
361 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
363 SET(MEDCOUPLING_USE_64BIT_IDS ON)
365 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
367 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
368 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
370 add_library(medcoupling SHARED IMPORTED )
371 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
373 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
374 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
375 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
377 if (TARGET MED AND TARGET PETSc)
378 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
379 endif(TARGET MED AND TARGET PETSc)
381 if (TARGET MED AND TARGET MEDCoupling)
382 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
383 endif(TARGET MED AND TARGET MEDCoupling)
385 if (TARGET PETSc AND TARGET MEDCoupling)
386 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
387 endif(TARGET PETSc AND TARGET MEDCoupling)
389 IF(MEDCOUPLING_USE_64BIT_IDS)
390 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
391 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
397 # Paraview variables to choose python version and for env_SOLVERLAB.sh
398 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
399 if ( PARAVIEW_ROOT_DIR )
400 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
401 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
402 else( PARAVIEW_ROOT_DIR )
403 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
404 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
405 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
406 endif( PARAVIEW_ROOT_DIR )
407 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
408 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
409 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
410 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
411 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
413 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
414 if ( NOT DEFINED PARAVIEW_VERSION )
415 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
416 endif( NOT DEFINED PARAVIEW_VERSION )
417 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
418 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
419 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 )
420 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
422 #extraction of the paraview version"
423 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
424 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
425 set( PARAVIEW_VERSION "5.8")
426 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
427 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
428 file(STRINGS ${vtkConfig_file} vtkConfig)
429 FOREACH(line ${vtkConfig})
430 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
431 IF(NOT ${pos} EQUAL -1)
432 string(LENGTH ${line} line_length)#length of the tarball
433 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
434 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
436 ENDIF(NOT ${pos} EQUAL -1)
437 ENDFOREACH(line ${vtkConfig})
438 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
439 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
440 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
442 #Choose python 2 or 3
443 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
445 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
446 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
448 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
449 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
452 IF ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
453 IF ( PYTHON_ROOT_DIR )
454 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
455 ELSE( PYTHON_ROOT_DIR )
456 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
457 ENDIF( PYTHON_ROOT_DIR)
458 ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
460 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
461 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
462 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
463 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
464 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
465 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
466 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
467 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
468 set(Python_VERSION ${PYTHON_VERSION_STRING})
469 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
470 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
471 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
474 IF ( NOT PYQT5_ROOT_DIR )
475 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
476 ENDIF( NOT PYQT5_ROOT_DIR )
479 IF ( NOT MATPLOTLIB_ROOT_DIR )
480 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
481 ENDIF( NOT MATPLOTLIB_ROOT_DIR )
484 IF ( NOT HDF5_ROOT_DIR )
485 IF ( ENV{HDF5_ROOT_DIR} )
486 set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
487 ELSE( ENV{HDF5_ROOT_DIR} )
488 set(HDF5_ROOT_DIR ${HDF5_ROOT} )
489 ENDIF( ENV{HDF5_ROOT_DIR} )
490 ENDIF( NOT HDF5_ROOT_DIR )
493 #Paraview library paths
494 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})
495 set (PV_PYTHON_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/:/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)
497 message(STATUS "Python version found is ${Python_VERSION}")
498 find_package (SWIG 3.0 REQUIRED)
500 if (SOLVERLAB_WITH_DOCUMENTATION) #
501 find_package (Doxygen) #
502 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
503 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
504 if (NOT DOXYGEN_FOUND)
505 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
506 endif(NOT DOXYGEN_FOUND)
508 if (SOLVERLAB_WITH_TESTS) #
510 find_package (CPPUNIT REQUIRED)
513 # Enter subdirectories
514 add_subdirectory (CDMATH)
515 if(SOLVERLAB_WITH_COREFLOWS)
516 add_subdirectory (CoreFlows)
517 endif(SOLVERLAB_WITH_COREFLOWS)
521 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
522 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh