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
|
||||
//
|
||||
// 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");
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue