summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmProjectCommand.cxx31
1 files changed, 31 insertions, 0 deletions
diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx
index 4e0fa57..66f324a 100644
--- a/Source/cmProjectCommand.cxx
+++ b/Source/cmProjectCommand.cxx
@@ -62,10 +62,13 @@ bool cmProjectCommand::InitialPass(std::vector<std::string> const& args,
bool haveVersion = false;
bool haveLanguages = false;
+ bool haveDescription = false;
std::string version;
+ std::string description;
std::vector<std::string> languages;
enum Doing
{
+ DoingDescription,
DoingLanguages,
DoingVersion
};
@@ -89,9 +92,21 @@ bool cmProjectCommand::InitialPass(std::vector<std::string> const& args,
}
haveVersion = true;
doing = DoingVersion;
+ } else if (args[i] == "DESCRIPTION") {
+ if (haveDescription) {
+ this->Makefile->IssueMessage(
+ cmake::FATAL_ERROR, "DESCRITPION may be specified at most once.");
+ cmSystemTools::SetFatalErrorOccured();
+ return true;
+ }
+ haveDescription = true;
+ doing = DoingDescription;
} else if (doing == DoingVersion) {
doing = DoingLanguages;
version = args[i];
+ } else if (doing == DoingDescription) {
+ doing = DoingLanguages;
+ description = args[i];
} else // doing == DoingLanguages
{
languages.push_back(args[i]);
@@ -197,6 +212,22 @@ bool cmProjectCommand::InitialPass(std::vector<std::string> const& args,
}
}
+ if (haveDescription) {
+ this->Makefile->AddDefinition("PROJECT_DESCRIPTION", description.c_str());
+ // Set the CMAKE_PROJECT_DESCRIPTION variable to be the highest-level
+ // project name in the tree. If there are two project commands
+ // in the same CMakeLists.txt file, and it is the top level
+ // CMakeLists.txt file, then go with the last one.
+ if (!this->Makefile->GetDefinition("CMAKE_PROJECT_DESCRIPTION") ||
+ (this->Makefile->IsRootMakefile())) {
+ this->Makefile->AddDefinition("CMAKE_PROJECT_DESCRIPTION",
+ description.c_str());
+ this->Makefile->AddCacheDefinition(
+ "CMAKE_PROJECT_DESCRIPTION", description.c_str(),
+ "Value Computed by CMake", cmStateEnums::STATIC);
+ }
+ }
+
if (languages.empty()) {
// if no language is specified do c and c++
languages.push_back("C");