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 0)
8 set (SOLVERLAB_VERSION_MINOR 1)
10 option (SOLVERLAB_WITH_DOCUMENTATION "Generate SOLVERLAB documentation" ON)
11 option (SOLVERLAB_WITH_PYTHON "Compile Python interface of SOLVERLAB" ON)
12 option (SOLVERLAB_WITH_GUI "Compile a Graphic user Interface for SOLVERLAB" OFF)
13 option (SOLVERLAB_WITH_PACKAGE "Generate RPM, Debian and tarball packages" OFF)
14 option (SOLVERLAB_WITH_COREFLOWS "Generate COREFLOWS module" ON)
15 option (SOLVERLAB_WITH_TESTS "Generate SOLVERLAB example tests" ON)
17 #Path to installed libraries
18 set (PETSC_DIR OFF CACHE STRING "PETSc library path" )
19 set (SLEPC_DIR OFF CACHE STRING "SLEPc library path" )
20 set (HDF5_ROOT OFF CACHE STRING "HDF5 library path" )#For the compilation of MED with a specific version of HDF5
21 set (MEDFILE_ROOT_DIR OFF CACHE STRING "MED library path" )
22 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
24 #url of tarball librairies
25 set (DOWNLOAD_PETSC http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.13.5.tar.gz
26 CACHE STRING "PETSc tarball path/url" )
27 set (DOWNLOAD_SLEPC https://slepc.upv.es/download/distrib/slepc-3.13.4.tar.gz
28 CACHE STRING "SLEPC tarball path/url" )
29 set (DOWNLOAD_F2CBLASLAPACK https://www.mcs.anl.gov/petsc/mirror/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz
30 CACHE STRING "F2CBLASLAPACK tarball path/url" )
31 set (DOWNLOAD_HDF5 https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/src/hdf5-1.10.3.tar.gz
32 CACHE STRING "HDF5 tarball path/url" )
33 set (DOWNLOAD_MED http://files.salome-platform.org/Salome/other/med-4.1.0.tar.gz
34 CACHE STRING "MED tarball path/url")
35 set (DOWNLOAD_MEDCOUPLING http://files.salome-platform.org/Salome/other/medCoupling-9.4.0.tar.gz
36 CACHE STRING "MEDCoupling tarball path/url" )
38 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
40 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
42 include(ExternalProject)#For PETSc, MED and MEDCoupling
44 ######################################################
45 # Detection or compilation of PETSc+SLEPc+HDF5 #
46 ######################################################
47 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
49 set(PETSC_DIR $ENV{PETSC_DIR})
50 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
52 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
55 find_package (PETSc 3.4 REQUIRED)
58 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
59 set(PETSC_INSTALL ${PETSC_DIR})
61 #Define and search slepc variables
63 if ( DEFINED ENV{SLEPC_DIR} )
64 set(SLEPC_DIR $ENV{SLEPC_DIR})
65 else ( DEFINED ENV{SLEPC_DIR} )
66 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
67 endif( DEFINED ENV{SLEPC_DIR} )
70 message ( STATUS "Checking variable SLEPC_DIR" )
71 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
72 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
73 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
74 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
76 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
79 #define hdf5 variables
80 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
81 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
82 set(HDF5_ROOT $ENV{HDF5_ROOT})
83 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
84 #HDF5 to be found in petsc external packages
85 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
86 endif( DEFINED ENV{HDF5_ROOT} )
87 endif( NOT HDF5_ROOT )
88 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
89 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
90 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
91 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
93 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
94 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
95 message ( STATUS "PETSC library found in /usr/lib64" )
97 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
98 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
100 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
102 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
103 set(PETSC_INSTALL ${PETSC_DIR})
105 #Define and search slepc variables
106 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
107 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
108 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
110 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
111 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
112 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
113 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
114 message( FATAL_ERROR "SLEPc not found in the system" )
115 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
117 #HDF5 to be found in the system
118 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
119 find_package(HDF5 REQUIRED)
120 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
121 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
122 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
124 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
125 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
126 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
127 # set(PETSC_DIR /usr/lib/petsc/)
128 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
129 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
131 # find_package (PETSc 3.4 REQUIRED)
132 # petsc_get_version ()
133 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
135 # Define and search slepc variables
136 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
137 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
138 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
139 # set(SLEPC_DIR /usr/lib/slepc/)
140 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
141 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
142 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
143 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
144 # message( FATAL_ERROR "SLEPc not found in the system" )
145 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
147 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
149 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
150 message (STATUS "PETSC not found in the system")
151 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
152 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
153 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
155 #extract tarball name
156 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
157 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
158 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
159 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
160 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
162 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
163 set(PETSC_ARCH arch-linux-c-opt)
164 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
166 ExternalProject_Add (PETSc
167 URL ${DOWNLOAD_PETSC}
168 SOURCE_DIR ${PETSC_DIR}
170 CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PETSC_INSTALL} --with-debugging=0 --with-mpi=0 --download-f2cblaslapack=${DOWNLOAD_F2CBLASLAPACK} --with-fc=0 --download-slepc=${DOWNLOAD_SLEPC} --download-hdf5=${DOWNLOAD_HDF5}
171 BUILD_COMMAND make all
172 TEST_COMMAND make check
173 INSTALL_COMMAND make install
174 INSTALL_DIR ${PETSC_DIR}
175 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
176 LOG_DOWNLOAD TRUE # Wrap download in script to log output
177 LOG_UPDATE TRUE # Wrap update in script to log output
178 LOG_CONFIGURE TRUE # Wrap configure in script to log output
179 LOG_BUILD TRUE # Wrap build in script to log output
180 LOG_TEST TRUE # Wrap test in script to log output
181 LOG_INSTALL TRUE # Wrap install in script to log output
184 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
186 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
187 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
188 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
189 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
190 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
192 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
193 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
195 #define slepc variables
196 set(SLEPC_DIR ${PETSC_INSTALL})
197 set(SLEPC_INCLUDES ${SLEPC_DIR}/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/installed-arch-linux2-c-opt/include)
198 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/installed-arch-linux2-c-opt/lib/libslepc.so)
199 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
201 #define hdf5 variables
202 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
203 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
204 set(HDF5_ROOT $ENV{HDF5_ROOT})
205 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
206 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
207 endif( DEFINED ENV{HDF5_ROOT} )
208 endif( NOT HDF5_ROOT )
209 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
210 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
212 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
213 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
215 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
216 add_definitions(-DPETSC_VERSION_GREATER_3_5)
217 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
219 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
221 add_library(petsc SHARED IMPORTED)
222 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
223 add_library(slepc SHARED IMPORTED)
224 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
226 ######################################################
227 # Detection or compilation of MEDFile #
228 ######################################################
229 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
231 if ( NOT MEDFILE_ROOT_DIR )
232 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
233 endif( NOT MEDFILE_ROOT_DIR )
235 find_package (MEDFile REQUIRED)
236 message (STATUS "MEDFile found in ${MEDFILE_ROOT_DIR}")
238 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
240 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
242 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
243 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/med) # Location of the final install
245 #extraction of the tarball archive name
246 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
247 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
248 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
249 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
250 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
252 ExternalProject_Add (MED
253 URL ${DOWNLOAD_MED} #location of med tarball
254 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
256 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
258 INSTALL_COMMAND make install
259 INSTALL_DIR ${MEDFILE_ROOT_DIR}
260 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
261 LOG_DOWNLOAD TRUE # Wrap download in script to log output
262 LOG_UPDATE TRUE # Wrap update in script to log output
263 LOG_CONFIGURE TRUE # Wrap configure in script to log output
264 LOG_BUILD TRUE # Wrap build in script to log output
265 LOG_TEST TRUE # Wrap test in script to log output
266 LOG_INSTALL TRUE # Wrap install in script to log output
269 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
270 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
271 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
273 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
275 add_library(med SHARED IMPORTED)
276 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
277 add_library(medC SHARED IMPORTED)
278 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
280 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
282 ######################################################
283 # Detection or compilation of MEDCoupling #
284 ######################################################
285 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
287 if( NOT MEDCOUPLING_ROOT_DIR )
288 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
289 endif( NOT MEDCOUPLING_ROOT_DIR )
291 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
293 if( NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/include/MEDCoupling.hxx)
294 message (FATAL_ERROR "MEDCoupling library not found in ${MEDCOUPLING_ROOT_DIR}")
295 else( NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/include/MEDCoupling.hxx)
296 message (STATUS "MEDCoupling library found in ${MEDCOUPLING_ROOT_DIR}")
297 endif( NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so OR NOT EXISTS ${MEDCOUPLING_ROOT_DIR}/include/MEDCoupling.hxx)
299 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
300 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
301 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
302 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
304 #extraction of the tarball archive name
305 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
306 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
307 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
308 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
309 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
310 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCOUPLING_VERSION_NAME)
312 message(STATUS "MEDCoupling version is ${MEDCOUPLING_VERSION_NAME}")
314 ExternalProject_Add (MEDCoupling
315 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
316 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
317 # BUILD_IN_SOURCE FALSE
318 CONFIGURE_COMMAND cmake <SOURCE_DIR>/${MEDCOUPLING_TARBALL_NAME} -DCMAKE_INSTALL_PREFIX=${MEDCOUPLING_ROOT_DIR} -DCONFIGURATION_ROOT_DIR=<SOURCE_DIR>/configuration-${MEDCOUPLING_VERSION_NAME} -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}
320 INSTALL_COMMAND make install
321 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
322 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
323 LOG_DOWNLOAD TRUE # Wrap download in script to log output
324 LOG_UPDATE TRUE # Wrap update in script to log output
325 LOG_CONFIGURE TRUE # Wrap configure in script to log output
326 LOG_BUILD TRUE # Wrap build in script to log output
327 LOG_TEST TRUE # Wrap test in script to log output
328 LOG_INSTALL TRUE # Wrap install in script to log output
331 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
333 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
334 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
336 add_library(medloader SHARED IMPORTED )
337 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
338 add_library(medcoupling SHARED IMPORTED )
339 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
341 if (TARGET MED AND TARGET PETSc)
342 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
343 endif(TARGET MED AND TARGET PETSc)
345 if (TARGET MED AND TARGET MEDCoupling)
346 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
347 endif(TARGET MED AND TARGET MEDCoupling)
349 if (TARGET PETSc AND TARGET MEDCoupling)
350 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
351 endif(TARGET PETSc AND TARGET MEDCoupling)
357 # Paraview variables to choose python version and for env_SOLVERLAB.sh
358 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
359 if ( NOT DEFINED PARAVIEW_VERSION )
360 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
361 endif( NOT DEFINED PARAVIEW_VERSION )
362 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
363 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
364 if ( DEFINED PARAVIEW_ROOT_DIR)
365 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
366 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
367 else( DEFINED PARAVIEW_ROOT_DIR)
368 message(STATUS "PARAVIEW_VERSION and PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
369 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
370 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
371 endif( DEFINED PARAVIEW_ROOT_DIR)
373 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 )
374 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
376 #extraction of the paraview version"
377 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
378 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
379 set( PARAVIEW_VERSION "5.0")
380 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
381 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
382 file(STRINGS ${vtkConfig_file} vtkConfig)
383 FOREACH(line ${vtkConfig})
384 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
385 IF(NOT ${pos} EQUAL -1)
386 string(LENGTH ${line} line_length)#length of the tarball
387 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
388 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
390 ENDIF(NOT ${pos} EQUAL -1)
391 ENDFOREACH(line ${vtkConfig})
392 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
393 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
394 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
397 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
399 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
400 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
402 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
403 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
406 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
407 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
408 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
409 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
410 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
411 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
412 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
413 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
414 set(Python_VERSION ${PYTHON_VERSION_STRING})
415 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
416 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
417 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
419 #Paraview library paths
420 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/:${PARAVIEW_LIBRARIES_DIR})
421 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)
423 message(STATUS "Python version found is ${Python_VERSION}")
424 find_package (SWIG 3.0 REQUIRED)
426 if (SOLVERLAB_WITH_DOCUMENTATION) #
427 find_package (Doxygen) #
428 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
429 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
430 if (NOT DOXYGEN_FOUND)
431 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
432 endif(NOT DOXYGEN_FOUND)
434 if (SOLVERLAB_WITH_TESTS) #
436 find_package (CPPUNIT REQUIRED)
438 find_package (XDR REQUIRED)
440 # Enter subdirectories
441 add_subdirectory (CDMATH)
442 if(SOLVERLAB_WITH_COREFLOWS)
443 add_subdirectory (CoreFlows)
444 endif(SOLVERLAB_WITH_COREFLOWS)
448 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
449 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh