diff -urN msitools-0.92-orig/Makefile.in msitools-0.92/Makefile.in
--- msitools-0.92-orig/Makefile.in	2013-03-07 15:27:29 -0500
+++ msitools-0.92/Makefile.in	2013-07-13 22:25:48 -0400
@@ -552,7 +552,7 @@
 	$(NULL)
 
 wixl_CPPFLAGS = \
-	-include config.h			\
+	-FI$(top_srcdir)/config.h		\
 	-Iinclude				\
 	-I$(srcdir)/include			\
 	$(WIXL_CFLAGS)				\
diff -urN msitools-0.92-orig/libmsi/insert.c msitools-0.92/libmsi/insert.c
--- msitools-0.92-orig/libmsi/insert.c	2013-02-07 20:04:46 -0500
+++ msitools-0.92/libmsi/insert.c	2013-07-13 18:57:31 -0400
@@ -65,7 +65,7 @@
     {
         if( !vl )
         {
-            TRACE("Not enough elements in the list to insert\n");
+            TRACE("Not enough elements in the list to insert\n", 0);
             goto err;
         }
         switch( vl->val->type )
diff -urN msitools-0.92-orig/libmsi/libmsi-database.c msitools-0.92/libmsi/libmsi-database.c
--- msitools-0.92-orig/libmsi/libmsi-database.c	2013-02-19 17:24:53 -0500
+++ msitools-0.92/libmsi/libmsi-database.c	2013-07-13 19:03:52 -0400
@@ -134,8 +134,10 @@
 static void
 libmsi_database_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
+    LibmsiDatabase *self;
+
     g_return_if_fail (LIBMSI_IS_DATABASE (object));
-    LibmsiDatabase *self = LIBMSI_DATABASE (object);
+    self = LIBMSI_DATABASE (object);
 
     switch (prop_id) {
     case PROP_PATH:
@@ -158,8 +160,10 @@
 static void
 libmsi_database_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
+    LibmsiDatabase *self;
+
     g_return_if_fail (LIBMSI_IS_DATABASE (object));
-    LibmsiDatabase *self = LIBMSI_DATABASE (object);
+    self = LIBMSI_DATABASE (object);
 
     switch (prop_id) {
     case PROP_PATH:
@@ -1231,6 +1235,7 @@
     count = libmsi_record_get_field_count (row);
     for (i = start; i <= count; i++) {
         char *str;
+        const char *sep;
 
         _libmsi_record_get_gsf_input (row, i, &in);
         if (in) {
@@ -1252,7 +1257,7 @@
 
         g_free (str);
 
-        const char *sep = (i < count) ? "\t" : "\r\n";
+        sep = (i < count) ? "\t" : "\r\n";
         if (write (fd, sep, strlen (sep)) != strlen (sep))
             goto end;
     }
@@ -1354,6 +1359,8 @@
     r = _libmsi_query_open( db, &view, query, table );
     if (r == LIBMSI_RESULT_SUCCESS)
     {
+        ExportRow export;
+
         /* write out row 1, the column names */
         r = _libmsi_query_get_column_info(view, LIBMSI_COL_INFO_NAMES, &rec);
         if (r == LIBMSI_RESULT_SUCCESS)
@@ -1380,11 +1387,9 @@
         }
 
         /* write out row 4 onwards, the data */
-        ExportRow export = {
-            .fd = fd,
-            .table_dir = g_file_new_for_path (table),
-            .error = error
-        };
+        export.fd = fd;
+        export.table_dir = g_file_new_for_path (table);
+        export.error = error;
         r = _libmsi_query_iterate_records( view, 0, msi_export_row, &export);
 
         g_object_unref (export.table_dir);
diff -urN msitools-0.92-orig/libmsi/libmsi-istream.c msitools-0.92/libmsi/libmsi-istream.c
--- msitools-0.92-orig/libmsi/libmsi-istream.c	2013-02-06 18:00:31 -0500
+++ msitools-0.92/libmsi/libmsi-istream.c	2013-07-13 19:04:46 -0400
@@ -146,9 +146,10 @@
 libmsi_istream_new (GsfInput *input)
 {
     GsfInput *dup = gsf_input_dup (input, NULL);
+    LibmsiIStream *self;
     g_return_val_if_fail (dup, NULL);
 
-    LibmsiIStream *self = g_object_new (LIBMSI_TYPE_ISTREAM, NULL);
+    self = g_object_new (LIBMSI_TYPE_ISTREAM, NULL);
     self->input = dup;
 
     return self;
diff -urN msitools-0.92-orig/libmsi/libmsi-query.c msitools-0.92/libmsi/libmsi-query.c
--- msitools-0.92-orig/libmsi/libmsi-query.c	2013-02-11 13:33:02 -0500
+++ msitools-0.92/libmsi/libmsi-query.c	2013-07-13 19:05:38 -0400
@@ -67,8 +67,10 @@
 static void
 libmsi_query_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
+    LibmsiQuery *self;
+
     g_return_if_fail (LIBMSI_IS_QUERY (object));
-    LibmsiQuery *self = LIBMSI_QUERY (object);
+    self = LIBMSI_QUERY (object);
 
     switch (prop_id) {
     case PROP_DATABASE:
@@ -88,8 +90,10 @@
 static void
 libmsi_query_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
+    LibmsiQuery *self;
+
     g_return_if_fail (LIBMSI_IS_QUERY (object));
-    LibmsiQuery *self = LIBMSI_QUERY (object);
+    self = LIBMSI_QUERY (object);
 
     switch (prop_id) {
     case PROP_DATABASE:
diff -urN msitools-0.92-orig/libmsi/libmsi-record.c msitools-0.92/libmsi/libmsi-record.c
--- msitools-0.92-orig/libmsi/libmsi-record.c	2013-02-07 20:04:17 -0500
+++ msitools-0.92/libmsi/libmsi-record.c	2013-07-13 19:07:00 -0400
@@ -85,8 +85,10 @@
 static void
 libmsi_record_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
+    LibmsiRecord *self;
+
     g_return_if_fail (LIBMSI_IS_RECORD (object));
-    LibmsiRecord *self = LIBMSI_RECORD (object);
+    self = LIBMSI_RECORD (object);
 
     switch (prop_id) {
     case PROP_COUNT:
@@ -101,8 +103,10 @@
 static void
 libmsi_record_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
+    LibmsiRecord *self;
+
     g_return_if_fail (LIBMSI_IS_RECORD (object));
-    LibmsiRecord *self = LIBMSI_RECORD (object);
+    self = LIBMSI_RECORD (object);
 
     switch (prop_id) {
     case PROP_COUNT:
@@ -601,6 +605,10 @@
                           GInputStream *input, gsize count,
                           GCancellable *cancellable, GError **error)
 {
+    gsize bytes_read = 0;
+    GsfInput *stm = NULL;
+    guint8 *data;
+
     g_return_val_if_fail (LIBMSI_IS_RECORD (rec), FALSE);
     g_return_val_if_fail (G_IS_INPUT_STREAM (input), FALSE);
     g_return_val_if_fail (field > 0 && field <= rec->count, FALSE);
@@ -608,9 +616,7 @@
     g_return_val_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable), FALSE);
     g_return_val_if_fail (!error || *error == NULL, FALSE);
 
-    gsize bytes_read = 0;
-    GsfInput *stm = NULL;
-    guint8 *data = g_malloc (count);
+    data = g_malloc (count);
 
     if (!g_input_stream_read_all (input, data, count, &bytes_read,
                                   cancellable, error) ||
diff -urN msitools-0.92-orig/libmsi/libmsi-summary-info.c msitools-0.92/libmsi/libmsi-summary-info.c
--- msitools-0.92-orig/libmsi/libmsi-summary-info.c	2013-02-07 20:17:23 -0500
+++ msitools-0.92/libmsi/libmsi-summary-info.c	2013-07-13 19:18:27 -0400
@@ -76,8 +76,10 @@
 static void
 summary_info_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
+    LibmsiSummaryInfo *self;
+
     g_return_if_fail (LIBMSI_IS_SUMMARY_INFO (object));
-    LibmsiSummaryInfo *self = LIBMSI_SUMMARY_INFO (object);
+    self = LIBMSI_SUMMARY_INFO (object);
 
     switch (prop_id) {
     case PROP_DATABASE:
@@ -96,8 +98,10 @@
 static void
 summary_info_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
+    LibmsiSummaryInfo *self;
+
     g_return_if_fail (LIBMSI_IS_SUMMARY_INFO (object));
-    LibmsiSummaryInfo *self = LIBMSI_SUMMARY_INFO (object);
+    self = LIBMSI_SUMMARY_INFO (object);
 
     switch (prop_id) {
     case PROP_DATABASE:
@@ -244,19 +248,19 @@
 
 static gchar* filetime_to_string (guint64 ft)
 {
-    struct tm tm;
+    struct tm *tm;
     time_t t;
 
     ft /= 10000000ULL;
     ft -= 134774ULL * 86400ULL;
     t = ft;
 
-    if (!gmtime_r (&t, &tm))
+    if (!(tm = gmtime (&t)))
         return NULL;
 
     return g_strdup_printf ("%d/%d/%d %d:%d:%d",
-                            tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
-                            tm.tm_hour, tm.tm_min, tm.tm_sec);
+                            tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
+                            tm->tm_hour, tm->tm_min, tm->tm_sec);
 }
 
 static void parse_filetime( const char *str, guint64 *ft )
diff -urN msitools-0.92-orig/libmsi/string.c msitools-0.92/libmsi/string.c
--- msitools-0.92-orig/libmsi/string.c	2013-02-07 20:07:52 -0500
+++ msitools-0.92/libmsi/string.c	2013-07-13 19:11:26 -0400
@@ -562,7 +562,7 @@
     char *data = NULL;
     uint8_t *pool = NULL;
 
-    TRACE("\n");
+    TRACE("\n", 0);
 
     /* construct the new table in memory first */
     string_totalsize( st, &datasize, &poolsize );
diff -urN msitools-0.92-orig/libmsi/table.c msitools-0.92/libmsi/table.c
--- msitools-0.92-orig/libmsi/table.c	2013-02-19 17:24:53 -0500
+++ msitools-0.92/libmsi/table.c	2013-07-13 20:00:12 -0400
@@ -27,6 +27,10 @@
 
 #include "debug.h"
 
+#ifdef _MSC_VER
+#include <intrin.h>
+#endif
+
 
 #define LibmsiTable_HASH_TABLE_SIZE 37
 
@@ -263,7 +267,7 @@
     msi_free(encname);
     if( !stm )
     {
-        TRACE("open stream failed - empty table?\n");
+        TRACE("open stream failed - empty table?\n", 0);
         return ret;
     }
 
@@ -1527,7 +1531,7 @@
             continue;
 
         if ( MSITYPE_IS_BINARY(tv->columns[i].type) )
-            TRACE("skipping binary column\n");
+            TRACE("skipping binary column\n", 0);
         else if ( tv->columns[i].type & MSITYPE_STRING )
         {
             const char *str;
@@ -1792,10 +1796,18 @@
     for (i = 0; i < tv->table->col_count; i++)
     {
         if (tv->table->colinfo[i].type & MSITYPE_TEMPORARY)
+#ifdef _MSC_VER
+            _InterlockedIncrement((long*)(&tv->table->colinfo[i].ref_count));
+#else
             __sync_add_and_fetch(&tv->table->colinfo[i].ref_count, 1);
+#endif
     }
 
+#ifdef _MSC_VER
+    return _InterlockedIncrement((long*)(&tv->table->ref_count));
+#else
     return __sync_add_and_fetch(&tv->table->ref_count, 1);
+#endif
 }
 
 static unsigned table_view_remove_column(LibmsiView *view, const char *table, unsigned number)
@@ -1844,7 +1856,11 @@
     {
         if (tv->table->colinfo[i].type & MSITYPE_TEMPORARY)
         {
+#ifdef _MSC_VER
+            ref = _InterlockedDecrement((long*)(&tv->table->colinfo[i].ref_count));
+#else
             ref = __sync_sub_and_fetch(&tv->table->colinfo[i].ref_count, 1);
+#endif
             if (ref == 0)
             {
                 r = table_view_remove_column(view, tv->table->colinfo[i].tablename,
@@ -1855,7 +1871,11 @@
         }
     }
 
+#ifdef _MSC_VER
+    ref = _InterlockedDecrement((long*)(&tv->table->ref_count));
+#else
     ref = __sync_sub_and_fetch(&tv->table->ref_count, 1);
+#endif
     if (ref == 0)
     {
         if (!tv->table->row_count)
@@ -1900,7 +1920,11 @@
     {
         if (!strcmp( msitable->colinfo[i].colname, column ))
         {
+#ifdef _MSC_VER
+            _InterlockedIncrement((long*)(&msitable->colinfo[i].ref_count));
+#else
             __sync_add_and_fetch(&msitable->colinfo[i].ref_count, 1);
+#endif
             break;
         }
     }
@@ -2157,7 +2181,7 @@
     if( !rec )
         return rec;
 
-    TRACE("row ->\n");
+    TRACE("row ->\n", 0);
     for( i=0; i<tv->num_cols; i++ )
     {
         if ( (mask&1) && (i>=(mask>>8)) )
@@ -2236,7 +2260,7 @@
         const char *sval;
 
         if( libmsi_record_is_null( rec, i ) )
-            TRACE("row -> []\n");
+            TRACE("row -> []\n", 0);
         else if( (sval = _libmsi_record_get_string_raw( rec, i )) )
             TRACE("row -> [%s]\n", debugstr_a(sval));
         else
@@ -2511,7 +2535,7 @@
             }
             else
             {
-                TRACE("inserting row\n");
+                TRACE("inserting row\n", 0);
                 r = table_view_insert_row( &tv->view, rec, -1, false );
                 if (r != LIBMSI_RESULT_SUCCESS)
                     g_warning("failed to insert row %u\n", r);
diff -urN msitools-0.92-orig/tools/msibuild.c msitools-0.92/tools/msibuild.c
--- msitools-0.92-orig/tools/msibuild.c	2013-02-07 19:48:42 -0500
+++ msitools-0.92/tools/msibuild.c	2013-07-13 21:38:48 -0400
@@ -26,7 +26,11 @@
 #include <sys/stat.h>
 #include <libmsi.h>
 #include <limits.h>
+#ifdef _MSC_VER
+#include <uuid-win32.h>
+#else
 #include <uuid.h>
+#endif
 
 #include "sqldelim.h"
 
diff -urN msitools-0.92-orig/tools/msiinfo.c msitools-0.92/tools/msiinfo.c
--- msitools-0.92-orig/tools/msiinfo.c	2013-02-07 19:58:42 -0500
+++ msitools-0.92/tools/msiinfo.c	2013-07-13 22:08:12 -0400
@@ -34,6 +34,15 @@
 #include <fcntl.h>
 #include <limits.h>
 
+#ifdef _MSC_VER
+#  ifndef ssize_t
+     typedef int ssize_t;
+#  endif
+#  ifndef STDOUT_FILENO
+#    define STDOUT_FILENO 1
+#  endif
+#endif
+
 struct Command {
     const char *cmd;
     const char *desc;
@@ -43,7 +52,7 @@
     int (*func)(struct Command *cmd, int argc, char **argv, GError **error);
 };
 
-static struct Command cmds[];
+static struct Command *cmds;
 
 static void usage(FILE *out)
 {
@@ -690,67 +699,97 @@
     return 0;
 }
 
-static struct Command cmds[] = {
+static struct Command _cmds[] = {
     {
-        .cmd = "help",
-        .opts = "[SUBCOMMAND]",
-        .desc = "Show program or subcommand usage",
-        .func = cmd_help,
+        "help",
+        "Show program or subcommand usage",
+        0,
+        "[SUBCOMMAND]",
+        0,
+        cmd_help
     },
     {
-        .cmd = "streams",
-        .opts = "FILE",
-        .desc = "List streams in a .msi file",
-        .func = cmd_streams,
+        "streams",
+        "List streams in a .msi file",
+        0,
+        "FILE",
+        0,
+        cmd_streams
     },
     {
-        .cmd = "tables",
-        .opts = "FILE",
-        .desc = "List tables in a .msi file",
-        .func = cmd_tables,
+        "tables",
+        "List tables in a .msi file",
+        0,
+        "FILE",
+        0,
+        cmd_tables
     },
     {
-        .cmd = "extract",
-        .opts = "FILE STREAM",
-        .desc = "Extract a binary stream from an .msi file",
-        .func = cmd_extract,
+        "extract",
+        "Extract a binary stream from an .msi file",
+        0,
+        "FILE STREAM",
+        0,
+        cmd_extract
     },
     {
-        .cmd = "export",
-        .opts = "[-s] FILE TABLE\n\nOptions:\n"
-                "  -s                Format output as an SQL query",
-        .desc = "Export a table in text form from an .msi file",
-        .func = cmd_export,
+        "export",
+        "Export a table in text form from an .msi file",
+        0,
+        "[-s] FILE TABLE\n\nOptions:\n"
+        "  -s                Format output as an SQL query",
+        0,
+        cmd_export
     },
     {
-        .cmd = "suminfo",
-        .opts = "FILE",
-        .desc = "Print summary information",
-        .func = cmd_suminfo,
+        "suminfo",
+        "Print summary information",
+        0,
+        "FILE",
+        0,
+        cmd_suminfo
     },
     {
-        .cmd = "-h",
-        .func = cmd_help,
+        "-h",
+        0,
+        0,
+        0,
+        0,
+        cmd_help
     },
     {
-        .cmd = "--help",
-        .func = cmd_help,
+        "--help",
+        0,
+        0,
+        0,
+        0,
+        cmd_help
     },
     {
-        .cmd = "-v",
-        .func = cmd_version
+        "-v",
+        0,
+        0,
+        0,
+        0,
+        cmd_version
     },
     {
-        .cmd = "--version",
-        .func = cmd_version
+        "--version",
+        0,
+        0,
+        0,
+        0,
+        cmd_version
     },
     { NULL },
 };
+static struct Command *cmds = _cmds;
 
 int main(int argc, char **argv)
 {
     GError *error = NULL;
     struct Command *cmd = NULL;
+    int result;
 
 #if !GLIB_CHECK_VERSION(2,35,1)
     g_type_init ();
@@ -767,7 +806,7 @@
         usage(stderr);
     }
 
-    int result = cmd->func(cmd, argc - 1, argv + 1, &error);
+    result = cmd->func(cmd, argc - 1, argv + 1, &error);
     if (error != NULL) {
         g_printerr("error: %s\n", error->message);
         print_libmsi_error(error->code);
diff -urN msitools-0.92-orig/tools/wixl/util.c msitools-0.92/tools/wixl/util.c
--- msitools-0.92-orig/tools/wixl/util.c	2013-03-07 15:28:12 -0500
+++ msitools-0.92/tools/wixl/util.c	2013-07-13 22:33:52 -0400
@@ -82,6 +82,9 @@
 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
 static gint _vala_array_length (gpointer array);
 
+#ifdef _MSC_VER
+#  include <uuid-win32.h>
+#endif
 
 GQuark wixl_error_quark (void) {
 	return g_quark_from_static_string ("wixl_error-quark");
diff -urN msitools-0.92-orig/uuid-win32.h msitools-0.92/uuid-win32.h
--- msitools-0.92-orig/uuid-win32.h	1969-12-31 19:00:00 -0500
+++ msitools-0.92/uuid-win32.h	2013-07-13 22:50:42 -0400
@@ -0,0 +1,18 @@
+#ifndef __UUID_WIN32_H__
+#define __UUID_WIN32_H__
+
+#include <rpc.h>
+
+typedef UUID uuid_t;
+
+#define uuid_generate(uu) UuidCreate(&(uu))
+#define uuid_unparse(uu,str) \
+        do { \
+                RPC_CSTR __buf__; \
+                UuidToString(&(uu), &__buf__); \
+                strcpy(str, __buf__); \
+                RpcStringFree(&__buf__); \
+        } while (0)
+#define uuid_unparse_upper uuid_unparse
+
+#endif /* __UUID_WIN32_H__ */
