Salome HOME
Added a function Field::getFieldValues
[tools/solverlab.git] / CMakeLists.txt
index d05daeed544678b65b1c7a72f76f58ff38c0e090..15b5ec9a2d9cdf4473d312143c36fad4ad534fca 100644 (file)
@@ -25,9 +25,9 @@ set (PYTHON_ROOT_DIR      OFF CACHE STRING "Python library path" )
 set (PARAVIEW_ROOT_DIR    OFF CACHE STRING "PARAVIEW library path" )
 
 #url of tarball librairies
-set (DOWNLOAD_PETSC         http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-lite-3.14.2.tar.gz 
+set (DOWNLOAD_PETSC         http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.15.0.tar.gz 
      CACHE STRING           "PETSc tarball path/url" )
-set (DOWNLOAD_SLEPC         https://slepc.upv.es/download/distrib/slepc-3.14.1.tar.gz
+set (DOWNLOAD_SLEPC         https://slepc.upv.es/download/distrib/slepc-3.15.0.tar.gz
      CACHE STRING           "SLEPC tarball path/url" )
 set (DOWNLOAD_F2CBLASLAPACK https://www.mcs.anl.gov/petsc/mirror/externalpackages/f2cblaslapack-3.4.2.q4.tar.gz
      CACHE STRING           "F2CBLASLAPACK tarball path/url" )
@@ -48,16 +48,39 @@ include(ExternalProject)#For PETSc, MED and MEDCoupling
 
 list (APPEND CMAKE_MODULE_PATH "${SOLVERLAB_SOURCE_DIR}/cmake_files")
 
-if( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
+
+#####################
+# Detection of MPI  #
+#####################
+if   ( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
+  if   ( DEFINED  ENV{MPI_ROOT_DIR} )
+    set(MPI_HOME $ENV{MPI_ROOT_DIR})
+  else ( DEFINED  ENV{MPI_ROOT_DIR} )
+    set(MPI_HOME    ${MPI_ROOT_DIR})
+  endif( DEFINED  ENV{MPI_ROOT_DIR} )
+endif( DEFINED ENV{MPI_ROOT_DIR} OR DEFINED MPI_ROOT_DIR )
+
+if(    DEFINED ENV{MPI_HOME} OR MPI_HOME )
   set(SOLVERLAB_WITH_MPI ON)
   find_package(MPI)
   if(   ${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
     set ( MPI_LIBRARY ${MPI_HOME}/lib/libmpi.so )
   endif(${MPI_LIBRARY} STREQUAL "MPI_LIBRARY-NOTFOUND")
   message ( STATUS "MPI executable is ${MPIEXEC}" )
-else( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
+else(  DEFINED ENV{MPI_HOME} OR MPI_HOME )
   set(SOLVERLAB_WITH_MPI OFF)
-endif( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
+endif( DEFINED ENV{MPI_HOME} OR MPI_HOME )
+
+############################
+# Definition of HDF5_HOME  #
+############################
+if   ( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
+  if   ( DEFINED  ENV{HDF5_ROOT_DIR} )
+    set(HDF5_ROOT $ENV{HDF5_ROOT_DIR})
+  else ( DEFINED  ENV{HDF5_ROOT_DIR} )
+    set(HDF5_ROOT    ${HDF5_ROOT_DIR})
+  endif( DEFINED  ENV{HDF5_ROOT_DIR} )
+endif( DEFINED ENV{HDF5_ROOT_DIR} OR DEFINED HDF5_ROOT_DIR )
 
 ######################################################
 # Detection or compilation of PETSc+SLEPc+HDF5       #
@@ -106,8 +129,13 @@ endif( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
         set(HDF5_ROOT ${PETSC_DIR}/${PETSC_ARCH})# define hint for hdf5/med installation in petsc external packages
       endif( DEFINED ENV{HDF5_ROOT} )
     endif( NOT HDF5_ROOT )
-    set(HDF5_LIBRARY_DIR  ${HDF5_ROOT}/lib)
-    set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
+
+    find_package(HDF5 COMPONENTS CXX HL)
+    if ( NOT HDF5_FOUND)
+      set(HDF5_LIBRARY_DIR  ${HDF5_ROOT}/lib)
+      set(HDF5_INCLUDE_DIRS ${HDF5_ROOT}/include)
+    endif( NOT HDF5_FOUND)
+  
   else ( DEFINED ENV{PETSC_DIR} OR PETSC_DIR )
     message ( STATUS "PETSC_DIR not set, searching PETSc and SLEPc in the system" )
 
@@ -173,7 +201,7 @@ endif( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
       message (STATUS "SLEPC will be downloaded and compiled from ${DOWNLOAD_SLEPC}" )
       message (STATUS "HDF5  will be downloaded and compiled from ${DOWNLOAD_HDF5}" )
 
-      #extract tarball name
+      #extract petsc tarball name
       string(LENGTH "${DOWNLOAD_PETSC}" tarball_url_length)#length of the tarball
       string(FIND   "${DOWNLOAD_PETSC}" "/" start_tarball_name REVERSE )# last occurence of "/"
       MATH(EXPR start_tarball_name  "${start_tarball_name}+1")#start after the occurence of "/"
@@ -182,7 +210,7 @@ endif( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
 
       set(PETSC_DIR ${CMAKE_CURRENT_BINARY_DIR}/pre_requis/${PETSC_TARBALL_NAME}) # Location of the final install 
       set(PETSC_ARCH arch-linux-c-opt)
-      set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/share/petsc)#folder to copy petsc libraries and include files
+      set(PETSC_INSTALL ${CMAKE_INSTALL_PREFIX}/lib/petsc)#folder to copy petsc libraries and include files
 
       ExternalProject_Add (PETSc
       URL               ${DOWNLOAD_PETSC}   
@@ -213,10 +241,24 @@ endif( DEFINED ENV{MPI_HOME} OR DEFINED MPI_HOME )
       set(PETSC_INCLUDES  ${PETSC_DIR}/${PETSC_ARCH}/include ${PETSC_DIR}/include)
       set(PETSC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/lib/libpetsc.so)
 
+      #extract slepc tarball name 
+      string(LENGTH "${DOWNLOAD_SLEPC}" tarball_url_length)#length of the tarball
+      string(FIND   "${DOWNLOAD_SLEPC}" "/" start_tarball_name REVERSE )# last occurence of "/"
+      MATH(EXPR start_tarball_name  "${start_tarball_name}+1")#start after the occurence of "/"
+      MATH(EXPR tarball_name_length "${tarball_url_length}-${start_tarball_name}-7")#name ends before .tar.gz that counts for 7 characters
+      string(SUBSTRING ${DOWNLOAD_SLEPC} ${start_tarball_name} ${tarball_name_length} SLEPC_TARBALL_NAME)
+
+      #extract slepc version
+      string(LENGTH "${SLEPC_TARBALL_NAME}" tarball_name_length)#length of the tarball
+      string(FIND   "${SLEPC_TARBALL_NAME}" "-" start_version_name REVERSE )# last occurence of "-"
+      MATH(EXPR start_version_name  "${start_version_name}+1")#start after the occurence of "/"
+      string(SUBSTRING ${SLEPC_TARBALL_NAME} ${start_version_name} ${tarball_name_length} SLEPC_VERSION)
+      message( STATUS "SLEPc version ${SLEPC_VERSION}  will be installed" )
+
       #define slepc variables
       set(SLEPC_DIR ${PETSC_INSTALL})
-      set(SLEPC_INCLUDES ${SLEPC_DIR}/include  ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.14.1/include )
-      set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/slepc-3.14.1/installed-arch-linux2-c-opt/lib/libslepc.so)
+      set(SLEPC_INCLUDES ${SLEPC_DIR}/include  ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/include )
+      set(SLEPC_LIBRARIES ${PETSC_DIR}/${PETSC_ARCH}/externalpackages/${SLEPC_TARBALL_NAME}/installed-arch-linux2-c-opt/lib/libslepc.so)
       message( STATUS "SLEPc includes ${SLEPC_INCLUDES}")
 
       #define hdf5 variables
@@ -266,7 +308,7 @@ else( MEDFILE_ROOT_DIR OR DEFINED ENV{MEDFILE_ROOT_DIR})
   message(STATUS "MED will be downloaded and installed from ${DOWNLOAD_MED}")
   set(MACHINE PCLINUX)
   set(MEDFILE_DEFINITIONS "-D${MACHINE} -DMEDFILE_INSTALL_DOC=OFF")#Comment ne pas compiler la doc ?
-  set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/med) # Location of the final install
+  set(MEDFILE_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/med) # Location of the final install
   
   #extraction of the tarball archive name
   string(LENGTH "${DOWNLOAD_MED}" tarball_url_length)#length of the name of the tarball
@@ -322,7 +364,7 @@ if( MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
 
 else( DEFINED MEDCOUPLING_ROOT_DIR OR DEFINED ENV{MEDCOUPLING_ROOT_DIR})
   message(STATUS "MEDCoupling will be downloaded and installed from ${DOWNLOAD_MEDCOUPLING}")
-  set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/share/medcoupling) # Location of the final install
+  set(MEDCOUPLING_ROOT_DIR ${CMAKE_INSTALL_PREFIX}/lib/medcoupling) # Location of the final install
   SET(ENV{HDF5_ROOT} ${HDF5_ROOT})#MEDCoupling install process seems to require an environment variable
 
   #extraction of the tarball archive name
@@ -444,13 +486,13 @@ ELSE ( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6
 ENDIF( ${PARAVIEW_VERSION} STRGREATER "5.6" OR ${PARAVIEW_VERSION} STREQUAL "5.6" )
 
 # Find python
-IF  ( PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
+IF   ( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
   IF  ( PYTHON_ROOT_DIR )
     set(Python_ROOT_DIR ${PYTHON_ROOT_DIR} ) 
   ELSE( PYTHON_ROOT_DIR )
     set(Python_ROOT_DIR $ENV{PYTHON_ROOT_DIR} ) 
   ENDIF( PYTHON_ROOT_DIR)
-ENDIF(PYTHON_ROOT_DIR OR ENV{PYTHON_ROOT_DIR})
+ENDIF( PYTHON_ROOT_DIR OR DEFINED ENV{PYTHON_ROOT_DIR})
 
 IF   (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
   find_package(Python ${PYTHON2OR3} REQUIRED COMPONENTS Interpreter Development )
@@ -465,17 +507,17 @@ ELSE (${CMAKE_VERSION} VERSION_GREATER "3.12.0")
   set(Python_VERSION_MINOR ${PYTHON_VERSION_MINOR})
 ENDIF(${CMAKE_VERSION} VERSION_GREATER "3.12.0")
 
-#PyQt5
-IF  ( NOT PYQT5_ROOT_DIR )
+#PyQt5 root dir
+IF   ( NOT DEFINED PYQT5_ROOT_DIR )
     set(PYQT5_ROOT_DIR $ENV{PYQT5_ROOT_DIR} )
-ENDIF( NOT PYQT5_ROOT_DIR )
+ENDIF( NOT DEFINED PYQT5_ROOT_DIR )
 
-#Matplotlib
-IF   ( NOT MATPLOTLIB_ROOT_DIR )
+#Matplotlib root dir
+IF   ( NOT DEFINED MATPLOTLIB_ROOT_DIR )
     set(MATPLOTLIB_ROOT_DIR $ENV{MATPLOTLIB_ROOT_DIR} )
-ENDIF( NOT MATPLOTLIB_ROOT_DIR )
+ENDIF( NOT DEFINED MATPLOTLIB_ROOT_DIR )
 
-#HDF5_ROOT_DIR
+#define HDF5_ROOT_DIR
 IF   ( NOT HDF5_ROOT_DIR )
   IF  ( ENV{HDF5_ROOT_DIR} )
     set(HDF5_ROOT_DIR $ENV{HDF5_ROOT_DIR} )
@@ -490,20 +532,45 @@ set (PV_LIB_DIR    /usr/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR
 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)
 
 message(STATUS "Python version found is ${Python_VERSION}")
+
+# Find SWIG
+IF   ( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
+  IF   ( DEFINED SWIG_ROOT_DIR )
+    set(SWIG_EXECUTABLE    ${SWIG_ROOT_DIR}/bin/swig ) 
+  ELSE ( DEFINED SWIG_ROOT_DIR )
+    set(SWIG_EXECUTABLE $ENV{SWIG_ROOT_DIR}/bin/swig ) 
+  ENDIF( DEFINED SWIG_ROOT_DIR)
+ENDIF( DEFINED SWIG_ROOT_DIR OR DEFINED ENV{SWIG_ROOT_DIR})
 find_package (SWIG 3.0 REQUIRED)
 
+# Find Doxygen
 if (SOLVERLAB_WITH_DOCUMENTATION)                                                                           #
+ IF   ( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
+   IF   ( DEFINED DOXYGEN_ROOT_DIR )
+     set(DOXYGEN_EXECUTABLE    ${DOXYGEN_ROOT_DIR}/bin/doxygen ) 
+   ELSE ( DEFINED DOXYGEN_ROOT_DIR )
+     set(DOXYGEN_EXECUTABLE $ENV{DOXYGEN_ROOT_DIR}/bin/doxygen ) 
+   ENDIF( DEFINED DOXYGEN_ROOT_DIR)
+ ENDIF( DEFINED DOXYGEN_ROOT_DIR OR DEFINED ENV{DOXYGEN_ROOT_DIR})
   find_package (Doxygen)                                                                                    #
   set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, doxygen, graphviz, mscgen")
   set (CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, doxygen, graphviz, mscgen")
   if   (NOT DOXYGEN_FOUND)
     message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
   endif(NOT DOXYGEN_FOUND)
-endif()                        
+endif(SOLVERLAB_WITH_DOCUMENTATION)                    
+
 if (SOLVERLAB_WITH_TESTS)                                                                                  #
   enable_testing ()
+ IF   ( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
+   IF   ( DEFINED CPPUNIT_ROOT_DIR )
+     set(CPPUNIT_ROOT_USER    ${CPPUNIT_ROOT_DIR} ) 
+   ELSE ( DEFINED CPPUNIT_ROOT_DIR )
+     set(CPPUNIT_ROOT_USER $ENV{CPPUNIT_ROOT_DIR} ) 
+   ENDIF( DEFINED CPPUNIT_ROOT_DIR)
+ ENDIF( DEFINED CPPUNIT_ROOT_DIR OR DEFINED ENV{CPPUNIT_ROOT_DIR})
   find_package (CPPUNIT REQUIRED)
-endif()                        
+endif(SOLVERLAB_WITH_TESTS)                    
                                    
 # Enter subdirectories
 add_subdirectory (CDMATH)