[CMake] [CPACK] Patch with componentwise extra install commands for NSIS-generator

2011-11-26 Thread Marcel

Hi,

I extended cpack's NSIS-generator and want to contribute the attached patch.

It adds the CPACK_COMPONENT_name_EXTRA_INSTALL_COMMANDS option to 
cpack that allows to add NSIS commands exclusivly to the install section 
generated for the component name. So it adopts the option 
CPACK_NSIS_EXTRA_INSTALL_COMMANDS for single components/sections.


That way special code can be added to a section that ist only executed 
if the user chooses to install the section.


Perhaps this change could be merged into the cmake, because I think this 
could be of some use for other cpack users.


If this is not the right place to contribute, could someone please give 
me a pointer.


Best regards,

Marcel

From 88dcca63c40aaa25902023a3b7c7ae8e9f9c44c2 Mon Sep 17 00:00:00 2001
From: Marcel minusdre...@gmail.com
Date: Mon, 14 Nov 2011 15:13:49 +0100
Subject: [PATCH] CPack: Added EXTRA_INSTALL_COMMANDS option for single
 COMPONENTs to NSIS-Generator. NSIS commands given to
 CPACK_COMPONENT_name_EXTRA_INSTALL_COMMANDS are added
 exclusivly to the install section generated for the
 component name.

This gives greater flexibility in contrast to
CPACK_NSIS_EXTRA_INSTALL_COMMANDS that only allows to add NSIS commands to
the overall install section, in case that extra commands should only be
executed if the user chooses to install a certain section.

Also, removed the constraint that only components with files are added
to the generated NSIS-Script, so that components with extra install
commands only can be created.

BUFIX: check for empty extraInstallCommands.
---
 Source/CPack/cmCPackComponentGroup.h  |3 +++
 Source/CPack/cmCPackGenerator.cxx |   20 
 Source/CPack/cmCPackNSISGenerator.cxx |   31 +++
 3 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/Source/CPack/cmCPackComponentGroup.h 
b/Source/CPack/cmCPackComponentGroup.h
index cebdd6d..af81fc2 100644
--- a/Source/CPack/cmCPackComponentGroup.h
+++ b/Source/CPack/cmCPackComponentGroup.h
@@ -89,6 +89,9 @@ public:
   /// The list of installed directories that are part of this component.
   std::vectorstd::string Directories;
 
+  /// Extra install commands that are added to this section
+  std::vectorstd::string ExtraInstallCommands;
+
   /// Get the total installed size of all of the files in this
   /// component, in bytes. installDir is the directory into which the 
   /// component was installed.
diff --git a/Source/CPack/cmCPackGenerator.cxx 
b/Source/CPack/cmCPackGenerator.cxx
index 083279f..e086c26 100644
--- a/Source/CPack/cmCPackGenerator.cxx
+++ b/Source/CPack/cmCPackGenerator.cxx
@@ -1520,6 +1520,26 @@ cmCPackGenerator::GetComponent(const char *projectName, 
const char *name)
   component-Description = description;
   }
 
+// Process extra install commands
+const char* extraInstallCommands
+  = this-GetOption((macroPrefix + _EXTRA_INSTALL_COMMANDS).c_str());
+if (extraInstallCommands != NULL)
+  {
+  std::vectorstd::string eCommandsVector;
+  cmSystemTools::ExpandListArgument(extraInstallCommands, eCommandsVector);
+  std::vectorstd::string::iterator eCommIt;
+  for (eCommIt = eCommandsVector.begin();
+  eCommIt != eCommandsVector.end();
+  ++eCommIt)
+{
+  if (!eCommIt-empty())
+{
+  component-ExtraInstallCommands.push_back(*eCommIt);
+}
+}
+  }
+
+
 // Determine the installation types.
 const char *installTypes 
   = this-GetOption((macroPrefix + _INSTALL_TYPES).c_str());
diff --git a/Source/CPack/cmCPackNSISGenerator.cxx 
b/Source/CPack/cmCPackNSISGenerator.cxx
index 2b94067..e5e49ca 100644
--- a/Source/CPack/cmCPackNSISGenerator.cxx
+++ b/Source/CPack/cmCPackNSISGenerator.cxx
@@ -242,7 +242,10 @@ int cmCPackNSISGenerator::PackageFiles()
   if (compIt-second.Files.empty())
 {
 // NSIS cannot cope with components that have no files.
-continue;
+   if (compIt-second.ExtraInstallCommands.empty())
+ {
+ continue;
+ }
 }
 
   anyDownloadedComponents =
@@ -819,8 +822,18 @@ CreateComponentDescription(cmCPackComponent *component,
 }
   else
 {
-componentCode +=   File /r \${INST_DIR}\\ +
-  component-Name + \\*.*\\n;
+  if (!component-Files.empty())
+{
+componentCode +=   File /r \${INST_DIR}\\ +
+component-Name + \\*.*\\n;
+}
+}
+  std::vectorstd::string::iterator extraIt;
+  for (extraIt = component-ExtraInstallCommands.begin();
+   extraIt != component-ExtraInstallCommands.end();
+   extraIt++)
+{
+componentCode +=+ *extraIt + \n;
 }
   componentCode += SectionEnd\n;
 
@@ -972,9 +985,19 @@ CreateComponentGroupDescription(cmCPackComponentGroup 
*group,
comp != group-Components.end(); 
++comp)
 {
+
 if ((*comp)-Files.empty())
   {
-  continue;
+  if 

Re: [CMake] [CPACK] Patch with componentwise extra install commands for NSIS-generator

2011-11-26 Thread Eric Noulard
2011/11/26 Marcel minusdreidb+cm...@gmail.com:
 Hi,

 I extended cpack's NSIS-generator and want to contribute the attached patch.

 It adds the CPACK_COMPONENT_name_EXTRA_INSTALL_COMMANDS option to cpack
 that allows to add NSIS commands exclusivly to the install section generated
 for the component name. So it adopts the option
 CPACK_NSIS_EXTRA_INSTALL_COMMANDS for single components/sections.

 That way special code can be added to a section that ist only executed if
 the user chooses to install the section.

 Perhaps this change could be merged into the cmake, because I think this
 could be of some use for other cpack users.

 If this is not the right place to contribute, could someone please give me a
 pointer.

Open a bug report in the tracker
http://public.kitware.com/Bug/my_view_page.php
and attach the patch to the report.



 Best regards,

 Marcel


 --

 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://www.cmake.org/mailman/listinfo/cmake




-- 
Erk
Membre de l'April - « promouvoir et défendre le logiciel libre » -
http://www.april.org
--

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://www.cmake.org/mailman/listinfo/cmake