1 cmake_minimum_required (VERSION 3.1)
2 set(CMAKE_CXX_STANDARD 11)
3 set(CMAKE_CXX_STANDARD_REQUIRED ON)
7 set (CDMATH_VERSION_MAJOR 1)
8 set (CDMATH_VERSION_MINOR 0)
10 include(ExternalProject)#For PETSc, MED and MEDCoupling
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)
20 #Path to installed libraries
21 set (PETSC_DIR OFF CACHE STRING "PETSc library path" )
22 set (SLEPC_DIR OFF CACHE STRING "SLEPc library path" )
23 set (F2CBLASLAPACK_DIR OFF CACHE STRING "F2CBLASLAPACK library path" )
24 set (HDF5_ROOT OFF CACHE STRING "HDF5 library path" )#For the compilation of MED with a specific version of HDF5
25 set (MEDFILE_ROOT_DIR OFF CACHE STRING "MED library path" )
26 set (MEDCOUPLING_ROOT_DIR OFF CACHE STRING "MEDCoupling library path" )
28 #url of tarball librairies
29 set (DOWNLOAD_PETSC http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.13.2.tar.gz
30 CACHE STRING "PETSc tarball path/url" )
31 set (DOWNLOAD_SLEPC https://slepc.upv.es/download/distrib/slepc-3.13.2.tar.gz
32 CACHE STRING "SLEPC tarball path/url" )
33 set (DOWNLOAD_F2CBLASLAPACK ${CDMATH_SOURCE_DIR}/pre_requis/PETSc/f2cblaslapack-3.4.2.q4.tar.gz
34 CACHE STRING "F2CBLASLAPACK tarball path/url" )
35 set (DOWNLOAD_HDF5 ${CDMATH_SOURCE_DIR}/pre_requis/PETSc/hdf5-1.10.3.tar.gz
36 CACHE STRING "HDF5 tarball path/url" )
37 set (DOWNLOAD_MED http://files.salome-platform.org/Salome/other/med-4.0.0.tar.gz
38 CACHE STRING "MED tarball path/url")
39 set (DOWNLOAD_MEDCOUPLING http://files.salome-platform.org/Salome/other/medCoupling-9.4.0.tar.gz
40 CACHE STRING "MEDCoupling tarball path/url" )
44 set (BASE_DIR ${CDMATH_SOURCE_DIR}/base)
45 set (MESH_DIR ${CDMATH_SOURCE_DIR}/mesh)
46 set (LINEARSOLVER_DIR ${CDMATH_SOURCE_DIR}/linearsolver)
47 set (CDMATH_SWIG_DIR ${CDMATH_SOURCE_DIR}/swig)
48 set (CDMATH_POSTPRO_DIR ${CDMATH_SOURCE_DIR}/postprocessing)
50 set (TESTS_DIR ${CDMATH_SOURCE_DIR}/tests)
51 list (APPEND CMAKE_MODULE_PATH "${CDMATH_SOURCE_DIR}/cmake_files")
54 if (CDMATH_WITH_PETSC OR PETSC_DIR OR DEFINED ENV{PETSC_DIR} )
56 if ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR)
58 set(PETSC_DIR $ENV{PETSC_DIR})
59 message ( STATUS "Checking variable PETSC_DIR : " $ENV{PETSC_DIR} )
61 message ( STATUS "Checking variable PETSC_DIR : " ${PETSC_DIR} )
64 find_package (PETSc 3.4 REQUIRED)
67 message ( STATUS "PETSc found. Version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
68 set(PETSC_INSTALL ${PETSC_DIR})
70 #Define and search slepc variables
72 if ( DEFINED ENV{SLEPC_DIR} )
73 set(SLEPC_DIR $ENV{SLEPC_DIR})
74 else ( DEFINED ENV{SLEPC_DIR} )
75 set(SLEPC_DIR ${PETSC_DIR}/${PETSC_ARCH})
76 endif( DEFINED ENV{SLEPC_DIR} )
79 message ( STATUS "Checking variable SLEPC_DIR" )
80 if ( IS_DIRECTORY ${SLEPC_DIR}/include AND EXISTS ${SLEPC_DIR}/lib/libslepc.so)
81 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
82 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
83 message( STATUS "SLEPc found at ${SLEPC_DIR}" )
85 message( FATAL_ERROR "SLEPc not found at ${SLEPC_DIR}" )
88 #define hdf5 variables
89 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
90 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
91 set(HDF5_ROOT $ENV{HDF5_ROOT})
92 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
93 #HDF5 to be found in petsc external packages
94 set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
95 endif( DEFINED ENV{HDF5_ROOT} )
96 endif( NOT HDF5_ROOT )
97 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
98 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
99 else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
100 message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
102 if ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" ) #Case fedora/redhat system install
103 message ( STATUS "PETSC includes found in /usr/include/petsc/" )
104 message ( STATUS "PETSC library found in /usr/lib64" )
106 set(PETSC_INCLUDES /usr/include/petsc /usr/include/petsc/petsc/mpiuni)
107 set(PETSC_LIBRARIES /usr/lib64/libpetsc.so)
109 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
111 set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, petsc-devel (>= 3.4)") # This is not fully working yet.
112 set(PETSC_INSTALL ${PETSC_DIR})
114 #Define and search slepc variables
115 if ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
116 message( STATUS "SLEPc includes found in /usr/include/slepc/" )
117 message( STATUS "SLEPc library found in /usr/lib64/slepc/" )
119 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
120 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
121 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
122 else ( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
123 message( FATAL_ERROR "SLEPc not found in the system" )
124 endif( IS_DIRECTORY "/usr/include/slepc/" AND EXISTS "/usr/lib64/libslepc.so" )
126 #HDF5 to be found in the system
127 if ( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
128 find_package(HDF5 REQUIRED)
129 set(CPACK_DEBIAN_PACKAGE_DEPENDS "libhdf5-dev")
130 set(CPACK_RPM_PACKAGE_REQUIRES "hdf5-devel")
131 endif( NOT HDF5_ROOT AND NOT DEFINED ENV{HDF5_ROOT} )
134 #elseif ( IS_DIRECTORY "/usr/lib/petsc/include" AND EXISTS "/usr/lib/petsc/lib/libpetsc_real.so" ) #Case ubuntu/debian system install
135 # message ( STATUS "PETSc includes found in /usr/lib/petsc/include")
136 # message ( STATUS "PETSc library found in /usr/lib/petsc/lib/libpetsc_real.so")
137 # set(PETSC_DIR /usr/lib/petsc/)
138 # set(PETSC_INCLUDES ${PETSC_DIR}/include ${PETSC_DIR}/include/petsc/mpiuni)
139 # set(PETSC_LIBRARIES ${PETSC_DIR}/lib/libpetsc_real.so)
141 # find_package (PETSc 3.4 REQUIRED)
142 # petsc_get_version ()
143 # set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, petsc-dev (>= 3.4)") # This is not fully working yet.
145 # Define and search slepc variables
146 # if ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
147 # message( STATUS "SLEPc includes found in /usr/lib/slepc/include" )
148 # message( STATUS "SLEPc library found in /usr/lib/slepc/lib/libslepc_real.so" )
149 # set(SLEPC_DIR /usr/lib/slepc/)
150 # set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
151 # set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc_real.so)
152 # set (CPACK_DEBIAN_PACKAGE_REQUIRES "${CPACK_DEBIAN_PACKAGE_REQUIRES}, slepc-devel (>= 3.4)") # This is not fully working yet.
153 # else ( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
154 # message( FATAL_ERROR "SLEPc not found in the system" )
155 # endif( IS_DIRECTORY "/usr/lib/slepc/include" AND EXISTS "/usr/lib/slepc/lib/libslepc_real.so" )
157 #elseif ( IS_DIRECTORY "/usr/local/lib/python2.7/dist-packages/petsc") #Case ubuntu/debian system pip install
159 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
160 message (STATUS "PETSC not found in the system")
161 message (STATUS "PETSC will be downloaded and compiled from ${DOWNLOAD_PETSC}" )
162 message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
163 message (STATUS "HDF5 will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
165 #extract tarball name
166 string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
167 string(FIND "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
168 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
169 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
170 string(SUBSTRING ${DOWNLOAD_PETSC} ${start_tarball_name} ${tarball_name_length} PETSC_TARBALL_NAME)
172 set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install
173 set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
175 ExternalProject_Add (PETSc
176 URL ${DOWNLOAD_PETSC}
177 SOURCE_DIR ${PETSC_DIR}
179 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}
181 TEST_COMMAND make check
182 INSTALL_COMMAND make all
183 INSTALL_DIR ${PETSC_DIR}
184 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
185 LOG_DOWNLOAD TRUE # Wrap download in script to log output
186 LOG_UPDATE TRUE # Wrap update in script to log output
187 LOG_CONFIGURE TRUE # Wrap configure in script to log output
188 LOG_BUILD TRUE # Wrap build in script to log output
189 LOG_TEST TRUE # Wrap test in script to log output
190 LOG_INSTALL TRUE # Wrap install in script to log output
193 #file (STRINGS "${PETSC_DIR}/${PETSC_ARCH}/include/petscversion.h" vstrings REGEX "#define PETSC_VERSION_(RELEASE|MAJOR|MINOR|SUBMINOR|PATCH) ")
194 #message( STATUS "PETSc version is ${PETSC_VERSION_MAJOR}.${PETSC_VERSION_MINOR}.${PETSC_VERSION_SUBMINOR}" )
195 message( STATUS "PETSc, SLEPc and HDF5 will be installed at ${PETSC_INSTALL}")
197 string(SUBSTRING ${PETSC_TARBALL_NAME} 6 ${tarball_name_length} PETSC_VERSION)
198 #define slepc variables
199 set(SLEPC_DIR ${PETSC_INSTALL})
200 set(SLEPC_INCLUDES ${SLEPC_DIR}/include)
201 set(SLEPC_LIBRARIES ${SLEPC_DIR}/lib/libslepc.so)
203 #define hdf5 variables
204 if ( NOT HDF5_ROOT )#hdf5 is not defined in cmake arguments
205 if ( DEFINED ENV{HDF5_ROOT} )#hdf5 is defined in the environment
206 set(HDF5_ROOT $ENV{HDF5_ROOT})
207 else( DEFINED ENV{HDF5_ROOT} )#hdf5 is not defined in the environment
208 set(HDF5_ROOT ${PETSC_INSTALL})#HDF5 to be found in petsc installation
209 endif( DEFINED ENV{HDF5_ROOT} )
210 endif( NOT HDF5_ROOT )
211 set(HDF5_LIBRARY_DIR ${HDF5_ROOT}/lib)
212 set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
214 endif ( IS_DIRECTORY "/usr/include/petsc/" AND EXISTS "/usr/lib64/libpetsc.so" )
215 endif ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
217 if ( ${PETSC_VERSION} VERSION_GREATER 3.5 )
218 add_definitions(-DPETSC_VERSION_GREATER_3_5)
219 endif( ${PETSC_VERSION} VERSION_GREATER 3.5 )
220 string(REPLACE ";" ":" PETSC_INCLUDES_INSTALL "${PETSC_INCLUDES}")# use colon instead of semicolon in environment file env_CDMATH.sh
221 endif( CDMATH_WITH_PETSC OR PETSC_DIR OR DEFINED ENV{PETSC_DIR} )
224 if( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
226 if ( NOT MEDFILE_ROOT_DIR )
227 set(MEDFILE_ROOT_DIR $ENV{MEDFILE_ROOT_DIR} )
228 endif( NOT MEDFILE_ROOT_DIR )
230 find_package (MEDFile REQUIRED)
231 message (STATUS "MEDFile found in ${MEDFILE_ROOT_DIR}")
233 else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
234 #string(FIND "${HDF5_LIBRARIES}" "libhdf5.so" pos)
235 #string(SUBSTRING "${HDF5_LIBRARIES}" 0 ${pos} HDF5_LIBRARY_DIR)
237 message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
239 set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
240 set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/med) # Location of the final install
242 #extraction of the tarball archive name
243 string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
244 string(FIND "${DOWNLOAD_MED}" "/" start_tarball_name REVERSE )# last occurence of "/"
245 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
246 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
247 string(SUBSTRING ${DOWNLOAD_MED} ${start_tarball_name} ${tarball_name_length} MED_TARBALL_NAME)
249 ExternalProject_Add (MED
250 URL ${DOWNLOAD_MED} #location of med tarball
251 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MED_TARBALL_NAME}
253 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
255 INSTALL_COMMAND make install
256 INSTALL_DIR ${MEDFILE_ROOT_DIR}
257 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
258 LOG_DOWNLOAD TRUE # Wrap download in script to log output
259 LOG_UPDATE TRUE # Wrap update in script to log output
260 LOG_CONFIGURE TRUE # Wrap configure in script to log output
261 LOG_BUILD TRUE # Wrap build in script to log output
262 LOG_TEST TRUE # Wrap test in script to log output
263 LOG_INSTALL TRUE # Wrap install in script to log output
266 set(MEDFILE_INCLUDE_DIRS ${MEDFILE_ROOT_DIR}/include)# Nécessaire pour le medloader et les sous-dossiers mesh, et IJKMesh
267 set(MEDFILE_C_LIBRARIES med medC)# Nécessaire pour le medloader
269 endif( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
271 add_library(med SHARED IMPORTED)
272 set_property(TARGET med PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmed.so)
273 add_library(medC SHARED IMPORTED)
274 set_property(TARGET medC PROPERTY IMPORTED_LOCATION ${MEDFILE_ROOT_DIR}/lib/libmedC.so)
277 if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
279 if( NOT MEDCOUPLING_ROOT_DIR )
280 set(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} )
281 endif( NOT MEDCOUPLING_ROOT_DIR )
283 message (STATUS "Seeking MEDCoupling library in ${MEDCOUPLING_ROOT_DIR}")
285 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)
286 message (FATAL_ERROR "MEDCoupling library not found in ${MEDCOUPLING_ROOT_DIR}")
287 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)
288 message (STATUS "MEDCoupling library found in ${MEDCOUPLING_ROOT_DIR}")
289 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)
291 else( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
292 message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
293 set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
294 SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
296 #extraction of the tarball archive name
297 string(LENGTH "${DOWNLOAD_MEDCOUPLING}" tarball_url_length)#length of the tarball
298 string(FIND "${DOWNLOAD_MEDCOUPLING}" "/" start_tarball_name REVERSE )# last occurence of "/"
299 MATH(EXPR start_tarball_name "${start_tarball_name}+1")#start after the occurence of "/"
300 MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
301 string(SUBSTRING ${DOWNLOAD_MEDCOUPLING} ${start_tarball_name} ${tarball_name_length} MEDCOUPLING_TARBALL_NAME)
302 string(SUBSTRING ${MEDCOUPLING_TARBALL_NAME} 12 ${tarball_name_length} MEDCOUPLING_VERSION_NAME)
304 message(STATUS "MEDCoupling version is ${MEDCOUPLING_VERSION_NAME}")
306 ExternalProject_Add (MEDCoupling
307 URL ${DOWNLOAD_MEDCOUPLING} #location of medcoupling tarball
308 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${MEDCOUPLING_TARBALL_NAME}
309 # BUILD_IN_SOURCE FALSE
310 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}
312 INSTALL_COMMAND make install
313 INSTALL_DIR ${MEDCOUPLING_ROOT_DIR}
314 STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis
315 LOG_DOWNLOAD TRUE # Wrap download in script to log output
316 LOG_UPDATE TRUE # Wrap update in script to log output
317 LOG_CONFIGURE TRUE # Wrap configure in script to log output
318 LOG_BUILD TRUE # Wrap build in script to log output
319 LOG_TEST TRUE # Wrap test in script to log output
320 LOG_INSTALL TRUE # Wrap install in script to log output
323 endif( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR} )
325 set(MEDCOUPLING_INCLUDE_DIR ${MEDCOUPLING_ROOT_DIR}/include)
326 set(MEDCOUPLING_LIBRARIES ${MEDCOUPLING_ROOT_DIR}/lib )#for environment file env_CDMATH.sh
328 add_library(medloader SHARED IMPORTED )
329 set_property(TARGET medloader PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedloader.so)
330 add_library(medcoupling SHARED IMPORTED )
331 set_property(TARGET medcoupling PROPERTY IMPORTED_LOCATION ${MEDCOUPLING_ROOT_DIR}/lib/libmedcoupling.so)
333 if (TARGET MED AND TARGET PETSc)
334 ExternalProject_Add_StepDependencies( MED build PETSc )#PETSc doit être compilé avant MED car c'est PETSc qui compile HDF5
335 endif(TARGET MED AND TARGET PETSc)
337 if (TARGET MED AND TARGET MEDCoupling)
338 ExternalProject_Add_StepDependencies( MEDCoupling build MED )#MED doit être compilé avant MEDCoupling
339 endif(TARGET MED AND TARGET MEDCoupling)
341 if (TARGET PETSc AND TARGET MEDCoupling)
342 ExternalProject_Add_StepDependencies( MEDCoupling build PETSc )#PETSc doit être compilé avant MEDCoupling (car il contient hdf5)
343 endif(TARGET PETSc AND TARGET MEDCoupling)
345 # Paraview variables for env_CDMATH.sh
346 if (CDMATH_WITH_PYTHON AND CDMATH_WITH_POSTPRO)
348 #find_package(ParaView)
350 #extraction of the paraview version"
351 IF ( EXISTS "/usr/include/paraview/vtkPVConfig.h" )
352 file(STRINGS /usr/include/paraview/vtkPVConfig.h vtkConfig)
353 ELSE ( EXISTS "/usr/include/paraview/vtkPVConfig.h" )
354 message(WARNING "Could not find ParaView configuration file vtkPVConfig.h. Postprocessing won't work")
355 ENDIF( EXISTS "/usr/include/paraview/vtkPVConfig.h" )
357 FOREACH(line ${vtkConfig})
358 string(FIND "${line}" "#define PARAVIEW_VERSION_FULL " pos)
359 IF(NOT ${pos} EQUAL -1)
360 string(LENGTH ${line} line_length)#length of the tarball
361 MATH(EXPR start_pv_version "${line_length}-6")#line ends with "x.y.z", that counts for 7 characters
362 string(SUBSTRING ${line} ${start_pv_version} 5 PV_VERSION)
364 ENDIF(NOT ${pos} EQUAL -1)
365 ENDFOREACH(line vtkConfig)
367 message(STATUS "ParaView version is ${PV_VERSION}" )
368 IF ( ${PV_VERSION} VERSION_GREATER 5.6.0 OR ${PV_VERSION} VERSION_EQUAL 5.6.0 )#Use python 3, use VERSION_GREATER_EQUAL if cmake >=3.7
370 ELSE ( ${PV_VERSION} VERSION_GREATER 5.6.0 OR ${PV_VERSION} VERSION_EQUAL 5.6.0 )#Use python 2
372 ENDIF( ${PV_VERSION} VERSION_GREATER 5.6.0 OR ${PV_VERSION} VERSION_EQUAL 5.6.0 )
374 set (PV_LIB_DIR /usr/lib/python${PYTHON2OR3}.7/dist-packages/paraview/:/usr/lib64/paraview/:/usr/lib/paraview/)
375 set (PV_PYTHON_DIR /usr/lib/python${PYTHON2OR3}.7/dist-packages/paraview/:/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)
377 endif(CDMATH_WITH_PYTHON AND CDMATH_WITH_POSTPRO)
380 if (CDMATH_WITH_PYTHON)
381 IF (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
382 find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
383 SET(PYTHON_EXECUTABLE ${Python_EXECUTABLE})
384 ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
385 find_package(PythonInterp ${PYTHON2OR3} REQUIRED )
386 find_package(PythonLibs ${PYTHON2OR3} REQUIRED )
387 set(Python_LIBRARIES ${PYTHON_LIBRARIES})
388 set(Python_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
389 set(Python_VERSION ${PYTHON_VERSION_STRING})
390 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
392 message(STATUS "Python version is ${Python_VERSION}")
394 find_package (SWIG 3.0 REQUIRED)
395 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, python-dev, python-numpy, swig")
396 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, python-devel, numpy, swig")
397 add_subdirectory (${CDMATH_SWIG_DIR})
398 endif(CDMATH_WITH_PYTHON)
400 find_package (XDR REQUIRED)
401 add_subdirectory (${BASE_DIR})
402 add_subdirectory (${MESH_DIR})
404 if (CDMATH_WITH_PETSC)
405 add_subdirectory (${LINEARSOLVER_DIR})
406 endif(CDMATH_WITH_PETSC)
409 if (CDMATH_WITH_DOCUMENTATION)
410 find_package (Doxygen)
411 set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
412 set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
413 if (NOT DOXYGEN_FOUND)
414 message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
415 endif(NOT DOXYGEN_FOUND)
416 configure_file (Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
417 add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile
418 SOURCES ${PROJECT_BINARY_DIR}/Doxyfile)
419 if ( IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html)
420 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION doc/cdmath-dev-doc)
421 endif( IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html)
422 endif(CDMATH_WITH_DOCUMENTATION)
424 #Debug option : todo = sort flags
425 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg -fprofile-arcs -ftest-coverage -lgcov")
426 if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
427 SET(CMAKE_EXE_LINKER_FLAGS "-pg -fprofile-arcs -ftest-coverage -lgcov")
428 SET(CMAKE_CXX_FLAGS "-fprofile-arcs -ftest-coverage")
429 endif(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
432 if (CDMATH_WITH_TESTS)
433 find_package (CPPUNIT REQUIRED)
435 add_subdirectory (${TESTS_DIR})#contains c++ and python tests
436 endif(CDMATH_WITH_TESTS)
439 if (CDMATH_WITH_PACKAGE)
440 include (CPackLists.txt)
441 endif(CDMATH_WITH_PACKAGE)
444 if (CDMATH_WITH_PYTHON AND CDMATH_WITH_POSTPRO)
445 add_subdirectory (postprocessing)
450 ${PROJECT_SOURCE_DIR}/env_CDMATH.sh
451 ${CMAKE_INSTALL_PREFIX}/env_CDMATH.sh