summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Podsvirov <konstantin@podsvirov.pro>2014-07-29 01:58:37 +0400
committerBrad King <brad.king@kitware.com>2014-07-29 15:55:19 -0400
commite7511b7fbe09a4007269992edcde2dc98144da47 (patch)
tree1d3e29a53d5b5a2beb51d92eeab7080a914be550
parentb234000184bbf314bf0a7380a1d4ebb54f7c8f69 (diff)
downloadcmake-e7511b7fbe09a4007269992edcde2dc98144da47.tar.gz
CPackIFW: Add package configuration variables
-rw-r--r--CMakeCPack.cmake1
-rw-r--r--CMakeCPackOptions.cmake.in9
-rw-r--r--Modules/CPackIFW.cmake40
-rw-r--r--Source/CPack/cmCPackIFWGenerator.cxx70
4 files changed, 109 insertions, 11 deletions
diff --git a/CMakeCPack.cmake b/CMakeCPack.cmake
index 5b096ade36..b27cd69d15 100644
--- a/CMakeCPack.cmake
+++ b/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()
diff --git a/CMakeCPackOptions.cmake.in b/CMakeCPackOptions.cmake.in
index 135c07df59..5127220882 100644
--- a/CMakeCPackOptions.cmake.in
+++ b/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@
diff --git a/Modules/CPackIFW.cmake b/Modules/CPackIFW.cmake
index 8207b5eccb..1f6de8f0da 100644
--- a/Modules/CPackIFW.cmake
+++ b/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
#
diff --git a/Source/CPack/cmCPackIFWGenerator.cxx b/Source/CPack/cmCPackIFWGenerator.cxx
index 51c0f2ec9f..3a7f539a45 100644
--- a/Source/CPack/cmCPackIFWGenerator.cxx
+++ b/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)
{