diff --git a/.gitignore b/.gitignore
index 88b82deb8..79265b422 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,19 +7,23 @@
*.exe.config
*.la
*.lo
+*.msi
+*.msm
*.mdb
*.o
*.pc
*.pidb
*.pdb
*.userprefs
-*.wxs
+*.wixobj
+*.wixpdb
aclocal.m4
autom4te.cache
audit/data
config.*
configure
depcomp
+doc/gtk-sharp-3-docs.*
generated
generated.c
generated-stamp
@@ -28,10 +32,12 @@ libtool
ltmain.sh
m4/
missing
+msi/gtk-sharp-3.0.wxs
+msi/unmanaged/download-stamp
+msi/unmanaged/source/*
policy.config
policy.*.config
stamp-h1
AssemblyInfo.cs
Makefile
Makefile.in
-doc/gtk-sharp-3-docs.*
diff --git a/Makefile.am b/Makefile.am
index f6c92a58b..13edd1d90 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = sources generator parser glib gio cairo pango atk gdk gtk gtkdotnet sample doc
+SUBDIRS = sources generator parser glib gio cairo pango atk gdk gtk gtkdotnet sample doc msi
EXTRA_DIST = \
gapi.xsd \
@@ -8,26 +8,3 @@ EXTRA_DIST = \
HACKING \
README \
README.generator
-
-win32-installer: all
- candle.exe gtk-sharp-2.0-lib.wxs
- light.exe gtk-sharp-2.0-lib.wixobj
- candle.exe gtk-sharp-2.0-dev.wxs
- light.exe gtk-sharp-2.0-dev.wixobj
-
-assembly_dirs = glib gio pango atk gdk gtk glade gtkdotnet
-
-cross-bundle: all
- mkdir -p gtk-sharp-cross-$(VERSION)
- rm -rf gtk-sharp-cross-$(VERSION)/*
- cp *.wxs gtk-sharp-cross-$(VERSION)
- cp generator/gapi_codegen.exe gtk-sharp-cross-$(VERSION)
- cp */glue/.libs/*.dll gtk-sharp-cross-$(VERSION)
- @for a in $(assembly_dirs); do \
- mkdir -p gtk-sharp-cross-$(VERSION)/$$a; \
- cp $$a/*.dll gtk-sharp-cross-$(VERSION)/$$a; \
- done
- cp sample/GtkDemo/GtkDemo.exe gtk-sharp-cross-$(VERSION)
- zip -9r gtk-sharp-cross-$(VERSION).zip gtk-sharp-cross-$(VERSION)
- rm -rf gtk-sharp-cross-$(VERSION)
-
diff --git a/configure.ac b/configure.ac
index 05e6f2e87..34f5eb04d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -87,6 +87,14 @@ AC_ARG_ENABLE(debug, [ --enable-debug Build debugger (.mdb) files for
)
fi
+enable_msi="no"
+if test "x$platform_win32" = "xyes"; then
+ AC_PATH_PROG(WIX, candle, no)
+ if test "x$WIX" != "xno" ; then
+ enable_msi="yes"
+ fi
+fi
+
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
if test "x$PKG_CONFIG" = "xno"; then
AC_MSG_ERROR([You need to install pkg-config])
@@ -216,6 +224,7 @@ AC_SUBST(MDOC)
AM_CONDITIONAL(ENABLE_DOTNET, test "x$enable_dotnet" = "xyes")
AM_CONDITIONAL(ENABLE_MONODOC, test "x$enable_monodoc" = "xyes")
+AM_CONDITIONAL(ENABLE_MSI, test "x$enable_msi" = "xyes")
AC_SUBST(CFLAGS)
@@ -258,6 +267,9 @@ gtkdotnet/Makefile
gtkdotnet/gtk-dotnet.dll.config
gtkdotnet/gtk-dotnet-3.0.pc
doc/Makefile
+msi/gtk-sharp-3.0.wxs
+msi/Makefile
+msi/unmanaged/Makefile
sample/GtkDemo/Makefile
sample/Makefile
sample/pixmaps/Makefile
diff --git a/gtk-sharp-2.0-dev.wxs.in b/gtk-sharp-2.0-dev.wxs.in
deleted file mode 100644
index 98bfea000..000000000
--- a/gtk-sharp-2.0-dev.wxs.in
+++ /dev/null
@@ -1,114 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "" OR Installed]]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "" OR Installed]]>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/gtk-sharp-2.0-lib.wxs.in b/gtk-sharp-2.0-lib.wxs.in
deleted file mode 100755
index 15649ef12..000000000
--- a/gtk-sharp-2.0-lib.wxs.in
+++ /dev/null
@@ -1,364 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/msi/Makefile.am b/msi/Makefile.am
new file mode 100644
index 000000000..bceda3229
--- /dev/null
+++ b/msi/Makefile.am
@@ -0,0 +1,30 @@
+SUBDIRS = unmanaged .
+
+assembly_dirs = glib gio pango atk gdk gtk gtkdotnet cairo
+
+if ENABLE_MSI
+TARGET=gtk-sharp-3.0.msi
+else
+TARGET=
+endif
+
+noinst_DATA = $(TARGET)
+
+gtk-sharp-3.0.msi: gtk-sharp-3.0.wxs
+ mkdir -p binaries
+ rm -rf binaries/*
+ cp $(top_builddir)/generator/gapi_codegen.exe binaries
+ cp $(top_builddir)/*/glue/.libs/*.dll binaries
+ for a in $(assembly_dirs); do \
+ mkdir -p binaries/$$a; \
+ cp $(top_builddir)/$$a/*.dll binaries/$$a; \
+ cp $(top_builddir)/$$a/*.pdb binaries/$$a; \
+ done
+ mv binaries/libatksharpglue-3.dll binaries/atksharpglue-3.dll
+ mv binaries/libgiosharpglue-3.dll binaries/giosharpglue-3.dll
+ mv binaries/libgtksharpglue-3.dll binaries/gtksharpglue-3.dll
+ mv binaries/libpangosharpglue-3.dll binaries/pangosharpglue-3.dll
+
+ cp $(top_builddir)/sample/GtkDemo/GtkDemo.exe binaries
+ candle -ext WixUIExtension gtk-sharp-3.0.wxs
+ light -cultures:en-us -ext WixUIExtension -ext WixNetFxExtension -out gtk-sharp-$(VERSION).msi gtk-sharp-3.0.wixobj
diff --git a/msi/gtk-sharp-3.0.wxs.in b/msi/gtk-sharp-3.0.wxs.in
new file mode 100644
index 000000000..d1dd991e7
--- /dev/null
+++ b/msi/gtk-sharp-3.0.wxs.in
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+ "1"]]>
+
+ 1
+
+ 1
+ Installed AND PATCH
+
+ 1
+ 1
+ NOT WIXUI_DONTVALIDATEPATH
+ "1"]]>
+ WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"
+ 1
+ 1
+
+ NOT Installed
+ Installed AND NOT PATCH
+ Installed AND PATCH
+
+ 1
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
diff --git a/msi/unmanaged/Makefile.am b/msi/unmanaged/Makefile.am
new file mode 100644
index 000000000..6afe677d9
--- /dev/null
+++ b/msi/unmanaged/Makefile.am
@@ -0,0 +1,33 @@
+if ENABLE_MSI
+TARGET=unmanaged.msm
+else
+TARGET=
+endif
+
+noinst_DATA = $(TARGET)
+
+DOWNLOADS = downloads.win32
+
+download-stamp: $(DOWNLOADS)
+ rm -rf source
+ mkdir -p source
+ cd source && for i in `cat ../$(DOWNLOADS)`; do wget --no-check-certificate $$i; done && for j in `ls *.zip`; do unzip $$j; rm $$j; done
+ touch download-stamp
+
+unmanaged.wixobj: unmanaged.wxs redirector.exe download-stamp
+ candle unmanaged.wxs
+
+unmanaged.msm: unmanaged.wixobj
+ light unmanaged.wixobj
+
+bundle-scanner.exe: bundle-scanner.cs
+ $(CSC) bundle-scanner.cs
+
+redirector.exe: redirector.cs
+ $(CSC) redirector.cs
+
+scan: download-stamp bundle-scanner.exe
+ $(RUNTIME) bundle-scanner.exe --wix=unmanaged.wxs --bundle=source
+
+CLEANFILES = source
+EXTRA_DIST = redirector.cs unmanaged.wxs downloads.win32 ignores
diff --git a/msi/unmanaged/bundle-scanner.cs b/msi/unmanaged/bundle-scanner.cs
new file mode 100644
index 000000000..7cf5cc383
--- /dev/null
+++ b/msi/unmanaged/bundle-scanner.cs
@@ -0,0 +1,176 @@
+// Copyright (c) 2010 Novell, Inc.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the GNU General Public
+// License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Xml;
+
+public class BundleScanner {
+
+ public static int Main (string[] args)
+ {
+ Dictionary known_files = null;
+ string bundle_path = null;
+
+ foreach (string arg in args) {
+
+ if (arg.StartsWith("--wix=")) {
+ string wix_filename = arg.Substring (6);
+ try {
+ XmlDocument wix_doc = new XmlDocument ();
+ wix_doc.Load (wix_filename);
+ known_files = GetSourcesFromDoc (wix_doc);
+ } catch (XmlException e) {
+ Console.WriteLine ("Invalid wix file.");
+ Console.WriteLine (e);
+ return 1;
+ }
+ } else if (arg.StartsWith ("--bundle=")) {
+ bundle_path = arg.Substring (9);
+ if (!Directory.Exists (bundle_path)) {
+ Console.WriteLine ("Invalid bundle directory.");
+ return 1;
+ }
+ } else {
+ Console.WriteLine ("Usage: bundle-scanner --wix= --bundle=");
+ return 1;
+ }
+ }
+
+ if (bundle_path == null || known_files == null) {
+ Console.WriteLine ("Usage: bundle-scanner --wix= --bundle=");
+ return 1;
+ }
+
+ Dictionary ignores = new Dictionary ();
+ if (File.Exists ("ignores")) {
+ using (StreamReader rdr = new StreamReader ("ignores")) {
+ while (rdr.Peek () >= 0)
+ ignores [rdr.ReadLine ()] = true;
+ }
+ }
+
+ BundleScanner scanner = new BundleScanner (bundle_path, known_files, ignores);
+ scanner.Scan ();
+
+ List missing = scanner.ExpectedFiles;
+ if (missing.Count > 0) {
+ Console.WriteLine ();
+ Console.WriteLine ("Expected files missing in bundle:");
+ Console.WriteLine ("---------------------------");
+ foreach (string file in missing)
+ Console.WriteLine (" " + file);
+ }
+
+ List unexpected = scanner.UnexpectedFiles;
+ if (unexpected.Count > 0) {
+ Console.WriteLine ();
+ Console.WriteLine ("Unexpected files in bundle:");
+ Console.WriteLine ("---------------------------");
+ foreach (string file in unexpected)
+ Console.WriteLine (" " + file);
+ }
+
+ return 0;
+ }
+
+ static Dictionary GetSourcesFromDoc (XmlDocument doc)
+ {
+ Dictionary result = new Dictionary ();
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ FindFileNodes (node as XmlElement, result);
+ return result;
+ }
+
+ static void FindFileNodes (XmlElement elem, Dictionary sources)
+ {
+ if (elem == null)
+ return;
+ if (elem.Name == "File") {
+ string source = elem.GetAttribute ("Source");
+ if (!source.StartsWith ("custom\\"))
+ sources [source] = true;
+ } else {
+ foreach (XmlNode node in elem.ChildNodes)
+ FindFileNodes (node as XmlElement, sources);
+ }
+ }
+
+ Dictionary ignores = null;
+ Dictionary known_files = null;
+ DirectoryInfo bundle_dir = null;
+ List unexpected_files = new List ();
+ int relative_prefix_length;
+
+ BundleScanner (string path, Dictionary known_files, Dictionary ignores)
+ {
+ bundle_dir = new DirectoryInfo (path);
+ this.known_files = known_files;
+ this.ignores = ignores;
+ relative_prefix_length = bundle_dir.FullName.Length - bundle_dir.Name.Length;
+ }
+
+ public List ExpectedFiles {
+ get {
+ List result = new List ();
+ foreach (string s in known_files.Keys)
+ result.Add (s);
+ result.Sort ();
+ return result;
+ }
+ }
+
+ public List UnexpectedFiles {
+ get {
+ unexpected_files.Sort ();
+ return unexpected_files;
+ }
+ }
+
+ public void Scan ()
+ {
+ Scan (bundle_dir);
+ }
+
+ string GetRelativeFileName (string filename)
+ {
+ return filename.Substring (relative_prefix_length);
+ }
+
+ void Scan (DirectoryInfo dir)
+ {
+ foreach (FileInfo file in dir.GetFiles ()) {
+ string relative = GetRelativeFileName (file.FullName);
+ relative = relative.Replace ('/', '\\');
+ if (ignores.ContainsKey (relative))
+ continue;
+ if (known_files.ContainsKey (relative))
+ known_files.Remove (relative);
+ else
+ unexpected_files.Add (relative);
+ }
+
+ foreach (DirectoryInfo sub in dir.GetDirectories ()) {
+ string relative = GetRelativeFileName (sub.FullName);
+ relative = relative.Replace ('/', '\\');
+ if (ignores.ContainsKey (relative))
+ continue;
+ Scan (sub);
+ }
+ }
+
+}
diff --git a/msi/unmanaged/downloads.win32 b/msi/unmanaged/downloads.win32
new file mode 100644
index 000000000..e8e847862
--- /dev/null
+++ b/msi/unmanaged/downloads.win32
@@ -0,0 +1 @@
+http://win32builder.gnome.org/gtk+-bundle_3.6.4-20130921_win32.zip
diff --git a/msi/unmanaged/ignores b/msi/unmanaged/ignores
new file mode 100644
index 000000000..0cf5f1db0
--- /dev/null
+++ b/msi/unmanaged/ignores
@@ -0,0 +1,206 @@
+source\bin\autopoint
+source\bin\croco-0.6-config
+source\bin\envsubst.exe
+source\bin\fc-cache.exe
+source\bin\fc-cat.exe
+source\bin\fc-list.exe
+source\bin\fc-match.exe
+source\bin\fc-pattern.exe
+source\bin\fc-query.exe
+source\bin\fc-scan.exe
+source\bin\freetype-config
+source\bin\gdbus-codegen
+source\bin\gdbus.exe
+source\bin\gdk-pixbuf-csource.exe
+source\bin\gdk-pixbuf-pixdata.exe
+source\bin\gettext.exe
+source\bin\gettext.sh
+source\bin\gettextize
+source\bin\gio-querymodules.exe
+source\bin\glib-compile-resources.exe
+source\bin\glib-compile-schemas.exe
+source\bin\glib-genmarshal.exe
+source\bin\glib-gettextize
+source\bin\glib-mkenums
+source\bin\gobject-query.exe
+source\bin\gresource.exe
+source\bin\gsettings.exe
+source\bin\gtk-update-icon-cache.exe
+source\bin\gtk-update-icon-cache.exe.manifest
+source\bin\gtk3-demo-application.exe
+source\bin\gtk3-demo.exe
+source\bin\gtk3-widget-factory.exe
+source\bin\libcairo-script-interpreter-2.dll
+source\bin\libpng-config
+source\bin\libpng15-config
+source\bin\ngettext.exe
+source\bin\pango-view.exe
+source\bin\pkg-config.exe
+source\bin\xml2-config
+source\gtk+-bundle_3.6.4-20130921_win32.README.txt
+source\include
+source\lib\atk-1.0.def
+source\lib\atk-1.0.lib
+source\lib\cairo.def
+source\lib\cairo.lib
+source\lib\fontconfig.def
+source\lib\fontconfig.lib
+source\lib\gailutil.def
+source\lib\gailutil.lib
+source\lib\gdbus-2.0
+source\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache
+source\lib\gdk-pixbuf-2.0\2.10.0\loaders\libpixbufloader-svg.dll.a
+source\lib\gdk-win32-3.0.def
+source\lib\gdk-win32-3.0.lib
+source\lib\gdk_pixbuf-2.0.def
+source\lib\gdk_pixbuf-2.0.lib
+source\lib\gio-2.0.def
+source\lib\gio-2.0.lib
+source\lib\glib-2.0.def
+source\lib\glib-2.0.lib
+source\lib\glib-2.0\include\glibconfig.h
+source\lib\gmodule-2.0.def
+source\lib\gmodule-2.0.lib
+source\lib\gobject-2.0.def
+source\lib\gobject-2.0.lib
+source\lib\gthread-2.0.def
+source\lib\gthread-2.0.lib
+source\lib\gtk-3.0\3.0.0\immodules.cache
+source\lib\gtk-win32-3.0.def
+source\lib\gtk-win32-3.0.lib
+source\lib\libatk-1.0.dll.a
+source\lib\libcairo-gobject.dll.a
+source\lib\libcairo-script-interpreter.dll.a
+source\lib\libcairo.dll.a
+source\lib\libcroco-0.6.dll.a
+source\lib\libffi-3.0.12
+source\lib\libffi.dll.a
+source\lib\libfontconfig.dll.a
+source\lib\libfreetype.dll.a
+source\lib\libgailutil-3.dll.a
+source\lib\libgdk-3.dll.a
+source\lib\libgdk_pixbuf-2.0.dll.a
+source\lib\libgio-2.0.dll.a
+source\lib\libglib-2.0.dll.a
+source\lib\libgmodule-2.0.dll.a
+source\lib\libgobject-2.0.dll.a
+source\lib\libgthread-2.0.dll.a
+source\lib\libgtk-3.dll.a
+source\lib\libiconv.dll.a
+source\lib\libintl.dll.a
+source\lib\libjasper.dll.a
+source\lib\libjpeg.dll.a
+source\lib\liblzma.dll.a
+source\lib\libpango-1.0.dll.a
+source\lib\libpangocairo-1.0.dll.a
+source\lib\libpangoft2-1.0.dll.a
+source\lib\libpangowin32-1.0.dll.a
+source\lib\libpixman-1.dll.a
+source\lib\libpng.dll.a
+source\lib\libpng15.dll.a
+source\lib\librsvg-2.dll.a
+source\lib\libtiff.dll.a
+source\lib\libxml2.dll.a
+source\lib\libz.dll.a
+source\lib\pango-1.0.def
+source\lib\pango-1.0.lib
+source\lib\pangocairo-1.0.def
+source\lib\pangocairo-1.0.lib
+source\lib\pangoft2-1.0.def
+source\lib\pangoft2-1.0.lib
+source\lib\pangowin32-1.0.def
+source\lib\pangowin32-1.0.lib
+source\lib\pkgconfig
+source\lib\xml2Conf.sh
+source\manifest
+source\share\aclocal
+source\share\bash-completion
+source\share\doc
+source\share\fontconfig
+source\share\gdb
+source\share\glib-2.0\gdb
+source\share\glib-2.0\gettext
+source\share\gtk-3.0
+source\share\gtk-doc
+source\share\icons\gnome-light
+source\share\locale\be\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\be\LC_MESSAGES\gettext-tools.mo
+source\share\locale\bg\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\bg\LC_MESSAGES\gettext-tools.mo
+source\share\locale\ca\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\ca\LC_MESSAGES\gettext-tools.mo
+source\share\locale\cs\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\cs\LC_MESSAGES\gettext-tools.mo
+source\share\locale\da\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\da\LC_MESSAGES\gettext-tools.mo
+source\share\locale\de\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\de\LC_MESSAGES\gettext-tools.mo
+source\share\locale\el\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\el\LC_MESSAGES\gettext-tools.mo
+source\share\locale\en@boldquot\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\en@boldquot\LC_MESSAGES\gettext-tools.mo
+source\share\locale\en@quot\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\en@quot\LC_MESSAGES\gettext-tools.mo
+source\share\locale\eo\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\es\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\es\LC_MESSAGES\gettext-tools.mo
+source\share\locale\et\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\et\LC_MESSAGES\gettext-tools.mo
+source\share\locale\eu\LC_MESSAGES\gettext-tools.mo
+source\share\locale\fi\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\fi\LC_MESSAGES\gettext-tools.mo
+source\share\locale\fr\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\fr\LC_MESSAGES\gettext-tools.mo
+source\share\locale\ga\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\gl\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\gl\LC_MESSAGES\gettext-tools.mo
+source\share\locale\hr\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\id\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\id\LC_MESSAGES\gettext-tools.mo
+source\share\locale\it\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\it\LC_MESSAGES\gettext-tools.mo
+source\share\locale\ja\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\ja\LC_MESSAGES\gettext-tools.mo
+source\share\locale\ko\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\ko\LC_MESSAGES\gettext-tools.mo
+source\share\locale\locale.alias
+source\share\locale\nb\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\nb\LC_MESSAGES\gettext-tools.mo
+source\share\locale\nl\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\nl\LC_MESSAGES\gettext-tools.mo
+source\share\locale\nn\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\nn\LC_MESSAGES\gettext-tools.mo
+source\share\locale\pa\LC_MESSAGES\gettext-tools.mo
+source\share\locale\pl\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\pl\LC_MESSAGES\gettext-tools.mo
+source\share\locale\pt\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\pt\LC_MESSAGES\gettext-tools.mo
+source\share\locale\pt_BR\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\pt_BR\LC_MESSAGES\gettext-tools.mo
+source\share\locale\ro\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\ro\LC_MESSAGES\gettext-tools.mo
+source\share\locale\ru\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\ru\LC_MESSAGES\gettext-tools.mo
+source\share\locale\sk\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\sk\LC_MESSAGES\gettext-tools.mo
+source\share\locale\sl\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\sl\LC_MESSAGES\gettext-tools.mo
+source\share\locale\sr\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\sr\LC_MESSAGES\gettext-tools.mo
+source\share\locale\sv\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\sv\LC_MESSAGES\gettext-tools.mo
+source\share\locale\tr\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\tr\LC_MESSAGES\gettext-tools.mo
+source\share\locale\uk\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\uk\LC_MESSAGES\gettext-tools.mo
+source\share\locale\vi\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\vi\LC_MESSAGES\gettext-tools.mo
+source\share\locale\zh_CN\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\zh_CN\LC_MESSAGES\gettext-tools.mo
+source\share\locale\zh_HK\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\zh_TW\LC_MESSAGES\gettext-runtime.mo
+source\share\locale\zh_TW\LC_MESSAGES\gettext-tools.mo
+source\share\man
+source\share\themes\Emacs\gtk-3.0\gtk-keys.css
+source\share\xml\fontconfig\fonts.dtd
+source\src
\ No newline at end of file
diff --git a/msi/unmanaged/redirector.cs b/msi/unmanaged/redirector.cs
new file mode 100644
index 000000000..7998ff356
--- /dev/null
+++ b/msi/unmanaged/redirector.cs
@@ -0,0 +1,56 @@
+// Redirector.cs - launches a program and sends its output to a file.
+//
+// Author: Mike Kestner
+//
+// Copyright (c) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+namespace GtkSharpInstaller {
+
+ using System;
+ using System.IO;
+ using System.Diagnostics;
+
+ public class Redirector {
+
+ public static int Main (string[] args)
+ {
+ if (args.Length != 2) {
+ Console.Error.WriteLine ("Usage: redirector.exe ");
+ return 1;
+ }
+
+ var outfile = new FileInfo (args [1]);
+ outfile.Directory.Create ();
+
+ ProcessStartInfo info = new ProcessStartInfo (args [0]);
+ info.RedirectStandardOutput = true;
+ info.UseShellExecute = false;
+ Process proc = Process.Start (info);
+ StreamWriter sw = new StreamWriter (outfile.Create ());
+ sw.WriteLine (proc.StandardOutput.ReadToEnd ());
+ sw.Close ();
+ return 0;
+ }
+ }
+}
+
diff --git a/msi/unmanaged/unmanaged.wxs b/msi/unmanaged/unmanaged.wxs
new file mode 100644
index 000000000..ad36df126
--- /dev/null
+++ b/msi/unmanaged/unmanaged.wxs
@@ -0,0 +1,1423 @@
+
+
+
+
+
+
+
+
+
+
+
+ NOT Installed
+ NOT Installed
+ NOT Installed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+