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 ADD_DEFINITIONS(-DWITH_NUMPY)
46 ######################################################
47 # Detection or compilation of PETSc+SLEPc+HDF5 #
48 ######################################################
49 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
51 set(PETSC_DIR $ENV{PETSC_DIR})
52 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
54 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
57 find_package (PETSc 3.4 REQUIRED)
60 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
61 set(PETSC_INSTALL ${PETSC_DIR})
63 #Define and search slepc variables
65 if ( DEFINED ENV{SLEPC_DIR} )
66 set(SLEPC_DIR $ENV{SLEPC_DIR})
67 else ( DEFINED ENV{SLEPC_DIR} )
68 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
69 endif( DEFINED ENV{SLEPC_DIR} )
72 message ( STATUS "Checking variable SLEPC_DIR" )
73 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
74 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
75 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
76 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
78 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
81 #define hdf5 variables
82 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
83 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
84 set(HDF5_ROOT $ENV{HDF5_ROOT})
85 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
86 #HDF5 to be found in petsc external packages
87 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
88 endif( DEFINED ENV{HDF5_ROOT} )
89 endif( NOT HDF5_ROOT )
90 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
91 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
92 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
93 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
95 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
96 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
97 message ( STATUS "PETSC library found in /usr/lib64" )
99 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
100 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
102 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
104 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
105 set(PETSC_INSTALL ${PETSC_DIR})
107 #Define and search slepc variables
108 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
109 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
110 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
112 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
113 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
114 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
115 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
116 message( FATAL_ERROR "SLEPc not found in the system" )
117 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
119 #HDF5 to be found in the system
120 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
121 find_package(HDF5 REQUIRED)
122 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
123 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
124 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
126 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
127 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
128 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
129 # set(PETSC_DIR /usr/lib/petsc/)
130 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
131 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
133 # find_package (PETSc 3.4 REQUIRED)
134 # petsc_get_version ()
135 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
137 # Define and search slepc variables
138 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
139 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
140 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
141 # set(SLEPC_DIR /usr/lib/slepc/)
142 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
143 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
144 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
145 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
146 # message( FATAL_ERROR "SLEPc not found in the system" )
147 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
149 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
151 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
152 message (STATUS "PETSC not found in the system")
153 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
154 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
155 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
157 #extract tarball name
158 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
159 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
160 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
161 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
162 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
164 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
165 set(PETSC_ARCH arch-linux-c-opt)
166 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
168 ExternalProject_Add (PETSc
169 URL ${DOWNLOAD_PETSC}
170 SOURCE_DIR ${PETSC_DIR}
172 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}
173 BUILD_COMMAND make all
174 TEST_COMMAND make check
175 INSTALL_COMMAND make install
176 INSTALL_DIR ${PETSC_DIR}
177 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
178 LOG_DOWNLOAD TRUE # Wrap download in script to log output
179 LOG_UPDATE TRUE # Wrap update in script to log output
180 LOG_CONFIGURE TRUE # Wrap configure in script to log output
181 LOG_BUILD TRUE # Wrap build in script to log output
182 LOG_TEST TRUE # Wrap test in script to log output
183 LOG_INSTALL TRUE # Wrap install in script to log output
186 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
188 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
189 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
190 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
191 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
192 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
194 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
195 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
197 #define slepc variables
198 set(SLEPC_DIR ${PETSC_INSTALL})
199 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)
200 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/installed-arch-linux2-c-opt/lib/libslepc.so)
201 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
203 #define hdf5 variables
204 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
205 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
206 set(HDF5_ROOT $ENV{HDF5_ROOT})
207 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
208 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
209 endif( DEFINED ENV{HDF5_ROOT} )
210 endif( NOT HDF5_ROOT )
211 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
212 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
214 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
215 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
217 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
218 add_definitions(-DPETSC_VERSION_GREATER_3_5)
219 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
221 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
223 add_library(petsc SHARED IMPORTED)
224 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
225 add_library(slepc SHARED IMPORTED)
226 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
228 ######################################################
229 # Detection or compilation of MEDFile #
230 ######################################################
231 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
233 if ( NOT MEDFILE_ROOT_DIR )
234 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
235 endif( NOT MEDFILE_ROOT_DIR )
237 find_package (MEDFile REQUIRED)
238 message (STATUS "MEDFile found in ${MEDFILE_ROOT_DIR}")
240 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
242 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
244 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
245 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/med) # Location of the final install
247 #extraction of the tarball archive name
248 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
249 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
250 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
251 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
252 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
254 ExternalProject_Add (MED
255 URL ${DOWNLOAD_MED} #location of med tarball
256 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
258 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
260 INSTALL_COMMAND make install
261 INSTALL_DIR ${MEDFILE_ROOT_DIR}
262 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
263 LOG_DOWNLOAD TRUE # Wrap download in script to log output
264 LOG_UPDATE TRUE # Wrap update in script to log output
265 LOG_CONFIGURE TRUE # Wrap configure in script to log output
266 LOG_BUILD TRUE # Wrap build in script to log output
267 LOG_TEST TRUE # Wrap test in script to log output
268 LOG_INSTALL TRUE # Wrap install in script to log output
271 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
272 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
273 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
275 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
277 add_library(med SHARED IMPORTED)
278 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
279 add_library(medC SHARED IMPORTED)
280 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
282 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
284 ######################################################
285 # Detection or compilation of MEDCoupling #
286 ######################################################
287 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
289 if( NOT MEDCOUPLING_ROOT_DIR )
290 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
291 endif( NOT MEDCOUPLING_ROOT_DIR )
293 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
295 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)
296 message (FATAL_ERROR "MEDCoupling library not found in ${MEDCOUPLING_ROOT_DIR}")
297 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)
298 message (STATUS "MEDCoupling library found in ${MEDCOUPLING_ROOT_DIR}")
299 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)
301 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
302 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
303 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
304 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
306 #extraction of the tarball archive name
307 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
308 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
309 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
310 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
311 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
312 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCOUPLING_VERSION_NAME)
314 message(STATUS "MEDCoupling version is ${MEDCOUPLING_VERSION_NAME}")
316 ExternalProject_Add (MEDCoupling
317 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
318 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
319 # BUILD_IN_SOURCE FALSE
320 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}
322 INSTALL_COMMAND make install
323 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
324 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
325 LOG_DOWNLOAD TRUE # Wrap download in script to log output
326 LOG_UPDATE TRUE # Wrap update in script to log output
327 LOG_CONFIGURE TRUE # Wrap configure in script to log output
328 LOG_BUILD TRUE # Wrap build in script to log output
329 LOG_TEST TRUE # Wrap test in script to log output
330 LOG_INSTALL TRUE # Wrap install in script to log output
333 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
335 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
336 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
338 add_library(medloader SHARED IMPORTED )
339 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
340 add_library(medcoupling SHARED IMPORTED )
341 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
343 if (TARGET MED AND TARGET PETSc)
344 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
345 endif(TARGET MED AND TARGET PETSc)
347 if (TARGET MED AND TARGET MEDCoupling)
348 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
349 endif(TARGET MED AND TARGET MEDCoupling)
351 if (TARGET PETSc AND TARGET MEDCoupling)
352 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
353 endif(TARGET PETSc AND TARGET MEDCoupling)
359 # Paraview variables to choose python version and for env_SOLVERLAB.sh
360 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
361 if ( NOT DEFINED PARAVIEW_VERSION )
362 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
363 endif( NOT DEFINED PARAVIEW_VERSION )
364 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
365 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
366 if ( DEFINED PARAVIEW_ROOT_DIR)
367 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
368 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
369 else( DEFINED PARAVIEW_ROOT_DIR)
370 message(STATUS "PARAVIEW_VERSION and PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
371 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
372 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
373 endif( DEFINED PARAVIEW_ROOT_DIR)
375 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 )
376 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
378 #extraction of the paraview version"
379 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
380 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
381 set( PARAVIEW_VERSION "5.0")
382 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
383 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
384 file(STRINGS ${vtkConfig_file} vtkConfig)
385 FOREACH(line ${vtkConfig})
386 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
387 IF(NOT ${pos} EQUAL -1)
388 string(LENGTH ${line} line_length)#length of the tarball
389 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
390 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
392 ENDIF(NOT ${pos} EQUAL -1)
393 ENDFOREACH(line ${vtkConfig})
394 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
395 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
396 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
399 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
401 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
402 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
404 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
405 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
408 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
409 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
410 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
411 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
412 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
413 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
414 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
415 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
416 set(Python_VERSION ${PYTHON_VERSION_STRING})
417 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
418 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
419 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
421 # Bug MEDCoupling9.5.0 -> On ajoute les include de numpy
422 set(Python_INCLUDE_DIRS ${Python_INCLUDE_DIRS} $ENV{PYTHON_ROOT_DIR}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages/numpy/core/include)
424 #Paraview library paths
425 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})
426 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)
428 message(STATUS "Python version found is ${Python_VERSION}")
429 find_package (SWIG 3.0 REQUIRED)
431 if (SOLVERLAB_WITH_DOCUMENTATION) #
432 find_package (Doxygen) #
433 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
434 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
435 if (NOT DOXYGEN_FOUND)
436 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
437 endif(NOT DOXYGEN_FOUND)
439 if (SOLVERLAB_WITH_TESTS) #
441 find_package (CPPUNIT REQUIRED)
443 find_package (XDR REQUIRED)
445 # Enter subdirectories
446 add_subdirectory (CDMATH)
447 if(SOLVERLAB_WITH_COREFLOWS)
448 add_subdirectory (CoreFlows)
449 endif(SOLVERLAB_WITH_COREFLOWS)
453 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
454 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh