From 9bc0decade3bc97ffb4455a3582a204a45e7ec8d Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 22 Jan 2020 14:39:40 +0100
Subject: [PATCH] COMP: update MPI detection for runTimePostProcessing

---
 .../CMakeLists-OpenFOAM.txt                   |  5 +-
 .../CMakeLists-Project.txt                    | 71 +++++++++++--------
 src/runTimePostProcessing/CMakeLists.txt      | 31 +++++++-
 3 files changed, 74 insertions(+), 33 deletions(-)

diff --git a/src/runTimePostProcessing/CMakeLists-OpenFOAM.txt b/src/runTimePostProcessing/CMakeLists-OpenFOAM.txt
index 00a63cb..418128c 100644
--- a/src/runTimePostProcessing/CMakeLists-OpenFOAM.txt
+++ b/src/runTimePostProcessing/CMakeLists-OpenFOAM.txt
@@ -20,13 +20,14 @@ add_definitions(
     -DWM_$ENV{WM_PRECISION_OPTION}
     -DWM_LABEL_SIZE=$ENV{WM_LABEL_SIZE}
     -DNoRepository
+    -std=c++11
 )
 
 set(CMAKE_CXX_FLAGS_DEBUG
-    "-g -O0 -std=c++11 -Wall -Wextra -Wno-unused-parameter -Wnon-virtual-dtor -Wno-overloaded-virtual"
+    "-g -O0 -Wall -Wextra -Wno-unused-parameter -Wnon-virtual-dtor -Wno-overloaded-virtual"
 )
 set(CMAKE_CXX_FLAGS_RELEASE
-    "-O3 -std=c++11 -Wall -Wextra -Wno-unused-parameter -Wnon-virtual-dtor -Wno-overloaded-virtual"
+    "-O3 -Wall -Wextra -Wno-unused-parameter -Wnon-virtual-dtor -Wno-overloaded-virtual"
 )
 
 #-----------------------------------------------------------------------------
diff --git a/src/runTimePostProcessing/CMakeLists-Project.txt b/src/runTimePostProcessing/CMakeLists-Project.txt
index 2748cc8..ae81bec 100644
--- a/src/runTimePostProcessing/CMakeLists-Project.txt
+++ b/src/runTimePostProcessing/CMakeLists-Project.txt
@@ -1,38 +1,65 @@
 #-----------------------------------------------------------------------------
 project(runTimePostProcessing)
 
-message("VTK version: " ${VTK_VERSION})
+set(CMAKE_BUILD_TYPE Release)
 
 if(${VTK_VERSION_MAJOR} LESS 6)
     message(FATAL_ERROR " VTK version is too old - requires VTK6 or newer")
 endif()
 
 #-----------------------------------------------------------------------------
+unset(LINK_LIBRARIES)
+unset(FOAM_USING_VTK_MPI)
+
 # Test some characteristics
-set(test_file ${CMAKE_CURRENT_BINARY_DIR}/check_mpi.cxx)
-file(WRITE ${test_file}
-    "#include <vtkMPICommunicator.h>\n"
-    "int main() {\n"
-    "  vtkMPICommunicator* p = vtkMPICommunicator::New();\n"
-    "  p->Delete();\n"
-    "  return 0;\n"
-    "}"
-)
-try_compile(FOAM_USING_VTK_MPI
-    ${CMAKE_CURRENT_BINARY_DIR} ${test_file}
-    LINK_LIBRARIES vtkParallelMPI
-    CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${VTK_INCLUDE_DIRS}"
-)
+
+if (${ParaView_VERSION} GREATER_EQUAL 5.7)
+    if (TARGET "VTK::ParallelMPI")
+        set(FOAM_USING_VTK_MPI TRUE)
+    endif()
+elseif (${VTK_VERSION} LESS 8.90)
+    # Older way to test for VTK MPI
+
+    set(test_file ${CMAKE_CURRENT_BINARY_DIR}/check_mpi.cxx)
+    file(WRITE ${test_file}
+        "#include <vtkMPICommunicator.h>\n"
+        "int main() {\n"
+        "  vtkMPICommunicator* p = vtkMPICommunicator::New();\n"
+        "  p->Delete();\n"
+        "  return 0;\n"
+        "}"
+    )
+    try_compile(FOAM_USING_VTK_MPI
+        ${CMAKE_CURRENT_BINARY_DIR} ${test_file}
+        LINK_LIBRARIES vtkParallelMPI
+        CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${VTK_INCLUDE_DIRS}"
+    )
+
+    if (FOAM_USING_VTK_MPI)
+        include(vtkMPI)
+        set(LINK_LIBRARIES vtkParallelMPI)
+    endif()
+elseif (${ParaView_VERSION} LESS_EQUAL 0)
+    #TODO if (TARGET "ParallelMPI")
+    #TODO     set(FOAM_USING_VTK_MPI TRUE)
+    #TODO endif()
+endif()
+
+#-----------------------------------------------------------------------------
+
 if (FOAM_USING_VTK_MPI)
     add_definitions(-DFOAM_USING_VTK_MPI)
     message("Building with VTK MPI")
-    include(vtkMPI)
 else()
     message(WARNING "==== Building without VTK MPI ====")
 endif()
 
 #-----------------------------------------------------------------------------
 
+link_directories(
+    $ENV{FOAM_LIBBIN}
+)
+
 include_directories(
     ${LIB_SRC}/OpenFOAM/include
     ${LIB_SRC}/OpenFOAM/lnInclude
@@ -45,12 +72,6 @@ include_directories(
     ${CMAKE_CURRENT_BINARY_DIR}
 )
 
-link_directories(
-    $ENV{FOAM_LIBBIN}
-)
-
-set(CMAKE_BUILD_TYPE Release)
-
 # Build intermediate (library) directly into the OpenFOAM libdir
 # - implies CMAKE_INSTALL_PREFIX is ignored and there is no 'install' phase
 set(LIBRARY_OUTPUT_PATH $ENV{FOAM_LIBBIN}
@@ -98,12 +119,6 @@ set(OPENFOAM_LIBRARIES
     conversion
 )
 
-if (FOAM_USING_VTK_MPI)
-    set(LINK_LIBRARIES vtkParallelMPI)
-else()
-    set(LINK_LIBRARIES)
-endif()
-
 add_library(
     runTimePostProcessing
     SHARED
diff --git a/src/runTimePostProcessing/CMakeLists.txt b/src/runTimePostProcessing/CMakeLists.txt
index 54c8f9d..9f61447 100644
--- a/src/runTimePostProcessing/CMakeLists.txt
+++ b/src/runTimePostProcessing/CMakeLists.txt
@@ -1,6 +1,7 @@
 #------------------------------------------------------------------------------
 cmake_minimum_required(VERSION 2.8)
-cmake_policy(SET CMP0002 NEW)   # Policy CMP0002 required for for cmake >= 3
+cmake_policy(SET CMP0002 NEW)   # For cmake >= 3
+cmake_policy(SET CMP0057 NEW)   # For cmake >= 3.10.2
 
 # Fail if not building out-of-source
 if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
@@ -11,15 +12,22 @@ endif()
 #-----------------------------------------------------------------------------
 # Simple discovery and sanity checks
 
+set(ParaView_VERSION 0)
 unset(VTK_VERSION)
 unset(VTK_VERSION_MAJOR)
 
 if (EXISTS "$ENV{VTK_DIR}")
     message("Building with VTK from $ENV{VTK_DIR}")
-    find_package(VTK REQUIRED HINTS $ENV{VTK_DIR})
+    find_package(VTK REQUIRED)
+
 elseif (EXISTS "$ENV{ParaView_DIR}")
     message("Building with Paraview from $ENV{ParaView_DIR}")
-    find_package(ParaView REQUIRED HINTS $ENV{ParaView_DIR})
+
+    find_package(ParaView REQUIRED)
+    if (${ParaView_VERSION} GREATER_EQUAL 5.7)
+        find_package(ParaView REQUIRED
+            OPTIONAL_COMPONENTS VTK::ParallelMPI)
+    endif()
 else()
     message(FATAL_ERROR "VTK not found using VTK_DIR or ParaView_DIR")
 endif()
@@ -47,6 +55,23 @@ if (VTK_MAJOR_VERSION AND NOT VTK_VERSION_MAJOR)
     endif()
 endif()
 
+if (${ParaView_VERSION} GREATER 0)
+    # Newer VTK - try to load optional MPI?
+    if (${VTK_VERSION} GREATER 8.2)
+        find_package(VTK REQUIRED OPTIONAL_COMPONENTS ParallelMPI)
+    endif()
+endif()
+
+#-----------------------------------------------------------------------------
+
+message("================")
+if (${ParaView_VERSION} GREATER 0)
+message("Using ParaView ${ParaView_VERSION} (VTK ${VTK_VERSION})")
+else()
+message("Using VTK ${VTK_VERSION}")
+endif()
+message("================")
+
 #-----------------------------------------------------------------------------
 
 include(CMakeLists-OpenFOAM.txt)
-- 
GitLab