Salome HOME
Corrected instalation of documentation
[tools/solverlab.git] / CMakeLists.txt
1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
4
5 # Project name
6 project (SOLVERLAB C CXX)
7 set (SOLVERLAB_VERSION_MAJOR 0)
8 set (SOLVERLAB_VERSION_MINOR 1)
9
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)
16
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
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" )
37
38 set (CMAKE_BUILD_TYPE Release CACHE STRING "Installation mode")
39
40 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
41
42 include(ExternalProject)#For PETSc, MED and MEDCoupling
43
44 ######################################################
45 # Detection or compilation of PETSc+SLEPc+HDF5       #
46 ######################################################
47   if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
48     if   (NOT PETSC_DIR)
49       set(PETSC_DIR $ENV{PETSC_DIR})
50       message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
51     else (NOT PETSC_DIR)
52       message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
53     endif(NOT PETSC_DIR)
54
55     find_package (PETSc 3.4 REQUIRED)
56     petsc_get_version ()
57
58     message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
59     set(PETSC_INSTALL ${PETSC_DIR})
60
61     #Define and search slepc variables
62     if   ( NOT SLEPC_DIR )
63       if   ( DEFINED ENV{SLEPC_DIR} )
64         set(SLEPC_DIR $ENV{SLEPC_DIR})
65       else ( DEFINED ENV{SLEPC_DIR} )
66         set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
67       endif( DEFINED ENV{SLEPC_DIR} )
68     endif( NOT SLEPC_DIR)
69
70     message ( STATUS "Checking variable SLEPC_DIR" )
71     if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
72       set(SLEPC_INCLUDES  ${SLEPC_DIR}/include)
73       set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
74       message( STATUS "SLEPc found at ${SLEPC_DIR}" )
75     else()
76       message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
77     endif()
78
79     #define hdf5 variables
80     if   ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
81       if  ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
82         set(HDF5_ROOT $ENV{HDF5_ROOT})
83       else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
84         #HDF5 to be found in petsc external packages
85         set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
86       endif( DEFINED ENV{HDF5_ROOT} )
87     endif( NOT HDF5_ROOT )
88     set(HDF5_LIBRARY_DIR  ${HDF5_ROOT}/lib)
89     set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
90   else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
91     message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
92
93     if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )  #Case fedora/redhat system install
94       message ( STATUS "PETSC includes found in /usr/include/petsc/" )
95       message ( STATUS "PETSC library  found in /usr/lib64" )
96       set(PETSC_DIR /usr/)
97       set(PETSC_INCLUDES  /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
98       set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
99
100       set(PETSC_VERSION "3.8") #3.8 for fedora 26 , 3.9 for fedora 29 , 3.10 for fedora 30, , 3.12 for fedora 32
101       
102       set(CPACK_RPM_PACKAGE_REQUIRES   "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet. 
103       set(PETSC_INSTALL ${PETSC_DIR})
104
105       #Define and search slepc variables
106       if   ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
107         message( STATUS "SLEPc includes found in /usr/include/slepc/" )
108         message( STATUS "SLEPc library  found in /usr/lib64/slepc/" )
109         set(SLEPC_DIR /usr/)
110         set(SLEPC_INCLUDES  ${SLEPC_DIR}/include)
111         set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
112         set (CPACK_RPM_PACKAGE_REQUIRES   "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet. 
113       else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
114         message( FATAL_ERROR "SLEPc not found in the system" )
115       endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
116
117       #HDF5 to be found in the system
118       if   ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
119         find_package(HDF5 REQUIRED)
120         set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
121         set(CPACK_RPM_PACKAGE_REQUIRES   "hdf5-devel")
122       endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
123
124     #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
125     #  message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
126     #  message ( STATUS "PETSc library  found in /usr/lib/petsc/lib/libpetsc_real.so")
127     #  set(PETSC_DIR /usr/lib/petsc/)
128     #  set(PETSC_INCLUDES  ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
129     #  set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
130
131     #  find_package (PETSc 3.4 REQUIRED)
132     #  petsc_get_version ()
133     #  set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev   (>= 3.4)") # This is not fully working yet. 
134
135     #  Define and search slepc variables
136     #  if   ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
137     #    message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
138     #    message( STATUS "SLEPc library  found in /usr/lib/slepc/lib/libslepc_real.so" )
139     #    set(SLEPC_DIR /usr/lib/slepc/)
140     #    set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
141     #    set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
142     #    set (CPACK_DEBIAN_PACKAGE_REQUIRES   "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet. 
143     #  else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
144     #    message( FATAL_ERROR "SLEPc not found in the system" )
145     #  endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
146
147     #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
148
149     else ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )  # No petsc in system, do compile petsc along with slepc as an external package
150       message (STATUS "PETSC not found in the system")
151       message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
152       message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
153       message (STATUS "HDF5  will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
154
155       #extract tarball name
156       string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
157       string(FIND   "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
158       MATH(EXPR start_tarball_name  "${start_tarball_name}+1")#start after the occurence of "/"
159       MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
160       string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
161
162       set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install 
163       set(PETSC_ARCH arch-linux-c-opt)
164       set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
165
166       ExternalProject_Add (PETSc
167       URL               ${DOWNLOAD_PETSC}   
168       SOURCE_DIR        ${PETSC_DIR}
169       BUILD_IN_SOURCE   TRUE
170       CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PETSC_INSTALL} --with-debugging=0 --with-mpi=0 --download-f2cblaslapack=${DOWNLOAD_F2CBLASLAPACK} --with-fc=0 --download-slepc=${DOWNLOAD_SLEPC} --download-hdf5=${DOWNLOAD_HDF5}
171       BUILD_COMMAND     make all
172       TEST_COMMAND      make check
173       INSTALL_COMMAND   make install
174       INSTALL_DIR       ${PETSC_DIR}
175       STAMP_DIR         ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
176       LOG_DOWNLOAD      TRUE           # Wrap download in script to log output
177       LOG_UPDATE        TRUE           # Wrap update in script to log output
178       LOG_CONFIGURE     TRUE           # Wrap configure in script to log output
179       LOG_BUILD         TRUE           # Wrap build in script to log output
180       LOG_TEST          TRUE           # Wrap test in script to log output
181       LOG_INSTALL       TRUE           # Wrap install in script to log output
182        )
183
184       message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
185
186       string(LENGTH "${PETSC_TARBALL_NAME}" tarball_name_length)#length of the tarball
187       string(FIND   "${PETSC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
188       MATH(EXPR start_version_name  "${start_version_name}+1")#start after the occurence of "/"
189       string(SUBSTRING ${PETSC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} PETSC_VERSION)
190       message( STATUS "PETSc version ${PETSC_VERSION}  will be installed" )
191
192       set(PETSC_INCLUDES  ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
193       set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
194
195       #define slepc variables
196       set(SLEPC_DIR ${PETSC_INSTALL})
197       set(SLEPC_INCLUDES ${SLEPC_DIR}/include  ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/include ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/installed-arch-linux2-c-opt/include)
198       set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.13.4/installed-arch-linux2-c-opt/lib/libslepc.so)
199       message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
200
201       #define hdf5 variables
202       if   ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
203         if  ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
204           set(HDF5_ROOT $ENV{HDF5_ROOT})
205         else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment          
206           set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
207         endif( DEFINED ENV{HDF5_ROOT} )
208       endif( NOT HDF5_ROOT )
209       set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
210       set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
211
212     endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
213   endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
214
215   if   ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
216     add_definitions(-DPETSC_VERSION_GREATER_3_5)
217   endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
218
219 string(REPLACE ";" ":"  PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
220
221 add_library(petsc   SHARED IMPORTED)
222 set_property(TARGET petsc  PROPERTY IMPORTED_LOCATION ${PETSC_LIBRARIES})
223 add_library(slepc   SHARED IMPORTED)
224 set_property(TARGET slepc  PROPERTY IMPORTED_LOCATION ${SLEPC_LIBRARIES})
225
226 ######################################################
227 # Detection or compilation of MEDFile                #
228 ######################################################
229 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
230
231   if   ( NOT MEDFILE_ROOT_DIR )
232     set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
233   endif( NOT MEDFILE_ROOT_DIR )
234
235   find_package (MEDFile REQUIRED)
236   message (STATUS "MEDFile found in ${MEDFILE_ROOT_DIR}")
237
238 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
239
240   message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
241   set(MACHINE PCLINUX)
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
244   
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)
251
252   ExternalProject_Add (MED
253         URL               ${DOWNLOAD_MED}  #location of med tarball
254         SOURCE_DIR        ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
255         BUILD_IN_SOURCE   TRUE
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 
257         BUILD_COMMAND     make
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
267   )
268   
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
272
273 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
274
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)
279
280 string(REPLACE ";" ":"  MEDFILE_LIBRARIES_INSTALL "${MEDFILE_LIBRARIES}")# use colon instead of semicolon in environment file env_SOLVERLAB.sh
281
282 ######################################################
283 # Detection or compilation of MEDCoupling            #
284 ######################################################
285 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
286
287   if( NOT MEDCOUPLING_ROOT_DIR )
288     set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
289   endif( NOT MEDCOUPLING_ROOT_DIR )
290
291   message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
292
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)
298
299 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
300   message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
301   set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
302   SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
303
304   #extraction of the tarball archive name
305   string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
306   string(FIND   "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
307   MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
308   MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
309   string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
310   string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCOUPLING_VERSION_NAME)
311
312   message(STATUS "MEDCoupling version is ${MEDCOUPLING_VERSION_NAME}")
313
314   ExternalProject_Add (MEDCoupling
315         URL               ${DOWNLOAD_MEDCOUPLING}  #location of medcoupling tarball
316         SOURCE_DIR        ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
317 #        BUILD_IN_SOURCE   FALSE
318         CONFIGURE_COMMAND cmake <SOURCE_DIR>/${MEDCOUPLING_TARBALL_NAME} -DCMAKE_INSTALL_PREFIX=${MEDCOUPLING_ROOT_DIR} -DCONFIGURATION_ROOT_DIR=<SOURCE_DIR>/configuration-${MEDCOUPLING_VERSION_NAME} -DMEDFILE_ROOT_DIR=${MEDFILE_ROOT_DIR} -DMEDCOUPLING_ENABLE_PARTITIONER=OFF -DMEDCOUPLING_PARTITIONER_METIS=OFF -DMEDCOUPLING_PARTITIONER_SCOTCH=OFF -DMEDCOUPLING_ENABLE_RENUMBER=OFF -DMEDCOUPLING_BUILD_DOC=OFF -DHDF5_ROOT_DIR=${HDF5_ROOT}
319         BUILD_COMMAND     make
320         INSTALL_COMMAND   make install
321         INSTALL_DIR       ${MEDCOUPLING_ROOT_DIR}
322         STAMP_DIR         ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
323         LOG_DOWNLOAD      TRUE           # Wrap download in script to log output
324         LOG_UPDATE        TRUE           # Wrap update in script to log output
325         LOG_CONFIGURE     TRUE           # Wrap configure in script to log output
326         LOG_BUILD         TRUE           # Wrap build in script to log output
327         LOG_TEST          TRUE           # Wrap test in script to log output
328         LOG_INSTALL       TRUE           # Wrap install in script to log output
329   )
330
331 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
332
333 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
334 set(MEDCOUPLING_LIBRARIES   ${MEDCOUPLING_ROOT_DIR}/lib    )#for environment file env_SOLVERLAB.sh 
335
336 add_library(medloader   SHARED IMPORTED )
337 set_property(TARGET medloader   PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
338 add_library(medcoupling SHARED IMPORTED )
339 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
340
341 if   (TARGET MED AND TARGET PETSc)
342   ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
343 endif(TARGET MED AND TARGET PETSc)
344
345 if   (TARGET MED AND TARGET MEDCoupling)
346   ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
347 endif(TARGET MED AND TARGET MEDCoupling)
348  
349 if   (TARGET PETSc AND TARGET MEDCoupling)
350   ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
351 endif(TARGET PETSc AND TARGET MEDCoupling)
352  
353 ####################
354 # Final operations #
355 ####################                                  
356
357 # Paraview variables for env_SOLVERLAB.sh  
358 if( NOT DEFINED PARAVIEW_VERSION )
359   if( DEFINED PARAVIEW_ROOT_DIR)
360     set( PARAVIEW_INCLUDE_DIR   ${PARAVIEW_ROOT_DIR}/include)
361     set( PARAVIEW_LIBRARIES_DIR ${PARAVIEW_ROOT_DIR}/lib)
362   else( DEFINED PARAVIEW_ROOT_DIR)
363     set( PARAVIEW_INCLUDE_DIR /usr/include/paraview/)
364     set( PARAVIEW_LIBRARIES_DIR /usr/lib/paraview/:/usr/lib64/paraview/:/usr/lib64/vtk/:/usr/lib/vtk/)
365   endif( DEFINED PARAVIEW_ROOT_DIR)
366
367   #extraction of the paraview version"
368   IF   ( EXISTS ${PARAVIEW_INCLUDE_DIR}/vtkPVConfig.h )
369     file(STRINGS ${PARAVIEW_INCLUDE_DIR}/vtkPVConfig.h vtkConfig)
370   ELSE ( EXISTS ${PARAVIEW_INCLUDE_DIR}/vtkPVConfig.h )
371     message(WARNING "Could not find ParaView configuration file vtkPVConfig.h in folder ${PARAVIEW_INCLUDE_DIR}. Postprocessing may not work")
372   ENDIF( EXISTS ${PARAVIEW_INCLUDE_DIR}/vtkPVConfig.h )
373
374   FOREACH(line ${vtkConfig})
375     string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
376     IF(NOT ${pos} EQUAL -1)
377       string(LENGTH ${line} line_length)#length of the tarball
378       MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
379       string(SUBSTRING ${line} ${start_pv_version} 5 PARAVIEW_VERSION)
380       break()
381     ENDIF(NOT ${pos} EQUAL -1)
382   ENDFOREACH(line vtkConfig)
383 endif(NOT DEFINED PARAVIEW_VERSION)
384   
385 message(STATUS "ParaView version is ${PARAVIEW_VERSION}" )
386 IF   ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
387   SET(PYTHON2OR3 "3")
388 ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )#Use python 2
389   SET(PYTHON2OR3 "2")
390 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
391
392     set (PV_LIB_DIR    /usr/lib/python${PYTHON2OR3}.7/dist-packages/paraview/:/usr/lib64/python${PYTHON2OR3}.7/site-packages/vtk/:${PARAVIEW_LIBRARIES_DIR})
393     set (PV_PYTHON_DIR /usr/lib/python${PYTHON2OR3}.7/dist-packages/paraview/:/usr/lib64/python${PYTHON2OR3}.7/site-packages/vtk/:/usr/lib64/paraview/site-packages/:/usr/lib64/paraview/site-packages/paraview/:/usr/lib64/paraview/site-packages/vtk/:/usr/lib64/paraview/python${PYTHON2OR3}.7/site-packages/:/usr/lib64/paraview/python${PYTHON2OR3}.7/site-packages/paraview/:/usr/lib64/paraview/python${PYTHON2OR3}.7/site-packages/vtkmodules:/usr/lib/paraview/site-packages/paraview:/usr/lib/paraview/site-packages/paraview/vtk)
394
395 # Find python
396 IF   (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
397   find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
398   SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
399 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
400   find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
401   find_package(PythonLibs   ${PYTHON2OR3} REQUIRED )
402   set(Python_LIBRARIES    ${PYTHON_LIBRARIES})
403   set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
404   set(Python_VERSION      ${PYTHON_VERSION_STRING})
405 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
406
407 message(STATUS "Python version is ${Python_VERSION}")
408 find_package (SWIG 3.0 REQUIRED)
409
410 if (SOLVERLAB_WITH_DOCUMENTATION)                                                                           #
411   find_package (Doxygen)                                                                                    #
412   set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
413   set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
414   if   (NOT DOXYGEN_FOUND)
415     message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
416   endif(NOT DOXYGEN_FOUND)
417 endif()                 
418 if (SOLVERLAB_WITH_TESTS)                                                                                  #
419   enable_testing ()
420   find_package (CPPUNIT REQUIRED)
421 endif()                 
422 find_package (XDR REQUIRED)
423                                     
424 # Enter subdirectories
425 add_subdirectory (CDMATH)
426 if(SOLVERLAB_WITH_COREFLOWS)
427   add_subdirectory (CoreFlows)
428 endif(SOLVERLAB_WITH_COREFLOWS)
429
430 # Configuration file
431 configure_file(
432     ${PROJECT_SOURCE_DIR}/env_SOLVERLAB.sh
433     ${CMAKE_INSTALL_PREFIX}/env_SOLVERLAB.sh
434     @ONLY
435 )
436
437