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 petsc 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 #extract slepc tarball name
222 string(LENGTH "${DOWNLOAD_SLEPC}" tarball_url_length)#length of the tarball
223 string(FIND "${DOWNLOAD_SLEPC}" "/" start_tarball_name REVERSE )# last occurence of "/"
224 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
225 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
226 string(SUBSTRING ${DOWNLOAD_SLEPC} ${start_tarball_name} ${tarball_name_length} SLEPC_TARBALL_NAME)
228 #extract slepc version
229 string(LENGTH "${SLEPC_TARBALL_NAME}" tarball_name_length)#length of the tarball
230 string(FIND "${SLEPC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
231 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
232 string(SUBSTRING ${SLEPC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} SLEPC_VERSION)
233 message( STATUS "SLEPc version ${SLEPC_VERSION} will be installed" )
235 #define slepc variables
236 set(SLEPC_DIR ${PETSC_INSTALL})
237 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/include )
238 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/installed-arch-linux2-c-opt/lib/libslepc.so)
239 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
241 #define hdf5 variables
242 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
243 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
244 set(HDF5_ROOT $ENV{HDF5_ROOT})
245 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
246 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
247 endif( DEFINED ENV{HDF5_ROOT} )
248 endif( NOT HDF5_ROOT )
249 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
250 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
252 #define MPI variables
253 #set(SOLVERLAB_WITH_MPI ON)
254 #set(MPI_HOME ${PETSC_INSTALL} )
255 #set(MPI_LIBRARY ${PETSC_INSTALL}/lib/libmpi.so)
256 #set(MPIEXEC ${PETSC_INSTALL}/bin/mpiexec)
258 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
259 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
261 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
262 add_definitions(-DPETSC_VERSION_GREATER_3_5)
263 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
265 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
267 add_library(petsc SHARED IMPORTED)
268 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
269 add_library(slepc SHARED IMPORTED)
270 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
272 ######################################################
273 # Detection or compilation of MEDFile #
274 ######################################################
275 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
277 if ( NOT MEDFILE_ROOT_DIR )
278 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
279 endif( NOT MEDFILE_ROOT_DIR )
281 find_package (MEDFile REQUIRED)
283 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
285 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
287 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
288 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
290 #extraction of the tarball archive name
291 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
292 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
293 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
294 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
295 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
297 ExternalProject_Add (MED
298 URL ${DOWNLOAD_MED} #location of med tarball
299 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
301 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
303 INSTALL_COMMAND make install
304 INSTALL_DIR ${MEDFILE_ROOT_DIR}
305 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
306 LOG_DOWNLOAD TRUE # Wrap download in script to log output
307 LOG_UPDATE TRUE # Wrap update in script to log output
308 LOG_CONFIGURE TRUE # Wrap configure in script to log output
309 LOG_BUILD TRUE # Wrap build in script to log output
310 LOG_TEST TRUE # Wrap test in script to log output
311 LOG_INSTALL TRUE # Wrap install in script to log output
314 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
315 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
316 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
318 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
320 add_library(med SHARED IMPORTED)
321 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
322 add_library(medC SHARED IMPORTED)
323 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
325 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
327 ######################################################
328 # Detection or compilation of MEDCoupling #
329 ######################################################
330 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
332 if ( NOT MEDCOUPLING_ROOT_DIR )
333 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
334 endif( NOT MEDCOUPLING_ROOT_DIR )
336 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
338 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
339 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
340 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
342 else( DEFINED MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
343 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
344 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
345 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
347 #extraction of the tarball archive name
348 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
349 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
350 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
351 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
352 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
353 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
355 message(STATUS "MEDCoupling will be installed at ${MEDCOUPLING_ROOT_DIR}")
357 ExternalProject_Add (MEDCoupling
358 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
359 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
361 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
363 INSTALL_COMMAND make install
364 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
365 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
366 LOG_DOWNLOAD TRUE # Wrap download in script to log output
367 LOG_UPDATE TRUE # Wrap update in script to log output
368 LOG_CONFIGURE TRUE # Wrap configure in script to log output
369 LOG_BUILD TRUE # Wrap build in script to log output
370 LOG_TEST TRUE # Wrap test in script to log output
371 LOG_INSTALL TRUE # Wrap install in script to log output
374 add_library(medloader SHARED IMPORTED )
375 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
377 SET(MEDCOUPLING_USE_64BIT_IDS ON)
379 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
381 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
382 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
384 add_library(medcoupling SHARED IMPORTED )
385 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
387 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
388 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
389 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
391 if (TARGET MED AND TARGET PETSc)
392 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
393 endif(TARGET MED AND TARGET PETSc)
395 if (TARGET MED AND TARGET MEDCoupling)
396 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
397 endif(TARGET MED AND TARGET MEDCoupling)
399 if (TARGET PETSc AND TARGET MEDCoupling)
400 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
401 endif(TARGET PETSc AND TARGET MEDCoupling)
403 IF(MEDCOUPLING_USE_64BIT_IDS)
404 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
405 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
411 # Paraview variables to choose python version and for env_SOLVERLAB.sh
412 if ( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
413 if ( PARAVIEW_ROOT_DIR )
414 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
415 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
416 else( PARAVIEW_ROOT_DIR )
417 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
418 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
419 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
420 endif( PARAVIEW_ROOT_DIR )
421 else( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
422 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
423 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
424 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
425 endif( PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
427 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
428 if ( NOT DEFINED PARAVIEW_VERSION )
429 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
430 endif( NOT DEFINED PARAVIEW_VERSION )
431 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
432 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
433 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 )
434 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
436 #extraction of the paraview version"
437 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
438 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
439 set( PARAVIEW_VERSION "5.8")
440 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
441 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
442 file(STRINGS ${vtkConfig_file} vtkConfig)
443 FOREACH(line ${vtkConfig})
444 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
445 IF(NOT ${pos} EQUAL -1)
446 string(LENGTH ${line} line_length)#length of the tarball
447 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
448 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
450 ENDIF(NOT ${pos} EQUAL -1)
451 ENDFOREACH(line ${vtkConfig})
452 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
453 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
454 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
456 #Choose python 2 or 3
457 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
459 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
460 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
462 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
463 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
466 IF ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
467 IF ( PYTHON_ROOT_DIR )
468 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
469 ELSE( PYTHON_ROOT_DIR )
470 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
471 ENDIF( PYTHON_ROOT_DIR)
472 ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
474 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
475 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
476 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
477 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
478 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
479 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
480 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
481 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
482 set(Python_VERSION ${PYTHON_VERSION_STRING})
483 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
484 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
485 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
488 IF ( NOT PYQT5_ROOT_DIR )
489 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
490 ENDIF( NOT PYQT5_ROOT_DIR )
493 IF ( NOT MATPLOTLIB_ROOT_DIR )
494 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
495 ENDIF( NOT MATPLOTLIB_ROOT_DIR )
498 IF ( NOT HDF5_ROOT_DIR )
499 IF ( ENV{HDF5_ROOT_DIR} )
500 set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
501 ELSE( ENV{HDF5_ROOT_DIR} )
502 set(HDF5_ROOT_DIR ${HDF5_ROOT} )
503 ENDIF( ENV{HDF5_ROOT_DIR} )
504 ENDIF( NOT HDF5_ROOT_DIR )
507 #Paraview library paths
508 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})
509 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)
511 message(STATUS "Python version found is ${Python_VERSION}")
512 find_package (SWIG 3.0 REQUIRED)
514 if (SOLVERLAB_WITH_DOCUMENTATION) #
515 find_package (Doxygen) #
516 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
517 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
518 if (NOT DOXYGEN_FOUND)
519 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
520 endif(NOT DOXYGEN_FOUND)
522 if (SOLVERLAB_WITH_TESTS) #
524 find_package (CPPUNIT REQUIRED)
527 # Enter subdirectories
528 add_subdirectory (CDMATH)
529 if(SOLVERLAB_WITH_COREFLOWS)
530 add_subdirectory (CoreFlows)
531 endif(SOLVERLAB_WITH_COREFLOWS)
535 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
536 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh