ソースを参照

project(): Ensure DESCRIPTION and HOMEPAGE_URL variables are set

If a project() call does not have DESCRIPTION or HOMEPAGE_URL
options, it must still set the relevant variables or else those variables will
inherit values from an earlier project() call. That is inconsistent with how
VERSION is handled and is likely to be unexpected. The docs were also
ambiguous about what should happen in such cases.
Craig Scott 7 年 前
コミット
f8a086a86b
2 ファイル変更10 行追加12 行削除
  1. 2 0
      Help/command/project.rst
  2. 8 12
      Source/cmProjectCommand.cxx

+ 2 - 0
Help/command/project.rst

@@ -44,6 +44,7 @@ Variables corresponding to unspecified versions are set to the empty string
 
 
 If the optional ``DESCRIPTION`` is given, then :variable:`PROJECT_DESCRIPTION`
 If the optional ``DESCRIPTION`` is given, then :variable:`PROJECT_DESCRIPTION`
 and :variable:`<PROJECT-NAME>_DESCRIPTION` will be set to its argument.
 and :variable:`<PROJECT-NAME>_DESCRIPTION` will be set to its argument.
+These variables will be cleared if ``DESCRIPTION`` is not given.
 The description is expected to be a relatively short string, usually no more
 The description is expected to be a relatively short string, usually no more
 than a few words.
 than a few words.
 
 
@@ -51,6 +52,7 @@ The optional ``HOMEPAGE_URL`` sets the analogous variables
 :variable:`PROJECT_HOMEPAGE_URL` and :variable:`<PROJECT-NAME>_HOMEPAGE_URL`.
 :variable:`PROJECT_HOMEPAGE_URL` and :variable:`<PROJECT-NAME>_HOMEPAGE_URL`.
 When this option is given, the URL provided should be the canonical home for
 When this option is given, the URL provided should be the canonical home for
 the project.
 the project.
+These variables will be cleared if ``HOMEPAGE_URL`` is not given.
 
 
 Note that the description and homepage URL may be used as defaults for
 Note that the description and homepage URL may be used as defaults for
 things like packaging meta-data, documentation, etc.
 things like packaging meta-data, documentation, etc.

+ 8 - 12
Source/cmProjectCommand.cxx

@@ -300,19 +300,15 @@ bool cmProjectCommand::InitialPass(std::vector<std::string> const& args,
     }
     }
   }
   }
 
 
-  if (haveDescription) {
-    this->Makefile->AddDefinition("PROJECT_DESCRIPTION", description.c_str());
-    this->Makefile->AddDefinition(projectName + "_DESCRIPTION",
-                                  description.c_str());
-    TopLevelCMakeVarCondSet("CMAKE_PROJECT_DESCRIPTION", description.c_str());
-  }
+  this->Makefile->AddDefinition("PROJECT_DESCRIPTION", description.c_str());
+  this->Makefile->AddDefinition(projectName + "_DESCRIPTION",
+                                description.c_str());
+  TopLevelCMakeVarCondSet("CMAKE_PROJECT_DESCRIPTION", description.c_str());
 
 
-  if (haveHomepage) {
-    this->Makefile->AddDefinition("PROJECT_HOMEPAGE_URL", homepage.c_str());
-    this->Makefile->AddDefinition(projectName + "_HOMEPAGE_URL",
-                                  homepage.c_str());
-    TopLevelCMakeVarCondSet("CMAKE_PROJECT_HOMEPAGE_URL", homepage.c_str());
-  }
+  this->Makefile->AddDefinition("PROJECT_HOMEPAGE_URL", homepage.c_str());
+  this->Makefile->AddDefinition(projectName + "_HOMEPAGE_URL",
+                                homepage.c_str());
+  TopLevelCMakeVarCondSet("CMAKE_PROJECT_HOMEPAGE_URL", homepage.c_str());
 
 
   if (languages.empty()) {
   if (languages.empty()) {
     // if no language is specified do c and c++
     // if no language is specified do c and c++