cmake/Source/CPack/WiX/cmCPackWIXGenerator.h

184 lines
4.9 KiB
C
Raw Normal View History

2013-03-16 19:13:01 +02:00
/*============================================================================
CMake - Cross Platform Makefile Generator
2015-08-17 11:37:30 +02:00
Copyright 2012-2015 Kitware, Inc.
2013-03-16 19:13:01 +02:00
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef cmCPackWIXGenerator_h
#define cmCPackWIXGenerator_h
2015-04-27 22:25:09 +02:00
#include "cmWIXPatch.h"
#include "cmWIXShortcut.h"
2014-08-03 19:52:23 +02:00
2013-03-16 19:13:01 +02:00
#include <CPack/cmCPackGenerator.h>
#include <string>
#include <map>
class cmWIXSourceWriter;
2015-04-27 22:25:09 +02:00
class cmWIXDirectoriesSourceWriter;
class cmWIXFilesSourceWriter;
class cmWIXFeaturesSourceWriter;
2013-03-16 19:13:01 +02:00
/** \class cmCPackWIXGenerator
* \brief A generator for WIX files
*/
class cmCPackWIXGenerator : public cmCPackGenerator
{
public:
cmCPackTypeMacro(cmCPackWIXGenerator, cmCPackGenerator);
2014-08-03 19:52:23 +02:00
cmCPackWIXGenerator();
2015-04-27 22:25:09 +02:00
~cmCPackWIXGenerator();
2014-08-03 19:52:23 +02:00
2013-03-16 19:13:01 +02:00
protected:
virtual int InitializeInternal();
virtual int PackageFiles();
virtual const char* GetOutputExtension()
{
return ".msi";
}
virtual enum CPackSetDestdirSupport SupportsSetDestdir() const
{
return SETDESTDIR_UNSUPPORTED;
}
virtual bool SupportsAbsoluteDestination() const
{
return false;
}
virtual bool SupportsComponentInstallation() const
{
2014-08-03 19:52:23 +02:00
return true;
2013-03-16 19:13:01 +02:00
}
private:
2014-08-03 19:52:23 +02:00
typedef std::map<std::string, std::string> id_map_t;
typedef std::map<std::string, size_t> ambiguity_map_t;
typedef std::set<std::string> extension_set_t;
2013-03-16 19:13:01 +02:00
bool InitializeWiXConfiguration();
bool PackageFilesImpl();
2015-04-27 22:25:09 +02:00
void CreateWiXVariablesIncludeFile();
void CreateWiXPropertiesIncludeFile();
2013-03-16 19:13:01 +02:00
2015-08-17 11:37:30 +02:00
void CreateWiXProductFragmentIncludeFile();
2013-03-16 19:13:01 +02:00
void CopyDefinition(
2015-04-27 22:25:09 +02:00
cmWIXSourceWriter &source, std::string const& name);
2013-03-16 19:13:01 +02:00
void AddDefinition(cmWIXSourceWriter& source,
2015-04-27 22:25:09 +02:00
std::string const& name, std::string const& value);
2013-03-16 19:13:01 +02:00
bool CreateWiXSourceFiles();
2015-04-27 22:25:09 +02:00
std::string GetProgramFilesFolderId() const;
2014-08-03 19:52:23 +02:00
2015-04-27 22:25:09 +02:00
bool GenerateMainSourceFileFromTemplate();
2014-08-03 19:52:23 +02:00
2015-04-27 22:25:09 +02:00
bool CreateFeatureHierarchy(
cmWIXFeaturesSourceWriter& featureDefinitions);
2014-08-03 19:52:23 +02:00
bool AddComponentsToFeature(
std::string const& rootPath,
std::string const& featureId,
2015-04-27 22:25:09 +02:00
cmWIXDirectoriesSourceWriter& directoryDefinitions,
cmWIXFilesSourceWriter& fileDefinitions,
cmWIXFeaturesSourceWriter& featureDefinitions,
2015-08-17 11:37:30 +02:00
cmWIXShortcuts& shortcuts);
2014-08-03 19:52:23 +02:00
2015-08-17 11:37:30 +02:00
bool CreateShortcuts(
2014-08-03 19:52:23 +02:00
std::string const& cpackComponentName,
std::string const& featureId,
2015-08-17 11:37:30 +02:00
cmWIXShortcuts const& shortcuts,
bool emitUninstallShortcut,
cmWIXFilesSourceWriter& fileDefinitions,
cmWIXFeaturesSourceWriter& featureDefinitions);
bool CreateShortcutsOfSpecificType(
cmWIXShortcuts::Type type,
std::string const& cpackComponentName,
std::string const& featureId,
std::string const& idPrefix,
cmWIXShortcuts const& shortcuts,
bool emitUninstallShortcut,
2015-04-27 22:25:09 +02:00
cmWIXFilesSourceWriter& fileDefinitions,
cmWIXFeaturesSourceWriter& featureDefinitions);
2014-08-03 19:52:23 +02:00
void AppendUserSuppliedExtraSources();
void AppendUserSuppliedExtraObjects(std::ostream& stream);
2013-03-16 19:13:01 +02:00
bool CreateLicenseFile();
2015-04-27 22:25:09 +02:00
bool RunWiXCommand(std::string const& command);
2013-03-16 19:13:01 +02:00
bool RunCandleCommand(
2015-04-27 22:25:09 +02:00
std::string const& sourceFile, std::string const& objectFile);
2013-03-16 19:13:01 +02:00
2015-04-27 22:25:09 +02:00
bool RunLightCommand(std::string const& objectFiles);
2013-03-16 19:13:01 +02:00
2015-04-27 22:25:09 +02:00
void AddDirectoryAndFileDefinitons(std::string const& topdir,
std::string const& directoryId,
cmWIXDirectoriesSourceWriter& directoryDefinitions,
cmWIXFilesSourceWriter& fileDefinitions,
cmWIXFeaturesSourceWriter& featureDefinitions,
2015-08-17 11:37:30 +02:00
std::vector<std::string> const& packageExecutables,
std::vector<std::string> const& desktopExecutables,
cmWIXShortcuts& shortcuts);
2013-03-16 19:13:01 +02:00
2015-04-27 22:25:09 +02:00
bool RequireOption(std::string const& name, std::string& value) const;
2013-03-16 19:13:01 +02:00
std::string GetArchitecture() const;
static std::string GenerateGUID();
2015-04-27 22:25:09 +02:00
static std::string QuotePath(std::string const& path);
2013-03-16 19:13:01 +02:00
2015-04-27 22:25:09 +02:00
static std::string GetRightmostExtension(std::string const& filename);
2013-03-16 19:13:01 +02:00
2015-04-27 22:25:09 +02:00
std::string PathToId(std::string const& path);
2014-08-03 19:52:23 +02:00
2015-04-27 22:25:09 +02:00
std::string CreateNewIdForPath(std::string const& path);
2014-08-03 19:52:23 +02:00
static std::string CreateHashedId(
2015-04-27 22:25:09 +02:00
std::string const& path, std::string const& normalizedFilename);
2014-08-03 19:52:23 +02:00
std::string NormalizeComponentForId(
2015-04-27 22:25:09 +02:00
std::string const& component, size_t& replacementCount);
2014-08-03 19:52:23 +02:00
static bool IsLegalIdCharacter(char c);
void CollectExtensions(
2015-04-27 22:25:09 +02:00
std::string const& variableName, extension_set_t& extensions);
2014-08-03 19:52:23 +02:00
void AddCustomFlags(
2015-04-27 22:25:09 +02:00
std::string const& variableName, std::ostream& stream);
2014-08-03 19:52:23 +02:00
std::vector<std::string> WixSources;
id_map_t PathToIdMap;
ambiguity_map_t IdAmbiguityCounter;
extension_set_t CandleExtensions;
extension_set_t LightExtensions;
2015-04-27 22:25:09 +02:00
std::string CPackTopLevel;
cmWIXPatch* Patch;
2013-03-16 19:13:01 +02:00
};
#endif