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:
Brad King 2016-09-21 13:52:01 -04:00
parent f4475eb92b
commit f0a23aa3db
4 changed files with 27 additions and 3 deletions

View File

@ -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
//
// The following files are loaded in this order:
@ -428,6 +434,10 @@ void cmGlobalGenerator::EnableLanguage(
// find and make sure CMAKE_MAKE_PROGRAM is defined
this->FindMakeProgram(mf);
if (!this->CheckLanguages(languages, mf)) {
return;
}
// try and load the CMakeSystem.cmake if it is there
std::string fpath = rootBin;
bool const readCMakeSystem = !mf->GetDefinition("CMAKE_SYSTEM_LOADED");

View File

@ -381,6 +381,8 @@ protected:
void SetLanguageEnabledFlag(const std::string& l, cmMakefile* mf);
void SetLanguageEnabledMaps(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,
const char* envVar) const;

View File

@ -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(
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);
for (std::vector<std::string>::const_iterator l = langs.begin();
l != langs.end(); ++l) {

View File

@ -355,6 +355,8 @@ protected:
private:
std::string GetEditCacheCommand() const CM_OVERRIDE;
void FindMakeProgram(cmMakefile* mf) CM_OVERRIDE;
bool CheckLanguages(std::vector<std::string> const& languages,
cmMakefile* mf) const CM_OVERRIDE;
void OpenBuildFileStream();
void CloseBuildFileStream();