Browse Source

CPackIFW: Add package configuration variables

Konstantin Podsvirov 11 years ago
parent
commit
e7511b7fbe
4 changed files with 109 additions and 11 deletions
  1. 1 0
      CMakeCPack.cmake
  2. 7 2
      CMakeCPackOptions.cmake.in
  3. 36 4
      Modules/CPackIFW.cmake
  4. 65 5
      Source/CPack/cmCPackIFWGenerator.cxx

+ 1 - 0
CMakeCPack.cmake

@@ -74,6 +74,7 @@ if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
   string(TOUPPER ${_CPACK_IFW_COMPONENT_NAME} _CPACK_IFW_COMPONENT_UNAME)
 
   if(${CMAKE_SYSTEM_NAME} MATCHES Windows)
+    set(_CPACK_IFW_PACKAGE_ICON "set(CPACK_IFW_PACKAGE_ICON \"${CMake_SOURCE_DIR}/Source/QtDialog/CMakeSetup.ico\")")
     if(BUILD_QtDialog)
       set(_CPACK_IFW_SHORTCUT_OPTIONAL "${_CPACK_IFW_SHORTCUT_OPTIONAL}component.addOperation(\"CreateShortcut\", \"@TargetDir@/bin/cmake-gui.exe\", \"@StartMenuDir@/CMake (cmake-gui).lnk\");\n")
     endif()

+ 7 - 2
CMakeCPackOptions.cmake.in

@@ -34,12 +34,17 @@ include("@QT_DIALOG_CPACK_OPTIONS_FILE@" OPTIONAL)
 if(CPACK_GENERATOR MATCHES "IFW")
   # Version with QtIFW limitations
   set(CPACK_PACKAGE_VERSION "@_CPACK_IFW_PACKAGE_VERSION@")
+  # Installer configuration
+  set(CPACK_IFW_PACKAGE_TITLE "CMake Build Tool")
+  set(CPACK_IFW_PRODUCT_URL "http://www.cmake.org")
+  @_CPACK_IFW_PACKAGE_ICON@
+  set(CPACK_IFW_PACKAGE_WINDOW_ICON "@CMake_SOURCE_DIR@/Source/QtDialog/CMakeSetup128.png")
   # Enable install default component
   set(CPACK_COMPONENTS_ALL "@_CPACK_IFW_COMPONENT_NAME@")
-  # Configuration
+  # Component configuration
   set(CPACK_COMPONENT_@_CPACK_IFW_COMPONENT_UNAME@_DISPLAY_NAME "@CPACK_PACKAGE_NAME@")
   set(CPACK_COMPONENT_@_CPACK_IFW_COMPONENT_UNAME@_DESCRIPTION "@CPACK_PACKAGE_DESCRIPTION_SUMMARY@")
-  # IFW Configuration
+  # IFW component onfiguration
   set(CPACK_IFW_COMPONENT_@_CPACK_IFW_COMPONENT_UNAME@_NAME "@CPACK_PACKAGE_NAME@")
   set(CPACK_IFW_COMPONENT_@_CPACK_IFW_COMPONENT_UNAME@_LICENSES "@CPACK_PACKAGE_NAME@ Copyright" "@CPACK_RESOURCE_FILE_LICENSE@")
   @_CPACK_IFW_COMPONENT_SCRIPT@

+ 36 - 4
Modules/CPackIFW.cmake

@@ -29,8 +29,37 @@
 # Variables
 # ^^^^^^^^^
 #
-# Variables that Change Behavior
-# """"""""""""""""""""""""""""""
+# You can use the following variables to change behavior of CPack ``IFW`` generator.
+#
+# Package
+# """""""
+#
+# .. variable:: CPACK_IFW_PACKAGE_TITLE
+#
+#  Name of the installer as displayed on the title bar.
+#  By default used :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`
+#
+# .. variable:: CPACK_IFW_PACKAGE_PUBLISHER
+#
+#  Publisher of the software (as shown in the Windows Control Panel).
+#  By default used :variable:`CPACK_PACKAGE_VENDOR`
+#
+# .. variable:: CPACK_IFW_PRODUCT_URL
+#
+#  URL to a page that contains product information on your web site.
+#
+# .. variable:: CPACK_IFW_PACKAGE_ICON
+#
+#  Filename for a custom installer icon. The actual file is '.icns' (Mac OS X),
+#  '.ico' (Windows). No functionality on Unix.
+#
+# .. variable:: CPACK_IFW_PACKAGE_WINDOW_ICON
+#
+#  Filename for a custom window icon in PNG format for the Installer application.
+#
+# .. variable:: CPACK_IFW_PACKAGE_LOGO
+#
+#  Filename for a logo used as QWizard::LogoPixmap.
 #
 # .. variable:: CPACK_IFW_TARGET_DIRECTORY
 #
@@ -45,6 +74,9 @@
 #
 #  You can use predefined variables.
 #
+# Components
+# """"""""""
+#
 # .. variable:: CPACK_IFW_RESOLVE_DUPLICATE_NAMES
 #
 #  Resolve duplicate names when installing components with groups.
@@ -54,8 +86,8 @@
 #  Additional prepared packages dirs that will be used to resolve
 #  dependent components.
 #
-# Advanced Variables
-# """"""""""""""""""
+# Advanced
+# """"""""
 #
 # .. variable:: CPACK_IFW_BINARYCREATOR_EXECUTABLE
 #

+ 65 - 5
Source/CPack/cmCPackIFWGenerator.cxx

@@ -680,14 +680,19 @@ int cmCPackIFWGenerator::IfwCreateConfigFile()
     ifwPkgName = "Your package";
     }
 
-  std::string ifwPkgDescription;
-  if (const char *name = this->GetOption("CPACK_PACKAGE_DESCRIPTION_SUMMARY"))
+  std::string pkgTitle;
+  if (const char *title = this->GetOption("CPACK_IFW_PACKAGE_TITLE"))
     {
-    ifwPkgDescription = name;
+    pkgTitle = title;
+    }
+  else if (const char *description =
+           this->GetOption("CPACK_PACKAGE_DESCRIPTION_SUMMARY"))
+    {
+    pkgTitle = description;
     }
   else
     {
-    ifwPkgDescription = "Your package description";
+    pkgTitle = "Your package description";
     }
 
   std::string ifwPkgVersion;
@@ -711,9 +716,64 @@ int cmCPackIFWGenerator::IfwCreateConfigFile()
   cfg << "<Installer>" << std::endl;
   cfg << "    <Name>" << cmXMLSafe(ifwPkgName).str() << "</Name>" << std::endl;
   cfg << "    <Version>" << ifwPkgVersion << "</Version>" << std::endl;
-  cfg << "    <Title>" << cmXMLSafe(ifwPkgDescription).str() << "</Title>"
+  cfg << "    <Title>" << cmXMLSafe(pkgTitle).str() << "</Title>"
       << std::endl;
 
+  // Publisher
+  std::string ifwPublisher;
+  if(const char *publisher = GetOption("CPACK_IFW_PACKAGE_PUBLISHER"))
+    {
+    ifwPublisher = publisher;
+    }
+  else if(const char *vendor = GetOption("CPACK_PACKAGE_VENDOR"))
+    {
+    ifwPublisher = vendor;
+    }
+  if(!ifwPublisher.empty())
+    {
+    cfg << "    <Publisher>" << cmXMLSafe(ifwPublisher).str()
+        << "</Publisher>" << std::endl;
+    }
+
+  // ProductUrl
+  if(const char *url = GetOption("CPACK_IFW_PRODUCT_URL"))
+    {
+    cfg << "    <ProductUrl>" << url << "</ProductUrl>" << std::endl;
+    }
+
+  // ApplicationIcon
+  const char *pkgApplicationIcon = GetOption("CPACK_IFW_PACKAGE_ICON");
+  if(pkgApplicationIcon && cmSystemTools::FileExists(pkgApplicationIcon))
+    {
+    std::string name = cmSystemTools::GetFilenameName(pkgApplicationIcon);
+    std::string path = this->toplevel + "/config/" + name;
+    name = cmSystemTools::GetFilenameWithoutExtension(name);
+    cmsys::SystemTools::CopyFileIfDifferent(pkgApplicationIcon, path.data());
+    cfg << "    <InstallerApplicationIcon>" << name
+        << "</InstallerApplicationIcon>" << std::endl;
+    }
+
+  // WindowIcon
+  const char *pkgWindowIcon = GetOption("CPACK_IFW_PACKAGE_WINDOW_ICON");
+  if(pkgWindowIcon && cmSystemTools::FileExists(pkgWindowIcon))
+    {
+    std::string name = cmSystemTools::GetFilenameName(pkgWindowIcon);
+    std::string path = this->toplevel + "/config/" + name;
+    cmsys::SystemTools::CopyFileIfDifferent(pkgWindowIcon, path.data());
+    cfg << "    <InstallerWindowIcon>" << name
+        << "</InstallerWindowIcon>" << std::endl;
+    }
+
+  // Logo
+  const char *pkgLogo = GetOption("CPACK_IFW_PACKAGE_LOGO");
+  if(pkgLogo && cmSystemTools::FileExists(pkgLogo))
+    {
+    std::string name = cmSystemTools::GetFilenameName(pkgLogo);
+    std::string path = this->toplevel + "/config/" + name;
+    cmsys::SystemTools::CopyFileIfDifferent(pkgLogo, path.data());
+    cfg << "    <Logo>" << name << "</Logo>" << std::endl;
+    }
+
   // Default target directory for installation
   if (ifwTargetDir)
     {