summaryrefslogtreecommitdiffstats
path: root/Modules/FindVTK.cmake
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-10-07 18:48:22 (GMT)
committerBrad King <brad.king@kitware.com>2009-10-07 18:48:22 (GMT)
commit2c1a01dc6d95351a58d7cfff6e87c43a18964eb2 (patch)
tree0954a45612ccc3210326608e7fe2e5be51ef21b4 /Modules/FindVTK.cmake
parent71910b3fd49b3ab555333e3737ef2f7c5fc43dae (diff)
downloadCMake-2c1a01dc6d95351a58d7cfff6e87c43a18964eb2.zip
CMake-2c1a01dc6d95351a58d7cfff6e87c43a18964eb2.tar.gz
CMake-2c1a01dc6d95351a58d7cfff6e87c43a18964eb2.tar.bz2
Modernize FindVTK module
This teaches the FindVTK module to use the Config mode of find_package() to search for VTKConfig in the common case. The old search method based on find_path() and UseVTK is now used only to search for VTK 4.0. This approach avoids the need to update the module for each new VTK version because find_package(VTK) automatically searches "lib/vtk*". It also addresses issue #9105 since find_package searches lib64 paths too.
Diffstat (limited to 'Modules/FindVTK.cmake')
-rw-r--r--Modules/FindVTK.cmake109
1 files changed, 48 insertions, 61 deletions
diff --git a/Modules/FindVTK.cmake b/Modules/FindVTK.cmake
index fce10bc..69e1874 100644
--- a/Modules/FindVTK.cmake
+++ b/Modules/FindVTK.cmake
@@ -40,32 +40,41 @@
# (To distributed this file outside of CMake, substitute the full
# License text for the above reference.)
+# Assume not found.
+SET(VTK_FOUND 0)
+
+# VTK 4.0 did not provide VTKConfig.cmake.
+IF("${VTK_FIND_VERSION}" VERSION_LESS 4.1)
+ SET(_VTK_40_ALLOW 1)
+ IF(VTK_FIND_VERSION)
+ SET(_VTK_40_ONLY 1)
+ ENDIF()
+ENDIF()
+
# 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. For VTK 4.0, this is the location of UseVTK.cmake. This is either the root of the build tree or PREFIX/include/vtk for an installation.")
+SET(VTK_DIR_DESCRIPTION "directory containing VTKConfig.cmake. This is either the root of the build tree, or PREFIX/lib/vtk for an installation.")
+IF(_VTK_40_ALLOW)
+ SET(VTK_DIR_DESCRIPTION "${VTK_DIR_DESCRIPTION} For VTK 4.0, this is the location of UseVTK.cmake. This is either the root of the build tree or PREFIX/include/vtk for an installation.")
+ENDIF()
SET(VTK_DIR_MESSAGE "VTK not found. Set the VTK_DIR cmake cache entry to the ${VTK_DIR_DESCRIPTION}")
-# 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}")
+# Check whether VTK 4.0 has already been found.
+IF(_VTK_40_ALLOW AND VTK_DIR)
+ IF(EXISTS ${VTK_DIR}/UseVTK.cmake AND NOT EXISTS ${VTK_DIR}/VTKConfig.cmake)
+ SET(VTK_FOUND 1)
+ INCLUDE(UseVTKConfig40) # No VTKConfig; load VTK 4.0 settings.
+ ENDIF()
+ENDIF()
- # 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-5.4
- ${dir}/../lib/vtk-5.2
- ${dir}/../lib/vtk-5.1
- ${dir}/../lib/vtk-5.0
- ${dir}/../lib/vtk
- )
- ENDFOREACH(dir)
+# Use the Config mode of the find_package() command to find VTKConfig.
+# If this succeeds (possibly because VTK_DIR is already set), the
+# command will have already loaded VTKConfig.cmake and set VTK_FOUND.
+IF(NOT _VTK_40_ONLY AND NOT VTK_FOUND)
+ FIND_PACKAGE(VTK QUIET NO_MODULE)
+ENDIF()
+# Special search for VTK 4.0.
+IF(_VTK_40_ALLOW AND NOT VTK_DIR)
# 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 "")
@@ -77,22 +86,16 @@ IF(NOT VTK_DIR)
${VTK_INSTALL_PATH}/lib/vtk)
ENDIF(VTK_INSTALL_PATH AND USE_INSTALLED_VTK)
- #
- # Look for an installation or build tree.
- #
- FIND_PATH(VTK_DIR UseVTK.cmake
- # Support legacy cache files.
- ${VTK_DIR_SEARCH_LEGACY}
-
- # Look for an environment variable VTK_DIR.
- $ENV{VTK_DIR}
+ # Look for UseVTK.cmake in build trees or under <prefix>/include/vtk.
+ FIND_PATH(VTK_DIR
+ NAMES UseVTK.cmake
+ PATH_SUFFIXES vtk-4.0 vtk
+ HINTS $ENV{VTK_DIR}
- # Look in places relative to the system executable search path.
- ${VTK_DIR_SEARCH}
+ PATHS
- # Look in standard UNIX install locations.
- /usr/local/lib/vtk
- /usr/lib/vtk
+ # Support legacy cache files.
+ ${VTK_DIR_SEARCH_LEGACY}
# Read from the CMakeSetup registry entries. It is likely that
# VTK will have been recently built.
@@ -109,34 +112,18 @@ IF(NOT VTK_DIR)
# 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)
+ )
- ELSE(EXISTS ${VTK_DIR}/VTKConfig.cmake)
- IF(EXISTS ${VTK_DIR}/UseVTK.cmake)
- # We found VTK 4.0 (UseVTK.cmake exists, but not VTKConfig.cmake).
+ IF(VTK_DIR)
+ IF(EXISTS ${VTK_DIR}/UseVTK.cmake AND NOT EXISTS ${VTK_DIR}/VTKConfig.cmake)
SET(VTK_FOUND 1)
- # Load settings for VTK 4.0.
- INCLUDE(UseVTKConfig40)
- ELSE(EXISTS ${VTK_DIR}/UseVTK.cmake)
- # We did not find VTK.
- SET(VTK_FOUND 0)
- ENDIF(EXISTS ${VTK_DIR}/UseVTK.cmake)
- ENDIF(EXISTS ${VTK_DIR}/VTKConfig.cmake)
-ELSE(VTK_DIR)
- # We did not find VTK.
- SET(VTK_FOUND 0)
-ENDIF(VTK_DIR)
+ INCLUDE(UseVTKConfig40) # No VTKConfig; load VTK 4.0 settings.
+ ELSE()
+ # We found the wrong version. Pretend we did not find it.
+ SET(VTK_DIR "VTK_DIR-NOTFOUND" CACHE PATH "The ${VTK_DIR_DESCRIPTION}" FORCE)
+ ENDIF()
+ ENDIF()
+ENDIF()
#-----------------------------------------------------------------------------
IF(VTK_FOUND)