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

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`
 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++

+ 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(ProjectHomepage)
 run_cmake(ProjectHomepage2)
 run_cmake(ProjectHomepage2)
 run_cmake(ProjectHomepageNoArg)
 run_cmake(ProjectHomepageNoArg)
+run_cmake(ProjectTwice)
 run_cmake(VersionAndLanguagesEmpty)
 run_cmake(VersionAndLanguagesEmpty)
 run_cmake(VersionEmpty)
 run_cmake(VersionEmpty)
 run_cmake(VersionInvalid)
 run_cmake(VersionInvalid)