ENH: provide the xxx_FIND_QUIETLY, xxx_FIND_REQUIRED and xxx_FIND_VERSION_ variables
also in Config mode, so the xxxConfig.cmake files can e.g. test the QUIETLY parameter and print something or not Alex
This commit is contained in:
parent
6f8bdd276c
commit
8903f88b36
|
@ -411,7 +411,7 @@ bool cmFindPackageCommand
|
|||
{
|
||||
// Set a variable telling the find script this component
|
||||
// is required.
|
||||
std::string req_var = Name + "_FIND_REQUIRED_" + args[i];
|
||||
std::string req_var = this->Name + "_FIND_REQUIRED_" + args[i];
|
||||
this->Makefile->AddDefinition(req_var.c_str(), "1");
|
||||
|
||||
// Append to the list of required components.
|
||||
|
@ -480,9 +480,7 @@ bool cmFindPackageCommand
|
|||
}
|
||||
}
|
||||
|
||||
// Store the list of components.
|
||||
std::string components_var = Name + "_FIND_COMPONENTS";
|
||||
this->Makefile->AddDefinition(components_var.c_str(), components.c_str());
|
||||
this->SetModuleVariables(components);
|
||||
|
||||
// See if there is a Find<package>.cmake module.
|
||||
if(!this->NoModule)
|
||||
|
@ -533,6 +531,69 @@ bool cmFindPackageCommand
|
|||
return result;
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmFindPackageCommand::SetModuleVariables(const std::string& components)
|
||||
{
|
||||
// Store the list of components.
|
||||
std::string components_var = this->Name + "_FIND_COMPONENTS";
|
||||
this->Makefile->AddDefinition(components_var.c_str(), components.c_str());
|
||||
|
||||
if(this->Quiet)
|
||||
{
|
||||
// Tell the module that is about to be read that it should find
|
||||
// quietly.
|
||||
std::string quietly = this->Name;
|
||||
quietly += "_FIND_QUIETLY";
|
||||
this->Makefile->AddDefinition(quietly.c_str(), "1");
|
||||
}
|
||||
|
||||
if(this->Required)
|
||||
{
|
||||
// Tell the module that is about to be read that it should report
|
||||
// a fatal error if the package is not found.
|
||||
std::string req = this->Name;
|
||||
req += "_FIND_REQUIRED";
|
||||
this->Makefile->AddDefinition(req.c_str(), "1");
|
||||
}
|
||||
|
||||
if(!this->Version.empty())
|
||||
{
|
||||
// Tell the module that is about to be read what version of the
|
||||
// package has been requested.
|
||||
std::string ver = this->Name;
|
||||
ver += "_FIND_VERSION";
|
||||
this->Makefile->AddDefinition(ver.c_str(), this->Version.c_str());
|
||||
char buf[64];
|
||||
switch(this->VersionCount)
|
||||
{
|
||||
case 3:
|
||||
{
|
||||
sprintf(buf, "%u", this->VersionPatch);
|
||||
this->Makefile->AddDefinition((ver+"_PATCH").c_str(), buf);
|
||||
} // no break
|
||||
case 2:
|
||||
{
|
||||
sprintf(buf, "%u", this->VersionMinor);
|
||||
this->Makefile->AddDefinition((ver+"_MINOR").c_str(), buf);
|
||||
} // no break
|
||||
case 1:
|
||||
{
|
||||
sprintf(buf, "%u", this->VersionMajor);
|
||||
this->Makefile->AddDefinition((ver+"_MAJOR").c_str(), buf);
|
||||
} // no break
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Tell the module whether an exact version has been requested.
|
||||
std::string exact = this->Name;
|
||||
exact += "_FIND_VERSION_EXACT";
|
||||
this->Makefile->AddDefinition(exact.c_str(),
|
||||
this->VersionExact? "1":"0");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmFindPackageCommand::FindModule(bool& found)
|
||||
{
|
||||
|
@ -542,59 +603,6 @@ bool cmFindPackageCommand::FindModule(bool& found)
|
|||
std::string mfile = this->Makefile->GetModulesFile(module.c_str());
|
||||
if ( mfile.size() )
|
||||
{
|
||||
if(this->Quiet)
|
||||
{
|
||||
// Tell the module that is about to be read that it should find
|
||||
// quietly.
|
||||
std::string quietly = this->Name;
|
||||
quietly += "_FIND_QUIETLY";
|
||||
this->Makefile->AddDefinition(quietly.c_str(), "1");
|
||||
}
|
||||
|
||||
if(this->Required)
|
||||
{
|
||||
// Tell the module that is about to be read that it should report
|
||||
// a fatal error if the package is not found.
|
||||
std::string req = this->Name;
|
||||
req += "_FIND_REQUIRED";
|
||||
this->Makefile->AddDefinition(req.c_str(), "1");
|
||||
}
|
||||
|
||||
if(!this->Version.empty())
|
||||
{
|
||||
// Tell the module that is about to be read what version of the
|
||||
// package has been requested.
|
||||
std::string ver = this->Name;
|
||||
ver += "_FIND_VERSION";
|
||||
this->Makefile->AddDefinition(ver.c_str(), this->Version.c_str());
|
||||
char buf[64];
|
||||
switch(this->VersionCount)
|
||||
{
|
||||
case 3:
|
||||
{
|
||||
sprintf(buf, "%u", this->VersionPatch);
|
||||
this->Makefile->AddDefinition((ver+"_PATCH").c_str(), buf);
|
||||
} // no break
|
||||
case 2:
|
||||
{
|
||||
sprintf(buf, "%u", this->VersionMinor);
|
||||
this->Makefile->AddDefinition((ver+"_MINOR").c_str(), buf);
|
||||
} // no break
|
||||
case 1:
|
||||
{
|
||||
sprintf(buf, "%u", this->VersionMajor);
|
||||
this->Makefile->AddDefinition((ver+"_MAJOR").c_str(), buf);
|
||||
} // no break
|
||||
default: break;
|
||||
}
|
||||
|
||||
// Tell the module whether an exact version has been requested.
|
||||
std::string exact = this->Name;
|
||||
exact += "_FIND_VERSION_EXACT";
|
||||
this->Makefile->AddDefinition(exact.c_str(),
|
||||
this->VersionExact? "1":"0");
|
||||
}
|
||||
|
||||
// Load the module we found.
|
||||
found = true;
|
||||
return this->ReadListFile(mfile.c_str());
|
||||
|
|
|
@ -73,6 +73,7 @@ public:
|
|||
private:
|
||||
void AppendSuccessInformation();
|
||||
void AppendToProperty(const char* propertyName);
|
||||
bool SetModuleVariables(const std::string& components);
|
||||
bool FindModule(bool& found);
|
||||
bool HandlePackageMode();
|
||||
void FindConfig();
|
||||
|
|
Loading…
Reference in New Issue