summaryrefslogtreecommitdiffstats
path: root/Source/CPack/WiX/cmWIXPatchParser.h
diff options
context:
space:
mode:
authorNils Gladitz <nilsgladitz@gmail.com>2013-12-16 21:30:11 (GMT)
committerNils Gladitz <nilsgladitz@gmail.com>2013-12-17 13:14:42 (GMT)
commit8632233a2fc0e27106977a820b6b439e72b45383 (patch)
treea36fbcaf798523e37ac538ea29480b4684bd4798 /Source/CPack/WiX/cmWIXPatchParser.h
parentb4fdbba55ad857a803a0d2e6c1f0b2bff10f4b51 (diff)
downloadCMake-8632233a2fc0e27106977a820b6b439e72b45383.zip
CMake-8632233a2fc0e27106977a820b6b439e72b45383.tar.gz
CMake-8632233a2fc0e27106977a820b6b439e72b45383.tar.bz2
CPackWiX: allow customization of generated WiX sources
Added a new variable CPACK_WIX_PATCH_FILE that users can point at an XML patch file. Fragments defined within the patch file will be inserted at supported insertion points (currently Component, File and Directory).
Diffstat (limited to 'Source/CPack/WiX/cmWIXPatchParser.h')
-rw-r--r--Source/CPack/WiX/cmWIXPatchParser.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/Source/CPack/WiX/cmWIXPatchParser.h b/Source/CPack/WiX/cmWIXPatchParser.h
new file mode 100644
index 0000000..4fa5e6f
--- /dev/null
+++ b/Source/CPack/WiX/cmWIXPatchParser.h
@@ -0,0 +1,75 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2013 Kitware, Inc.
+
+ 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 cmCPackWIXPatchParser_h
+#define cmCPackWIXPatchParser_h
+
+#include <cmXMLParser.h>
+
+#include <CPack/cmCPackLog.h>
+
+#include <map>
+#include <list>
+
+struct cmWIXPatchElement
+{
+ ~cmWIXPatchElement();
+
+ typedef std::list<cmWIXPatchElement*> child_list_t;
+ typedef std::map<std::string, std::string> attributes_t;
+
+ std::string name;
+ child_list_t children;
+ attributes_t attributes;
+};
+
+/** \class cmWIXPatchParser
+ * \brief Helper class that parses XML patch files (CPACK_WIX_PATCH_FILE)
+ */
+class cmWIXPatchParser : public cmXMLParser
+{
+public:
+ typedef std::map<std::string, cmWIXPatchElement> fragment_map_t;
+
+ cmWIXPatchParser(fragment_map_t& fragments, cmCPackLog* logger);
+
+private:
+ virtual void StartElement(const char *name, const char **atts);
+
+ void StartFragment(const char **attributes);
+
+ virtual void EndElement(const char *name);
+ virtual void ReportError(int line, int column, const char* msg);
+
+ void ReportValidationError(const std::string& message);
+
+ bool IsValid() const;
+
+ cmCPackLog* Logger;
+
+ enum ParserState
+ {
+ BEGIN_DOCUMENT,
+ BEGIN_FRAGMENTS,
+ INSIDE_FRAGMENT
+ };
+
+ ParserState state;
+
+ bool valid;
+
+ fragment_map_t& fragments;
+
+ std::list<cmWIXPatchElement*> elementStack;
+};
+
+#endif