On Wednesday, October 24, 2012 09:27:38 PM Eric Noulard wrote:
> 2012/10/24 Clinton Stimpson <[email protected]>:
> > On Wednesday, October 24, 2012 11:59:52 AM Clinton Stimpson wrote:
> >> I have a problem with the rpm & deb cpack generators.
> >> 
> >> I've set the following:
> >> set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
> >> set(CPACK_DEB_COMPONENT_INSTALL 1)
> >> set(CPACK_RPM_COMPONENT_INSTALL 1)
> >> 
> >> I get this implementation detail string "ALL_COMPONENTS_IN_ONE" being put
> >> in the package name (that is name, not the filename), so I end up with
> >> "mypackage- ALL_COMPONENTS_IN_ONE".  To remove it, I do "yum remove
> >> mypackage- ALL_COMPONENTS_IN_ONE".
> >> I would rather just have "mypackage" since that is the name I've
> >> specified.
> >> But I don't see a way to override it.
> 
> This is clearly a bug, I can't see any way to fix without a small patch.
> Note that the DEB generator does not seem to suffer from this, is it?
> 
> When the xx.deb file is generated you can check it (without installing)
> using dpkg-deb --info xx.deb
> dpkg-deb --contents xx.deb
> dpkg-deb --show xx.deb
> 
> >> Does anyone have a suggested way for me to fix cmCPack*Generator.cxx
> >> and/or
> >> CPackDeb.cmake, CPackRPM.cmake?  This is the first time I've looked at
> >> modifying those particular files.
> 
> I think the best current workaround is to change CPackRPM.cmake.
> 
> > I have an idea that I'm comfortable with.  I'm effectively separating a
> > variable into two, one for the component name, and another for the
> > directory where it can be found.  For the ALL_COMPONENTS_IN_ONE mode, the
> > directory can be ALL_COMPONENTS_IN_ONE/, but the component name empty.
> > Let me know if you disagree.D
> 
> I agree and ended-up with the same patch (in CPackRPM.cmake).
> You'll find my patch (against CMake master) proposal attached,
> I'm not really sure it's the "right final fix" though.
> 
> Clint would you be kind enough to open a bug report for that please?


The Deb generator suffers from the same problem.
Attached is my patch which is working fine for me.  Does it look OK?  I did the 
approach of simplifying the .cmake files and putting the implementation 
specific 
logic in the cmCPack*.cxx files.

-- 
Clinton Stimpson
Elemental Technologies, Inc
Computational Simulation Software, LLC
www.csimsoft.com
>From b3363e7847a9214b4daa81ac2d990d7cf4c31a89 Mon Sep 17 00:00:00 2001
From: Clinton Stimpson <[email protected]>
Date: Wed, 24 Oct 2012 13:37:18 -0600
Subject: [PATCH] RPM/Deb: Fix package names to not include
 "ALL_COMPONENTS_IN_ONE"

---
 Modules/CPackDeb.cmake               |  6 ++----
 Modules/CPackRPM.cmake               |  6 ++----
 Source/CPack/cmCPackDebGenerator.cxx | 10 ++++++++--
 Source/CPack/cmCPackRPMGenerator.cxx | 10 ++++++++--
 4 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/Modules/CPackDeb.cmake b/Modules/CPackDeb.cmake
index 106b44c..75ff3be 100644
--- a/Modules/CPackDeb.cmake
+++ b/Modules/CPackDeb.cmake
@@ -385,15 +385,13 @@ endif()
 # Are we packaging components ?
 if(CPACK_DEB_PACKAGE_COMPONENT)
   set(CPACK_DEB_PACKAGE_COMPONENT_PART_NAME "-${CPACK_DEB_PACKAGE_COMPONENT}")
-  set(CPACK_DEB_PACKAGE_COMPONENT_PART_PATH "/${CPACK_DEB_PACKAGE_COMPONENT}")
-  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${CPACK_DEB_PACKAGE_COMPONENT}")
   string(TOLOWER "${CPACK_PACKAGE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_NAME}" CPACK_DEBIAN_PACKAGE_NAME)
 else()
   set(CPACK_DEB_PACKAGE_COMPONENT_PART_NAME "")
-  set(CPACK_DEB_PACKAGE_COMPONENT_PART_PATH "")
-  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
 endif()
 
+set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}")
+
 # Print out some debug information if we were asked for that
 if(CPACK_DEBIAN_PACKAGE_DEBUG)
    message("CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY          = ${CPACK_TOPLEVEL_DIRECTORY}")
diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake
index 0cec897..34d0045 100644
--- a/Modules/CPackRPM.cmake
+++ b/Modules/CPackRPM.cmake
@@ -311,14 +311,12 @@ endif()
 # Are we packaging components ?
 if(CPACK_RPM_PACKAGE_COMPONENT)
   set(CPACK_RPM_PACKAGE_COMPONENT_PART_NAME "-${CPACK_RPM_PACKAGE_COMPONENT}")
-  set(CPACK_RPM_PACKAGE_COMPONENT_PART_PATH "/${CPACK_RPM_PACKAGE_COMPONENT}")
-  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${CPACK_RPM_PACKAGE_COMPONENT}")
 else()
   set(CPACK_RPM_PACKAGE_COMPONENT_PART_NAME "")
-  set(CPACK_RPM_PACKAGE_COMPONENT_PART_PATH "")
-  set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
 endif()
 
+set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}")
+
 #
 # Use user-defined RPM specific variables value
 # or generate reasonable default value from
diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx
index 4bd5d5c..8a41d0e 100644
--- a/Source/CPack/cmCPackDebGenerator.cxx
+++ b/Source/CPack/cmCPackDebGenerator.cxx
@@ -76,6 +76,10 @@ int cmCPackDebGenerator::PackageOnePack(std::string initialTopLevel,
       packageFileName.c_str());
   // Tell CPackDeb.cmake the name of the component GROUP.
   this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",packageName.c_str());
+  // Tell CPackDeb.cmake the path where the component is.
+  std::string component_path = "/";
+  component_path += packageName;
+  this->SetOption("CPACK_DEB_PACKAGE_COMPONENT_PART_PATH", component_path.c_str());
   if (!this->ReadListFile("CPackDeb.cmake"))
     {
     cmCPackLogger(cmCPackLog::LOG_ERROR,
@@ -198,8 +202,10 @@ int cmCPackDebGenerator::PackageComponentsAllInOne()
   /* replace the TEMPORARY package file name */
   this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
       packageFileName.c_str());
-  // Tell CPackDeb.cmake the name of the component GROUP.
-  this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",compInstDirName.c_str());
+  // Tell CPackDeb.cmake the path where the component is.
+  std::string component_path = "/";
+  component_path += compInstDirName;
+  this->SetOption("CPACK_DEB_PACKAGE_COMPONENT_PART_PATH", component_path.c_str());
   if (!this->ReadListFile("CPackDeb.cmake"))
     {
     cmCPackLogger(cmCPackLog::LOG_ERROR,
diff --git a/Source/CPack/cmCPackRPMGenerator.cxx b/Source/CPack/cmCPackRPMGenerator.cxx
index 13aa6d8..af735d0 100644
--- a/Source/CPack/cmCPackRPMGenerator.cxx
+++ b/Source/CPack/cmCPackRPMGenerator.cxx
@@ -77,6 +77,10 @@ int cmCPackRPMGenerator::PackageOnePack(std::string initialToplevel,
                   packageFileName.c_str());
   // Tell CPackRPM.cmake the name of the component NAME.
   this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",packageName.c_str());
+  // Tell CPackRPM.cmake the path where the component is.
+  std::string component_path = "/";
+  component_path += packageName;
+  this->SetOption("CPACK_RPM_PACKAGE_COMPONENT_PART_PATH", component_path.c_str());
   if (!this->ReadListFile("CPackRPM.cmake"))
     {
     cmCPackLogger(cmCPackLog::LOG_ERROR,
@@ -178,8 +182,10 @@ int cmCPackRPMGenerator::PackageComponentsAllInOne()
   /* replace the TEMPORARY package file name */
   this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME",
       packageFileName.c_str());
-  // Tell CPackRPM.cmake the name of the component GROUP.
-  this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",compInstDirName.c_str());
+  // Tell CPackRPM.cmake the path where the component is.
+  std::string component_path = "/";
+  component_path += compInstDirName;
+  this->SetOption("CPACK_RPM_PACKAGE_COMPONENT_PART_PATH", component_path.c_str());
   if (!this->ReadListFile("CPackRPM.cmake"))
     {
     cmCPackLogger(cmCPackLog::LOG_ERROR,
-- 
1.7.11.7

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to