diff options
Diffstat (limited to 'Source/cmFindPackageCommand.cxx')
-rw-r--r-- | Source/cmFindPackageCommand.cxx | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index 00a4c3d..62aaeb2 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -56,6 +56,9 @@ bool cmFindPackageCommand::InitialPass(std::vector<std::string> const& args) this->Name = args[0]; + // Build a list of required components. + std::string components; + const char* components_sep = ""; bool quiet = false; bool required = false; if(args.size() > 1) @@ -74,11 +77,32 @@ bool cmFindPackageCommand::InitialPass(std::vector<std::string> const& args) } else if(args[i] == "REQUIRED") { + // The package is required. required = true; - while (++i < args.size() && args[i] != "QUIET") + + // Look for a list of required components. + while(++i < args.size()) { - std::string req_var = Name + "_FIND_REQUIRED_" + args[i]; - this->Makefile->AddDefinition(req_var.c_str(), "1"); + // Stop looking when a known keyword argument is + // encountered. + if((args[i] == "QUIET") || + (args[i] == "REQUIRED")) + { + --i; + break; + } + else + { + // Set a variable telling the find script this component + // is required. + std::string req_var = Name + "_FIND_REQUIRED_" + args[i]; + this->Makefile->AddDefinition(req_var.c_str(), "1"); + + // Append to the list of required components. + components += components_sep; + components += args[i]; + components_sep = ";"; + } } } else @@ -89,6 +113,10 @@ bool cmFindPackageCommand::InitialPass(std::vector<std::string> const& args) return false; } } + + // Store the list of components. + std::string components_var = Name + "_FIND_COMPONENTS"; + this->Makefile->AddDefinition(components_var.c_str(), components.c_str()); } // See if there is a Find<name>.cmake module. |