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" )
23 set (PYTHON_ROOT_DIR OFF CACHE STRING "Python library path" )
25 #url of tarball librairies
26 set (DOWNLOAD_PETSC http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.14.0.tar.gz
27 CACHE STRING "PETSc tarball path/url" )
28 set (DOWNLOAD_SLEPC https://slepc.upv.es/download/distrib/slepc-3.14.0.tar.gz
29 CACHE STRING "SLEPC tarball path/url" )
30 set (DOWNLOAD_F2CBLASLAPACK https://www.mcs.anl.gov/petsc/mirror/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz
31 CACHE STRING "F2CBLASLAPACK tarball path/url" )
32 set (DOWNLOAD_HDF5 https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/src/hdf5-1.10.3.tar.gz
33 CACHE STRING "HDF5 tarball path/url" )
34 set (DOWNLOAD_MED http://files.salome-platform.org/Salome/other/med-4.1.0.tar.gz
35 CACHE STRING "MED tarball path/url")
36 set (DOWNLOAD_MEDCOUPLING http://files.salome-platform.org/Salome/other/medCoupling-9.4.0.tar.gz
37 CACHE STRING "MEDCoupling tarball path/url" )
39 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
41 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
43 include(ExternalProject)#For PETSc, MED and MEDCoupling
45 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
46 set(PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
47 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
48 set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
51 ######################################################
52 # Detection or compilation of PETSc+SLEPc+HDF5 #
53 ######################################################
54 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
56 set(PETSC_DIR $ENV{PETSC_DIR})
57 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
59 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
62 find_package (PETSc 3.4 REQUIRED)
65 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
66 set(PETSC_INSTALL ${PETSC_DIR})
68 #Define and search slepc variables
70 if ( DEFINED ENV{SLEPC_DIR} )
71 set(SLEPC_DIR $ENV{SLEPC_DIR})
72 else ( DEFINED ENV{SLEPC_DIR} )
73 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
74 endif( DEFINED ENV{SLEPC_DIR} )
77 message ( STATUS "Checking variable SLEPC_DIR" )
78 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
79 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
80 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
81 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
83 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
86 #define hdf5 variables
87 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
88 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
89 set(HDF5_ROOT $ENV{HDF5_ROOT})
90 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
91 #HDF5 to be found in petsc external packages
92 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
93 endif( DEFINED ENV{HDF5_ROOT} )
94 endif( NOT HDF5_ROOT )
95 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
96 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
97 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
98 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
100 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
101 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
102 message ( STATUS "PETSC library found in /usr/lib64" )
104 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
105 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
107 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
109 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
110 set(PETSC_INSTALL ${PETSC_DIR})
112 #Define and search slepc variables
113 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
114 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
115 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
117 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
118 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
119 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
120 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
121 message( FATAL_ERROR "SLEPc not found in the system" )
122 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
124 #HDF5 to be found in the system
125 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
126 find_package(HDF5 REQUIRED)
127 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
128 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
129 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
131 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
132 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
133 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
134 # set(PETSC_DIR /usr/lib/petsc/)
135 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
136 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
138 # find_package (PETSc 3.4 REQUIRED)
139 # petsc_get_version ()
140 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
142 # Define and search slepc variables
143 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
144 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
145 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
146 # set(SLEPC_DIR /usr/lib/slepc/)
147 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
148 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
149 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
150 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
151 # message( FATAL_ERROR "SLEPc not found in the system" )
152 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
154 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
156 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
157 message (STATUS "PETSC not found in the system")
158 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
159 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
160 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
162 #extract tarball name
163 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
164 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
165 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
166 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
167 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
169 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
170 set(PETSC_ARCH arch-linux-c-opt)
171 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
173 ExternalProject_Add (PETSc
174 URL ${DOWNLOAD_PETSC}
175 SOURCE_DIR ${PETSC_DIR}
177 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}
178 BUILD_COMMAND make all
179 TEST_COMMAND make check
180 INSTALL_COMMAND make install
181 INSTALL_DIR ${PETSC_DIR}
182 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
183 LOG_DOWNLOAD TRUE # Wrap download in script to log output
184 LOG_UPDATE TRUE # Wrap update in script to log output
185 LOG_CONFIGURE TRUE # Wrap configure in script to log output
186 LOG_BUILD TRUE # Wrap build in script to log output
187 LOG_TEST TRUE # Wrap test in script to log output
188 LOG_INSTALL TRUE # Wrap install in script to log output
191 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
193 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
194 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
195 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
196 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
197 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
199 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
200 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
202 #define slepc variables
203 set(SLEPC_DIR ${PETSC_INSTALL})
204 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)
205 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/installed-arch-linux2-c-opt/lib/libslepc.so)
206 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
208 #define hdf5 variables
209 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
210 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
211 set(HDF5_ROOT $ENV{HDF5_ROOT})
212 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
213 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
214 endif( DEFINED ENV{HDF5_ROOT} )
215 endif( NOT HDF5_ROOT )
216 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
217 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
219 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
220 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
222 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
223 add_definitions(-DPETSC_VERSION_GREATER_3_5)
224 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
226 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
228 add_library(petsc SHARED IMPORTED)
229 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
230 add_library(slepc SHARED IMPORTED)
231 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
233 ######################################################
234 # Detection or compilation of MEDFile #
235 ######################################################
236 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
238 if ( NOT MEDFILE_ROOT_DIR )
239 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
240 endif( NOT MEDFILE_ROOT_DIR )
242 find_package (MEDFile REQUIRED)
243 message (STATUS "MEDFile found in ${MEDFILE_ROOT_DIR}")
245 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
247 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
249 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
250 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/med) # Location of the final install
252 #extraction of the tarball archive name
253 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
254 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
255 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
256 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
257 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
259 ExternalProject_Add (MED
260 URL ${DOWNLOAD_MED} #location of med tarball
261 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
263 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
265 INSTALL_COMMAND make install
266 INSTALL_DIR ${MEDFILE_ROOT_DIR}
267 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
268 LOG_DOWNLOAD TRUE # Wrap download in script to log output
269 LOG_UPDATE TRUE # Wrap update in script to log output
270 LOG_CONFIGURE TRUE # Wrap configure in script to log output
271 LOG_BUILD TRUE # Wrap build in script to log output
272 LOG_TEST TRUE # Wrap test in script to log output
273 LOG_INSTALL TRUE # Wrap install in script to log output
276 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
277 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
278 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
280 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
282 add_library(med SHARED IMPORTED)
283 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
284 add_library(medC SHARED IMPORTED)
285 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
287 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
289 ######################################################
290 # Detection or compilation of MEDCoupling #
291 ######################################################
292 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
294 if( NOT MEDCOUPLING_ROOT_DIR )
295 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
296 endif( NOT MEDCOUPLING_ROOT_DIR )
298 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
300 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)
301 message (FATAL_ERROR "MEDCoupling library not found in ${MEDCOUPLING_ROOT_DIR}")
302 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)
303 message (STATUS "MEDCoupling library found in ${MEDCOUPLING_ROOT_DIR}")
304 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)
306 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
307 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
308 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
309 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
311 #extraction of the tarball archive name
312 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
313 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
314 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
315 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
316 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
317 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCOUPLING_VERSION_NAME)
319 message(STATUS "MEDCoupling version is ${MEDCOUPLING_VERSION_NAME}")
321 ExternalProject_Add (MEDCoupling
322 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
323 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
324 # BUILD_IN_SOURCE FALSE
325 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}
327 INSTALL_COMMAND make install
328 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
329 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
330 LOG_DOWNLOAD TRUE # Wrap download in script to log output
331 LOG_UPDATE TRUE # Wrap update in script to log output
332 LOG_CONFIGURE TRUE # Wrap configure in script to log output
333 LOG_BUILD TRUE # Wrap build in script to log output
334 LOG_TEST TRUE # Wrap test in script to log output
335 LOG_INSTALL TRUE # Wrap install in script to log output
338 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
340 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
341 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
343 add_library(medloader SHARED IMPORTED )
344 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
345 add_library(medcoupling SHARED IMPORTED )
346 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
348 if (TARGET MED AND TARGET PETSc)
349 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
350 endif(TARGET MED AND TARGET PETSc)
352 if (TARGET MED AND TARGET MEDCoupling)
353 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
354 endif(TARGET MED AND TARGET MEDCoupling)
356 if (TARGET PETSc AND TARGET MEDCoupling)
357 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
358 endif(TARGET PETSc AND TARGET MEDCoupling)
364 # Paraview variables to choose python version and for env_SOLVERLAB.sh
365 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
366 if ( NOT DEFINED PARAVIEW_VERSION )
367 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
368 endif( NOT DEFINED PARAVIEW_VERSION )
369 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
370 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
371 if ( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
372 if ( DEFINED PARAVIEW_ROOT_DIR )
373 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
374 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
375 else( DEFINED PARAVIEW_ROOT_DIR )
376 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
377 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
378 endif( DEFINED PARAVIEW_ROOT_DIR )
379 else( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
380 message(STATUS "PARAVIEW_VERSION and PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
381 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
382 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
383 endif( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
385 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 )
386 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
388 #extraction of the paraview version"
389 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
390 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
391 set( PARAVIEW_VERSION "5.0")
392 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
393 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
394 file(STRINGS ${vtkConfig_file} vtkConfig)
395 FOREACH(line ${vtkConfig})
396 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
397 IF(NOT ${pos} EQUAL -1)
398 string(LENGTH ${line} line_length)#length of the tarball
399 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
400 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
402 ENDIF(NOT ${pos} EQUAL -1)
403 ENDFOREACH(line ${vtkConfig})
404 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
405 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
406 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
409 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
411 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
412 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
414 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
415 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
418 IF ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
419 IF ( PYTHON_ROOT_DIR )
420 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
421 ELSE( PYTHON_ROOT_DIR })
422 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
423 ENDIF( PYTHON_ROOT_DIR })
424 ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
426 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
427 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
428 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
429 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
430 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
431 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
432 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
433 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
434 set(Python_VERSION ${PYTHON_VERSION_STRING})
435 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
436 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
437 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
439 #Paraview library paths
440 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})
441 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_LIBRARIES_DIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/vtkmodules/)
443 message(STATUS "Python version found is ${Python_VERSION}")
444 find_package (SWIG 3.0 REQUIRED)
446 if (SOLVERLAB_WITH_DOCUMENTATION) #
447 find_package (Doxygen) #
448 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
449 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
450 if (NOT DOXYGEN_FOUND)
451 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
452 endif(NOT DOXYGEN_FOUND)
454 if (SOLVERLAB_WITH_TESTS) #
456 find_package (CPPUNIT REQUIRED)
458 find_package (XDR REQUIRED)
460 # Enter subdirectories
461 add_subdirectory (CDMATH)
462 if(SOLVERLAB_WITH_COREFLOWS)
463 add_subdirectory (CoreFlows)
464 endif(SOLVERLAB_WITH_COREFLOWS)
468 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
469 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh