瀏覽代碼

Merge branch 'find_package-fix-NO_MODULE' into release-3.15

Merge-request: !3557
Brad King 6 年之前
父節點
當前提交
185e6a1288

+ 3 - 2
Source/cmFindPackageCommand.cxx

@@ -823,8 +823,9 @@ bool cmFindPackageCommand::HandlePackageMode(
     }
   }
 
-  if (this->Makefile->IsOn("CMAKE_FIND_PACKAGE_PREFER_CONFIG") && !found &&
-      handlePackageModeType == HandlePackageModeType::Config) {
+  if (this->UseFindModules && !found &&
+      handlePackageModeType == HandlePackageModeType::Config &&
+      this->Makefile->IsOn("CMAKE_FIND_PACKAGE_PREFER_CONFIG")) {
     // Config mode failed. Allow Module case.
     result = false;
   }

+ 33 - 0
Tests/FindPackageTest/CMakeLists.txt

@@ -579,6 +579,26 @@ endif()
 
 set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF)
 set(CMAKE_PREFIX_PATH)
+set(CMAKE_MODULE_PATH)
+
+############################################################################
+##Test FIND_PACKAGE CMAKE_FIND_PACKAGE_PREFER_CONFIG - Do not recurse
+
+# No CMAKE_PREFIX_PATH
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/PreferConfigRecurse)
+
+# Now prefer config mode
+set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
+unset(ACME_FOUND)
+unset(ACME_CONFIG)
+
+find_package(ACME)
+if(ACME_FOUND AND ACME_CONFIG)
+    message(SEND_ERROR "Incorrectly found ACME in CONFIG mode, from the MODULE package")
+endif()
+
+set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF)
+set(CMAKE_MODULE_PATH)
 
 ############################################################################
 ##Test find_package CMAKE_FIND_PACKAGE_PREFER_CONFIG with module fallback
@@ -592,3 +612,16 @@ find_package(ACME REQUIRED)
 if(NOT ACME_FOUND)
     message(SEND_ERROR "Did not find ACME package")
 endif()
+
+############################################################################
+##Test find_package CMAKE_FIND_PACKAGE_PREFER_CONFIG with NO_MODULE
+
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/PreferConfigOnlyModule)
+
+set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
+
+find_package(ACME NO_MODULE)
+
+if(ACME_FOUND)
+    message(SEND_ERROR "Should not find ACME package")
+endif()

+ 1 - 0
Tests/FindPackageTest/PreferConfigRecurse/ACMEConfig.cmake

@@ -0,0 +1 @@
+set(ACME_FOUND TRUE)

+ 1 - 0
Tests/FindPackageTest/PreferConfigRecurse/FindACME.cmake

@@ -0,0 +1 @@
+find_package(ACME NO_MODULE)