Browse Source

ENH: Remove implicit NO_MODULE when recursing

Recently we taught find_package that the NO_MODULE option is implied
when it is recursively invoked in a find-module.  This behavior may be
confusing because two identical calls may enter different modes
depending on context.  It also disallows the possibility that one
find-module defers to another find-module by changing CMAKE_MODULE_PATH
and recursively invoking find_package.  This change reverts the feature.
Brad King 17 years ago
parent
commit
25a5c34a62
2 changed files with 15 additions and 23 deletions
  1. 14 22
      Source/cmFindPackageCommand.cxx
  2. 1 1
      Tests/FindPackageTest/FindRecursiveA.cmake

+ 14 - 22
Source/cmFindPackageCommand.cxx

@@ -91,6 +91,9 @@ cmFindPackageCommand::cmFindPackageCommand()
     "The [version] argument requests a version with which the package found "
     "should be compatible (format is major[.minor[.patch[.tweak]]]).  "
     "The EXACT option requests that the version be matched exactly.  "
+    "If no [version] is given to a recursive invocation inside a "
+    "find-module, the [version] and EXACT arguments are forwarded "
+    "automatically from the outer call.  "
     "Version support is currently provided only on a package-by-package "
     "basis (details below).\n"
     "User code should generally look for packages using the above simple "
@@ -129,8 +132,7 @@ cmFindPackageCommand::cmFindPackageCommand()
     "                NO_CMAKE_FIND_ROOT_PATH])\n"
     "The NO_MODULE option may be used to skip Module mode explicitly.  "
     "It is also implied by use of options not specified in the reduced "
-    "signature, or when the command is invoked recursively inside a "
-    "find-module for the package."
+    "signature.  "
     "\n"
     "Config mode attempts to locate a configuration file provided by the "
     "package to be found.  A cache entry called <package>_DIR is created to "
@@ -161,10 +163,6 @@ cmFindPackageCommand::cmFindPackageCommand()
     "version (format is major[.minor[.patch[.tweak]]]).  "
     "If the EXACT option is given only a version of the package claiming "
     "an exact match of the requested version may be found.  "
-    "If no [version] is given to a recursive invocation inside a "
-    "find-module, the [version] and EXACT arguments are forwarded "
-    "automatically from the outer call."
-    "\n"
     "CMake does not establish any convention for the meaning of version "
     "numbers.  "
     "Package version numbers are checked by \"version\" files provided by "
@@ -482,7 +480,7 @@ bool cmFindPackageCommand
       cmake::AUTHOR_WARNING, "Ignoring EXACT since no version is requested.");
     }
 
-  if(!this->NoModule || this->Version.empty())
+  if(this->Version.empty())
     {
     // Check whether we are recursing inside "Find<name>.cmake" within
     // another find_package(<name>) call.
@@ -490,22 +488,16 @@ bool cmFindPackageCommand
     mod += "_FIND_MODULE";
     if(this->Makefile->IsOn(mod.c_str()))
       {
-      // Avoid recursing back into the module.
-      this->NoModule = true;
-
       // Get version information from the outer call if necessary.
-      if(this->Version.empty())
-        {
-        // Requested version string.
-        std::string ver = this->Name;
-        ver += "_FIND_VERSION";
-        this->Version = this->Makefile->GetSafeDefinition(ver.c_str());
-
-        // Whether an exact version is required.
-        std::string exact = this->Name;
-        exact += "_FIND_VERSION_EXACT";
-        this->VersionExact = this->Makefile->IsOn(exact.c_str());
-        }
+      // Requested version string.
+      std::string ver = this->Name;
+      ver += "_FIND_VERSION";
+      this->Version = this->Makefile->GetSafeDefinition(ver.c_str());
+
+      // Whether an exact version is required.
+      std::string exact = this->Name;
+      exact += "_FIND_VERSION_EXACT";
+      this->VersionExact = this->Makefile->IsOn(exact.c_str());
       }
     }
 

+ 1 - 1
Tests/FindPackageTest/FindRecursiveA.cmake

@@ -1 +1 @@
-FIND_PACKAGE(RecursiveA)
+FIND_PACKAGE(RecursiveA NO_MODULE)