瀏覽代碼

BUG: Fix FindBoost versioned find

To locate the boost include directory, all search paths and versioned
path suffixes should be passed to one call of FIND_PATH.  Previously the
test for one version would find an unversioned system boost even when
the user set BOOST_ROOT (since the NO_DEFAULT_PATH option is not used).
See issue #7456.
Brad King 17 年之前
父節點
當前提交
79a3807340
共有 1 個文件被更改,包括 13 次插入10 次删除
  1. 13 10
      Modules/FindBoost.cmake

+ 13 - 10
Modules/FindBoost.cmake

@@ -286,8 +286,10 @@ ELSE (_boost_IN_CACHE)
 
   # Try to find Boost by stepping backwards through the Boost versions
   # we know about.
-  FOREACH(_boost_VER ${_boost_TEST_VERSIONS})
-    IF( NOT Boost_INCLUDE_DIR )
+  IF( NOT Boost_INCLUDE_DIR )
+    # Build a list of path suffixes for each version.
+    SET(_boost_PATH_SUFFIXES)
+    FOREACH(_boost_VER ${_boost_TEST_VERSIONS})
       # Add in a path suffix, based on the required version, ideally
       # we could read this from version.hpp, but for that to work we'd
       # need to know the include dir already
@@ -304,15 +306,16 @@ ELSE (_boost_IN_CACHE)
           STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)" "\\1_\\2" 
             _boost_PATH_SUFFIX ${_boost_PATH_SUFFIX})
       ENDIF(_boost_PATH_SUFFIX MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+")
-
-      FIND_PATH(Boost_INCLUDE_DIR
-          NAMES         boost/config.hpp
-          HINTS         ${_boost_INCLUDE_SEARCH_DIRS}
-          PATH_SUFFIXES ${_boost_PATH_SUFFIX}
+      LIST(APPEND _boost_PATH_SUFFIXES "${_boost_PATH_SUFFIX}")
+    ENDFOREACH(_boost_VER)
+
+    # Look for a standard boost header file.
+    FIND_PATH(Boost_INCLUDE_DIR
+      NAMES         boost/config.hpp
+      HINTS         ${_boost_INCLUDE_SEARCH_DIRS}
+      PATH_SUFFIXES ${_boost_PATH_SUFFIXES}
       )
-
-    ENDIF( NOT Boost_INCLUDE_DIR )
-  ENDFOREACH(_boost_VER)
+  ENDIF( NOT Boost_INCLUDE_DIR )
 
   IF(Boost_INCLUDE_DIR)
     # Extract Boost_VERSION and Boost_LIB_VERSION from version.hpp