Kaynağa Gözat

CPackRPM Fix #12096: handle absolute install path with component install

Eric NOULARD 15 yıl önce
ebeveyn
işleme
d3fd945900
2 değiştirilmiş dosya ile 36 ekleme ve 0 silme
  1. 14 0
      Modules/CPackRPM.cmake
  2. 22 0
      Source/CPack/cmCPackGenerator.cxx

+ 14 - 0
Modules/CPackRPM.cmake

@@ -495,6 +495,20 @@ EXECUTE_PROCESS(COMMAND find -type f -o -type l
                 WORKING_DIRECTORY "${WDIR}"
                 WORKING_DIRECTORY "${WDIR}"
                 OUTPUT_VARIABLE CPACK_RPM_INSTALL_FILES)
                 OUTPUT_VARIABLE CPACK_RPM_INSTALL_FILES)
 
 
+# In component case, replace CPACK_ABSOLUTE_DESTINATION_FILES
+#        with the content of CPACK_ABSOLUTE_DESTINATION_FILES_<COMPONENT>
+# This must be done BEFORE the CPACK_ABSOLUTE_DESTINATION_FILES handling
+if(CPACK_RPM_PACKAGE_COMPONENT)
+  if(CPACK_ABSOLUTE_DESTINATION_FILES)
+   set(COMPONENT_FILES_TAG "CPACK_ABSOLUTE_DESTINATION_FILES_${CPACK_RPM_PACKAGE_COMPONENT}")
+   set(CPACK_ABSOLUTE_DESTINATION_FILES "${${COMPONENT_FILES_TAG}}")
+   if(CPACK_RPM_PACKAGE_DEBUG)
+     message("CPackRPM:Debug: Handling Absolute Destination Files ${CPACK_ABSOLUTE_DESTINATION_FILES}")
+     message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}")
+   endif(CPACK_RPM_PACKAGE_DEBUG)
+  endif()
+endif()
+
 if (CPACK_ABSOLUTE_DESTINATION_FILES)
 if (CPACK_ABSOLUTE_DESTINATION_FILES)
   IF(CPACK_RPM_PACKAGE_DEBUG)
   IF(CPACK_RPM_PACKAGE_DEBUG)
     message("CPackRPM:Debug: Handling Absolute Destination Files: ${CPACK_ABSOLUTE_DESTINATION_FILES}")
     message("CPackRPM:Debug: Handling Absolute Destination Files: ${CPACK_ABSOLUTE_DESTINATION_FILES}")

+ 22 - 0
Source/CPack/cmCPackGenerator.cxx

@@ -867,6 +867,28 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
           cmCPackLogger(cmCPackLog::LOG_DEBUG,
           cmCPackLogger(cmCPackLog::LOG_DEBUG,
                                     "Got some ABSOLUTE DESTINATION FILES: "
                                     "Got some ABSOLUTE DESTINATION FILES: "
                                     << absoluteDestFiles << std::endl);
                                     << absoluteDestFiles << std::endl);
+          // define component specific var
+          if (componentInstall)
+            {
+            std::string absoluteDestFileComponent =
+                std::string("CPACK_ABSOLUTE_DESTINATION_FILES")
+                + "_" + GetComponentInstallDirNameSuffix(installComponent);
+            if (NULL != this->GetOption(absoluteDestFileComponent.c_str()))
+              {
+                std::string absoluteDestFilesListComponent =
+                    this->GetOption(absoluteDestFileComponent.c_str());
+                absoluteDestFilesListComponent +=";";
+                absoluteDestFilesListComponent +=
+                    mf->GetDefinition("CPACK_ABSOLUTE_DESTINATION_FILES");
+                this->SetOption(absoluteDestFileComponent.c_str(),
+                    absoluteDestFilesListComponent.c_str());
+              }
+            else
+              {
+              this->SetOption(absoluteDestFileComponent.c_str(),
+                  mf->GetDefinition("CPACK_ABSOLUTE_DESTINATION_FILES"));
+              }
+            }
         }
         }
         if ( cmSystemTools::GetErrorOccuredFlag() || !res )
         if ( cmSystemTools::GetErrorOccuredFlag() || !res )
           {
           {