Merge topic 'constify'

2cbf0311 cmGlobalGenerator: Make SelectMakeProgram const.
b4ff38a5 cmGlobalGenerator: Make CheckALLOW_DUPLICATE_CUSTOM_TARGETS const
8aeddf1f cmGlobalGenerator: Make some API const.
8fd0f2a7 cmGeneratorTarget: Hold a const global generator.
46315320 cmComputeLinkDepends: Hold a const global generator.
This commit is contained in:
Brad King 2014-01-13 10:25:32 -05:00 committed by CMake Topic Stage
commit 8d989d1788
9 changed files with 73 additions and 57 deletions

View File

@ -63,7 +63,7 @@ private:
cmTarget const* HeadTarget; cmTarget const* HeadTarget;
cmMakefile* Makefile; cmMakefile* Makefile;
cmLocalGenerator* LocalGenerator; cmLocalGenerator* LocalGenerator;
cmGlobalGenerator* GlobalGenerator; cmGlobalGenerator const* GlobalGenerator;
cmake* CMakeInstance; cmake* CMakeInstance;
bool DebugMode; bool DebugMode;

View File

@ -469,7 +469,7 @@ private:
cmTarget* Target; cmTarget* Target;
cmGeneratorTarget* GeneratorTarget; cmGeneratorTarget* GeneratorTarget;
cmMakefile* Makefile; cmMakefile* Makefile;
cmGlobalGenerator* GlobalGenerator; cmGlobalGenerator const* GlobalGenerator;
typedef cmGeneratorTarget::SourceEntry SourceEntry; typedef cmGeneratorTarget::SourceEntry SourceEntry;
SourceEntry* CurrentEntry; SourceEntry* CurrentEntry;
std::queue<cmSourceFile*> SourceQueue; std::queue<cmSourceFile*> SourceQueue;

View File

@ -50,7 +50,7 @@ public:
cmTarget* Target; cmTarget* Target;
cmMakefile* Makefile; cmMakefile* Makefile;
cmLocalGenerator* LocalGenerator; cmLocalGenerator* LocalGenerator;
cmGlobalGenerator* GlobalGenerator; cmGlobalGenerator const* GlobalGenerator;
std::string ModuleDefinitionFile; std::string ModuleDefinitionFile;

View File

@ -90,7 +90,7 @@ bool cmGlobalGenerator::SetGeneratorToolset(std::string const& ts)
} }
std::string cmGlobalGenerator::SelectMakeProgram(const char* makeProgram, std::string cmGlobalGenerator::SelectMakeProgram(const char* makeProgram,
std::string makeDefault) std::string makeDefault) const
{ {
if(cmSystemTools::IsOff(makeProgram)) if(cmSystemTools::IsOff(makeProgram))
{ {
@ -111,7 +111,7 @@ std::string cmGlobalGenerator::SelectMakeProgram(const char* makeProgram,
void cmGlobalGenerator::ResolveLanguageCompiler(const std::string &lang, void cmGlobalGenerator::ResolveLanguageCompiler(const std::string &lang,
cmMakefile *mf, cmMakefile *mf,
bool optional) bool optional) const
{ {
std::string langComp = "CMAKE_"; std::string langComp = "CMAKE_";
langComp += lang; langComp += lang;
@ -723,7 +723,7 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalGenerator::PrintCompilerAdvice(std::ostream& os, void cmGlobalGenerator::PrintCompilerAdvice(std::ostream& os,
std::string lang, std::string lang,
const char* envVar) const char* envVar) const
{ {
// Subclasses override this method if they do not support this advice. // Subclasses override this method if they do not support this advice.
os << os <<
@ -744,7 +744,7 @@ void cmGlobalGenerator::PrintCompilerAdvice(std::ostream& os,
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf, void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
std::string lang) std::string lang) const
{ {
std::string compilerIdVar = "CMAKE_" + lang + "_COMPILER_ID"; std::string compilerIdVar = "CMAKE_" + lang + "_COMPILER_ID";
const char* compilerId = mf->GetDefinition(compilerIdVar.c_str()); const char* compilerId = mf->GetDefinition(compilerIdVar.c_str());
@ -782,13 +782,16 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
const char* const char*
cmGlobalGenerator::GetLanguageOutputExtension(cmSourceFile const& source) cmGlobalGenerator::GetLanguageOutputExtension(cmSourceFile const& source) const
{ {
if(const char* lang = source.GetLanguage()) if(const char* lang = source.GetLanguage())
{ {
if(this->LanguageToOutputExtension.count(lang) > 0) std::map<cmStdString, cmStdString>::const_iterator it =
this->LanguageToOutputExtension.find(lang);
if(it != this->LanguageToOutputExtension.end())
{ {
return this->LanguageToOutputExtension[lang].c_str(); return it->second.c_str();
} }
} }
else else
@ -809,7 +812,7 @@ cmGlobalGenerator::GetLanguageOutputExtension(cmSourceFile const& source)
} }
const char* cmGlobalGenerator::GetLanguageFromExtension(const char* ext) const char* cmGlobalGenerator::GetLanguageFromExtension(const char* ext) const
{ {
// if there is an extension and it starts with . then move past the // if there is an extension and it starts with . then move past the
// . because the extensions are not stored with a . in the map // . because the extensions are not stored with a . in the map
@ -817,9 +820,11 @@ const char* cmGlobalGenerator::GetLanguageFromExtension(const char* ext)
{ {
++ext; ++ext;
} }
if(this->ExtensionToLanguage.count(ext) > 0) std::map<cmStdString, cmStdString>::const_iterator it
= this->ExtensionToLanguage.find(ext);
if(it != this->ExtensionToLanguage.end())
{ {
return this->ExtensionToLanguage[ext].c_str(); return it->second.c_str();
} }
return 0; return 0;
} }
@ -943,7 +948,7 @@ void cmGlobalGenerator::FillExtensionToLanguageMap(const char* l,
} }
} }
bool cmGlobalGenerator::IgnoreFile(const char* l) bool cmGlobalGenerator::IgnoreFile(const char* l) const
{ {
if(this->GetLanguageFromExtension(l)) if(this->GetLanguageFromExtension(l))
{ {
@ -966,15 +971,22 @@ bool cmGlobalGenerator::IsDependedOn(const char* project,
cmTarget const* targetIn) cmTarget const* targetIn)
{ {
// Get all local gens for this project // Get all local gens for this project
std::vector<cmLocalGenerator*>* gens = &this->ProjectMap[project]; std::map<cmStdString, std::vector<cmLocalGenerator*> >::const_iterator it =
// loop over local gens and get the targets for each one this->ProjectMap.find(project);
for(unsigned int i = 0; i < gens->size(); ++i) if (it == this->ProjectMap.end())
{ {
cmTargets& targets = (*gens)[i]->GetMakefile()->GetTargets(); return false;
for (cmTargets::iterator l = targets.begin(); }
// loop over local gens and get the targets for each one
for(std::vector<cmLocalGenerator*>::const_iterator geIt = it->second.begin();
geIt != it->second.end(); ++geIt)
{
cmTargets const& targets = (*geIt)->GetMakefile()->GetTargets();
for (cmTargets::const_iterator l = targets.begin();
l != targets.end(); l++) l != targets.end(); l++)
{ {
cmTarget& target = l->second; cmTarget const& target = l->second;
TargetDependSet const& tgtdeps = this->GetTargetDirectDepends(target); TargetDependSet const& tgtdeps = this->GetTargetDirectDepends(target);
if(tgtdeps.count(targetIn)) if(tgtdeps.count(targetIn))
{ {
@ -1064,7 +1076,7 @@ void cmGlobalGenerator::AddCMP0042WarnTarget(const std::string& target)
this->CMP0042WarnTargets.insert(target); this->CMP0042WarnTargets.insert(target);
} }
bool cmGlobalGenerator::CheckALLOW_DUPLICATE_CUSTOM_TARGETS() bool cmGlobalGenerator::CheckALLOW_DUPLICATE_CUSTOM_TARGETS() const
{ {
// If the property is not enabled then okay. // If the property is not enabled then okay.
if(!this->CMakeInstance if(!this->CMakeInstance
@ -1899,7 +1911,7 @@ void cmGlobalGenerator::SetConfiguredFilesPath(cmGlobalGenerator* gen)
} }
bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root, bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
cmLocalGenerator* gen) cmLocalGenerator* gen) const
{ {
if(!gen || gen == root) if(!gen || gen == root)
{ {
@ -1919,7 +1931,7 @@ bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
} }
bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root, bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
cmTarget& target) cmTarget const& target) const
{ {
if(target.GetType() == cmTarget::INTERFACE_LIBRARY if(target.GetType() == cmTarget::INTERFACE_LIBRARY
|| target.GetPropertyAsBool("EXCLUDE_FROM_ALL")) || target.GetPropertyAsBool("EXCLUDE_FROM_ALL"))
@ -1935,16 +1947,17 @@ bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
} }
} }
void cmGlobalGenerator::GetEnabledLanguages(std::vector<std::string>& lang) void
cmGlobalGenerator::GetEnabledLanguages(std::vector<std::string>& lang) const
{ {
for(std::map<cmStdString, bool>::iterator i = for(std::map<cmStdString, bool>::const_iterator i =
this->LanguageEnabled.begin(); i != this->LanguageEnabled.end(); ++i) this->LanguageEnabled.begin(); i != this->LanguageEnabled.end(); ++i)
{ {
lang.push_back(i->first); lang.push_back(i->first);
} }
} }
int cmGlobalGenerator::GetLinkerPreference(const char* lang) int cmGlobalGenerator::GetLinkerPreference(const char* lang) const
{ {
std::map<cmStdString, int>::const_iterator it = std::map<cmStdString, int>::const_iterator it =
this->LanguageToLinkerPreference.find(lang); this->LanguageToLinkerPreference.find(lang);
@ -1990,10 +2003,10 @@ void cmGlobalGenerator::FillLocalGeneratorToTargetMap()
{ {
cmLocalGenerator* lg = *lgi; cmLocalGenerator* lg = *lgi;
cmMakefile* mf = lg->GetMakefile(); cmMakefile* mf = lg->GetMakefile();
cmTargets& targets = mf->GetTargets(); cmTargets const& targets = mf->GetTargets();
for(cmTargets::iterator t = targets.begin(); t != targets.end(); ++t) for(cmTargets::const_iterator t = targets.begin(); t != targets.end(); ++t)
{ {
cmTarget& target = t->second; cmTarget const& target = t->second;
// Consider the directory containing the target and all its // Consider the directory containing the target and all its
// parents until something excludes the target. // parents until something excludes the target.
@ -2022,15 +2035,16 @@ void cmGlobalGenerator::FillLocalGeneratorToTargetMap()
///! Find a local generator by its startdirectory ///! Find a local generator by its startdirectory
cmLocalGenerator* cmGlobalGenerator::FindLocalGenerator(const char* start_dir) cmLocalGenerator*
cmGlobalGenerator::FindLocalGenerator(const char* start_dir) const
{ {
std::vector<cmLocalGenerator*>* gens = &this->LocalGenerators; for(std::vector<cmLocalGenerator*>::const_iterator it =
for(unsigned int i = 0; i < gens->size(); ++i) this->LocalGenerators.begin(); it != this->LocalGenerators.end(); ++it)
{ {
std::string sd = (*gens)[i]->GetMakefile()->GetStartDirectory(); std::string sd = (*it)->GetMakefile()->GetStartDirectory();
if (sd == start_dir) if (sd == start_dir)
{ {
return (*gens)[i]; return *it;
} }
} }
return 0; return 0;
@ -2513,11 +2527,13 @@ cmGlobalGenerator::GenerateRuleFile(std::string const& output) const
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
std::string cmGlobalGenerator::GetSharedLibFlagsForLanguage( std::string cmGlobalGenerator::GetSharedLibFlagsForLanguage(
std::string const& l) std::string const& l) const
{ {
if(this->LanguageToOriginalSharedLibFlags.count(l) > 0) std::map<cmStdString, cmStdString>::const_iterator it =
this->LanguageToOriginalSharedLibFlags.find(l);
if(it != this->LanguageToOriginalSharedLibFlags.end())
{ {
return this->LanguageToOriginalSharedLibFlags[l]; return it->second;
} }
return ""; return "";
} }
@ -2648,7 +2664,7 @@ void cmGlobalGenerator::GetTargetSets(TargetDependSet& projectTargets,
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool cmGlobalGenerator::IsRootOnlyTarget(cmTarget* target) bool cmGlobalGenerator::IsRootOnlyTarget(cmTarget* target) const
{ {
return (target->GetType() == cmTarget::GLOBAL_TARGET || return (target->GetType() == cmTarget::GLOBAL_TARGET ||
strcmp(target->GetName(), this->GetAllTargetName()) == 0); strcmp(target->GetName(), this->GetAllTargetName()) == 0);

View File

@ -80,7 +80,7 @@ public:
void SetLanguageEnabled(const char*, cmMakefile* mf); void SetLanguageEnabled(const char*, cmMakefile* mf);
bool GetLanguageEnabled(const char*) const; bool GetLanguageEnabled(const char*) const;
void ClearEnabledLanguages(); void ClearEnabledLanguages();
void GetEnabledLanguages(std::vector<std::string>& lang); void GetEnabledLanguages(std::vector<std::string>& lang) const;
/** /**
* Try to determine system infomation such as shared library * Try to determine system infomation such as shared library
* extension, pthreads, byte order etc. * extension, pthreads, byte order etc.
@ -93,7 +93,7 @@ public:
* Intended to be called from EnableLanguage. * Intended to be called from EnableLanguage.
*/ */
void ResolveLanguageCompiler(const std::string &lang, cmMakefile *mf, void ResolveLanguageCompiler(const std::string &lang, cmMakefile *mf,
bool optional); bool optional) const;
/** /**
* Try to determine system infomation, get it from another generator * Try to determine system infomation, get it from another generator
@ -182,13 +182,13 @@ public:
bool GetToolSupportsColor() const { return this->ToolSupportsColor; } bool GetToolSupportsColor() const { return this->ToolSupportsColor; }
///! return the language for the given extension ///! return the language for the given extension
const char* GetLanguageFromExtension(const char* ext); const char* GetLanguageFromExtension(const char* ext) const;
///! is an extension to be ignored ///! is an extension to be ignored
bool IgnoreFile(const char* ext); bool IgnoreFile(const char* ext) const;
///! What is the preference for linkers and this language (None or Prefered) ///! What is the preference for linkers and this language (None or Prefered)
int GetLinkerPreference(const char* lang); int GetLinkerPreference(const char* lang) const;
///! What is the object file extension for a given source file? ///! What is the object file extension for a given source file?
const char* GetLanguageOutputExtension(cmSourceFile const&); const char* GetLanguageOutputExtension(cmSourceFile const&) const;
///! What is the configurations directory variable called? ///! What is the configurations directory variable called?
virtual const char* GetCMakeCFGIntDir() const { return "."; } virtual const char* GetCMakeCFGIntDir() const { return "."; }
@ -220,7 +220,7 @@ public:
target in the project */ target in the project */
bool IsDependedOn(const char* project, cmTarget const* target); bool IsDependedOn(const char* project, cmTarget const* target);
///! Find a local generator by its startdirectory ///! Find a local generator by its startdirectory
cmLocalGenerator* FindLocalGenerator(const char* start_dir); cmLocalGenerator* FindLocalGenerator(const char* start_dir) const;
/** Append the subdirectory for the given configuration. If anything is /** Append the subdirectory for the given configuration. If anything is
appended the given prefix and suffix will be appended around it, which appended the given prefix and suffix will be appended around it, which
@ -293,7 +293,7 @@ public:
i.e. "Can I build Debug and Release in the same tree?" */ i.e. "Can I build Debug and Release in the same tree?" */
virtual bool IsMultiConfig() { return false; } virtual bool IsMultiConfig() { return false; }
std::string GetSharedLibFlagsForLanguage(std::string const& lang); std::string GetSharedLibFlagsForLanguage(std::string const& lang) const;
/** Generate an <output>.rule file path for a given command output. */ /** Generate an <output>.rule file path for a given command output. */
virtual std::string GenerateRuleFile(std::string const& output) const; virtual std::string GenerateRuleFile(std::string const& output) const;
@ -325,7 +325,7 @@ protected:
virtual void GetTargetSets(TargetDependSet& projectTargets, virtual void GetTargetSets(TargetDependSet& projectTargets,
TargetDependSet& originalTargets, TargetDependSet& originalTargets,
cmLocalGenerator* root, GeneratorVector const&); cmLocalGenerator* root, GeneratorVector const&);
virtual bool IsRootOnlyTarget(cmTarget* target); bool IsRootOnlyTarget(cmTarget* target) const;
void AddTargetDepends(cmTarget const* target, void AddTargetDepends(cmTarget const* target,
TargetDependSet& projectTargets); TargetDependSet& projectTargets);
void SetLanguageEnabledFlag(const char* l, cmMakefile* mf); void SetLanguageEnabledFlag(const char* l, cmMakefile* mf);
@ -334,7 +334,7 @@ protected:
virtual bool ComputeTargetDepends(); virtual bool ComputeTargetDepends();
virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS(); virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS() const;
bool CheckTargets(); bool CheckTargets();
typedef std::vector<std::pair<cmQtAutoGenerators, typedef std::vector<std::pair<cmQtAutoGenerators,
@ -342,14 +342,14 @@ protected:
void CreateQtAutoGeneratorsTargets(AutogensType& autogens); void CreateQtAutoGeneratorsTargets(AutogensType& autogens);
std::string SelectMakeProgram(const char* makeProgram, std::string SelectMakeProgram(const char* makeProgram,
std::string makeDefault = ""); std::string makeDefault = "") const;
// Fill the ProjectMap, this must be called after LocalGenerators // Fill the ProjectMap, this must be called after LocalGenerators
// has been populated. // has been populated.
void FillProjectMap(); void FillProjectMap();
void CheckLocalGenerators(); void CheckLocalGenerators();
bool IsExcluded(cmLocalGenerator* root, cmLocalGenerator* gen); bool IsExcluded(cmLocalGenerator* root, cmLocalGenerator* gen) const;
bool IsExcluded(cmLocalGenerator* root, cmTarget& target); bool IsExcluded(cmLocalGenerator* root, cmTarget const& target) const;
void FillLocalGeneratorToTargetMap(); void FillLocalGeneratorToTargetMap();
void CreateDefaultGlobalTargets(cmTargets* targets); void CreateDefaultGlobalTargets(cmTargets* targets);
cmTarget CreateGlobalTarget(const char* name, const char* message, cmTarget CreateGlobalTarget(const char* name, const char* message,
@ -418,8 +418,8 @@ private:
void FinalizeTargetCompileInfo(); void FinalizeTargetCompileInfo();
virtual void PrintCompilerAdvice(std::ostream& os, std::string lang, virtual void PrintCompilerAdvice(std::ostream& os, std::string lang,
const char* envVar); const char* envVar) const;
void CheckCompilerIdCompatibility(cmMakefile* mf, std::string lang); void CheckCompilerIdCompatibility(cmMakefile* mf, std::string lang) const;
cmExternalMakefileProjectGenerator* ExtraGenerator; cmExternalMakefileProjectGenerator* ExtraGenerator;

View File

@ -304,7 +304,7 @@ protected:
/// Overloaded methods. /// Overloaded methods.
/// @see cmGlobalGenerator::CheckALLOW_DUPLICATE_CUSTOM_TARGETS() /// @see cmGlobalGenerator::CheckALLOW_DUPLICATE_CUSTOM_TARGETS()
virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS() { return true; } virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS() const { return true; }
private: private:

View File

@ -161,7 +161,7 @@ protected:
const char* GetRebuildCacheTargetName() const { return "rebuild_cache"; } const char* GetRebuildCacheTargetName() const { return "rebuild_cache"; }
const char* GetCleanTargetName() const { return "clean"; } const char* GetCleanTargetName() const { return "clean"; }
virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS() { return true; } virtual bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS() const { return true; }
// Some make programs (Borland) do not keep a rule if there are no // Some make programs (Borland) do not keep a rule if there are no
// dependencies or commands. This is a problem for creating rules // dependencies or commands. This is a problem for creating rules

View File

@ -110,7 +110,7 @@ protected:
private: private:
virtual std::string GetVSMakeProgram() = 0; virtual std::string GetVSMakeProgram() = 0;
void PrintCompilerAdvice(std::ostream&, std::string, const char*) {} void PrintCompilerAdvice(std::ostream&, std::string, const char*) const {}
void ComputeTargetObjects(cmGeneratorTarget* gt) const; void ComputeTargetObjects(cmGeneratorTarget* gt) const;
void FollowLinkDepends(cmTarget const* target, void FollowLinkDepends(cmTarget const* target,

View File

@ -212,7 +212,7 @@ protected:
std::vector<cmXCodeObject*> XCodeObjects; std::vector<cmXCodeObject*> XCodeObjects;
cmXCodeObject* RootObject; cmXCodeObject* RootObject;
private: private:
void PrintCompilerAdvice(std::ostream&, std::string, const char*) {} void PrintCompilerAdvice(std::ostream&, std::string, const char*) const {}
void ComputeTargetObjects(cmGeneratorTarget* gt) const; void ComputeTargetObjects(cmGeneratorTarget* gt) const;
std::string GetObjectsNormalDirectory( std::string GetObjectsNormalDirectory(