Ninja: Refactor Fortran rejection logic
Delay rejection of Fortran until after we've determined the version of the `ninja` tool to be used. This will later allow us to enable Fortran support based on the version of ninja. While at it, make the rejection an immediate fatal error. Also provide a stack trace so readers know what code tried to enable Fortran.
This commit is contained in:
parent
f4475eb92b
commit
f0a23aa3db
|
@ -319,6 +319,12 @@ void cmGlobalGenerator::FindMakeProgram(cmMakefile* mf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmGlobalGenerator::CheckLanguages(
|
||||||
|
std::vector<std::string> const& /* languages */, cmMakefile* /* mf */) const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// enable the given language
|
// enable the given language
|
||||||
//
|
//
|
||||||
// The following files are loaded in this order:
|
// The following files are loaded in this order:
|
||||||
|
@ -428,6 +434,10 @@ void cmGlobalGenerator::EnableLanguage(
|
||||||
// find and make sure CMAKE_MAKE_PROGRAM is defined
|
// find and make sure CMAKE_MAKE_PROGRAM is defined
|
||||||
this->FindMakeProgram(mf);
|
this->FindMakeProgram(mf);
|
||||||
|
|
||||||
|
if (!this->CheckLanguages(languages, mf)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// try and load the CMakeSystem.cmake if it is there
|
// try and load the CMakeSystem.cmake if it is there
|
||||||
std::string fpath = rootBin;
|
std::string fpath = rootBin;
|
||||||
bool const readCMakeSystem = !mf->GetDefinition("CMAKE_SYSTEM_LOADED");
|
bool const readCMakeSystem = !mf->GetDefinition("CMAKE_SYSTEM_LOADED");
|
||||||
|
|
|
@ -381,6 +381,8 @@ protected:
|
||||||
void SetLanguageEnabledFlag(const std::string& l, cmMakefile* mf);
|
void SetLanguageEnabledFlag(const std::string& l, cmMakefile* mf);
|
||||||
void SetLanguageEnabledMaps(const std::string& l, cmMakefile* mf);
|
void SetLanguageEnabledMaps(const std::string& l, cmMakefile* mf);
|
||||||
void FillExtensionToLanguageMap(const std::string& l, cmMakefile* mf);
|
void FillExtensionToLanguageMap(const std::string& l, cmMakefile* mf);
|
||||||
|
virtual bool CheckLanguages(std::vector<std::string> const& languages,
|
||||||
|
cmMakefile* mf) const;
|
||||||
virtual void PrintCompilerAdvice(std::ostream& os, std::string const& lang,
|
virtual void PrintCompilerAdvice(std::ostream& os, std::string const& lang,
|
||||||
const char* envVar) const;
|
const char* envVar) const;
|
||||||
|
|
||||||
|
|
|
@ -561,12 +561,22 @@ void cmGlobalNinjaGenerator::FindMakeProgram(cmMakefile* mf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmGlobalNinjaGenerator::CheckLanguages(
|
||||||
|
std::vector<std::string> const& languages, cmMakefile* mf) const
|
||||||
|
{
|
||||||
|
if (std::find(languages.begin(), languages.end(), "Fortran") !=
|
||||||
|
languages.end()) {
|
||||||
|
mf->IssueMessage(cmake::FATAL_ERROR,
|
||||||
|
"The Ninja generator does not support Fortran yet.");
|
||||||
|
cmSystemTools::SetFatalErrorOccured();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void cmGlobalNinjaGenerator::EnableLanguage(
|
void cmGlobalNinjaGenerator::EnableLanguage(
|
||||||
std::vector<std::string> const& langs, cmMakefile* mf, bool optional)
|
std::vector<std::string> const& langs, cmMakefile* mf, bool optional)
|
||||||
{
|
{
|
||||||
if (std::find(langs.begin(), langs.end(), "Fortran") != langs.end()) {
|
|
||||||
cmSystemTools::Error("The Ninja generator does not support Fortran yet.");
|
|
||||||
}
|
|
||||||
this->cmGlobalGenerator::EnableLanguage(langs, mf, optional);
|
this->cmGlobalGenerator::EnableLanguage(langs, mf, optional);
|
||||||
for (std::vector<std::string>::const_iterator l = langs.begin();
|
for (std::vector<std::string>::const_iterator l = langs.begin();
|
||||||
l != langs.end(); ++l) {
|
l != langs.end(); ++l) {
|
||||||
|
|
|
@ -355,6 +355,8 @@ protected:
|
||||||
private:
|
private:
|
||||||
std::string GetEditCacheCommand() const CM_OVERRIDE;
|
std::string GetEditCacheCommand() const CM_OVERRIDE;
|
||||||
void FindMakeProgram(cmMakefile* mf) CM_OVERRIDE;
|
void FindMakeProgram(cmMakefile* mf) CM_OVERRIDE;
|
||||||
|
bool CheckLanguages(std::vector<std::string> const& languages,
|
||||||
|
cmMakefile* mf) const CM_OVERRIDE;
|
||||||
|
|
||||||
void OpenBuildFileStream();
|
void OpenBuildFileStream();
|
||||||
void CloseBuildFileStream();
|
void CloseBuildFileStream();
|
||||||
|
|
Loading…
Reference in New Issue