diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index bb47a3616..c68e86ce5 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/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 _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.cmake" within // another find_package() 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()); + // 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()); - } + // Whether an exact version is required. + std::string exact = this->Name; + exact += "_FIND_VERSION_EXACT"; + this->VersionExact = this->Makefile->IsOn(exact.c_str()); } } diff --git a/Tests/FindPackageTest/FindRecursiveA.cmake b/Tests/FindPackageTest/FindRecursiveA.cmake index 17d687183..3af7e99a3 100644 --- a/Tests/FindPackageTest/FindRecursiveA.cmake +++ b/Tests/FindPackageTest/FindRecursiveA.cmake @@ -1 +1 @@ -FIND_PACKAGE(RecursiveA) +FIND_PACKAGE(RecursiveA NO_MODULE)