1
0
Эх сурвалжийг харах

ENH: New implementation of FindVTK to take advantage of VTKConfig.cmake. Also provides more powerful search path mechanism, and requires only one cache entry in user project.

Brad King 23 жил өмнө
parent
commit
e3f76e9367
1 өөрчлөгдсөн 102 нэмэгдсэн , 127 устгасан
  1. 102 127
      Modules/FindVTK.cmake

+ 102 - 127
Modules/FindVTK.cmake

@@ -1,141 +1,116 @@
 #
-# Find the native VTK includes and library
+# Find a VTK installation or build tree.
 #
-# This module defines:
+# When VTK is found, the VTKConfig.cmake file is sourced to setup the
+# location and configuration of VTK.  Please read this file, or
+# VTKConfig.cmake.in from the VTK source tree for the full list of
+# definitions.  Of particular interest is
 #
-# VTK_INSTALL_PATH  - Where is the installed version of VTK.
-# USE_BUILT_VTK     - Should a built-from-source version of VTK be used.
+# VTK_USE_FILE          - A CMake source file that can be included
+#                         to set the include directories, library
+#                         directories, and preprocessor macros.
 #
-# VTK_BINARY_PATH   - Where is (one of) the binary tree(s).
-# USE_INSTALLED_VTK - Should an installed version of VTK be used
+# In addition to the variables read from VTKConfig.cmake, this find
+# module also defines
 #
-# USE_VTK_FILE      - (internal)
-#                     Full path and location to the UseVTK.cmake file.
-#                     This value changes each time USE_BUILT_VTK or 
-#                     USE_INSTALLED_VTK is modified, and only if ONE of
-#                     these setting is set to ON.
+# VTK_DIR      - The directory containing VTKConfig.cmake.  This is either
+#                the root of the build tree, or the lib/vtk
+#                directory.  This is the only cache entry.
 #
-# If VTK is not found, an error is displayed unless VTK_FIND_QUIETLY
-# is on.
+# VTK_FOUND    - Whether VTK was found.  If this is true, VTK_DIR is okay.
 #
-
+# USE_VTK_FILE - The full path to the UseVTK.cmake file.  This is provided
+#                for backward compatability.  Use VTK_USE_FILE instead.
 #
-# Look for a binary tree (built from source)
-# 
-FIND_PATH(VTK_BINARY_PATH UseVTK.cmake
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9]
-  [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10]
-  VTKBIN
-  ../VTKBIN
-  ../../VTKBIN
-  $ENV{HOME}/VTKBIN
-  VTK-bin
-  ../VTK-bin
-  ../../VTK-bin
-  $ENV{HOME}/VTK-bin
-  vtkbin
-  ../vtkbin
-  ../../vtkbin
-  $ENV{HOME}/vtkbin
-  VTK-vc
-  ../VTK-vc
-  ../../VTK-vc
-  $ENV{HOME}/VTK-vc
-  VTK-nmake
-  ../VTK-nmake
-  ../../VTK-nmake
-  $ENV{HOME}/VTK-nmake
-)
 
-#
-# If we found a built tree, USE_BUILT_VTK allows the user to 
-# use it or not. Defaults to ON.
-#
-IF (VTK_BINARY_PATH)
-  SET (USE_BUILT_VTK 1 CACHE BOOL 
-       "Use a built (versus installed) version of VTK. Be sure that VTK_BINARY_PATH is correct.")
-ENDIF (VTK_BINARY_PATH)
+# Construct consitent error messages for use below.
+SET(VTK_DIR_DESCRIPTION "directory containing VTKConfig.cmake.  This is either the root of the build tree, or PREFIX/lib/vtk for an installation.")
+SET(VTK_DIR_MESSAGE "VTK not found.  Set VTK_DIR to the ${VTK_DIR_DESCRIPTION}")
 
-#
-# Look for an installed tree
-#
-FIND_PATH(VTK_INSTALL_PATH include/vtk/UseVTK.cmake
-  /usr/local
-  /usr
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Kitware\\VTK\\Nightly]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Kitware\\VTK\\43]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Kitware\\VTK\\42]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Kitware\\VTK\\41]
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Kitware\\VTK\\40]
-)
+# Search only if the location is not already known.
+IF(NOT VTK_DIR)
+  # Get the system search path as a list.
+  IF(UNIX)
+    STRING(REGEX MATCHALL "[^:]+" VTK_DIR_SEARCH1 $ENV{PATH})
+  ELSE(UNIX)
+    STRING(REGEX REPLACE "\\\\" "/" VTK_DIR_SEARCH1 $ENV{PATH})
+  ENDIF(UNIX)
+  STRING(REGEX REPLACE "/;" ";" VTK_DIR_SEARCH2 ${VTK_DIR_SEARCH1})
 
-#
-# If we found an installed tree, USE_INSTALLED_VTK allows the user to 
-# use it or not.
-#
-# Defaults to OFF if a built tree was found before (see above), ON otherwise.
-#
-IF (VTK_INSTALL_PATH)
-  IF (USE_BUILT_VTK)
-    SET (USE_INSTALLED_VTK 0 CACHE BOOL 
-         "Use an installed (versus built from source) version of VTK. Be sure that VTK_INSTALL_PATH is correct.")
-  ELSE (USE_BUILT_VTK)
-    SET (USE_INSTALLED_VTK 1 CACHE BOOL 
-         "Use an installed (versus built from source) version of VTK. Be sure that VTK_INSTALL_PATH is correct.")
-  ENDIF (USE_BUILT_VTK)
-ENDIF (VTK_INSTALL_PATH)
+  # Construct a set of paths relative to the system search path.
+  SET(VTK_DIR_SEARCH "")
+  FOREACH(dir ${VTK_DIR_SEARCH2})
+    SET(VTK_DIR_SEARCH ${VTK_DIR_SEARCH} "${dir}/../lib/vtk")
+  ENDFOREACH(dir)
 
-#
-# Set the USE_VTK_FILE only if one of USE_BUILT_VTK or USE_INSTALLED_VTK
-# is ON.
-#
-IF (USE_BUILT_VTK)
-  IF (NOT USE_INSTALLED_VTK)
-    IF (EXISTS "${VTK_BINARY_PATH}/UseVTK.cmake")
-      SET (USE_VTK_FILE "${VTK_BINARY_PATH}/UseVTK.cmake")
-    ENDIF (EXISTS "${VTK_BINARY_PATH}/UseVTK.cmake")
-  ENDIF (NOT USE_INSTALLED_VTK)
-ELSE (USE_BUILT_VTK)
-  IF (USE_INSTALLED_VTK)
-    IF (EXISTS "${VTK_INSTALL_PATH}/include/vtk/UseVTK.cmake")
-      SET (USE_VTK_FILE "${VTK_INSTALL_PATH}/include/vtk/UseVTK.cmake")
-    ENDIF (EXISTS "${VTK_INSTALL_PATH}/include/vtk/UseVTK.cmake")
-  ENDIF (USE_INSTALLED_VTK)
-ENDIF (USE_BUILT_VTK)
+  # Old scripts may set these directories in the CMakeCache.txt file.
+  # They can tell us where to find VTKConfig.cmake.
+  SET(VTK_DIR_SEARCH_LEGACY "")
+  IF(VTK_BINARY_PATH)
+    SET(VTK_DIR_SEARCH_LEGACY ${VTK_DIR_SEARCH_LEGACY} ${VTK_BINARY_PATH})
+  ENDIF(VTK_BINARY_PATH)
+  IF(VTK_INSTALL_PATH)
+    SET(VTK_DIR_SEARCH_LEGACY ${VTK_DIR_SEARCH_LEGACY}
+        ${VTK_INSTALL_PATH}/lib/vtk)
+  ENDIF(VTK_INSTALL_PATH)
 
-#
-# Display a warning if both settings are set to ON.
-# Otherwise display a warning if VTK was not found.
-#
-IF (USE_BUILT_VTK AND USE_INSTALLED_VTK)
-  MESSAGE ("Warning. Please make sure that only ONE of the USE_INSTALLED_VTK or USE_BUILT_VTK setting is set to ON.")
-ELSE (USE_BUILT_VTK AND USE_INSTALLED_VTK)
-  IF (NOT USE_VTK_FILE)
-    IF (NOT VTK_FIND_QUIETLY)
-      MESSAGE ("Warning. VTK might be found on your system as different flavours: installed VTK or built VTK. Please make sure that the VTK_INSTALL_PATH or VTK_BINARY_PATH setting reflects which VTK you are planning to use, then set ONE of the USE_INSTALLED_VTK or USE_BUILT_VTK setting to ON.")
-    ENDIF (NOT VTK_FIND_QUIETLY)
-  ENDIF (NOT USE_VTK_FILE)
-ENDIF (USE_BUILT_VTK AND USE_INSTALLED_VTK)
+  #
+  # Look for an installation or build tree.
+  #
+  FIND_PATH(VTK_DIR VTKConfig.cmake
+    # Support legacy cache files.
+    ${VTK_DIR_SEARCH_LEGACY}
 
-# Note:
-#
-# If you use that module then you are probably relying on VTK to be found
-# on your system. Here is the CMake code you might probably want to use to
-# work hand-in-hand with that module (in that example CAN_BUILD is a var
-# that is set to 0 if your project can not be build):
-#
-# INCLUDE (${CMAKE_ROOT}/Modules/FindVTK.cmake)
-#
-# IF (USE_VTK_FILE)
-#   INCLUDE (${USE_VTK_FILE})
-# ELSE (USE_VTK_FILE)
-#   SET (CAN_BUILD 0)
-# ENDIF (USE_VTK_FILE)
+    # Look in places relative to the system executable search path.
+    ${VTK_DIR_SEARCH}
+
+    # Look in standard UNIX install locations.
+    /usr/local/lib/vtk
+    /usr/lib/vtk
+
+    # Read from the CMakeSetup registry entries.  It is likely that
+    # VTK will have been recently built.
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10]
+
+    # Help the user find it if we cannot.
+    DOC "The ${VTK_DIR_DESCRIPTION}"
+  )
+ENDIF(NOT VTK_DIR)
+
+# If VTK was found, load the configuration file to get the rest of the
+# settings.
+IF(VTK_DIR)
+  # Make sure the VTKConfig.cmake file exists in the directory provided.
+  IF(EXISTS ${VTK_DIR}/VTKConfig.cmake)
+
+    # We found VTK.  Load the settings.
+    SET(VTK_FOUND 1)
+    INCLUDE(${VTK_DIR}/VTKConfig.cmake)
+
+    # Set USE_VTK_FILE for backward-compatability.
+    SET(USE_VTK_FILE ${VTK_USE_FILE})
+  ELSE(EXISTS ${VTK_DIR}/VTKConfig.cmake)
+    # We did not find VTK.
+    SET(VTK_FOUND 0)
+  ENDIF(EXISTS ${VTK_DIR}/VTKConfig.cmake)
+ELSE(VTK_DIR)
+  # We did not find VTK.
+  SET(VTK_FOUND 0)
+ENDIF(VTK_DIR)
+
+# If it was not found, explain to the user how to specify its
+# location.
+IF (NOT VTK_FOUND)
+  IF (NOT VTK_FIND_QUIETLY)
+    MESSAGE(${VTK_DIR_MESSAGE})
+  ENDIF (NOT VTK_FIND_QUIETLY)
+ENDIF (NOT VTK_FOUND)