Introduce a cmGlobalGenerator::ResolveLanguageCompiler function
It is factored out of cmGlobalUnixMakefileGenerator3::EnableLanguage, and may be used by other generators to resolve CMAKE_*_COMPILER settings.
This commit is contained in:
parent
5b114c9bee
commit
557956f348
|
@ -77,6 +77,79 @@ cmGlobalGenerator::~cmGlobalGenerator()
|
|||
this->ClearExportSets();
|
||||
}
|
||||
|
||||
void cmGlobalGenerator::ResolveLanguageCompiler(const std::string &lang,
|
||||
cmMakefile *mf,
|
||||
bool optional) {
|
||||
std::string langComp = "CMAKE_";
|
||||
langComp += lang;
|
||||
langComp += "_COMPILER";
|
||||
|
||||
if(!mf->GetDefinition(langComp.c_str()))
|
||||
{
|
||||
if(!optional)
|
||||
{
|
||||
cmSystemTools::Error(langComp.c_str(),
|
||||
" not set, after EnableLanguage");
|
||||
}
|
||||
return;
|
||||
}
|
||||
const char* name = mf->GetRequiredDefinition(langComp.c_str());
|
||||
std::string path;
|
||||
if(!cmSystemTools::FileIsFullPath(name))
|
||||
{
|
||||
path = cmSystemTools::FindProgram(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = name;
|
||||
}
|
||||
if((path.size() == 0 || !cmSystemTools::FileExists(path.c_str()))
|
||||
&& (optional==false))
|
||||
{
|
||||
std::string message = "your ";
|
||||
message += lang;
|
||||
message += " compiler: \"";
|
||||
message += name;
|
||||
message += "\" was not found. Please set ";
|
||||
message += langComp;
|
||||
message += " to a valid compiler path or name.";
|
||||
cmSystemTools::Error(message.c_str());
|
||||
path = name;
|
||||
}
|
||||
std::string doc = lang;
|
||||
doc += " compiler.";
|
||||
const char* cname = this->GetCMakeInstance()->
|
||||
GetCacheManager()->GetCacheValue(langComp.c_str());
|
||||
std::string changeVars;
|
||||
if(cname && (path != cname) && (optional==false))
|
||||
{
|
||||
std::string cnameString = cname;
|
||||
std::string pathString = path;
|
||||
// get rid of potentially multiple slashes:
|
||||
cmSystemTools::ConvertToUnixSlashes(cnameString);
|
||||
cmSystemTools::ConvertToUnixSlashes(pathString);
|
||||
if (cnameString != pathString)
|
||||
{
|
||||
const char* cvars =
|
||||
this->GetCMakeInstance()->GetProperty(
|
||||
"__CMAKE_DELETE_CACHE_CHANGE_VARS_");
|
||||
if(cvars)
|
||||
{
|
||||
changeVars += cvars;
|
||||
changeVars += ";";
|
||||
}
|
||||
changeVars += langComp;
|
||||
changeVars += ";";
|
||||
changeVars += cname;
|
||||
this->GetCMakeInstance()->SetProperty(
|
||||
"__CMAKE_DELETE_CACHE_CHANGE_VARS_",
|
||||
changeVars.c_str());
|
||||
}
|
||||
}
|
||||
mf->AddCacheDefinition(langComp.c_str(), path.c_str(),
|
||||
doc.c_str(), cmCacheManager::FILEPATH);
|
||||
}
|
||||
|
||||
// Find the make program for the generator, required for try compiles
|
||||
void cmGlobalGenerator::FindMakeProgram(cmMakefile* mf)
|
||||
{
|
||||
|
|
|
@ -76,6 +76,13 @@ public:
|
|||
virtual void EnableLanguage(std::vector<std::string>const& languages,
|
||||
cmMakefile *, bool optional);
|
||||
|
||||
/**
|
||||
* Resolve the CMAKE_<lang>_COMPILER setting for the given language.
|
||||
* Intended to be called from EnableLanguage.
|
||||
*/
|
||||
void ResolveLanguageCompiler(const std::string &lang, cmMakefile *mf,
|
||||
bool optional);
|
||||
|
||||
/**
|
||||
* Try to determine system infomation, get it from another generator
|
||||
*/
|
||||
|
|
|
@ -39,7 +39,6 @@ void cmGlobalUnixMakefileGenerator3
|
|||
bool optional)
|
||||
{
|
||||
this->cmGlobalGenerator::EnableLanguage(languages, mf, optional);
|
||||
std::string path;
|
||||
for(std::vector<std::string>::const_iterator l = languages.begin();
|
||||
l != languages.end(); ++l)
|
||||
{
|
||||
|
@ -47,74 +46,7 @@ void cmGlobalUnixMakefileGenerator3
|
|||
{
|
||||
continue;
|
||||
}
|
||||
const char* lang = l->c_str();
|
||||
std::string langComp = "CMAKE_";
|
||||
langComp += lang;
|
||||
langComp += "_COMPILER";
|
||||
|
||||
if(!mf->GetDefinition(langComp.c_str()))
|
||||
{
|
||||
if(!optional)
|
||||
{
|
||||
cmSystemTools::Error(langComp.c_str(),
|
||||
" not set, after EnableLanguage");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
const char* name = mf->GetRequiredDefinition(langComp.c_str());
|
||||
if(!cmSystemTools::FileIsFullPath(name))
|
||||
{
|
||||
path = cmSystemTools::FindProgram(name);
|
||||
}
|
||||
else
|
||||
{
|
||||
path = name;
|
||||
}
|
||||
if((path.size() == 0 || !cmSystemTools::FileExists(path.c_str()))
|
||||
&& (optional==false))
|
||||
{
|
||||
std::string message = "your ";
|
||||
message += lang;
|
||||
message += " compiler: \"";
|
||||
message += name;
|
||||
message += "\" was not found. Please set ";
|
||||
message += langComp;
|
||||
message += " to a valid compiler path or name.";
|
||||
cmSystemTools::Error(message.c_str());
|
||||
path = name;
|
||||
}
|
||||
std::string doc = lang;
|
||||
doc += " compiler.";
|
||||
const char* cname = this->GetCMakeInstance()->
|
||||
GetCacheManager()->GetCacheValue(langComp.c_str());
|
||||
std::string changeVars;
|
||||
if(cname && (path != cname) && (optional==false))
|
||||
{
|
||||
std::string cnameString = cname;
|
||||
std::string pathString = path;
|
||||
// get rid of potentially multiple slashes:
|
||||
cmSystemTools::ConvertToUnixSlashes(cnameString);
|
||||
cmSystemTools::ConvertToUnixSlashes(pathString);
|
||||
if (cnameString != pathString)
|
||||
{
|
||||
const char* cvars =
|
||||
this->GetCMakeInstance()->GetProperty(
|
||||
"__CMAKE_DELETE_CACHE_CHANGE_VARS_");
|
||||
if(cvars)
|
||||
{
|
||||
changeVars += cvars;
|
||||
changeVars += ";";
|
||||
}
|
||||
changeVars += langComp;
|
||||
changeVars += ";";
|
||||
changeVars += cname;
|
||||
this->GetCMakeInstance()->SetProperty(
|
||||
"__CMAKE_DELETE_CACHE_CHANGE_VARS_",
|
||||
changeVars.c_str());
|
||||
}
|
||||
}
|
||||
mf->AddCacheDefinition(langComp.c_str(), path.c_str(),
|
||||
doc.c_str(), cmCacheManager::FILEPATH);
|
||||
this->ResolveLanguageCompiler(*l, mf, optional);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue