Merge topic 'cmState-ProjectName'

637c56b4 cmGlobalGenerator: Implement FillProjectMap in terms of cmState.
b3f2299e cmState: Move ProjectName from cmMakefile.
6ce940ac cmMakefile: Use std::string in ProjectName API.
e8c0341d cmMakefile: Out-of-line GetProjectName.
This commit is contained in:
Brad King 2015-08-27 10:04:09 -04:00 committed by CMake Topic Stage
commit 0d0b9b52f8
7 changed files with 34 additions and 17 deletions

View File

@ -115,7 +115,9 @@ void CCONV cmAddCacheDefinition(void *arg, const char* name,
const char* CCONV cmGetProjectName(void *arg)
{
cmMakefile *mf = static_cast<cmMakefile *>(arg);
return mf->GetProjectName();
static std::string name;
name = mf->GetProjectName();
return name.c_str();
}
const char* CCONV cmGetHomeDirectory(void *arg)

View File

@ -2112,18 +2112,19 @@ void cmGlobalGenerator::FillProjectMap()
for(i = 0; i < this->LocalGenerators.size(); ++i)
{
// for each local generator add all projects
cmLocalGenerator *lg = this->LocalGenerators[i];
cmState::Snapshot snp = this->LocalGenerators[i]->GetStateSnapshot();
std::string name;
do
{
if (name != lg->GetMakefile()->GetProjectName())
std::string snpProjName = snp.GetProjectName();
if (name != snpProjName)
{
name = lg->GetMakefile()->GetProjectName();
name = snpProjName;
this->ProjectMap[name].push_back(this->LocalGenerators[i]);
}
lg = lg->GetParent();
snp = snp.GetBuildsystemDirectoryParent();
}
while (lg);
while (snp.IsValid());
}
}

View File

@ -1525,7 +1525,7 @@ void cmMakefile::InitializeFromParent(cmMakefile* parent)
parent->GetProperty("LINK_DIRECTORIES"));
// the initial project name
this->ProjectName = parent->ProjectName;
this->SetProjectName(parent->GetProjectName());
// Copy include regular expressions.
this->ComplainFileRegularExpression = parent->ComplainFileRegularExpression;
@ -2044,11 +2044,15 @@ void cmMakefile::RemoveCacheDefinition(const std::string& name)
this->GetState()->RemoveCacheEntry(name);
}
void cmMakefile::SetProjectName(const char* p)
void cmMakefile::SetProjectName(std::string const& p)
{
this->ProjectName = p;
this->StateSnapshot.SetProjectName(p);
}
std::string cmMakefile::GetProjectName() const
{
return this->StateSnapshot.GetProjectName();
}
void cmMakefile::AddGlobalLinkInformation(const std::string& name,
cmTarget& target)

View File

@ -274,15 +274,12 @@ public:
/**
* Specify the name of the project for this build.
*/
void SetProjectName(const char*);
void SetProjectName(std::string const& name);
/**
* Get the name of the project for this build.
*/
const char* GetProjectName() const
{
return this->ProjectName.c_str();
}
std::string GetProjectName() const;
/** Get the configurations to be generated. */
std::string GetConfigurations(std::vector<std::string>& configs,
@ -813,8 +810,6 @@ protected:
mutable std::set<cmListFileContext> CMP0054ReportedIds;
std::string ProjectName; // project name
// libraries, classes, and executables
mutable cmTargets Targets;
#if defined(CMAKE_BUILD_WITH_CMAKE)

View File

@ -20,7 +20,7 @@ bool cmProjectCommand
this->SetError("PROJECT called with incorrect number of arguments");
return false;
}
this->Makefile->SetProjectName(args[0].c_str());
this->Makefile->SetProjectName(args[0]);
std::string bindir = args[0];
bindir += "_BINARY_DIR";

View File

@ -75,6 +75,8 @@ struct cmState::BuildsystemDirectoryStateType
std::vector<std::string> CompileOptions;
std::vector<cmListFileBacktrace> CompileOptionsBacktraces;
std::string ProjectName;
cmPropertyMap Properties;
std::vector<cmState::Snapshot> Children;
@ -1322,6 +1324,16 @@ cmState::Directory cmState::Snapshot::GetDirectory() const
return Directory(this->Position->BuildSystemDirectory, *this);
}
void cmState::Snapshot::SetProjectName(const std::string& name)
{
this->Position->BuildSystemDirectory->ProjectName = name;
}
std::string cmState::Snapshot::GetProjectName() const
{
return this->Position->BuildSystemDirectory->ProjectName;
}
cmState::Directory::Directory(
cmLinkedTree<BuildsystemDirectoryStateType>::iterator iter,
const cmState::Snapshot& snapshot)

View File

@ -88,6 +88,9 @@ public:
Directory GetDirectory() const;
void SetProjectName(std::string const& name);
std::string GetProjectName() const;
struct StrictWeakOrder
{
bool operator()(const cmState::Snapshot& lhs,