Salome HOME
b330341162554aaef93916bdf02e1025eb25bd4b
[tools/solverlab.git] / CDMATH / 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 (CDMATH)
7 set (CDMATH_VERSION_MAJOR 1)
8 set (CDMATH_VERSION_MINOR 0)
9
10 include(ExternalProject)#For PETSc, MED and MEDCoupling
11
12 # Project options
13 option (CDMATH_WITH_PETSC "Compile CDMATH with PETSc linking." OFF)
14 option (CDMATH_WITH_DOCUMENTATION "Generate documentation with doxygen." OFF)
15 option (CDMATH_WITH_PYTHON "Compile Python interface for CDMATH." OFF)
16 option (CDMATH_WITH_POSTPRO "Install postprocessing Python modules." OFF)
17 option (CDMATH_WITH_PACKAGE "Generate RPM, Debian and tarball packages." OFF)
18 option (CDMATH_WITH_TESTS "Compile unit testing." OFF)
19 set (PETSC_DIR            OFF CACHE STRING "PETSc library path" )
20 set (HDF5_ROOT        OFF CACHE STRING "HDF5 library path" )#For the compilation of MED with a specific version
21 set (MEDFILE_ROOT_DIR     OFF CACHE STRING "MED library path" )
22 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
23 set (DOWNLOAD_MED         ${CDMATH_SOURCE_DIR}/pre_requis/med-4.0.0.tar.gz               CACHE STRING "MED tarball path/url")
24 set (DOWNLOAD_MEDCOUPLING ${CDMATH_SOURCE_DIR}/pre_requis/medCoupling-9.4.0.tar.gz       CACHE STRING "MEDCoupling tarball path/url" )
25 set (DOWNLOAD_PETSC       ${CDMATH_SOURCE_DIR}/pre_requis/PETSc/petsc-lite-3.13.1.tar.gz CACHE STRING "PETSc tarball path/url" )
26 set (DOWNLOAD_HDF5        ${CDMATH_SOURCE_DIR}/pre_requis/PETSc/hdf5-1.10.3.tar.gz       CACHE STRING "HDF5 tarball path/url" )
27 set (DOWNLOAD_SLEPC       ${CDMATH_SOURCE_DIR}/pre_requis/PETSc/slepc-3.13.1.tar.gz      CACHE STRING "SLEPC tarball path/url" )
28
29
30 # Base directories
31 set (BASE_DIR ${CDMATH_SOURCE_DIR}/base)
32 set (MESH_DIR ${CDMATH_SOURCE_DIR}/mesh)
33 set (LINEARSOLVER_DIR ${CDMATH_SOURCE_DIR}/linearsolver)
34 set (CDMATH_SWIG_DIR ${CDMATH_SOURCE_DIR}/swig)
35 set (CDMATH_POSTPRO_DIR ${CDMATH_SOURCE_DIR}/postprocessing)
36 set (PRE_REQUIS_DIR ${CDMATH_SOURCE_DIR}/pre_requis)
37
38 set (TESTS_DIR ${CDMATH_SOURCE_DIR}/tests)
39 list (APPEND CMAKE_MODULE_PATH "${CDMATH_SOURCE_DIR}/cmake_files")
40
41 # PETSc and HDF5
42 if (CDMATH_WITH_PETSC OR PETSC_DIR OR DOWNLOAD_PETSC OR DEFINED ENV{PETSC_DIR} )
43     message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
44
45   if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
46     if(NOT PETSC_DIR)
47       set(PETSC_DIR $ENV{PETSC_DIR})
48     endif(NOT PETSC_DIR)
49
50     find_package (PETSc 3.4 REQUIRED)
51     petsc_get_version ()
52     string(REPLACE ";" ":"  PETSC_INCLUDES_PATH "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_CDMATH.sh
53     message ( STATUS "PETSC found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
54
55     #Define and search slepc variables
56     set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
57     message ( STATUS "Checking variable SLEPC_DIR" )
58     if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
59       set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
60       set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
61       message( STATUS "SLEPC found at ${SLEPC_DIR}" )
62     else()
63       message( FATAL_ERROR "SLEPC not found at ${SLEPC_DIR}" )
64     endif()
65
66     #HDF5 to be found in petsc external packages
67     if( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
68       set(HDF5_ROOT $ENV{PETSC_DIR}/$ENV{PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
69     endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
70
71   else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
72     message ( STATUS "PETSC_DIR not set, searching petsc in the system" )
73
74     if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" AND IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )  #Case fedora/redhat system install
75       message ( STATUS "PETSC includes found in /usr/include/petsc/" )
76       message ( STATUS "PETSC library found in /usr/lib64" )
77       set(PETSC_DIR /usr/)
78       set(PETSC_INCLUDES  /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
79       set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
80
81       #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
82       petsc_get_version ()
83       set (CPACK_RPM_PACKAGE_REQUIRES   "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet. 
84
85       message( STATUS "SLEPC includes found in /usr/include/slepc/" )
86       message( STATUS "SLEPC library found in /usr/lib64/slepc/" )
87       set(SLEPC_DIR /usr/)
88       set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
89       set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
90
91       #HDF5 to be found in the system
92       set (CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
93       set (CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
94
95     #elseif ( IS_DIRECTORY "/usr/lib/petsc/" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" AND IS_DIRECTORY "/usr/lib/slepc/" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so") #Case ubuntu/debian system install
96     #  message ( STATUS "PETSC found in /usr/lib/petsc/ and exists /usr/lib/petsc/lib/libpetsc_real.so")
97     #  set(PETSC_DIR /usr/lib/petsc/)
98     #  set(PETSC_INCLUDES  ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
99     #  set(PETSC_LIBRARIES ${PETSC_DIR}/libpetsc_real.so)
100
101     #  find_package (PETSc 3.4 REQUIRED)
102     #  petsc_get_version ()
103     #  set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev   (>= 3.4)") # This is not fully working yet. 
104
105     #  message ( STATUS "SLEPC found in /usr/lib/slepc/ and exists /usr/lib/slepc/lib/libslepc_real.so")
106     #  set(SLEPC_DIR /usr/lib/slepc/)
107     #  set(SLEPC_INCLUDES  ${SLEPC_DIR}/include )
108     #  set(SLEPC_LIBRARIES ${SLEPC_DIR}/libslepc_real.so)
109
110     #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
111
112     else ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" AND IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )  # No petsc in system, do compile petsc along with slepc as an external package
113       message (STATUS "PETSC not found in the system, PETSC (with SLEPC and HDF5) will be downloaded and compiled" )
114       set(PETSC_SRC ${CDMATH_SOURCE_DIR}/pre_requis/PETSc)
115       set(PETSC_DIR ${CMAKE_INSTALL_PREFIX}/share/petsc_install) # Location of the final install 
116       set(PETSC_INCLUDES  ${PETSC_DIR}/include/  ${PETSC_DIR}/include/petsc/mpiuni)
117       set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc.so) 
118
119       ExternalProject_Add (PETSc
120       URL               ${DOWNLOAD_PETSC}   
121       SOURCE_DIR        ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/PETSc
122       BUILD_IN_SOURCE   TRUE
123       CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${PETSC_DIR} --with-debugging=0 --with-mpi=0 --download-f2cblaslapack=${PETSC_SRC}/f2cblaslapack-3.4.2.q4.tar.gz --with-fc=0 --download-slepc=${DOWNLOAD_SLEPC} --download-hdf5=${DOWNLOAD_HDF5}
124       BUILD_COMMAND     make all
125       TEST_COMMAND      make check
126       INSTALL_COMMAND   make install
127       INSTALL_DIR       ${PETSC_DIR}
128       STAMP_DIR         ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
129       LOG_DOWNLOAD      TRUE           # Wrap download in script to log output
130       LOG_UPDATE        TRUE           # Wrap update in script to log output
131       LOG_CONFIGURE     TRUE           # Wrap configure in script to log output
132       LOG_BUILD         TRUE           # Wrap build in script to log output
133       LOG_TEST          TRUE           # Wrap test in script to log output
134       LOG_INSTALL       TRUE           # Wrap install in script to log output
135        )
136
137       petsc_get_version ()
138       string(REPLACE ";" ":"  PETSC_INCLUDES_PATH "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_CDMATH.sh
139       message ( STATUS "PETSC found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
140
141       #define slepc variables
142       set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
143       set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
144       set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
145
146       #HDF5 to be found in petsc external packages
147       if   ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
148         set(HDF5_ROOT $ENV{PETSC_DIR}/$ENV{PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
149       endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
150
151     endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" AND IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so"  )
152   endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
153
154   if   ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
155     add_definitions(-DPETSC_VERSION_GREATER_3_5)
156   endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
157
158 endif( CDMATH_WITH_PETSC OR PETSC_DIR  OR DOWNLOAD_PETSC OR DEFINED ENV{PETSC_DIR} )
159
160 #HDF5
161 if   ( NOT HDF5_ROOT AND DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
162   set(HDF5_ROOT $ENV{HDF5_ROOT})
163 endif( NOT HDF5_ROOT AND DEFINED ENV{HDF5_ROOT} )
164
165 #MED
166 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
167
168   if   ( NOT MEDFILE_ROOT_DIR )
169     set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
170   endif( NOT MEDFILE_ROOT_DIR )
171
172   message (STATUS "Seeking MEDFile library in ${MEDFILE_ROOT_DIR}")
173   find_package (MEDFile REQUIRED)
174
175 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
176   find_package (HDF5 REQUIRED)
177   add_library(hdf5   SHARED IMPORTED)
178   set_property(TARGET hdf5 PROPERTY IMPORTED_LOCATION ${HDF5_ROOT}/lib/libhdf5.so)
179
180   string(FIND "${HDF5_LIBRARIES}" "libhdf5.so" pos)
181   string(SUBSTRING "${HDF5_LIBRARIES}" 0 ${pos} HDF5_LIBRARY_DIR)
182   
183   set(MACHINE PCLINUX)
184   set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
185   set(MEDFILE_ROOT_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/med_install) # Location of the final install
186   
187   #extraction of the tarball archive name
188   string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
189   string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
190   MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
191   MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
192   string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
193
194   message(STATUS "MED tarball name is ${MED_TARBALL_NAME}")
195
196   ExternalProject_Add (MED
197         URL               ${DOWNLOAD_MED}  #location of med tarball
198         SOURCE_DIR        ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
199         BUILD_IN_SOURCE   TRUE
200         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 
201         DEPENDS           hdf5
202         BUILD_COMMAND     make
203         INSTALL_COMMAND   make install
204         INSTALL_DIR       ${MEDFILE_ROOT_DIR}
205         STAMP_DIR         ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
206         LOG_DOWNLOAD      TRUE           # Wrap download in script to log output
207         LOG_UPDATE        TRUE           # Wrap update in script to log output
208         LOG_CONFIGURE     TRUE           # Wrap configure in script to log output
209         LOG_BUILD         TRUE           # Wrap build in script to log output
210         LOG_TEST          TRUE           # Wrap test in script to log output
211         LOG_INSTALL       TRUE           # Wrap install in script to log output
212   )
213   
214   set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
215   set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
216 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
217
218 #For the environment file
219 set(MEDFILE_C_LIBRARIES_PATH ${MEDFILE_ROOT_DIR}/lib/libmed.so ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
220 string(REPLACE ";" ":"  MEDFILE_C_LIBRARIES_PATH "${MEDFILE_C_LIBRARIES_PATH}")# use colon instead of semicolon in environment file env_CDMATH.sh
221
222 add_library(med   SHARED IMPORTED)
223 set_property(TARGET med  PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
224 add_library(medC   SHARED IMPORTED)
225 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
226
227 #MEDCoupling
228 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
229
230   if( NOT MEDCOUPLING_ROOT_DIR )
231     set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
232   endif( NOT MEDCOUPLING_ROOT_DIR )
233
234   message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
235
236   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)
237     message (FATAL_ERROR "MEDCoupling library not found in ${MEDCOUPLING_ROOT_DIR}")
238   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)
239     message (STATUS "MEDCoupling library found in ${MEDCOUPLING_ROOT_DIR}")
240   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)
241
242 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
243
244   set(MEDCOUPLING_ROOT_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/medCoupling_install) # Location of the final install
245
246   #extraction of the tarball archive name
247   string(LENGTH ${DOWNLOAD_MEDCOUPLING} tarball_url_length)#length of the tarball
248   string(FIND   ${DOWNLOAD_MEDCOUPLING} "/" 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_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
252   string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCOUPLING_VERSION_NAME)
253
254   message(STATUS "MEDCOUPLING tarball name is ${MEDCOUPLING_TARBALL_NAME}")
255   message(STATUS "MEDCOUPLING version is ${MEDCOUPLING_VERSION_NAME}")
256
257   SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
258
259   ExternalProject_Add (MEDCoupling
260         URL               ${DOWNLOAD_MEDCOUPLING}  #location of medcoupling tarball
261         SOURCE_DIR        ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
262 #        BUILD_IN_SOURCE   FALSE
263         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}
264         DEPENDS           med
265         BUILD_COMMAND     make
266         INSTALL_COMMAND   make install
267         INSTALL_DIR       ${MEDCOUPLING_ROOT_DIR}
268         STAMP_DIR         ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
269         LOG_DOWNLOAD      TRUE           # Wrap download in script to log output
270         LOG_UPDATE        TRUE           # Wrap update in script to log output
271         LOG_CONFIGURE     TRUE           # Wrap configure in script to log output
272         LOG_BUILD         TRUE           # Wrap build in script to log output
273         LOG_TEST          TRUE           # Wrap test in script to log output
274         LOG_INSTALL       TRUE           # Wrap install in script to log output
275   )
276 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
277
278 set(MEDCOUPLING_INCLUDE_DIR  ${MEDCOUPLING_ROOT_DIR}/include)
279
280 #For the environment file
281 set(MEDCOUPLING_LIBRARIES_PATH    ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
282 string(REPLACE ";" ":"  MEDCOUPLING_LIBRARIES_PATH "${MEDCOUPLING_LIBRARIES_PATH}")# use colon instead of semicolon in environment file env_CDMATH.sh
283
284 add_library(medloader   SHARED IMPORTED )
285 set_property(TARGET medloader   PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
286 add_library(medcoupling SHARED IMPORTED )
287 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
288
289 if(DEFINED MED AND DEFINED PETSc)
290   ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
291 endif(DEFINED MED AND DEFINED PETSc)
292
293 if(DEFINED MED AND DEFINED MEDCoupling)
294   ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
295 endif(DEFINED MED AND DEFINED MEDCoupling)
296  
297 # Paraview variables for env_CDMATH.sh
298 if (CDMATH_WITH_PYTHON AND CDMATH_WITH_POSTPRO)
299   set (PV_LIB_DIR /usr/lib/python2.7/dist-packages/:/usr/lib64/paraview/)
300   set (PV_PYTHON_DIR /usr/lib/python2.7/dist-packages:/usr/lib64/paraview/site-packages/:/usr/lib64/paraview/site-packages/paraview/:/usr/lib64/paraview/site-packages/vtk/:/usr/lib64/paraview/python2.7/site-packages/:/usr/lib64/paraview/python2.7/site-packages/paraview/:/usr/lib64/paraview/python2.7/site-packages/vtkmodules:/usr/lib64/paraview/python3.7/site-packages/:/usr/lib64/paraview/python3.7/site-packages/paraview/:/usr/lib64/paraview/python3.7/site-packages/vtkmodules)
301 endif ()
302
303 # Swig interface
304 if (CDMATH_WITH_PYTHON)
305    find_package (PYTHON REQUIRED)
306    find_package (SWIG 3.0 REQUIRED)
307    set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, python-dev, python-numpy, swig")
308    set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, python-devel, numpy, swig")
309    add_subdirectory (${CDMATH_SWIG_DIR})
310 endif ()
311
312 find_package (XDR REQUIRED)
313 add_subdirectory (${BASE_DIR})
314 add_subdirectory (${MESH_DIR})
315
316 if (CDMATH_WITH_PETSC)
317     add_subdirectory (${LINEARSOLVER_DIR})
318 endif ()
319
320 # Documentation
321 if (CDMATH_WITH_DOCUMENTATION)
322   find_package (Doxygen)
323   set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
324   set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
325   if (NOT DOXYGEN_FOUND)
326     message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
327   endif (NOT DOXYGEN_FOUND)
328   configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile  @ONLY IMMEDIATE)
329   add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile
330                                                           SOURCES ${PROJECT_BINARY_DIR}/Doxyfile)
331   if ( IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html)
332     install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc/cdmath)
333   endif()
334 endif ()
335
336 # Tests
337 if (CDMATH_WITH_TESTS)
338   set (CMAKE_EXE_LINKER_FLAGS "-pg -fprofile-arcs -ftest-coverage -lgcov")
339   enable_testing ()
340   find_package (CPPUNIT REQUIRED)
341 endif ()
342 if (CDMATH_WITH_TESTS AND CDMATH_WITH_PYTHON)
343   enable_testing ()
344   add_subdirectory (${TESTS_DIR})#contains c++ and python tests
345 endif()
346
347 # Packaging
348 if (CDMATH_WITH_PACKAGE)
349   include (CPackLists.txt)
350 endif ()
351
352 # Postprocessing
353 if (CDMATH_WITH_PYTHON AND CDMATH_WITH_POSTPRO)
354   add_subdirectory (postprocessing)
355 endif ()
356
357 # Configuration file
358 configure_file(
359     ${PROJECT_SOURCE_DIR}/env_CDMATH.sh
360     ${CMAKE_INSTALL_PREFIX}/env_CDMATH.sh
361     @ONLY
362 )
363                                                                                                             
364