summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-07-11 18:19:55 +0200
committerMarc-André Lureau <marcandre.lureau@gmail.com>2013-07-11 18:26:27 +0200
commitfb78165f1e084f48abd93e003a6045fa11a9bf69 (patch)
treebb420cdd91e3cad3d8dcdc187f57da2d2c142f2f /tools
parent12f5b505af3a28ec59f1e253544502367564afe8 (diff)
downloadmsitools-fb78165f1e084f48abd93e003a6045fa11a9bf69.zip
msitools-fb78165f1e084f48abd93e003a6045fa11a9bf69.tar.gz
msitools-fb78165f1e084f48abd93e003a6045fa11a9bf69.tar.xz
wixl: Add CreateFolder
Diffstat (limited to 'tools')
-rw-r--r--tools/wixl/builder.vala8
-rw-r--r--tools/wixl/msi.vala20
-rw-r--r--tools/wixl/wix.vala1
3 files changed, 29 insertions, 0 deletions
diff --git a/tools/wixl/builder.vala b/tools/wixl/builder.vala
index 65c97bd..368b6c2 100644
--- a/tools/wixl/builder.vala
+++ b/tools/wixl/builder.vala
@@ -171,6 +171,11 @@ namespace Wixl {
}
if (db.table_service_install.records.length () > 0)
add (MSIDefault.Action.InstallServices);
+ if (db.table_create_folder.records.length () > 0) {
+ add (MSIDefault.Action.RemoveFolders);
+ add (MSIDefault.Action.CreateFolders);
+ }
+
table.add_sorted_actions ();
// InstallUISequence
@@ -828,6 +833,9 @@ namespace Wixl {
}
public override void visit_create_folder (WixCreateFolder folder) throws GLib.Error {
+ var component = folder.parent as WixComponent;
+ var dir = get_directory (component);
+ db.table_create_folder.add (dir.Id, component.Id);
}
public override void visit_fragment (WixFragment fragment) throws GLib.Error {
diff --git a/tools/wixl/msi.vala b/tools/wixl/msi.vala
index cf7d46f..e2b5490 100644
--- a/tools/wixl/msi.vala
+++ b/tools/wixl/msi.vala
@@ -489,6 +489,23 @@ namespace Wixl {
}
}
+ class MsiTableCreateFolder: MsiTable {
+ static construct {
+ name = "CreateFolder";
+ sql_create = "CREATE TABLE `CreateFolder` (`Directory_` CHAR(72) NOT NULL, `Component_` CHAR(72) NOT NULL PRIMARY KEY `Directory_`, `Component_`)";
+ sql_insert = "INSERT INTO `CreateFolder` (`Directory_`, `Component_`) VALUES (?, ?)";
+ }
+
+ public void add (string Directory, string Component) throws GLib.Error {
+ var rec = new Libmsi.Record (2);
+ if (!rec.set_string (1, Directory) ||
+ !rec.set_string (2, Component))
+ throw new Wixl.Error.FAILED ("failed to add record");
+
+ records.append (rec);
+ }
+ }
+
class MsiTableRemoveFile: MsiTable {
static construct {
name = "RemoveFile";
@@ -754,6 +771,7 @@ namespace Wixl {
public MsiTableAppSearch table_app_search;
public MsiTableCustomAction table_custom_action;
public MsiTableRegLocator table_reg_locator;
+ public MsiTableCreateFolder table_create_folder;
public HashTable<string, MsiTable> tables;
@@ -818,6 +836,7 @@ namespace Wixl {
table_app_search = new MsiTableAppSearch ();
table_custom_action = new MsiTableCustomAction ();
table_reg_locator = new MsiTableRegLocator ();
+ table_create_folder = new MsiTableCreateFolder ();
foreach (var t in new MsiTable[] {
table_admin_execute_sequence,
@@ -845,6 +864,7 @@ namespace Wixl {
table_app_search,
table_custom_action,
table_reg_locator,
+ table_create_folder,
new MsiTableError (),
new MsiTableValidation ()
}) {
diff --git a/tools/wixl/wix.vala b/tools/wixl/wix.vala
index 93ff935..3120be7 100644
--- a/tools/wixl/wix.vala
+++ b/tools/wixl/wix.vala
@@ -1025,6 +1025,7 @@ namespace Wixl {
name = "Component";
add_child_types (child_types, {
+ typeof (WixCreateFolder),
typeof (WixRemoveFolder),
typeof (WixRegistryValue),
typeof (WixFile),