summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-01-10 02:48:32 +0100
committerMarc-André Lureau <marcandre.lureau@gmail.com>2013-01-10 02:48:32 +0100
commit48b09d7fd654b6d2211f7583d13966f020e0146d (patch)
treed1c7deb8730b261f5bfafeb7ec52c1d0613fed46 /tools
parenta11c1fa04389339b262081de70245221bdf6ca7a (diff)
downloadmsitools-48b09d7fd654b6d2211f7583d13966f020e0146d.tar.gz
msitools-48b09d7fd654b6d2211f7583d13966f020e0146d.tar.xz
msitools-48b09d7fd654b6d2211f7583d13966f020e0146d.zip
wixl: simplify default actions insertion
Diffstat (limited to 'tools')
-rw-r--r--tools/wixl/builder.vala12
-rw-r--r--tools/wixl/msi.vala23
2 files changed, 23 insertions, 12 deletions
diff --git a/tools/wixl/builder.vala b/tools/wixl/builder.vala
index c274927..8f8f5fb 100644
--- a/tools/wixl/builder.vala
+++ b/tools/wixl/builder.vala
@@ -75,18 +75,12 @@ namespace Wixl {
private void sequence_actions () throws GLib.Error {
MsiTableSequence? table = null;
- var flags = 0;
AddDefaultAction add = (action) => {
- var default = MSIDefault.get_action (action);
- if (!(flags in default.flags))
- critical ("Action %s shouldn't be added in this sequence", default.name);
- var seq = table.get_action (default.name);
- seq.sequence = default.sequence;
+ table.add_default_action (action);
};
// AdminExecuteSequence
table = db.table_admin_execute_sequence;
- flags = MSIDefault.ActionFlags.ADMIN_EXECUTE_SEQUENCE;
add (MSIDefault.Action.CostInitialize);
add (MSIDefault.Action.FileCost);
add (MSIDefault.Action.CostFinalize);
@@ -99,7 +93,6 @@ namespace Wixl {
// AdminUISequence
table = db.table_admin_ui_sequence;
- flags = MSIDefault.ActionFlags.ADMIN_UI_SEQUENCE;
add (MSIDefault.Action.CostInitialize);
add (MSIDefault.Action.FileCost);
add (MSIDefault.Action.CostFinalize);
@@ -108,7 +101,6 @@ namespace Wixl {
// AdvtExecuteSequence
table = db.table_advt_execute_sequence;
- flags = MSIDefault.ActionFlags.ADVT_EXECUTE_SEQUENCE;
add (MSIDefault.Action.CostInitialize);
add (MSIDefault.Action.CostFinalize);
add (MSIDefault.Action.InstallValidate);
@@ -122,7 +114,6 @@ namespace Wixl {
// InstallExecuteSequence
table = db.table_install_execute_sequence;
- flags = MSIDefault.ActionFlags.INSTALL_EXECUTE_SEQUENCE;
if (db.table_upgrade.records.length () > 0)
add (MSIDefault.Action.FindRelatedProducts);
if (db.table_launch_condition.records.length () > 0)
@@ -157,7 +148,6 @@ namespace Wixl {
// InstallUISequence
table = db.table_install_ui_sequence;
- flags = MSIDefault.ActionFlags.INSTALL_UI_SEQUENCE;
if (db.table_upgrade.records.length () > 0)
add (MSIDefault.Action.FindRelatedProducts);
if (db.table_launch_condition.records.length () > 0)
diff --git a/tools/wixl/msi.vala b/tools/wixl/msi.vala
index c7fed7a..54428a8 100644
--- a/tools/wixl/msi.vala
+++ b/tools/wixl/msi.vala
@@ -39,6 +39,8 @@ namespace Wixl {
}
public abstract class MsiTableSequence: MsiTable {
+ public class MSIDefault.ActionFlags flags;
+
private void add (string action, int sequence) throws GLib.Error {
var rec = new Libmsi.Record (2);
@@ -74,7 +76,6 @@ namespace Wixl {
HashTable<string, Action> actions = new HashTable<string, Action> (str_hash, str_equal);
-
void sort_topological_visit (Action action, ref List<Action> sorted) {
if (action.visited)
return;
@@ -145,35 +146,55 @@ namespace Wixl {
return action;
}
+
+ public void add_default_action (MSIDefault.Action action) {
+ var default = MSIDefault.get_action (action);
+ if (!(flags in default.flags))
+ critical ("Action %s shouldn't be added in %s", default.name, name);
+
+ var seq = actions.lookup (default.name);
+ if (seq != null)
+ return;
+
+ seq = new Action ();
+ actions.insert (default.name, seq);
+ seq.name = default.name;
+ seq.sequence = default.sequence;
+ }
}
class MsiTableAdminExecuteSequence: MsiTableSequence {
static construct {
set_sequence_table_name ("AdminExecuteSequence");
+ flags = MSIDefault.ActionFlags.ADMIN_EXECUTE_SEQUENCE;
}
}
class MsiTableAdminUISequence: MsiTableSequence {
static construct {
set_sequence_table_name ("AdminUISequence");
+ flags = MSIDefault.ActionFlags.ADMIN_UI_SEQUENCE;
}
}
class MsiTableAdvtExecuteSequence: MsiTableSequence {
static construct {
set_sequence_table_name ("AdvtExecuteSequence");
+ flags = MSIDefault.ActionFlags.ADVT_EXECUTE_SEQUENCE;
}
}
class MsiTableInstallExecuteSequence: MsiTableSequence {
static construct {
set_sequence_table_name ("InstallExecuteSequence");
+ flags = MSIDefault.ActionFlags.INSTALL_EXECUTE_SEQUENCE;
}
}
class MsiTableInstallUISequence: MsiTableSequence {
static construct {
set_sequence_table_name ("InstallUISequence");
+ flags = MSIDefault.ActionFlags.INSTALL_UI_SEQUENCE;
}
}