Browse Source

ENH: change CPACK_CREATE_DESKTOP_LINKS to something that can handle spaces in the name of the exectuable

Bill Hoffman 18 years ago
parent
commit
87c22309b8
3 changed files with 35 additions and 6 deletions
  1. 4 1
      CMakeCPack.cmake
  2. 1 1
      CMakeCPackOptions.cmake.in
  3. 30 4
      Source/CPack/cmCPackNSISGenerator.cxx

+ 4 - 1
CMakeCPack.cmake

@@ -2,7 +2,10 @@
 IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
   IF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake")
     SET(CMAKE_INSTALL_MFC_LIBRARIES 1)
-    INCLUDE(InstallRequiredSystemLibraries)
+    OPTION(CMAKE_INSTALL_DEBUG_LIBRARIES 
+      "Install Microsoft runtime debug libraries with CMake." FALSE)
+    MARK_AS_ADVANCED(CMAKE_INSTALL_DEBUG_LIBRARIES)
+    INCLUDE(${CMake_SOURCE_DIR}/Modules/InstallRequiredSystemLibraries.cmake)
   ENDIF(EXISTS "${CMAKE_ROOT}/Modules/InstallRequiredSystemLibraries.cmake")
   CONFIGURE_FILE("${CMake_SOURCE_DIR}/CMakeCPackOptions.cmake.in"
     "${CMake_BINARY_DIR}/CMakeCPackOptions.cmake" @ONLY)

+ 1 - 1
CMakeCPackOptions.cmake.in

@@ -20,7 +20,7 @@ if(CPACK_GENERATOR MATCHES "NSIS")
   # tell cpack the executables you want in the start menu as links
   SET(CPACK_PACKAGE_EXECUTABLES "CMakeSetup" "CMake" )
   # tell cpack to create a desktop link to CMakeSetup
-  SET(CPACK_CREATE_DESKTOP_LINK_CMakeSetup ON)
+  SET(CPACK_CREATE_DESKTOP_LINKS "CMakeSetup")
   SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\CMakeSetup.exe")
   SET(CPACK_NSIS_DISPLAY_NAME "@CPACK_PACKAGE_INSTALL_DIRECTORY@ a cross-platform, open-source build system")
   SET(CPACK_NSIS_HELP_LINK "http:\\\\www.cmake.org")

+ 30 - 4
Source/CPack/cmCPackNSISGenerator.cxx

@@ -228,10 +228,34 @@ int cmCPackNSISGenerator::InitializeInternal()
       << nsisVersion << std::endl);
     return 0;
     }
-
   this->SetOptionIfNotSet("CPACK_INSTALLER_PROGRAM", nsisPath.c_str());
   const char* cpackPackageExecutables
     = this->GetOption("CPACK_PACKAGE_EXECUTABLES");
+  const char* cpackPackageDeskTopLinks
+    = this->GetOption("CPACK_CREATE_DESKTOP_LINKS");
+  std::vector<std::string> cpackPackageDesktopLinksVector;
+  if(cpackPackageDeskTopLinks)
+    {
+    cmCPackLogger(cmCPackLog::LOG_DEBUG, "CPACK_CREATE_DESKTOP_LINKS: "
+                << cpackPackageDeskTopLinks << std::endl);
+    
+    cmSystemTools::
+      ExpandListArgument(cpackPackageDeskTopLinks,
+                         cpackPackageDesktopLinksVector);
+    for(std::vector<std::string>::iterator i = 
+          cpackPackageDesktopLinksVector.begin(); i !=
+          cpackPackageDesktopLinksVector.end(); ++i)
+      {
+       cmCPackLogger(cmCPackLog::LOG_DEBUG, "CPACK_CREATE_DESKTOP_LINKS: "
+                << *i << std::endl);
+      }
+    }
+  else
+    {
+        cmCPackLogger(cmCPackLog::LOG_DEBUG, "CPACK_CREATE_DESKTOP_LINKS: "
+                << "not set" << std::endl);
+
+    }
   if ( cpackPackageExecutables )
     {
     cmCPackLogger(cmCPackLog::LOG_DEBUG, "The cpackPackageExecutables: "
@@ -263,9 +287,11 @@ int cmCPackNSISGenerator::InitializeInternal()
         << ".lnk\"" << std::endl;
       // see if CPACK_CREATE_DESKTOP_LINK_ExeName is on
       // if so add a desktop link
-      std::string desktop = "CPACK_CREATE_DESKTOP_LINK_";
-      desktop += execName;
-      if(this->IsSet(desktop.c_str()))
+      if(cpackPackageDesktopLinksVector.size() &&
+         std::find(cpackPackageDesktopLinksVector.begin(),
+                   cpackPackageDesktopLinksVector.end(),
+                   execName) 
+         != cpackPackageDesktopLinksVector.end())
         {
         str << "  StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2\n";
         str << "    CreateShortCut \"$DESKTOP\\"