Browse Source

CPack: Fix regression in DEB generator description

Fixes: #20102
Kyle Edwards 5 years ago
parent
commit
d491f34a5e

+ 3 - 1
Modules/CPack.cmake

@@ -470,8 +470,10 @@ if(CMAKE_PROJECT_HOMEPAGE_URL)
     "${CMAKE_PROJECT_HOMEPAGE_URL}")
 endif()
 
-_cpack_set_default(CPACK_PACKAGE_DESCRIPTION_FILE
+set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE
   "${CMAKE_ROOT}/Templates/CPack.GenericDescription.txt")
+_cpack_set_default(CPACK_PACKAGE_DESCRIPTION_FILE
+  "${CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE}")
 _cpack_set_default(CPACK_RESOURCE_FILE_LICENSE
   "${CMAKE_ROOT}/Templates/CPack.GenericLicense.txt")
 _cpack_set_default(CPACK_RESOURCE_FILE_README

+ 9 - 2
Modules/Internal/CPack/CPackDeb.cmake

@@ -498,6 +498,11 @@ function(cpack_deb_prepare_package_vars)
 
   # Description: (mandatory)
   # Try package description first
+  if(CPACK_USED_DEFAULT_PACKAGE_DESCRIPTION_FILE)
+    set(_desc_fallback)
+  else()
+    set(_desc_fallback "CPACK_PACKAGE_DESCRIPTION")
+  endif()
   if(CPACK_DEB_PACKAGE_COMPONENT)
     cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
       "CPACK_DEBIAN_${_local_component_name}_DESCRIPTION"
@@ -505,11 +510,13 @@ function(cpack_deb_prepare_package_vars)
   else()
     cpack_deb_variable_fallback("CPACK_DEBIAN_PACKAGE_DESCRIPTION"
       "CPACK_DEBIAN_PACKAGE_DESCRIPTION"
-      "CPACK_PACKAGE_DESCRIPTION")
+      ${_desc_fallback})
   endif()
 
   # Still no description? ... and description file has set ...
-  if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION AND CPACK_PACKAGE_DESCRIPTION_FILE)
+  if(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION
+     AND CPACK_PACKAGE_DESCRIPTION_FILE
+     AND NOT CPACK_PACKAGE_DESCRIPTION_FILE STREQUAL CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE)
     # Read `CPACK_PACKAGE_DESCRIPTION_FILE` then...
     file(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_DEBIAN_PACKAGE_DESCRIPTION)
   endif()

+ 7 - 2
Source/CPack/cmCPackGenerator.cxx

@@ -125,7 +125,7 @@ int cmCPackGenerator::PrepareNames()
   cmCPackLogger(cmCPackLog::LOG_DEBUG,
                 "Look for: CPACK_PACKAGE_DESCRIPTION_FILE" << std::endl);
   const char* descFileName = this->GetOption("CPACK_PACKAGE_DESCRIPTION_FILE");
-  if (descFileName) {
+  if (descFileName && !this->GetOption("CPACK_PACKAGE_DESCRIPTION")) {
     cmCPackLogger(cmCPackLog::LOG_DEBUG,
                   "Look for: " << descFileName << std::endl);
     if (!cmSystemTools::FileExists(descFileName)) {
@@ -149,7 +149,12 @@ int cmCPackGenerator::PrepareNames()
     while (ifs && cmSystemTools::GetLineFromStream(ifs, line)) {
       ostr << cmXMLSafe(line) << std::endl;
     }
-    this->SetOptionIfNotSet("CPACK_PACKAGE_DESCRIPTION", ostr.str().c_str());
+    this->SetOption("CPACK_PACKAGE_DESCRIPTION", ostr.str().c_str());
+    const char* defFileName =
+      this->GetOption("CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE");
+    if (defFileName && !strcmp(defFileName, descFileName)) {
+      this->SetOption("CPACK_USED_DEFAULT_PACKAGE_DESCRIPTION_FILE", "ON");
+    }
   }
   if (!this->GetOption("CPACK_PACKAGE_DESCRIPTION")) {
     cmCPackLogger(

+ 3 - 2
Tests/CPackComponentsDEB/RunCPackVerifyResult-components-description1.cmake

@@ -65,9 +65,10 @@ if(DPKGDEB_EXECUTABLE)
                                       "dpkg-deb: ${_f}: Incorrect description for package ${dpkg_package_name}: `${dpkg_description}` != `${expected_description}`")
       endif()
     elseif(dpkg_package_name STREQUAL "mylib-libraries")
-      if(NOT dpkg_description MATCHES "main description\n.*")
+      set(expected_description "main description")
+      if(NOT dpkg_description STREQUAL expected_description)
         set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
-                                      "dpkg-deb: ${_f}: Incorrect description for package ${dpkg_package_name}: `${dpkg_description}` =~ `main description.*`")
+                                      "dpkg-deb: ${_f}: Incorrect description for package ${dpkg_package_name}: `${dpkg_description}` != `${expected_description}`")
       endif()
     else()
       set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}

+ 3 - 2
Tests/CPackComponentsDEB/RunCPackVerifyResult-components-description2.cmake

@@ -53,9 +53,10 @@ if(DPKGDEB_EXECUTABLE)
     message(STATUS "package='${dpkg_package_name}', description='${dpkg_description}'")
 
     if(dpkg_package_name STREQUAL "mylib-applications" OR dpkg_package_name STREQUAL "mylib-headers")
-      if(NOT dpkg_description MATCHES "main description 2\n.*")
+      set(expected_description "main description 2")
+      if(NOT dpkg_description STREQUAL expected_description)
         set(dpkgdeb_output_errors_all ${dpkgdeb_output_errors_all}
-                                      "dpkg-deb: ${_f}: Incorrect description for package ${dpkg_package_name}: `${dpkg_description}` =~ `main description 2`")
+                                      "dpkg-deb: ${_f}: Incorrect description for package ${dpkg_package_name}: `${dpkg_description}` != `${expected_description}`")
       endif()
     elseif(dpkg_package_name STREQUAL "mylib-libraries")
       set(expected_description "main description 2\n  library description")

+ 1 - 1
Tests/RunCMake/CPack/RunCMakeTest.cmake

@@ -38,7 +38,7 @@ run_cpack_test(DEB_PACKAGE_VERSION_BACK_COMPATIBILITY "DEB.DEB_PACKAGE_VERSION_B
 run_cpack_test_subtests(EXTERNAL "none;good;good_multi;bad_major;bad_minor;invalid_good;invalid_bad;stage_and_package" "External" false "MONOLITHIC;COMPONENT")
 run_cpack_test_subtests(
   DEB_DESCRIPTION
-  "CPACK_DEBIAN_PACKAGE_DESCRIPTION;CPACK_PACKAGE_DESCRIPTION;CPACK_PACKAGE_DESCRIPTION_FILE"
+  "CPACK_DEBIAN_PACKAGE_DESCRIPTION;CPACK_PACKAGE_DESCRIPTION;CPACK_PACKAGE_DESCRIPTION_FILE;CPACK_NO_PACKAGE_DESCRIPTION"
   "DEB.DEB_DESCRIPTION"
   false
   "MONOLITHIC;COMPONENT"

+ 2 - 0
Tests/RunCMake/CPack/tests/DEB_DESCRIPTION/VerifyResult.cmake

@@ -56,6 +56,8 @@ set(_expected_description [[ Description: This is the summary line
 # workaround required!
 if(RunCMake_SUBTEST_SUFFIX STREQUAL "CPACK_PACKAGE_DESCRIPTION_FILE" AND PACKAGING_TYPE STREQUAL "MONOLITHIC")
   string(APPEND _expected_description "\n  ." )
+elseif(RunCMake_SUBTEST_SUFFIX STREQUAL "CPACK_NO_PACKAGE_DESCRIPTION")
+  set(_expected_description [[ Description: This is the summary line]])
 endif()
 
 foreach(_file_no RANGE 1 ${EXPECTED_FILES_COUNT})