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)
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 add_library(medloader SHARED IMPORTED )
300 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
301 add_library(interpkernel SHARED IMPORTED )
302 set_property(TARGET interpkernel PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libinterpkernel.so)
303 add_library(medcouplingremapper SHARED IMPORTED )
304 set_property(TARGET medcouplingremapper PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcouplingremapper.so)
305 add_library(medcouplingcpp SHARED IMPORTED )
306 set_property(TARGET medcouplingcpp PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcouplingcpp.so)
308 set(MEDCoupling_DIR ${MEDCOUPLING_ROOT_DIR}/cmake_files)
309 find_package(MEDCoupling CONFIG REQUIRED) # CONFIG is important !
310 message( STATUS "MEDCoupling found. Version is ${MEDCoupling_VERSION}")
312 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
313 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
314 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
315 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
317 #extraction of the tarball archive name
318 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
319 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
320 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
321 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
322 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
323 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCoupling_VERSION)
325 message(STATUS "MEDCoupling version will be ${MEDCoupling_VERSION}")
327 ExternalProject_Add (MEDCoupling
328 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
329 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
330 # BUILD_IN_SOURCE FALSE
331 CONFIGURE_COMMAND cmake <SOURCE_DIR>/${MEDCOUPLING_TARBALL_NAME} -DCMAKE_INSTALL_PREFIX=${MEDCOUPLING_ROOT_DIR} -DCONFIGURATION_ROOT_DIR=<SOURCE_DIR>/configuration-${MEDCoupling_VERSION} -DMEDFILE_ROOT_DIR=${MEDFILE_ROOT_DIR} -DMEDCOUPLING_ENABLE_PARTITIONER=OFF -DMEDCOUPLING_PARTITIONER_METIS=OFF -DMEDCOUPLING_PARTITIONER_SCOTCH=OFF -DMEDCOUPLING_ENABLE_RENUMBER=OFF -DMEDCOUPLING_BUILD_DOC=OFF -DHDF5_ROOT_DIR=${HDF5_ROOT}
333 INSTALL_COMMAND make install
334 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
335 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
336 LOG_DOWNLOAD TRUE # Wrap download in script to log output
337 LOG_UPDATE TRUE # Wrap update in script to log output
338 LOG_CONFIGURE TRUE # Wrap configure in script to log output
339 LOG_BUILD TRUE # Wrap build in script to log output
340 LOG_TEST TRUE # Wrap test in script to log output
341 LOG_INSTALL TRUE # Wrap install in script to log output
344 add_library(medloader SHARED IMPORTED )
345 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
347 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
349 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
350 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_SOLVERLAB.sh
352 add_library(medcoupling SHARED IMPORTED )
353 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
355 if ( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
356 add_definitions(-DMEDCoupling_VERSION_VERSION_GREATER_9_4)
357 endif( ${MEDCoupling_VERSION} VERSION_GREATER 9.4 )
359 if (TARGET MED AND TARGET PETSc)
360 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
361 endif(TARGET MED AND TARGET PETSc)
363 if (TARGET MED AND TARGET MEDCoupling)
364 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
365 endif(TARGET MED AND TARGET MEDCoupling)
367 if (TARGET PETSc AND TARGET MEDCoupling)
368 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
369 endif(TARGET PETSc AND TARGET MEDCoupling)
371 IF(MEDCOUPLING_USE_64BIT_IDS)
372 SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -DMEDCOUPLING_USE_64BIT_IDS)
373 ENDIF(MEDCOUPLING_USE_64BIT_IDS)
379 # Paraview variables to choose python version and for env_SOLVERLAB.sh
380 if ( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
381 if ( DEFINED PARAVIEW_ROOT_DIR )
382 set( PARAVIEW_INCLUDE_DIR ${PARAVIEW_ROOT_DIR}/include)
383 set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
384 else( DEFINED PARAVIEW_ROOT_DIR )
385 set( PARAVIEW_ROOT_DIR $ENV{PARAVIEW_ROOT_DIR} )
386 set( PARAVIEW_INCLUDE_DIR $ENV{PARAVIEW_ROOT_DIR}/include)
387 set( PARAVIEW_LIBRARIES_DIR $ENV{PARAVIEW_ROOT_DIR}/lib)
388 endif( DEFINED PARAVIEW_ROOT_DIR )
389 else( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
390 message(STATUS "PARAVIEW_ROOT_DIR not set. Trying to detect paraview.")
391 set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
392 set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
393 endif( DEFINED PARAVIEW_ROOT_DIR OR DEFINED ENV{PARAVIEW_ROOT_DIR})
395 if ( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
396 if ( NOT DEFINED PARAVIEW_VERSION )
397 set( PARAVIEW_VERSION $ENV{PARAVIEW_VERSION})
398 endif( NOT DEFINED PARAVIEW_VERSION )
399 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
400 else( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
401 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 )
402 find_file( vtkConfig_file vtkPVConfig.h HINTS ${PARAVIEW_INCLUDE_DIR} PATH_SUFFIXES ${PARAVIEW_SUFFIXES})
404 #extraction of the paraview version"
405 IF ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
406 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR} and subdirectories ${PARAVIEW_SUFFIXES}. Postprocessing may not work")
407 set( PARAVIEW_VERSION "5.0")
408 ELSE ( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
409 message( STATUS "Found vtkPVConfig.h in ${vtkConfig_file}")
410 file(STRINGS ${vtkConfig_file} vtkConfig)
411 FOREACH(line ${vtkConfig})
412 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
413 IF(NOT ${pos} EQUAL -1)
414 string(LENGTH ${line} line_length)#length of the tarball
415 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
416 string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
418 ENDIF(NOT ${pos} EQUAL -1)
419 ENDFOREACH(line ${vtkConfig})
420 message(STATUS "ParaView detected, version is ${PARAVIEW_VERSION}" )
421 ENDIF( ${vtkConfig_file} STREQUAL "vtkConfig_file-NOTFOUND" )
422 endif( DEFINED PARAVIEW_VERSION OR DEFINED ENV{PARAVIEW_VERSION} )
424 #Choose python 2 or 3
425 IF ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
427 message(STATUS "PARAVIEW_VERSION greater than 5.6. We need python3 for postprocessing scripts.")
428 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
430 message(STATUS "PARAVIEW_VERSION smaller than 5.6. We need python2 for postprocessing scripts.")
431 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
434 IF ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
435 IF ( PYTHON_ROOT_DIR )
436 set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} )
437 ELSE( PYTHON_ROOT_DIR )
438 set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} )
439 ENDIF( PYTHON_ROOT_DIR)
440 ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
442 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
443 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
444 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
445 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
446 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
447 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
448 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
449 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
450 set(Python_VERSION ${PYTHON_VERSION_STRING})
451 set(Python_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
452 set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
453 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
456 IF ( NOT PYQT5_ROOT_DIR )
457 set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
458 ENDIF( NOT PYQT5_ROOT_DIR )
461 IF ( NOT MATPLOTLIB_ROOT_DIR )
462 set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
463 ENDIF( NOT MATPLOTLIB_ROOT_DIR )
466 IF ( NOT HDF5_ROOT_DIR )
467 IF ( ENV{HDF5_ROOT_DIR} )
468 set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
469 ELSE( ENV{HDF5_ROOT_DIR} )
470 set(HDF5_ROOT_DIR ${HDF5_ROOT} )
471 ENDIF( ENV{HDF5_ROOT_DIR} )
472 ENDIF( NOT HDF5_ROOT_DIR )
475 #Paraview library paths
476 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})
477 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)
479 message(STATUS "Python version found is ${Python_VERSION}")
480 find_package (SWIG 3.0 REQUIRED)
482 if (SOLVERLAB_WITH_DOCUMENTATION) #
483 find_package (Doxygen) #
484 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
485 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
486 if (NOT DOXYGEN_FOUND)
487 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
488 endif(NOT DOXYGEN_FOUND)
490 if (SOLVERLAB_WITH_TESTS) #
492 find_package (CPPUNIT REQUIRED)
494 find_package (XDR REQUIRED)
496 # Enter subdirectories
497 add_subdirectory (CDMATH)
498 if(SOLVERLAB_WITH_COREFLOWS)
499 add_subdirectory (CoreFlows)
500 endif(SOLVERLAB_WITH_COREFLOWS)
504 ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
505 ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh