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 ######################################################
46 # Detection or compilation of PETSc+SLEPc+HDF5 #
47 ######################################################
48 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
50 set(PETSC_DIR $ENV{PETSC_DIR})
51 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
53 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
56 find_package (PETSc 3.4 REQUIRED)
59 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
60 set(PETSC_INSTALL ${PETSC_DIR})
62 #Define and search slepc variables
64 if ( DEFINED ENV{SLEPC_DIR} )
65 set(SLEPC_DIR $ENV{SLEPC_DIR})
66 else ( DEFINED ENV{SLEPC_DIR} )
67 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
68 endif( DEFINED ENV{SLEPC_DIR} )
71 message ( STATUS "Checking variable SLEPC_DIR" )
72 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
73 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
74 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
75 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
77 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
80 #define hdf5 variables
81 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
82 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
83 set(HDF5_ROOT $ENV{HDF5_ROOT})
84 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
85 #HDF5 to be found in petsc external packages
86 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
87 endif( DEFINED ENV{HDF5_ROOT} )
88 endif( NOT HDF5_ROOT )
89 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
90 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
91 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
92 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
94 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
95 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
96 message ( STATUS "PETSC library found in /usr/lib64" )
98 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
99 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
101 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
103 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
104 set(PETSC_INSTALL ${PETSC_DIR})
106 #Define and search slepc variables
107 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
108 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
109 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
111 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
112 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
113 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
114 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
115 message( FATAL_ERROR "SLEPc not found in the system" )
116 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
118 #HDF5 to be found in the system
119 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
120 find_package(HDF5 REQUIRED)
121 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
122 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
123 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
125 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
126 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
127 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
128 # set(PETSC_DIR /usr/lib/petsc/)
129 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
130 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
132 # find_package (PETSc 3.4 REQUIRED)
133 # petsc_get_version ()
134 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
136 # Define and search slepc variables
137 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
138 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
139 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
140 # set(SLEPC_DIR /usr/lib/slepc/)
141 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
142 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
143 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
144 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
145 # message( FATAL_ERROR "SLEPc not found in the system" )
146 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
148 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
150 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
151 message (STATUS "PETSC not found in the system")
152 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
153 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
154 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
156 #extract tarball name
157 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
158 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
159 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
160 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
161 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
163 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
164 set(PETSC_ARCH arch-linux-c-opt)
165 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
167 ExternalProject_Add (PETSc
168 URL ${DOWNLOAD_PETSC}
169 SOURCE_DIR ${PETSC_DIR}
171 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}
172 BUILD_COMMAND make all
173 TEST_COMMAND make check
174 INSTALL_COMMAND make install
175 INSTALL_DIR ${PETSC_DIR}
176 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
177 LOG_DOWNLOAD TRUE # Wrap download in script to log output
178 LOG_UPDATE TRUE # Wrap update in script to log output
179 LOG_CONFIGURE TRUE # Wrap configure in script to log output
180 LOG_BUILD TRUE # Wrap build in script to log output
181 LOG_TEST TRUE # Wrap test in script to log output
182 LOG_INSTALL TRUE # Wrap install in script to log output
185 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
187 string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
188 string(FIND "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
189 MATH(EXPR start_version_name "${start_version_name}+1")#start after the occurence of "/"
190 string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
191 message( STATUS "PETSc version ${PETSC_VERSION} will be installed" )
193 set(PETSC_INCLUDES ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
194 set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
196 #define slepc variables
197 set(SLEPC_DIR ${PETSC_INSTALL})
198 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)
199 set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/installed-arch-linux2-c-opt/lib/libslepc.so)
200 message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
202 #define hdf5 variables
203 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
204 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
205 set(HDF5_ROOT $ENV{HDF5_ROOT})
206 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
207 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
208 endif( DEFINED ENV{HDF5_ROOT} )
209 endif( NOT HDF5_ROOT )
210 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
211 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
213 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
214 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
216 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
217 add_definitions(-DPETSC_VERSION_GREATER_3_5)
218 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
220 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
222 add_library(petsc SHARED IMPORTED)
223 set_property(TARGET petsc PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
224 add_library(slepc SHARED IMPORTED)
225 set_property(TARGET slepc PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
227 ######################################################
228 # Detection or compilation of MEDFile #
229 ######################################################
230 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
232 if ( NOT MEDFILE_ROOT_DIR )
233 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
234 endif( NOT MEDFILE_ROOT_DIR )
236 find_package (MEDFile REQUIRED)
237 message (STATUS "MEDFile found in ${MEDFILE_ROOT_DIR}")
239 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
241 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
243 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
244 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/med) # Location of the final install
246 #extraction of the tarball archive name
247 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
248 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
249 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
250 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
251 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
253 ExternalProject_Add (MED
254 URL ${DOWNLOAD_MED} #location of med tarball
255 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
257 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
259 INSTALL_COMMAND make install
260 INSTALL_DIR ${MEDFILE_ROOT_DIR}
261 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
262 LOG_DOWNLOAD TRUE # Wrap download in script to log output
263 LOG_UPDATE TRUE # Wrap update in script to log output
264 LOG_CONFIGURE TRUE # Wrap configure in script to log output
265 LOG_BUILD TRUE # Wrap build in script to log output
266 LOG_TEST TRUE # Wrap test in script to log output
267 LOG_INSTALL TRUE # Wrap install in script to log output
270 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
271 set(MEDFILE_LIBRARIES ${MEDFILE_ROOT_DIR}/lib)# Nécessaire pour le env_SOLVERLAB.sh
272 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
274 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
276 add_library(med SHARED IMPORTED)
277 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
278 add_library(medC SHARED IMPORTED)
279 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
281 string(REPLACE ";" ":" MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
283 ######################################################
284 # Detection or compilation of MEDCoupling #
285 ######################################################
286 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
288 if( NOT MEDCOUPLING_ROOT_DIR )
289 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
290 endif( NOT MEDCOUPLING_ROOT_DIR )
292 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
294 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)
295 message (FATAL_ERROR "MEDCoupling library not found in ${MEDCOUPLING_ROOT_DIR}")
296 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)
297 message (STATUS "MEDCoupling library found in ${MEDCOUPLING_ROOT_DIR}")
298 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)
300 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
301 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
302 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
303 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
305 #extraction of the tarball archive name
306 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
307 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
308 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
309 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
310 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
311 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCOUPLING_VERSION_NAME)
313 message(STATUS "MEDCoupling version is ${MEDCOUPLING_VERSION_NAME}")
315 ExternalProject_Add (MEDCoupling
316 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
317 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
318 # BUILD_IN_SOURCE FALSE
319 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}
321 INSTALL_COMMAND make install
322 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
323 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
324 LOG_DOWNLOAD TRUE # Wrap download in script to log output
325 LOG_UPDATE TRUE # Wrap update in script to log output
326 LOG_CONFIGURE TRUE # Wrap configure in script to log output
327 LOG_BUILD TRUE # Wrap build in script to log output
328 LOG_TEST TRUE # Wrap test in script to log output
329 LOG_INSTALL TRUE # Wrap install in script to log output
332 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
334 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
335 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
337 add_library(medloader SHARED IMPORTED )
338 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
339 add_library(medcoupling SHARED IMPORTED )
340 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
342 if (TARGET MED AND TARGET PETSc)
343 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
344 endif(TARGET MED AND TARGET PETSc)
346 if (TARGET MED AND TARGET MEDCoupling)
347 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
348 endif(TARGET MED AND TARGET MEDCoupling)
350 if (TARGET PETSc AND TARGET MEDCoupling)
351 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
352 endif(TARGET PETSc AND TARGET MEDCoupling)
358 # Paraview variables to choose python version and for env_SOLVERLAB.sh
359 if ( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
360 if ( DEFINED PARAVIEW_ROOT_DIR )
361 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
362 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
363 else( DEFINED PARAVIEW_ROOT_DIR )
364 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
365 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
366 endif( DEFINED PARAVIEW_ROOT_DIR )
367 else( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
368 message(STATUS "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 OR DEFINED ENV{PARAVIEW_ROOT_DIR})
373 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
374 if ( NOT DEFINED PARAVIEW_VERSION )
375 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
376 endif( NOT DEFINED PARAVIEW_VERSION )
377 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
378 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
379 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 )
380 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
382 #extraction of the paraview version"
383 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
384 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
385 set( PARAVIEW_VERSION "5.0")
386 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
387 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
388 file(STRINGS ${vtkConfig_file} vtkConfig)
389 FOREACH(line ${vtkConfig})
390 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
391 IF(NOT ${pos} EQUAL -1)
392 string(LENGTH ${line} line_length)#length of the tarball
393 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
394 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
396 ENDIF(NOT ${pos} EQUAL -1)
397 ENDFOREACH(line ${vtkConfig})
398 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
399 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
400 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
403 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
405 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
406 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
408 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
409 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
412 IF ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
413 IF ( PYTHON_ROOT_DIR )
414 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
415 ELSE( PYTHON_ROOT_DIR })
416 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
417 ENDIF( PYTHON_ROOT_DIR })
418 ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
420 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
421 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
422 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
423 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
424 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
425 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
426 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
427 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
428 set(Python_VERSION ${PYTHON_VERSION_STRING})
429 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
430 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
431 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
433 IF ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
434 IF ( PYTHON_ROOT_DIR )
435 set(PYQT5_ROOT_DIR ${PYQT5_ROOT_DIR} )
436 ELSE( PYTHON_ROOT_DIR })
437 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
438 ENDIF( PYTHON_ROOT_DIR })
439 ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
440 set(PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
441 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
442 set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
445 #Paraview library paths
446 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})
447 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)
449 message(STATUS "Python version found is ${Python_VERSION}")
450 find_package (SWIG 3.0 REQUIRED)
452 if (SOLVERLAB_WITH_DOCUMENTATION) #
453 find_package (Doxygen) #
454 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
455 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
456 if (NOT DOXYGEN_FOUND)
457 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
458 endif(NOT DOXYGEN_FOUND)
460 if (SOLVERLAB_WITH_TESTS) #
462 find_package (CPPUNIT REQUIRED)
464 find_package (XDR REQUIRED)
466 # Enter subdirectories
467 add_subdirectory (CDMATH)
468 if(SOLVERLAB_WITH_COREFLOWS)
469 add_subdirectory (CoreFlows)
470 endif(SOLVERLAB_WITH_COREFLOWS)
474 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
475 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh