Просмотр исходного кода

Merge topic 'project-always-set-desc-url'

f8a086a86b project(): Ensure DESCRIPTION and HOMEPAGE_URL variables are set
b27247c8df project(): Add tests verifying variables set by second project() call

Acked-by: Kitware Robot <[email protected]>
Merge-request: !2457
Brad King 7 лет назад
Родитель
Сommit
c3e27c2562

+ 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`
 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
 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`.
 When this option is given, the URL provided should be the canonical home for
 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
 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 no language is specified do c and c++

+ 26 - 0
Tests/RunCMake/project/ProjectTwice.cmake

@@ -0,0 +1,26 @@
+cmake_policy(SET CMP0048 NEW)
+project(ProjectTwiceTestFirst
+  VERSION 1.2.3.4
+  DESCRIPTION "Test Project"
+  HOMEPAGE_URL "http://example.com"
+  LANGUAGES NONE
+)
+
+project(ProjectTwiceTestSecond LANGUAGES NONE)
+
+foreach(var
+  PROJECT_VERSION
+  PROJECT_VERSION_MAJOR
+  PROJECT_VERSION_MINOR
+  PROJECT_VERSION_PATCH
+  PROJECT_VERSION_TWEAK
+  PROJECT_DESCRIPTION
+  PROJECT_HOMEPAGE_URL
+)
+  if(${var})
+    message(SEND_ERROR "${var} set but should be empty")
+  endif()
+  if(CMAKE_${var})
+    message(SEND_ERROR "CMAKE_${var} set but should be empty")
+  endif()
+endforeach()

+ 1 - 0
Tests/RunCMake/project/RunCMakeTest.cmake

@@ -15,6 +15,7 @@ run_cmake(ProjectDescriptionNoArg2)
 run_cmake(ProjectHomepage)
 run_cmake(ProjectHomepage2)
 run_cmake(ProjectHomepageNoArg)
+run_cmake(ProjectTwice)
 run_cmake(VersionAndLanguagesEmpty)
 run_cmake(VersionEmpty)
 run_cmake(VersionInvalid)