CPackWIX: Implement new CPACK_WIX_SKIP_PROGRAM_FOLDER feature
The new variable allows setting of a custom absolute installation prefix outside of the ProgramFiles folders.
This commit is contained in:
parent
5a62e0c172
commit
17bbf6af1e
|
@ -0,0 +1,7 @@
|
||||||
|
wix-custom-install-dir
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
* The CPack WIX generator now supports
|
||||||
|
:variable:`CPACK_WIX_SKIP_PROGRAM_FOLDER` to allow specification
|
||||||
|
of a custom absolute installation prefix outside
|
||||||
|
of the ProgramFiles folders.
|
|
@ -248,6 +248,23 @@
|
||||||
# Sets the description of the root install feature in the WIX installer. Same as
|
# Sets the description of the root install feature in the WIX installer. Same as
|
||||||
# CPACK_COMPONENT_<compName>_DESCRIPTION for components.
|
# CPACK_COMPONENT_<compName>_DESCRIPTION for components.
|
||||||
#
|
#
|
||||||
|
# .. variable:: CPACK_WIX_SKIP_PROGRAM_FOLDER
|
||||||
|
#
|
||||||
|
# If this variable is set to true, the default install location
|
||||||
|
# of the generated package will be CPACK_PACKAGE_INSTALL_DIRECTORY directly.
|
||||||
|
# The install location will not be located relatively below
|
||||||
|
# ProgramFiles or ProgramFiles64.
|
||||||
|
#
|
||||||
|
# .. note::
|
||||||
|
# Installers created with this feature do not take differences
|
||||||
|
# between the system on which the installer is created
|
||||||
|
# and the system on which the installer might be used into account.
|
||||||
|
#
|
||||||
|
# It is therefor possible that the installer e.g. might try to install
|
||||||
|
# onto a drive that is unavailable or unintended or a path that does not
|
||||||
|
# follow the localization or convention of the system on which the
|
||||||
|
# installation is performed.
|
||||||
|
#
|
||||||
|
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
# Copyright 2014-2015 Kitware, Inc.
|
# Copyright 2014-2015 Kitware, Inc.
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <cmGeneratedFileStream.h>
|
#include <cmGeneratedFileStream.h>
|
||||||
#include <cmInstalledFile.h>
|
#include <cmInstalledFile.h>
|
||||||
#include <cmSystemTools.h>
|
#include <cmSystemTools.h>
|
||||||
|
#include <cmUuid.h>
|
||||||
|
|
||||||
#include "cmWIXDirectoriesSourceWriter.h"
|
#include "cmWIXDirectoriesSourceWriter.h"
|
||||||
#include "cmWIXFeaturesSourceWriter.h"
|
#include "cmWIXFeaturesSourceWriter.h"
|
||||||
|
@ -441,6 +442,11 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
|
||||||
cmWIXFilesSourceWriter fileDefinitions(this->Logger,
|
cmWIXFilesSourceWriter fileDefinitions(this->Logger,
|
||||||
fileDefinitionsFilename);
|
fileDefinitionsFilename);
|
||||||
|
|
||||||
|
// if install folder is supposed to be set absolutely, the default
|
||||||
|
// component guid "*" cannot be used
|
||||||
|
fileDefinitions.GenerateComponentGuids =
|
||||||
|
cmSystemTools::IsOn(GetOption("CPACK_WIX_SKIP_PROGRAM_FOLDER"));
|
||||||
|
|
||||||
fileDefinitions.BeginElement("Fragment");
|
fileDefinitions.BeginElement("Fragment");
|
||||||
|
|
||||||
std::string featureDefinitionsFilename =
|
std::string featureDefinitionsFilename =
|
||||||
|
@ -566,6 +572,9 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles()
|
||||||
|
|
||||||
std::string cmCPackWIXGenerator::GetProgramFilesFolderId() const
|
std::string cmCPackWIXGenerator::GetProgramFilesFolderId() const
|
||||||
{
|
{
|
||||||
|
if (cmSystemTools::IsOn(GetOption("CPACK_WIX_SKIP_PROGRAM_FOLDER"))) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
if (GetArchitecture() == "x86") {
|
if (GetArchitecture() == "x86") {
|
||||||
return "ProgramFilesFolder";
|
return "ProgramFilesFolder";
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -52,8 +52,12 @@ size_t cmWIXDirectoriesSourceWriter::BeginInstallationPrefixDirectory(
|
||||||
std::string const& programFilesFolderId,
|
std::string const& programFilesFolderId,
|
||||||
std::string const& installRootString)
|
std::string const& installRootString)
|
||||||
{
|
{
|
||||||
BeginElement("Directory");
|
size_t offset = 1;
|
||||||
AddAttribute("Id", programFilesFolderId);
|
if (!programFilesFolderId.empty()) {
|
||||||
|
BeginElement("Directory");
|
||||||
|
AddAttribute("Id", programFilesFolderId);
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::string> installRoot;
|
std::vector<std::string> installRoot;
|
||||||
|
|
||||||
|
@ -77,7 +81,7 @@ size_t cmWIXDirectoriesSourceWriter::BeginInstallationPrefixDirectory(
|
||||||
AddAttribute("Name", installRoot[i]);
|
AddAttribute("Name", installRoot[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return installRoot.size();
|
return installRoot.size() - offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmWIXDirectoriesSourceWriter::EndInstallationPrefixDirectory(size_t size)
|
void cmWIXDirectoriesSourceWriter::EndInstallationPrefixDirectory(size_t size)
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
|
|
||||||
#include <cmInstalledFile.h>
|
#include <cmInstalledFile.h>
|
||||||
|
|
||||||
|
#include <cmSystemTools.h>
|
||||||
|
#include <cmUuid.h>
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
// include sys/stat.h after sys/types.h
|
// include sys/stat.h after sys/types.h
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@ -23,6 +26,7 @@
|
||||||
cmWIXFilesSourceWriter::cmWIXFilesSourceWriter(cmCPackLog* logger,
|
cmWIXFilesSourceWriter::cmWIXFilesSourceWriter(cmCPackLog* logger,
|
||||||
std::string const& filename)
|
std::string const& filename)
|
||||||
: cmWIXSourceWriter(logger, filename)
|
: cmWIXSourceWriter(logger, filename)
|
||||||
|
, GenerateComponentGuids(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,12 +130,20 @@ std::string cmWIXFilesSourceWriter::EmitComponentFile(
|
||||||
std::string componentId = std::string("CM_C") + id;
|
std::string componentId = std::string("CM_C") + id;
|
||||||
std::string fileId = std::string("CM_F") + id;
|
std::string fileId = std::string("CM_F") + id;
|
||||||
|
|
||||||
|
std::string guid = "*";
|
||||||
|
if (this->GenerateComponentGuids) {
|
||||||
|
std::string md5 = cmSystemTools::ComputeStringMD5(componentId);
|
||||||
|
cmUuid uuid;
|
||||||
|
std::vector<unsigned char> ns;
|
||||||
|
guid = uuid.FromMd5(ns, md5);
|
||||||
|
}
|
||||||
|
|
||||||
BeginElement("DirectoryRef");
|
BeginElement("DirectoryRef");
|
||||||
AddAttribute("Id", directoryId);
|
AddAttribute("Id", directoryId);
|
||||||
|
|
||||||
BeginElement("Component");
|
BeginElement("Component");
|
||||||
AddAttribute("Id", componentId);
|
AddAttribute("Id", componentId);
|
||||||
AddAttribute("Guid", "*");
|
AddAttribute("Guid", guid);
|
||||||
|
|
||||||
if (installedFile) {
|
if (installedFile) {
|
||||||
if (installedFile->GetPropertyAsBool("CPACK_NEVER_OVERWRITE")) {
|
if (installedFile->GetPropertyAsBool("CPACK_NEVER_OVERWRITE")) {
|
||||||
|
|
|
@ -47,6 +47,8 @@ public:
|
||||||
std::string const& id,
|
std::string const& id,
|
||||||
std::string const& filePath, cmWIXPatch& patch,
|
std::string const& filePath, cmWIXPatch& patch,
|
||||||
cmInstalledFile const* installedFile);
|
cmInstalledFile const* installedFile);
|
||||||
|
|
||||||
|
bool GenerateComponentGuids;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue