CPackWIX: Allow Windows Installer property customization

This commit is contained in:
Nils Gladitz 2014-03-01 23:13:35 +01:00
parent c0afb88675
commit 378eb5b712
7 changed files with 67 additions and 1 deletions

View File

@ -216,9 +216,24 @@
# allow other CMake projects to find your package with
# the :command:`find_package` command.
#
# .. variable:: CPACK_WIX_PROPERTY_<PROPERTY>
#
# This variable can be used to provide a value for
# the Windows Installer property ``<PROPERTY>``
#
# The follwing list contains some example properties that can be used to
# customize information under
# "Programs and Features" (also known as "Add or Remove Programs")
#
# * ARPCOMMENTS - Comments
# * ARPHELPLINK - Help and support information URL
# * ARPURLINFOABOUT - General information URL
# * URLUPDATEINFO - Update information URL
# * ARPHELPTELEPHONE - Help and support telephone number
# * ARPSIZE - Size (in kilobytes) of the application
#=============================================================================
# Copyright 2013 Kitware, Inc.
# Copyright 2014 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.

View File

@ -40,5 +40,7 @@
<FeatureRef Id="ProductFeature"/>
<UIRef Id="$(var.CPACK_WIX_UI_REF)" />
<?include "properties.wxi"?>
</Product>
</Wix>

View File

@ -215,6 +215,13 @@ bool cmCPackWIXGenerator::InitializeWiXConfiguration()
SetOption("CPACK_WIX_UI_REF", defaultRef.c_str());
}
const char* packageContact = GetOption("CPACK_PACKAGE_CONTACT");
if(packageContact != 0 &&
GetOption("CPACK_WIX_PROPERTY_ARPCONTACT") == 0)
{
SetOption("CPACK_WIX_PROPERTY_ARPCONTACT", packageContact);
}
CollectExtensions("CPACK_WIX_EXTENSIONS", this->CandleExtensions);
CollectExtensions("CPACK_WIX_CANDLE_EXTENSIONS", this->CandleExtensions);
@ -239,6 +246,7 @@ bool cmCPackWIXGenerator::PackageFilesImpl()
}
CreateWiXVariablesIncludeFile();
CreateWiXPropertiesIncludeFile();
if(!CreateWiXSourceFiles())
{
@ -315,6 +323,35 @@ void cmCPackWIXGenerator::CreateWiXVariablesIncludeFile()
CopyDefinition(includeFile, "CPACK_WIX_UI_REF");
}
void cmCPackWIXGenerator::CreateWiXPropertiesIncludeFile()
{
std::string includeFilename =
this->CPackTopLevel + "/properties.wxi";
cmWIXSourceWriter includeFile(
this->Logger, includeFilename, true);
std::string prefix = "CPACK_WIX_PROPERTY_";
std::vector<std::string> options = GetOptions();
for(size_t i = 0; i < options.size(); ++i)
{
std::string const& name = options[i];
if(name.length() > prefix.length() &&
name.substr(0, prefix.length()) == prefix)
{
std::string id = name.substr(prefix.length());
std::string value = GetOption(name.c_str());
includeFile.BeginElement("Property");
includeFile.AddAttribute("Id", id);
includeFile.AddAttribute("Value", value);
includeFile.EndElement("Property");
}
}
}
void cmCPackWIXGenerator::CopyDefinition(
cmWIXSourceWriter &source, std::string const& name)
{

View File

@ -73,6 +73,8 @@ private:
void CreateWiXVariablesIncludeFile();
void CreateWiXPropertiesIncludeFile();
void CopyDefinition(
cmWIXSourceWriter &source, std::string const& name);

View File

@ -1201,6 +1201,12 @@ const char* cmCPackGenerator::GetOption(const char* op) const
return ret;
}
//----------------------------------------------------------------------
std::vector<std::string> cmCPackGenerator::GetOptions() const
{
return this->MakefileMap->GetDefinitions();
}
//----------------------------------------------------------------------
int cmCPackGenerator::PackageFiles()
{

View File

@ -102,6 +102,7 @@ public:
void SetOption(const char* op, const char* value);
void SetOptionIfNotSet(const char* op, const char* value);
const char* GetOption(const char* op) const;
std::vector<std::string> GetOptions() const;
bool IsSet(const char* name) const;
bool IsOn(const char* name) const;

View File

@ -58,6 +58,9 @@ set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/patch.xml")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/license.txt")
set(CPACK_WIX_PROPERTY_ARPCOMMENTS "My Custom ARPCOMMENTS")
set(CPACK_WIX_PROPERTY_ARPHELPLINK "http://www.cmake.org")
include(CPack)
cpack_add_install_type(Full DISPLAY_NAME "Everything")