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 // 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");

View File

@ -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;

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( 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) {

View File

@ -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();