[Pkg-cli-apps-commits] [SCM] monodevelop-vala branch, master, updated. debian/1.9.2-1-11-g1b6a07e

Mirco Bauer meebey at meebey.net
Sat Mar 28 02:42:21 UTC 2009


The following commit has been merged in the master branch:
commit c86f25345ac3e56a20ba3e921758b8f0845dc210
Author: Mirco Bauer <meebey at meebey.net>
Date:   Sat Mar 28 03:38:33 2009 +0100

    Imported Upstream version 1.9.3

diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..bb8ffdd
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+Jerome Haltom <wasabi at larvalstage.net>
diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs
new file mode 100644
index 0000000..6d66f79
--- /dev/null
+++ b/AssemblyInfo.cs
@@ -0,0 +1,9 @@
+// Autogenerated from ValaBinding.addin.xml
+
+using System.Reflection;
+
+[assembly: AssemblyProduct ("MonoDevelop")]
+[assembly: AssemblyTitle ("Vala Language Binding")]
+[assembly: AssemblyDescription ("Vala Language binding")]
+[assembly: AssemblyVersion ("1.9.3")]
+[assembly: AssemblyCopyright ("MIT/X11")]
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..7b89c47
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,19 @@
+Copyright (c) 2008 Levi Bard
+
+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.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..5264f25
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,299 @@
+2009-03-05  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* configure.in:
+	* AssemblyInfo.cs:
+	* ValaBinding.addin.xml: Bump MD version.
+
+2009-03-04  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* Project/ValaProject.cs: Changed the way execution handlers
+	  work. We are not using platform ids anymore. Instead, we use
+	  command strings when looking for execution handlers.
+	  IExecutionHandlerFactory has been removed and now everything
+	  is handled by IExecutionHandler, which has a new CanExecute
+	  method. This model is more simple and more generic.
+
+2009-02-26  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* ValaLanguageBinding.cs: Ordinal compare.
+
+	* Project/ValaProjectBinding.cs: Only create projects for vala
+	  files. Fixes nasty crash on xml files.
+
+2009-02-26  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* ValaBinding.csproj: Remove bad property value.
+
+2009-02-26  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* ValaBinding.sln: Flush.
+
+2009-02-26  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* ValaBinding.csproj: Flush.
+
+2009-02-25  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* ValaBinding.sln: Set policies. Remove unused name attribute.
+
+2009-02-20  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* ValaBinding.csproj: Updated references.
+
+2009/02/06  Lluis Sanchez Gual  <lluis at novell.com>
+
+ * ValaBinding.mds:
+ * ValaBinding.sln:
+ * ValaBinding.mdp:
+ * ValaBinding.csproj: Migrated to MSBuild file format.
+
+2009/02/03  Lluis Sanchez Gual  <lluis at novell.com>
+
+ * configure.in:
+ * AssemblyInfo.cs:
+ * ValaBinding.addin.xml: Bump MD version.
+
+2009/02/03  Lluis Sanchez Gual  <lluis at novell.com>
+
+ * ValaBinding.mds:
+ * gtk-gui/generated.cs:
+ * gtk-gui/MonoDevelop.ValaBinding.AddPathDialog.cs:
+ * gtk-gui/MonoDevelop.ValaBinding.PackageDetails.cs:
+ * gtk-gui/MonoDevelop.ValaBinding.AddLibraryDialog.cs:
+ * gtk-gui/MonoDevelop.ValaBinding.EditPackagesDialog.cs:
+ * gtk-gui/MonoDevelop.ValaBinding.OutputOptionsPanel.cs:
+ * gtk-gui/MonoDevelop.ValaBinding.CodeGenerationPanel.cs:
+ * gtk-gui/MonoDevelop.ValaBinding.GeneralOptionsPanel.cs: Flush.
+
+2009-01-26  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* ValaBinding.mdp: Flush project format changes.
+
+2009-01-12  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Gui/EditPackagesDialog.cs: Move package list population into idle handler.
+
+2009-01-12  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ProjectPackage.cs:
+	* Project/ProjectPackageCollection.cs: Use relative path 
+	for project package references.
+
+2009-01-05  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* ValaBinding.sln:
+	* ValaBinding.csproj: Add MSBuild project files.
+
+2009-01-05  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* gtk-gui/gui.stetic: Tooltip cleanup.
+
+2009-01-05  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Gui/CodeGenerationPanel.cs: 
+	* Compiler/ValaCompiler.cs: 
+	* Project/ValaCompilationParameters.cs: Add support for valac --thread flag.
+
+2008-12-09  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* ValaBinding.mdp: Don't require a specific version of Mono.Addins.
+
+2008-12-05  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* Gui/ValaTextEditorExtension.cs: Track api changes.
+
+2008-12-02  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* Makefile.am:
+	* AssemblyInfo.cs:
+	* ValaBinding.mdp: Add AssemblyInfo.cs files that are autogenerated from
+	the addin manifests.
+
+2008-11-21  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Compiler/ValaCompiler.cs: Display errors originating from gcc.
+
+2008-11-18  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* Project/ValaProject.cs: Allow executing Vala projects.
+
+2008-11-18  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Compiler/ValaCompiler.cs: valac no longer supports -D.
+
+2008-11-05  Lluis Sanchez Gual  <lluis at novell.com>
+
+	* configure.in:
+	* ValaBinding.addin.xml: Bump MD version.
+
+2008-10-16  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* configure.in: Fix tarball name.
+
+2008-10-09  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* Gui/DataProvider.cs:
+	* Gui/ValaTextEditorExtension.cs: Track APIs.
+
+2008-10-09  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* Gui/DataProvider.cs: Track CompletionData API.
+
+2008-10-07  Michael Hutchinson  <mhutchinson at novell.com>
+
+	* Gui/DataProvider.cs: Track API.
+
+2008-10-01  Michael Hutchinson <mhutchinson at novell.com> 
+
+	* Project/ValaProject.cs: Track API.
+
+2008-09-29  Michael Hutchinson <mhutchinson at novell.com> 
+
+	* Gui/DataProvider.cs: Track API.
+
+2008-09-23  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Gui/DataProvider.cs: Track changes in completion API.
+
+2008-09-17  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* ValaBinding.mdp: Updated projects.
+
+2008-09-17  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* ValaLanguageBinding.cs: Fix build.
+
+2008-09-11  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ValaProject.cs: More compiler flags tweaking
+	for project packages.
+
+2008-09-04  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* ProjectPad/ProjectPackagesFolderNodeBuilder.cs,
+	  ProjectPad/ProjectPackageNodeBuilder.cs,
+	  ProjectPad/ProjectReferencesExtension.cs,
+	  ProjectPad/ProjectNodeExtension.cs,
+	  Navigation/StructureNodeBuilder.cs,
+	  Navigation/TypedefNodeBuilder.cs, Navigation/MacroNodeBuilder.cs,
+	  Navigation/ProjectNodeBuilderExtension.cs,
+	  Navigation/ClassNodeBuilder.cs, Navigation/MemberNodeBuilder.cs,
+	  Navigation/EnumeratorNodeBuilder.cs,
+	  Navigation/LanguageItemCommandHandler.cs,
+	  Navigation/GlobalsNodeBuilder.cs,
+	  Navigation/VariableNodeBuilder.cs,
+	  Navigation/FunctionNodeBuilder.cs,
+	  Navigation/EnumerationNodeBuilder.cs,
+	  Navigation/UnionNodeBuilder.cs, Navigation/NamespaceNodeBuilder.cs,
+	  Navigation/MacroDefinitionsNodeBuilder.cs: Moved the extensible
+	  tree view to its own directory.
+
+2008-09-03  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ValaProject.cs: Add output directory to library path 
+	for project packages.
+
+2008-09-03  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Compiler/ValaCompiler.cs: Only generate .deps file 
+	for shared library targets.
+
+2008-08-28  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Compiler/ValaCompiler.cs: Generate .deps file on library compilation.
+
+2008-08-21  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* ProjectPad/ProjectResourcesExtension.cs, ValaBinding.addin.xml,
+	  ValaBinding.mdp, gtk-gui/objects.xml, Makefile.am: Resources folder
+	  has been removed.
+
+2008-08-18  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* ValaBinding.mdp: Fix reference to Mono.TextEditor. The incorrect
+	  add-in version number causes problems in the makefile
+	  synchronization.
+
+2008-08-12  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Compiler/ValaCompiler.cs: Fix error parsing for recent valac.
+
+2008-08-12  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Compiler/ValaCompiler.cs, Project/ProjectPackage.cs, 
+	Project/ValaProject.cs, Gui/EditPackagesDialog.cs:
+	Improve dependency and project package handling.
+	* templates/ValaTestFixture.xpt.xml, ValaBinding.addin.xml, 
+	Makefile.am: Add text fixture project template.
+	* templates/ConsoleValaProject.xpt.xml: Cleanup.
+
+2008-08-11  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ValaProject.cs, Compiler/ValaCompiler.cs, 
+	Project/ProjectPackageCollection.cs, templates/ConsoleValaProject.xpt.xml, 
+	templates/EmptyValaProject.xpt.xml, 
+	templates/SharedLibraryValaProject.xpt.xml: Add glib-2.0 package
+	to new projects by default. Track changes in valac.
+
+2008-07-21  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* Project/ProjectPackage.cs, Project/ValaCompilationParameters.cs,
+	  Project/ValaProject.cs, Project/ValaProjectConfiguration.cs: Moved
+	  serialization engine to MonoDevelop.Core. Use new syntax for
+	  specifying attribute scope.
+
+2008-06-26  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ValaProject.cs: Actually turn on debug mode.
+
+2008-06-18  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ProjectPackage.cs: Search more thoroughly for corresponding
+	  .pc files.
+
+2008-06-18  Jerome Haltom <wasabi at larvalstage.net>
+
+	* Gui/EditPackagesDialog.cs: Attempt to detect vapidir.
+
+2008-06-12  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* ValaBinding.mdp, Makefile.am: More makefile fixes.
+
+2008-06-12  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* configure.in, Makefile.am: Fix makefile so that it does not directly
+	  depend on MD core and it can always be built standalone.
+	* ValaBinding.mdp: Enable makefile synchronization.
+
+2008-06-12  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* ValaBinding.mdp: Fix gtk-sharp dependency versions.
+
+2008-06-09  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ValaProject.cs, Navigation/ProjectNodeBuilderExtension.cs: 
+	  Add tags from packages to class pad and code completion.
+
+2008-06-09  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Parser/*: Update parse data on file removal.
+
+2008-06-09  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* Project/ValaProject.cs: Fix define syntax in generated .pc files.
+
+2008-06-09  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com>
+
+	* *: Add package support.
+
+2008-06-04  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+
+	* *: Add classpad support
+
+2008-06-04  Lluis Sanchez Gual <lluis at novell.com> 
+
+	* Project/ValaProject.cs: Track api changes.
+
+2008-03-11  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+
+	* *: Ported from CBinding
diff --git a/Compiler/ICompiler.cs b/Compiler/ICompiler.cs
new file mode 100644
index 0000000..bd36bf6
--- /dev/null
+++ b/Compiler/ICompiler.cs
@@ -0,0 +1,63 @@
+//
+// ICompiler.cs: interface that must be implemented by any class that wants
+// to provide a compiler for the ValaBinding addin.
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using Mono.Addins;
+
+using MonoDevelop.Core;
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding
+{
+	[TypeExtensionPoint ("/ValaBinding/Compilers")]
+	public interface ICompiler
+	{
+		string Name {
+			get;
+		}
+		
+		string CompilerCommand {
+			get;
+		}
+		
+		string GetCompilerFlags (ValaProjectConfiguration configuration);
+		
+		string GetDefineFlags (ValaProjectConfiguration configuration);
+		
+		BuildResult Compile (
+			ProjectFileCollection projectFiles,
+			ProjectPackageCollection packages,
+			ValaProjectConfiguration configuration,
+			IProgressMonitor monitor);
+		
+		void Clean (ProjectFileCollection projectFiles, ValaProjectConfiguration configuration, IProgressMonitor monitor);
+	}
+}
diff --git a/Compiler/ValaCompiler.cs b/Compiler/ValaCompiler.cs
new file mode 100644
index 0000000..0da875d
--- /dev/null
+++ b/Compiler/ValaCompiler.cs
@@ -0,0 +1,641 @@
+//
+// ValaCompiler.cs: abstract class that provides some basic implementation for ICompiler
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Text;
+using System.CodeDom.Compiler;
+using System.Text.RegularExpressions;
+using System.Collections.Generic;
+using System.Diagnostics;
+
+using Mono.Addins;
+
+using MonoDevelop.Core;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Core.Execution;
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Core.ProgressMonitoring;
+using MonoDevelop.Core.Gui.Components;
+
+namespace MonoDevelop.ValaBinding
+{
+	[Extension ("/ValaBinding/Compilers")]
+	public class ValaCompiler : ICompiler
+	{
+		protected string compilerCommand;
+				
+		bool compilerFound;
+		bool appsChecked;
+		
+		public ValaCompiler ()
+		{
+			compilerCommand = "valac";
+		}
+		
+		public string Name {
+			get{ return "valac"; }
+		}
+			
+		public string CompilerCommand {
+			get { return compilerCommand; }
+		}
+		
+		/// <summary>
+		/// Generates compiler args for depended packages
+		/// </summary>
+		/// <param name="packages">
+		/// The collection of packages for this project 
+		/// <see cref="ProjectPackageCollection"/>
+		/// </param>
+		/// <returns>
+		/// The string needed by the compiler to reference the necessary packages
+		/// <see cref="System.String"/>
+		/// </returns>
+		protected string GeneratePkgCompilerArgs (ProjectPackageCollection packages)
+		{
+			if (packages == null || packages.Count < 1)
+				return string.Empty;
+			
+			StringBuilder libs = new StringBuilder ();
+			
+			foreach (ProjectPackage p in packages) {
+				if (p.IsProject) {
+					libs.AppendFormat (" \"{0}\" ", p.File);
+				} else {
+					libs.AppendFormat (" --pkg \"{0}\" ", p.Name);
+				}
+			}
+			
+			return libs.ToString ();
+		}
+
+		/// <summary>
+		/// Compile the project
+		/// </summary>
+		/// <param name="projectFiles">
+		/// Collection of project files
+		/// <see cref="ProjectFileCollection"/>
+		/// </param>
+		/// <param name="packages">
+		/// Collection of depended packages
+		/// <see cref="ProjectPackageCollection"/>
+		/// </param>
+		/// <param name="configuration">
+		/// Project configuration
+		/// <see cref="ValaProjectConfiguration"/>
+		/// </param>
+		/// <param name="monitor">
+		/// Progress monitor to be used
+		/// <see cref="IProgressMonitor"/>
+		/// </param>
+		/// <returns>
+		/// Result of the compilation
+		/// <see cref="ICompilerResult"/>
+		/// </returns>
+		public BuildResult Compile (
+			ProjectFileCollection projectFiles,
+			ProjectPackageCollection packages,
+			ValaProjectConfiguration configuration,
+			IProgressMonitor monitor)
+		{
+			
+			if (!appsChecked) {
+				appsChecked = true;
+				compilerFound = CheckApp (compilerCommand);
+			}/// Check for compiler
+				
+			
+			if (!compilerFound) {
+				BuildResult cres = new BuildResult ();
+				cres.AddError ("Compiler not found: " + compilerCommand);
+				return cres;
+			}/// No compiler!
+			
+			CompilerResults cr = new CompilerResults (new TempFileCollection ());
+			bool success = true;
+			
+			/// Build compiler params string
+			string compilerArgs = GetCompilerFlags (configuration) + " " + GeneratePkgCompilerArgs (packages);
+			
+			/// Build executable name
+			string outputName = Path.Combine (configuration.OutputDirectory,
+											  configuration.CompiledOutputName);
+			
+			monitor.BeginTask (GettextCatalog.GetString ("Compiling source"), 1);
+			
+			success = DoCompilation (projectFiles, compilerArgs, outputName, monitor, cr);
+
+			GenerateDepfile (configuration, packages);
+
+			if (success)
+				monitor.Step (1);
+			monitor.EndTask ();
+			
+			return new BuildResult (cr, "");
+		}
+		
+		/// <summary>
+		/// Generates compiler args for the current settings
+		/// </summary>
+		/// <param name="configuration">
+		/// Project configuration
+		/// <see cref="ValaProjectConfiguration"/>
+		/// </param>
+		/// <returns>
+		/// A compiler-interpretable string
+		/// <see cref="System.String"/>
+		/// </returns>
+		public string GetCompilerFlags (ValaProjectConfiguration configuration)
+		{
+			List<string> args = new List<string> ();
+			
+			
+			ValaCompilationParameters cp =
+				(ValaCompilationParameters)configuration.CompilationParameters;
+
+			args.Add (string.Format ("-d '{0}'", configuration.OutputDirectory));
+			
+			if (configuration.DebugMode)
+				args.Add ("-g");
+
+			switch (configuration.CompileTarget) {
+			case ValaBinding.CompileTarget.Bin:
+				if (cp.EnableMultithreading) {
+					args.Add ("--thread");
+				}
+				break;
+			case ValaBinding.CompileTarget.SharedLibrary:
+				args.Add (string.Format ("--Xcc=\"-shared\" --Xcc=\"-fPIC\" --Xcc=\"-I'{0}'\" --library \"{1}\"", configuration.OutputDirectory, configuration.Output));
+				break;
+			}
+
+// Valac will get these sooner or later			
+//			switch (cp.WarningLevel)
+//			{
+//			case WarningLevel.None:
+//				args.Append ("-w ");
+//				break;
+//			case WarningLevel.Normal:
+//				// nothing
+//				break;
+//			case WarningLevel.All:
+//				args.Append ("-Wall ");
+//				break;
+//			}
+//			
+//			if (cp.WarningsAsErrors)
+//				args.Append ("-Werror ");
+//			
+			if (0 < cp.OptimizationLevel) { 
+				args.Add ("--Xcc=\"-O" + cp.OptimizationLevel + "\"");
+			}
+			
+			if (cp.ExtraCompilerArguments != null && cp.ExtraCompilerArguments.Length > 0) {
+				args.Add (ExpandBacktickedParameters (cp.ExtraCompilerArguments.Replace (Environment.NewLine, " ")));
+			}
+			
+			if (cp.DefineSymbols != null && cp.DefineSymbols.Length > 0) {
+				args.Add (ProcessDefineSymbols (cp.DefineSymbols));
+			}
+			
+			if (configuration.Includes != null)
+				foreach (string inc in configuration.Includes)
+					args.Add ("--vapidir \"" + inc + "\"");
+
+			if (configuration.Libs != null)
+				foreach (string lib in configuration.Libs)
+					args.Add ("--pkg \"" + lib + "\"");
+			
+			return string.Join (" ", args.ToArray ());
+		}
+		
+		/// <summary>
+		/// Generates compilers flags for selected defines
+		/// </summary>
+		/// <param name="configuration">
+		/// Project configuration
+		/// <see cref="ValaProjectConfiguration"/>
+		/// </param>
+		/// <returns>
+		/// A compiler-interpretable string
+		/// <see cref="System.String"/>
+		/// </returns>
+		public string GetDefineFlags (ValaProjectConfiguration configuration)
+		{
+			string defines = ((ValaCompilationParameters)configuration.CompilationParameters).DefineSymbols;
+			return ProcessDefineSymbols (defines);
+		}
+		
+		/// <summary>
+		/// Determines whether a file needs to be compiled
+		/// </summary>
+		/// <param name="file">
+		/// The file in question
+		/// <see cref="ProjectFile"/>
+		/// </param>
+		/// <returns>
+		/// true if the file needs to be compiled
+		/// <see cref="System.Boolean"/>
+		/// </returns>
+		private bool NeedsCompiling (ProjectFile file)
+		{
+			return true;
+		}
+		
+		/// <summary>
+		/// Executes a build command
+		/// </summary>
+		/// <param name="command">
+		/// The executable to be launched
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <param name="args">
+		/// The arguments to command
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <param name="baseDirectory">
+		/// The directory in which the command will be executed
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <param name="monitor">
+		/// The progress monitor to be used
+		/// <see cref="IProgressMonitor"/>
+		/// </param>
+		/// <param name="errorOutput">
+		/// Error output will be stored here
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// The exit code of the command
+		/// <see cref="System.Int32"/>
+		/// </returns>
+		int ExecuteCommand (string command, string args, string baseDirectory, IProgressMonitor monitor, out string errorOutput)
+		{
+			errorOutput = string.Empty;
+			int exitCode = -1;
+			
+			StringWriter swError = new StringWriter ();
+			LogTextWriter chainedError = new LogTextWriter ();
+			chainedError.ChainWriter (monitor.Log);
+			chainedError.ChainWriter (swError);
+			
+			monitor.Log.WriteLine ("{0} {1}", command, args);
+			
+			AggregatedOperationMonitor operationMonitor = new AggregatedOperationMonitor (monitor);
+			
+			try {
+				ProcessWrapper p = Runtime.ProcessService.StartProcess (command, args, baseDirectory, monitor.Log, chainedError, null);
+				operationMonitor.AddOperation (p); //handles cancellation
+				
+				p.WaitForOutput ();
+				errorOutput = swError.ToString ();
+				exitCode = p.ExitCode;
+				p.Dispose ();
+				
+				if (monitor.IsCancelRequested) {
+					monitor.Log.WriteLine (GettextCatalog.GetString ("Build cancelled"));
+					monitor.ReportError (GettextCatalog.GetString ("Build cancelled"), null);
+					if (exitCode == 0)
+						exitCode = -1;
+				}
+			} finally {
+				chainedError.Close ();
+				swError.Close ();
+				operationMonitor.Dispose ();
+			}
+			
+			return exitCode;
+		}
+		
+		/// <summary>
+		/// Transforms a whitespace-delimited string of 
+		/// symbols into a set of compiler flags
+		/// </summary>
+		/// <param name="symbols">
+		/// A whitespace-delimited string of symbols, 
+		/// e.g., "DEBUG MONODEVELOP"
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// A <see cref="System.String"/>
+		/// </returns>
+		private string ProcessDefineSymbols (string symbols)
+		{
+			return string.Empty; // No -D in valac for now :-(
+//			return ((null == symbols) || (0 == symbols.Length))?
+//				string.Empty:
+//				"-D " + Regex.Replace (symbols, " +", " -D ");
+		}
+		
+		/// <summary>
+		/// Compiles the project
+		/// </summary>
+		private bool DoCompilation (ProjectFileCollection projectFiles, string args,
+									string outputName,
+									IProgressMonitor monitor,
+									CompilerResults cr)
+		{
+			StringBuilder filelist = new StringBuilder ();
+			foreach (ProjectFile f in projectFiles) { 
+				if (f.Subtype != Subtype.Directory && f.BuildAction == BuildAction.Compile) {
+					filelist.AppendFormat ("\"{0}\" ", f.FilePath);
+				}
+			}/// Build file list
+
+			string compiler_args = string.Format ("{0} {1} -o \"{2}\"",
+				args, filelist.ToString (), Path.GetFileName (outputName));
+			
+			string errorOutput = string.Empty;
+			int exitCode = ExecuteCommand (compilerCommand, compiler_args, Path.GetDirectoryName (outputName), monitor, out errorOutput);
+			
+			ParseCompilerOutput (errorOutput, cr, projectFiles);
+			return exitCode == 0;
+		}
+		
+		/// <summary>
+		/// Cleans up intermediate files
+		/// </summary>
+		/// <param name="projectFiles">
+		/// The project's files
+		/// <see cref="ProjectFileCollection"/>
+		/// </param>
+		/// <param name="configuration">
+		/// Project configuration
+		/// <see cref="ValaProjectConfiguration"/>
+		/// </param>
+		/// <param name="monitor">
+		/// The progress monitor to be used
+		/// <see cref="IProgressMonitor"/>
+		/// </param>
+		public void Clean (ProjectFileCollection projectFiles, ValaProjectConfiguration configuration, IProgressMonitor monitor)
+		{
+			/// Clean up intermediate files
+			/// These should only be generated for libraries, but we'll check for them in all cases
+			foreach (ProjectFile file in projectFiles) {
+				if (file.BuildAction == BuildAction.Compile) {
+					string cFile = Path.Combine (configuration.OutputDirectory, Path.GetFileNameWithoutExtension (file.Name) + ".c");
+					if (File.Exists (cFile)){ File.Delete (cFile); }
+						
+					string hFile = Path.Combine (configuration.OutputDirectory, Path.GetFileNameWithoutExtension (file.Name) + ".h");
+					if (File.Exists (hFile)){ File.Delete (hFile); }
+				}
+			}
+			
+			string vapiFile = Path.Combine (configuration.OutputDirectory, configuration.Output + ".vapi");
+			if (File.Exists (vapiFile)){ File.Delete (vapiFile); }
+		}
+		
+		/// <summary>
+		/// Determines whether the target needs to be updated
+		/// </summary>
+		/// <param name="projectFiles">
+		/// The project's files
+		/// <see cref="ProjectFileCollection"/>
+		/// </param>
+		/// <param name="target">
+		/// The target
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// true if target needs to be updated
+		/// <see cref="System.Boolean"/>
+		/// </returns>
+		private bool NeedsUpdate (ProjectFileCollection projectFiles,
+								  string target)
+		{
+			return true;
+		}
+		
+		/// <summary>
+		/// Parses a compiler output string into CompilerResults
+		/// </summary>
+		/// <param name="errorString">
+		/// The string output by the compiler
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <param name="cr">
+		/// The CompilerResults into which to parse errorString
+		/// <see cref="CompilerResults"/>
+		/// </param>
+		protected void ParseCompilerOutput (string errorString, CompilerResults cr, ProjectFileCollection projectFiles)
+		{
+			TextReader reader = new StringReader (errorString);
+			string next;
+				
+			while ((next = reader.ReadLine ()) != null) {
+				CompilerError error = CreateErrorFromErrorString (next, projectFiles);
+				// System.Console.WriteLine ("Creating error from string \"{0}\"", next);
+				if (error != null) {
+					cr.Errors.Insert (0, error);
+					// System.Console.WriteLine ("Adding error");
+				}
+			}
+			
+			reader.Close ();
+		}
+		
+		/// Error regex for valac
+		/// Sample output: "/home/user/project/src/blah.vala:23.5-23.5: error: syntax error, unexpected }, expecting ;"
+		private static Regex errorRegex = new Regex (
+			@"^\s*(?<file>.*):(?<line>\d*)\.(?<column>\d*)-\d*\.\d*: (?<level>[^:]*): (?<message>.*)",
+			RegexOptions.Compiled | RegexOptions.ExplicitCapture);
+
+		private static Regex gccRegex = new Regex (
+		    @"^\s*(?<file>.*):(?<line>\d*):((?<column>\d*):)?\s*(?<level>.*)\s*:\s(?<message>.*)",
+			RegexOptions.Compiled | RegexOptions.ExplicitCapture);
+
+		/// Error regex for gnu linker - this could still be pertinent for vala
+		private static Regex linkerRegex = new Regex (
+			@"^\s*(?<file>[^:]*):(?<line>\d*):\s*(?<message>[^:]*)",
+			RegexOptions.Compiled | RegexOptions.ExplicitCapture);
+
+		/// <summary>
+		/// Creates a compiler error from an output string
+		/// </summary>
+		/// <param name="errorString">
+		/// The error string to be parsed
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// A newly created CompilerError
+		/// <see cref="CompilerError"/>
+		/// </returns>
+		private CompilerError CreateErrorFromErrorString (string errorString, ProjectFileCollection projectFiles)
+		{
+			Match errorMatch = null;
+			foreach (Regex regex in new Regex[]{errorRegex, gccRegex})
+				if ((errorMatch = regex.Match (errorString)).Success)
+					break;
+			
+			if (!errorMatch.Success)
+				return null;
+
+			CompilerError error = new CompilerError ();
+			
+			foreach (ProjectFile pf in projectFiles) {
+				if (Path.GetFileName (pf.Name) == errorMatch.Groups["file"].Value) {
+					error.FileName = pf.FilePath;
+					break;
+				}
+			}// check for fully pathed file
+			if (string.Empty == error.FileName) {
+				error.FileName = errorMatch.Groups["file"].Value;
+			}// fallback to exact match
+			error.Line = int.Parse (errorMatch.Groups["line"].Value);
+			if (errorMatch.Groups["column"].Success)
+				error.Column = int.Parse (errorMatch.Groups["column"].Value);
+			error.IsWarning = errorMatch.Groups["level"].Value.Equals ("warning");
+			error.ErrorText = errorMatch.Groups["message"].Value;
+			
+			return error;
+		}
+		
+		/// <summary>
+		/// Parses linker output into compiler results
+		/// </summary>
+		/// <param name="errorString">
+		/// The linker output to be parsed
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <param name="cr">
+		/// Results will be stored here
+		/// <see cref="CompilerResults"/>
+		/// </param>
+		protected void ParseLinkerOutput (string errorString, CompilerResults cr)
+		{
+			TextReader reader = new StringReader (errorString);
+			string next;
+			
+			while ((next = reader.ReadLine ()) != null) {
+				CompilerError error = CreateLinkerErrorFromErrorString (next);
+				if (error != null)
+					cr.Errors.Add (error);
+			}
+			
+			reader.Close ();
+		}
+		
+		/// <summary>
+		/// Creates a linker error from an output string
+		/// </summary>
+		/// <param name="errorString">
+		/// The error string to be parsed
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// A newly created LinkerError
+		/// <see cref="LinkerError"/>
+		/// </returns>
+		private CompilerError CreateLinkerErrorFromErrorString (string errorString)
+		{
+			CompilerError error = new CompilerError ();
+			
+			Match linkerMatch = linkerRegex.Match (errorString);
+			
+			if (linkerMatch.Success)
+			{
+				error.FileName = linkerMatch.Groups["file"].Value;
+				error.Line = int.Parse (linkerMatch.Groups["line"].Value);
+				error.ErrorText = linkerMatch.Groups["message"].Value;
+				
+				return error;
+			}
+			
+			return null;
+		}
+
+		/// <summary>
+		/// Expands backticked portions of the parameter-list using "sh" and "echo"
+		/// </summary>
+		/// <param name="tmp">
+		/// The string to expand
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// The result of the expansion
+		/// <see cref="System.String"/>
+		/// </returns> 
+		// TODO: Portability, although otoh, probably someone who doesn't have sh 
+		// isn't going to put backticks in the compiler flags
+		public string ExpandBacktickedParameters (string tmp)
+		{
+			string parameters = "-c \"echo -n " + tmp + "\"";
+			Process p = new Process ();
+			
+			p.StartInfo.FileName = "sh";
+			p.StartInfo.Arguments = parameters;
+			p.StartInfo.UseShellExecute = false;
+			p.StartInfo.RedirectStandardOutput = true;
+			p.Start ();
+			p.WaitForExit ();
+
+			return p.StandardOutput.ReadToEnd ();
+		}
+		
+		/// <summary>
+		/// Check to see if we have a given app
+		/// </summary>
+		/// <param name="app">
+		/// The app to check
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// true if the app is found
+		/// <see cref="System.Boolean"/>
+		/// </returns>
+		bool CheckApp (string app)
+		{
+			try {
+				ProcessWrapper p = Runtime.ProcessService.StartProcess (app, "--version", null, null);
+				p.WaitForOutput ();
+				return true;
+			} catch {
+				return false;
+			}
+		}
+
+		public void GenerateDepfile (ValaProjectConfiguration configuration, ProjectPackageCollection packages)
+		{
+			try {
+				if (configuration.CompileTarget != CompileTarget.SharedLibrary){ return; }
+				
+				using (StreamWriter writer = new StreamWriter (Path.Combine (configuration.OutputDirectory, Path.ChangeExtension (configuration.Output, ".deps")))) {
+					foreach (ProjectPackage package in packages) {
+						writer.WriteLine (package.Name);
+					}
+				}
+			} catch { /* Don't care */ }
+		}
+	}
+}
diff --git a/Gui/AddLibraryDialog.cs b/Gui/AddLibraryDialog.cs
new file mode 100644
index 0000000..ed2fa57
--- /dev/null
+++ b/Gui/AddLibraryDialog.cs
@@ -0,0 +1,79 @@
+//
+// AddLibraryDialog.cs: A simple open file dialog to add libraries to the project (using vapi files)
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+namespace MonoDevelop.ValaBinding
+{
+	public partial class AddLibraryDialog : Gtk.Dialog
+	{
+		private string lib = string.Empty;
+		
+		public AddLibraryDialog()
+		{
+			this.Build();
+			
+			Gtk.FileFilter libs = new Gtk.FileFilter ();
+			Gtk.FileFilter all = new Gtk.FileFilter ();
+			
+			libs.AddPattern ("*.vapi");
+			libs.Name = "Libraries";
+			
+			all.AddPattern ("*.*");
+			all.Name = "All Files";
+			
+			file_chooser_widget.AddFilter (libs);
+			file_chooser_widget.AddFilter (all);
+			file_chooser_widget.SetCurrentFolder ("/usr/share/vala/vapi");
+		}
+		
+		private void OnOkButtonClick (object sender, EventArgs e)
+		{
+			lib = System.IO.Path.GetFileNameWithoutExtension (
+				file_chooser_widget.Filename);
+			
+			Destroy ();
+		}
+		
+		private void OnCancelButtonClick (object sender, EventArgs e)
+		{
+			Destroy ();
+		}
+		
+		public string Library {
+			get { return lib; }
+		}
+	}
+}
diff --git a/Gui/AddPathDialog.cs b/Gui/AddPathDialog.cs
new file mode 100644
index 0000000..1d4f994
--- /dev/null
+++ b/Gui/AddPathDialog.cs
@@ -0,0 +1,74 @@
+//
+// AddPathDialog.cs: A simple open file dialog to add paths to the project
+// for includes and libraries (mime type: x-directory/normal)
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+namespace MonoDevelop.ValaBinding
+{
+	public partial class AddPathDialog : Gtk.Dialog
+	{
+		string path;
+		
+		public AddPathDialog (string currentDir)
+		{
+			this.Build ();
+			
+			Gtk.FileFilter filter = new Gtk.FileFilter ();
+			
+			filter.AddMimeType ("x-directory/normal");
+			filter.Name = "Folders";
+			
+			file_chooser_widget.SetCurrentFolder (currentDir);
+			file_chooser_widget.AddFilter (filter);
+		}
+		
+		private void OnOkButtonClick (object sender, EventArgs e)
+		{
+			path = file_chooser_widget.Filename;
+			Destroy ();
+		}
+		
+		private void OnCancelButtonClick (object sender, EventArgs e)
+		{
+			Destroy ();
+		}
+		
+		public string SelectedPath {
+			get { return path; }
+		}
+	}
+}
diff --git a/Gui/CodeGenerationPanel.cs b/Gui/CodeGenerationPanel.cs
new file mode 100644
index 0000000..f1145b3
--- /dev/null
+++ b/Gui/CodeGenerationPanel.cs
@@ -0,0 +1,292 @@
+//
+// CodeGenerationPanel.cs: Code generation panel to configure project
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Collections;
+
+using Mono.Addins;
+
+using MonoDevelop.Core;
+using MonoDevelop.Projects.Gui.Dialogs;
+
+namespace MonoDevelop.ValaBinding
+{
+	public partial class CodeGenerationPanel : Gtk.Bin
+	{
+		private ValaProjectConfiguration configuration;
+		private ValaCompilationParameters compilationParameters;
+		private Gtk.ListStore libStore = new Gtk.ListStore (typeof(string));
+		private Gtk.ListStore includePathStore = new Gtk.ListStore (typeof(string));
+		
+		public CodeGenerationPanel () 
+		{
+			this.Build ();
+			
+			Gtk.CellRendererText textRenderer = new Gtk.CellRendererText ();
+			
+			libTreeView.Model = libStore;
+			libTreeView.HeadersVisible = false;
+			libTreeView.AppendColumn ("Library", textRenderer, "text", 0);
+			
+			includePathTreeView.Model = includePathStore;
+			includePathTreeView.HeadersVisible = false;
+			includePathTreeView.AppendColumn ("Include", textRenderer, "text", 0);
+		}
+		
+		public void Load (ValaProjectConfiguration config)
+		{
+			configuration = config;
+			compilationParameters = (ValaCompilationParameters)configuration.CompilationParameters;
+			
+			switch (compilationParameters.WarningLevel)
+			{
+			case WarningLevel.None:
+				noWarningRadio.Active = true;
+				break;
+			case WarningLevel.Normal:
+				normalWarningRadio.Active = true;
+				break;
+			case WarningLevel.All:
+				allWarningRadio.Active = true;
+				break;
+			}
+			
+			warningsAsErrorsCheckBox.Active = compilationParameters.WarningsAsErrors;
+			threadingCheckbox.Sensitive = (config.CompileTarget == CompileTarget.Bin);
+			threadingCheckbox.Active = (threadingCheckbox.Sensitive && compilationParameters.EnableMultithreading);
+			
+			optimizationSpinButton.Value = compilationParameters.OptimizationLevel;
+			
+			switch (configuration.CompileTarget)
+			{
+			case ValaBinding.CompileTarget.Bin:
+				targetComboBox.Active = 0;
+				break;
+			case ValaBinding.CompileTarget.StaticLibrary:
+				targetComboBox.Active = 1;
+				break;
+			case ValaBinding.CompileTarget.SharedLibrary:
+				targetComboBox.Active = 2;
+				break;
+			}
+			
+			extraCompilerTextView.Buffer.Text = compilationParameters.ExtraCompilerArguments;
+			
+			defineSymbolsTextEntry.Text = compilationParameters.DefineSymbols;
+			
+			foreach (string lib in configuration.Libs)
+				libStore.AppendValues (lib);
+			
+			foreach (string includePath in configuration.Includes)
+				includePathStore.AppendValues (includePath);
+		}
+		
+		private void OnIncludePathAdded (object sender, EventArgs e)
+		{
+			if (includePathEntry.Text.Length > 0) {				
+				includePathStore.AppendValues (includePathEntry.Text);
+				includePathEntry.Text = string.Empty;
+			}
+		}
+		
+		private void OnIncludePathRemoved (object sender, EventArgs e)
+		{
+			Gtk.TreeIter iter;
+			includePathTreeView.Selection.GetSelected (out iter);
+			includePathStore.Remove (ref iter);
+		}
+		
+		private void OnLibAdded (object sender, EventArgs e)
+		{
+			if (libAddEntry.Text.Length > 0) {				
+				libStore.AppendValues (libAddEntry.Text);
+				libAddEntry.Text = string.Empty;
+			}
+		}
+		
+		private void OnLibRemoved (object sender, EventArgs e)
+		{
+			Gtk.TreeIter iter;
+			libTreeView.Selection.GetSelected (out iter);
+			libStore.Remove (ref iter);
+		}
+		
+		private void OnBrowseButtonClick (object sender, EventArgs e)
+		{
+			AddLibraryDialog dialog = new AddLibraryDialog ();
+			dialog.Run ();
+			libAddEntry.Text = dialog.Library;
+		}
+		
+		private void OnIncludePathBrowseButtonClick (object sender, EventArgs e)
+		{
+			AddPathDialog dialog = new AddPathDialog (configuration.SourceDirectory);
+			dialog.Run ();
+			includePathEntry.Text = dialog.SelectedPath;
+		}
+		
+		public bool Store ()
+		{
+			if (compilationParameters == null || configuration == null)
+				return false;
+			
+			string line;
+			Gtk.TreeIter iter;
+			
+			if (noWarningRadio.Active)
+				compilationParameters.WarningLevel = WarningLevel.None;
+			else if (normalWarningRadio.Active)
+				compilationParameters.WarningLevel = WarningLevel.Normal;
+			else
+				compilationParameters.WarningLevel = WarningLevel.All;
+			
+			compilationParameters.WarningsAsErrors = warningsAsErrorsCheckBox.Active;
+			
+			compilationParameters.OptimizationLevel = (int)optimizationSpinButton.Value;
+			
+			switch (targetComboBox.Active)
+			{
+			case 0:
+				configuration.CompileTarget = ValaBinding.CompileTarget.Bin;
+				compilationParameters.EnableMultithreading = threadingCheckbox.Active;
+				break;
+			case 1:
+				configuration.CompileTarget = ValaBinding.CompileTarget.StaticLibrary;
+				break;
+			case 2:
+				configuration.CompileTarget = ValaBinding.CompileTarget.SharedLibrary;
+				break;
+			}
+			
+			compilationParameters.ExtraCompilerArguments = extraCompilerTextView.Buffer.Text;
+			
+			compilationParameters.DefineSymbols = defineSymbolsTextEntry.Text;
+			
+			libStore.GetIterFirst (out iter);
+			configuration.Libs.Clear ();
+			while (libStore.IterIsValid (iter)) {
+				line = (string)libStore.GetValue (iter, 0);
+				configuration.Libs.Add (line);
+				libStore.IterNext (ref iter);
+			}
+			
+			includePathStore.GetIterFirst (out iter);
+			configuration.Includes.Clear ();
+			while (includePathStore.IterIsValid (iter)) {
+				line = (string)includePathStore.GetValue (iter, 0);
+				configuration.Includes.Add (line);
+				includePathStore.IterNext (ref iter);
+			}
+			
+			return true;
+		}
+
+		protected virtual void OnLibAddEntryChanged (object sender, EventArgs e)
+		{
+			if (string.IsNullOrEmpty (libAddEntry.Text))
+				addLibButton.Sensitive = false;
+			else
+				addLibButton.Sensitive = true;
+		}
+
+		protected virtual void OnLibTreeViewCursorChanged (object sender, System.EventArgs e)
+		{
+			removeLibButton.Sensitive = true;
+		}
+
+		protected virtual void OnRemoveLibButtonClicked (object sender, System.EventArgs e)
+		{
+			removeLibButton.Sensitive = false;
+		}
+
+		protected virtual void OnIncludePathEntryChanged (object sender, System.EventArgs e)
+		{
+			if (string.IsNullOrEmpty (includePathEntry.Text))
+				includePathAddButton.Sensitive = false;
+			else
+				includePathAddButton.Sensitive = true;
+		}
+
+		protected virtual void OnIncludePathTreeViewCursorChanged (object sender, System.EventArgs e)
+		{
+			includePathRemoveButton.Sensitive = true;
+		}
+
+		protected virtual void OnIncludePathRemoveButtonClicked (object sender, System.EventArgs e)
+		{
+			includePathRemoveButton.Sensitive = false;
+		}
+		
+		protected virtual void OnLibAddEntryActivated (object sender, System.EventArgs e)
+		{
+			OnLibAdded (this, new EventArgs ());
+		}
+
+		protected virtual void OnIncludePathEntryActivated (object sender, System.EventArgs e)
+		{
+			OnIncludePathAdded (this, new EventArgs ());
+		}
+
+		/// <summary>
+		/// Set sensitivity and activity of multithreading checkbox on target change
+		/// </summary>
+		protected virtual void OnTargetComboBoxChanged (object sender, System.EventArgs e)
+		{
+			threadingCheckbox.Sensitive = (0 == targetComboBox.Active);
+			threadingCheckbox.Active = (threadingCheckbox.Active && threadingCheckbox.Sensitive);
+		}
+	}
+	
+	public class CodeGenerationPanelBinding : MultiConfigItemOptionsPanel
+	{
+		private CodeGenerationPanel panel;
+		
+		public override Gtk.Widget CreatePanelWidget ()
+		{
+			return panel = new CodeGenerationPanel ();
+		}
+		
+		public override void LoadConfigData ()
+		{
+			panel.Load((ValaProjectConfiguration) CurrentConfiguration);
+//			panel = new CodeGenerationPanel ((Properties)CustomizationObject);
+//			Add (panel);
+		}
+
+		
+		public override void ApplyChanges ()
+		{
+			panel.Store ();
+		}
+	}
+}
diff --git a/Gui/DataProvider.cs b/Gui/DataProvider.cs
new file mode 100644
index 0000000..65e8c03
--- /dev/null
+++ b/Gui/DataProvider.cs
@@ -0,0 +1,204 @@
+//
+// DataProvider.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Projects.Gui.Completion;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding
+{
+	public class ParameterDataProvider : IParameterDataProvider
+	{
+		private TextEditor editor;
+		private List<Function> functions = new List<Function> ();
+		
+		public ParameterDataProvider (Document document, ProjectInformation info, string functionName)
+		{
+			this.editor = document.TextEditor;
+			
+			foreach (Function f in info.Functions) {
+				if (f.Name == functionName) {
+					functions.Add (f);
+				}
+			}
+			
+			string currentFile = document.FileName;
+			
+			if (info.IncludedFiles.ContainsKey (currentFile)) {
+				foreach (FileInformation fi in info.IncludedFiles[currentFile]) {
+					foreach (Function f in fi.Functions) {
+						if (f.Name == functionName) {
+							functions.Add (f);
+						}
+					}
+				}
+			}
+		}
+		
+		// Returns the number of methods
+		public int OverloadCount {
+			get { return functions.Count; }
+		}
+		
+		// Returns the index of the parameter where the cursor is currently positioned.
+		// -1 means the cursor is outside the method parameter list
+		// 0 means no parameter entered
+		// > 0 is the index of the parameter (1-based)
+		public int GetCurrentParameterIndex (ICodeCompletionContext ctx)
+		{
+			int cursor = editor.CursorPosition;
+			int i = ctx.TriggerOffset;
+			
+			if (editor.GetCharAt (i) == ')')
+				return -1;
+			
+			if (i > cursor)
+				return -1;
+			else if (i == cursor)
+				return 0;
+			
+			int parameterIndex = 1;
+			
+			while (i++ < cursor) {
+				char ch = editor.GetCharAt (i);
+				if (ch == ',')
+					parameterIndex++;
+				else if (ch == ')')
+					return -1;
+			}
+			
+			return parameterIndex;
+		}
+		
+		// Returns the markup to use to represent the specified method overload
+		// in the parameter information window.
+		public string GetMethodMarkup (int overload, string[] parameterMarkup)
+		{
+			Function function = functions[overload];
+			string paramTxt = string.Join (", ", parameterMarkup);
+			
+			int len = function.FullName.LastIndexOf (".");
+			string prename = null;
+			
+			if (len > 0)
+				prename = function.FullName.Substring (0, len + 2);
+			
+			string cons = string.Empty;
+			
+			if (function.IsConst)
+				cons = " const";
+			
+			return prename + "<b>" + function.Name + "</b>" + " (" + paramTxt + ")" + cons;
+		}
+		
+		// Returns the text to use to represent the specified parameter
+		public string GetParameterMarkup (int overload, int paramIndex)
+		{
+			Function function = functions[overload];
+			
+			return function.Parameters[paramIndex];
+		}
+		
+		// Returns the number of parameters of the specified method
+		public int GetParameterCount (int overload)
+		{
+			return functions[overload].Parameters.Length;
+		}
+	}
+	
+	public class CompletionData : ICompletionData
+	{
+		private string image;
+		private string text;
+		private string description;
+		private string completion_string;
+		
+		public CompletionData (LanguageItem item)
+		{
+			if (item is Class)
+				image = Stock.Class;
+			else if (item is Structure)
+				image = Stock.Struct;
+			else if (item is Union)
+				image = "md-union";
+			else if (item is Enumeration)
+				image = Stock.Enum;
+			else if (item is Enumerator)
+				image = Stock.Literal;
+			else if (item is Function)
+				image = Stock.Method;
+			else if (item is Namespace)
+				image = Stock.NameSpace;
+			else if (item is Typedef)
+				image = Stock.Interface;
+			else if (item is Member)
+				image = Stock.Field;
+			else if (item is Variable)
+				image = Stock.Field;
+			else if (item is Macro)
+				image = Stock.Literal;
+			else
+				image = Stock.Literal;
+			
+			this.text = item.Name;
+			this.completion_string = item.Name;
+			this.description = string.Empty;
+		}
+		
+		public string Icon {
+			get { return image; }
+		}
+		
+		public string DisplayText {
+			get { return text; }
+		}
+		
+		public string Description {
+			get { return description; }
+		}
+
+		public string CompletionText {
+			get { return completion_string; }
+		}
+		
+		public DisplayFlags DisplayFlags {
+			get { return DisplayFlags.None; }
+		}
+	}
+
+}
diff --git a/Gui/EditPackagesDialog.cs b/Gui/EditPackagesDialog.cs
new file mode 100644
index 0000000..bf9dfbb
--- /dev/null
+++ b/Gui/EditPackagesDialog.cs
@@ -0,0 +1,499 @@
+//
+// EditPackagesDialog.cs: Allows you to add and remove pkg-config packages to the project
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Core.Gui;
+
+namespace MonoDevelop.ValaBinding
+{
+	public partial class EditPackagesDialog : Gtk.Dialog
+	{
+		private Gtk.ListStore normalPackageListStore = new Gtk.ListStore (typeof(bool), typeof(string), typeof(string));
+		private Gtk.ListStore projectPackageListStore = new Gtk.ListStore (typeof(bool), typeof(string), typeof(string));
+		private Gtk.ListStore selectedPackageListStore = new Gtk.ListStore (typeof(string), typeof(string));
+		private ValaProject project;
+		private ProjectPackageCollection selectedPackages = new ProjectPackageCollection ();
+		private List<ProjectPackage> packagesOfProjects;
+		private List<ProjectPackage> packages = new List<ProjectPackage> ();
+		
+		// Column IDs
+		const int NormalPackageToggleID = 0;
+		const int NormalPackageNameID = 1;
+		const int NormalPackageVersionID = 2;
+		
+		const int ProjectPackageToggleID = 0;
+		const int ProjectPackageNameID = 1;
+		const int ProjectPackageVersionID = 2;
+		
+		const int SelectedPackageNameID = 0;
+		const int SelectedPackageVersionID = 1;
+
+		public EditPackagesDialog(ValaProject project)
+		{
+			this.Build();
+			
+			this.project = project;
+			
+			selectedPackages.Project = project;
+			selectedPackages.AddRange (project.Packages);
+			
+			Gtk.CellRendererText textRenderer = new Gtk.CellRendererText ();
+			
+			Gtk.CellRendererPixbuf pixbufRenderer = new Gtk.CellRendererPixbuf ();
+			pixbufRenderer.StockId = "md-package";
+			
+			normalPackageListStore.DefaultSortFunc = NormalPackageCompareNodes;
+			projectPackageListStore.DefaultSortFunc = ProjectPackageCompareNodes;
+			selectedPackageListStore.DefaultSortFunc = SelectedPackageCompareNodes;
+			
+			normalPackageListStore.SetSortColumnId (NormalPackageNameID, Gtk.SortType.Ascending);
+			projectPackageListStore.SetSortColumnId (ProjectPackageNameID, Gtk.SortType.Ascending);
+			selectedPackageListStore.SetSortColumnId (SelectedPackageNameID, Gtk.SortType.Ascending);
+			
+			normalPackageTreeView.SearchColumn = NormalPackageNameID;
+			projectPackageTreeView.SearchColumn = ProjectPackageNameID;
+			selectedPackageTreeView.SearchColumn = SelectedPackageNameID;
+			
+			// <!-- Normal packages -->
+			
+			Gtk.CellRendererToggle normalPackageToggleRenderer = new Gtk.CellRendererToggle ();
+			normalPackageToggleRenderer.Activatable = true;
+			normalPackageToggleRenderer.Toggled += OnNormalPackageToggled;
+			normalPackageToggleRenderer.Xalign = 0;
+			
+			Gtk.TreeViewColumn normalPackageColumn = new Gtk.TreeViewColumn ();
+			normalPackageColumn.Title = "Package";
+			normalPackageColumn.PackStart (pixbufRenderer, false);
+			normalPackageColumn.PackStart (textRenderer, true);
+			normalPackageColumn.AddAttribute (textRenderer, "text", NormalPackageNameID);
+			
+			normalPackageTreeView.Model = normalPackageListStore;
+			normalPackageTreeView.HeadersVisible = true;
+			normalPackageTreeView.AppendColumn ("", normalPackageToggleRenderer, "active", NormalPackageToggleID);
+			normalPackageTreeView.AppendColumn (normalPackageColumn);
+			normalPackageTreeView.AppendColumn ("Version", textRenderer, "text", NormalPackageVersionID);
+			
+			// <!-- Project packages -->
+			
+			Gtk.CellRendererToggle projectPackageToggleRenderer = new Gtk.CellRendererToggle ();
+			projectPackageToggleRenderer.Activatable = true;
+			projectPackageToggleRenderer.Toggled += OnProjectPackageToggled;
+			projectPackageToggleRenderer.Xalign = 0;
+			
+			Gtk.TreeViewColumn projectPackageColumn = new Gtk.TreeViewColumn ();
+			projectPackageColumn.Title = "Package";
+			projectPackageColumn.PackStart (pixbufRenderer, false);
+			projectPackageColumn.PackStart (textRenderer, true);
+			projectPackageColumn.AddAttribute (textRenderer, "text", ProjectPackageNameID);
+			
+			projectPackageTreeView.Model = projectPackageListStore;
+			projectPackageTreeView.HeadersVisible = true;
+			projectPackageTreeView.AppendColumn ("", projectPackageToggleRenderer, "active", ProjectPackageToggleID);
+			projectPackageTreeView.AppendColumn (projectPackageColumn);
+			projectPackageTreeView.AppendColumn ("Version", textRenderer, "text", ProjectPackageVersionID);
+			
+			
+			// <!-- Selected packages -->
+			
+			Gtk.TreeViewColumn selectedPackageColumn = new Gtk.TreeViewColumn ();
+			selectedPackageColumn.Title = "Package";
+			selectedPackageColumn.PackStart (pixbufRenderer, false);
+			selectedPackageColumn.PackStart (textRenderer, true);
+			selectedPackageColumn.AddAttribute (textRenderer, "text", SelectedPackageNameID);
+			
+			selectedPackageTreeView.Model = selectedPackageListStore;
+			selectedPackageTreeView.HeadersVisible = true;
+			selectedPackageTreeView.AppendColumn (selectedPackageColumn);
+			selectedPackageTreeView.AppendColumn ("Version", textRenderer, "text", SelectedPackageVersionID);
+			
+			// Fill up the project tree view
+			packagesOfProjects = GetPackagesOfProjects (project);
+			
+			foreach (ProjectPackage p in packagesOfProjects) {
+				if (p.Name == project.Name) continue;
+				
+				packages.Add (p);
+				string version = p.Version;
+				bool inProject = selectedPackages.Contains (p);
+
+				if (!IsPackageInStore (projectPackageListStore, p.Name, version, ProjectPackageNameID, ProjectPackageVersionID)) {
+				    projectPackageListStore.AppendValues (inProject, p.Name, version);
+				
+					if (inProject)
+						selectedPackageListStore.AppendValues (p.Name, version);
+				}
+			}
+			
+			// Fill up the normal tree view
+			foreach (string dir in ScanDirs ()) {
+				if (Directory.Exists (dir)) {	
+					DirectoryInfo di = new DirectoryInfo (dir);
+					FileInfo[] availablePackages = di.GetFiles ("*.vapi");
+					
+					foreach (FileInfo f in availablePackages) {
+						if (!IsValidPackage (f.FullName)) { 
+							continue;
+						}
+
+						string packagename = f.FullName;
+
+						GLib.Idle.Add (delegate {
+							ProjectPackage package = new ProjectPackage (packagename);
+							
+							packages.Add (package);
+							
+							string name = package.Name;
+							string version = package.Version;
+							bool inProject = selectedPackages.Contains (package);
+							
+							if (!IsPackageInStore (normalPackageListStore, name, version, NormalPackageNameID, NormalPackageVersionID)) {
+								normalPackageListStore.AppendValues (inProject, name, version);
+							
+								if (inProject)
+									selectedPackageListStore.AppendValues (name, version);
+							}
+							return false;
+						});
+					}
+				}
+			}
+		}
+		
+		private List<ProjectPackage> GetPackagesOfProjects (Project project)
+		{
+			List<ProjectPackage> packages = new List<ProjectPackage>();
+			ProjectPackage package;
+			
+			foreach (Project c in IdeApp.Workspace.GetAllProjects()) {
+				if (c is ValaProject) {
+					ValaProject proj = c as ValaProject;
+					ValaProjectConfiguration conf = proj.GetConfiguration (IdeApp.Workspace.ActiveConfiguration) as ValaProjectConfiguration;
+					if (conf.CompileTarget != CompileTarget.Bin) {
+						proj.WriteMDPkgPackage (conf.Id);
+						package = new ProjectPackage (proj);
+						packages.Add (package);
+					}
+				}
+			}
+			
+			return packages;
+		}
+		
+		private bool IsPackageInStore (Gtk.ListStore store, string pname, string pversion, int pname_col, int pversion_col)
+		{
+			Gtk.TreeIter search_iter;
+			bool has_elem = store.GetIterFirst (out search_iter);
+				
+			if (has_elem) {
+				while (true) {
+					string name = (string)store.GetValue (search_iter, pname_col);
+					string version = (string)store.GetValue (search_iter, pversion_col);
+					
+					if (name == pname && version == pversion)
+						return true;
+						
+					if (!store.IterNext (ref search_iter))
+						break;
+				}
+			}
+			
+			return false;
+		}
+		
+		private string[] ScanDirs ()
+		{
+			return new string[]{ ValaProject.vapidir };
+		}
+		
+		private void OnOkButtonClick (object sender, EventArgs e)
+		{
+			// Use this instead of clear, since clear seems to not update the packages tree
+			while (project.Packages.Count > 0) {
+				project.Packages.RemoveAt (0);
+			}
+
+			project.Packages.AddRange (selectedPackages);
+			
+			Destroy ();
+		}
+		
+		private void OnCancelButtonClick (object sender, EventArgs e)
+		{
+			Destroy ();
+		}
+		
+		private void OnRemoveButtonClick (object sender, EventArgs e)
+		{
+			Gtk.TreeIter iter;
+			
+			selectedPackageTreeView.Selection.GetSelected (out iter);
+			
+			if (!selectedPackageListStore.IterIsValid (iter)) return;
+			
+			string package = (string)selectedPackageListStore.GetValue (iter, SelectedPackageNameID);
+			bool isProject = false;
+			
+			foreach (ProjectPackage p in selectedPackages) {
+				if (p.Name == package) {
+					isProject = p.IsProject;
+					selectedPackages.Remove (p);
+					break;
+				}
+			}
+			
+			selectedPackageListStore.Remove (ref iter);
+			
+			if (!isProject) {
+				Gtk.TreeIter search_iter;
+				bool has_elem = normalPackageListStore.GetIterFirst (out search_iter);
+					
+				if (has_elem) {
+					while (true) {
+						string current = (string)normalPackageListStore.GetValue (search_iter, NormalPackageNameID);
+						
+						if (current.Equals (package)) {
+							normalPackageListStore.SetValue (search_iter, NormalPackageToggleID, false);
+							break;
+						}
+						
+						if (!normalPackageListStore.IterNext (ref search_iter))
+							break;
+					}
+				}
+			} else {
+				Gtk.TreeIter search_iter;
+				bool has_elem = projectPackageListStore.GetIterFirst (out search_iter);
+					
+				if (has_elem) {
+					while (true) {
+						string current = (string)projectPackageListStore.GetValue (search_iter, ProjectPackageNameID);
+						
+						if (current.Equals (package)) {
+							projectPackageListStore.SetValue (search_iter, ProjectPackageToggleID, false);
+							break;
+						}
+						
+						if (!projectPackageListStore.IterNext (ref search_iter))
+							break;
+					}
+				}
+			}
+		}
+		
+		private void OnNormalPackageToggled (object sender, Gtk.ToggledArgs args)
+		{
+			Gtk.TreeIter iter;
+			bool old = true;
+			string name;
+			string version;
+
+			if (normalPackageListStore.GetIter (out iter, new Gtk.TreePath (args.Path))) {
+				old = (bool)normalPackageListStore.GetValue (iter, NormalPackageToggleID);
+				normalPackageListStore.SetValue (iter, NormalPackageToggleID, !old);
+			}
+			
+			name = (string)normalPackageListStore.GetValue (iter, NormalPackageNameID);
+			version = (string)normalPackageListStore.GetValue(iter, NormalPackageVersionID);
+			
+			if (old == false) {
+				selectedPackageListStore.AppendValues (name, version);
+				
+				foreach (ProjectPackage package in packages) {
+					if (package.Name == name /* && package.Version == version */) {
+						selectedPackages.Add (package);
+						break;
+					}
+				}
+				
+			} else {
+				Gtk.TreeIter search_iter;
+				bool has_elem = selectedPackageListStore.GetIterFirst (out search_iter);
+				
+				if (has_elem) {
+					while (true) {
+						string current = (string)selectedPackageListStore.GetValue (search_iter, SelectedPackageNameID);
+						
+						if (current.Equals (name)) {
+							selectedPackageListStore.Remove (ref search_iter);
+							foreach (ProjectPackage p in selectedPackages) {
+								if (p.Name == name) {
+									selectedPackages.Remove (p);
+									break;
+								}
+							}
+							
+							break;
+						}
+						
+						if (!selectedPackageListStore.IterNext (ref search_iter))
+							break;
+					}
+				}
+			}
+		}
+		
+		private void OnProjectPackageToggled (object sender, Gtk.ToggledArgs args)
+		{
+			Gtk.TreeIter iter;
+			bool old = true;
+			string name;
+			string version;
+
+			if (projectPackageListStore.GetIter (out iter, new Gtk.TreePath (args.Path))) {
+				old = (bool)projectPackageListStore.GetValue (iter, ProjectPackageToggleID);
+				projectPackageListStore.SetValue (iter, ProjectPackageToggleID, !old);
+			}
+			
+			name = (string)projectPackageListStore.GetValue (iter, ProjectPackageNameID);
+			version = (string)projectPackageListStore.GetValue(iter, ProjectPackageVersionID);
+			
+			if (old == false) {
+				selectedPackageListStore.AppendValues (name, version);
+				
+				foreach (ProjectPackage p in packagesOfProjects) {
+					if (p.Name == name) {
+						selectedPackages.Add (p);
+						break;
+					}
+				}
+			} else {
+				Gtk.TreeIter search_iter;
+				bool has_elem = selectedPackageListStore.GetIterFirst (out search_iter);
+				
+				if (has_elem)
+				{
+					while (true) {
+						string current = (string)selectedPackageListStore.GetValue (search_iter, SelectedPackageNameID);
+						
+						if (current.Equals (name)) {
+							selectedPackageListStore.Remove (ref search_iter);
+							foreach (ProjectPackage p in selectedPackages) {
+								if (p.Name == name) {
+									selectedPackages.Remove (p);
+									break;
+								}
+							}
+							
+							break;
+						}
+						
+						if (!selectedPackageListStore.IterNext (ref search_iter))
+							break;
+					}
+				}
+			}
+		}
+		
+		private bool IsValidPackage (string package)
+		{
+			return true;
+		}
+		
+		int NormalPackageCompareNodes (Gtk.TreeModel model, Gtk.TreeIter a, Gtk.TreeIter b)
+		{
+			string name1 = (string)model.GetValue (a, NormalPackageNameID);
+			string name2 = (string)model.GetValue (b, NormalPackageNameID);
+			return string.Compare (name1, name2, true);
+		}
+		
+		int ProjectPackageCompareNodes (Gtk.TreeModel model, Gtk.TreeIter a, Gtk.TreeIter b)
+		{
+			string name1 = (string)model.GetValue (a, ProjectPackageNameID);
+			string name2 = (string)model.GetValue (b, ProjectPackageNameID);
+			return string.Compare (name1, name2, true);
+		}
+		
+		int SelectedPackageCompareNodes (Gtk.TreeModel model, Gtk.TreeIter a, Gtk.TreeIter b)
+		{
+			string name1 = (string)model.GetValue (a, SelectedPackageNameID);
+			string name2 = (string)model.GetValue (b, SelectedPackageNameID);
+			return string.Compare (name1, name2, true);
+		}
+
+		protected virtual void OnSelectedPackagesTreeViewCursorChanged (object sender, System.EventArgs e)
+		{
+			removeButton.Sensitive = true;
+		}
+
+		protected virtual void OnRemoveButtonClicked (object sender, System.EventArgs e)
+		{
+			removeButton.Sensitive = false;
+		}
+
+		protected virtual void OnDetailsButtonClicked (object sender, System.EventArgs e)
+		{
+			Gtk.TreeIter iter;
+			Gtk.Widget active_tab = notebook1.Children [notebook1.Page];
+			string tab_label = notebook1.GetTabLabelText (active_tab);
+			string name = string.Empty;
+			// string version = string.Empty;
+			ProjectPackage package = null;
+			
+			if (tab_label == "System Packages") {
+				normalPackageTreeView.Selection.GetSelected (out iter);
+				name = (string)normalPackageListStore.GetValue (iter, NormalPackageNameID);
+				// version = (string)normalPackageListStore.GetValue (iter, NormalPackageVersionID);
+			} else if (tab_label == "Project Packages") {
+				projectPackageTreeView.Selection.GetSelected (out iter);
+				name = (string)projectPackageListStore.GetValue (iter, ProjectPackageNameID);
+				// version = (string)projectPackageListStore.GetValue (iter, ProjectPackageVersionID);
+			} else {
+				return;
+			}
+			
+			foreach (ProjectPackage p in packages) {
+				if (p.Name == name /* && p.Version == version */) {
+					package = p;
+					break;
+				}
+			}
+			
+			if (package == null)
+				return;
+			
+			PackageDetails details = new PackageDetails (package);
+			details.Modal = true;
+			details.Show ();
+		}
+		
+		protected virtual void OnNonSelectedPackageCursorChanged (object o, EventArgs e)
+		{
+			detailsButton.Sensitive = true;
+		}
+	}
+}
diff --git a/Gui/GeneralOptionsPanel.cs b/Gui/GeneralOptionsPanel.cs
new file mode 100644
index 0000000..67ccbeb
--- /dev/null
+++ b/Gui/GeneralOptionsPanel.cs
@@ -0,0 +1,128 @@
+//
+// GeneralOptionsPanel.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.Collections.Generic;
+
+using Mono.Addins;
+
+using MonoDevelop.Core;
+using MonoDevelop.Core.Gui.Dialogs;
+
+namespace MonoDevelop.ValaBinding
+{
+	public partial class GeneralOptionsPanel : Gtk.Bin
+	{
+		ICompiler default_vala_compiler;
+		List<ICompiler> vala_compilers = new List<ICompiler> ();
+		
+		public GeneralOptionsPanel ()
+		{
+			this.Build ();
+			
+			object[] compilers = AddinManager.GetExtensionObjects ("/ValaBinding/Compilers");
+		
+			foreach (ICompiler compiler in compilers) {
+				vala_compilers.Add (compiler);
+			}
+			
+			foreach (ICompiler compiler in vala_compilers)
+				valaCombo.AppendText (compiler.Name);
+			
+			string vala_compiler = PropertyService.Get<string> ("ValaBinding.DefaultValaCompiler", new ValaCompiler ().Name);
+			
+			foreach (ICompiler compiler in vala_compilers) {
+				if (compiler.Name == vala_compiler) {
+					default_vala_compiler = compiler;
+				}
+			}
+			
+			if (default_vala_compiler == null)
+				default_vala_compiler = new ValaCompiler ();
+			
+			int active;
+			Gtk.TreeIter iter;
+			Gtk.ListStore store;
+			
+			active = 0;
+			store = (Gtk.ListStore)valaCombo.Model;
+			store.GetIterFirst (out iter);
+			
+			while (store.IterIsValid (iter)) {
+				if ((string)store.GetValue (iter, 0) == default_vala_compiler.Name) {
+					break;
+				}
+				store.IterNext (ref iter);
+				active++;
+			}
+
+			valaCombo.Active = active;
+		}
+		
+		public bool Store ()
+		{
+			PropertyService.Set ("ValaBinding.DefaultValaCompiler", default_vala_compiler.Name);
+			PropertyService.SaveProperties ();
+			return true;
+		}
+
+		protected virtual void OnValaComboChanged (object sender, System.EventArgs e)
+		{
+			 string activeCompiler = valaCombo.ActiveText;
+			
+			foreach (ICompiler compiler in vala_compilers) {
+				if (compiler.Name == activeCompiler) {
+					 default_vala_compiler = compiler;
+				}
+			}
+			
+			if (default_vala_compiler == null)
+				default_vala_compiler = new ValaCompiler ();
+		}
+	}
+	
+	public class GeneralOptionsPanelBinding : OptionsPanel
+	{
+		private GeneralOptionsPanel panel;
+		
+		public override Gtk.Widget CreatePanelWidget ()
+		{
+			panel = new GeneralOptionsPanel ();
+			return panel;
+		}
+		
+		public override void ApplyChanges ()
+		{
+			panel.Store ();
+		}
+	}
+}
diff --git a/Gui/OutputOptionsPanel.cs b/Gui/OutputOptionsPanel.cs
new file mode 100644
index 0000000..96307c7
--- /dev/null
+++ b/Gui/OutputOptionsPanel.cs
@@ -0,0 +1,120 @@
+//
+// OutputOptionsPanel.cs: configure output options
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Core;
+using MonoDevelop.Projects.Gui.Dialogs;
+
+namespace MonoDevelop.ValaBinding
+{
+	public partial class OutputOptionsPanel : Gtk.Bin
+	{
+		private ValaProjectConfiguration configuration;
+		
+		public OutputOptionsPanel ()
+		{
+			this.Build ();
+			
+			table1.RowSpacing = 3;
+		}
+		
+		public void Load (ValaProjectConfiguration config)
+		{
+			configuration = config;
+			
+			outputNameTextEntry.Text = configuration.Output;
+			outputPathTextEntry.Text = configuration.OutputDirectory;
+			parametersTextEntry.Text = configuration.CommandLineParameters;
+			
+			externalConsoleCheckbox.Active = configuration.ExternalConsole;
+			pauseCheckbox.Active = configuration.PauseConsoleOutput;
+		}
+		
+		private void OnBrowseButtonClick (object sender, EventArgs e)
+		{
+			AddPathDialog dialog = new AddPathDialog (configuration.OutputDirectory);
+			dialog.Run ();
+			outputPathTextEntry.Text = dialog.SelectedPath;
+		}
+		
+		public bool Store ()
+		{
+			if (configuration == null)
+				return false;
+			
+			if (outputNameTextEntry != null && outputNameTextEntry.Text.Length > 0)
+				configuration.Output = outputNameTextEntry.Text.Trim ();
+			
+			if (outputPathTextEntry.Text != null && outputPathTextEntry.Text.Length > 0)
+				configuration.OutputDirectory = outputPathTextEntry.Text.Trim ();
+			
+			if (parametersTextEntry.Text != null && parametersTextEntry.Text.Length > 0)
+				configuration.CommandLineParameters = parametersTextEntry.Text.Trim ();
+			
+			configuration.ExternalConsole = externalConsoleCheckbox.Active;
+			configuration.PauseConsoleOutput = pauseCheckbox.Active;
+			
+			return true;
+		}
+
+		protected virtual void OnExternalConsoleCheckboxClicked (object sender, System.EventArgs e)
+		{
+			pauseCheckbox.Sensitive = externalConsoleCheckbox.Active;
+		}
+	}
+	
+	public class OutputOptionsPanelBinding : MultiConfigItemOptionsPanel
+	{
+		private OutputOptionsPanel panel;
+		
+		public override Gtk.Widget CreatePanelWidget ()
+		{
+			return panel = new OutputOptionsPanel ();
+		}
+		
+		public override void LoadConfigData ()
+		{
+			panel.Load((ValaProjectConfiguration) CurrentConfiguration);
+//			panel = new OutputOptionsPanel ((Properties)CustomizationObject);
+//			Add (panel);
+		}
+		
+		public override void ApplyChanges ()
+		{
+			panel.Store ();
+		}
+	}
+}
diff --git a/Gui/PackageDetails.cs b/Gui/PackageDetails.cs
new file mode 100644
index 0000000..26e881d
--- /dev/null
+++ b/Gui/PackageDetails.cs
@@ -0,0 +1,90 @@
+//
+// PackageDetails.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+namespace MonoDevelop.ValaBinding
+{
+	public partial class PackageDetails : Gtk.Dialog
+	{
+		Gtk.ListStore requiresStore = new Gtk.ListStore (typeof(string));
+//		Gtk.ListStore libPathsStore = new Gtk.ListStore (typeof(string));
+//		Gtk.ListStore libsStore = new Gtk.ListStore (typeof(string));
+//		Gtk.ListStore cflagsStore = new Gtk.ListStore (typeof(string));
+		
+		public PackageDetails (ProjectPackage package)
+		{
+			this.Build();
+			
+			package = new ProjectPackage(package.File);
+			
+			Gtk.CellRendererText textRenderer = new Gtk.CellRendererText ();
+			
+			requiresTreeView.Model = requiresStore;
+			requiresTreeView.AppendColumn ("Requires", textRenderer, "text", 0);
+			requiresTreeView.HeadersVisible = false;
+			
+//			libPathsTreeView.Model = libPathsStore;
+//			libPathsTreeView.AppendColumn ("LibPaths", textRenderer, "text", 0);
+//			libPathsTreeView.HeadersVisible = false;
+//			
+//			libsTreeView.Model = libsStore;
+//			libsTreeView.AppendColumn ("Libs", textRenderer, "text", 0);
+//			libsTreeView.HeadersVisible = false;
+//			
+//			cflagsTreeView.Model = cflagsStore;
+//			cflagsTreeView.AppendColumn ("CFlags", textRenderer, "text", 0);
+//			cflagsTreeView.HeadersVisible = false;
+//			
+			nameLabel.Text = package.Name;
+			
+			descriptionLabel.Text = package.Description;
+			versionLabel.Text = package.Version;
+			
+			foreach (string req in package.Requires)
+				requiresStore.AppendValues (req);
+			
+//			foreach (string libpath in package.LibPaths)
+//				libPathsStore.AppendValues (libpath);
+//			
+//			foreach (string lib in package.Libs)
+//				libsStore.AppendValues (lib);
+//			
+//			foreach (string cflag in package.CFlags)
+//				cflagsStore.AppendValues (cflag);
+		}
+
+		protected virtual void OnButtonOkClicked (object sender, System.EventArgs e)
+		{
+			Destroy ();
+		}
+	}
+}
diff --git a/Gui/ValaTextEditorExtension.cs b/Gui/ValaTextEditorExtension.cs
new file mode 100644
index 0000000..68b5304
--- /dev/null
+++ b/Gui/ValaTextEditorExtension.cs
@@ -0,0 +1,358 @@
+//
+// ValaTextEditorExtension.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Text;
+using System.Collections.Generic;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Content;
+using MonoDevelop.Projects.Gui.Completion;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding
+{
+	public class ValaTextEditorExtension : CompletionTextEditorExtension
+	{
+		// Allowed chars to be next to an identifier
+		private static char[] allowedChars = new char[] {
+			'.', ':', ' ', '\t', '=', '*', '+', '-', '/', '%', ',', '&',
+			'|', '^', '{', '}', '[', ']', '(', ')', '\n', '!', '?', '<', '>'
+		};
+		
+		// Allowed Chars to be next to an identifier excluding ':' (to get the full name in '::' completion).
+		private static char[] allowedCharsMinusColon = new char[] {
+			'.', ' ', '\t', '=', '*', '+', '-', '/', '%', ',', '&', '|',
+			'^', '{', '}', '[', ']', '(', ')', '\n', '!', '?', '<', '>'
+		};
+		
+		public override bool ExtendsEditor (Document doc, IEditableTextBuffer editor)
+		{
+			return (Path.GetExtension (doc.Name).ToUpper () == ".VALA"   ||
+			        Path.GetExtension (doc.Name).ToUpper () == ".VAPI" );
+		}
+		
+		public override bool KeyPress (Gdk.Key key, char keyChar, Gdk.ModifierType modifier)
+		{
+			int line, column;
+			Editor.GetLineColumnFromPosition (Editor.CursorPosition, out line, out column);
+			string lineText = Editor.GetLineText (line);
+			
+			// smart formatting strategy
+			if (TextEditorProperties.IndentStyle == IndentStyle.Smart) {
+				if (key == Gdk.Key.Return) {
+					if (lineText.TrimEnd ().EndsWith ("{")) {
+						Editor.InsertText (Editor.CursorPosition, 
+						    "\n" + TextEditorProperties.IndentString + GetIndent (Editor, line));
+						return false;
+					}
+				} else if (key == Gdk.Key.braceright && AllWhiteSpace (lineText) 
+				    && lineText.StartsWith (TextEditorProperties.IndentString)) {
+					if (lineText.Length > 0)
+						lineText = lineText.Substring (TextEditorProperties.IndentString.Length);
+					Editor.ReplaceLine (line, lineText + "}");
+					return false;
+				}
+			}
+			
+			return base.KeyPress (key, keyChar, modifier);
+		}
+		
+		public override ICompletionDataList HandleCodeCompletion (
+		    ICodeCompletionContext completionContext, char completionChar)
+		{
+			string lineText = Editor.GetLineText (completionContext.TriggerLine + 1);
+			
+			if (lineText.EndsWith (".")) {
+				// remove the trailing '.'
+				lineText = lineText.Substring (0, lineText.Length - 1);
+				
+				int nameStart = lineText.LastIndexOfAny (allowedChars);
+
+				nameStart++;
+				
+				string itemName = lineText.Substring (nameStart).Trim ();
+				
+				if (string.IsNullOrEmpty (itemName))
+					return null;
+				
+				return GetMembersOfItem (itemName);
+			}
+			
+			return null;
+		}
+		
+		public override ICompletionDataList CodeCompletionCommand (
+		    ICodeCompletionContext completionContext)
+		{
+			int pos = completionContext.TriggerOffset;
+			int line, column;
+			Editor.GetLineColumnFromPosition (Editor.CursorPosition, out line, out column);
+			string lineText = Editor.GetLineText (line);
+			
+			if (!lineText.Contains ("."))
+			    return GlobalComplete ();
+			
+			return HandleCodeCompletion (completionContext, Editor.GetText (pos - 1, pos)[0]);
+		}
+		
+		private CompletionDataList GetMembersOfItem (string itemFullName)
+		{
+			ValaProject project = Document.Project as ValaProject;
+			
+			if (project == null)
+				return null;
+				
+			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
+			CompletionDataList list = new CompletionDataList ();
+			
+			LanguageItem container = null;
+			string containerType = null;
+			
+			string currentFileName = Document.FileName;
+			bool in_project = false;
+			
+			// Try containers
+			foreach (LanguageItem li in info.Containers ()) {
+				if ((itemFullName == li.FullName) || (itemFullName == li.Name)){
+					container = li;
+					in_project = true;
+					break;
+				}
+			}
+			
+			// Try included containers
+			if (!in_project && info.IncludedFiles.ContainsKey (currentFileName)) {
+				foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
+					foreach (LanguageItem li in fi.Containers ()) {
+						if ((itemFullName == li.FullName) || (itemFullName == li.Name)) {
+							container = li;
+							break;
+						}
+					}
+				}
+			}
+			
+			// Try instances
+			// Find the typename of the instance
+			foreach (Member li in info.Members ) {
+				if (itemFullName == li.Name) {
+					containerType = li.InstanceType;
+					in_project = true;
+					break;
+				}
+			}
+			
+			// Search included files
+			if (!in_project && info.IncludedFiles.ContainsKey (currentFileName)) {
+				foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
+					foreach (Member li in fi.Members) {
+						if (itemFullName == li.Name) {
+							containerType = li.InstanceType;
+							break;
+						}
+					}
+				}
+			}
+			
+			if (null == container) {
+				// Search locals
+				foreach (Local li in info.Locals ) {
+					if (itemFullName == li.Name && currentFileName == li.File) {
+						containerType = li.InstanceType;
+						in_project = true;
+						break;
+					}
+				}
+			}
+
+			
+			if ((container == null) && (containerType == null))
+				return null;
+			
+			if(null != container) {
+				if (in_project) {
+					foreach (LanguageItem li in info.AllItems ()) {
+						if (li.Parent != null && li.Parent.Equals (container)) {
+							list.Add (new CompletionData (li));
+						}
+					}
+				} else {
+					foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
+						foreach (LanguageItem li in fi.AllItems ()) {
+							if (li.Parent != null && li.Parent.Equals (container))
+								list.Add (new CompletionData (li));
+						}
+					}
+				}
+			} else {
+				if (in_project) {
+					AddMembersWithParent (list, info.InstanceMembers (), containerType);
+				} else {
+					foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
+						AddMembersWithParent (list, fi.InstanceMembers (), containerType);
+					}
+				}
+			}
+			
+			return list;
+		}
+		
+		/// <summary>
+		/// Adds completion data for children to a list
+		/// </summary>
+		/// <param name="list">
+		/// The list to which completion data will be added
+		/// <see cref="CompletionDataList"/>
+		/// </param>
+		/// <param name="items">
+		/// A list of items to search
+		/// <see cref="IEnumerable"/>
+		/// </param>
+		/// <param name="parentName">
+		/// The name of the parent that will be matched
+		/// <see cref="System.String"/>
+		/// </param>
+		public static void AddMembersWithParent(CompletionDataList list, IEnumerable<LanguageItem> items, string parentName) {
+				foreach (LanguageItem li in items) {
+					if (li.Parent != null && li.Parent.Name.EndsWith (parentName))
+						list.Add (new CompletionData (li));
+				}
+		}
+
+		
+		private ICompletionDataList GlobalComplete ()
+		{
+			ValaProject project = Document.Project as ValaProject;
+			
+			if (project == null)
+				return null;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
+			
+			CompletionDataList list = new CompletionDataList ();
+			
+			foreach (LanguageItem li in info.Containers ())
+				if (li.Parent == null)
+					list.Add (new CompletionData (li));
+			
+			foreach (Function f in info.Functions)
+				if (f.Parent == null)
+					list.Add (new CompletionData (f));
+
+			foreach (Enumerator e in info.Enumerators)
+				list.Add (new CompletionData (e));
+			
+			foreach (Macro m in info.Macros)
+				list.Add (new CompletionData (m));
+			
+			string currentFileName = Document.FileName;
+			
+			if (info.IncludedFiles.ContainsKey (currentFileName)) {
+				foreach (FileInformation fi in info.IncludedFiles[currentFileName]) {
+					foreach (LanguageItem li in fi.Containers ())
+						if (li.Parent == null)
+							list.Add (new CompletionData (li));
+					
+					foreach (Function f in fi.Functions)
+						if (f.Parent == null)
+							list.Add (new CompletionData (f));
+
+					foreach (Enumerator e in fi.Enumerators)
+						list.Add (new CompletionData (e));
+					
+					foreach (Macro m in fi.Macros)
+						list.Add (new CompletionData (m));
+				}
+			}
+			
+			return list;
+		}
+		
+		public override  IParameterDataProvider HandleParameterCompletion (
+		    ICodeCompletionContext completionContext, char completionChar)
+		{
+            //System.Console.WriteLine("ValaTextEditorExtension.HandleParameterCompletion({0})", completionChar);
+			if (completionChar != '(')
+				return null;
+			
+			ValaProject project = Document.Project as ValaProject;
+			
+			if (project == null)
+				return null;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
+			
+			int line, column;
+			Editor.GetLineColumnFromPosition (Editor.CursorPosition, out line, out column);
+			int position = Editor.GetPositionFromLineColumn (line, 1);
+			string lineText = Editor.GetText (position, Editor.CursorPosition - 1).TrimEnd ();
+			
+			int nameStart = lineText.LastIndexOfAny (allowedChars);
+
+			nameStart++;
+			
+			string functionName = lineText.Substring (nameStart).Trim ();
+			
+			if (string.IsNullOrEmpty (functionName))
+				return null;
+			
+			return new ParameterDataProvider (Document, info, functionName);
+		}
+		
+		private bool AllWhiteSpace (string lineText)
+		{
+			foreach (char c in lineText)
+				if (!char.IsWhiteSpace (c))
+					return false;
+			
+			return true;
+		}
+		
+		// Snatched from DefaultFormattingStrategy
+		private string GetIndent (TextEditor d, int lineNumber)
+		{
+			string lineText = d.GetLineText (lineNumber);
+			StringBuilder whitespaces = new StringBuilder ();
+			
+			foreach (char ch in lineText) {
+				if (!char.IsWhiteSpace (ch))
+					break;
+				whitespaces.Append (ch);
+			}
+			
+			return whitespaces.ToString ();
+		}
+	}
+}
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..d3c5b40
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,237 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007 Free Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  6. Often, you can also type `make uninstall' to remove the installed
+     files again.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..4b77793
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,124 @@
+ADDIN_BUILD = $(top_builddir)/build
+ASSEMBLY = $(ADDIN_BUILD)/MonoDevelop.ValaBinding.dll
+
+REFS =  \
+	$(GLIB_SHARP_LIBS) \
+	$(GTK_SHARP_LIBS) \
+	$(MONO_ADDINS_LIBS) \
+	$(MONODEVELOP_CORE_ADDINS_LIBS) \
+	$(MONODEVELOP_LIBS) \
+	-r:Mono.Posix \
+	-r:System \
+	-r:System.Xml
+	
+
+FILES =  \
+	AssemblyInfo.cs \
+	Compiler/ICompiler.cs \
+	Compiler/ValaCompiler.cs \
+	gtk-gui/generated.cs \
+	gtk-gui/MonoDevelop.ValaBinding.AddLibraryDialog.cs \
+	gtk-gui/MonoDevelop.ValaBinding.AddPathDialog.cs \
+	gtk-gui/MonoDevelop.ValaBinding.CodeGenerationPanel.cs \
+	gtk-gui/MonoDevelop.ValaBinding.EditPackagesDialog.cs \
+	gtk-gui/MonoDevelop.ValaBinding.GeneralOptionsPanel.cs \
+	gtk-gui/MonoDevelop.ValaBinding.OutputOptionsPanel.cs \
+	gtk-gui/MonoDevelop.ValaBinding.PackageDetails.cs \
+	Gui/AddLibraryDialog.cs \
+	Gui/AddPathDialog.cs \
+	Gui/CodeGenerationPanel.cs \
+	Gui/DataProvider.cs \
+	Gui/EditPackagesDialog.cs \
+	Gui/GeneralOptionsPanel.cs \
+	Gui/OutputOptionsPanel.cs \
+	Gui/PackageDetails.cs \
+	Gui/ValaTextEditorExtension.cs \
+	Navigation/ClassNodeBuilder.cs \
+	Navigation/ClassPadEventArgs.cs \
+	Navigation/EnumerationNodeBuilder.cs \
+	Navigation/EnumeratorNodeBuilder.cs \
+	Navigation/FunctionNodeBuilder.cs \
+	Navigation/GlobalsNodeBuilder.cs \
+	Navigation/LanguageItemCommandHandler.cs \
+	Navigation/LanguageItemEventArgs.cs \
+	Navigation/MacroDefinitionsNodeBuilder.cs \
+	Navigation/MacroNodeBuilder.cs \
+	Navigation/MemberNodeBuilder.cs \
+	Navigation/NamespaceNodeBuilder.cs \
+	Navigation/ProjectNodeBuilderExtension.cs \
+	Navigation/StructureNodeBuilder.cs \
+	Navigation/TypedefNodeBuilder.cs \
+	Navigation/UnionNodeBuilder.cs \
+	Navigation/VariableNodeBuilder.cs \
+	Parser/Class.cs \
+	Parser/Enumeration.cs \
+	Parser/Enumerator.cs \
+	Parser/Function.cs \
+	Parser/LanguageItem.cs \
+	Parser/Local.cs \
+	Parser/Macro.cs \
+	Parser/Member.cs \
+	Parser/Namespace.cs \
+	Parser/ProjectInformation.cs \
+	Parser/ProjectInformationManager.cs \
+	Parser/Structure.cs \
+	Parser/Tag.cs \
+	Parser/TagDatabaseManager.cs \
+	Parser/Typedef.cs \
+	Parser/Union.cs \
+	Parser/Variable.cs \
+	Project/ProjectPackage.cs \
+	Project/ProjectPackageCollection.cs \
+	Project/ProjectPackageEventArgs.cs \
+	Project/ValaCompilationParameters.cs \
+	Project/ValaProject.cs \
+	Project/ValaProjectBinding.cs \
+	Project/ValaProjectConfiguration.cs \
+	Project/ValaProjectServiceExtension.cs \
+	ProjectPad/ProjectNodeExtension.cs \
+	ProjectPad/ProjectPackageNodeBuilder.cs \
+	ProjectPad/ProjectPackagesFolderNodeBuilder.cs \
+	ProjectPad/ProjectReferencesExtension.cs \
+	ValaLanguageBinding.cs
+
+RES =  \
+	gtk-gui/gui.stetic \
+	gtk-gui/objects.xml \
+	icons/Icons.16x16.PrivateUnion \
+	icons/Icons.16x16.ProjectReference \
+	icons/Icons.16x16.ProtectedUnion \
+	icons/Icons.16x16.Union \
+	icons/text-x-vala.16x16.png \
+	icons/text-x-vala.24x24.png \
+	icons/text-x-vala.32x32.png \
+	icons/text-x-vala.48x48.png \
+	icons/vala-icon-32.png \
+	templates/ConsoleValaProject.xpt.xml \
+	templates/EmptyValaProject.xpt.xml \
+	templates/EmptyValaSourceFile.xft.xml \
+	templates/SharedLibraryValaProject.xpt.xml \
+	templates/ValaTestFixture.xpt.xml \
+	ValaBinding.addin.xml
+
+all: $(ASSEMBLY)
+
+LOCAL_PKGCONFIG=PKG_CONFIG_PATH=../../local-config:$$PKG_CONFIG_PATH
+
+$(ASSEMBLY): $(build_sources) $(build_resources)
+	mkdir -p $(ADDIN_BUILD)
+	$(LOCAL_PKGCONFIG) $(CSC) $(CSC_FLAGS) -debug -out:$@ -target:library $(REFS) \
+		$(build_resources:%=/resource:%) $(build_sources)
+
+valabindinglibdir = $(prefix)/lib/monodevelop/AddIns/BackendBindings
+valabindinglib_DATA = $(ASSEMBLY)
+
+CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb
+
+EXTRA_DIST = $(FILES) $(RES)
+
+# include $(top_srcdir)/Makefile.include
+
+build_sources = $(addprefix $(srcdir)/, $(FILES)) $(GENERATED_FILES)
+build_resources = $(addprefix $(srcdir)/, $(RES))
+build_test_sources = $(addprefix $(srcdir)/, $(TESTFILES)) $(GENERATED_FILES)
+
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..bf038c8
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,589 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
+	ChangeLog INSTALL NEWS install-sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(valabindinglibdir)"
+valabindinglibDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(valabindinglib_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+ASSEMBLY_VERSION = @ASSEMBLY_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CSC = @CSC@
+CSC_FLAGS = @CSC_FLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GLADE_SHARP_CFLAGS = @GLADE_SHARP_CFLAGS@
+GLADE_SHARP_LIBS = @GLADE_SHARP_LIBS@
+GLIB_SHARP_CFLAGS = @GLIB_SHARP_CFLAGS@
+GLIB_SHARP_LIBS = @GLIB_SHARP_LIBS@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GNOME_VFS_SHARP_CFLAGS = @GNOME_VFS_SHARP_CFLAGS@
+GNOME_VFS_SHARP_LIBS = @GNOME_VFS_SHARP_LIBS@
+GTK_SHARP_CFLAGS = @GTK_SHARP_CFLAGS@
+GTK_SHARP_LIBS = @GTK_SHARP_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD_LIBRARY_PATH = @LD_LIBRARY_PATH@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIB_PREFIX = @LIB_PREFIX@
+LIB_SUFFIX = @LIB_SUFFIX@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MONO = @MONO@
+MONODEVELOP_CFLAGS = @MONODEVELOP_CFLAGS@
+MONODEVELOP_CORE_ADDINS_CFLAGS = @MONODEVELOP_CORE_ADDINS_CFLAGS@
+MONODEVELOP_CORE_ADDINS_LIBS = @MONODEVELOP_CORE_ADDINS_LIBS@
+MONODEVELOP_LIBS = @MONODEVELOP_LIBS@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH = @PATH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+RUNTIME = @RUNTIME@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UNMANAGED_DEPENDENCIES_MONO_CFLAGS = @UNMANAGED_DEPENDENCIES_MONO_CFLAGS@
+UNMANAGED_DEPENDENCIES_MONO_LIBS = @UNMANAGED_DEPENDENCIES_MONO_LIBS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gtksharp_prefix = @gtksharp_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ADDIN_BUILD = $(top_builddir)/build
+ASSEMBLY = $(ADDIN_BUILD)/MonoDevelop.ValaBinding.dll
+REFS = \
+	$(GLIB_SHARP_LIBS) \
+	$(GTK_SHARP_LIBS) \
+	$(MONO_ADDINS_LIBS) \
+	$(MONODEVELOP_CORE_ADDINS_LIBS) \
+	$(MONODEVELOP_LIBS) \
+	-r:Mono.Posix \
+	-r:System \
+	-r:System.Xml
+
+FILES = \
+	AssemblyInfo.cs \
+	Compiler/ICompiler.cs \
+	Compiler/ValaCompiler.cs \
+	gtk-gui/generated.cs \
+	gtk-gui/MonoDevelop.ValaBinding.AddLibraryDialog.cs \
+	gtk-gui/MonoDevelop.ValaBinding.AddPathDialog.cs \
+	gtk-gui/MonoDevelop.ValaBinding.CodeGenerationPanel.cs \
+	gtk-gui/MonoDevelop.ValaBinding.EditPackagesDialog.cs \
+	gtk-gui/MonoDevelop.ValaBinding.GeneralOptionsPanel.cs \
+	gtk-gui/MonoDevelop.ValaBinding.OutputOptionsPanel.cs \
+	gtk-gui/MonoDevelop.ValaBinding.PackageDetails.cs \
+	Gui/AddLibraryDialog.cs \
+	Gui/AddPathDialog.cs \
+	Gui/CodeGenerationPanel.cs \
+	Gui/DataProvider.cs \
+	Gui/EditPackagesDialog.cs \
+	Gui/GeneralOptionsPanel.cs \
+	Gui/OutputOptionsPanel.cs \
+	Gui/PackageDetails.cs \
+	Gui/ValaTextEditorExtension.cs \
+	Navigation/ClassNodeBuilder.cs \
+	Navigation/ClassPadEventArgs.cs \
+	Navigation/EnumerationNodeBuilder.cs \
+	Navigation/EnumeratorNodeBuilder.cs \
+	Navigation/FunctionNodeBuilder.cs \
+	Navigation/GlobalsNodeBuilder.cs \
+	Navigation/LanguageItemCommandHandler.cs \
+	Navigation/LanguageItemEventArgs.cs \
+	Navigation/MacroDefinitionsNodeBuilder.cs \
+	Navigation/MacroNodeBuilder.cs \
+	Navigation/MemberNodeBuilder.cs \
+	Navigation/NamespaceNodeBuilder.cs \
+	Navigation/ProjectNodeBuilderExtension.cs \
+	Navigation/StructureNodeBuilder.cs \
+	Navigation/TypedefNodeBuilder.cs \
+	Navigation/UnionNodeBuilder.cs \
+	Navigation/VariableNodeBuilder.cs \
+	Parser/Class.cs \
+	Parser/Enumeration.cs \
+	Parser/Enumerator.cs \
+	Parser/Function.cs \
+	Parser/LanguageItem.cs \
+	Parser/Local.cs \
+	Parser/Macro.cs \
+	Parser/Member.cs \
+	Parser/Namespace.cs \
+	Parser/ProjectInformation.cs \
+	Parser/ProjectInformationManager.cs \
+	Parser/Structure.cs \
+	Parser/Tag.cs \
+	Parser/TagDatabaseManager.cs \
+	Parser/Typedef.cs \
+	Parser/Union.cs \
+	Parser/Variable.cs \
+	Project/ProjectPackage.cs \
+	Project/ProjectPackageCollection.cs \
+	Project/ProjectPackageEventArgs.cs \
+	Project/ValaCompilationParameters.cs \
+	Project/ValaProject.cs \
+	Project/ValaProjectBinding.cs \
+	Project/ValaProjectConfiguration.cs \
+	Project/ValaProjectServiceExtension.cs \
+	ProjectPad/ProjectNodeExtension.cs \
+	ProjectPad/ProjectPackageNodeBuilder.cs \
+	ProjectPad/ProjectPackagesFolderNodeBuilder.cs \
+	ProjectPad/ProjectReferencesExtension.cs \
+	ValaLanguageBinding.cs
+
+RES = \
+	gtk-gui/gui.stetic \
+	gtk-gui/objects.xml \
+	icons/Icons.16x16.PrivateUnion \
+	icons/Icons.16x16.ProjectReference \
+	icons/Icons.16x16.ProtectedUnion \
+	icons/Icons.16x16.Union \
+	icons/text-x-vala.16x16.png \
+	icons/text-x-vala.24x24.png \
+	icons/text-x-vala.32x32.png \
+	icons/text-x-vala.48x48.png \
+	icons/vala-icon-32.png \
+	templates/ConsoleValaProject.xpt.xml \
+	templates/EmptyValaProject.xpt.xml \
+	templates/EmptyValaSourceFile.xft.xml \
+	templates/SharedLibraryValaProject.xpt.xml \
+	templates/ValaTestFixture.xpt.xml \
+	ValaBinding.addin.xml
+
+LOCAL_PKGCONFIG = PKG_CONFIG_PATH=../../local-config:$$PKG_CONFIG_PATH
+valabindinglibdir = $(prefix)/lib/monodevelop/AddIns/BackendBindings
+valabindinglib_DATA = $(ASSEMBLY)
+CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb
+EXTRA_DIST = $(FILES) $(RES)
+
+# include $(top_srcdir)/Makefile.include
+build_sources = $(addprefix $(srcdir)/, $(FILES)) $(GENERATED_FILES)
+build_resources = $(addprefix $(srcdir)/, $(RES))
+build_test_sources = $(addprefix $(srcdir)/, $(TESTFILES)) $(GENERATED_FILES)
+all: all-am
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+install-valabindinglibDATA: $(valabindinglib_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(valabindinglibdir)" || $(MKDIR_P) "$(DESTDIR)$(valabindinglibdir)"
+	@list='$(valabindinglib_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(valabindinglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(valabindinglibdir)/$$f'"; \
+	  $(valabindinglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(valabindinglibdir)/$$f"; \
+	done
+
+uninstall-valabindinglibDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(valabindinglib_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(valabindinglibdir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(valabindinglibdir)/$$f"; \
+	done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d $(distdir) || mkdir $(distdir)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && cd $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@cd $(distuninstallcheck_dir) \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(valabindinglibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-valabindinglibDATA
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-valabindinglibDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am am--refresh check check-am clean clean-generic dist \
+	dist-all dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ \
+	dist-zip distcheck distclean distclean-generic distcleancheck \
+	distdir distuninstallcheck dvi dvi-am html html-am info \
+	info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip install-valabindinglibDATA \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-valabindinglibDATA
+
+
+all: $(ASSEMBLY)
+
+$(ASSEMBLY): $(build_sources) $(build_resources)
+	mkdir -p $(ADDIN_BUILD)
+	$(LOCAL_PKGCONFIG) $(CSC) $(CSC_FLAGS) -debug -out:$@ -target:library $(REFS) \
+		$(build_resources:%=/resource:%) $(build_sources)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..e69de29
diff --git a/Navigation/ClassNodeBuilder.cs b/Navigation/ClassNodeBuilder.cs
new file mode 100644
index 0000000..55c6f95
--- /dev/null
+++ b/Navigation/ClassNodeBuilder.cs
@@ -0,0 +1,142 @@
+//
+// ClassNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class ClassNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Class); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Class)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Class c = (Class)dataObject;
+				
+			label = c.Name;
+			
+			switch (c.Access)
+			{
+			case AccessModifier.Public:
+				icon = Context.GetIcon (Stock.Class);
+				break;
+			case AccessModifier.Protected:
+				icon = Context.GetIcon (Stock.ProtectedClass);
+				break;
+			case AccessModifier.Private:
+				icon = Context.GetIcon (Stock.PrivateClass);
+				break;
+			}
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ValaProject p = treeBuilder.GetParentDataItem (typeof(ValaProject), false) as ValaProject;
+			
+			if (p == null) return;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			bool publicOnly = treeBuilder.Options["PublicApiOnly"];
+			Class thisClass = (Class)dataObject;
+			
+			// Classes
+			foreach (Class c in info.Classes)
+				if (c.Parent != null && c.Parent.Equals (thisClass) && (!publicOnly || c.Access == AccessModifier.Public))
+					treeBuilder.AddChild (c);
+			
+			// Structures
+			foreach (Structure s in info.Structures)
+				if (s.Parent != null && s.Parent.Equals (thisClass) && (!publicOnly || s.Access == AccessModifier.Public))
+					treeBuilder.AddChild (s);
+			
+			// Unions
+			foreach (Union u in info.Unions)
+				if (u.Parent != null && u.Parent.Equals (thisClass) && (!publicOnly || u.Access == AccessModifier.Public))
+					treeBuilder.AddChild (u);
+			
+			// Enumerations
+			foreach (Enumeration e in info.Enumerations)
+				if (e.Parent != null && e.Parent.Equals (thisClass) && (!publicOnly || e.Access == AccessModifier.Public))
+					treeBuilder.AddChild (e);
+			
+			// Typedefs
+			foreach (Typedef t in info.Typedefs)
+				if (t.Parent != null && t.Parent.Equals (thisClass) && (!publicOnly || t.Access == AccessModifier.Public))
+					treeBuilder.AddChild (t);
+			
+			// Functions
+			foreach (Function f in info.Functions)
+				if (f.Parent != null && f.Parent.Equals (thisClass) && (!publicOnly || f.Access == AccessModifier.Public))
+					treeBuilder.AddChild (f);
+			
+			// Members
+			foreach (Member m in info.Members)
+				if (m.Parent != null && m.Parent.Equals (thisClass) && (!publicOnly || m.Access == AccessModifier.Public))
+					treeBuilder.AddChild (m);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			return -1;
+		}
+	}
+}
diff --git a/Navigation/ClassPadEventArgs.cs b/Navigation/ClassPadEventArgs.cs
new file mode 100644
index 0000000..8e46665
--- /dev/null
+++ b/Navigation/ClassPadEventArgs.cs
@@ -0,0 +1,53 @@
+//
+// ClassPadEventHandler.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public delegate void ClassPadEventHandler (ClassPadEventArgs e);
+	
+	public class ClassPadEventArgs : EventArgs
+	{
+		private Project project;
+		
+		public ClassPadEventArgs (Project project)
+		{
+			this.project = project;
+		}
+		
+		public Project Project {
+			get { return project; }
+		}
+	}
+}
diff --git a/Navigation/EnumerationNodeBuilder.cs b/Navigation/EnumerationNodeBuilder.cs
new file mode 100644
index 0000000..b724c02
--- /dev/null
+++ b/Navigation/EnumerationNodeBuilder.cs
@@ -0,0 +1,115 @@
+//
+// EnumerationNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class EnumerationNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Enumeration); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Enumeration)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Enumeration e = (Enumeration)dataObject;
+				
+			label = e.Name;
+			
+			switch (e.Access)
+			{
+			case AccessModifier.Public:
+				icon = Context.GetIcon (Stock.Enum);
+				break;
+			case AccessModifier.Protected:
+				icon = Context.GetIcon (Stock.ProtectedEnum);
+				break;
+			case AccessModifier.Private:
+				icon = Context.GetIcon (Stock.PrivateEnum);
+				break;
+			}
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ValaProject p = treeBuilder.GetParentDataItem (typeof(ValaProject), false) as ValaProject;
+			
+			if (p == null) return;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			Enumeration thisEnumeration = (Enumeration)dataObject;
+			
+			// Enumerators
+			foreach (Enumerator e in info.Enumerators)
+				if (e.Parent != null && e.Parent.Equals (thisEnumeration))
+					treeBuilder.AddChild (e);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Structure)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
+
diff --git a/Navigation/EnumeratorNodeBuilder.cs b/Navigation/EnumeratorNodeBuilder.cs
new file mode 100644
index 0000000..3fee07e
--- /dev/null
+++ b/Navigation/EnumeratorNodeBuilder.cs
@@ -0,0 +1,83 @@
+//
+// EnumeratorNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class EnumeratorNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Enumerator); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Enumerator)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Enumerator e = (Enumerator)dataObject;
+				
+			label = e.Name;
+			icon = Context.GetIcon (Stock.Literal);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return false;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			return DefaultSort;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Navigation/FunctionNodeBuilder.cs b/Navigation/FunctionNodeBuilder.cs
new file mode 100644
index 0000000..3681c05
--- /dev/null
+++ b/Navigation/FunctionNodeBuilder.cs
@@ -0,0 +1,99 @@
+//
+// FunctionNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class FunctionNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Function); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Function)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Function f = (Function)dataObject;
+				
+			label = f.Name;
+			
+			switch (f.Access)
+			{
+			case AccessModifier.Public:
+				icon = Context.GetIcon (Stock.Method);
+				break;
+			case AccessModifier.Protected:
+				icon = Context.GetIcon (Stock.ProtectedMethod);
+				break;
+			case AccessModifier.Private:
+				icon = Context.GetIcon (Stock.PrivateMethod);
+				break;
+			}
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return false;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Typedef)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
diff --git a/Navigation/GlobalsNodeBuilder.cs b/Navigation/GlobalsNodeBuilder.cs
new file mode 100644
index 0000000..d1737f1
--- /dev/null
+++ b/Navigation/GlobalsNodeBuilder.cs
@@ -0,0 +1,138 @@
+//
+// GlobalsNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class Globals
+	{
+		private Project project;
+		
+		public Globals (Project project)
+		{
+			this.project = project;
+		}
+		
+		public Project Project {
+			get { return project; }
+		}
+	}
+	
+	public class GlobalsNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Globals); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return "Globals";
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			label = "Globals";
+			icon = Context.GetIcon (Stock.OpenFolder);
+			closedIcon = Context.GetIcon (Stock.ClosedFolder);
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ValaProject p = treeBuilder.GetParentDataItem (typeof(ValaProject), false) as ValaProject;
+			
+			if (p == null) return;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			// Classes
+			foreach (Class c in info.Classes)
+				if (c.Parent == null)
+					treeBuilder.AddChild (c);
+			
+			// Structures
+			foreach (Structure s in info.Structures)
+				if (s.Parent == null)
+					treeBuilder.AddChild (s);
+			
+			// Unions
+			foreach (Union u in info.Unions)
+				if (u.Parent == null)
+					treeBuilder.AddChild (u);
+			
+			// Enumerations
+			foreach (Enumeration e in info.Enumerations)
+				if (e.Parent == null)
+					treeBuilder.AddChild (e);
+			
+			// Typedefs
+			foreach (Typedef t in info.Typedefs)
+				if (t.Parent == null)
+					treeBuilder.AddChild (t);
+			
+			// Functions
+			foreach (Function f in info.Functions)
+				if (f.Parent == null)
+					treeBuilder.AddChild (f);
+			
+			// Variables
+			foreach (Variable v in info.Variables)
+				treeBuilder.AddChild (v);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Structure)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
diff --git a/Navigation/LanguageItemCommandHandler.cs b/Navigation/LanguageItemCommandHandler.cs
new file mode 100644
index 0000000..dd517e4
--- /dev/null
+++ b/Navigation/LanguageItemCommandHandler.cs
@@ -0,0 +1,72 @@
+//
+// FunctionNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class LanguageItemCommandHandler : NodeCommandHandler
+	{
+		public override void ActivateItem ()
+		{
+			LanguageItem item = (LanguageItem)CurrentNode.DataItem;
+			
+			Document doc = IdeApp.Workbench.OpenDocument (item.File);
+			
+			int lineNum = 0;
+			string line;
+			bool isMacro = item is Macro;
+			StringReader reader = new StringReader (doc.TextEditor.Text);
+			
+			while ((line = reader.ReadLine ()) != null) {
+				lineNum++;
+				
+				if (line.Equals (item.Pattern) || (isMacro && line.StartsWith (item.Pattern))) {
+					doc.TextEditor.JumpTo (lineNum, line.Length + 1);
+					break;
+				}
+			}
+			
+			reader.Close ();
+		}
+	}
+}
diff --git a/Navigation/LanguageItemEventArgs.cs b/Navigation/LanguageItemEventArgs.cs
new file mode 100644
index 0000000..8066bd8
--- /dev/null
+++ b/Navigation/LanguageItemEventArgs.cs
@@ -0,0 +1,53 @@
+//
+// LanguageItemEventArgs.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public delegate void LanguageItemEventHandler (object sender, LanguageItemEventArgs e);
+	
+	public class LanguageItemEventArgs : EventArgs
+	{
+		LanguageItem item;
+		
+		public LanguageItemEventArgs (LanguageItem item)
+		{
+			this.item = item;
+		}
+		
+		public LanguageItem Item {
+			get { return item; }
+		}
+	}
+}
diff --git a/Navigation/MacroDefinitionsNodeBuilder.cs b/Navigation/MacroDefinitionsNodeBuilder.cs
new file mode 100644
index 0000000..d48f07a
--- /dev/null
+++ b/Navigation/MacroDefinitionsNodeBuilder.cs
@@ -0,0 +1,107 @@
+//
+// MacroDefinitionsNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class MacroDefinitions
+	{
+		private Project project;
+		
+		public MacroDefinitions (Project project)
+		{
+			this.project = project;
+		}
+		
+		public Project Project {
+			get { return project; }
+		}
+	}
+	
+	public class MacroDefinitionsNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(MacroDefinitions); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return "Macro Definitions";
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			label = "Macro Definitions";
+			icon = Context.GetIcon (Stock.OpenFolder);
+			closedIcon = Context.GetIcon (Stock.ClosedFolder);
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ValaProject p = treeBuilder.GetParentDataItem (typeof(ValaProject), false) as ValaProject;
+			
+			if (p == null) return;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			foreach (Macro m in info.Macros)
+				treeBuilder.AddChild (m);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Globals)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Navigation/MacroNodeBuilder.cs b/Navigation/MacroNodeBuilder.cs
new file mode 100644
index 0000000..f165742
--- /dev/null
+++ b/Navigation/MacroNodeBuilder.cs
@@ -0,0 +1,79 @@
+//
+// MacroNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class MacroNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Macro); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Macro)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Macro m = (Macro)dataObject;
+				
+			label = m.Name;
+			icon = Context.GetIcon (Stock.Literal);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return false;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Navigation/MemberNodeBuilder.cs b/Navigation/MemberNodeBuilder.cs
new file mode 100644
index 0000000..7df2bf2
--- /dev/null
+++ b/Navigation/MemberNodeBuilder.cs
@@ -0,0 +1,96 @@
+//
+// FunctionNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class MemberNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Member); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Member)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Member m = (Member)dataObject;
+				
+			label = m.Name;
+			
+			switch (m.Access)
+			{
+			case AccessModifier.Public:
+				icon = Context.GetIcon (Stock.Field);
+				break;
+			case AccessModifier.Protected:
+				icon = Context.GetIcon (Stock.ProtectedField);
+				break;
+			case AccessModifier.Private:
+				icon = Context.GetIcon (Stock.PrivateField);
+				break;
+			}
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return false;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			return 1;
+		}
+	}
+}
diff --git a/Navigation/NamespaceNodeBuilder.cs b/Navigation/NamespaceNodeBuilder.cs
new file mode 100644
index 0000000..9417816
--- /dev/null
+++ b/Navigation/NamespaceNodeBuilder.cs
@@ -0,0 +1,135 @@
+//
+// NamespaceNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class NamespaceNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Namespace); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof (LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			if (thisNode.Options["NestedNamespaces"])
+				return ((Namespace)dataObject).Name;
+			else
+				return ((Namespace)dataObject).FullName;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			if (treeBuilder.Options["NestedNamespaces"])
+				label = ((Namespace)dataObject).Name;
+			else
+				label = ((Namespace)dataObject).FullName;
+			
+			icon = Context.GetIcon (Stock.NameSpace);
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ValaProject p = treeBuilder.GetParentDataItem (typeof(ValaProject), false) as ValaProject;
+			
+			if (p == null) return;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			Namespace thisNamespace = ((Namespace)dataObject);
+			
+			// Namespaces
+			if (treeBuilder.Options["NestedNamespaces"])
+				foreach (Namespace n in info.Namespaces)
+					if (n.Parent != null && n.Parent.Equals (thisNamespace))
+						treeBuilder.AddChild (n);
+			
+			// Classes
+			foreach (Class c in info.Classes)
+				if (c.Parent != null && c.Parent.Equals (thisNamespace))
+					treeBuilder.AddChild (c);
+			
+			// Structures
+			foreach (Structure s in info.Structures)
+				if (s.Parent != null && s.Parent.Equals (thisNamespace))
+					treeBuilder.AddChild (s);
+			
+			// Unions
+			foreach (Union u in info.Unions)
+				if (u.Parent != null && u.Parent.Equals (thisNamespace))
+					treeBuilder.AddChild (u);
+			
+			// Enumerations
+			foreach (Enumeration e in info.Enumerations)
+				if (e.Parent != null && e.Parent.Equals (thisNamespace))
+					treeBuilder.AddChild (e);
+			
+			// Typedefs
+			foreach (Typedef t in info.Typedefs)
+				if (t.Parent != null && t.Parent.Equals (thisNamespace))
+					treeBuilder.AddChild (t);
+			
+			// Functions
+			foreach (Function f in info.Functions)
+				if (f.Parent != null && f.Parent.Equals (thisNamespace))
+					treeBuilder.AddChild (f);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			return -1;
+		}
+	}
+}
diff --git a/Navigation/ProjectNodeBuilderExtension.cs b/Navigation/ProjectNodeBuilderExtension.cs
new file mode 100644
index 0000000..82486a5
--- /dev/null
+++ b/Navigation/ProjectNodeBuilderExtension.cs
@@ -0,0 +1,190 @@
+//
+// ProjectNodeBuilderExtension.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+using System.Threading;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Execution;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Core;
+using MonoDevelop.Components.Commands;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding;
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class ProjectNodeBuilderExtension : NodeBuilderExtension
+	{
+		public ClassPadEventHandler finishedBuildingTreeHandler;
+		
+		public override bool CanBuildNode (Type dataType)
+		{
+			return typeof(ValaProject).IsAssignableFrom (dataType);
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(ProjectNodeBuilderExtensionHandler); }
+		}
+		
+		protected override void Initialize ()
+		{
+			finishedBuildingTreeHandler = (ClassPadEventHandler)DispatchService.GuiDispatch (new ClassPadEventHandler (OnFinishedBuildingTree));
+
+			TagDatabaseManager.Instance.FileUpdated += finishedBuildingTreeHandler;
+		}
+		
+		public override void Dispose ()
+		{
+			TagDatabaseManager.Instance.FileUpdated -= finishedBuildingTreeHandler;
+		}
+		
+		public static void CreatePadTree (object o)
+		{
+			ValaProject p = o as ValaProject;
+			if (o == null) return;
+			
+			try {
+				foreach (ProjectFile f in p.Files) {
+					if (f.BuildAction == BuildAction.Compile)
+						TagDatabaseManager.Instance.UpdateFileTags (p, f.Name);
+				}
+				foreach (ProjectPackage package in p.Packages) {
+					TagDatabaseManager.Instance.UpdateFileTags(p, package.File);
+				}
+			} catch (IOException) {
+				return;
+			}
+		}
+		
+		private bool check_ctags = false;
+		private bool have_ctags = false;
+		
+		private void CheckForCtags ()
+		{
+			check_ctags = true;
+			
+			try {
+				ProcessWrapper p = Runtime.ProcessService.StartProcess ("ctags", "--version", null, null);
+				p.WaitForOutput ();
+				have_ctags = true;
+			} catch {
+				have_ctags = false;
+			}
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			if (!check_ctags)
+				CheckForCtags ();
+			
+			ValaProject p = dataObject as ValaProject;
+			
+			if (p == null)
+				return;
+			
+			if (!have_ctags) {
+				label = string.Format ("{0} <span foreground='red' size='small'>(CTags not installed)</span>", p.Name);
+			}
+		}
+
+		
+		public override void BuildChildNodes (ITreeBuilder builder, object dataObject)
+		{			
+			ValaProject p = dataObject as ValaProject;
+			
+			if (p == null) return;
+			
+			bool nestedNamespaces = builder.Options["NestedNamespaces"];
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			// Namespaces
+			foreach (Namespace n in info.Namespaces) {
+				if (nestedNamespaces) {
+					if (n.Parent == null) {
+						builder.AddChild (n);
+					}
+				} else {
+					builder.AddChild (n);
+				}
+			}
+			
+//			// Globals
+//			builder.AddChild (info.Globals);
+//			
+//			// Macro Definitions
+//			builder.AddChild (info.MacroDefinitions);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		private void OnFinishedBuildingTree (ClassPadEventArgs e)
+		{
+			ITreeBuilder builder = Context.GetTreeBuilder (e.Project);
+			if (null != builder)
+				builder.UpdateChildren ();
+		}
+	}
+	
+	public class ProjectNodeBuilderExtensionHandler : NodeCommandHandler
+	{
+		[CommandHandler (ValaProjectCommands.UpdateClassPad)]
+		public void UpdateClassPad ()
+		{
+			ValaProject p = CurrentNode.DataItem as ValaProject;
+			
+			if (p == null) return;
+			
+			foreach (ProjectFile f in p.Files) {
+				if (f.BuildAction == BuildAction.Compile)
+					TagDatabaseManager.Instance.UpdateFileTags (p, f.Name);
+			}
+			foreach (ProjectPackage package in p.Packages) {
+				TagDatabaseManager.Instance.UpdateFileTags(p, package.File);
+			}
+		}
+	}
+}
diff --git a/Navigation/StructureNodeBuilder.cs b/Navigation/StructureNodeBuilder.cs
new file mode 100644
index 0000000..d806085
--- /dev/null
+++ b/Navigation/StructureNodeBuilder.cs
@@ -0,0 +1,146 @@
+//
+// StructureNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class StructureNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Structure); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Structure)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Structure s = (Structure)dataObject;
+				
+			label = s.Name;
+			
+			switch (s.Access)
+			{
+			case AccessModifier.Public:
+				icon = Context.GetIcon (Stock.Struct);
+				break;
+			case AccessModifier.Protected:
+				icon = Context.GetIcon (Stock.ProtectedStruct);
+				break;
+			case AccessModifier.Private:
+				icon = Context.GetIcon (Stock.PrivateStruct);
+				break;
+			}
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ValaProject p = treeBuilder.GetParentDataItem (typeof(ValaProject), false) as ValaProject;
+			
+			if (p == null) return;
+			
+			bool publicOnly = treeBuilder.Options["PublicApiOnly"];
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			Structure thisStruct = (Structure)dataObject;
+			
+			// Classes
+			foreach (Class c in info.Classes)
+				if (c.Parent != null && c.Parent.Equals (thisStruct) && (!publicOnly || c.Access == AccessModifier.Public))
+					treeBuilder.AddChild (c);
+			
+			// Structures
+			foreach (Structure s in info.Structures)
+				if (s.Parent != null && s.Parent.Equals (thisStruct) && (!publicOnly || s.Access == AccessModifier.Public))
+					treeBuilder.AddChild (s);
+			
+			// Unions
+			foreach (Union u in info.Unions)
+				if (u.Parent != null && u.Parent.Equals (thisStruct) && (!publicOnly || u.Access == AccessModifier.Public))
+					treeBuilder.AddChild (u);
+			
+			// Enumerations
+			foreach (Enumeration e in info.Enumerations)
+				if (e.Parent != null && e.Parent.Equals (thisStruct) && (!publicOnly || e.Access == AccessModifier.Public))
+					treeBuilder.AddChild (e);
+			
+			// Typedefs
+			foreach (Typedef t in info.Typedefs)
+				if (t.Parent != null && t.Parent.Equals (thisStruct) && (!publicOnly || t.Access == AccessModifier.Public))
+					treeBuilder.AddChild (t);
+			
+			// Functions
+			foreach (Function f in info.Functions)
+				if (f.Parent != null && f.Parent.Equals (thisStruct) && (!publicOnly || f.Access == AccessModifier.Public))
+					treeBuilder.AddChild (f);
+			
+			// Members
+			foreach (Member m in info.Members)
+				if (m.Parent != null && m.Parent.Equals (thisStruct) && (!publicOnly || m.Access == AccessModifier.Public))
+					treeBuilder.AddChild (m);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Class)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
diff --git a/Navigation/TypedefNodeBuilder.cs b/Navigation/TypedefNodeBuilder.cs
new file mode 100644
index 0000000..5fc9ff4
--- /dev/null
+++ b/Navigation/TypedefNodeBuilder.cs
@@ -0,0 +1,87 @@
+//
+// TypedefNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class TypedefNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Typedef); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Typedef)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Typedef t = (Typedef)dataObject;
+				
+			label = t.Name;
+			icon = Context.GetIcon (Stock.Interface);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return false;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Enumeration)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
diff --git a/Navigation/UnionNodeBuilder.cs b/Navigation/UnionNodeBuilder.cs
new file mode 100644
index 0000000..770441f
--- /dev/null
+++ b/Navigation/UnionNodeBuilder.cs
@@ -0,0 +1,146 @@
+//
+// UnionNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+using System.Reflection;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class UnionNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Union); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Union)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Union u = (Union)dataObject;
+				
+			label = u.Name;
+			
+			switch (u.Access)
+			{
+			case AccessModifier.Public:
+				icon = Context.GetIcon ("md-union");
+				break;
+			case AccessModifier.Protected:
+				icon = Context.GetIcon ("md-protected-union");
+				break;
+			case AccessModifier.Private:
+				icon = Context.GetIcon ("md-private-union");
+				break;
+			}
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ValaProject p = treeBuilder.GetParentDataItem (typeof(ValaProject), false) as ValaProject;
+			
+			if (p == null) return;
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (p);
+			
+			Union thisUnion = (Union)dataObject;
+			
+			// Classes
+			foreach (Class c in info.Classes)
+				if (c.Parent != null && c.Parent.Equals (thisUnion))
+					treeBuilder.AddChild (c);
+			
+			// Structures
+			foreach (Structure s in info.Structures)
+				if (s.Parent != null && s.Parent.Equals (thisUnion))
+					treeBuilder.AddChild (s);
+			
+			// Unions
+			foreach (Union u in info.Unions)
+				if (u.Parent != null && u.Parent.Equals (thisUnion))
+					treeBuilder.AddChild (u);
+			
+			// Enumerations
+			foreach (Enumeration e in info.Enumerations)
+				if (e.Parent != null && e.Parent.Equals (thisUnion))
+					treeBuilder.AddChild (e);
+			
+			// Typedefs
+			foreach (Typedef t in info.Typedefs)
+				if (t.Parent != null && t.Parent.Equals (thisUnion))
+					treeBuilder.AddChild (t);
+			
+			// Functions
+			foreach (Function f in info.Functions)
+				if (f.Parent != null && f.Parent.Equals (thisUnion))
+					treeBuilder.AddChild (f);
+			
+			// Members
+			foreach (Member m in info.Members)
+				if (m.Parent != null && m.Parent.Equals (thisUnion))
+					treeBuilder.AddChild (m);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return true;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Structure)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
diff --git a/Navigation/VariableNodeBuilder.cs b/Navigation/VariableNodeBuilder.cs
new file mode 100644
index 0000000..8afb78b
--- /dev/null
+++ b/Navigation/VariableNodeBuilder.cs
@@ -0,0 +1,99 @@
+//
+// VariableNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Components;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding.Navigation
+{
+	public class VariableNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(Variable); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(LanguageItemCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((Variable)dataObject).Name;
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			Variable v = (Variable)dataObject;
+				
+			label = v.Name;
+			
+			switch (v.Access)
+			{
+			case AccessModifier.Public:
+				icon = Context.GetIcon (Stock.Field);
+				break;
+			case AccessModifier.Protected:
+				icon = Context.GetIcon (Stock.ProtectedField);
+				break;
+			case AccessModifier.Private:
+				icon = Context.GetIcon (Stock.PrivateField);
+				break;
+			}
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return false;
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			if (otherNode.DataItem is Function)
+				return 1;
+			else
+				return -1;
+		}
+	}
+}
diff --git a/Parser/Class.cs b/Parser/Class.cs
new file mode 100644
index 0000000..c55e763
--- /dev/null
+++ b/Parser/Class.cs
@@ -0,0 +1,49 @@
+//
+// Class.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Class : LanguageItem
+	{		
+		public Class (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{			
+			if (GetNamespace (tag, ctags_output)) return;
+			if (GetClass (tag, ctags_output)) return;
+			if (GetStructure (tag, ctags_output)) return;
+			if (GetUnion (tag, ctags_output)) return;
+		}
+	}
+}
diff --git a/Parser/Enumeration.cs b/Parser/Enumeration.cs
new file mode 100644
index 0000000..c916ab4
--- /dev/null
+++ b/Parser/Enumeration.cs
@@ -0,0 +1,49 @@
+//
+// Enumeration.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Enumeration : LanguageItem
+	{
+		public Enumeration (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{
+			if (GetNamespace (tag, ctags_output)) return;
+			if (GetClass (tag, ctags_output)) return;
+			if (GetStructure (tag, ctags_output)) return;
+			if (GetUnion (tag, ctags_output)) return;
+		}
+	}
+}
diff --git a/Parser/Enumerator.cs b/Parser/Enumerator.cs
new file mode 100644
index 0000000..baeeb42
--- /dev/null
+++ b/Parser/Enumerator.cs
@@ -0,0 +1,46 @@
+//
+// Tag.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Enumerator : LanguageItem
+	{
+		public Enumerator (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{
+				GetEnumeration (tag, ctags_output);
+		}
+	}
+}
diff --git a/Parser/Function.cs b/Parser/Function.cs
new file mode 100644
index 0000000..6d550de
--- /dev/null
+++ b/Parser/Function.cs
@@ -0,0 +1,133 @@
+//
+// Function.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Function : LanguageItem
+	{
+		private string[] parameters;
+		private string signature;
+		private bool is_const = false;
+		
+		public Function (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{
+			signature = tag.Signature;
+			ParseSignature (tag.Signature);
+			
+			if (tag.Kind == TagKind.Prototype) {
+				Access = tag.Access;
+				if (GetNamespace (tag, ctags_output)) return;
+				if (GetClass (tag, ctags_output)) return;
+				if (GetStructure (tag, ctags_output)) return;
+				if (GetUnion (tag, ctags_output)) return;
+			} else {
+				// If it is not a prototype tag, we attempt to get the prototype tag
+				// we need the prototype tag because the implementation tag
+				// marks the belonging namespace as a if it were a class
+				// and it does not have the access field.
+				Tag prototypeTag = TagDatabaseManager.Instance.FindTag (Name, TagKind.Prototype, ctags_output);
+				
+				if (prototypeTag == null) {
+					// It does not have a prototype tag which means it is inline
+					// and when it is inline it does have all the info we need
+					
+					if (GetNamespace (tag, ctags_output)) return;
+					if (GetClass (tag, ctags_output)) return;
+					if (GetStructure (tag, ctags_output)) return;
+					if (GetUnion (tag, ctags_output)) return;
+					
+					return;
+				}
+				
+				// we need to re-get the access
+				Access = prototypeTag.Access;
+				
+				if (GetNamespace (prototypeTag, ctags_output)) return;
+				if (GetClass (prototypeTag, ctags_output)) return;
+				if (GetStructure (prototypeTag, ctags_output)) return;
+				if (GetUnion (prototypeTag, ctags_output)) return;
+			}
+		}
+		
+		private void ParseSignature (string signature)
+		{
+			if (null == signature) return;
+			
+			string sig = signature;
+			
+			if (signature.EndsWith ("const")) {
+				is_const = true;
+				sig = signature.Substring (0, signature.Length - 6);
+				sig = sig.Substring (1, sig.Length - 2);
+			} else {
+				sig = signature.Substring (1, signature.Length - 2);
+			}
+			
+			parameters = sig.Split (',');
+			
+			for (int i = 0; i < parameters.Length; i++)
+				parameters[i] = parameters[i].Trim ();
+		}
+		
+		public string[] Parameters {
+			get { return parameters; }
+		}
+		
+		public string Signature {
+			get { return signature; }
+		}
+		
+		public bool IsConst {
+			get { return is_const; }
+		}
+		
+		public override bool Equals (object o)
+		{
+			Function other = o as Function;
+			
+			return (other != null &&
+			    FullName == other.FullName &&
+			    LanguageItem.Equals(Parent, other.Parent) &&
+			    Project.Equals(other.Project) &&
+				Signature == other.Signature);
+		}
+		
+		public override int GetHashCode ()
+		{
+			return base.GetHashCode () + parameters.GetHashCode ();
+		}
+	}
+}
diff --git a/Parser/LanguageItem.cs b/Parser/LanguageItem.cs
new file mode 100644
index 0000000..caa2e49
--- /dev/null
+++ b/Parser/LanguageItem.cs
@@ -0,0 +1,255 @@
+//
+// LanguageItem.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class LanguageItem
+	{
+		private Project project;
+		private string name;
+		private string file;
+		private string pattern;
+		private AccessModifier access;
+		private LanguageItem parent;
+		
+		public LanguageItem (Tag tag, Project project)
+		{
+			this.project = project;
+			this.name = tag.Name;
+			this.file = tag.File;
+			this.pattern = tag.Pattern;
+			this.access = tag.Access;
+		}
+		
+		/// <summary>
+		/// Attempts to get the namespace encompassing the function
+		/// <remarks>
+		/// If it's a method then, even if the class it belongs to
+		/// has a namespace, the method will not have a namespace, since
+		/// it should be placed under the class node and not the namespace node
+		/// </remarks>
+		/// <returns>true on success and false if it does not have one.</returns>
+		/// </summary>
+		protected bool GetNamespace (Tag tag, string ctags_output)
+		{
+			string n;
+			
+			if ((n = tag.Namespace) != null) {
+				int index = n.LastIndexOf (':');
+				
+				if (index > 0)
+					n = n.Substring (index + 1);
+				
+				try {
+					Tag namespaceTag = TagDatabaseManager.Instance.FindTag (
+					    n, TagKind.Namespace, ctags_output);
+					
+					if (namespaceTag != null)
+						parent = new Namespace (namespaceTag, project, ctags_output);
+					
+				} catch (IOException ex) {
+					MessageService.ShowException (ex);
+				}
+				
+				return true;
+			}
+			
+			return false;
+		}
+		
+		protected bool GetClass (Tag tag, string ctags_output)
+		{
+			string c;
+			
+			if ((c = tag.Class) != null) {
+				int index = c.LastIndexOf (':');
+				
+				if (index > 0)
+					c = c.Substring (index + 1);
+				
+				try {
+					Tag classTag = TagDatabaseManager.Instance.FindTag (
+					    c, TagKind.Class, ctags_output);
+					
+					if (classTag != null)
+						parent = new Class (classTag, project, ctags_output);
+					
+				} catch (IOException ex) {
+					MessageService.ShowException (ex);
+				}
+				
+				return true;
+			}
+			
+			return false;
+		}
+		
+		protected bool GetStructure (Tag tag, string ctags_output)
+		{
+			string s;
+			
+			if ((s = tag.Structure) != null) {
+				int index = s.LastIndexOf (':');
+				
+				if (index > 0)
+					s = s.Substring (index + 1);
+				
+				try {
+					Tag classTag = TagDatabaseManager.Instance.FindTag (
+					    s, TagKind.Structure, ctags_output);
+					
+					if (classTag != null)
+						parent = new Structure (classTag, project, ctags_output);
+					
+				} catch (IOException ex) {
+					MessageService.ShowException (ex);
+				}
+				
+				return true;
+			}
+			
+			return false;
+		}
+		
+		protected bool GetEnumeration (Tag tag, string ctags_output)
+		{
+			string e;
+			
+			if ((e = tag.Enum) != null) {
+				int index = e.LastIndexOf (':');
+				
+				if (index > 0)
+					e = e.Substring (index + 1);
+				
+				try {
+					Tag enumTag = TagDatabaseManager.Instance.FindTag (
+					    e, TagKind.Enumeration, ctags_output);
+					
+					if (enumTag != null)
+						parent = new Enumeration (enumTag, project, ctags_output);
+					
+				} catch (IOException ex) {
+					MessageService.ShowException (ex);
+				}
+				
+				return true;
+			}
+			
+			return false;
+		}
+		
+		protected bool GetUnion (Tag tag, string ctags_output)
+		{
+			string u;
+			
+			if ((u = tag.Union) != null) {
+				int index = u.LastIndexOf (':');
+				
+				if (index > 0)
+					u = u.Substring (index + 1);
+				
+				try {
+					Tag unionTag = TagDatabaseManager.Instance.FindTag (
+					    u, TagKind.Union, ctags_output);
+					
+					if (unionTag != null)
+						parent = new Union (unionTag, project, ctags_output);
+					
+				} catch (IOException ex) {
+					MessageService.ShowException (ex);
+				}
+				
+				return true;
+			}
+			
+			return false;
+		}
+		
+		public Project Project {
+			get { return project; }
+		}
+		
+		public LanguageItem Parent {
+			get { return parent; }
+			set { parent = value; }
+		}
+		
+		public string Name {
+			get { return name; }
+		}
+		
+		public string FullName {
+			get {
+				if (Parent != null)
+					return Parent.FullName + "." + Name;
+				return Name;
+			}
+		}
+		
+		public string File {
+			get { return file; }
+		}
+		
+		public string Pattern {
+			get { return pattern; }
+		}
+		
+		public AccessModifier Access {
+			get { return access; }
+			set { access = value; }
+		}
+		
+		public override bool Equals (object o)
+		{
+			LanguageItem other = o as LanguageItem;
+			
+			if (other != null &&
+			    other.FullName.Equals (FullName) &&
+			    other.Project.Equals (project))
+				return true;
+			
+			return false;
+		}
+		
+		public override int GetHashCode ()
+		{
+			return (name + file + pattern + project.Name).GetHashCode ();
+		}
+	}
+}
diff --git a/Parser/Local.cs b/Parser/Local.cs
new file mode 100644
index 0000000..3b3aa6b
--- /dev/null
+++ b/Parser/Local.cs
@@ -0,0 +1,48 @@
+//
+// Local.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	/// <summary>
+	/// Class for local variables
+	/// </summary>
+	public class Local : Member
+	{
+		public Local (Tag tag, Project project, string ctags_output) : base (tag, project, ctags_output)
+		{
+		}
+	}
+}
diff --git a/Parser/Macro.cs b/Parser/Macro.cs
new file mode 100644
index 0000000..750f78a
--- /dev/null
+++ b/Parser/Macro.cs
@@ -0,0 +1,45 @@
+//
+// Macro.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Macro : LanguageItem
+	{
+		public Macro (Tag tag, Project project) : base (tag, project)
+		{
+		}
+	}
+}
diff --git a/Parser/Member.cs b/Parser/Member.cs
new file mode 100644
index 0000000..6f8ee13
--- /dev/null
+++ b/Parser/Member.cs
@@ -0,0 +1,96 @@
+//
+// Member.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.Text.RegularExpressions;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Member : LanguageItem
+	{
+		public string InstanceType {
+			get{ return instanceType; }
+		}
+		protected string instanceType;
+		
+		public bool IsPointer {
+			get{ return isPointer; }
+		}
+		protected bool isPointer;
+		
+
+		public Member (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{
+			GetInstanceType(tag);
+			
+			if (GetClass (tag, ctags_output)) return;
+			if (GetStructure (tag, ctags_output)) return;
+			if (GetUnion (tag, ctags_output)) return;
+		}
+        
+		/// <summary>
+		/// Regex for deriving the type of a variable, 
+		/// and whether it's a pointer, 
+		/// from an expression, e.g. 
+		/// static Foo.bar<string> *blah = NULL;
+		/// </summary>
+		public static Regex InstanceTypeExpression = new Regex (
+		  @"^\s*((public|private|protected|construct|static|friend|const|mutable|extern|struct|union|\w*\.|<[\w><:]*>)\s*)*(?<type>\w[\w\d]*)\s*(<.*>)?\s*(?<pointer>[*])?", 
+		  RegexOptions.Compiled);
+		
+		/// <summary>
+		/// Populates an instance's instanceType and isPointer fields 
+		/// by matching its pattern against InstanceTypeExpression
+		/// </summary>
+		/// <param name="tag">
+		/// The partially-populated tag of an instance
+		/// <see cref="Tag"/>
+		/// </param>
+		/// <returns>
+		/// Whether the regex was successfully matched
+		/// <see cref="System.Boolean"/>
+		/// </returns>
+		protected bool GetInstanceType (Tag tag) {
+			Match m = InstanceTypeExpression.Match (tag.Pattern);
+			
+			if (null == m)
+				return false;
+			
+			instanceType = m.Groups["type"].Value;
+			isPointer = m.Groups["pointer"].Success;
+			
+			return true;
+		}
+	}
+}
diff --git a/Parser/Namespace.cs b/Parser/Namespace.cs
new file mode 100644
index 0000000..da9c2cb
--- /dev/null
+++ b/Parser/Namespace.cs
@@ -0,0 +1,46 @@
+//
+// Namespace.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Namespace : LanguageItem
+	{	
+		public Namespace (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{			
+			GetNamespace (tag, ctags_output);
+		}
+	}
+}
diff --git a/Parser/ProjectInformation.cs b/Parser/ProjectInformation.cs
new file mode 100644
index 0000000..461551d
--- /dev/null
+++ b/Parser/ProjectInformation.cs
@@ -0,0 +1,254 @@
+//
+// ProjectInformation.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.Collections.Generic;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class FileInformation
+	{
+		protected Project project;
+		
+		protected List<Namespace> namespaces = new List<Namespace> ();
+		protected List<Function> functions = new List<Function> ();
+		protected List<Class> classes = new List<Class> ();
+		protected List<Structure> structures = new List<Structure> ();
+		protected List<Member> members = new List<Member> ();
+		protected List<Variable> variables = new List<Variable> ();
+		protected List<Macro> macros = new List<Macro> ();
+		protected List<Enumeration> enumerations = new List<Enumeration> ();
+		protected List<Enumerator> enumerators = new List<Enumerator> ();
+		protected List<Union> unions = new List<Union> ();
+		protected List<Typedef> typedefs = new List<Typedef> ();
+		protected List<Local> locals = new List<Local> ();
+		
+		private string file_name;
+		private bool is_filled = false;
+		
+		public FileInformation (Project project)
+		{
+			this.project = project;
+			this.file_name = null;
+		}
+		
+		public FileInformation (Project project, string filename)
+		{
+			this.project = project;
+			this.file_name = filename;
+		}
+		
+		public void Clear ()
+		{
+			namespaces.Clear ();
+			functions.Clear ();
+			classes.Clear ();
+			structures.Clear ();
+			members.Clear ();
+			variables.Clear ();
+			macros.Clear ();
+			enumerations.Clear ();
+			enumerators.Clear ();
+			unions.Clear ();
+			typedefs.Clear ();
+			locals.Clear ();
+		}
+		
+		public void RemoveFileInfo(string filename)
+		{
+			namespaces.RemoveAll(delegate(Namespace item){ return item.File == filename; });
+			functions.RemoveAll(delegate(Function item){ return item.File == filename; });
+			classes.RemoveAll(delegate(Class item){ return item.File == filename; });
+			structures.RemoveAll(delegate(Structure item){ return item.File == filename; });
+			members.RemoveAll(delegate(Member item){ return item.File == filename; });
+			variables.RemoveAll(delegate(Variable item){ return item.File == filename; });
+			macros.RemoveAll(delegate(Macro item){ return item.File == filename; });
+			enumerations.RemoveAll(delegate(Enumeration item){ return item.File == filename; });
+			enumerators.RemoveAll(delegate(Enumerator item){ return item.File == filename; });
+			unions.RemoveAll(delegate(Union item){ return item.File == filename; });
+			typedefs.RemoveAll(delegate(Typedef item){ return item.File == filename; });
+			locals.RemoveAll(delegate(Local item){ return item.File == filename; });
+		}
+		
+		public IEnumerable<LanguageItem> Containers ()
+		{
+			foreach (Namespace n in namespaces)
+				yield return n;
+			
+			foreach (Class c in classes)
+				yield return c;
+			
+			foreach (Structure s in structures)
+				yield return s;
+			
+			foreach (Enumeration e in enumerations)
+				yield return e;
+			
+			foreach (Union u in unions)
+				yield return u;
+		}
+		
+		// All items except macros
+		public IEnumerable<LanguageItem> AllItems ()
+		{
+			foreach (Namespace n in namespaces)
+				yield return n;
+			
+			foreach (Class c in classes)
+				yield return c;
+			
+			foreach (Structure s in structures)
+				yield return s;
+			
+			foreach (Enumeration e in enumerations)
+				yield return e;
+			
+			foreach (Union u in unions)
+				yield return u;
+			
+			foreach (Function f in functions)
+				yield return f;
+			
+			foreach (Member m in members)
+				yield return m;
+			
+			foreach (Variable v in variables)
+				yield return v;
+			
+			foreach (Enumerator e in enumerators)
+				yield return e;
+			
+			foreach (Typedef t in typedefs)
+				yield return t;
+		}
+		
+		// Functions, fields
+		public IEnumerable<LanguageItem> InstanceMembers ()
+		{
+			foreach (Function f in functions)
+				yield return f;
+			
+			foreach (Member m in members)
+				yield return m;
+		}
+		
+		public Project Project {
+			get { return project; }
+		}
+		
+		public List<Namespace> Namespaces {
+			get { return namespaces; }
+		}
+		
+		public List<Function> Functions {
+			get { return functions; }
+		}
+		
+		public List<Class> Classes {
+			get { return classes; }
+		}
+		
+		public List<Structure> Structures {
+			get { return structures; }
+		}
+		
+		public List<Member> Members {
+			get { return members; }
+		}
+		
+		public List<Variable> Variables {
+			get { return variables; }
+		}
+		
+		public List<Macro> Macros {
+			get { return macros; }
+		}
+		
+		public List<Enumeration> Enumerations {
+			get { return enumerations; }
+		}
+		
+		public List<Enumerator> Enumerators {
+			get { return enumerators; }
+		}
+		
+		public List<Union> Unions {
+			get { return unions; } 
+		}
+		
+		public List<Typedef> Typedefs {
+			get { return typedefs; }
+		}
+		
+		public List<Local> Locals {
+			get { return locals; }
+		}
+		
+		public string FileName {
+			get { return file_name; }
+			set { file_name = value; }
+		}
+		
+		public bool IsFilled {
+			get { return is_filled; }
+			set { is_filled = value; }
+		}
+	}
+	
+	public class ProjectInformation : FileInformation
+	{
+//		private Globals globals;
+//		private MacroDefinitions macroDefs;
+		
+		private Dictionary<string, List<FileInformation>> includedFiles = new Dictionary<string, List<FileInformation>> ();
+		
+		public ProjectInformation (Project project) : base (project)
+		{
+//			globals = new Globals (project);
+//			macroDefs = new MacroDefinitions (project);
+		}
+		
+//		public Globals Globals {
+//			get { return globals; }
+//		}
+//		
+//		public MacroDefinitions MacroDefinitions {
+//			get { return macroDefs; }
+//		}
+		
+		public Dictionary<string, List<FileInformation>> IncludedFiles {
+			get { return includedFiles; }
+		}
+	}
+}
diff --git a/Parser/ProjectInformationManager.cs b/Parser/ProjectInformationManager.cs
new file mode 100644
index 0000000..a14cfa4
--- /dev/null
+++ b/Parser/ProjectInformationManager.cs
@@ -0,0 +1,75 @@
+//
+// ProjectInformationManager.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.Collections.Generic;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	/// <summary>
+	/// Singleton class to manage the navigation information of each project
+	/// </summary>
+	public class ProjectInformationManager
+	{
+		private static ProjectInformationManager instance;
+		private List<ProjectInformation> projects = new List<ProjectInformation> ();
+		
+		private ProjectInformationManager ()
+		{
+		}
+		
+		public ProjectInformation Get (Project project)
+		{
+			foreach (ProjectInformation p in projects) {
+				if (project.Equals (p.Project)) {
+					return p;
+				}
+			}
+			
+			ProjectInformation newinfo = new ProjectInformation (project);
+			projects.Add (newinfo);
+			
+			return newinfo;
+		}
+		
+		public static ProjectInformationManager Instance {
+			get {
+				if (instance == null)
+					instance = new ProjectInformationManager ();
+				
+				return instance;
+			}
+		}
+	}
+}
diff --git a/Parser/Structure.cs b/Parser/Structure.cs
new file mode 100644
index 0000000..e2b0e8d
--- /dev/null
+++ b/Parser/Structure.cs
@@ -0,0 +1,49 @@
+//
+// Structure.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Structure : LanguageItem
+	{
+		public Structure (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{
+			if (GetNamespace (tag, ctags_output)) return;
+			if (GetClass (tag, ctags_output)) return;
+			if (GetStructure (tag, ctags_output)) return;
+			if (GetUnion (tag, ctags_output)) return;
+		}
+	}
+}
diff --git a/Parser/Tag.cs b/Parser/Tag.cs
new file mode 100644
index 0000000..e83b549
--- /dev/null
+++ b/Parser/Tag.cs
@@ -0,0 +1,145 @@
+//
+// Tag.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public enum TagKind {
+		Class = 'c',
+		Macro = 'd',
+		Enumerator = 'e',
+		Function = 'm',
+		Enumeration = 'g',
+		Local = 'l',
+		Member = 'f',
+		Namespace = 'n',
+		Prototype = 'm',
+		Structure = 's',
+		Typedef = 't',
+		Union = 'u',
+		Variable = 'v',
+		ExternalVariable = 'x',
+		Unknown = ' '
+	}
+	
+	public enum AccessModifier {
+		Private,
+		Protected,
+		Public
+	}
+	
+	public class Tag
+	{
+		private string name;
+		private string file;
+		private string pattern;
+		private TagKind kind;
+		private AccessModifier access;
+		private string field_class;
+		private string field_namespace;
+		private string field_struct;
+		private string field_union;
+		private string field_enum;
+		private string field_signature;
+		
+		public Tag (string name,
+		            string file,
+		            string pattern,
+		            TagKind kind,
+		            AccessModifier access,
+		            string field_class,
+		            string field_namespace,
+		            string field_struct,
+		            string field_union,
+		            string field_enum,
+		            string field_signature)
+		{
+			this.name = name;
+			this.file = file;
+			this.pattern = pattern;	
+			this.kind = kind;
+			this.access = access;
+			this.field_class = field_class;
+			this.field_namespace = field_namespace;
+			this.field_struct = field_struct;
+			this.field_union = field_union;
+			this.field_enum = field_enum;
+			this.field_signature = field_signature;
+		}
+		
+		public string Name {
+			get { return name; }
+		}
+		
+		public string File {
+			get { return file; }
+		}
+
+		public string Pattern {
+			get { return pattern; }
+		}
+		
+		public TagKind Kind {
+			get { return kind; }
+		}
+		
+		public AccessModifier Access {
+			get { return access; }
+		}
+		
+		public string Class {
+			get { return field_class; }
+		}
+		
+		public string Namespace {
+			get { return field_namespace; }
+		}
+		
+		public string Structure {
+			get { return field_struct; }
+		}
+		
+		public string Union {
+			get { return field_union; }
+		}
+		
+		public string Enum {
+			get { return field_enum; }
+		}
+		
+		public string Signature {
+			get { return field_signature; }
+		}
+	}
+}
diff --git a/Parser/TagDatabaseManager.cs b/Parser/TagDatabaseManager.cs
new file mode 100644
index 0000000..3a8a4cd
--- /dev/null
+++ b/Parser/TagDatabaseManager.cs
@@ -0,0 +1,726 @@
+//
+// TagDatabaseManager.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Text;
+using System.Collections.Generic;
+using System.Threading;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Core;
+using MonoDevelop.Core.Execution;
+using MonoDevelop.Ide.Gui;
+
+using MonoDevelop.ValaBinding.Navigation;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	/// <summary>
+	/// Singleton class to manage tag databases
+	/// </summary>
+	class TagDatabaseManager
+	{
+		private static TagDatabaseManager instance;
+		private Queue<ProjectFilePair> parsingJobs = new Queue<ProjectFilePair> ();
+		private Thread parsingThread;
+		
+		public event ClassPadEventHandler FileUpdated;
+		
+		bool ctagsInstalled = false;
+		bool checkedCtagsInstalled = false;
+		
+		private TagDatabaseManager()
+		{
+		}
+		
+		public static TagDatabaseManager Instance
+		{
+			get {
+				if (instance == null)
+					instance = new TagDatabaseManager ();
+				
+				return instance;
+			}
+		}
+		
+		bool DepsInstalled {
+			get {
+				if (!checkedCtagsInstalled) {
+					checkedCtagsInstalled = true;
+					if (IdeApp.Services.PlatformService.Name.Equals ("OSX")) {
+						return false;
+					}
+					try {
+						Runtime.ProcessService.StartProcess ("ctags", "--version", null, null).WaitForOutput ();
+					} catch {
+						LoggingService.LogWarning ("Cannot update Vala tags database because exuberant ctags is not installed.");
+						return false;
+					}
+					lock (parsingJobs) {
+						ctagsInstalled = true;
+					}
+				}
+				return ctagsInstalled;
+			}
+			set {
+				//don't assume that the caller is correct :-)
+				if (value)
+					checkedCtagsInstalled = false; //will re-determine ctagsInstalled on next getting
+				else
+					ctagsInstalled = false;
+			}
+		}
+		
+//		private string[] Headers (Project project, string filename, bool with_system)
+//		{
+//			string option = (with_system ? "-M" : "-MM");
+//			ProcessWrapper p;
+//			try {
+//				p = Runtime.ProcessService.StartProcess ("gcc", option + " -MG " + filename, null, null);
+//				p.WaitForExit ();
+//			} catch (Exception ex) {
+//				LoggingService.LogError (ex.ToString ());
+//				return new string [0];
+//			}
+//			
+//			StringBuilder output = new StringBuilder ();
+//			string line;
+//			
+//			while ((line = p.StandardOutput.ReadLine ()) != null)
+//				output.Append (line);
+//			
+//			p.Close ();
+//			
+//			string[] lines = output.ToString ().Split ('\\');
+//			List<string> headers = new List<string> ();
+//			
+//			for (int i = 0; i < lines.Length; i++) {
+//				string[] files = lines[i].Split (' ');
+//				// first line contains the rule (eg. file.o: dep1.c dep2.h ...) and we must skip it
+//				// and we skip the *.cpp or *.c etc. too
+//				for (int j = 0; j < files.Length; j++) {
+//					if (j == 0 || j == 1) continue;
+//					
+//					string depfile = files[j].Trim ();
+//					
+//					if (!string.IsNullOrEmpty (depfile))
+//						headers.Add (findFileInIncludes (project, depfile));
+//				}
+//			}
+//			
+//			return headers.ToArray ();
+//		}
+		
+		/// <summary>
+		/// Finds a file in a project's vapi include path(s)
+		/// </summary>
+		/// <param name="project">
+		/// The project whose include path is to be searched
+		/// <see cref="Project"/>
+		/// </param>
+		/// <param name="filename">
+		/// A portion of a full file path
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// The full found path, or filename if not found
+		/// <see cref="System.String"/>
+		/// </returns>
+		private static string findFileInIncludes (Project project, string filename) {
+			ValaProjectConfiguration conf = project.DefaultConfiguration as ValaProjectConfiguration;
+			string fullpath = string.Empty;
+			
+			if (!Path.IsPathRooted (filename)) {
+				foreach (string p in conf.Includes) {
+					fullpath = findFileInPath (filename, p);
+					if (string.Empty != fullpath) return fullpath;
+				}
+			}
+			
+			return filename;
+		}
+		
+		/// <summary>
+		/// Finds a file in a subdirectory of a given path
+		/// </summary>
+		/// <param name="relativeFilename">
+		/// A portion of a full file path
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <param name="path">
+		/// The path beneath which to look for relativeFilename
+		/// <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// The full path, or string.Empty if not found
+		/// <see cref="System.String"/>
+		/// </returns>
+		private static string findFileInPath (string relativeFilename, string path) {
+			string tmp = Path.Combine (path, relativeFilename);
+			
+			if (Path.IsPathRooted (relativeFilename))
+				return relativeFilename;
+			else if (File.Exists (tmp))
+				return tmp;
+			
+			if (Directory.Exists (path)) {
+				foreach (string subdir in Directory.GetDirectories (path)) {
+					tmp = findFileInPath (relativeFilename, subdir);
+					if (string.Empty != tmp) return tmp;
+				}
+			}
+			
+			return string.Empty;
+		}
+		
+		private void UpdateSystemTags (Project project, string filename, string[] includedFiles)
+		{
+			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
+			List<FileInformation> files;
+			
+			if (!info.IncludedFiles.ContainsKey (filename)) {
+				files = new List<FileInformation> ();
+				info.IncludedFiles.Add (filename, files);
+			} else {
+				files = info.IncludedFiles[filename];
+			}
+			
+			foreach (string includedFile in includedFiles) {
+				bool contains = false;
+				
+				foreach (FileInformation fi in files) {
+					if (fi.FileName == includedFile) {
+						contains = true;
+					}
+				}
+				
+				if (!contains) {
+					FileInformation newFileInfo = new FileInformation (project, includedFile);
+					files.Add (newFileInfo);
+					FillFileInformation (newFileInfo);
+				}
+				
+				contains = false;
+			}
+		}
+		
+		private void FillFileInformation (FileInformation fileInfo)
+		{
+			if (!DepsInstalled)
+				return;
+			
+			string confdir = PropertyService.ConfigPath;
+			string tagFileName = Path.GetFileName (fileInfo.FileName) + ".tag";
+			string tagdir = Path.Combine (confdir, "system-tags");
+			string tagFullFileName = Path.Combine (tagdir, tagFileName);
+			string ctags_options = "'--C#-kinds=+l' --fields=+a-f+S '--language-force=C#' --excmd=pattern -f '" + tagFullFileName + "' " + fileInfo.FileName;
+			
+			if (!Directory.Exists (tagdir))
+				Directory.CreateDirectory (tagdir);
+			
+			if (!File.Exists (tagFullFileName) || File.GetLastWriteTimeUtc (tagFullFileName) < File.GetLastWriteTimeUtc (fileInfo.FileName)) {
+				ProcessWrapper p = null;
+				System.IO.StringWriter output = null;
+				try {
+					output = new System.IO.StringWriter ();
+					
+					p = Runtime.ProcessService.StartProcess ("ctags", ctags_options, null, output, output, null);
+					p.WaitForOutput (10000);
+					if (p.ExitCode != 0 || !File.Exists (tagFullFileName)) {
+						LoggingService.LogError ("Ctags did not successfully populate the tags database '{0}' from '{1}' within ten seconds.\nOutput: {2}", tagFullFileName, output.ToString ());
+						return;
+					}
+				} catch (Exception ex) {
+					throw new IOException ("Could not create tags database (You must have exuberant ctags installed).", ex);
+				} finally {
+					if (output != null)
+						output.Dispose ();
+					if (p != null)
+						p.Dispose ();
+				}
+			}
+			
+			string ctags_output;
+			string tagEntry;
+			
+			using (StreamReader reader = new StreamReader (tagFullFileName)) {
+				ctags_output = reader.ReadToEnd ();
+			}
+			
+			using (StringReader reader = new StringReader (ctags_output)) {
+				while ((tagEntry = reader.ReadLine ()) != null) {
+					if (tagEntry.StartsWith ("!_")) continue;
+					
+					Tag tag = ParseTag (tagEntry);
+					
+					if (tag != null)
+						AddInfo (fileInfo, tag, ctags_output);
+				}
+			}
+			
+			fileInfo.IsFilled = true;
+		}
+		
+		private void ParsingThread ()
+		{
+			try {
+				while (parsingJobs.Count > 0) {
+					ProjectFilePair p;
+					
+					lock (parsingJobs) {
+						p = parsingJobs.Dequeue ();
+					}
+					
+					DoUpdateFileTags (p.Project, p.File);
+				}
+			} catch (Exception ex) {
+				LoggingService.LogError ("Unhandled error updating parser database. Disabling Vala parsing.", ex);
+				DepsInstalled = false;
+				return;
+			}
+		}
+		
+		public void UpdateFileTags (Project project, string filename)
+		{
+			if (!DepsInstalled)
+				return;
+			
+			ProjectFilePair p = new ProjectFilePair (project, filename);
+			
+			lock (parsingJobs) {
+				if (!parsingJobs.Contains (p))
+					parsingJobs.Enqueue (p);
+			}
+			
+			if (parsingThread == null || !parsingThread.IsAlive) {
+				parsingThread = new Thread (ParsingThread);
+				parsingThread.IsBackground = true;
+				parsingThread.Start();
+			}
+		}
+		
+		private void DoUpdateFileTags (Project project, string filename)
+		{
+			if (!DepsInstalled)
+				return;
+
+			//string[] headers = Headers (project, filename, false);
+			string ctags_options = "'--C#-kinds=+l' --fields=+a-f+S '--language-force=C#' --excmd=pattern -f - " + filename; // + " " + string.Join (" ", headers);
+			
+			//string[] system_headers = diff (Headers (project, filename, true), headers);
+			
+			ProcessWrapper p = null;
+			System.IO.StringWriter output = null, error = null;
+			string ctags_output = string.Empty;
+			try {
+				output = new System.IO.StringWriter ();
+				error = new System.IO.StringWriter ();
+				p = Runtime.ProcessService.StartProcess ("ctags", ctags_options, null, output, error, null);
+				p.WaitForOutput (10000);
+				if (p.ExitCode != 0) {
+					LoggingService.LogError ("Ctags did not successfully populate the tags database from '{0}' within ten seconds.\nError output: {1}", filename, error.ToString ());
+					return;
+				}
+				ctags_output = output.ToString ();
+                // System.Console.WriteLine(ctags_output);
+			} catch (Exception ex) {
+				throw new IOException ("Could not create tags database (You must have exuberant ctags installed).", ex);
+			} finally {
+				if (output != null)
+					output.Dispose ();
+				if (error != null)
+					error.Dispose ();
+				if (p != null)
+					p.Dispose ();
+			}
+			
+			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
+			string tagEntry;
+
+			using (StringReader reader = new StringReader (ctags_output)) {
+				while ((tagEntry = reader.ReadLine ()) != null) {
+					if (tagEntry.StartsWith ("!_")) continue;
+					
+					Tag tag = ParseTag (tagEntry);
+					
+					if (tag != null)
+						AddInfo (info, tag, ctags_output);
+				}
+			}			
+			
+//			if (FileUpdated != null)
+//				FileUpdated (new ClassPadEventArgs (project));
+			
+			if (PropertyService.Get<bool> ("ValaBinding.ParseSystemTags", true))
+				UpdateSystemTags (project, filename, new string[0]);
+			
+			if (cache.Count > cache_size)
+				cache.Clear ();
+		}
+		
+		private void AddInfo (FileInformation info, Tag tag, string ctags_output)
+		{
+			switch (tag.Kind)
+			{
+			case TagKind.Class:
+				Class c = new Class (tag, info.Project, ctags_output);
+				if (!info.Classes.Contains (c))
+					info.Classes.Add (c);
+				break;
+			case TagKind.Enumeration:
+				Enumeration e = new Enumeration (tag, info.Project, ctags_output);
+				if (!info.Enumerations.Contains (e))
+					info.Enumerations.Add (e);
+				break;
+			case TagKind.Enumerator:
+				Enumerator en= new Enumerator (tag, info.Project, ctags_output);
+				if (!info.Enumerators.Contains (en))
+					info.Enumerators.Add (en);
+				break;
+			case TagKind.ExternalVariable:
+				break;
+			case TagKind.Function:
+				Function f = new Function (tag, info.Project, ctags_output);
+				if (!info.Functions.Contains (f))
+					info.Functions.Add (f);
+				break;
+			case TagKind.Local:
+				Local lo = new Local(tag, info.Project, ctags_output);
+				if (!info.Locals.Contains (lo))
+					info.Locals.Add (lo);
+				break;
+			case TagKind.Macro:
+				Macro m = new Macro (tag, info.Project);
+				if (!info.Macros.Contains (m))
+					info.Macros.Add (m);
+				break;
+			case TagKind.Member:
+				Member me = new Member (tag, info.Project, ctags_output);
+				if (!info.Members.Contains (me))
+					info.Members.Add (me);
+				break;
+			case TagKind.Namespace:
+				Namespace n = new Namespace (tag, info.Project, ctags_output);
+				if (!info.Namespaces.Contains (n))
+					info.Namespaces.Add (n);
+				break;
+//			case TagKind.Prototype:
+//				Function fu = new Function (tag, info.Project, ctags_output);
+//				if (!info.Functions.Contains (fu))
+//					info.Functions.Add (fu);
+//				break;
+			case TagKind.Structure:
+				Structure s = new Structure (tag, info.Project, ctags_output);
+				if (!info.Structures.Contains (s))
+					info.Structures.Add (s);
+				break;
+			case TagKind.Typedef:
+				Typedef t = new Typedef (tag, info.Project, ctags_output);
+				if (!info.Typedefs.Contains (t))
+					info.Typedefs.Add (t);
+				break;
+			case TagKind.Union:
+				Union u = new Union (tag, info.Project, ctags_output);
+				if (!info.Unions.Contains (u))
+					info.Unions.Add (u);
+				break;
+			case TagKind.Variable:
+				Variable v = new Variable (tag, info.Project);
+				if (!info.Variables.Contains (v))
+					info.Variables.Add (v);
+				break;
+			default:
+				break;
+			}
+		}
+		
+		private Tag ParseTag (string tagEntry)
+		{
+			int i1, i2;
+			string file;
+			string pattern;
+			string name;
+			string tagField;
+			TagKind kind;
+			AccessModifier access = AccessModifier.Public;
+			string _class = null;
+			string _namespace = null;
+			string _struct = null;
+			string _union = null;
+			string _enum = null;
+			string signature = null;
+			char delimiter;
+			
+			name = tagEntry.Substring (0, tagEntry.IndexOf ('\t'));
+			
+			i1 = tagEntry.IndexOf ('\t') + 1;
+			i2 = tagEntry.IndexOf ('\t', i1);
+			
+			file = tagEntry.Substring (i1, i2 - i1);
+			
+			delimiter = tagEntry[i2 + 1];
+			
+			i1 = i2 + 2;
+			i2 = tagEntry.IndexOf (delimiter, i1) - 1;
+			
+			// apparentlty sometimes ctags will create faulty tags, make sure this is not one of them
+			if (i2 < 0 || i1 < 0)
+				return null;
+			
+			pattern = tagEntry.Substring (i1 + 1, i2 - i1 - 1);
+			
+			tagField = tagEntry.Substring (i2 + 5);
+			
+			// parse tag field
+			kind = (TagKind)tagField[0];
+			
+			string[] fields = tagField.Split ('\t');
+			int index;
+			
+			foreach (string field in fields) {
+				index = field.IndexOf (':');
+				
+				// TODO: Support friend modifier
+				if (index > 0) {
+					string key = field.Substring (0, index);
+					string val = field.Substring (index + 1);
+					
+					switch (key) {
+					case "access":
+						try {
+							access = (AccessModifier)System.Enum.Parse (typeof(AccessModifier), val, true);
+						} catch (ArgumentException) {
+						}
+						break;
+					case "class":
+						int dotindex = val.LastIndexOf(".");
+						
+						if(0 < dotindex) {
+//							_namespace = val.Substring(0, dotindex);
+							_class = val.Substring(dotindex + 1);
+						} else {
+							_class = val;
+						}
+						break;
+					case "namespace":
+						_namespace = val;
+						break;
+					case "struct":
+						_struct = val;
+						break;
+					case "union":
+						_union = val;
+						break;
+					case "enum":
+						_enum = val;
+						break;
+					case "signature":
+						signature = val;
+						break;
+					}
+				}
+			}
+			
+			return new Tag (name, file, pattern, kind, access, _class, _namespace, _struct, _union, _enum, signature);
+		}
+		
+		Tag BinarySearch (string[] ctags_lines, TagKind kind, string name)
+		{
+			int low;
+			int high = ctags_lines.Length - 2; // last element is an empty string (because of the Split)
+			int mid;
+			int start_index = 0;
+			
+			// Skip initial comment lines
+			while (ctags_lines[start_index].StartsWith ("!_"))
+				start_index++;
+
+			low = start_index;
+			
+			while (low <= high) {
+				mid = (low + high) / 2;
+				string entry = ctags_lines[mid];
+				string tag_name = entry.Substring (0, entry.IndexOf ('\t'));
+				int res = string.CompareOrdinal (tag_name, name);
+				
+				if (res < 0) {
+					low = mid + 1;
+				} else if (res > 0) {
+					high = mid - 1;
+				} else {
+					// The tag we are at has the same name than the one we are looking for
+					// but not necessarily the same type, the actual tag we are looking
+					// for might be higher up or down, so we try both, starting with going down.
+					int save = mid;
+					bool going_down = true;
+					bool eof = false;
+					
+					while (true) {
+						Tag tag = ParseTag (entry);
+						
+						if (tag == null)
+							return null;
+						
+						if (tag.Kind == kind && tag_name == name)
+							return tag;
+						
+						if (going_down) {
+							mid++;
+							
+							if (mid >= ctags_lines.Length - 1)
+								eof = true;
+							
+							if (!eof) {
+								entry = ctags_lines[mid];
+								tag_name = entry.Substring (0, entry.IndexOf ('\t'));
+								
+								if (tag_name != name) {
+									going_down = false;
+									mid = save - 1;
+								}
+							} else {
+								going_down = false;
+								mid = save - 1;
+							}
+						} else { // going up
+							mid--;
+
+							if (mid < start_index)
+								return null;
+							
+							entry = ctags_lines[mid];
+							tag_name = entry.Substring (0, entry.IndexOf ('\t'));
+							
+							if (tag_name != name)
+								return null;
+						}
+					}
+				}
+			}
+			
+			return null;
+		}
+		
+		private struct SemiTag
+		{
+			readonly internal string name;
+			readonly internal TagKind kind;
+			
+			internal SemiTag (string name, TagKind kind)
+			{
+				this.name = name;
+				this.kind = kind;
+			}
+			
+			public override int GetHashCode ()
+			{
+				return (name + kind.ToString ()).GetHashCode ();
+			}
+		}
+		
+		private const int cache_size = 10000;
+		private Dictionary<SemiTag, Tag> cache = new Dictionary<SemiTag, Tag> ();
+		
+		public Tag FindTag (string name, TagKind kind, string ctags_output)
+		{
+			SemiTag semiTag = new SemiTag (name, kind);
+			
+			if (cache.ContainsKey (semiTag))
+				return cache[semiTag];
+			else {
+				string[] ctags_lines = ctags_output.Split ('\n');
+				Tag tag = BinarySearch (ctags_lines, kind, name);
+				cache.Add (semiTag, tag);
+				
+				return tag;
+			}
+		}
+		
+		public void RemoveFileInfo(Project project, string filename)
+		{
+			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
+			info.RemoveFileInfo(filename);
+		}
+		
+		private static string[] diff (string[] a1, string[] a2)
+		{
+			List<string> res = new List<string> ();
+			List<string> right = new List<string> (a2);
+			
+			foreach (string s in a1) {
+				if (!right.Contains (s))
+					res.Add (s);
+			}
+			
+			return res.ToArray ();
+		}
+		
+		private class ProjectFilePair
+		{
+			string file;
+			Project project;
+			
+			public ProjectFilePair (Project project, string file)
+			{
+				this.project = project;
+				this.file = file;
+			}
+			
+			public string File {
+				get { return file; }
+			}
+			
+			public Project Project {
+				get { return project; }
+			}
+			
+			public override bool Equals (object other)
+			{
+				ProjectFilePair o = other as ProjectFilePair;
+				
+				if (o == null)
+					return false;
+				
+				if (file == o.File && project == o.Project)
+					return true;
+				else
+					return false;
+			}
+			
+			public override int GetHashCode ()
+			{
+				return (project.ToString() + file).GetHashCode ();
+			}
+		}
+	}
+}
diff --git a/Parser/Typedef.cs b/Parser/Typedef.cs
new file mode 100644
index 0000000..d08d5a5
--- /dev/null
+++ b/Parser/Typedef.cs
@@ -0,0 +1,49 @@
+//
+// Typedef.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Typedef : LanguageItem
+	{		
+		public Typedef (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{			
+			if (GetNamespace (tag, ctags_output)) return;
+			if (GetClass (tag, ctags_output)) return;
+			if (GetStructure (tag, ctags_output)) return;
+			if (GetUnion (tag, ctags_output)) return;
+		}
+	}
+}
diff --git a/Parser/Union.cs b/Parser/Union.cs
new file mode 100644
index 0000000..168fee4
--- /dev/null
+++ b/Parser/Union.cs
@@ -0,0 +1,49 @@
+//
+// Union.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Union : LanguageItem
+	{
+		public Union (Tag tag, Project project, string ctags_output) : base (tag, project)
+		{
+			if (GetNamespace (tag, ctags_output)) return;
+			if (GetClass (tag, ctags_output)) return;
+			if (GetStructure (tag, ctags_output)) return;
+			if (GetUnion (tag, ctags_output)) return;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Parser/Variable.cs b/Parser/Variable.cs
new file mode 100644
index 0000000..c5c19ea
--- /dev/null
+++ b/Parser/Variable.cs
@@ -0,0 +1,45 @@
+//
+// Variable.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding.Parser
+{
+	public class Variable : LanguageItem
+	{
+		public Variable (Tag tag, Project project) : base (tag, project)
+		{
+		}
+	}
+}
diff --git a/Project/ProjectPackage.cs b/Project/ProjectPackage.cs
new file mode 100644
index 0000000..2bc4de1
--- /dev/null
+++ b/Project/ProjectPackage.cs
@@ -0,0 +1,294 @@
+//
+// ProjectPackage.cs: A pkg-config package
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Collections.Generic;
+
+using Mono.Addins;
+
+using MonoDevelop.Core.Serialization;
+
+namespace MonoDevelop.ValaBinding
+{
+	public class ProjectPackage
+	{
+		[ItemProperty ("file")]
+		private string file;
+		
+		[ItemProperty ("name")]
+		private string name;
+		
+		[ItemProperty ("IsProject")]
+		private bool is_project;
+		
+		public string Description {
+			get{ return description; }
+			set{ description = value; }
+		}
+		private string description;
+		
+		public string Version {
+			get{ return version; }
+			set{ version = value; }
+		}
+		private string version;
+		
+		public List<string> Requires {
+			get { return requires; }
+		}
+		private List<string> requires;
+		
+		private static string[] packagePaths;
+		
+		static ProjectPackage () {
+			packagePaths = ScanPackageDirs ();
+		}
+
+		protected ProjectPackage() {
+			requires = new List<string>();
+			description = string.Empty;
+			version = string.Empty;
+		}
+		
+		public ProjectPackage (string file): this()
+		{
+			this.file = file;
+			this.name = Path.GetFileNameWithoutExtension(file);
+			this.is_project = false;
+			ParsePackage();
+			ParseRequires();
+		}
+		
+		public ProjectPackage (ValaProject project): this()
+		{
+			name = project.Name;
+			ValaProjectConfiguration vpc = (ValaProjectConfiguration)(project.DefaultConfiguration);
+			file = Path.Combine (vpc.OutputDirectory, name + ".vapi");
+			is_project = true;
+		}
+		
+		public string File {
+			get { return file; }
+			set { file = value; }
+		}
+		
+		public string Name {
+			get { return name; }
+			set { name = value; }
+		}
+		
+		public bool IsProject {
+			get { return is_project; }
+			set { is_project = value; }
+		}
+		
+		public override bool Equals (object o)
+		{
+			ProjectPackage other = o as ProjectPackage;
+			
+			if (other == null) return false;
+			
+			return other.File.Equals (file);
+		}
+		
+		public override int GetHashCode ()
+		{
+			return (file + name).GetHashCode ();
+		}
+		
+		/// <summary>
+		/// Insert '\n's to make sure string isn't too long.
+		/// </summary>
+		/// <param name="desc">
+		/// The unprocessed description.
+		/// A <see cref="System.String"/>
+		/// </param>
+		/// <returns>
+		/// The processed description.
+		/// A <see cref="System.String"/>
+		/// </returns>
+		public static string ProcessDescription (string desc)
+		{
+			return Regex.Replace(desc, @"(.{1,80} )", "$&" + Environment.NewLine, RegexOptions.Compiled);
+		}
+		
+		/// <summary>
+		/// Search for a .pc file for this package, and parse its relevant attributes
+		/// </summary>
+		protected void ParsePackage ()
+		{
+			string line, pcfile;
+			
+			try {
+				foreach(string path in packagePaths) {
+					pcfile = Path.Combine (path, Path.ChangeExtension (Path.GetFileName (file), ".pc"));
+					if (!System.IO.File.Exists (pcfile)){ continue; }
+					using (StreamReader reader = new StreamReader (pcfile)) {
+						if (null == reader){ continue; }
+						
+						while ((line = reader.ReadLine ()) != null) {
+							if (Regex.IsMatch(line, @"^\s*#", RegexOptions.Compiled))
+							    continue;
+							    
+		//					if (line.IndexOf ('=') >= 0)
+		//						ParseVar (line);
+							
+							if (line.IndexOf (':') >= 0)
+								ParseProperty (line);
+						}
+						return;
+					}
+				}
+			} catch (FileNotFoundException) {
+				// We just won't populate some fields
+			} catch (IOException) {
+				// We just won't populate some fields
+			}
+		}
+		
+		protected void ParseProperty (string line)
+		{
+			string[] tokens = line.Split(new char[]{':'}, 2);
+			
+			if(2 != tokens.Length){ return; }
+			
+			string key = tokens[0];
+			string value = tokens[1].Trim();
+			
+			if (value.Length <= 0)
+				return;
+			
+			switch (key) {
+			case "Description":;
+				description = ProcessDescription (value);
+				break;
+			case "Version":
+				version = value;
+				break;
+			}
+		}
+		
+		protected void ParseRequires ()
+		{
+			string line;
+			
+			try {
+				using (StreamReader reader = new StreamReader (Path.ChangeExtension(file, ".deps"))) {
+					if(null == reader){ return; }
+					for(; null != (line = reader.ReadLine()); requires.Add(line));
+				}
+			} catch (FileNotFoundException) {
+				// We just won't populate requires
+			} catch (IOException) {
+				// We just won't populate requires
+			}
+		}
+		
+		/// <summary>
+		/// Scans PKG_CONFIG_PATH and a few static directories 
+		/// for potential pkg-config repositories
+		/// </summary>
+		/// <returns>
+		/// A <see cref="System.String"/> array: The potential directories
+		/// </returns>
+		private static string[] ScanPackageDirs ()
+		{
+			List<string> dirs = new List<string> ();
+			string pkg_var = Environment.GetEnvironmentVariable ("PKG_CONFIG_PATH");
+			string[] staticPaths = { "/usr/lib/pkgconfig",
+				"/usr/lib64/pkgconfig",
+				"/usr/share/pkgconfig",
+				"/usr/local/lib/pkgconfig",
+				"/usr/local/share/pkgconfig"
+			};
+				
+			if (null != pkg_var){ dirs.AddRange(pkg_var.Split(new char[]{System.IO.Path.PathSeparator}, StringSplitOptions.RemoveEmptyEntries)); }
+			
+			foreach(string dir in staticPaths) {
+				if(!dirs.Contains(dir)){ dirs.Add(dir); }
+			}
+			
+			return dirs.ToArray ();
+		}
+		
+		/// <summary>
+		/// Converts an absolute path to a relative one
+		/// </summary>
+		/// <param name="absolutePath">
+		/// A <see cref="System.String"/>: The absolute path
+		/// </param>
+		/// <param name="relativeTo">
+		/// A <see cref="System.String"/>: The path to which the output path shall be relative
+		/// </param>
+		/// <returns>
+		/// A <see cref="System.String"/>: The relative path from relativeTo to absolutePath
+		/// </returns>
+		public static string ToRelativePath (string absolutePath, string relativeTo) {
+			List<string>  fileTokens = new List<string> (absolutePath.Split (Path.DirectorySeparatorChar)),
+						  anchorTokens = new List<string> (relativeTo.Split (Path.DirectorySeparatorChar));
+			StringBuilder builder = new StringBuilder ();
+			int length = 0;
+
+			if (!Path.IsPathRooted(absolutePath)){ return absolutePath; }
+			if (absolutePath == relativeTo){ return Path.GetFileName (absolutePath); }
+	
+			if (absolutePath.StartsWith (relativeTo) && Directory.Exists (relativeTo)) {
+				builder.AppendFormat (".{0}", Path.DirectorySeparatorChar);
+			}// if absolutePath is inside relativeTo
+	
+			for (;0 != fileTokens.Count && 0 != anchorTokens.Count;) {
+				if (fileTokens[0] == anchorTokens[0]) {
+					fileTokens.RemoveAt (0);
+					anchorTokens.RemoveAt (0);
+				} else { break; }
+			}// strip identical leading path
+	
+			for (int i=0; i < anchorTokens.Count-1; ++i) {
+				builder.AppendFormat ("..{0}", Path.DirectorySeparatorChar);
+			}// navigate out of anchor subdir
+	
+			foreach (string token in fileTokens) {
+				builder.AppendFormat ("{0}{1}", token, Path.DirectorySeparatorChar);
+			}// append filepath
+	
+			length = builder.Length;
+			if (0 < builder.Length && Path.DirectorySeparatorChar == builder[builder.Length-1]) {
+				--length;
+			}// check for trailing separator
+
+			return builder.ToString (0, length);
+		}// ToRelativePath
+	}
+}
diff --git a/Project/ProjectPackageCollection.cs b/Project/ProjectPackageCollection.cs
new file mode 100644
index 0000000..7365922
--- /dev/null
+++ b/Project/ProjectPackageCollection.cs
@@ -0,0 +1,127 @@
+//
+// ProjectPackageCollection.cs: Collection of pkg-config packages for the project
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+using Mono.Addins;
+
+namespace MonoDevelop.ValaBinding
+{
+	[Serializable()]
+	public class ProjectPackageCollection : Collection<ProjectPackage>
+	{
+		private ValaProject project;
+		
+		internal ValaProject Project {
+			get { return project; }
+			set { project = value; }
+		}
+		
+		public ProjectPackageCollection ()
+		{
+		}
+		
+		public void AddRange (IEnumerable<ProjectPackage> packages)
+		{
+			foreach (ProjectPackage p in packages) {
+				bool found = false;
+				foreach (ProjectPackage item in Items) {
+					if (item.File == p.File) {
+						found = true;
+					}
+				}
+				if (!found) { Add (p); }
+			}
+		}
+		
+		protected override void ClearItems()
+		{
+			if (project != null) {
+				List<ProjectPackage> list = new List<ProjectPackage> (Items);
+				base.ClearItems ();
+				foreach (ProjectPackage p in list) {
+					project.NotifyPackageRemovedFromProject (p);
+				}
+			}
+		}
+		
+		protected override void InsertItem (int index, ProjectPackage value)
+		{
+			if(value.IsProject && null != project) {
+				ValaProjectConfiguration vpc = (ValaProjectConfiguration)project.DefaultConfiguration;
+				value.File = ProjectPackage.ToRelativePath(value.File, Path.Combine(vpc.OutputDirectory, vpc.CompiledOutputName));
+			}
+			base.InsertItem (index, value);
+			if (project != null) {
+				project.NotifyPackageAddedToProject (value);
+			}
+		}
+		
+		protected override void RemoveItem (int index)
+		{
+			ProjectPackage p = Items [index];
+			base.RemoveItem (index);
+			if (project != null) {
+				project.NotifyPackageRemovedFromProject (p);
+			}
+		}
+		
+		protected override void SetItem (int index, ProjectPackage item)
+		{
+			ProjectPackage oldValue = Items [index];
+			if(item.IsProject && null != project) {
+				ValaProjectConfiguration vpc = (ValaProjectConfiguration)project.DefaultConfiguration;
+				item.File = ProjectPackage.ToRelativePath(item.File, Path.Combine(vpc.OutputDirectory, vpc.CompiledOutputName));
+			}
+			base.SetItem (index, item);
+			if (project != null) {
+				project.NotifyPackageRemovedFromProject (oldValue);
+				project.NotifyPackageAddedToProject (item);
+			}
+		}
+
+		public string[] ToStringArray ()
+		{
+			string[] array = new string[Count];
+			int i = 0;
+			
+			foreach (ProjectPackage p in Items)
+				array[i++] = p.Name;
+			
+			return array;
+		}
+	}
+}
diff --git a/Project/ProjectPackageEventArgs.cs b/Project/ProjectPackageEventArgs.cs
new file mode 100644
index 0000000..8c156b3
--- /dev/null
+++ b/Project/ProjectPackageEventArgs.cs
@@ -0,0 +1,58 @@
+//
+// ProjectPackageEventArgs.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+
+namespace MonoDevelop.ValaBinding
+{
+	public delegate void ProjectPackageEventHandler (object sender, ProjectPackageEventArgs e);
+	
+	public class ProjectPackageEventArgs
+	{
+		ValaProject project;
+		ProjectPackage package;
+		
+		public ProjectPackageEventArgs(ValaProject project, ProjectPackage package)
+		{
+			this.project = project;
+			this.package = package;
+		}
+		
+		public ValaProject Project {
+			get { return project; }
+		}
+		
+		public ProjectPackage Package {
+			get { return package; }
+		}
+	}
+}
diff --git a/Project/ValaCompilationParameters.cs b/Project/ValaCompilationParameters.cs
new file mode 100644
index 0000000..4950957
--- /dev/null
+++ b/Project/ValaCompilationParameters.cs
@@ -0,0 +1,111 @@
+//
+// ValaCompilationParameters.cs: Project compilation parameters
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.Xml;
+using System.Diagnostics;
+using System.Collections;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Core.Serialization;
+
+namespace MonoDevelop.ValaBinding
+{
+	public enum WarningLevel {
+		None,
+		Normal,
+		All
+	}
+	
+	public class ValaCompilationParameters : ICloneable
+	{		
+		[ItemProperty ("WarningLevel")]
+		private WarningLevel warning_level = WarningLevel.Normal;
+		
+		[ItemProperty ("WarningsAsErrors")]
+		private bool warnings_as_errors = false;
+		
+		[ItemProperty ("OptimizationLevel")]
+		private int optimization = 0;
+		
+		[ItemProperty ("ExtraCompilerArguments")]
+		private string extra_compiler_args = string.Empty;
+		
+		[ItemProperty ("DefineSymbols")]
+		private string define_symbols = string.Empty;
+
+		[ItemProperty ("EnableMultithreading")]
+		private bool enable_multithreading = false;
+		
+		public object Clone ()
+		{
+			return MemberwiseClone ();
+		}
+		
+		public WarningLevel WarningLevel {
+			get { return warning_level; }
+			set { warning_level = value; }
+		}
+		
+		public bool WarningsAsErrors {
+			get { return warnings_as_errors; }
+			set { warnings_as_errors = value; }
+		}
+		
+		public int OptimizationLevel {
+			get { return optimization; }
+			set {
+				if (value >= 0 && value <= 3)
+					optimization = value;
+				else
+					optimization = 0;
+			}
+		}
+		
+		public string ExtraCompilerArguments {
+			get { return extra_compiler_args; }
+			set { extra_compiler_args = value; }
+		}
+		
+		public string DefineSymbols {
+			get { return define_symbols; }
+			set { define_symbols = value; }
+		}
+
+		public bool EnableMultithreading {
+			get { return enable_multithreading; }
+			set { enable_multithreading = value; }
+		}
+	}
+}
diff --git a/Project/ValaProject.cs b/Project/ValaProject.cs
new file mode 100644
index 0000000..0ced063
--- /dev/null
+++ b/Project/ValaProject.cs
@@ -0,0 +1,525 @@
+//
+// ValaProject.cs: Vala Project
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Xml;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.CodeDom.Compiler;
+using System.Text.RegularExpressions;
+using System.Diagnostics;
+
+using Mono.Addins;
+
+using MonoDevelop.Core;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Core.Execution;
+using MonoDevelop.Core.ProgressMonitoring;
+using MonoDevelop.Projects;
+using MonoDevelop.Core.Serialization;
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Deployment;
+using MonoDevelop.Deployment.Linux;
+
+using MonoDevelop.ValaBinding.Parser;
+
+namespace MonoDevelop.ValaBinding
+{
+	public enum ValaProjectCommands {
+		AddPackage,
+		ShowPackageDetails,
+		UpdateClassPad
+	}
+	
+	[DataInclude(typeof(ValaProjectConfiguration))]
+	public class ValaProject : Project, IDeployable
+	{
+		[ItemProperty ("compiler", ValueType = typeof(ValaCompiler))]
+		private ICompiler compiler_manager;
+		
+		private ProjectPackageCollection packages = new ProjectPackageCollection ();
+		public static string vapidir;
+		
+		public event ProjectPackageEventHandler PackageAddedToProject;
+		public event ProjectPackageEventHandler PackageRemovedFromProject;
+		
+		private void Init ()
+		{
+			packages.Project = this;
+			this.PackageAddedToProject += AddDependencies; // Special handling for project packages
+			//IdeApp.ProjectOperations.EntryAddedToCombine += OnEntryAddedToCombine;
+		}
+		
+		static ValaProject()
+		{
+			try {
+				Process pkgconfig = new Process();
+				pkgconfig.StartInfo.FileName = "pkg-config";
+				pkgconfig.StartInfo.Arguments = "--variable=vapidir vala-1.0";
+				pkgconfig.StartInfo.CreateNoWindow = true;
+				pkgconfig.StartInfo.RedirectStandardOutput = true;
+				pkgconfig.StartInfo.UseShellExecute = false;
+				pkgconfig.Start();
+				vapidir = pkgconfig.StandardOutput.ReadToEnd().Trim();
+				pkgconfig.WaitForExit();
+				pkgconfig.Dispose();
+			} catch(Exception e) {
+				MessageService.ShowError("Unable to detect VAPI path", string.Format("{0}{1}{2}", e.Message, Environment.NewLine, e.StackTrace));
+			}
+			
+			if(!Directory.Exists(vapidir)){ vapidir = "/usr/share/vala/vapi"; }
+		}
+		
+
+		
+		public ValaProject ()
+		{
+			Init ();
+		}
+		
+		public ValaProject (ProjectCreateInformation info,
+						 XmlElement projectOptions, string language)
+		{
+			Init ();
+			string binPath = ".";
+			
+			if (info != null) {
+				Name = info.ProjectName;
+				binPath = info.BinPath;
+			}
+			
+			Compiler = null;
+			
+			ValaProjectConfiguration configuration =
+				(ValaProjectConfiguration)CreateConfiguration ("Debug");
+			
+			configuration.DebugMode = true;
+			((ValaCompilationParameters)configuration.CompilationParameters).DefineSymbols = "DEBUG MONODEVELOP";		
+				
+			Configurations.Add (configuration);
+			
+			configuration =
+				(ValaProjectConfiguration)CreateConfiguration ("Release");
+				
+			configuration.DebugMode = false;
+			((ValaCompilationParameters)configuration.CompilationParameters).OptimizationLevel = 3;
+			((ValaCompilationParameters)configuration.CompilationParameters).DefineSymbols = "MONODEVELOP";
+			Configurations.Add (configuration);
+			
+			foreach (ValaProjectConfiguration c in Configurations) {
+				c.OutputDirectory = Path.Combine (binPath, c.Name);
+				c.SourceDirectory = info.ProjectBasePath;
+				c.Output = Name;
+				ValaCompilationParameters parameters = c.CompilationParameters as ValaCompilationParameters;
+				
+				if (projectOptions != null) {
+					if (projectOptions.Attributes["Target"] != null) {
+						c.CompileTarget = (ValaBinding.CompileTarget)Enum.Parse (
+							typeof(ValaBinding.CompileTarget),
+							projectOptions.Attributes["Target"].InnerText);
+					}
+					if (projectOptions.Attributes["PauseConsoleOutput"] != null) {
+						c.PauseConsoleOutput = bool.Parse (
+							projectOptions.Attributes["PauseConsoleOutput"].InnerText);
+					}
+					if (projectOptions.Attributes["CompilerArgs"].InnerText != null) {
+						if (parameters != null) {
+							parameters.ExtraCompilerArguments = projectOptions.Attributes["CompilerArgs"].InnerText;
+						}
+					}
+					if (projectOptions.Attributes["Packages"].InnerText != null) {
+						List<ProjectPackage> packs = new List<ProjectPackage>();
+						foreach(string pack in projectOptions.Attributes["Packages"].InnerText.Split('|')) {
+							packs.Add(new ProjectPackage(
+								string.Format("{0}{1}{2}.vapi", 
+									vapidir, 
+									Path.DirectorySeparatorChar, 
+									pack)));
+						}
+						packages.AddRange(packs);
+					}
+				}
+			}
+		}
+		
+		public override string ProjectType {
+			get { return "Vala"; }
+		}
+		
+		public override string[] SupportedLanguages {
+			get { return new string[] { "Vala" }; }
+		}
+		
+		public override bool IsCompileable (string fileName)
+		{
+			string ext = Path.GetExtension(fileName);
+			return (ext.Equals(".vala", StringComparison.CurrentCultureIgnoreCase) ||
+				ext.Equals(".vapi", StringComparison.CurrentCultureIgnoreCase));
+		}
+		
+		public List<ValaProject> DependedOnProjects ()
+		{
+			List<string> project_names = new List<string> ();
+			List<ValaProject> projects = new List<ValaProject> ();
+			
+			foreach (ProjectPackage p in Packages) {
+				if (p.IsProject && p.Name != Name) {
+					project_names.Add (p.Name);
+				}
+			}
+			
+			foreach (SolutionItem e in ParentFolder.Items) {
+				if (e is ValaProject && project_names.Contains (e.Name)) {
+					projects.Add ((ValaProject)e);
+				}
+			}
+			
+			return projects;
+		}
+		
+		/// <summary>
+		/// Ths pkg-config package is for internal MonoDevelop use only, it is not deployed.
+		/// </summary>
+		public void WriteMDPkgPackage (string configuration)
+		{
+			string pkgfile = Path.Combine (BaseDirectory, Name + ".md.pc");
+			
+			ValaProjectConfiguration config = (ValaProjectConfiguration)GetConfiguration(configuration);
+			
+			using (StreamWriter writer = new StreamWriter (pkgfile)) {
+				writer.WriteLine ("Name: {0}", Name);
+				writer.WriteLine ("Description: {0}", Description);
+				writer.WriteLine ("Version: {0}", Version);
+				writer.WriteLine ("Libs: -L{0} -l{1}", config.OutputDirectory, config.Output);
+//				writer.WriteLine ("Cflags: -I{0}", BaseDirectory);
+			}
+			
+			// If this project compiles into a shared object we need to
+			// export the output path to the LD_LIBRARY_PATH
+			string literal = "LD_LIBRARY_PATH";
+			string ld_library_path = Environment.GetEnvironmentVariable (literal);
+			
+			if (string.IsNullOrEmpty (ld_library_path)) {
+				Environment.SetEnvironmentVariable (literal, config.OutputDirectory);
+			} else if (!ld_library_path.Contains (config.OutputDirectory)) {
+				ld_library_path = string.Format ("{0}:{1}", config.OutputDirectory, ld_library_path);
+				Environment.SetEnvironmentVariable (literal, ld_library_path);
+			}
+		}
+		
+		/// <summary>
+		/// This is the pkg-config package that gets deployed.
+		/// <returns>The pkg-config package's filename</returns>
+		/// </summary>
+		private string WriteDeployablePkgPackage (string configuration)
+		{
+			// FIXME: This should probably be grabed from somewhere.
+			string prefix = "/usr/local";
+			string pkgfile = Path.Combine (BaseDirectory, Name + ".pc");
+			ValaProjectConfiguration config = (ValaProjectConfiguration)GetConfiguration(configuration);
+			
+			using (StreamWriter writer = new StreamWriter (pkgfile)) {
+				writer.WriteLine ("prefix={0}", prefix);
+				writer.WriteLine ("exec_prefix=${prefix}");
+				writer.WriteLine ("libdir=${exec_prefix}/lib");
+				writer.WriteLine ("includedir=${prefix}/include");
+				writer.WriteLine ();
+				writer.WriteLine ("Name: {0}", Name);
+				writer.WriteLine ("Description: {0}", Description);
+				writer.WriteLine ("Version: {0}", Version);
+				writer.WriteLine ("Requires: {0}", string.Join (" ", Packages.ToStringArray ()));
+				// TODO: How should I get this?
+				writer.WriteLine ("Conflicts: {0}", string.Empty);
+				writer.Write ("Libs: -L${libdir} ");
+				writer.WriteLine ("-l{0}", config.Output);
+				writer.Write ("Cflags: -I${includedir}/");
+				writer.WriteLine ("{0} {1}", Name, Regex.Replace(((ValaCompilationParameters)config.CompilationParameters).DefineSymbols, @"(^|\s+)(\w+)", "-D$2 ", RegexOptions.Compiled));
+			}
+			
+			return pkgfile;
+		}
+		
+		protected override BuildResult DoBuild (IProgressMonitor monitor, string configuration)
+		{
+			ValaProjectConfiguration pc = (ValaProjectConfiguration)GetConfiguration(configuration);
+			pc.SourceDirectory = BaseDirectory;
+			
+			return compiler_manager.Compile (
+				Files, packages,
+				pc,
+				monitor);
+		}
+
+		protected override bool OnGetCanExecute (MonoDevelop.Projects.ExecutionContext context, string solutionConfiguration)
+		{
+			ValaProjectConfiguration conf = (ValaProjectConfiguration)GetConfiguration(solutionConfiguration);
+			return (conf.CompileTarget == ValaBinding.CompileTarget.Bin) &&
+				context.ExecutionHandler.CanExecute (Path.Combine (conf.OutputDirectory, conf.Output));
+		}
+		
+		protected override void DoExecute (IProgressMonitor monitor,
+										   ExecutionContext context,
+		                                   string configuration)
+		{
+			ValaProjectConfiguration conf = (ValaProjectConfiguration)GetConfiguration(configuration);
+			string command = conf.Output;
+			string args = conf.CommandLineParameters;
+			string dir = Path.GetFullPath (conf.OutputDirectory);
+			string platform = "Native";
+			bool pause = conf.PauseConsoleOutput;
+			IConsole console;
+			
+			if (conf.CompileTarget != ValaBinding.CompileTarget.Bin) {
+				MessageService.ShowMessage ("Compile target is not an executable!");
+				return;
+			}
+			
+			monitor.Log.WriteLine ("Running project...");
+			
+			if (conf.ExternalConsole)
+				console = context.ExternalConsoleFactory.CreateConsole (!pause);
+			else
+				console = context.ConsoleFactory.CreateConsole (!pause);
+			
+			AggregatedOperationMonitor operationMonitor = new AggregatedOperationMonitor (monitor);
+			
+			try {
+				if (!context.ExecutionHandler.CanExecute (Path.Combine (dir, command))) {
+					monitor.ReportError ("Cannot execute \"" + command + "\". The selected execution mode is not supported for Vala projects.", null);
+					return;
+				}
+				
+				IProcessAsyncOperation op = context.ExecutionHandler.Execute (Path.Combine (dir, command), args, dir, null, console);
+				
+				operationMonitor.AddOperation (op);
+				op.WaitForCompleted ();
+				
+				monitor.Log.WriteLine ("The operation exited with code: {0}", op.ExitCode);
+			} catch (Exception ex) {
+				monitor.ReportError ("Cannot execute \"" + command + "\"", ex);
+			} finally {			
+				operationMonitor.Dispose ();			
+				console.Dispose ();
+			}
+		}
+		
+		protected override string OnGetOutputFileName (string configuration)
+		{
+			ValaProjectConfiguration conf = (ValaProjectConfiguration)GetConfiguration(configuration);
+			return Path.Combine (conf.OutputDirectory, conf.CompiledOutputName);
+		}
+		
+		public override SolutionItemConfiguration CreateConfiguration (string name)
+		{
+			ValaProjectConfiguration conf = new ValaProjectConfiguration ();
+			
+			conf.Name = name;
+			conf.CompilationParameters = new ValaCompilationParameters ();
+			
+			return conf;
+		}
+		
+		public ICompiler Compiler {
+			get { return compiler_manager; }
+			set {
+				if (value != null) {
+					compiler_manager = value;
+				} else {
+					object[] compilers = AddinManager.GetExtensionObjects ("/ValaBinding/Compilers");
+					string compiler = PropertyService.Get ("ValaBinding.DefaultValaCompiler", new ValaCompiler().Name);
+					
+					foreach (ICompiler c in compilers) {
+						if (compiler == c.Name) {
+							compiler_manager = c;
+						}
+					}
+				}
+			}
+		}
+		
+		[Browsable(false)]
+		[ItemProperty ("Packages")]
+		public ProjectPackageCollection Packages {
+			get { return packages; }
+			set {
+				packages = value;
+				packages.Project = this;
+				foreach(ProjectPackage p in packages) {
+					TagDatabaseManager.Instance.UpdateFileTags(this, p.File);
+				}
+			}
+		}
+		
+		protected override void OnFileAddedToProject (ProjectFileEventArgs e)
+		{
+			base.OnFileAddedToProject (e);
+			
+			if (!IsCompileable (e.ProjectFile.Name) &&
+				e.ProjectFile.BuildAction == BuildAction.Compile) {
+				e.ProjectFile.BuildAction = BuildAction.None;
+			}
+			
+			if (e.ProjectFile.BuildAction == BuildAction.Compile)
+				TagDatabaseManager.Instance.UpdateFileTags (this, e.ProjectFile.Name);
+		}
+		
+		protected override void OnFileChangedInProject (ProjectFileEventArgs e)
+		{
+			base.OnFileChangedInProject (e);
+			
+			TagDatabaseManager.Instance.UpdateFileTags (this, e.ProjectFile.Name);
+		}
+		
+		protected override void OnFileRemovedFromProject (ProjectFileEventArgs e)
+		{
+			base.OnFileRemovedFromProject(e);
+			
+			TagDatabaseManager.Instance.RemoveFileInfo (this, e.ProjectFile.Name);
+		}
+		
+		private static void OnEntryAddedToCombine (object sender, SolutionItemEventArgs e)
+		{
+			ValaProject p = e.SolutionItem as ValaProject;
+			
+			if (p == null)
+				return;
+			
+			foreach (ProjectFile f in p.Files)
+				TagDatabaseManager.Instance.UpdateFileTags (p, f.Name);
+			foreach (ProjectPackage package in p.Packages)
+				TagDatabaseManager.Instance.UpdateFileTags (p, package.File);
+		}
+		
+		internal void NotifyPackageRemovedFromProject (ProjectPackage package)
+		{
+			if (null != PackageRemovedFromProject) {
+				PackageRemovedFromProject (this, new ProjectPackageEventArgs (this, package));
+			}
+			TagDatabaseManager.Instance.RemoveFileInfo(this, package.File);
+		}
+		
+		internal void NotifyPackageAddedToProject (ProjectPackage package)
+		{
+			if(null != PackageAddedToProject) {
+				PackageAddedToProject (this, new ProjectPackageEventArgs (this, package));
+			}
+			TagDatabaseManager.Instance.UpdateFileTags(this, package.File);
+		}
+
+		public DeployFileCollection GetDeployFiles (string configuration)
+		{
+			DeployFileCollection deployFiles = new DeployFileCollection ();
+			
+			CompileTarget target = ((ValaProjectConfiguration)GetConfiguration(configuration)).CompileTarget;
+			
+			// Headers and resources
+			foreach (ProjectFile f in Files) {
+				if (f.BuildAction == BuildAction.Content) {
+					string targetDirectory =
+						(/*IsHeaderFile (f.Name) ? TargetDirectory.Include :*/ TargetDirectory.ProgramFiles);
+					
+					deployFiles.Add (new DeployFile (this, f.FilePath, f.RelativePath, targetDirectory));
+				}
+			}
+			
+			// Output
+			string output = GetOutputFileName (configuration);
+			if (!string.IsNullOrEmpty (output)) {
+				string targetDirectory = string.Empty;
+				
+				switch (target) {
+				case CompileTarget.Bin:
+					targetDirectory = TargetDirectory.ProgramFiles;
+					break;
+				case CompileTarget.SharedLibrary:
+					targetDirectory = TargetDirectory.ProgramFiles;
+					break;
+				case CompileTarget.StaticLibrary:
+					targetDirectory = TargetDirectory.ProgramFiles;
+					break;
+				}					
+				
+				deployFiles.Add (new DeployFile (this, output, Path.GetFileName (output), targetDirectory));
+			}
+			
+			// PkgPackage
+			if (target != CompileTarget.Bin) {
+				string pkgfile = WriteDeployablePkgPackage (configuration);
+				deployFiles.Add (new DeployFile (this, Path.Combine (BaseDirectory, pkgfile), pkgfile, LinuxTargetDirectory.PkgConfig));
+			}
+			
+			return deployFiles;
+		}
+
+		/// <summary>
+		/// Add dependencies of project packages to current project,
+		/// and add cflags for project package and LD_LIBRARY_PATH
+		/// </summary>
+		private void AddDependencies (object obj, ProjectPackageEventArgs args) {
+			ProjectPackage package = args.Package;
+			if (!package.IsProject){ return; }
+
+			string depsfile = Path.ChangeExtension (package.File, ".deps");
+			try {
+				string[] lines = File.ReadAllLines (depsfile);
+				List<ProjectPackage> deps = new List<ProjectPackage>();
+				foreach (string line in lines) {
+					deps.Add(new ProjectPackage(Path.Combine(vapidir, line) + ".vapi"));
+				}// add package for each dep
+				packages.AddRange(deps);
+
+				// Currently, we need to add include directory and linker flags - this should be obsoleted
+				string ccargs = string.Format (" --Xcc=\\\\\\\"-I{0}\\\\\\\" --Xcc=\\\\\\\"-L{0}\\\\\\\" --Xcc=\\\\\\\"-l{1}\\\\\\\" ", Path.GetDirectoryName (depsfile), package.Name);
+				string ldpath = string.Empty;
+				string packagePath = Path.GetDirectoryName(package.File);
+				
+				foreach (string pc in GetConfigurations ()) {
+					ValaProjectConfiguration valapc = GetConfiguration (pc) as ValaProjectConfiguration;
+					if (null == valapc){ continue; }
+
+					ValaCompilationParameters vcp = (ValaCompilationParameters)valapc.CompilationParameters;
+					if (!vcp.ExtraCompilerArguments.Contains (ccargs)){ vcp.ExtraCompilerArguments += ccargs; }
+
+					if(valapc.EnvironmentVariables.TryGetValue ("LD_LIBRARY_PATH", out ldpath)) {
+						if (!ldpath.Contains (packagePath)){ ldpath += Path.PathSeparator + packagePath; }
+					} else {
+						ldpath = packagePath;
+					}
+					
+					valapc.EnvironmentVariables["LD_LIBRARY_PATH"] = ldpath;
+				}// add compilation parameters and LD_LIBRARY_PATH
+			} catch { /* Do anything here? */ }
+		}// AddDependencies
+	}
+}
diff --git a/Project/ValaProjectBinding.cs b/Project/ValaProjectBinding.cs
new file mode 100644
index 0000000..eb596c0
--- /dev/null
+++ b/Project/ValaProjectBinding.cs
@@ -0,0 +1,74 @@
+//
+// ValaProjectBinding.cs: binding for a ValaProject
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.Xml;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.ValaBinding
+{
+	public class ValaProjectBinding : IProjectBinding
+	{
+		public string Name {
+			get { return "Vala"; }
+		}
+		
+		public Project CreateProject (ProjectCreateInformation info,
+									  XmlElement projectOptions)
+		{
+			string language = projectOptions.GetAttribute ("language");
+			return new ValaProject (info, projectOptions, language);
+		}
+		
+		public Project CreateSingleFileProject (string sourceFile)
+		{
+			ProjectCreateInformation info = new ProjectCreateInformation ();
+			info.ProjectName = Path.GetFileNameWithoutExtension (sourceFile);
+			info.CombinePath = Path.GetDirectoryName (sourceFile);
+			info.ProjectBasePath = Path.GetDirectoryName (sourceFile);
+			
+			string language = "Vala";
+			
+			Project project =  new ValaProject (info, null, language);
+			project.Files.Add (new ProjectFile (sourceFile));
+			return project;
+		}
+		
+		public bool CanCreateSingleFileProject (string sourceFile)
+		{
+			return sourceFile.EndsWith (".vala", StringComparison.OrdinalIgnoreCase);
+		}
+	}
+}
diff --git a/Project/ValaProjectConfiguration.cs b/Project/ValaProjectConfiguration.cs
new file mode 100644
index 0000000..11834f4
--- /dev/null
+++ b/Project/ValaProjectConfiguration.cs
@@ -0,0 +1,166 @@
+//
+// ValaProjectConfiguration.cs: Configuration for Vala projects
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.Collections;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Core.Serialization;
+
+namespace MonoDevelop.ValaBinding
+{
+	public enum CompileTarget {
+		Bin,
+		StaticLibrary,
+		SharedLibrary
+	};
+	
+	public class ValaProjectConfiguration : ProjectConfiguration
+	{
+		[ItemProperty("Output/output")]
+		string output = string.Empty;
+		
+		[ItemProperty("Build/target")]
+		ValaBinding.CompileTarget target = ValaBinding.CompileTarget.Bin;
+		
+		[ItemProperty ("Includes")]
+		[ProjectPathItemProperty ("Include", Scope = "*", ValueType = typeof(string))]
+		private ArrayList includes = new ArrayList ();
+		
+//		[ItemProperty ("LibPaths")]
+//		[ProjectPathItemProperty ("LibPath", Scope = 1, ValueType = typeof(string))]
+//		private ArrayList libpaths = new ArrayList ();
+//		
+		[ItemProperty ("Libs")]
+		[ItemProperty ("Lib", Scope = "*", ValueType = typeof(string))]
+		private ArrayList libs = new ArrayList ();
+		
+		[ItemProperty ("CodeGeneration",
+					  FallbackType = typeof(UnknownCompilationParameters))]
+		ICloneable compilationParameters;
+		
+		[ProjectPathItemProperty ("SourceDirectory")]
+		private string source_directory_path;
+		
+		public string Output {
+			get { return output; }
+			set { output = value; }
+		}
+		
+		public CompileTarget CompileTarget {
+			get { return target; }
+			set { target = value; }
+		}
+
+		public ICloneable CompilationParameters {
+			get { return compilationParameters; }
+			set { compilationParameters = value; }
+		}
+		
+		// TODO: This should be revised to use the naming conventions depending on OS
+		public string CompiledOutputName {
+			get {
+				string suffix = string.Empty;
+				string prefix = string.Empty;
+				
+				switch (target)
+				{
+				case CompileTarget.Bin:
+					break;
+				case CompileTarget.StaticLibrary:
+					if (!Output.StartsWith ("lib"))
+						prefix = "lib";
+					if (!Output.EndsWith (".a"))
+						suffix = ".a";
+					break;
+				case CompileTarget.SharedLibrary:
+					if (!Output.StartsWith ("lib"))
+						prefix = "lib";
+					if (!Output.EndsWith (".so"))
+						suffix = ".so";
+					break;
+				}
+				
+				return string.Format("{0}{1}{2}", prefix, Output, suffix);
+			}
+		}
+		
+		public string SourceDirectory {
+			get { return source_directory_path; }
+			set { source_directory_path = value; }
+		}
+		
+		public ArrayList Includes {
+			get { return includes; }
+			set { includes = value; }
+		}
+		
+		public ArrayList Libs {
+			get { return libs; }
+			set { libs = value; }
+		}
+		
+		public override void CopyFrom (ItemConfiguration configuration)
+		{
+			base.CopyFrom (configuration);
+			ValaProjectConfiguration conf = (ValaProjectConfiguration)configuration;
+			
+			output = conf.output;
+			target = conf.target;
+			includes = conf.includes;
+			libs = conf.libs;
+			source_directory_path = conf.source_directory_path;
+			
+			if (conf.CompilationParameters == null) {
+				compilationParameters = null;
+			} else {
+				compilationParameters = (ICloneable)conf.compilationParameters.Clone ();
+			}
+		}
+	}
+	
+	public class UnknownCompilationParameters : ICloneable, IExtendedDataItem
+	{
+		Hashtable table = new Hashtable ();
+		
+		public IDictionary ExtendedProperties {
+			get { return table; }
+		}
+		
+		public object Clone ()
+		{
+			return MemberwiseClone ();
+		}
+	}
+}
diff --git a/Project/ValaProjectServiceExtension.cs b/Project/ValaProjectServiceExtension.cs
new file mode 100644
index 0000000..4b66fd1
--- /dev/null
+++ b/Project/ValaProjectServiceExtension.cs
@@ -0,0 +1,77 @@
+//
+// ValaProjectServiceExtension.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+using System.Text;
+
+using Mono.Addins;
+
+using MonoDevelop.Core;
+using MonoDevelop.Projects;
+using MonoDevelop.Core.Execution;
+
+namespace MonoDevelop.ValaBinding
+{
+	public class ValaProjectServiceExtension : ProjectServiceExtension
+	{
+		protected override BuildResult Build (IProgressMonitor monitor, SolutionEntityItem entry, string configuration)
+		{
+			ValaProject project = entry as ValaProject;
+			
+			if (project == null)
+				return base.Build (monitor, entry, configuration);
+			
+			foreach (ValaProject p in project.DependedOnProjects ()) {
+				p.Build (monitor, configuration, true);
+			}
+			
+			ValaProjectConfiguration conf = (ValaProjectConfiguration)project.GetConfiguration(configuration);
+			
+			if (conf.CompileTarget != CompileTarget.Bin)
+				project.WriteMDPkgPackage (configuration);
+			
+			return base.Build (monitor, entry, configuration);
+		}
+		
+		protected override void Clean (IProgressMonitor monitor, SolutionEntityItem entry, string configuration)
+		{
+			base.Clean (monitor, entry, configuration);
+			
+			ValaProject project = entry as ValaProject;
+			if (project == null)
+				return;
+			
+			project.Compiler.Clean (project.Files, (ValaProjectConfiguration) project.GetConfiguration(configuration), monitor);
+		}
+	}
+}
diff --git a/ProjectPad/ProjectNodeExtension.cs b/ProjectPad/ProjectNodeExtension.cs
new file mode 100644
index 0000000..6b174df
--- /dev/null
+++ b/ProjectPad/ProjectNodeExtension.cs
@@ -0,0 +1,59 @@
+//
+// ProjectNodeExtension.cs: Adds the packages node to a ValaProject
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.Collections;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Ide.Gui.Components;
+
+namespace MonoDevelop.ValaBinding.ProjectPad
+{
+	public class ProjectNodeExtension : NodeBuilderExtension
+	{
+		public override bool CanBuildNode (Type dataType)
+		{
+			return typeof(ValaProject).IsAssignableFrom (dataType);
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			ValaProject p = dataObject as ValaProject;
+			
+			if (p == null) return;
+			
+			builder.AddChild (p.Packages);
+		}
+	}
+}
diff --git a/ProjectPad/ProjectPackageNodeBuilder.cs b/ProjectPad/ProjectPackageNodeBuilder.cs
new file mode 100644
index 0000000..1cdb02f
--- /dev/null
+++ b/ProjectPad/ProjectPackageNodeBuilder.cs
@@ -0,0 +1,109 @@
+//
+// ProjectPackageNodeBuilder.cs
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.Reflection;
+
+using Mono.Addins;
+
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Components.Commands;
+using MonoDevelop.Ide.Commands;
+using MonoDevelop.Ide.Gui.Components;
+
+namespace MonoDevelop.ValaBinding.ProjectPad
+{
+	public class ProjectPackageNodeBuilder : TypeNodeBuilder
+	{
+		public override Type NodeDataType {
+			get { return typeof(ProjectPackage); }
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(PackageNodeCommandHandler); }
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return ((ProjectPackage)dataObject).File;
+		}
+		
+		public override string ContextMenuAddinPath {
+			get { return "/MonoDevelop/ValaBinding/Views/ProjectBrowser/ContextMenu/PackageNode"; }
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder,
+		                                object dataObject,
+		                                ref string label,
+		                                ref Gdk.Pixbuf icon,
+		                                ref Gdk.Pixbuf closedIcon)
+		{
+			label = ((ProjectPackage)dataObject).Name;
+			
+			if (((ProjectPackage)dataObject).IsProject)
+				icon = new Gdk.Pixbuf (Assembly.GetExecutingAssembly (), "Icons.16x16.ProjectReference");
+			else
+				icon = Context.GetIcon (Stock.Reference);
+		}
+	}
+	
+	public class PackageNodeCommandHandler : NodeCommandHandler
+	{
+		public override void DeleteItem ()
+		{
+			ProjectPackage package = CurrentNode.DataItem as ProjectPackage;
+			ValaProject project = CurrentNode.GetParentDataItem (
+			    typeof(ValaProject), false) as ValaProject;
+			
+			project.Packages.Remove (package);
+			
+			IdeApp.ProjectOperations.Save (project);
+		}
+		
+		public override DragOperation CanDragNode ()
+		{
+			return DragOperation.Copy;
+		}
+		
+		[CommandHandler (MonoDevelop.ValaBinding.ValaProjectCommands.ShowPackageDetails)]
+		public void ShowPackageDetails ()
+		{
+			ProjectPackage package = (ProjectPackage)CurrentNode.DataItem;
+			
+			// package.ParsePackage ();
+			
+			PackageDetails details = new PackageDetails (package);
+			details.Show ();
+		}
+	}
+}
diff --git a/ProjectPad/ProjectPackagesFolderNodeBuilder.cs b/ProjectPad/ProjectPackagesFolderNodeBuilder.cs
new file mode 100644
index 0000000..7b7d050
--- /dev/null
+++ b/ProjectPad/ProjectPackagesFolderNodeBuilder.cs
@@ -0,0 +1,204 @@
+//
+// ProjectPackagesFolderNodeBuilder.cs: Node to control the packages in the project
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+using System.Collections;
+
+using Mono.Addins;
+
+using MonoDevelop.Components.Commands;
+using MonoDevelop.Projects;
+using MonoDevelop.Core.Gui;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Ide.Gui.Pads.ProjectPad;
+using MonoDevelop.Ide.Gui;
+using MonoDevelop.Ide.Gui.Components;
+
+namespace MonoDevelop.ValaBinding.ProjectPad
+{	
+	public class ProjectPackagesFolderNodeBuilder : TypeNodeBuilder
+	{
+		ProjectPackageEventHandler addedHandler;
+		ProjectPackageEventHandler removedHandler;
+		
+		public override Type NodeDataType {
+			get { return typeof(ProjectPackageCollection); }
+		}
+		
+		public override void OnNodeAdded (object dataObject)
+		{
+			ValaProject project = ((ProjectPackageCollection)dataObject).Project;
+			if (project == null) return;
+			project.PackageAddedToProject += addedHandler;
+			project.PackageRemovedFromProject += removedHandler;
+		}
+
+		public override void OnNodeRemoved (object dataObject)
+		{
+			ValaProject project = ((ProjectPackageCollection)dataObject).Project;
+			if (project == null) return;
+			project.PackageAddedToProject -= addedHandler;
+			project.PackageRemovedFromProject -= removedHandler;
+		}
+		
+		public override Type CommandHandlerType {
+			get { return typeof(ProjectPackagesFolderNodeCommandHandler); }
+		}
+		
+		protected override void Initialize ()
+		{
+			addedHandler = (ProjectPackageEventHandler)DispatchService.GuiDispatch (new ProjectPackageEventHandler (OnAddPackage));
+			removedHandler = (ProjectPackageEventHandler)DispatchService.GuiDispatch (new ProjectPackageEventHandler (OnRemovePackage));
+		}
+		
+		public override string GetNodeName (ITreeNavigator thisNode, object dataObject)
+		{
+			return "Packages";
+		}
+		
+		public override void BuildNode (ITreeBuilder treeBuilder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
+		{			
+			label = "Packages";
+			icon = Context.GetIcon (Stock.OpenReferenceFolder);
+			closedIcon = Context.GetIcon (Stock.ClosedReferenceFolder);
+		}
+		
+		public override bool HasChildNodes (ITreeBuilder builder, object dataObject)
+		{
+			return ((ProjectPackageCollection)dataObject).Count > 0;
+		}
+		
+		public override void BuildChildNodes (ITreeBuilder treeBuilder, object dataObject)
+		{
+			ProjectPackageCollection packages = (ProjectPackageCollection)dataObject;
+			
+			foreach (ProjectPackage p in packages)
+				treeBuilder.AddChild (p);
+		}
+		
+		public override string ContextMenuAddinPath {
+			get { return "/MonoDevelop/ValaBinding/Views/ProjectBrowser/ContextMenu/PackagesFolderNode"; }
+		}
+		
+		public override int CompareObjects (ITreeNavigator thisNode, ITreeNavigator otherNode)
+		{
+			return -1;
+		}
+		
+		private void OnAddPackage (object sender, ProjectPackageEventArgs e)
+		{
+			ITreeBuilder builder = Context.GetTreeBuilder (e.Project.Packages);
+			if (builder != null)
+				builder.UpdateAll ();
+		}
+		
+		private void OnRemovePackage (object sender, ProjectPackageEventArgs e)
+		{
+			ITreeBuilder builder = Context.GetTreeBuilder (e.Project.Packages);
+			if (builder != null)
+				builder.UpdateAll ();
+		}
+	}
+	
+	public class ProjectPackagesFolderNodeCommandHandler : NodeCommandHandler
+	{
+		[CommandHandler (MonoDevelop.ValaBinding.ValaProjectCommands.AddPackage)]
+		public void AddPackageToProject ()
+		{
+			ValaProject project = (ValaProject)CurrentNode.GetParentDataItem (
+			    typeof(ValaProject), false);
+			
+			EditPackagesDialog dialog = new EditPackagesDialog (project);
+			dialog.Run ();			
+			
+			IdeApp.ProjectOperations.Save (project);
+			CurrentNode.Expanded = true;
+		}
+		
+		// Currently only accepts packages and projects that compile into a static library
+		public override bool CanDropNode (object dataObject, DragOperation operation)
+		{
+			if (dataObject is ProjectPackage)
+				return true;
+			
+			if (dataObject is ValaProject) {
+				ValaProject project = (ValaProject)dataObject;
+				
+				if (((ProjectPackageCollection)CurrentNode.DataItem).Project.Equals (project))
+					return false;
+				
+				ValaProjectConfiguration config = (ValaProjectConfiguration)project.GetConfiguration (IdeApp.Workspace.ActiveConfiguration);
+				
+				if (config.CompileTarget != ValaBinding.CompileTarget.Bin)
+					return true;
+			}
+			
+			return false;
+		}
+		
+		public override DragOperation CanDragNode ()
+		{
+			return DragOperation.Copy | DragOperation.Move;
+		}
+		
+		public override void OnNodeDrop (object dataObject, DragOperation operation)
+		{
+			if (dataObject is ProjectPackage) {
+				ProjectPackage package = (ProjectPackage)dataObject;
+				ITreeNavigator nav = CurrentNode;
+				
+				ValaProject dest = nav.GetParentDataItem (typeof(ValaProject), true) as ValaProject;
+				nav.MoveToObject (dataObject);
+				ValaProject source = nav.GetParentDataItem (typeof(ValaProject), true) as ValaProject;
+				
+				dest.Packages.Add (package);
+				IdeApp.ProjectOperations.Save (dest);
+				
+				if (operation == DragOperation.Move) {
+					source.Packages.Remove (package);
+					IdeApp.ProjectOperations.Save (source);
+				}
+			} else if (dataObject is ValaProject) {
+				ValaProject draggedProject = (ValaProject)dataObject;
+				ValaProject destProject = (CurrentNode.DataItem as ProjectPackageCollection).Project;
+				
+				draggedProject.WriteMDPkgPackage (IdeApp.Workspace.ActiveConfiguration);
+				
+				ProjectPackage package = new ProjectPackage (draggedProject);
+				
+				if (!destProject.Packages.Contains (package)) {
+					destProject.Packages.Add (package);
+					IdeApp.ProjectOperations.Save (destProject);
+				}
+			}
+		}
+	}
+}
diff --git a/ProjectPad/ProjectReferencesExtension.cs b/ProjectPad/ProjectReferencesExtension.cs
new file mode 100644
index 0000000..1c7545a
--- /dev/null
+++ b/ProjectPad/ProjectReferencesExtension.cs
@@ -0,0 +1,57 @@
+//
+// ProjectReferencesExtension.cs: Hides the ProjectReferencesNode if this is a Vala project
+//
+// Authors:
+//   Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// Copyright (C) 2007 Marcos David Marin Amador
+//
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+using System;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Ide.Gui.Pads;
+using MonoDevelop.Ide.Gui.Components;
+
+namespace MonoDevelop.ValaBinding.ProjectPad
+{
+	public class ProjectReferencesExtension : NodeBuilderExtension
+	{
+		public override bool CanBuildNode (Type dataType)
+		{
+			return typeof(ProjectReferenceCollection).IsAssignableFrom (dataType);
+		}
+		
+		public override void GetNodeAttributes (ITreeNavigator parentNode, object dataObject, ref NodeAttributes attributes)
+		{
+			Project p = parentNode.DataItem as Project;
+			
+			if (p is ValaProject)
+				attributes |= NodeAttributes.Hidden;
+		}
+	}
+}
diff --git a/README b/README
new file mode 100644
index 0000000..4eaa14d
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+ValaBinding is a Vala language binding for MonoDevelop.
diff --git a/ValaBinding.addin.xml b/ValaBinding.addin.xml
new file mode 100644
index 0000000..16535dc
--- /dev/null
+++ b/ValaBinding.addin.xml
@@ -0,0 +1,165 @@
+<Addin id          = "ValaBinding"
+       namespace   = "MonoDevelop"
+       name		   = "Vala Language Binding"
+       author      = "Levi Bard"
+       copyright   = "MIT/X11"
+       url         = "http://www.monodevelop.com"
+       description = "Vala Language binding"
+       category    = "Language bindings"
+       version     = "1.9.3">
+
+	<Dependencies>
+		<Addin id = "Core" version = "1.9.3"/>
+		<Addin id = "Core.Gui" version = "1.9.3"/>
+		<Addin id = "Projects" version = "1.9.3"/>
+		<Addin id = "Projects.Gui" version = "1.9.3"/>
+		<Addin id = "Ide" version = "1.9.3"/>
+		<Addin id = "Components" version = "1.9.3"/>
+		<Addin id = "Deployment" version = "1.9.3"/>
+		<Addin id = "Deployment.Linux" version = "1.9.3"/>
+	</Dependencies>
+	
+	<Extension path = "/MonoDevelop/Core/StockIcons">
+		<StockIcon stockid = "md-union" resource = "Icons.16x16.Union"/>
+		<StockIcon stockid = "md-protected-union" resource = "Icons.16x16.ProtectedUnion"/>
+		<StockIcon stockid = "md-private-union" resource = "Icons.16x16.PrivateUnion"/>
+		<StockIcon stockid = "md-vala-file" resource = "text-x-vala.16x16.png" />
+	</Extension>
+	
+	<Extension path = "/MonoDevelop/Ide/FileFilters">
+		<FileFilter
+			id = "Vala"
+			insertbefore = "AllFiles"
+			_label = "Vala Files"
+			extensions = "*.vala,*.vapi" />
+	</Extension>
+
+	<Extension path = "/MonoDevelop/Ide/FileTemplates">
+		<FileTemplate id = "EmptyValaSourceFile" resource = "EmptyValaSourceFile.xft.xml"/>
+	</Extension>
+
+	<Extension path = "/MonoDevelop/Ide/ProjectTemplates">
+		<ProjectTemplate id = "EmptyValaProject" resource = "EmptyValaProject.xpt.xml"/>
+		<ProjectTemplate id = "ConsoleValaProject" resource = "ConsoleValaProject.xpt.xml"/>
+		<ProjectTemplate id = "SharedLibraryValaProject" resource = "SharedLibraryValaProject.xpt.xml"/>
+		<ProjectTemplate id = "ValaTestFixture" resource = "ValaTestFixture.xpt.xml"/>
+	</Extension>
+	
+	<Extension path = "/MonoDevelop/Core/MimeTypes">
+		<MimeType id="text/x-vala" icon="md-vala-file">
+			<File pattern="*.vala" />
+			<File pattern="*.vapi" />
+		</MimeType>
+	</Extension>
+
+	<Extension path = "/MonoDevelop/ProjectModel/Gui/Icons">
+		<Icon extensions = ".vala" icon = "res:text-x-vala.16x16.png"/>
+		<Icon extensions = ".vapi" icon = "res:text-x-vala.16x16.png"/>
+	</Extension>
+	
+	<Extension path = "/MonoDevelop/ProjectModel/ProjectBindings">
+		<ProjectBinding id = "ValaProject" class = "MonoDevelop.ValaBinding.ValaProjectBinding"/>
+	</Extension>
+	
+	<Extension path = "/MonoDevelop/ProjectModel/LanguageBindings">
+		<LanguageBinding
+			id = "Vala"
+		    supportedextensions = ".vala,.vapi"
+		    class = "MonoDevelop.ValaBinding.ValaLanguageBinding"/>
+    </Extension>
+    
+	<Extension path = "/MonoDevelop/Ide/GlobalOptionsDialog/Other">
+		<Section
+			id = "ValaBindingOptions"
+			_label = "Vala"
+			class = "MonoDevelop.ValaBinding.GeneralOptionsPanelBinding"/>
+	</Extension>
+
+	<Extension path = "/MonoDevelop/ProjectModel/Gui/ItemOptionPanels/Build">
+		<Condition id = "ItemType" value = "MonoDevelop.ValaBinding.ValaProject">
+			<Section
+				id = "CodeGenerationPanel"
+			    _label = "Code Generation"
+			    insertafter = "Compile"
+			    class = "MonoDevelop.ValaBinding.CodeGenerationPanelBinding"/>
+			<Section
+				id = "OutputOptionsPanel"
+			    _label = "Output"
+			    class = "MonoDevelop.ValaBinding.OutputOptionsPanelBinding"/>
+		</Condition>
+	</Extension>
+
+	<ExtensionPoint path = "/MonoDevelop/ValaBinding/Views/ProjectBrowser/ContextMenu/PackagesFolderNode" name = "Packages folder context menu">
+		<Description>Context menu for packages folder in the solution pad.</Description>
+		<ExtensionNodeSet id = "MonoDevelop.Components.Commands.ItemSet"/>
+	</ExtensionPoint>
+	
+	<ExtensionPoint path = "/MonoDevelop/ValaBinding/Views/ProjectBrowser/ContextMenu/PackageNode" name = "ProjectPackage context menu">
+		<Description>Context menu for a package in the solution pad.</Description>
+		<ExtensionNodeSet id = "MonoDevelop.Components.Commands.ItemSet"/>
+	</ExtensionPoint>
+
+	<Extension path = "/MonoDevelop/Ide/Pads/ProjectPad">
+		<NodeBuilder id = "MonoDevelop.ValaBinding.ProjectPad.ProjectReferencesExtension" class = "MonoDevelop.ValaBinding.ProjectPad.ProjectReferencesExtension"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.ProjectPad.ProjectPackagesFolderNodeBuilder" class = "MonoDevelop.ValaBinding.ProjectPad.ProjectPackagesFolderNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.ProjectPad.ProjectPackageNodeBuilder" class = "MonoDevelop.ValaBinding.ProjectPad.ProjectPackageNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.ProjectPad.ProjectNodeExtension" class = "MonoDevelop.ValaBinding.ProjectPad.ProjectNodeExtension"/>
+	</Extension>
+	
+	<Extension path = "/MonoDevelop/Ide/Pads/ClassPad">
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.ProjectNodeBuilderExtension" class = "MonoDevelop.ValaBinding.Navigation.ProjectNodeBuilderExtension"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.NamespaceNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.NamespaceNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.FunctionNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.FunctionNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.GlobalsNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.GlobalsNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.ClassNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.ClassNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.StructureNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.StructureNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.MemberNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.MemberNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.VariableNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.VariableNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.MacroDefinitionsNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.MacroDefinitionsNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.MacroNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.MacroNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.EnumerationNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.EnumerationNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.EnumeratorNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.EnumeratorNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.UnionNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.UnionNodeBuilder"/>
+		<NodeBuilder id = "MonoDevelop.ValaBinding.Navigation.TypedefNodeBuilder" class = "MonoDevelop.ValaBinding.Navigation.TypedefNodeBuilder"/>
+	</Extension>
+	
+	<Extension path = "/MonoDevelop/Ide/Commands">
+		<Category _name = "Vala" id = "Vala">
+			<Command id = "MonoDevelop.ValaBinding.ValaProjectCommands.UpdateClassPad" _label = "Update class pad" icon = "res:update" />
+			<Command id = "MonoDevelop.ValaBinding.ValaProjectCommands.AddPackage" _label = "Edit Packages..." />
+			<Command id = "MonoDevelop.ValaBinding.ValaProjectCommands.ShowPackageDetails" _label = "Details..." />
+		</Category>
+	</Extension>
+
+	<Extension path = "/MonoDevelop/ValaBinding/Views/ProjectBrowser/ContextMenu/PackagesFolderNode">
+		<CommandItem id = "MonoDevelop.ValaBinding.ValaProjectCommands.AddPackage"/>
+		<CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Paste"/>
+	</Extension>
+
+	<Extension path = "/MonoDevelop/Ide/ContextMenu/ClassPad/Project">
+		<CommandItem id = "MonoDevelop.ValaBinding.ValaProjectCommands.UpdateClassPad"/>
+	</Extension>
+	
+	<Extension path = "/MonoDevelop/ValaBinding/Views/ProjectBrowser/ContextMenu/PackageNode">
+		<CommandItem id = "MonoDevelop.ValaBinding.ValaProjectCommands.ShowPackageDetails"/>
+		<SeparatorItem id = "Separator1" />
+		<CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Copy"/>
+		<CommandItem id = "MonoDevelop.Ide.Commands.EditCommands.Delete"/>
+	</Extension>
+
+	<Extension path = "/MonoDevelop/Ide/TextEditorExtensions">
+		<Class class = "MonoDevelop.ValaBinding.ValaTextEditorExtension" />
+	</Extension>
+
+	<Extension path = "/MonoDevelop/ProjectModel/ProjectServiceExtensions">
+		<Class id = "ExtraSteps" class = "MonoDevelop.ValaBinding.ValaProjectServiceExtension"/>
+	</Extension>
+
+	<Extension path = "/MonoDevelop/ProjectModel/SerializableClasses">
+		<DataType class = "MonoDevelop.ValaBinding.ValaCompilationParameters"/>
+		<DataType class = "MonoDevelop.ValaBinding.ValaProjectConfiguration"/>
+		<DataType class = "MonoDevelop.ValaBinding.ValaProject"/>
+		<DataType class = "MonoDevelop.ValaBinding.ValaCompiler"/>
+		<DataType class = "MonoDevelop.ValaBinding.ProjectPackage"/>
+	</Extension>
+</Addin>
diff --git a/ValaLanguageBinding.cs b/ValaLanguageBinding.cs
new file mode 100644
index 0000000..6a411bd
--- /dev/null
+++ b/ValaLanguageBinding.cs
@@ -0,0 +1,75 @@
+//
+// ValaLanguageBinding.cs
+//
+// Authors:
+//  Levi Bard <taktaktaktaktaktaktaktaktaktak at gmail.com> 
+//
+// Copyright (C) 2008 Levi Bard
+// Based on CBinding by Marcos David Marin Amador <MarcosMarin at gmail.com>
+//
+// This source code is licenced under The MIT License:
+//
+// 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.
+//
+
+
+using System;
+using System.IO;
+
+using Mono.Addins;
+
+using MonoDevelop.Projects;
+using MonoDevelop.Core;
+using MonoDevelop.Projects.Dom.Parser;
+using MonoDevelop.Projects.CodeGeneration;
+
+namespace MonoDevelop.ValaBinding
+{
+	public class ValaLanguageBinding : ILanguageBinding
+	{
+		public string Language {
+			get { return "Vala"; }
+		}
+		
+		public string CommentTag {
+			get { return "//"; }
+		}
+		
+		public bool IsSourceCodeFile (string fileName)
+		{
+			string ext = Path.GetExtension(fileName);
+			return (ext.Equals(".vala", StringComparison.OrdinalIgnoreCase) ||
+			        ext.Equals(".vapi", StringComparison.OrdinalIgnoreCase));
+		}
+		
+		public IParser Parser {
+			get { return null; }
+		}
+		
+		public IRefactorer Refactorer {
+			get { return null; }
+		}
+		
+		public string GetFileName (string baseName)
+		{
+			return baseName + ".vala";
+		}
+	}
+}
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..a7b35b2
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,791 @@
+# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(AC_AUTOCONF_VERSION, [2.61],,
+[m4_warning([this file was generated for autoconf 2.61.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+		
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+		     [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+		[AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+	ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+		[$4])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 13
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+	      		     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/configure b/configure
new file mode 100755
index 0000000..ba86721
--- /dev/null
+++ b/configure
@@ -0,0 +1,5139 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for monodevelop-vala 1.9.3.
+#
+# Report bugs to <taktaktaktaktaktaktaktaktaktak at gmail.com>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes && 	 (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	   done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+	 # Try only shells that exist, to save several forks.
+	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		{ ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+	       as_have_required=yes
+	       if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf at gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='monodevelop-vala'
+PACKAGE_TARNAME='monodevelop-vala'
+PACKAGE_VERSION='1.9.3'
+PACKAGE_STRING='monodevelop-vala 1.9.3'
+PACKAGE_BUGREPORT='taktaktaktaktaktaktaktaktaktak at gmail.com'
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+am__isrc
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+MAINTAINER_MODE_TRUE
+MAINTAINER_MODE_FALSE
+MAINT
+MONO
+MCS
+PATH
+LD_LIBRARY_PATH
+PKG_CONFIG
+UNMANAGED_DEPENDENCIES_MONO_CFLAGS
+UNMANAGED_DEPENDENCIES_MONO_LIBS
+RUNTIME
+CSC
+MONO_ADDINS_CFLAGS
+MONO_ADDINS_LIBS
+MONO_ADDINS_SETUP_CFLAGS
+MONO_ADDINS_SETUP_LIBS
+MONO_ADDINS_GUI_CFLAGS
+MONO_ADDINS_GUI_LIBS
+GLIB_SHARP_CFLAGS
+GLIB_SHARP_LIBS
+GTK_SHARP_CFLAGS
+GTK_SHARP_LIBS
+GLADE_SHARP_CFLAGS
+GLADE_SHARP_LIBS
+MONODEVELOP_CFLAGS
+MONODEVELOP_LIBS
+MONODEVELOP_CORE_ADDINS_CFLAGS
+MONODEVELOP_CORE_ADDINS_LIBS
+GNOME_SHARP_CFLAGS
+GNOME_SHARP_LIBS
+HAVE_GNOME_SHARP_TRUE
+HAVE_GNOME_SHARP_FALSE
+GNOME_VFS_SHARP_CFLAGS
+GNOME_VFS_SHARP_LIBS
+HAVE_GNOME_VFS_SHARP_TRUE
+HAVE_GNOME_VFS_SHARP_FALSE
+GCONF_SHARP_CFLAGS
+GCONF_SHARP_LIBS
+HAVE_GCONF_SHARP_TRUE
+HAVE_GCONF_SHARP_FALSE
+gtksharp_prefix
+LIB_SUFFIX
+LIB_PREFIX
+ASSEMBLY_VERSION
+CSC_FLAGS
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+PKG_CONFIG
+UNMANAGED_DEPENDENCIES_MONO_CFLAGS
+UNMANAGED_DEPENDENCIES_MONO_LIBS
+MONO_ADDINS_CFLAGS
+MONO_ADDINS_LIBS
+MONO_ADDINS_SETUP_CFLAGS
+MONO_ADDINS_SETUP_LIBS
+MONO_ADDINS_GUI_CFLAGS
+MONO_ADDINS_GUI_LIBS
+GLIB_SHARP_CFLAGS
+GLIB_SHARP_LIBS
+GTK_SHARP_CFLAGS
+GTK_SHARP_LIBS
+GLADE_SHARP_CFLAGS
+GLADE_SHARP_LIBS
+MONODEVELOP_CFLAGS
+MONODEVELOP_LIBS
+MONODEVELOP_CORE_ADDINS_CFLAGS
+MONODEVELOP_CORE_ADDINS_LIBS
+GNOME_SHARP_CFLAGS
+GNOME_SHARP_LIBS
+GNOME_VFS_SHARP_CFLAGS
+GNOME_VFS_SHARP_LIBS
+GCONF_SHARP_CFLAGS
+GCONF_SHARP_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)	ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures monodevelop-vala 1.9.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/monodevelop-vala]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of monodevelop-vala 1.9.3:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+
+Some influential environment variables:
+  PKG_CONFIG  path to pkg-config utility
+  UNMANAGED_DEPENDENCIES_MONO_CFLAGS
+              C compiler flags for UNMANAGED_DEPENDENCIES_MONO, overriding
+              pkg-config
+  UNMANAGED_DEPENDENCIES_MONO_LIBS
+              linker flags for UNMANAGED_DEPENDENCIES_MONO, overriding
+              pkg-config
+  MONO_ADDINS_CFLAGS
+              C compiler flags for MONO_ADDINS, overriding pkg-config
+  MONO_ADDINS_LIBS
+              linker flags for MONO_ADDINS, overriding pkg-config
+  MONO_ADDINS_SETUP_CFLAGS
+              C compiler flags for MONO_ADDINS_SETUP, overriding pkg-config
+  MONO_ADDINS_SETUP_LIBS
+              linker flags for MONO_ADDINS_SETUP, overriding pkg-config
+  MONO_ADDINS_GUI_CFLAGS
+              C compiler flags for MONO_ADDINS_GUI, overriding pkg-config
+  MONO_ADDINS_GUI_LIBS
+              linker flags for MONO_ADDINS_GUI, overriding pkg-config
+  GLIB_SHARP_CFLAGS
+              C compiler flags for GLIB_SHARP, overriding pkg-config
+  GLIB_SHARP_LIBS
+              linker flags for GLIB_SHARP, overriding pkg-config
+  GTK_SHARP_CFLAGS
+              C compiler flags for GTK_SHARP, overriding pkg-config
+  GTK_SHARP_LIBS
+              linker flags for GTK_SHARP, overriding pkg-config
+  GLADE_SHARP_CFLAGS
+              C compiler flags for GLADE_SHARP, overriding pkg-config
+  GLADE_SHARP_LIBS
+              linker flags for GLADE_SHARP, overriding pkg-config
+  MONODEVELOP_CFLAGS
+              C compiler flags for MONODEVELOP, overriding pkg-config
+  MONODEVELOP_LIBS
+              linker flags for MONODEVELOP, overriding pkg-config
+  MONODEVELOP_CORE_ADDINS_CFLAGS
+              C compiler flags for MONODEVELOP_CORE_ADDINS, overriding
+              pkg-config
+  MONODEVELOP_CORE_ADDINS_LIBS
+              linker flags for MONODEVELOP_CORE_ADDINS, overriding pkg-config
+  GNOME_SHARP_CFLAGS
+              C compiler flags for GNOME_SHARP, overriding pkg-config
+  GNOME_SHARP_LIBS
+              linker flags for GNOME_SHARP, overriding pkg-config
+  GNOME_VFS_SHARP_CFLAGS
+              C compiler flags for GNOME_VFS_SHARP, overriding pkg-config
+  GNOME_VFS_SHARP_LIBS
+              linker flags for GNOME_VFS_SHARP, overriding pkg-config
+  GCONF_SHARP_CFLAGS
+              C compiler flags for GCONF_SHARP, overriding pkg-config
+  GCONF_SHARP_LIBS
+              linker flags for GCONF_SHARP, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <taktaktaktaktaktaktaktaktaktak at gmail.com>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+monodevelop-vala configure 1.9.3
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by monodevelop-vala $as_me 1.9.3, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+	"$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+am__api_version='1.10'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='monodevelop-vala'
+ VERSION='1.9.3'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+
+{ echo "$as_me:$LINENO: checking how to create a ustar tar archive" >&5
+echo $ECHO_N "checking how to create a ustar tar archive... $ECHO_C" >&6; }
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar plaintar pax cpio none'
+_am_tools=${am_cv_prog_tar_ustar-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      { echo "$as_me:$LINENO: $_am_tar --version" >&5
+   ($_am_tar --version) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && break
+    done
+    am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x ustar -w "$$tardir"'
+    am__tar_='pax -L -x ustar -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H ustar -L'
+    am__tar_='find "$tardir" -print | cpio -o -H ustar -L'
+    am__untar='cpio -i -H ustar -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_ustar}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5
+   (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    { echo "$as_me:$LINENO: $am__untar <conftest.tar" >&5
+   ($am__untar <conftest.tar) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+if test "${am_cv_prog_tar_ustar+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  am_cv_prog_tar_ustar=$_am_tool
+fi
+
+{ echo "$as_me:$LINENO: result: $am_cv_prog_tar_ustar" >&5
+echo "${ECHO_T}$am_cv_prog_tar_ustar" >&6; }
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+ASSEMBLY_VERSION=1.9.3.0
+
+# Extract the first word of "mono", so it can be a program name with args.
+set dummy mono; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MONO+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MONO in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MONO="$MONO" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_MONO="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MONO=$ac_cv_path_MONO
+if test -n "$MONO"; then
+  { echo "$as_me:$LINENO: result: $MONO" >&5
+echo "${ECHO_T}$MONO" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+# Extract the first word of "gmcs", so it can be a program name with args.
+set dummy gmcs; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MCS+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MCS in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MCS="$MCS" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MCS=$ac_cv_path_MCS
+if test -n "$MCS"; then
+  { echo "$as_me:$LINENO: result: $MCS" >&5
+echo "${ECHO_T}$MCS" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+if test "x$MONO" = "x" ; then
+	{ { echo "$as_me:$LINENO: error: Can't find \"mono\" in your PATH" >&5
+echo "$as_me: error: Can't find \"mono\" in your PATH" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+if test "x$MCS" = "x" ; then
+  { { echo "$as_me:$LINENO: error: Can't find \"gmcs\" in your PATH" >&5
+echo "$as_me: error: Can't find \"gmcs\" in your PATH" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+# Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+if test "x$PKG_CONFIG" = "xno"; then
+        { { echo "$as_me:$LINENO: error: You need to install pkg-config" >&5
+echo "$as_me: error: You need to install pkg-config" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+MONO_REQUIRED_VERSION=1.1.10
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	else
+		{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+		PKG_CONFIG=""
+	fi
+
+fi
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for UNMANAGED_DEPENDENCIES_MONO" >&5
+echo $ECHO_N "checking for UNMANAGED_DEPENDENCIES_MONO... $ECHO_C" >&6; }
+
+if test -n "$UNMANAGED_DEPENDENCIES_MONO_CFLAGS"; then
+    pkg_cv_UNMANAGED_DEPENDENCIES_MONO_CFLAGS="$UNMANAGED_DEPENDENCIES_MONO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono >= \$MONO_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono >= $MONO_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_UNMANAGED_DEPENDENCIES_MONO_CFLAGS=`$PKG_CONFIG --cflags "mono >= $MONO_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$UNMANAGED_DEPENDENCIES_MONO_LIBS"; then
+    pkg_cv_UNMANAGED_DEPENDENCIES_MONO_LIBS="$UNMANAGED_DEPENDENCIES_MONO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono >= \$MONO_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono >= $MONO_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_UNMANAGED_DEPENDENCIES_MONO_LIBS=`$PKG_CONFIG --libs "mono >= $MONO_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        UNMANAGED_DEPENDENCIES_MONO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono >= $MONO_REQUIRED_VERSION" 2>&1`
+        else
+	        UNMANAGED_DEPENDENCIES_MONO_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono >= $MONO_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$UNMANAGED_DEPENDENCIES_MONO_PKG_ERRORS" >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                has_mono=false
+elif test $pkg_failed = untried; then
+	has_mono=false
+else
+	UNMANAGED_DEPENDENCIES_MONO_CFLAGS=$pkg_cv_UNMANAGED_DEPENDENCIES_MONO_CFLAGS
+	UNMANAGED_DEPENDENCIES_MONO_LIBS=$pkg_cv_UNMANAGED_DEPENDENCIES_MONO_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	has_mono=true
+fi
+
+if test "x$has_mono" = "xfalse"; then
+      { { echo "$as_me:$LINENO: error: Please install mono version $MONO_REQUIRED_VERSION or later to install ValaBinding.
+Please see http://www.mono-project.org/ to download latest mono sources or packages" >&5
+echo "$as_me: error: Please install mono version $MONO_REQUIRED_VERSION or later to install ValaBinding.
+Please see http://www.mono-project.org/ to download latest mono sources or packages" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+if test "x$has_mono" = "xtrue"; then
+    if test `uname -s` = "Darwin"; then
+	# Extract the first word of "mono", so it can be a program name with args.
+set dummy mono; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_RUNTIME+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $RUNTIME in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_RUNTIME="$RUNTIME" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_RUNTIME="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_RUNTIME" && ac_cv_path_RUNTIME="no"
+  ;;
+esac
+fi
+RUNTIME=$ac_cv_path_RUNTIME
+if test -n "$RUNTIME"; then
+  { echo "$as_me:$LINENO: result: $RUNTIME" >&5
+echo "${ECHO_T}$RUNTIME" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+	# Extract the first word of "gmcs", so it can be a program name with args.
+set dummy gmcs; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_CSC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $CSC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_CSC="$CSC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_CSC="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_CSC" && ac_cv_path_CSC="no"
+  ;;
+esac
+fi
+CSC=$ac_cv_path_CSC
+if test -n "$CSC"; then
+  { echo "$as_me:$LINENO: result: $CSC" >&5
+echo "${ECHO_T}$CSC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+	LIB_PREFIX=
+	LIB_SUFFIX=.dylib
+    else
+	# Extract the first word of "mono", so it can be a program name with args.
+set dummy mono; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_RUNTIME+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $RUNTIME in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_RUNTIME="$RUNTIME" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_RUNTIME="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_RUNTIME" && ac_cv_path_RUNTIME="no"
+  ;;
+esac
+fi
+RUNTIME=$ac_cv_path_RUNTIME
+if test -n "$RUNTIME"; then
+  { echo "$as_me:$LINENO: result: $RUNTIME" >&5
+echo "${ECHO_T}$RUNTIME" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+	# Extract the first word of "gmcs", so it can be a program name with args.
+set dummy gmcs; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_CSC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $CSC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_CSC="$CSC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_CSC="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_CSC" && ac_cv_path_CSC="no"
+  ;;
+esac
+fi
+CSC=$ac_cv_path_CSC
+if test -n "$CSC"; then
+  { echo "$as_me:$LINENO: result: $CSC" >&5
+echo "${ECHO_T}$CSC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+	LIB_PREFIX=.so
+	LIB_SUFFIX=
+    fi
+fi
+
+
+MONOADDINS_REQUIRED_VERSION=0.3
+GTKSHARP_REQUIRED_VERSION=2.8.0
+MONODEVELOP_REQUIRED_VERSION=1.9.3
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for MONO_ADDINS" >&5
+echo $ECHO_N "checking for MONO_ADDINS... $ECHO_C" >&6; }
+
+if test -n "$MONO_ADDINS_CFLAGS"; then
+    pkg_cv_MONO_ADDINS_CFLAGS="$MONO_ADDINS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono-addins >= \$MONOADDINS_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono-addins >= $MONOADDINS_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONO_ADDINS_CFLAGS=`$PKG_CONFIG --cflags "mono-addins >= $MONOADDINS_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$MONO_ADDINS_LIBS"; then
+    pkg_cv_MONO_ADDINS_LIBS="$MONO_ADDINS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono-addins >= \$MONOADDINS_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono-addins >= $MONOADDINS_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONO_ADDINS_LIBS=`$PKG_CONFIG --libs "mono-addins >= $MONOADDINS_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        MONO_ADDINS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-addins >= $MONOADDINS_REQUIRED_VERSION" 2>&1`
+        else
+	        MONO_ADDINS_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-addins >= $MONOADDINS_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$MONO_ADDINS_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (mono-addins >= $MONOADDINS_REQUIRED_VERSION) were not met:
+
+$MONO_ADDINS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_CFLAGS
+and MONO_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (mono-addins >= $MONOADDINS_REQUIRED_VERSION) were not met:
+
+$MONO_ADDINS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_CFLAGS
+and MONO_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_ADDINS_CFLAGS
+and MONO_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_ADDINS_CFLAGS
+and MONO_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	MONO_ADDINS_CFLAGS=$pkg_cv_MONO_ADDINS_CFLAGS
+	MONO_ADDINS_LIBS=$pkg_cv_MONO_ADDINS_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for MONO_ADDINS_SETUP" >&5
+echo $ECHO_N "checking for MONO_ADDINS_SETUP... $ECHO_C" >&6; }
+
+if test -n "$MONO_ADDINS_SETUP_CFLAGS"; then
+    pkg_cv_MONO_ADDINS_SETUP_CFLAGS="$MONO_ADDINS_SETUP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono-addins-setup >= \$MONOADDINS_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONO_ADDINS_SETUP_CFLAGS=`$PKG_CONFIG --cflags "mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$MONO_ADDINS_SETUP_LIBS"; then
+    pkg_cv_MONO_ADDINS_SETUP_LIBS="$MONO_ADDINS_SETUP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono-addins-setup >= \$MONOADDINS_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONO_ADDINS_SETUP_LIBS=`$PKG_CONFIG --libs "mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        MONO_ADDINS_SETUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION" 2>&1`
+        else
+	        MONO_ADDINS_SETUP_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$MONO_ADDINS_SETUP_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION) were not met:
+
+$MONO_ADDINS_SETUP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_SETUP_CFLAGS
+and MONO_ADDINS_SETUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION) were not met:
+
+$MONO_ADDINS_SETUP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_SETUP_CFLAGS
+and MONO_ADDINS_SETUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_ADDINS_SETUP_CFLAGS
+and MONO_ADDINS_SETUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_ADDINS_SETUP_CFLAGS
+and MONO_ADDINS_SETUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	MONO_ADDINS_SETUP_CFLAGS=$pkg_cv_MONO_ADDINS_SETUP_CFLAGS
+	MONO_ADDINS_SETUP_LIBS=$pkg_cv_MONO_ADDINS_SETUP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for MONO_ADDINS_GUI" >&5
+echo $ECHO_N "checking for MONO_ADDINS_GUI... $ECHO_C" >&6; }
+
+if test -n "$MONO_ADDINS_GUI_CFLAGS"; then
+    pkg_cv_MONO_ADDINS_GUI_CFLAGS="$MONO_ADDINS_GUI_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono-addins-gui >= \$MONOADDINS_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONO_ADDINS_GUI_CFLAGS=`$PKG_CONFIG --cflags "mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$MONO_ADDINS_GUI_LIBS"; then
+    pkg_cv_MONO_ADDINS_GUI_LIBS="$MONO_ADDINS_GUI_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"mono-addins-gui >= \$MONOADDINS_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONO_ADDINS_GUI_LIBS=`$PKG_CONFIG --libs "mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        MONO_ADDINS_GUI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION" 2>&1`
+        else
+	        MONO_ADDINS_GUI_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$MONO_ADDINS_GUI_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION) were not met:
+
+$MONO_ADDINS_GUI_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_GUI_CFLAGS
+and MONO_ADDINS_GUI_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION) were not met:
+
+$MONO_ADDINS_GUI_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_GUI_CFLAGS
+and MONO_ADDINS_GUI_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_ADDINS_GUI_CFLAGS
+and MONO_ADDINS_GUI_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_ADDINS_GUI_CFLAGS
+and MONO_ADDINS_GUI_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	MONO_ADDINS_GUI_CFLAGS=$pkg_cv_MONO_ADDINS_GUI_CFLAGS
+	MONO_ADDINS_GUI_LIBS=$pkg_cv_MONO_ADDINS_GUI_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GLIB_SHARP" >&5
+echo $ECHO_N "checking for GLIB_SHARP... $ECHO_C" >&6; }
+
+if test -n "$GLIB_SHARP_CFLAGS"; then
+    pkg_cv_GLIB_SHARP_CFLAGS="$GLIB_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLIB_SHARP_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GLIB_SHARP_LIBS"; then
+    pkg_cv_GLIB_SHARP_LIBS="$GLIB_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLIB_SHARP_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GLIB_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        else
+	        GLIB_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GLIB_SHARP_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION) were not met:
+
+$GLIB_SHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLIB_SHARP_CFLAGS
+and GLIB_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION) were not met:
+
+$GLIB_SHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLIB_SHARP_CFLAGS
+and GLIB_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLIB_SHARP_CFLAGS
+and GLIB_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLIB_SHARP_CFLAGS
+and GLIB_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	GLIB_SHARP_CFLAGS=$pkg_cv_GLIB_SHARP_CFLAGS
+	GLIB_SHARP_LIBS=$pkg_cv_GLIB_SHARP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GTK_SHARP" >&5
+echo $ECHO_N "checking for GTK_SHARP... $ECHO_C" >&6; }
+
+if test -n "$GTK_SHARP_CFLAGS"; then
+    pkg_cv_GTK_SHARP_CFLAGS="$GTK_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GTK_SHARP_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GTK_SHARP_LIBS"; then
+    pkg_cv_GTK_SHARP_LIBS="$GTK_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GTK_SHARP_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GTK_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        else
+	        GTK_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GTK_SHARP_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION) were not met:
+
+$GTK_SHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GTK_SHARP_CFLAGS
+and GTK_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION) were not met:
+
+$GTK_SHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GTK_SHARP_CFLAGS
+and GTK_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GTK_SHARP_CFLAGS
+and GTK_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GTK_SHARP_CFLAGS
+and GTK_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	GTK_SHARP_CFLAGS=$pkg_cv_GTK_SHARP_CFLAGS
+	GTK_SHARP_LIBS=$pkg_cv_GTK_SHARP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GLADE_SHARP" >&5
+echo $ECHO_N "checking for GLADE_SHARP... $ECHO_C" >&6; }
+
+if test -n "$GLADE_SHARP_CFLAGS"; then
+    pkg_cv_GLADE_SHARP_CFLAGS="$GLADE_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glade-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLADE_SHARP_CFLAGS=`$PKG_CONFIG --cflags "glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GLADE_SHARP_LIBS"; then
+    pkg_cv_GLADE_SHARP_LIBS="$GLADE_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"glade-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GLADE_SHARP_LIBS=`$PKG_CONFIG --libs "glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GLADE_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        else
+	        GLADE_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GLADE_SHARP_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION) were not met:
+
+$GLADE_SHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLADE_SHARP_CFLAGS
+and GLADE_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION) were not met:
+
+$GLADE_SHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLADE_SHARP_CFLAGS
+and GLADE_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLADE_SHARP_CFLAGS
+and GLADE_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLADE_SHARP_CFLAGS
+and GLADE_SHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	GLADE_SHARP_CFLAGS=$pkg_cv_GLADE_SHARP_CFLAGS
+	GLADE_SHARP_LIBS=$pkg_cv_GLADE_SHARP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for MONODEVELOP" >&5
+echo $ECHO_N "checking for MONODEVELOP... $ECHO_C" >&6; }
+
+if test -n "$MONODEVELOP_CFLAGS"; then
+    pkg_cv_MONODEVELOP_CFLAGS="$MONODEVELOP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"monodevelop >= \$MONODEVELOP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "monodevelop >= $MONODEVELOP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONODEVELOP_CFLAGS=`$PKG_CONFIG --cflags "monodevelop >= $MONODEVELOP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$MONODEVELOP_LIBS"; then
+    pkg_cv_MONODEVELOP_LIBS="$MONODEVELOP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"monodevelop >= \$MONODEVELOP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "monodevelop >= $MONODEVELOP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONODEVELOP_LIBS=`$PKG_CONFIG --libs "monodevelop >= $MONODEVELOP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        MONODEVELOP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "monodevelop >= $MONODEVELOP_REQUIRED_VERSION" 2>&1`
+        else
+	        MONODEVELOP_PKG_ERRORS=`$PKG_CONFIG --print-errors "monodevelop >= $MONODEVELOP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$MONODEVELOP_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (monodevelop >= $MONODEVELOP_REQUIRED_VERSION) were not met:
+
+$MONODEVELOP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONODEVELOP_CFLAGS
+and MONODEVELOP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (monodevelop >= $MONODEVELOP_REQUIRED_VERSION) were not met:
+
+$MONODEVELOP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONODEVELOP_CFLAGS
+and MONODEVELOP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONODEVELOP_CFLAGS
+and MONODEVELOP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONODEVELOP_CFLAGS
+and MONODEVELOP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	MONODEVELOP_CFLAGS=$pkg_cv_MONODEVELOP_CFLAGS
+	MONODEVELOP_LIBS=$pkg_cv_MONODEVELOP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for MONODEVELOP_CORE_ADDINS" >&5
+echo $ECHO_N "checking for MONODEVELOP_CORE_ADDINS... $ECHO_C" >&6; }
+
+if test -n "$MONODEVELOP_CORE_ADDINS_CFLAGS"; then
+    pkg_cv_MONODEVELOP_CORE_ADDINS_CFLAGS="$MONODEVELOP_CORE_ADDINS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"monodevelop-core-addins >= \$MONODEVELOP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONODEVELOP_CORE_ADDINS_CFLAGS=`$PKG_CONFIG --cflags "monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$MONODEVELOP_CORE_ADDINS_LIBS"; then
+    pkg_cv_MONODEVELOP_CORE_ADDINS_LIBS="$MONODEVELOP_CORE_ADDINS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"monodevelop-core-addins >= \$MONODEVELOP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_MONODEVELOP_CORE_ADDINS_LIBS=`$PKG_CONFIG --libs "monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        MONODEVELOP_CORE_ADDINS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION" 2>&1`
+        else
+	        MONODEVELOP_CORE_ADDINS_PKG_ERRORS=`$PKG_CONFIG --print-errors "monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$MONODEVELOP_CORE_ADDINS_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION) were not met:
+
+$MONODEVELOP_CORE_ADDINS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONODEVELOP_CORE_ADDINS_CFLAGS
+and MONODEVELOP_CORE_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION) were not met:
+
+$MONODEVELOP_CORE_ADDINS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONODEVELOP_CORE_ADDINS_CFLAGS
+and MONODEVELOP_CORE_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONODEVELOP_CORE_ADDINS_CFLAGS
+and MONODEVELOP_CORE_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONODEVELOP_CORE_ADDINS_CFLAGS
+and MONODEVELOP_CORE_ADDINS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	MONODEVELOP_CORE_ADDINS_CFLAGS=$pkg_cv_MONODEVELOP_CORE_ADDINS_CFLAGS
+	MONODEVELOP_CORE_ADDINS_LIBS=$pkg_cv_MONODEVELOP_CORE_ADDINS_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GNOME_SHARP" >&5
+echo $ECHO_N "checking for GNOME_SHARP... $ECHO_C" >&6; }
+
+if test -n "$GNOME_SHARP_CFLAGS"; then
+    pkg_cv_GNOME_SHARP_CFLAGS="$GNOME_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnome-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gnome-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GNOME_SHARP_CFLAGS=`$PKG_CONFIG --cflags "gnome-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GNOME_SHARP_LIBS"; then
+    pkg_cv_GNOME_SHARP_LIBS="$GNOME_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnome-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gnome-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GNOME_SHARP_LIBS=`$PKG_CONFIG --libs "gnome-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GNOME_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnome-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        else
+	        GNOME_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnome-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GNOME_SHARP_PKG_ERRORS" >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                gnome_sharp=no
+elif test $pkg_failed = untried; then
+	gnome_sharp=no
+else
+	GNOME_SHARP_CFLAGS=$pkg_cv_GNOME_SHARP_CFLAGS
+	GNOME_SHARP_LIBS=$pkg_cv_GNOME_SHARP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	gnome_sharp=yes
+fi
+
+ if test x$gnome_sharp = xyes; then
+  HAVE_GNOME_SHARP_TRUE=
+  HAVE_GNOME_SHARP_FALSE='#'
+else
+  HAVE_GNOME_SHARP_TRUE='#'
+  HAVE_GNOME_SHARP_FALSE=
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GNOME_VFS_SHARP" >&5
+echo $ECHO_N "checking for GNOME_VFS_SHARP... $ECHO_C" >&6; }
+
+if test -n "$GNOME_VFS_SHARP_CFLAGS"; then
+    pkg_cv_GNOME_VFS_SHARP_CFLAGS="$GNOME_VFS_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnome-vfs-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GNOME_VFS_SHARP_CFLAGS=`$PKG_CONFIG --cflags "gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GNOME_VFS_SHARP_LIBS"; then
+    pkg_cv_GNOME_VFS_SHARP_LIBS="$GNOME_VFS_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gnome-vfs-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GNOME_VFS_SHARP_LIBS=`$PKG_CONFIG --libs "gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GNOME_VFS_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        else
+	        GNOME_VFS_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GNOME_VFS_SHARP_PKG_ERRORS" >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                gnome_vfs_sharp=no
+elif test $pkg_failed = untried; then
+	gnome_vfs_sharp=no
+else
+	GNOME_VFS_SHARP_CFLAGS=$pkg_cv_GNOME_VFS_SHARP_CFLAGS
+	GNOME_VFS_SHARP_LIBS=$pkg_cv_GNOME_VFS_SHARP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	gnome_vfs_sharp=yes
+fi
+
+ if test x$gnome_vfs_sharp = xyes; then
+  HAVE_GNOME_VFS_SHARP_TRUE=
+  HAVE_GNOME_VFS_SHARP_FALSE='#'
+else
+  HAVE_GNOME_VFS_SHARP_TRUE='#'
+  HAVE_GNOME_VFS_SHARP_FALSE=
+fi
+
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for GCONF_SHARP" >&5
+echo $ECHO_N "checking for GCONF_SHARP... $ECHO_C" >&6; }
+
+if test -n "$GCONF_SHARP_CFLAGS"; then
+    pkg_cv_GCONF_SHARP_CFLAGS="$GCONF_SHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gconf-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GCONF_SHARP_CFLAGS=`$PKG_CONFIG --cflags "gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$GCONF_SHARP_LIBS"; then
+    pkg_cv_GCONF_SHARP_LIBS="$GCONF_SHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gconf-sharp-2.0 >= \$GTKSHARP_REQUIRED_VERSION\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_GCONF_SHARP_LIBS=`$PKG_CONFIG --libs "gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        GCONF_SHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        else
+	        GCONF_SHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GCONF_SHARP_PKG_ERRORS" >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                gconf_sharp=no
+elif test $pkg_failed = untried; then
+	gconf_sharp=no
+else
+	GCONF_SHARP_CFLAGS=$pkg_cv_GCONF_SHARP_CFLAGS
+	GCONF_SHARP_LIBS=$pkg_cv_GCONF_SHARP_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	gconf_sharp=yes
+fi
+
+ if test x$gconf_sharp = xyes; then
+  HAVE_GCONF_SHARP_TRUE=
+  HAVE_GCONF_SHARP_FALSE='#'
+else
+  HAVE_GCONF_SHARP_TRUE='#'
+  HAVE_GCONF_SHARP_FALSE=
+fi
+
+
+gtksharp_prefix="`$PKG_CONFIG --variable=prefix gtk-sharp-2.0`"
+
+
+platform_bindings=""
+
+CSC_FLAGS="-debug -codepage:utf8"
+
+
+
+
+
+
+ac_config_files="$ac_config_files Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+t clear
+:clear
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+	g
+	s/^\n//
+	s/\n/ /g
+	p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GNOME_SHARP_TRUE}" && test -z "${HAVE_GNOME_SHARP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_GNOME_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_GNOME_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GNOME_VFS_SHARP_TRUE}" && test -z "${HAVE_GNOME_VFS_SHARP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_GNOME_VFS_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_GNOME_VFS_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_GCONF_SHARP_TRUE}" && test -z "${HAVE_GCONF_SHARP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAVE_GCONF_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_GCONF_SHARP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by monodevelop-vala $as_me 1.9.3, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf at gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+monodevelop-vala config.status 1.9.3
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h |  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+am__isrc!$am__isrc$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim
+MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim
+MAINT!$MAINT$ac_delim
+MONO!$MONO$ac_delim
+MCS!$MCS$ac_delim
+PATH!$PATH$ac_delim
+LD_LIBRARY_PATH!$LD_LIBRARY_PATH$ac_delim
+PKG_CONFIG!$PKG_CONFIG$ac_delim
+UNMANAGED_DEPENDENCIES_MONO_CFLAGS!$UNMANAGED_DEPENDENCIES_MONO_CFLAGS$ac_delim
+UNMANAGED_DEPENDENCIES_MONO_LIBS!$UNMANAGED_DEPENDENCIES_MONO_LIBS$ac_delim
+RUNTIME!$RUNTIME$ac_delim
+CSC!$CSC$ac_delim
+MONO_ADDINS_CFLAGS!$MONO_ADDINS_CFLAGS$ac_delim
+MONO_ADDINS_LIBS!$MONO_ADDINS_LIBS$ac_delim
+MONO_ADDINS_SETUP_CFLAGS!$MONO_ADDINS_SETUP_CFLAGS$ac_delim
+MONO_ADDINS_SETUP_LIBS!$MONO_ADDINS_SETUP_LIBS$ac_delim
+MONO_ADDINS_GUI_CFLAGS!$MONO_ADDINS_GUI_CFLAGS$ac_delim
+MONO_ADDINS_GUI_LIBS!$MONO_ADDINS_GUI_LIBS$ac_delim
+GLIB_SHARP_CFLAGS!$GLIB_SHARP_CFLAGS$ac_delim
+GLIB_SHARP_LIBS!$GLIB_SHARP_LIBS$ac_delim
+GTK_SHARP_CFLAGS!$GTK_SHARP_CFLAGS$ac_delim
+GTK_SHARP_LIBS!$GTK_SHARP_LIBS$ac_delim
+GLADE_SHARP_CFLAGS!$GLADE_SHARP_CFLAGS$ac_delim
+GLADE_SHARP_LIBS!$GLADE_SHARP_LIBS$ac_delim
+MONODEVELOP_CFLAGS!$MONODEVELOP_CFLAGS$ac_delim
+MONODEVELOP_LIBS!$MONODEVELOP_LIBS$ac_delim
+MONODEVELOP_CORE_ADDINS_CFLAGS!$MONODEVELOP_CORE_ADDINS_CFLAGS$ac_delim
+MONODEVELOP_CORE_ADDINS_LIBS!$MONODEVELOP_CORE_ADDINS_LIBS$ac_delim
+GNOME_SHARP_CFLAGS!$GNOME_SHARP_CFLAGS$ac_delim
+GNOME_SHARP_LIBS!$GNOME_SHARP_LIBS$ac_delim
+HAVE_GNOME_SHARP_TRUE!$HAVE_GNOME_SHARP_TRUE$ac_delim
+HAVE_GNOME_SHARP_FALSE!$HAVE_GNOME_SHARP_FALSE$ac_delim
+GNOME_VFS_SHARP_CFLAGS!$GNOME_VFS_SHARP_CFLAGS$ac_delim
+GNOME_VFS_SHARP_LIBS!$GNOME_VFS_SHARP_LIBS$ac_delim
+HAVE_GNOME_VFS_SHARP_TRUE!$HAVE_GNOME_VFS_SHARP_TRUE$ac_delim
+HAVE_GNOME_VFS_SHARP_FALSE!$HAVE_GNOME_VFS_SHARP_FALSE$ac_delim
+GCONF_SHARP_CFLAGS!$GCONF_SHARP_CFLAGS$ac_delim
+GCONF_SHARP_LIBS!$GCONF_SHARP_LIBS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+HAVE_GCONF_SHARP_TRUE!$HAVE_GCONF_SHARP_TRUE$ac_delim
+HAVE_GCONF_SHARP_FALSE!$HAVE_GCONF_SHARP_FALSE$ac_delim
+gtksharp_prefix!$gtksharp_prefix$ac_delim
+LIB_SUFFIX!$LIB_SUFFIX$ac_delim
+LIB_PREFIX!$LIB_PREFIX$ac_delim
+ASSEMBLY_VERSION!$ASSEMBLY_VERSION$ac_delim
+CSC_FLAGS!$CSC_FLAGS$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 9; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      ac_file_inputs="$ac_file_inputs $ac_f"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input="Generated from "`IFS=:
+	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+
+
+
+  esac
+
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..54cc946
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,97 @@
+AC_INIT([monodevelop-vala], 1.9.3, [taktaktaktaktaktaktaktaktaktak at gmail.com])
+AC_PREREQ(2.53)
+AM_INIT_AUTOMAKE(1.9 tar-ustar)
+AM_MAINTAINER_MODE
+
+ASSEMBLY_VERSION=1.9.3.0
+
+AC_PATH_PROG(MONO, mono)
+AC_PATH_PROG(MCS, gmcs)
+
+if test "x$MONO" = "x" ; then
+	AC_MSG_ERROR([Can't find "mono" in your PATH])
+fi
+
+if test "x$MCS" = "x" ; then
+  AC_MSG_ERROR([Can't find "gmcs" in your PATH])
+fi
+AC_SUBST(PATH)
+AC_SUBST(LD_LIBRARY_PATH)
+
+dnl Find pkg-config
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+if test "x$PKG_CONFIG" = "xno"; then
+        AC_MSG_ERROR([You need to install pkg-config])
+fi
+
+MONO_REQUIRED_VERSION=1.1.10
+PKG_CHECK_MODULES(UNMANAGED_DEPENDENCIES_MONO,mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false)
+
+if test "x$has_mono" = "xfalse"; then
+      AC_MSG_ERROR([Please install mono version $MONO_REQUIRED_VERSION or later to install ValaBinding.
+Please see http://www.mono-project.org/ to download latest mono sources or packages])
+fi
+
+if test "x$has_mono" = "xtrue"; then
+    if test `uname -s` = "Darwin"; then
+	AC_PATH_PROG(RUNTIME, mono, no)
+	AC_PATH_PROG(CSC, gmcs, no)
+	LIB_PREFIX=
+	LIB_SUFFIX=.dylib
+    else
+	AC_PATH_PROG(RUNTIME, mono, no)
+	AC_PATH_PROG(CSC, gmcs, no)
+	LIB_PREFIX=.so
+	LIB_SUFFIX=
+    fi
+fi
+
+
+dnl hard dependencies
+MONOADDINS_REQUIRED_VERSION=0.3
+GTKSHARP_REQUIRED_VERSION=2.8.0
+MONODEVELOP_REQUIRED_VERSION=1.9.3
+
+PKG_CHECK_MODULES(MONO_ADDINS, mono-addins >= $MONOADDINS_REQUIRED_VERSION)
+AC_SUBST(MONO_ADDINS_LIBS)
+PKG_CHECK_MODULES(MONO_ADDINS_SETUP, mono-addins-setup >= $MONOADDINS_REQUIRED_VERSION)
+AC_SUBST(MONO_ADDINS_SETUP_LIBS)
+PKG_CHECK_MODULES(MONO_ADDINS_GUI, mono-addins-gui >= $MONOADDINS_REQUIRED_VERSION)
+AC_SUBST(MONO_ADDINS_GUI_LIBS)
+PKG_CHECK_MODULES(GLIB_SHARP, glib-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION)
+AC_SUBST(GLIB_SHARP_LIBS)
+PKG_CHECK_MODULES(GTK_SHARP, gtk-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION)
+AC_SUBST(GTK_SHARP_LIBS)
+PKG_CHECK_MODULES(GLADE_SHARP, glade-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION)
+AC_SUBST(GLADE_SHARP_LIBS)
+PKG_CHECK_MODULES(MONODEVELOP, monodevelop >= $MONODEVELOP_REQUIRED_VERSION)
+AC_SUBST(MONODEVELOP_LIBS)
+PKG_CHECK_MODULES(MONODEVELOP_CORE_ADDINS, monodevelop-core-addins >= $MONODEVELOP_REQUIRED_VERSION)
+AC_SUBST(MONODEVELOP_CORE_ADDINS_LIBS)
+
+dnl soft dependencies
+PKG_CHECK_MODULES(GNOME_SHARP, gnome-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION, [gnome_sharp=yes], [gnome_sharp=no])
+AC_SUBST(GNOME_SHARP_LIBS)
+AM_CONDITIONAL(HAVE_GNOME_SHARP, test x$gnome_sharp = xyes)
+PKG_CHECK_MODULES(GNOME_VFS_SHARP, gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION, [gnome_vfs_sharp=yes], [gnome_vfs_sharp=no])
+AC_SUBST(GNOME_VFS_SHARP_LIBS)
+AM_CONDITIONAL(HAVE_GNOME_VFS_SHARP, test x$gnome_vfs_sharp = xyes)
+PKG_CHECK_MODULES(GCONF_SHARP, gconf-sharp-2.0 >= $GTKSHARP_REQUIRED_VERSION, [gconf_sharp=yes], [gconf_sharp=no])
+AC_SUBST(GCONF_SHARP_LIBS)
+AM_CONDITIONAL(HAVE_GCONF_SHARP, test x$gconf_sharp = xyes)
+
+gtksharp_prefix="`$PKG_CONFIG --variable=prefix gtk-sharp-2.0`"
+AC_SUBST(gtksharp_prefix)
+
+platform_bindings=""
+
+CSC_FLAGS="-debug -codepage:utf8"
+
+AC_SUBST(LIB_SUFFIX)
+AC_SUBST(LIB_PREFIX)
+AC_SUBST(ASSEMBLY_VERSION)
+AC_SUBST(CSC_FLAGS)
+
+AC_OUTPUT([
+Makefile
+])
diff --git a/gtk-gui/MonoDevelop.ValaBinding.AddLibraryDialog.cs b/gtk-gui/MonoDevelop.ValaBinding.AddLibraryDialog.cs
new file mode 100644
index 0000000..1b7ff84
--- /dev/null
+++ b/gtk-gui/MonoDevelop.ValaBinding.AddLibraryDialog.cs
@@ -0,0 +1,80 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.ValaBinding {
+    
+    
+    public partial class AddLibraryDialog {
+        
+        private Gtk.FileChooserWidget file_chooser_widget;
+        
+        private Gtk.Button buttonCancel;
+        
+        private Gtk.Button buttonOk;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize(this);
+            // Widget MonoDevelop.ValaBinding.AddLibraryDialog
+            this.Name = "MonoDevelop.ValaBinding.AddLibraryDialog";
+            this.Title = Mono.Unix.Catalog.GetString("Add Library");
+            this.Modal = true;
+            // Internal child MonoDevelop.ValaBinding.AddLibraryDialog.VBox
+            Gtk.VBox w1 = this.VBox;
+            w1.Name = "dialog1_VBox";
+            w1.Spacing = 6;
+            w1.BorderWidth = ((uint)(2));
+            // Container child dialog1_VBox.Gtk.Box+BoxChild
+            this.file_chooser_widget = new Gtk.FileChooserWidget(((Gtk.FileChooserAction)(0)));
+            this.file_chooser_widget.Name = "file_chooser_widget";
+            w1.Add(this.file_chooser_widget);
+            Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(w1[this.file_chooser_widget]));
+            w2.Position = 0;
+            // Internal child MonoDevelop.ValaBinding.AddLibraryDialog.ActionArea
+            Gtk.HButtonBox w3 = this.ActionArea;
+            w3.Name = "dialog1_ActionArea";
+            w3.Spacing = 6;
+            w3.BorderWidth = ((uint)(5));
+            w3.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
+            // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+            this.buttonCancel = new Gtk.Button();
+            this.buttonCancel.CanDefault = true;
+            this.buttonCancel.CanFocus = true;
+            this.buttonCancel.Name = "buttonCancel";
+            this.buttonCancel.UseStock = true;
+            this.buttonCancel.UseUnderline = true;
+            this.buttonCancel.Label = "gtk-cancel";
+            this.AddActionWidget(this.buttonCancel, -6);
+            Gtk.ButtonBox.ButtonBoxChild w4 = ((Gtk.ButtonBox.ButtonBoxChild)(w3[this.buttonCancel]));
+            w4.Expand = false;
+            w4.Fill = false;
+            // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+            this.buttonOk = new Gtk.Button();
+            this.buttonOk.CanDefault = true;
+            this.buttonOk.CanFocus = true;
+            this.buttonOk.Name = "buttonOk";
+            this.buttonOk.UseStock = true;
+            this.buttonOk.UseUnderline = true;
+            this.buttonOk.Label = "gtk-ok";
+            this.AddActionWidget(this.buttonOk, -5);
+            Gtk.ButtonBox.ButtonBoxChild w5 = ((Gtk.ButtonBox.ButtonBoxChild)(w3[this.buttonOk]));
+            w5.Position = 1;
+            w5.Expand = false;
+            w5.Fill = false;
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.DefaultWidth = 648;
+            this.DefaultHeight = 439;
+            this.Show();
+            this.buttonCancel.Clicked += new System.EventHandler(this.OnCancelButtonClick);
+            this.buttonOk.Clicked += new System.EventHandler(this.OnOkButtonClick);
+        }
+    }
+}
diff --git a/gtk-gui/MonoDevelop.ValaBinding.AddPathDialog.cs b/gtk-gui/MonoDevelop.ValaBinding.AddPathDialog.cs
new file mode 100644
index 0000000..7a734ea
--- /dev/null
+++ b/gtk-gui/MonoDevelop.ValaBinding.AddPathDialog.cs
@@ -0,0 +1,81 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.ValaBinding {
+    
+    
+    public partial class AddPathDialog {
+        
+        private Gtk.FileChooserWidget file_chooser_widget;
+        
+        private Gtk.Button buttonCancel;
+        
+        private Gtk.Button buttonOk;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize(this);
+            // Widget MonoDevelop.ValaBinding.AddPathDialog
+            this.Name = "MonoDevelop.ValaBinding.AddPathDialog";
+            this.Title = Mono.Unix.Catalog.GetString("Add Path");
+            this.Modal = true;
+            // Internal child MonoDevelop.ValaBinding.AddPathDialog.VBox
+            Gtk.VBox w1 = this.VBox;
+            w1.Name = "dialog1_VBox";
+            w1.Spacing = 6;
+            w1.BorderWidth = ((uint)(2));
+            // Container child dialog1_VBox.Gtk.Box+BoxChild
+            this.file_chooser_widget = new Gtk.FileChooserWidget(((Gtk.FileChooserAction)(0)));
+            this.file_chooser_widget.Name = "file_chooser_widget";
+            this.file_chooser_widget.ShowHidden = true;
+            w1.Add(this.file_chooser_widget);
+            Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(w1[this.file_chooser_widget]));
+            w2.Position = 0;
+            // Internal child MonoDevelop.ValaBinding.AddPathDialog.ActionArea
+            Gtk.HButtonBox w3 = this.ActionArea;
+            w3.Name = "dialog1_ActionArea";
+            w3.Spacing = 6;
+            w3.BorderWidth = ((uint)(5));
+            w3.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
+            // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+            this.buttonCancel = new Gtk.Button();
+            this.buttonCancel.CanDefault = true;
+            this.buttonCancel.CanFocus = true;
+            this.buttonCancel.Name = "buttonCancel";
+            this.buttonCancel.UseStock = true;
+            this.buttonCancel.UseUnderline = true;
+            this.buttonCancel.Label = "gtk-cancel";
+            this.AddActionWidget(this.buttonCancel, -6);
+            Gtk.ButtonBox.ButtonBoxChild w4 = ((Gtk.ButtonBox.ButtonBoxChild)(w3[this.buttonCancel]));
+            w4.Expand = false;
+            w4.Fill = false;
+            // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+            this.buttonOk = new Gtk.Button();
+            this.buttonOk.CanDefault = true;
+            this.buttonOk.CanFocus = true;
+            this.buttonOk.Name = "buttonOk";
+            this.buttonOk.UseStock = true;
+            this.buttonOk.UseUnderline = true;
+            this.buttonOk.Label = "gtk-ok";
+            this.AddActionWidget(this.buttonOk, -5);
+            Gtk.ButtonBox.ButtonBoxChild w5 = ((Gtk.ButtonBox.ButtonBoxChild)(w3[this.buttonOk]));
+            w5.Position = 1;
+            w5.Expand = false;
+            w5.Fill = false;
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.DefaultWidth = 649;
+            this.DefaultHeight = 436;
+            this.Show();
+            this.buttonCancel.Clicked += new System.EventHandler(this.OnCancelButtonClick);
+            this.buttonOk.Clicked += new System.EventHandler(this.OnOkButtonClick);
+        }
+    }
+}
diff --git a/gtk-gui/MonoDevelop.ValaBinding.CodeGenerationPanel.cs b/gtk-gui/MonoDevelop.ValaBinding.CodeGenerationPanel.cs
new file mode 100644
index 0000000..bf3041d
--- /dev/null
+++ b/gtk-gui/MonoDevelop.ValaBinding.CodeGenerationPanel.cs
@@ -0,0 +1,597 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.ValaBinding {
+    
+    
+    public partial class CodeGenerationPanel {
+        
+        private Gtk.Notebook notebook1;
+        
+        private Gtk.VBox vbox6;
+        
+        private Gtk.Table table1;
+        
+        private Gtk.Label label10;
+        
+        private Gtk.Label label4;
+        
+        private Gtk.Label label5;
+        
+        private Gtk.Label label6;
+        
+        private Gtk.SpinButton optimizationSpinButton;
+        
+        private Gtk.ComboBox targetComboBox;
+        
+        private Gtk.CheckButton threadingCheckbox;
+        
+        private Gtk.VBox vbox1;
+        
+        private Gtk.RadioButton noWarningRadio;
+        
+        private Gtk.RadioButton normalWarningRadio;
+        
+        private Gtk.RadioButton allWarningRadio;
+        
+        private Gtk.CheckButton warningsAsErrorsCheckBox;
+        
+        private Gtk.HBox hbox1;
+        
+        private Gtk.Label label12;
+        
+        private Gtk.Entry defineSymbolsTextEntry;
+        
+        private Gtk.Frame frame2;
+        
+        private Gtk.Alignment GtkAlignment;
+        
+        private Gtk.Table table5;
+        
+        private Gtk.Label label7;
+        
+        private Gtk.ScrolledWindow scrolledwindow4;
+        
+        private Gtk.TextView extraCompilerTextView;
+        
+        private Gtk.Label GtkLabel12;
+        
+        private Gtk.Label label1;
+        
+        private Gtk.Table table2;
+        
+        private Gtk.Button addLibButton;
+        
+        private Gtk.Label label8;
+        
+        private Gtk.Entry libAddEntry;
+        
+        private Gtk.ScrolledWindow scrolledwindow1;
+        
+        private Gtk.TreeView libTreeView;
+        
+        private Gtk.VBox vbox4;
+        
+        private Gtk.Button browseButton;
+        
+        private Gtk.Button removeLibButton;
+        
+        private Gtk.Label label2;
+        
+        private Gtk.VBox vbox7;
+        
+        private Gtk.Table table3;
+        
+        private Gtk.Button includePathAddButton;
+        
+        private Gtk.Entry includePathEntry;
+        
+        private Gtk.Label label9;
+        
+        private Gtk.ScrolledWindow scrolledwindow2;
+        
+        private Gtk.TreeView includePathTreeView;
+        
+        private Gtk.VBox vbox5;
+        
+        private Gtk.Button includePathBrowseButton;
+        
+        private Gtk.Button includePathRemoveButton;
+        
+        private Gtk.Label label3;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize(this);
+            // Widget MonoDevelop.ValaBinding.CodeGenerationPanel
+            Stetic.BinContainer.Attach(this);
+            this.Name = "MonoDevelop.ValaBinding.CodeGenerationPanel";
+            // Container child MonoDevelop.ValaBinding.CodeGenerationPanel.Gtk.Container+ContainerChild
+            this.notebook1 = new Gtk.Notebook();
+            this.notebook1.CanFocus = true;
+            this.notebook1.Name = "notebook1";
+            this.notebook1.CurrentPage = 0;
+            // Container child notebook1.Gtk.Notebook+NotebookChild
+            this.vbox6 = new Gtk.VBox();
+            this.vbox6.Name = "vbox6";
+            this.vbox6.Spacing = 3;
+            // Container child vbox6.Gtk.Box+BoxChild
+            this.table1 = new Gtk.Table(((uint)(4)), ((uint)(2)), false);
+            this.table1.Name = "table1";
+            this.table1.RowSpacing = ((uint)(5));
+            this.table1.ColumnSpacing = ((uint)(5));
+            this.table1.BorderWidth = ((uint)(2));
+            // Container child table1.Gtk.Table+TableChild
+            this.label10 = new Gtk.Label();
+            this.label10.Name = "label10";
+            this.label10.Xpad = 10;
+            this.label10.Xalign = 0F;
+            this.label10.LabelProp = Mono.Unix.Catalog.GetString("Warning Level:");
+            this.table1.Add(this.label10);
+            Gtk.Table.TableChild w1 = ((Gtk.Table.TableChild)(this.table1[this.label10]));
+            w1.XOptions = ((Gtk.AttachOptions)(4));
+            w1.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label4 = new Gtk.Label();
+            this.label4.Name = "label4";
+            this.label4.Xpad = 10;
+            this.label4.Xalign = 0F;
+            this.label4.LabelProp = Mono.Unix.Catalog.GetString("Multithreading:");
+            this.table1.Add(this.label4);
+            Gtk.Table.TableChild w2 = ((Gtk.Table.TableChild)(this.table1[this.label4]));
+            w2.TopAttach = ((uint)(3));
+            w2.BottomAttach = ((uint)(4));
+            w2.XOptions = ((Gtk.AttachOptions)(4));
+            w2.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label5 = new Gtk.Label();
+            this.label5.Name = "label5";
+            this.label5.Xpad = 10;
+            this.label5.Xalign = 0F;
+            this.label5.LabelProp = Mono.Unix.Catalog.GetString("Optimization Level:");
+            this.table1.Add(this.label5);
+            Gtk.Table.TableChild w3 = ((Gtk.Table.TableChild)(this.table1[this.label5]));
+            w3.TopAttach = ((uint)(1));
+            w3.BottomAttach = ((uint)(2));
+            w3.XOptions = ((Gtk.AttachOptions)(4));
+            w3.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label6 = new Gtk.Label();
+            this.label6.Name = "label6";
+            this.label6.Xpad = 10;
+            this.label6.Xalign = 0F;
+            this.label6.LabelProp = Mono.Unix.Catalog.GetString("Target:");
+            this.table1.Add(this.label6);
+            Gtk.Table.TableChild w4 = ((Gtk.Table.TableChild)(this.table1[this.label6]));
+            w4.TopAttach = ((uint)(2));
+            w4.BottomAttach = ((uint)(3));
+            w4.XOptions = ((Gtk.AttachOptions)(4));
+            w4.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.optimizationSpinButton = new Gtk.SpinButton(0, 3, 1);
+            this.optimizationSpinButton.Sensitive = false;
+            this.optimizationSpinButton.CanFocus = true;
+            this.optimizationSpinButton.Name = "optimizationSpinButton";
+            this.optimizationSpinButton.Adjustment.PageIncrement = 10;
+            this.optimizationSpinButton.ClimbRate = 1;
+            this.optimizationSpinButton.Numeric = true;
+            this.table1.Add(this.optimizationSpinButton);
+            Gtk.Table.TableChild w5 = ((Gtk.Table.TableChild)(this.table1[this.optimizationSpinButton]));
+            w5.TopAttach = ((uint)(1));
+            w5.BottomAttach = ((uint)(2));
+            w5.LeftAttach = ((uint)(1));
+            w5.RightAttach = ((uint)(2));
+            w5.XOptions = ((Gtk.AttachOptions)(4));
+            w5.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.targetComboBox = Gtk.ComboBox.NewText();
+            this.targetComboBox.AppendText(Mono.Unix.Catalog.GetString("Executable"));
+            this.targetComboBox.AppendText(Mono.Unix.Catalog.GetString("Static Library"));
+            this.targetComboBox.AppendText(Mono.Unix.Catalog.GetString("Shared Object"));
+            this.targetComboBox.Name = "targetComboBox";
+            this.table1.Add(this.targetComboBox);
+            Gtk.Table.TableChild w6 = ((Gtk.Table.TableChild)(this.table1[this.targetComboBox]));
+            w6.TopAttach = ((uint)(2));
+            w6.BottomAttach = ((uint)(3));
+            w6.LeftAttach = ((uint)(1));
+            w6.RightAttach = ((uint)(2));
+            w6.XOptions = ((Gtk.AttachOptions)(4));
+            w6.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.threadingCheckbox = new Gtk.CheckButton();
+            this.threadingCheckbox.CanFocus = true;
+            this.threadingCheckbox.Name = "threadingCheckbox";
+            this.threadingCheckbox.Label = Mono.Unix.Catalog.GetString("Enable multithreading");
+            this.threadingCheckbox.DrawIndicator = true;
+            this.threadingCheckbox.UseUnderline = true;
+            this.table1.Add(this.threadingCheckbox);
+            Gtk.Table.TableChild w7 = ((Gtk.Table.TableChild)(this.table1[this.threadingCheckbox]));
+            w7.TopAttach = ((uint)(3));
+            w7.BottomAttach = ((uint)(4));
+            w7.LeftAttach = ((uint)(1));
+            w7.RightAttach = ((uint)(2));
+            w7.XOptions = ((Gtk.AttachOptions)(4));
+            w7.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.vbox1 = new Gtk.VBox();
+            this.vbox1.Name = "vbox1";
+            this.vbox1.Spacing = 1;
+            // Container child vbox1.Gtk.Box+BoxChild
+            this.noWarningRadio = new Gtk.RadioButton(Mono.Unix.Catalog.GetString("no warnings"));
+            this.noWarningRadio.CanFocus = true;
+            this.noWarningRadio.Name = "noWarningRadio";
+            this.noWarningRadio.Active = true;
+            this.noWarningRadio.DrawIndicator = true;
+            this.noWarningRadio.UseUnderline = true;
+            this.noWarningRadio.Group = new GLib.SList(System.IntPtr.Zero);
+            this.vbox1.Add(this.noWarningRadio);
+            Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.vbox1[this.noWarningRadio]));
+            w8.Position = 0;
+            w8.Expand = false;
+            w8.Fill = false;
+            // Container child vbox1.Gtk.Box+BoxChild
+            this.normalWarningRadio = new Gtk.RadioButton(Mono.Unix.Catalog.GetString("normal"));
+            this.normalWarningRadio.CanFocus = true;
+            this.normalWarningRadio.Name = "normalWarningRadio";
+            this.normalWarningRadio.DrawIndicator = true;
+            this.normalWarningRadio.UseUnderline = true;
+            this.normalWarningRadio.Group = this.noWarningRadio.Group;
+            this.vbox1.Add(this.normalWarningRadio);
+            Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.vbox1[this.normalWarningRadio]));
+            w9.Position = 1;
+            w9.Expand = false;
+            w9.Fill = false;
+            // Container child vbox1.Gtk.Box+BoxChild
+            this.allWarningRadio = new Gtk.RadioButton(Mono.Unix.Catalog.GetString("all"));
+            this.allWarningRadio.CanFocus = true;
+            this.allWarningRadio.Name = "allWarningRadio";
+            this.allWarningRadio.DrawIndicator = true;
+            this.allWarningRadio.UseUnderline = true;
+            this.allWarningRadio.Group = this.noWarningRadio.Group;
+            this.vbox1.Add(this.allWarningRadio);
+            Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox1[this.allWarningRadio]));
+            w10.Position = 2;
+            w10.Expand = false;
+            w10.Fill = false;
+            // Container child vbox1.Gtk.Box+BoxChild
+            this.warningsAsErrorsCheckBox = new Gtk.CheckButton();
+            this.warningsAsErrorsCheckBox.Sensitive = false;
+            this.warningsAsErrorsCheckBox.CanFocus = true;
+            this.warningsAsErrorsCheckBox.Name = "warningsAsErrorsCheckBox";
+            this.warningsAsErrorsCheckBox.Label = Mono.Unix.Catalog.GetString("Treat warnings as errors");
+            this.warningsAsErrorsCheckBox.DrawIndicator = true;
+            this.warningsAsErrorsCheckBox.UseUnderline = true;
+            this.vbox1.Add(this.warningsAsErrorsCheckBox);
+            Gtk.Box.BoxChild w11 = ((Gtk.Box.BoxChild)(this.vbox1[this.warningsAsErrorsCheckBox]));
+            w11.Position = 3;
+            w11.Expand = false;
+            w11.Fill = false;
+            this.table1.Add(this.vbox1);
+            Gtk.Table.TableChild w12 = ((Gtk.Table.TableChild)(this.table1[this.vbox1]));
+            w12.LeftAttach = ((uint)(1));
+            w12.RightAttach = ((uint)(2));
+            w12.XOptions = ((Gtk.AttachOptions)(4));
+            w12.YOptions = ((Gtk.AttachOptions)(4));
+            this.vbox6.Add(this.table1);
+            Gtk.Box.BoxChild w13 = ((Gtk.Box.BoxChild)(this.vbox6[this.table1]));
+            w13.Position = 0;
+            w13.Expand = false;
+            w13.Fill = false;
+            // Container child vbox6.Gtk.Box+BoxChild
+            this.hbox1 = new Gtk.HBox();
+            this.hbox1.Name = "hbox1";
+            this.hbox1.Spacing = 6;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.label12 = new Gtk.Label();
+            this.label12.Name = "label12";
+            this.label12.Xpad = 13;
+            this.label12.Xalign = 0F;
+            this.label12.LabelProp = Mono.Unix.Catalog.GetString("Define Symbols:");
+            this.hbox1.Add(this.label12);
+            Gtk.Box.BoxChild w14 = ((Gtk.Box.BoxChild)(this.hbox1[this.label12]));
+            w14.Position = 0;
+            w14.Expand = false;
+            w14.Fill = false;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.defineSymbolsTextEntry = new Gtk.Entry();
+            Gtk.Tooltips w15 = new Gtk.Tooltips();
+            w15.SetTip(this.defineSymbolsTextEntry, "A space-separated list of symbols to define.", "A space-separated list of symbols to define.");
+            this.defineSymbolsTextEntry.CanFocus = true;
+            this.defineSymbolsTextEntry.Name = "defineSymbolsTextEntry";
+            this.defineSymbolsTextEntry.IsEditable = true;
+            this.defineSymbolsTextEntry.InvisibleChar = '●';
+            this.hbox1.Add(this.defineSymbolsTextEntry);
+            Gtk.Box.BoxChild w16 = ((Gtk.Box.BoxChild)(this.hbox1[this.defineSymbolsTextEntry]));
+            w16.Position = 1;
+            w16.Padding = ((uint)(14));
+            this.vbox6.Add(this.hbox1);
+            Gtk.Box.BoxChild w17 = ((Gtk.Box.BoxChild)(this.vbox6[this.hbox1]));
+            w17.Position = 1;
+            w17.Expand = false;
+            w17.Fill = false;
+            // Container child vbox6.Gtk.Box+BoxChild
+            this.frame2 = new Gtk.Frame();
+            this.frame2.Name = "frame2";
+            this.frame2.ShadowType = ((Gtk.ShadowType)(0));
+            this.frame2.LabelYalign = 0F;
+            // Container child frame2.Gtk.Container+ContainerChild
+            this.GtkAlignment = new Gtk.Alignment(0F, 0F, 1F, 1F);
+            this.GtkAlignment.Name = "GtkAlignment";
+            this.GtkAlignment.LeftPadding = ((uint)(12));
+            // Container child GtkAlignment.Gtk.Container+ContainerChild
+            this.table5 = new Gtk.Table(((uint)(2)), ((uint)(1)), false);
+            this.table5.Name = "table5";
+            this.table5.RowSpacing = ((uint)(6));
+            this.table5.ColumnSpacing = ((uint)(9));
+            this.table5.BorderWidth = ((uint)(6));
+            // Container child table5.Gtk.Table+TableChild
+            this.label7 = new Gtk.Label();
+            this.label7.Name = "label7";
+            this.label7.Xalign = 0F;
+            this.label7.LabelProp = Mono.Unix.Catalog.GetString("Extra Compiler Options");
+            this.table5.Add(this.label7);
+            Gtk.Table.TableChild w18 = ((Gtk.Table.TableChild)(this.table5[this.label7]));
+            w18.XOptions = ((Gtk.AttachOptions)(4));
+            w18.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table5.Gtk.Table+TableChild
+            this.scrolledwindow4 = new Gtk.ScrolledWindow();
+            this.scrolledwindow4.CanFocus = true;
+            this.scrolledwindow4.Name = "scrolledwindow4";
+            this.scrolledwindow4.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow4.Gtk.Container+ContainerChild
+            this.extraCompilerTextView = new Gtk.TextView();
+            w15.SetTip(this.extraCompilerTextView, "A newline-separated list of extra options to send to the compiler.\nOne option can be in more than one line.\nExample:\n\t`--pkg\n\tcairo`", "A newline-separated list of extra options to send to the compiler.\nOne option can be in more than one line.\nExample:\n\t`--pkg\n\tcairo`");
+            this.extraCompilerTextView.CanFocus = true;
+            this.extraCompilerTextView.Name = "extraCompilerTextView";
+            this.scrolledwindow4.Add(this.extraCompilerTextView);
+            this.table5.Add(this.scrolledwindow4);
+            Gtk.Table.TableChild w20 = ((Gtk.Table.TableChild)(this.table5[this.scrolledwindow4]));
+            w20.TopAttach = ((uint)(1));
+            w20.BottomAttach = ((uint)(2));
+            this.GtkAlignment.Add(this.table5);
+            this.frame2.Add(this.GtkAlignment);
+            this.GtkLabel12 = new Gtk.Label();
+            this.GtkLabel12.Name = "GtkLabel12";
+            this.GtkLabel12.LabelProp = Mono.Unix.Catalog.GetString("<b>Extra Options</b>");
+            this.GtkLabel12.UseMarkup = true;
+            this.frame2.LabelWidget = this.GtkLabel12;
+            this.vbox6.Add(this.frame2);
+            Gtk.Box.BoxChild w23 = ((Gtk.Box.BoxChild)(this.vbox6[this.frame2]));
+            w23.Position = 2;
+            this.notebook1.Add(this.vbox6);
+            // Notebook tab
+            this.label1 = new Gtk.Label();
+            this.label1.Name = "label1";
+            this.label1.LabelProp = Mono.Unix.Catalog.GetString("Code Generation");
+            this.notebook1.SetTabLabel(this.vbox6, this.label1);
+            this.label1.ShowAll();
+            // Container child notebook1.Gtk.Notebook+NotebookChild
+            this.table2 = new Gtk.Table(((uint)(2)), ((uint)(3)), false);
+            this.table2.Name = "table2";
+            this.table2.RowSpacing = ((uint)(10));
+            this.table2.ColumnSpacing = ((uint)(10));
+            this.table2.BorderWidth = ((uint)(3));
+            // Container child table2.Gtk.Table+TableChild
+            this.addLibButton = new Gtk.Button();
+            this.addLibButton.Sensitive = false;
+            this.addLibButton.CanFocus = true;
+            this.addLibButton.Name = "addLibButton";
+            this.addLibButton.UseUnderline = true;
+            this.addLibButton.Label = Mono.Unix.Catalog.GetString("Add");
+            this.table2.Add(this.addLibButton);
+            Gtk.Table.TableChild w25 = ((Gtk.Table.TableChild)(this.table2[this.addLibButton]));
+            w25.LeftAttach = ((uint)(2));
+            w25.RightAttach = ((uint)(3));
+            w25.XOptions = ((Gtk.AttachOptions)(4));
+            w25.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table2.Gtk.Table+TableChild
+            this.label8 = new Gtk.Label();
+            this.label8.Name = "label8";
+            this.label8.LabelProp = Mono.Unix.Catalog.GetString("Library:");
+            this.table2.Add(this.label8);
+            Gtk.Table.TableChild w26 = ((Gtk.Table.TableChild)(this.table2[this.label8]));
+            w26.XOptions = ((Gtk.AttachOptions)(4));
+            w26.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table2.Gtk.Table+TableChild
+            this.libAddEntry = new Gtk.Entry();
+            this.libAddEntry.CanFocus = true;
+            this.libAddEntry.Name = "libAddEntry";
+            this.libAddEntry.IsEditable = true;
+            this.libAddEntry.InvisibleChar = '●';
+            this.table2.Add(this.libAddEntry);
+            Gtk.Table.TableChild w27 = ((Gtk.Table.TableChild)(this.table2[this.libAddEntry]));
+            w27.LeftAttach = ((uint)(1));
+            w27.RightAttach = ((uint)(2));
+            w27.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table2.Gtk.Table+TableChild
+            this.scrolledwindow1 = new Gtk.ScrolledWindow();
+            this.scrolledwindow1.CanFocus = true;
+            this.scrolledwindow1.Name = "scrolledwindow1";
+            this.scrolledwindow1.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow1.Gtk.Container+ContainerChild
+            this.libTreeView = new Gtk.TreeView();
+            this.libTreeView.CanFocus = true;
+            this.libTreeView.Name = "libTreeView";
+            this.scrolledwindow1.Add(this.libTreeView);
+            this.table2.Add(this.scrolledwindow1);
+            Gtk.Table.TableChild w29 = ((Gtk.Table.TableChild)(this.table2[this.scrolledwindow1]));
+            w29.TopAttach = ((uint)(1));
+            w29.BottomAttach = ((uint)(2));
+            w29.LeftAttach = ((uint)(1));
+            w29.RightAttach = ((uint)(2));
+            // Container child table2.Gtk.Table+TableChild
+            this.vbox4 = new Gtk.VBox();
+            this.vbox4.Name = "vbox4";
+            this.vbox4.Spacing = 6;
+            // Container child vbox4.Gtk.Box+BoxChild
+            this.browseButton = new Gtk.Button();
+            this.browseButton.CanFocus = true;
+            this.browseButton.Name = "browseButton";
+            this.browseButton.UseUnderline = true;
+            this.browseButton.Label = Mono.Unix.Catalog.GetString("Browse...");
+            this.vbox4.Add(this.browseButton);
+            Gtk.Box.BoxChild w30 = ((Gtk.Box.BoxChild)(this.vbox4[this.browseButton]));
+            w30.Position = 0;
+            w30.Expand = false;
+            w30.Fill = false;
+            // Container child vbox4.Gtk.Box+BoxChild
+            this.removeLibButton = new Gtk.Button();
+            this.removeLibButton.Sensitive = false;
+            this.removeLibButton.CanFocus = true;
+            this.removeLibButton.Name = "removeLibButton";
+            this.removeLibButton.UseUnderline = true;
+            this.removeLibButton.Label = Mono.Unix.Catalog.GetString("Remove");
+            this.vbox4.Add(this.removeLibButton);
+            Gtk.Box.BoxChild w31 = ((Gtk.Box.BoxChild)(this.vbox4[this.removeLibButton]));
+            w31.Position = 1;
+            w31.Expand = false;
+            w31.Fill = false;
+            this.table2.Add(this.vbox4);
+            Gtk.Table.TableChild w32 = ((Gtk.Table.TableChild)(this.table2[this.vbox4]));
+            w32.TopAttach = ((uint)(1));
+            w32.BottomAttach = ((uint)(2));
+            w32.LeftAttach = ((uint)(2));
+            w32.RightAttach = ((uint)(3));
+            w32.XOptions = ((Gtk.AttachOptions)(4));
+            this.notebook1.Add(this.table2);
+            Gtk.Notebook.NotebookChild w33 = ((Gtk.Notebook.NotebookChild)(this.notebook1[this.table2]));
+            w33.Position = 1;
+            // Notebook tab
+            this.label2 = new Gtk.Label();
+            this.label2.Name = "label2";
+            this.label2.LabelProp = Mono.Unix.Catalog.GetString("Libraries");
+            this.notebook1.SetTabLabel(this.table2, this.label2);
+            this.label2.ShowAll();
+            // Container child notebook1.Gtk.Notebook+NotebookChild
+            this.vbox7 = new Gtk.VBox();
+            this.vbox7.Name = "vbox7";
+            this.vbox7.Spacing = 6;
+            this.vbox7.BorderWidth = ((uint)(3));
+            // Container child vbox7.Gtk.Box+BoxChild
+            this.table3 = new Gtk.Table(((uint)(2)), ((uint)(3)), false);
+            this.table3.Name = "table3";
+            this.table3.RowSpacing = ((uint)(10));
+            this.table3.ColumnSpacing = ((uint)(10));
+            // Container child table3.Gtk.Table+TableChild
+            this.includePathAddButton = new Gtk.Button();
+            this.includePathAddButton.Sensitive = false;
+            this.includePathAddButton.CanFocus = true;
+            this.includePathAddButton.Name = "includePathAddButton";
+            this.includePathAddButton.UseUnderline = true;
+            this.includePathAddButton.Label = Mono.Unix.Catalog.GetString("Add");
+            this.table3.Add(this.includePathAddButton);
+            Gtk.Table.TableChild w34 = ((Gtk.Table.TableChild)(this.table3[this.includePathAddButton]));
+            w34.LeftAttach = ((uint)(2));
+            w34.RightAttach = ((uint)(3));
+            w34.XOptions = ((Gtk.AttachOptions)(4));
+            w34.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table3.Gtk.Table+TableChild
+            this.includePathEntry = new Gtk.Entry();
+            this.includePathEntry.CanFocus = true;
+            this.includePathEntry.Name = "includePathEntry";
+            this.includePathEntry.IsEditable = true;
+            this.includePathEntry.InvisibleChar = '●';
+            this.table3.Add(this.includePathEntry);
+            Gtk.Table.TableChild w35 = ((Gtk.Table.TableChild)(this.table3[this.includePathEntry]));
+            w35.LeftAttach = ((uint)(1));
+            w35.RightAttach = ((uint)(2));
+            w35.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table3.Gtk.Table+TableChild
+            this.label9 = new Gtk.Label();
+            this.label9.Name = "label9";
+            this.label9.LabelProp = Mono.Unix.Catalog.GetString("Vapi Paths:");
+            this.table3.Add(this.label9);
+            Gtk.Table.TableChild w36 = ((Gtk.Table.TableChild)(this.table3[this.label9]));
+            w36.XOptions = ((Gtk.AttachOptions)(4));
+            w36.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table3.Gtk.Table+TableChild
+            this.scrolledwindow2 = new Gtk.ScrolledWindow();
+            this.scrolledwindow2.CanFocus = true;
+            this.scrolledwindow2.Name = "scrolledwindow2";
+            this.scrolledwindow2.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow2.Gtk.Container+ContainerChild
+            this.includePathTreeView = new Gtk.TreeView();
+            this.includePathTreeView.CanFocus = true;
+            this.includePathTreeView.Name = "includePathTreeView";
+            this.scrolledwindow2.Add(this.includePathTreeView);
+            this.table3.Add(this.scrolledwindow2);
+            Gtk.Table.TableChild w38 = ((Gtk.Table.TableChild)(this.table3[this.scrolledwindow2]));
+            w38.TopAttach = ((uint)(1));
+            w38.BottomAttach = ((uint)(2));
+            w38.LeftAttach = ((uint)(1));
+            w38.RightAttach = ((uint)(2));
+            // Container child table3.Gtk.Table+TableChild
+            this.vbox5 = new Gtk.VBox();
+            this.vbox5.Name = "vbox5";
+            this.vbox5.Spacing = 6;
+            // Container child vbox5.Gtk.Box+BoxChild
+            this.includePathBrowseButton = new Gtk.Button();
+            this.includePathBrowseButton.CanFocus = true;
+            this.includePathBrowseButton.Name = "includePathBrowseButton";
+            this.includePathBrowseButton.UseUnderline = true;
+            this.includePathBrowseButton.Label = Mono.Unix.Catalog.GetString("Browse...");
+            this.vbox5.Add(this.includePathBrowseButton);
+            Gtk.Box.BoxChild w39 = ((Gtk.Box.BoxChild)(this.vbox5[this.includePathBrowseButton]));
+            w39.Position = 0;
+            w39.Expand = false;
+            w39.Fill = false;
+            // Container child vbox5.Gtk.Box+BoxChild
+            this.includePathRemoveButton = new Gtk.Button();
+            this.includePathRemoveButton.Sensitive = false;
+            this.includePathRemoveButton.CanFocus = true;
+            this.includePathRemoveButton.Name = "includePathRemoveButton";
+            this.includePathRemoveButton.UseUnderline = true;
+            this.includePathRemoveButton.Label = Mono.Unix.Catalog.GetString("Remove");
+            this.vbox5.Add(this.includePathRemoveButton);
+            Gtk.Box.BoxChild w40 = ((Gtk.Box.BoxChild)(this.vbox5[this.includePathRemoveButton]));
+            w40.Position = 1;
+            w40.Expand = false;
+            w40.Fill = false;
+            this.table3.Add(this.vbox5);
+            Gtk.Table.TableChild w41 = ((Gtk.Table.TableChild)(this.table3[this.vbox5]));
+            w41.TopAttach = ((uint)(1));
+            w41.BottomAttach = ((uint)(2));
+            w41.LeftAttach = ((uint)(2));
+            w41.RightAttach = ((uint)(3));
+            w41.XOptions = ((Gtk.AttachOptions)(4));
+            this.vbox7.Add(this.table3);
+            Gtk.Box.BoxChild w42 = ((Gtk.Box.BoxChild)(this.vbox7[this.table3]));
+            w42.Position = 0;
+            this.notebook1.Add(this.vbox7);
+            Gtk.Notebook.NotebookChild w43 = ((Gtk.Notebook.NotebookChild)(this.notebook1[this.vbox7]));
+            w43.Position = 2;
+            // Notebook tab
+            this.label3 = new Gtk.Label();
+            this.label3.Name = "label3";
+            this.label3.LabelProp = Mono.Unix.Catalog.GetString("Paths");
+            this.notebook1.SetTabLabel(this.vbox7, this.label3);
+            this.label3.ShowAll();
+            this.Add(this.notebook1);
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.Show();
+            this.targetComboBox.Changed += new System.EventHandler(this.OnTargetComboBoxChanged);
+            this.browseButton.Clicked += new System.EventHandler(this.OnBrowseButtonClick);
+            this.removeLibButton.Clicked += new System.EventHandler(this.OnRemoveLibButtonClicked);
+            this.removeLibButton.Clicked += new System.EventHandler(this.OnLibRemoved);
+            this.libTreeView.CursorChanged += new System.EventHandler(this.OnLibTreeViewCursorChanged);
+            this.libAddEntry.Changed += new System.EventHandler(this.OnLibAddEntryChanged);
+            this.libAddEntry.Activated += new System.EventHandler(this.OnLibAddEntryActivated);
+            this.addLibButton.Clicked += new System.EventHandler(this.OnLibAdded);
+            this.includePathBrowseButton.Clicked += new System.EventHandler(this.OnIncludePathBrowseButtonClick);
+            this.includePathRemoveButton.Clicked += new System.EventHandler(this.OnIncludePathRemoveButtonClicked);
+            this.includePathRemoveButton.Clicked += new System.EventHandler(this.OnIncludePathRemoved);
+            this.includePathTreeView.CursorChanged += new System.EventHandler(this.OnIncludePathTreeViewCursorChanged);
+            this.includePathEntry.Changed += new System.EventHandler(this.OnIncludePathEntryChanged);
+            this.includePathEntry.Activated += new System.EventHandler(this.OnIncludePathEntryActivated);
+            this.includePathAddButton.Clicked += new System.EventHandler(this.OnIncludePathAdded);
+        }
+    }
+}
diff --git a/gtk-gui/MonoDevelop.ValaBinding.EditPackagesDialog.cs b/gtk-gui/MonoDevelop.ValaBinding.EditPackagesDialog.cs
new file mode 100644
index 0000000..a315fa5
--- /dev/null
+++ b/gtk-gui/MonoDevelop.ValaBinding.EditPackagesDialog.cs
@@ -0,0 +1,277 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.ValaBinding {
+    
+    
+    public partial class EditPackagesDialog {
+        
+        private Gtk.VPaned vpaned1;
+        
+        private Gtk.HBox hbox1;
+        
+        private Gtk.Notebook notebook1;
+        
+        private Gtk.ScrolledWindow scrolledwindow1;
+        
+        private Gtk.TreeView normalPackageTreeView;
+        
+        private Gtk.Label label1;
+        
+        private Gtk.ScrolledWindow scrolledwindow3;
+        
+        private Gtk.TreeView projectPackageTreeView;
+        
+        private Gtk.Label label2;
+        
+        private Gtk.VBox vbox3;
+        
+        private Gtk.Fixed fixed1;
+        
+        private Gtk.Button detailsButton;
+        
+        private Gtk.Table table1;
+        
+        private Gtk.Label label3;
+        
+        private Gtk.ScrolledWindow scrolledwindow2;
+        
+        private Gtk.TreeView selectedPackageTreeView;
+        
+        private Gtk.VBox vbox2;
+        
+        private Gtk.Button removeButton;
+        
+        private Gtk.Button buttonCancel;
+        
+        private Gtk.Button buttonOk;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize(this);
+            // Widget MonoDevelop.ValaBinding.EditPackagesDialog
+            this.Name = "MonoDevelop.ValaBinding.EditPackagesDialog";
+            this.Title = Mono.Unix.Catalog.GetString("Edit packages");
+            this.Modal = true;
+            // Internal child MonoDevelop.ValaBinding.EditPackagesDialog.VBox
+            Gtk.VBox w1 = this.VBox;
+            w1.Name = "dialog1_VBox";
+            w1.BorderWidth = ((uint)(2));
+            // Container child dialog1_VBox.Gtk.Box+BoxChild
+            this.vpaned1 = new Gtk.VPaned();
+            this.vpaned1.CanFocus = true;
+            this.vpaned1.Name = "vpaned1";
+            this.vpaned1.Position = 183;
+            this.vpaned1.BorderWidth = ((uint)(6));
+            // Container child vpaned1.Gtk.Paned+PanedChild
+            this.hbox1 = new Gtk.HBox();
+            this.hbox1.Name = "hbox1";
+            this.hbox1.Spacing = 6;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.notebook1 = new Gtk.Notebook();
+            this.notebook1.CanFocus = true;
+            this.notebook1.Name = "notebook1";
+            this.notebook1.CurrentPage = 0;
+            // Container child notebook1.Gtk.Notebook+NotebookChild
+            this.scrolledwindow1 = new Gtk.ScrolledWindow();
+            this.scrolledwindow1.CanFocus = true;
+            this.scrolledwindow1.Name = "scrolledwindow1";
+            this.scrolledwindow1.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow1.Gtk.Container+ContainerChild
+            this.normalPackageTreeView = new Gtk.TreeView();
+            this.normalPackageTreeView.CanFocus = true;
+            this.normalPackageTreeView.Name = "normalPackageTreeView";
+            this.scrolledwindow1.Add(this.normalPackageTreeView);
+            this.notebook1.Add(this.scrolledwindow1);
+            // Notebook tab
+            this.label1 = new Gtk.Label();
+            this.label1.Name = "label1";
+            this.label1.LabelProp = Mono.Unix.Catalog.GetString("System Packages");
+            this.notebook1.SetTabLabel(this.scrolledwindow1, this.label1);
+            this.label1.ShowAll();
+            // Container child notebook1.Gtk.Notebook+NotebookChild
+            this.scrolledwindow3 = new Gtk.ScrolledWindow();
+            this.scrolledwindow3.CanFocus = true;
+            this.scrolledwindow3.Name = "scrolledwindow3";
+            this.scrolledwindow3.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow3.Gtk.Container+ContainerChild
+            this.projectPackageTreeView = new Gtk.TreeView();
+            this.projectPackageTreeView.CanFocus = true;
+            this.projectPackageTreeView.Name = "projectPackageTreeView";
+            this.scrolledwindow3.Add(this.projectPackageTreeView);
+            this.notebook1.Add(this.scrolledwindow3);
+            Gtk.Notebook.NotebookChild w5 = ((Gtk.Notebook.NotebookChild)(this.notebook1[this.scrolledwindow3]));
+            w5.Position = 1;
+            // Notebook tab
+            this.label2 = new Gtk.Label();
+            this.label2.Name = "label2";
+            this.label2.LabelProp = Mono.Unix.Catalog.GetString("Project Packages");
+            this.notebook1.SetTabLabel(this.scrolledwindow3, this.label2);
+            this.label2.ShowAll();
+            this.hbox1.Add(this.notebook1);
+            Gtk.Box.BoxChild w6 = ((Gtk.Box.BoxChild)(this.hbox1[this.notebook1]));
+            w6.Position = 0;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.vbox3 = new Gtk.VBox();
+            this.vbox3.Name = "vbox3";
+            this.vbox3.Spacing = 6;
+            // Container child vbox3.Gtk.Box+BoxChild
+            this.fixed1 = new Gtk.Fixed();
+            this.fixed1.HeightRequest = 21;
+            this.fixed1.Name = "fixed1";
+            this.fixed1.HasWindow = false;
+            this.vbox3.Add(this.fixed1);
+            Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.vbox3[this.fixed1]));
+            w7.Position = 0;
+            w7.Expand = false;
+            w7.Fill = false;
+            // Container child vbox3.Gtk.Box+BoxChild
+            this.detailsButton = new Gtk.Button();
+            this.detailsButton.WidthRequest = 33;
+            this.detailsButton.HeightRequest = 33;
+            this.detailsButton.Sensitive = false;
+            this.detailsButton.CanFocus = true;
+            this.detailsButton.Name = "detailsButton";
+            this.detailsButton.UseUnderline = true;
+            this.detailsButton.Label = Mono.Unix.Catalog.GetString("...");
+            this.vbox3.Add(this.detailsButton);
+            Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.vbox3[this.detailsButton]));
+            w8.Position = 1;
+            w8.Expand = false;
+            w8.Fill = false;
+            this.hbox1.Add(this.vbox3);
+            Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.hbox1[this.vbox3]));
+            w9.Position = 1;
+            w9.Expand = false;
+            w9.Fill = false;
+            this.vpaned1.Add(this.hbox1);
+            Gtk.Paned.PanedChild w10 = ((Gtk.Paned.PanedChild)(this.vpaned1[this.hbox1]));
+            w10.Resize = false;
+            // Container child vpaned1.Gtk.Paned+PanedChild
+            this.table1 = new Gtk.Table(((uint)(2)), ((uint)(2)), false);
+            this.table1.Name = "table1";
+            this.table1.RowSpacing = ((uint)(6));
+            this.table1.ColumnSpacing = ((uint)(6));
+            // Container child table1.Gtk.Table+TableChild
+            this.label3 = new Gtk.Label();
+            this.label3.Name = "label3";
+            this.label3.Xalign = 0F;
+            this.label3.Yalign = 0F;
+            this.label3.LabelProp = Mono.Unix.Catalog.GetString("Selected packages:");
+            this.table1.Add(this.label3);
+            Gtk.Table.TableChild w11 = ((Gtk.Table.TableChild)(this.table1[this.label3]));
+            w11.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.scrolledwindow2 = new Gtk.ScrolledWindow();
+            this.scrolledwindow2.CanFocus = true;
+            this.scrolledwindow2.Name = "scrolledwindow2";
+            this.scrolledwindow2.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow2.Gtk.Container+ContainerChild
+            this.selectedPackageTreeView = new Gtk.TreeView();
+            this.selectedPackageTreeView.CanFocus = true;
+            this.selectedPackageTreeView.Name = "selectedPackageTreeView";
+            this.scrolledwindow2.Add(this.selectedPackageTreeView);
+            this.table1.Add(this.scrolledwindow2);
+            Gtk.Table.TableChild w13 = ((Gtk.Table.TableChild)(this.table1[this.scrolledwindow2]));
+            w13.TopAttach = ((uint)(1));
+            w13.BottomAttach = ((uint)(2));
+            w13.XOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.vbox2 = new Gtk.VBox();
+            this.vbox2.Name = "vbox2";
+            this.vbox2.Spacing = 6;
+            // Container child vbox2.Gtk.Box+BoxChild
+            this.removeButton = new Gtk.Button();
+            Gtk.Tooltips w14 = new Gtk.Tooltips();
+            w14.SetTip(this.removeButton, "Remove selected package from the project.", "Remove selected package from the project.");
+            this.removeButton.WidthRequest = 33;
+            this.removeButton.HeightRequest = 33;
+            this.removeButton.Sensitive = false;
+            this.removeButton.CanFocus = true;
+            this.removeButton.Name = "removeButton";
+            this.removeButton.UseUnderline = true;
+            // Container child removeButton.Gtk.Container+ContainerChild
+            Gtk.Alignment w15 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
+            // Container child GtkAlignment.Gtk.Container+ContainerChild
+            Gtk.HBox w16 = new Gtk.HBox();
+            w16.Spacing = 2;
+            // Container child GtkHBox.Gtk.Container+ContainerChild
+            Gtk.Image w17 = new Gtk.Image();
+            w17.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-remove", Gtk.IconSize.Menu, 16);
+            w16.Add(w17);
+            // Container child GtkHBox.Gtk.Container+ContainerChild
+            Gtk.Label w19 = new Gtk.Label();
+            w16.Add(w19);
+            w15.Add(w16);
+            this.removeButton.Add(w15);
+            this.vbox2.Add(this.removeButton);
+            Gtk.Box.BoxChild w23 = ((Gtk.Box.BoxChild)(this.vbox2[this.removeButton]));
+            w23.Position = 0;
+            w23.Expand = false;
+            w23.Fill = false;
+            this.table1.Add(this.vbox2);
+            Gtk.Table.TableChild w24 = ((Gtk.Table.TableChild)(this.table1[this.vbox2]));
+            w24.TopAttach = ((uint)(1));
+            w24.BottomAttach = ((uint)(2));
+            w24.LeftAttach = ((uint)(1));
+            w24.RightAttach = ((uint)(2));
+            w24.XOptions = ((Gtk.AttachOptions)(4));
+            this.vpaned1.Add(this.table1);
+            w1.Add(this.vpaned1);
+            Gtk.Box.BoxChild w26 = ((Gtk.Box.BoxChild)(w1[this.vpaned1]));
+            w26.Position = 0;
+            w26.Padding = ((uint)(3));
+            // Internal child MonoDevelop.ValaBinding.EditPackagesDialog.ActionArea
+            Gtk.HButtonBox w27 = this.ActionArea;
+            w27.Name = "dialog1_ActionArea";
+            w27.Spacing = 6;
+            w27.BorderWidth = ((uint)(5));
+            w27.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
+            // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+            this.buttonCancel = new Gtk.Button();
+            this.buttonCancel.CanDefault = true;
+            this.buttonCancel.CanFocus = true;
+            this.buttonCancel.Name = "buttonCancel";
+            this.buttonCancel.UseStock = true;
+            this.buttonCancel.UseUnderline = true;
+            this.buttonCancel.Label = "gtk-cancel";
+            this.AddActionWidget(this.buttonCancel, -6);
+            Gtk.ButtonBox.ButtonBoxChild w28 = ((Gtk.ButtonBox.ButtonBoxChild)(w27[this.buttonCancel]));
+            w28.Expand = false;
+            w28.Fill = false;
+            // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+            this.buttonOk = new Gtk.Button();
+            this.buttonOk.CanDefault = true;
+            this.buttonOk.CanFocus = true;
+            this.buttonOk.Name = "buttonOk";
+            this.buttonOk.UseStock = true;
+            this.buttonOk.UseUnderline = true;
+            this.buttonOk.Label = "gtk-ok";
+            this.AddActionWidget(this.buttonOk, -5);
+            Gtk.ButtonBox.ButtonBoxChild w29 = ((Gtk.ButtonBox.ButtonBoxChild)(w27[this.buttonOk]));
+            w29.Position = 1;
+            w29.Expand = false;
+            w29.Fill = false;
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.DefaultWidth = 580;
+            this.DefaultHeight = 449;
+            this.Show();
+            this.normalPackageTreeView.CursorChanged += new System.EventHandler(this.OnNonSelectedPackageCursorChanged);
+            this.projectPackageTreeView.CursorChanged += new System.EventHandler(this.OnNonSelectedPackageCursorChanged);
+            this.detailsButton.Clicked += new System.EventHandler(this.OnDetailsButtonClicked);
+            this.removeButton.Clicked += new System.EventHandler(this.OnRemoveButtonClicked);
+            this.removeButton.Clicked += new System.EventHandler(this.OnRemoveButtonClick);
+            this.selectedPackageTreeView.CursorChanged += new System.EventHandler(this.OnSelectedPackagesTreeViewCursorChanged);
+            this.buttonCancel.Clicked += new System.EventHandler(this.OnCancelButtonClick);
+            this.buttonOk.Clicked += new System.EventHandler(this.OnOkButtonClick);
+        }
+    }
+}
diff --git a/gtk-gui/MonoDevelop.ValaBinding.GeneralOptionsPanel.cs b/gtk-gui/MonoDevelop.ValaBinding.GeneralOptionsPanel.cs
new file mode 100644
index 0000000..5dc4ec7
--- /dev/null
+++ b/gtk-gui/MonoDevelop.ValaBinding.GeneralOptionsPanel.cs
@@ -0,0 +1,61 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.ValaBinding {
+    
+    
+    public partial class GeneralOptionsPanel {
+        
+        private Gtk.Table table1;
+        
+        private Gtk.Label label1;
+        
+        private Gtk.ComboBox valaCombo;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize(this);
+            // Widget MonoDevelop.ValaBinding.GeneralOptionsPanel
+            Stetic.BinContainer.Attach(this);
+            this.Name = "MonoDevelop.ValaBinding.GeneralOptionsPanel";
+            // Container child MonoDevelop.ValaBinding.GeneralOptionsPanel.Gtk.Container+ContainerChild
+            this.table1 = new Gtk.Table(((uint)(3)), ((uint)(3)), false);
+            this.table1.Name = "table1";
+            this.table1.RowSpacing = ((uint)(6));
+            this.table1.ColumnSpacing = ((uint)(6));
+            // Container child table1.Gtk.Table+TableChild
+            this.label1 = new Gtk.Label();
+            this.label1.Name = "label1";
+            this.label1.Xpad = 10;
+            this.label1.Xalign = 0F;
+            this.label1.LabelProp = Mono.Unix.Catalog.GetString("Default Vala Compiler:");
+            this.table1.Add(this.label1);
+            Gtk.Table.TableChild w1 = ((Gtk.Table.TableChild)(this.table1[this.label1]));
+            w1.XOptions = ((Gtk.AttachOptions)(4));
+            w1.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.valaCombo = Gtk.ComboBox.NewText();
+            Gtk.Tooltips w2 = new Gtk.Tooltips();
+            w2.SetTip(this.valaCombo, "Default compiler to use for new C projects.", "Default compiler to use for new C projects.");
+            this.valaCombo.Name = "valaCombo";
+            this.table1.Add(this.valaCombo);
+            Gtk.Table.TableChild w3 = ((Gtk.Table.TableChild)(this.table1[this.valaCombo]));
+            w3.LeftAttach = ((uint)(1));
+            w3.RightAttach = ((uint)(2));
+            w3.XOptions = ((Gtk.AttachOptions)(4));
+            w3.YOptions = ((Gtk.AttachOptions)(4));
+            this.Add(this.table1);
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.Show();
+            this.valaCombo.Changed += new System.EventHandler(this.OnValaComboChanged);
+        }
+    }
+}
diff --git a/gtk-gui/MonoDevelop.ValaBinding.OutputOptionsPanel.cs b/gtk-gui/MonoDevelop.ValaBinding.OutputOptionsPanel.cs
new file mode 100644
index 0000000..bd2f417
--- /dev/null
+++ b/gtk-gui/MonoDevelop.ValaBinding.OutputOptionsPanel.cs
@@ -0,0 +1,201 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.ValaBinding {
+    
+    
+    public partial class OutputOptionsPanel {
+        
+        private Gtk.VBox vbox2;
+        
+        private Gtk.Table table1;
+        
+        private Gtk.HBox hbox1;
+        
+        private Gtk.Entry outputPathTextEntry;
+        
+        private Gtk.Button browseButton;
+        
+        private Gtk.Label label1;
+        
+        private Gtk.Label label2;
+        
+        private Gtk.Label label3;
+        
+        private Gtk.Label label4;
+        
+        private Gtk.Entry outputNameTextEntry;
+        
+        private Gtk.Entry parametersTextEntry;
+        
+        private Gtk.CheckButton externalConsoleCheckbox;
+        
+        private Gtk.CheckButton pauseCheckbox;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize(this);
+            // Widget MonoDevelop.ValaBinding.OutputOptionsPanel
+            Stetic.BinContainer.Attach(this);
+            this.Name = "MonoDevelop.ValaBinding.OutputOptionsPanel";
+            // Container child MonoDevelop.ValaBinding.OutputOptionsPanel.Gtk.Container+ContainerChild
+            this.vbox2 = new Gtk.VBox();
+            this.vbox2.Name = "vbox2";
+            this.vbox2.Spacing = 6;
+            this.vbox2.BorderWidth = ((uint)(3));
+            // Container child vbox2.Gtk.Box+BoxChild
+            this.table1 = new Gtk.Table(((uint)(4)), ((uint)(2)), false);
+            this.table1.Name = "table1";
+            this.table1.RowSpacing = ((uint)(6));
+            this.table1.ColumnSpacing = ((uint)(6));
+            this.table1.BorderWidth = ((uint)(3));
+            // Container child table1.Gtk.Table+TableChild
+            this.hbox1 = new Gtk.HBox();
+            this.hbox1.Name = "hbox1";
+            this.hbox1.Spacing = 6;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.outputPathTextEntry = new Gtk.Entry();
+            this.outputPathTextEntry.CanFocus = true;
+            this.outputPathTextEntry.Name = "outputPathTextEntry";
+            this.outputPathTextEntry.IsEditable = true;
+            this.outputPathTextEntry.InvisibleChar = '●';
+            this.hbox1.Add(this.outputPathTextEntry);
+            Gtk.Box.BoxChild w1 = ((Gtk.Box.BoxChild)(this.hbox1[this.outputPathTextEntry]));
+            w1.Position = 0;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.browseButton = new Gtk.Button();
+            this.browseButton.CanFocus = true;
+            this.browseButton.Name = "browseButton";
+            this.browseButton.UseUnderline = true;
+            this.browseButton.Label = Mono.Unix.Catalog.GetString("_Browse");
+            this.hbox1.Add(this.browseButton);
+            Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.hbox1[this.browseButton]));
+            w2.Position = 1;
+            w2.Expand = false;
+            w2.Fill = false;
+            this.table1.Add(this.hbox1);
+            Gtk.Table.TableChild w3 = ((Gtk.Table.TableChild)(this.table1[this.hbox1]));
+            w3.TopAttach = ((uint)(2));
+            w3.BottomAttach = ((uint)(3));
+            w3.LeftAttach = ((uint)(1));
+            w3.RightAttach = ((uint)(2));
+            w3.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label1 = new Gtk.Label();
+            this.label1.Name = "label1";
+            this.label1.Xalign = 0F;
+            this.label1.LabelProp = Mono.Unix.Catalog.GetString("<b>Output</b>");
+            this.label1.UseMarkup = true;
+            this.table1.Add(this.label1);
+            Gtk.Table.TableChild w4 = ((Gtk.Table.TableChild)(this.table1[this.label1]));
+            w4.XOptions = ((Gtk.AttachOptions)(4));
+            w4.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label2 = new Gtk.Label();
+            this.label2.Name = "label2";
+            this.label2.Xalign = 0F;
+            this.label2.LabelProp = Mono.Unix.Catalog.GetString("Output Name:");
+            this.table1.Add(this.label2);
+            Gtk.Table.TableChild w5 = ((Gtk.Table.TableChild)(this.table1[this.label2]));
+            w5.TopAttach = ((uint)(1));
+            w5.BottomAttach = ((uint)(2));
+            w5.XPadding = ((uint)(15));
+            w5.XOptions = ((Gtk.AttachOptions)(4));
+            w5.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label3 = new Gtk.Label();
+            this.label3.Name = "label3";
+            this.label3.Xalign = 0F;
+            this.label3.LabelProp = Mono.Unix.Catalog.GetString("Output Path:");
+            this.table1.Add(this.label3);
+            Gtk.Table.TableChild w6 = ((Gtk.Table.TableChild)(this.table1[this.label3]));
+            w6.TopAttach = ((uint)(2));
+            w6.BottomAttach = ((uint)(3));
+            w6.XPadding = ((uint)(15));
+            w6.XOptions = ((Gtk.AttachOptions)(4));
+            w6.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label4 = new Gtk.Label();
+            this.label4.Name = "label4";
+            this.label4.Xalign = 0F;
+            this.label4.LabelProp = Mono.Unix.Catalog.GetString("Parameters:");
+            this.table1.Add(this.label4);
+            Gtk.Table.TableChild w7 = ((Gtk.Table.TableChild)(this.table1[this.label4]));
+            w7.TopAttach = ((uint)(3));
+            w7.BottomAttach = ((uint)(4));
+            w7.XPadding = ((uint)(15));
+            w7.XOptions = ((Gtk.AttachOptions)(4));
+            w7.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.outputNameTextEntry = new Gtk.Entry();
+            this.outputNameTextEntry.CanFocus = true;
+            this.outputNameTextEntry.Name = "outputNameTextEntry";
+            this.outputNameTextEntry.IsEditable = true;
+            this.outputNameTextEntry.InvisibleChar = '●';
+            this.table1.Add(this.outputNameTextEntry);
+            Gtk.Table.TableChild w8 = ((Gtk.Table.TableChild)(this.table1[this.outputNameTextEntry]));
+            w8.TopAttach = ((uint)(1));
+            w8.BottomAttach = ((uint)(2));
+            w8.LeftAttach = ((uint)(1));
+            w8.RightAttach = ((uint)(2));
+            w8.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.parametersTextEntry = new Gtk.Entry();
+            this.parametersTextEntry.CanFocus = true;
+            this.parametersTextEntry.Name = "parametersTextEntry";
+            this.parametersTextEntry.IsEditable = true;
+            this.parametersTextEntry.InvisibleChar = '●';
+            this.table1.Add(this.parametersTextEntry);
+            Gtk.Table.TableChild w9 = ((Gtk.Table.TableChild)(this.table1[this.parametersTextEntry]));
+            w9.TopAttach = ((uint)(3));
+            w9.BottomAttach = ((uint)(4));
+            w9.LeftAttach = ((uint)(1));
+            w9.RightAttach = ((uint)(2));
+            w9.YOptions = ((Gtk.AttachOptions)(4));
+            this.vbox2.Add(this.table1);
+            Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox2[this.table1]));
+            w10.Position = 0;
+            w10.Expand = false;
+            w10.Fill = false;
+            // Container child vbox2.Gtk.Box+BoxChild
+            this.externalConsoleCheckbox = new Gtk.CheckButton();
+            this.externalConsoleCheckbox.CanFocus = true;
+            this.externalConsoleCheckbox.Name = "externalConsoleCheckbox";
+            this.externalConsoleCheckbox.Label = Mono.Unix.Catalog.GetString("Run on e_xternal console");
+            this.externalConsoleCheckbox.Active = true;
+            this.externalConsoleCheckbox.DrawIndicator = true;
+            this.externalConsoleCheckbox.UseUnderline = true;
+            this.vbox2.Add(this.externalConsoleCheckbox);
+            Gtk.Box.BoxChild w11 = ((Gtk.Box.BoxChild)(this.vbox2[this.externalConsoleCheckbox]));
+            w11.Position = 1;
+            w11.Expand = false;
+            w11.Fill = false;
+            // Container child vbox2.Gtk.Box+BoxChild
+            this.pauseCheckbox = new Gtk.CheckButton();
+            this.pauseCheckbox.Sensitive = false;
+            this.pauseCheckbox.CanFocus = true;
+            this.pauseCheckbox.Name = "pauseCheckbox";
+            this.pauseCheckbox.Label = Mono.Unix.Catalog.GetString("Pause _console output");
+            this.pauseCheckbox.DrawIndicator = true;
+            this.pauseCheckbox.UseUnderline = true;
+            this.vbox2.Add(this.pauseCheckbox);
+            Gtk.Box.BoxChild w12 = ((Gtk.Box.BoxChild)(this.vbox2[this.pauseCheckbox]));
+            w12.Position = 2;
+            w12.Expand = false;
+            w12.Fill = false;
+            this.Add(this.vbox2);
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.Show();
+            this.browseButton.Clicked += new System.EventHandler(this.OnBrowseButtonClick);
+            this.externalConsoleCheckbox.Clicked += new System.EventHandler(this.OnExternalConsoleCheckboxClicked);
+        }
+    }
+}
diff --git a/gtk-gui/MonoDevelop.ValaBinding.PackageDetails.cs b/gtk-gui/MonoDevelop.ValaBinding.PackageDetails.cs
new file mode 100644
index 0000000..e452898
--- /dev/null
+++ b/gtk-gui/MonoDevelop.ValaBinding.PackageDetails.cs
@@ -0,0 +1,202 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.ValaBinding {
+    
+    
+    public partial class PackageDetails {
+        
+        private Gtk.VBox vbox3;
+        
+        private Gtk.Table table1;
+        
+        private Gtk.Label descriptionLabel;
+        
+        private Gtk.Label label7;
+        
+        private Gtk.Label label8;
+        
+        private Gtk.Label label9;
+        
+        private Gtk.Label nameLabel;
+        
+        private Gtk.Label versionLabel;
+        
+        private Gtk.VBox vbox4;
+        
+        private Gtk.Label label13;
+        
+        private Gtk.ScrolledWindow scrolledwindow1;
+        
+        private Gtk.TreeView requiresTreeView;
+        
+        private Gtk.Button buttonOk;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize(this);
+            // Widget MonoDevelop.ValaBinding.PackageDetails
+            this.Name = "MonoDevelop.ValaBinding.PackageDetails";
+            this.Title = Mono.Unix.Catalog.GetString("Package Details");
+            this.WindowPosition = ((Gtk.WindowPosition)(4));
+            this.HasSeparator = false;
+            // Internal child MonoDevelop.ValaBinding.PackageDetails.VBox
+            Gtk.VBox w1 = this.VBox;
+            w1.Name = "dialog1_VBox";
+            w1.BorderWidth = ((uint)(2));
+            // Container child dialog1_VBox.Gtk.Box+BoxChild
+            this.vbox3 = new Gtk.VBox();
+            this.vbox3.Name = "vbox3";
+            this.vbox3.Spacing = 6;
+            this.vbox3.BorderWidth = ((uint)(3));
+            // Container child vbox3.Gtk.Box+BoxChild
+            this.table1 = new Gtk.Table(((uint)(3)), ((uint)(2)), false);
+            this.table1.Name = "table1";
+            this.table1.RowSpacing = ((uint)(6));
+            this.table1.ColumnSpacing = ((uint)(6));
+            // Container child table1.Gtk.Table+TableChild
+            this.descriptionLabel = new Gtk.Label();
+            this.descriptionLabel.Name = "descriptionLabel";
+            this.descriptionLabel.Xalign = 0F;
+            this.descriptionLabel.Yalign = 0F;
+            this.descriptionLabel.LabelProp = Mono.Unix.Catalog.GetString("label12");
+            this.table1.Add(this.descriptionLabel);
+            Gtk.Table.TableChild w2 = ((Gtk.Table.TableChild)(this.table1[this.descriptionLabel]));
+            w2.TopAttach = ((uint)(2));
+            w2.BottomAttach = ((uint)(3));
+            w2.LeftAttach = ((uint)(1));
+            w2.RightAttach = ((uint)(2));
+            w2.XOptions = ((Gtk.AttachOptions)(4));
+            w2.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label7 = new Gtk.Label();
+            this.label7.Name = "label7";
+            this.label7.Xalign = 0F;
+            this.label7.LabelProp = Mono.Unix.Catalog.GetString("Name:");
+            this.table1.Add(this.label7);
+            Gtk.Table.TableChild w3 = ((Gtk.Table.TableChild)(this.table1[this.label7]));
+            w3.XOptions = ((Gtk.AttachOptions)(4));
+            w3.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label8 = new Gtk.Label();
+            this.label8.Name = "label8";
+            this.label8.Xalign = 0F;
+            this.label8.LabelProp = Mono.Unix.Catalog.GetString("Version:");
+            this.table1.Add(this.label8);
+            Gtk.Table.TableChild w4 = ((Gtk.Table.TableChild)(this.table1[this.label8]));
+            w4.TopAttach = ((uint)(1));
+            w4.BottomAttach = ((uint)(2));
+            w4.XOptions = ((Gtk.AttachOptions)(4));
+            w4.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.label9 = new Gtk.Label();
+            this.label9.Name = "label9";
+            this.label9.Xalign = 0F;
+            this.label9.Yalign = 0F;
+            this.label9.LabelProp = Mono.Unix.Catalog.GetString("Description:");
+            this.table1.Add(this.label9);
+            Gtk.Table.TableChild w5 = ((Gtk.Table.TableChild)(this.table1[this.label9]));
+            w5.TopAttach = ((uint)(2));
+            w5.BottomAttach = ((uint)(3));
+            w5.XOptions = ((Gtk.AttachOptions)(4));
+            w5.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.nameLabel = new Gtk.Label();
+            this.nameLabel.Name = "nameLabel";
+            this.nameLabel.Xalign = 0F;
+            this.nameLabel.LabelProp = Mono.Unix.Catalog.GetString("label10");
+            this.table1.Add(this.nameLabel);
+            Gtk.Table.TableChild w6 = ((Gtk.Table.TableChild)(this.table1[this.nameLabel]));
+            w6.LeftAttach = ((uint)(1));
+            w6.RightAttach = ((uint)(2));
+            w6.XOptions = ((Gtk.AttachOptions)(4));
+            w6.YOptions = ((Gtk.AttachOptions)(4));
+            // Container child table1.Gtk.Table+TableChild
+            this.versionLabel = new Gtk.Label();
+            this.versionLabel.Name = "versionLabel";
+            this.versionLabel.Xalign = 0F;
+            this.versionLabel.LabelProp = Mono.Unix.Catalog.GetString("label11");
+            this.table1.Add(this.versionLabel);
+            Gtk.Table.TableChild w7 = ((Gtk.Table.TableChild)(this.table1[this.versionLabel]));
+            w7.TopAttach = ((uint)(1));
+            w7.BottomAttach = ((uint)(2));
+            w7.LeftAttach = ((uint)(1));
+            w7.RightAttach = ((uint)(2));
+            w7.XOptions = ((Gtk.AttachOptions)(4));
+            w7.YOptions = ((Gtk.AttachOptions)(4));
+            this.vbox3.Add(this.table1);
+            Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.vbox3[this.table1]));
+            w8.Position = 0;
+            w8.Expand = false;
+            w8.Fill = false;
+            // Container child vbox3.Gtk.Box+BoxChild
+            this.vbox4 = new Gtk.VBox();
+            this.vbox4.Name = "vbox4";
+            this.vbox4.Spacing = 6;
+            // Container child vbox4.Gtk.Box+BoxChild
+            this.label13 = new Gtk.Label();
+            this.label13.Name = "label13";
+            this.label13.Xalign = 0F;
+            this.label13.LabelProp = Mono.Unix.Catalog.GetString("Requires:");
+            this.vbox4.Add(this.label13);
+            Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.vbox4[this.label13]));
+            w9.Position = 0;
+            w9.Expand = false;
+            w9.Fill = false;
+            // Container child vbox4.Gtk.Box+BoxChild
+            this.scrolledwindow1 = new Gtk.ScrolledWindow();
+            this.scrolledwindow1.CanFocus = true;
+            this.scrolledwindow1.Name = "scrolledwindow1";
+            this.scrolledwindow1.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow1.Gtk.Container+ContainerChild
+            Gtk.Viewport w10 = new Gtk.Viewport();
+            w10.ShadowType = ((Gtk.ShadowType)(0));
+            // Container child GtkViewport.Gtk.Container+ContainerChild
+            this.requiresTreeView = new Gtk.TreeView();
+            this.requiresTreeView.CanFocus = true;
+            this.requiresTreeView.Name = "requiresTreeView";
+            w10.Add(this.requiresTreeView);
+            this.scrolledwindow1.Add(w10);
+            this.vbox4.Add(this.scrolledwindow1);
+            Gtk.Box.BoxChild w13 = ((Gtk.Box.BoxChild)(this.vbox4[this.scrolledwindow1]));
+            w13.Position = 1;
+            this.vbox3.Add(this.vbox4);
+            Gtk.Box.BoxChild w14 = ((Gtk.Box.BoxChild)(this.vbox3[this.vbox4]));
+            w14.Position = 1;
+            w1.Add(this.vbox3);
+            Gtk.Box.BoxChild w15 = ((Gtk.Box.BoxChild)(w1[this.vbox3]));
+            w15.Position = 0;
+            // Internal child MonoDevelop.ValaBinding.PackageDetails.ActionArea
+            Gtk.HButtonBox w16 = this.ActionArea;
+            w16.Name = "dialog1_ActionArea";
+            w16.Spacing = 6;
+            w16.BorderWidth = ((uint)(5));
+            w16.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
+            // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+            this.buttonOk = new Gtk.Button();
+            this.buttonOk.CanDefault = true;
+            this.buttonOk.CanFocus = true;
+            this.buttonOk.Name = "buttonOk";
+            this.buttonOk.UseStock = true;
+            this.buttonOk.UseUnderline = true;
+            this.buttonOk.Label = "gtk-ok";
+            this.AddActionWidget(this.buttonOk, -5);
+            Gtk.ButtonBox.ButtonBoxChild w17 = ((Gtk.ButtonBox.ButtonBoxChild)(w16[this.buttonOk]));
+            w17.Expand = false;
+            w17.Fill = false;
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.DefaultWidth = 608;
+            this.DefaultHeight = 518;
+            this.Show();
+            this.buttonOk.Clicked += new System.EventHandler(this.OnButtonOkClicked);
+        }
+    }
+}
diff --git a/gtk-gui/generated.cs b/gtk-gui/generated.cs
new file mode 100644
index 0000000..35f420b
--- /dev/null
+++ b/gtk-gui/generated.cs
@@ -0,0 +1,115 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace Stetic {
+    
+    
+    internal class Gui {
+        
+        private static bool initialized;
+        
+        internal static void Initialize(Gtk.Widget iconRenderer) {
+            if ((Stetic.Gui.initialized == false)) {
+                Stetic.Gui.initialized = true;
+            }
+        }
+    }
+    
+    internal class BinContainer {
+        
+        private Gtk.Widget child;
+        
+        private Gtk.UIManager uimanager;
+        
+        public static BinContainer Attach(Gtk.Bin bin) {
+            BinContainer bc = new BinContainer();
+            bin.SizeRequested += new Gtk.SizeRequestedHandler(bc.OnSizeRequested);
+            bin.SizeAllocated += new Gtk.SizeAllocatedHandler(bc.OnSizeAllocated);
+            bin.Added += new Gtk.AddedHandler(bc.OnAdded);
+            return bc;
+        }
+        
+        private void OnSizeRequested(object sender, Gtk.SizeRequestedArgs args) {
+            if ((this.child != null)) {
+                args.Requisition = this.child.SizeRequest();
+            }
+        }
+        
+        private void OnSizeAllocated(object sender, Gtk.SizeAllocatedArgs args) {
+            if ((this.child != null)) {
+                this.child.Allocation = args.Allocation;
+            }
+        }
+        
+        private void OnAdded(object sender, Gtk.AddedArgs args) {
+            this.child = args.Widget;
+        }
+        
+        public void SetUiManager(Gtk.UIManager uim) {
+            this.uimanager = uim;
+            this.child.Realized += new System.EventHandler(this.OnRealized);
+        }
+        
+        private void OnRealized(object sender, System.EventArgs args) {
+            if ((this.uimanager != null)) {
+                Gtk.Widget w;
+                w = this.child.Toplevel;
+                if (((w != null) && typeof(Gtk.Window).IsInstanceOfType(w))) {
+                    ((Gtk.Window)(w)).AddAccelGroup(this.uimanager.AccelGroup);
+                    this.uimanager = null;
+                }
+            }
+        }
+    }
+    
+    internal class IconLoader {
+        
+        public static Gdk.Pixbuf LoadIcon(Gtk.Widget widget, string name, Gtk.IconSize size, int sz) {
+            Gdk.Pixbuf res = widget.RenderIcon(name, size, null);
+            if ((res != null)) {
+                return res;
+            }
+            else {
+                try {
+                    return Gtk.IconTheme.Default.LoadIcon(name, sz, 0);
+                }
+                catch (System.Exception ) {
+                    if ((name != "gtk-missing-image")) {
+                        return Stetic.IconLoader.LoadIcon(widget, "gtk-missing-image", size, sz);
+                    }
+                    else {
+                        Gdk.Pixmap pmap = new Gdk.Pixmap(Gdk.Screen.Default.RootWindow, sz, sz);
+                        Gdk.GC gc = new Gdk.GC(pmap);
+                        gc.RgbFgColor = new Gdk.Color(255, 255, 255);
+                        pmap.DrawRectangle(gc, true, 0, 0, sz, sz);
+                        gc.RgbFgColor = new Gdk.Color(0, 0, 0);
+                        pmap.DrawRectangle(gc, false, 0, 0, (sz - 1), (sz - 1));
+                        gc.SetLineAttributes(3, Gdk.LineStyle.Solid, Gdk.CapStyle.Round, Gdk.JoinStyle.Round);
+                        gc.RgbFgColor = new Gdk.Color(255, 0, 0);
+                        pmap.DrawLine(gc, (sz / 4), (sz / 4), ((sz - 1) - (sz / 4)), ((sz - 1) - (sz / 4)));
+                        pmap.DrawLine(gc, ((sz - 1) - (sz / 4)), (sz / 4), (sz / 4), ((sz - 1) - (sz / 4)));
+                        return Gdk.Pixbuf.FromDrawable(pmap, pmap.Colormap, 0, 0, 0, 0, sz, sz);
+                    }
+                }
+            }
+        }
+    }
+    
+    internal class ActionGroups {
+        
+        public static Gtk.ActionGroup GetActionGroup(System.Type type) {
+            return Stetic.ActionGroups.GetActionGroup(type.FullName);
+        }
+        
+        public static Gtk.ActionGroup GetActionGroup(string name) {
+            return null;
+        }
+    }
+}
diff --git a/gtk-gui/gui.stetic b/gtk-gui/gui.stetic
new file mode 100644
index 0000000..c98bc56
--- /dev/null
+++ b/gtk-gui/gui.stetic
@@ -0,0 +1,1795 @@
+<?xml version="1.0" encoding="utf-8"?>
+<stetic-interface>
+  <configuration>
+    <images-root-path>..</images-root-path>
+    <target-gtk-version>2.8</target-gtk-version>
+  </configuration>
+  <import>
+    <widget-library name="MonoDevelop.Core.Gui, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.Deployment, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.Ide, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.Components, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="Mono.TextEditor, Version=1.0.0.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.VersionControl, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.XmlEditor, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.Gettext, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.Deployment.Linux, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.VBNetBinding, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.CBinding, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.CSharpBinding, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.Autotools, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="MonoDevelop.Projects.Gui, Version=1.9.1.0, Culture=neutral" />
+    <widget-library name="../build/MonoDevelop.ValaBinding.dll" internal="true" />
+  </import>
+  <widget class="Gtk.Bin" id="MonoDevelop.ValaBinding.CodeGenerationPanel" design-size="611 396">
+    <property name="MemberName" />
+    <child>
+      <widget class="Gtk.Notebook" id="notebook1">
+        <property name="MemberName" />
+        <property name="CanFocus">True</property>
+        <property name="CurrentPage">0</property>
+        <child>
+          <widget class="Gtk.VBox" id="vbox6">
+            <property name="MemberName" />
+            <property name="Spacing">3</property>
+            <child>
+              <widget class="Gtk.Table" id="table1">
+                <property name="MemberName" />
+                <property name="NRows">4</property>
+                <property name="NColumns">2</property>
+                <property name="RowSpacing">5</property>
+                <property name="ColumnSpacing">5</property>
+                <property name="BorderWidth">2</property>
+                <child>
+                  <widget class="Gtk.Label" id="label10">
+                    <property name="MemberName" />
+                    <property name="Xpad">10</property>
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Warning Level:</property>
+                  </widget>
+                  <packing>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label4">
+                    <property name="MemberName" />
+                    <property name="Xpad">10</property>
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Multithreading:</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">3</property>
+                    <property name="BottomAttach">4</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label5">
+                    <property name="MemberName" />
+                    <property name="Xpad">10</property>
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Optimization Level:</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label6">
+                    <property name="MemberName" />
+                    <property name="Xpad">10</property>
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Target:</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">2</property>
+                    <property name="BottomAttach">3</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.SpinButton" id="optimizationSpinButton">
+                    <property name="MemberName" />
+                    <property name="Sensitive">False</property>
+                    <property name="CanFocus">True</property>
+                    <property name="Upper">3</property>
+                    <property name="PageIncrement">10</property>
+                    <property name="StepIncrement">1</property>
+                    <property name="ClimbRate">1</property>
+                    <property name="Numeric">True</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.ComboBox" id="targetComboBox">
+                    <property name="MemberName" />
+                    <property name="IsTextCombo">True</property>
+                    <property name="Items" translatable="yes">Executable
+Static Library
+Shared Object</property>
+                    <signal name="Changed" handler="OnTargetComboBoxChanged" />
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">2</property>
+                    <property name="BottomAttach">3</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.CheckButton" id="threadingCheckbox">
+                    <property name="MemberName">threadingCheckbox</property>
+                    <property name="CanFocus">True</property>
+                    <property name="Label" translatable="yes">Enable multithreading</property>
+                    <property name="DrawIndicator">True</property>
+                    <property name="HasLabel">True</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">3</property>
+                    <property name="BottomAttach">4</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.VBox" id="vbox1">
+                    <property name="MemberName" />
+                    <property name="Spacing">1</property>
+                    <child>
+                      <widget class="Gtk.RadioButton" id="noWarningRadio">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Label" translatable="yes">no warnings</property>
+                        <property name="Active">True</property>
+                        <property name="DrawIndicator">True</property>
+                        <property name="HasLabel">True</property>
+                        <property name="UseUnderline">True</property>
+                        <property name="Group">group1</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.RadioButton" id="normalWarningRadio">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Label" translatable="yes">normal</property>
+                        <property name="DrawIndicator">True</property>
+                        <property name="HasLabel">True</property>
+                        <property name="UseUnderline">True</property>
+                        <property name="Group">group1</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">1</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.RadioButton" id="allWarningRadio">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Label" translatable="yes">all</property>
+                        <property name="DrawIndicator">True</property>
+                        <property name="HasLabel">True</property>
+                        <property name="UseUnderline">True</property>
+                        <property name="Group">group1</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">2</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.CheckButton" id="warningsAsErrorsCheckBox">
+                        <property name="MemberName" />
+                        <property name="Sensitive">False</property>
+                        <property name="CanFocus">True</property>
+                        <property name="Label" translatable="yes">Treat warnings as errors</property>
+                        <property name="DrawIndicator">True</property>
+                        <property name="HasLabel">True</property>
+                        <property name="UseUnderline">True</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">3</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.HBox" id="hbox1">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Label" id="label12">
+                    <property name="MemberName" />
+                    <property name="Xpad">13</property>
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Define Symbols:</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Entry" id="defineSymbolsTextEntry">
+                    <property name="MemberName" />
+                    <property name="Tooltip" translatable="yes">A space-separated list of symbols to define.</property>
+                    <property name="CanFocus">True</property>
+                    <property name="IsEditable">True</property>
+                    <property name="InvisibleChar">●</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">False</property>
+                    <property name="Padding">14</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder />
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Frame" id="frame2">
+                <property name="MemberName" />
+                <property name="ShadowType">None</property>
+                <property name="LabelYalign">0</property>
+                <child>
+                  <widget class="Gtk.Alignment" id="GtkAlignment">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="Yalign">0</property>
+                    <property name="LeftPadding">12</property>
+                    <child>
+                      <widget class="Gtk.Table" id="table5">
+                        <property name="MemberName" />
+                        <property name="NRows">2</property>
+                        <property name="NColumns">1</property>
+                        <property name="RowSpacing">6</property>
+                        <property name="ColumnSpacing">9</property>
+                        <property name="BorderWidth">6</property>
+                        <child>
+                          <widget class="Gtk.Label" id="label7">
+                            <property name="MemberName" />
+                            <property name="Xalign">0</property>
+                            <property name="LabelProp" translatable="yes">Extra Compiler Options</property>
+                          </widget>
+                          <packing>
+                            <property name="AutoSize">False</property>
+                            <property name="XOptions">Fill</property>
+                            <property name="YOptions">Fill</property>
+                            <property name="XExpand">False</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">False</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="Gtk.ScrolledWindow" id="scrolledwindow4">
+                            <property name="MemberName" />
+                            <property name="CanFocus">True</property>
+                            <property name="ShadowType">In</property>
+                            <child>
+                              <widget class="Gtk.TextView" id="extraCompilerTextView">
+                                <property name="MemberName" />
+                                <property name="Tooltip" translatable="yes">A newline-separated list of extra options to send to the compiler.
+One option can be in more than one line.
+Example:
+	`--pkg
+	cairo`</property>
+                                <property name="CanFocus">True</property>
+                                <property name="Text" translatable="yes" />
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="TopAttach">1</property>
+                            <property name="BottomAttach">2</property>
+                            <property name="AutoSize">False</property>
+                            <property name="XExpand">True</property>
+                            <property name="XFill">True</property>
+                            <property name="XShrink">False</property>
+                            <property name="YExpand">True</property>
+                            <property name="YFill">True</property>
+                            <property name="YShrink">False</property>
+                          </packing>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="GtkLabel12">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes"><b>Extra Options</b></property>
+                    <property name="UseMarkup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="type">label_item</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">2</property>
+                <property name="AutoSize">False</property>
+              </packing>
+            </child>
+          </widget>
+        </child>
+        <child>
+          <widget class="Gtk.Label" id="label1">
+            <property name="MemberName" />
+            <property name="LabelProp" translatable="yes">Code Generation</property>
+          </widget>
+          <packing>
+            <property name="type">tab</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Table" id="table2">
+            <property name="MemberName" />
+            <property name="NRows">2</property>
+            <property name="NColumns">3</property>
+            <property name="RowSpacing">10</property>
+            <property name="ColumnSpacing">10</property>
+            <property name="BorderWidth">3</property>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <widget class="Gtk.Button" id="addLibButton">
+                <property name="MemberName" />
+                <property name="Sensitive">False</property>
+                <property name="CanFocus">True</property>
+                <property name="Type">TextOnly</property>
+                <property name="Label" translatable="yes">Add</property>
+                <property name="UseUnderline">True</property>
+                <signal name="Clicked" handler="OnLibAdded" />
+              </widget>
+              <packing>
+                <property name="LeftAttach">2</property>
+                <property name="RightAttach">3</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label8">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">Library:</property>
+              </widget>
+              <packing>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Entry" id="libAddEntry">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+                <signal name="Changed" handler="OnLibAddEntryChanged" />
+                <signal name="Activated" handler="OnLibAddEntryActivated" />
+              </widget>
+              <packing>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">True</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="ShadowType">In</property>
+                <child>
+                  <widget class="Gtk.TreeView" id="libTreeView">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="HeadersClickable">True</property>
+                    <signal name="CursorChanged" handler="OnLibTreeViewCursorChanged" />
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="XExpand">True</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">True</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.VBox" id="vbox4">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Button" id="browseButton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">Browse...</property>
+                    <property name="UseUnderline">True</property>
+                    <signal name="Clicked" handler="OnBrowseButtonClick" />
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="removeLibButton">
+                    <property name="MemberName" />
+                    <property name="Sensitive">False</property>
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">Remove</property>
+                    <property name="UseUnderline">True</property>
+                    <signal name="Clicked" handler="OnRemoveLibButtonClicked" />
+                    <signal name="Clicked" handler="OnLibRemoved" />
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder />
+                </child>
+              </widget>
+              <packing>
+                <property name="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="LeftAttach">2</property>
+                <property name="RightAttach">3</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">True</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Label" id="label2">
+            <property name="MemberName" />
+            <property name="LabelProp" translatable="yes">Libraries</property>
+          </widget>
+          <packing>
+            <property name="type">tab</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.VBox" id="vbox7">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <property name="BorderWidth">3</property>
+            <child>
+              <widget class="Gtk.Table" id="table3">
+                <property name="MemberName" />
+                <property name="NRows">2</property>
+                <property name="NColumns">3</property>
+                <property name="RowSpacing">10</property>
+                <property name="ColumnSpacing">10</property>
+                <child>
+                  <placeholder />
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="includePathAddButton">
+                    <property name="MemberName" />
+                    <property name="Sensitive">False</property>
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">Add</property>
+                    <property name="UseUnderline">True</property>
+                    <signal name="Clicked" handler="OnIncludePathAdded" />
+                  </widget>
+                  <packing>
+                    <property name="LeftAttach">2</property>
+                    <property name="RightAttach">3</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Entry" id="includePathEntry">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="IsEditable">True</property>
+                    <property name="InvisibleChar">●</property>
+                    <signal name="Changed" handler="OnIncludePathEntryChanged" />
+                    <signal name="Activated" handler="OnIncludePathEntryActivated" />
+                  </widget>
+                  <packing>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">True</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label9">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">Vapi Paths:</property>
+                  </widget>
+                  <packing>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.ScrolledWindow" id="scrolledwindow2">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="ShadowType">In</property>
+                    <child>
+                      <widget class="Gtk.TreeView" id="includePathTreeView">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="HeadersClickable">True</property>
+                        <signal name="CursorChanged" handler="OnIncludePathTreeViewCursorChanged" />
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XExpand">True</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">True</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.VBox" id="vbox5">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="Gtk.Button" id="includePathBrowseButton">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="Type">TextOnly</property>
+                        <property name="Label" translatable="yes">Browse...</property>
+                        <property name="UseUnderline">True</property>
+                        <signal name="Clicked" handler="OnIncludePathBrowseButtonClick" />
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Button" id="includePathRemoveButton">
+                        <property name="MemberName" />
+                        <property name="Sensitive">False</property>
+                        <property name="CanFocus">True</property>
+                        <property name="Type">TextOnly</property>
+                        <property name="Label" translatable="yes">Remove</property>
+                        <property name="UseUnderline">True</property>
+                        <signal name="Clicked" handler="OnIncludePathRemoveButtonClicked" />
+                        <signal name="Clicked" handler="OnIncludePathRemoved" />
+                      </widget>
+                      <packing>
+                        <property name="Position">1</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <placeholder />
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="LeftAttach">2</property>
+                    <property name="RightAttach">3</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">True</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">2</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Label" id="label3">
+            <property name="MemberName" />
+            <property name="LabelProp" translatable="yes">Paths</property>
+          </widget>
+          <packing>
+            <property name="type">tab</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="Gtk.Dialog" id="MonoDevelop.ValaBinding.AddLibraryDialog" design-size="648 439">
+    <property name="MemberName" />
+    <property name="Title" translatable="yes">Add Library</property>
+    <property name="Modal">True</property>
+    <property name="Buttons">2</property>
+    <property name="HelpButton">False</property>
+    <child internal-child="VBox">
+      <widget class="Gtk.VBox" id="dialog1_VBox">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">2</property>
+        <child>
+          <widget class="Gtk.FileChooserWidget" id="file_chooser_widget">
+            <property name="MemberName" />
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+    <child internal-child="ActionArea">
+      <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">5</property>
+        <property name="Size">2</property>
+        <property name="LayoutStyle">End</property>
+        <child>
+          <widget class="Gtk.Button" id="buttonCancel">
+            <property name="MemberName" />
+            <property name="CanDefault">True</property>
+            <property name="CanFocus">True</property>
+            <property name="UseStock">True</property>
+            <property name="Type">StockItem</property>
+            <property name="StockId">gtk-cancel</property>
+            <property name="ResponseId">-6</property>
+            <signal name="Clicked" handler="OnCancelButtonClick" />
+            <property name="label">gtk-cancel</property>
+          </widget>
+          <packing>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Button" id="buttonOk">
+            <property name="MemberName" />
+            <property name="CanDefault">True</property>
+            <property name="CanFocus">True</property>
+            <property name="UseStock">True</property>
+            <property name="Type">StockItem</property>
+            <property name="StockId">gtk-ok</property>
+            <property name="ResponseId">-5</property>
+            <signal name="Clicked" handler="OnOkButtonClick" />
+            <property name="label">gtk-ok</property>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="Gtk.Dialog" id="MonoDevelop.ValaBinding.AddPathDialog" design-size="649 436">
+    <property name="MemberName" />
+    <property name="Title" translatable="yes">Add Path</property>
+    <property name="Modal">True</property>
+    <property name="Buttons">2</property>
+    <property name="HelpButton">False</property>
+    <child internal-child="VBox">
+      <widget class="Gtk.VBox" id="dialog1_VBox">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">2</property>
+        <child>
+          <widget class="Gtk.FileChooserWidget" id="file_chooser_widget">
+            <property name="MemberName" />
+            <property name="ShowHidden">True</property>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+    <child internal-child="ActionArea">
+      <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">5</property>
+        <property name="Size">2</property>
+        <property name="LayoutStyle">End</property>
+        <child>
+          <widget class="Gtk.Button" id="buttonCancel">
+            <property name="MemberName" />
+            <property name="CanDefault">True</property>
+            <property name="CanFocus">True</property>
+            <property name="UseStock">True</property>
+            <property name="Type">StockItem</property>
+            <property name="StockId">gtk-cancel</property>
+            <property name="ResponseId">-6</property>
+            <signal name="Clicked" handler="OnCancelButtonClick" />
+            <property name="label">gtk-cancel</property>
+          </widget>
+          <packing>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Button" id="buttonOk">
+            <property name="MemberName" />
+            <property name="CanDefault">True</property>
+            <property name="CanFocus">True</property>
+            <property name="UseStock">True</property>
+            <property name="Type">StockItem</property>
+            <property name="StockId">gtk-ok</property>
+            <property name="ResponseId">-5</property>
+            <signal name="Clicked" handler="OnOkButtonClick" />
+            <property name="label">gtk-ok</property>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="Gtk.Bin" id="MonoDevelop.ValaBinding.OutputOptionsPanel" design-size="412 273">
+    <property name="MemberName" />
+    <child>
+      <widget class="Gtk.VBox" id="vbox2">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">3</property>
+        <child>
+          <widget class="Gtk.Table" id="table1">
+            <property name="MemberName" />
+            <property name="NRows">4</property>
+            <property name="NColumns">2</property>
+            <property name="RowSpacing">6</property>
+            <property name="ColumnSpacing">6</property>
+            <property name="BorderWidth">3</property>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <widget class="Gtk.HBox" id="hbox1">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Entry" id="outputPathTextEntry">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="IsEditable">True</property>
+                    <property name="InvisibleChar">●</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="browseButton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">_Browse</property>
+                    <property name="UseUnderline">True</property>
+                    <signal name="Clicked" handler="OnBrowseButtonClick" />
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="TopAttach">2</property>
+                <property name="BottomAttach">3</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">True</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label1">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes"><b>Output</b></property>
+                <property name="UseMarkup">True</property>
+              </widget>
+              <packing>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label2">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">Output Name:</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="XPadding">15</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label3">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">Output Path:</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">2</property>
+                <property name="BottomAttach">3</property>
+                <property name="XPadding">15</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label4">
+                <property name="MemberName" />
+                <property name="Xalign">0</property>
+                <property name="LabelProp" translatable="yes">Parameters:</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">3</property>
+                <property name="BottomAttach">4</property>
+                <property name="XPadding">15</property>
+                <property name="AutoSize">True</property>
+                <property name="XOptions">Fill</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">False</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Entry" id="outputNameTextEntry">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">1</property>
+                <property name="BottomAttach">2</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">True</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Entry" id="parametersTextEntry">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">●</property>
+              </widget>
+              <packing>
+                <property name="TopAttach">3</property>
+                <property name="BottomAttach">4</property>
+                <property name="LeftAttach">1</property>
+                <property name="RightAttach">2</property>
+                <property name="AutoSize">True</property>
+                <property name="YOptions">Fill</property>
+                <property name="XExpand">True</property>
+                <property name="XFill">True</property>
+                <property name="XShrink">False</property>
+                <property name="YExpand">False</property>
+                <property name="YFill">True</property>
+                <property name="YShrink">False</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.CheckButton" id="externalConsoleCheckbox">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="Label" translatable="yes">Run on e_xternal console</property>
+            <property name="Active">True</property>
+            <property name="DrawIndicator">True</property>
+            <property name="HasLabel">True</property>
+            <property name="UseUnderline">True</property>
+            <signal name="Clicked" handler="OnExternalConsoleCheckboxClicked" />
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.CheckButton" id="pauseCheckbox">
+            <property name="MemberName" />
+            <property name="Sensitive">False</property>
+            <property name="CanFocus">True</property>
+            <property name="Label" translatable="yes">Pause _console output</property>
+            <property name="DrawIndicator">True</property>
+            <property name="HasLabel">True</property>
+            <property name="UseUnderline">True</property>
+          </widget>
+          <packing>
+            <property name="Position">2</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="Gtk.Bin" id="MonoDevelop.ValaBinding.GeneralOptionsPanel" design-size="457 300">
+    <property name="MemberName" />
+    <child>
+      <widget class="Gtk.Table" id="table1">
+        <property name="MemberName" />
+        <property name="NRows">3</property>
+        <property name="NColumns">3</property>
+        <property name="RowSpacing">6</property>
+        <property name="ColumnSpacing">6</property>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <placeholder />
+        </child>
+        <child>
+          <widget class="Gtk.Label" id="label1">
+            <property name="MemberName" />
+            <property name="Xpad">10</property>
+            <property name="Xalign">0</property>
+            <property name="LabelProp" translatable="yes">Default Vala Compiler:</property>
+          </widget>
+          <packing>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.ComboBox" id="valaCombo">
+            <property name="MemberName" />
+            <property name="Tooltip" translatable="yes">Default compiler to use for new C projects.</property>
+            <property name="IsTextCombo">True</property>
+            <property name="Items" translatable="yes" />
+            <property name="Active">0</property>
+            <signal name="Changed" handler="OnValaComboChanged" />
+          </widget>
+          <packing>
+            <property name="LeftAttach">1</property>
+            <property name="RightAttach">2</property>
+            <property name="AutoSize">True</property>
+            <property name="XOptions">Fill</property>
+            <property name="YOptions">Fill</property>
+            <property name="XExpand">False</property>
+            <property name="XFill">True</property>
+            <property name="XShrink">False</property>
+            <property name="YExpand">False</property>
+            <property name="YFill">True</property>
+            <property name="YShrink">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="Gtk.Dialog" id="MonoDevelop.ValaBinding.EditPackagesDialog" design-size="580 449">
+    <property name="MemberName" />
+    <property name="Title" translatable="yes">Edit packages</property>
+    <property name="Modal">True</property>
+    <property name="Buttons">2</property>
+    <property name="HelpButton">False</property>
+    <child internal-child="VBox">
+      <widget class="Gtk.VBox" id="dialog1_VBox">
+        <property name="MemberName" />
+        <property name="BorderWidth">2</property>
+        <child>
+          <widget class="Gtk.VPaned" id="vpaned1">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="Position">183</property>
+            <property name="BorderWidth">6</property>
+            <child>
+              <widget class="Gtk.HBox" id="hbox1">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Notebook" id="notebook1">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="CurrentPage">0</property>
+                    <child>
+                      <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="ShadowType">In</property>
+                        <child>
+                          <widget class="Gtk.TreeView" id="normalPackageTreeView">
+                            <property name="MemberName" />
+                            <property name="CanFocus">True</property>
+                            <property name="HeadersClickable">True</property>
+                            <signal name="CursorChanged" handler="OnNonSelectedPackageCursorChanged" />
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label1">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">System Packages</property>
+                      </widget>
+                      <packing>
+                        <property name="type">tab</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.ScrolledWindow" id="scrolledwindow3">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="ShadowType">In</property>
+                        <child>
+                          <widget class="Gtk.TreeView" id="projectPackageTreeView">
+                            <property name="MemberName" />
+                            <property name="CanFocus">True</property>
+                            <property name="HeadersClickable">True</property>
+                            <signal name="CursorChanged" handler="OnNonSelectedPackageCursorChanged" />
+                          </widget>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="Position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Label" id="label2">
+                        <property name="MemberName" />
+                        <property name="LabelProp" translatable="yes">Project Packages</property>
+                      </widget>
+                      <packing>
+                        <property name="type">tab</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.VBox" id="vbox3">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="Gtk.Fixed" id="fixed1">
+                        <property name="MemberName" />
+                        <property name="HeightRequest">21</property>
+                        <property name="HasWindow">False</property>
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">False</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Button" id="detailsButton">
+                        <property name="MemberName" />
+                        <property name="WidthRequest">33</property>
+                        <property name="HeightRequest">33</property>
+                        <property name="Sensitive">False</property>
+                        <property name="CanFocus">True</property>
+                        <property name="Type">TextOnly</property>
+                        <property name="Label" translatable="yes">...</property>
+                        <property name="UseUnderline">True</property>
+                        <signal name="Clicked" handler="OnDetailsButtonClicked" />
+                      </widget>
+                      <packing>
+                        <property name="Position">1</property>
+                        <property name="AutoSize">True</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <placeholder />
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder />
+                </child>
+              </widget>
+              <packing>
+                <property name="Resize">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Table" id="table1">
+                <property name="MemberName" />
+                <property name="NRows">2</property>
+                <property name="NColumns">2</property>
+                <property name="RowSpacing">6</property>
+                <property name="ColumnSpacing">6</property>
+                <child>
+                  <placeholder />
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label3">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="Yalign">0</property>
+                    <property name="LabelProp" translatable="yes">Selected packages:</property>
+                  </widget>
+                  <packing>
+                    <property name="AutoSize">False</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">True</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.ScrolledWindow" id="scrolledwindow2">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="ShadowType">In</property>
+                    <child>
+                      <widget class="Gtk.TreeView" id="selectedPackageTreeView">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="HeadersClickable">True</property>
+                        <signal name="CursorChanged" handler="OnSelectedPackagesTreeViewCursorChanged" />
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">True</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.VBox" id="vbox2">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="Gtk.Button" id="removeButton">
+                        <property name="MemberName" />
+                        <property name="WidthRequest">33</property>
+                        <property name="HeightRequest">33</property>
+                        <property name="Sensitive">False</property>
+                        <property name="Tooltip">Remove selected package from the project.</property>
+                        <property name="CanFocus">True</property>
+                        <property name="Type">TextAndIcon</property>
+                        <property name="Icon">stock:gtk-remove Menu</property>
+                        <property name="Label" />
+                        <property name="UseUnderline">True</property>
+                        <signal name="Clicked" handler="OnRemoveButtonClicked" />
+                        <signal name="Clicked" handler="OnRemoveButtonClick" />
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">False</property>
+                        <property name="Expand">False</property>
+                        <property name="Fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <placeholder />
+                    </child>
+                    <child>
+                      <placeholder />
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">True</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+            <property name="Padding">3</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+    <child internal-child="ActionArea">
+      <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">5</property>
+        <property name="Size">2</property>
+        <property name="LayoutStyle">End</property>
+        <child>
+          <widget class="Gtk.Button" id="buttonCancel">
+            <property name="MemberName" />
+            <property name="CanDefault">True</property>
+            <property name="CanFocus">True</property>
+            <property name="UseStock">True</property>
+            <property name="Type">StockItem</property>
+            <property name="StockId">gtk-cancel</property>
+            <property name="ResponseId">-6</property>
+            <signal name="Clicked" handler="OnCancelButtonClick" />
+            <property name="label">gtk-cancel</property>
+          </widget>
+          <packing>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.Button" id="buttonOk">
+            <property name="MemberName" />
+            <property name="CanDefault">True</property>
+            <property name="CanFocus">True</property>
+            <property name="UseStock">True</property>
+            <property name="Type">StockItem</property>
+            <property name="StockId">gtk-ok</property>
+            <property name="ResponseId">-5</property>
+            <signal name="Clicked" handler="OnOkButtonClick" />
+            <property name="label">gtk-ok</property>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="Gtk.Dialog" id="MonoDevelop.ValaBinding.PackageDetails" design-size="608 518">
+    <property name="MemberName" />
+    <property name="Title" translatable="yes">Package Details</property>
+    <property name="WindowPosition">CenterOnParent</property>
+    <property name="Buttons">1</property>
+    <property name="HelpButton">False</property>
+    <property name="HasSeparator">False</property>
+    <child internal-child="VBox">
+      <widget class="Gtk.VBox" id="dialog1_VBox">
+        <property name="MemberName" />
+        <property name="BorderWidth">2</property>
+        <child>
+          <widget class="Gtk.VBox" id="vbox3">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <property name="BorderWidth">3</property>
+            <child>
+              <widget class="Gtk.Table" id="table1">
+                <property name="MemberName" />
+                <property name="NRows">3</property>
+                <property name="NColumns">2</property>
+                <property name="RowSpacing">6</property>
+                <property name="ColumnSpacing">6</property>
+                <child>
+                  <widget class="Gtk.Label" id="descriptionLabel">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="Yalign">0</property>
+                    <property name="LabelProp" translatable="yes">label12</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">2</property>
+                    <property name="BottomAttach">3</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label7">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Name:</property>
+                  </widget>
+                  <packing>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label8">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Version:</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label9">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="Yalign">0</property>
+                    <property name="LabelProp" translatable="yes">Description:</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">2</property>
+                    <property name="BottomAttach">3</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="nameLabel">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">label10</property>
+                  </widget>
+                  <packing>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="versionLabel">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">label11</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.VBox" id="vbox4">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Label" id="label13">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Requires:</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="ShadowType">In</property>
+                    <child>
+                      <widget class="Gtk.Viewport" id="GtkViewport">
+                        <property name="MemberName" />
+                        <property name="ShadowType">None</property>
+                        <child>
+                          <widget class="Gtk.TreeView" id="requiresTreeView">
+                            <property name="MemberName" />
+                            <property name="CanFocus">True</property>
+                            <property name="ShowScrollbars">True</property>
+                            <property name="HeadersClickable">True</property>
+                          </widget>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder />
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+    <child internal-child="ActionArea">
+      <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <property name="BorderWidth">5</property>
+        <property name="Size">1</property>
+        <property name="LayoutStyle">End</property>
+        <child>
+          <widget class="Gtk.Button" id="buttonOk">
+            <property name="MemberName" />
+            <property name="CanDefault">True</property>
+            <property name="CanFocus">True</property>
+            <property name="UseStock">True</property>
+            <property name="Type">StockItem</property>
+            <property name="StockId">gtk-ok</property>
+            <property name="ResponseId">-5</property>
+            <signal name="Clicked" handler="OnButtonOkClicked" />
+            <property name="label">gtk-ok</property>
+          </widget>
+          <packing>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</stetic-interface>
\ No newline at end of file
diff --git a/gtk-gui/objects.xml b/gtk-gui/objects.xml
new file mode 100644
index 0000000..2c33b19
--- /dev/null
+++ b/gtk-gui/objects.xml
@@ -0,0 +1,2 @@
+<objects attr-sync="on">
+</objects>
\ No newline at end of file
diff --git a/icons/Icons.16x16.PrivateUnion b/icons/Icons.16x16.PrivateUnion
new file mode 100644
index 0000000..cc32f48
Binary files /dev/null and b/icons/Icons.16x16.PrivateUnion differ
diff --git a/icons/Icons.16x16.ProjectReference b/icons/Icons.16x16.ProjectReference
new file mode 100644
index 0000000..1a80ef9
Binary files /dev/null and b/icons/Icons.16x16.ProjectReference differ
diff --git a/icons/Icons.16x16.ProtectedUnion b/icons/Icons.16x16.ProtectedUnion
new file mode 100644
index 0000000..df75b65
Binary files /dev/null and b/icons/Icons.16x16.ProtectedUnion differ
diff --git a/icons/Icons.16x16.Union b/icons/Icons.16x16.Union
new file mode 100644
index 0000000..40aae0f
Binary files /dev/null and b/icons/Icons.16x16.Union differ
diff --git a/icons/text-x-vala.16x16.png b/icons/text-x-vala.16x16.png
new file mode 100644
index 0000000..0fe1f50
Binary files /dev/null and b/icons/text-x-vala.16x16.png differ
diff --git a/icons/text-x-vala.24x24.png b/icons/text-x-vala.24x24.png
new file mode 100644
index 0000000..daa22b6
Binary files /dev/null and b/icons/text-x-vala.24x24.png differ
diff --git a/icons/text-x-vala.32x32.png b/icons/text-x-vala.32x32.png
new file mode 100644
index 0000000..d2e90a0
Binary files /dev/null and b/icons/text-x-vala.32x32.png differ
diff --git a/icons/text-x-vala.48x48.png b/icons/text-x-vala.48x48.png
new file mode 100644
index 0000000..b7def39
Binary files /dev/null and b/icons/text-x-vala.48x48.png differ
diff --git a/icons/vala-icon-32.png b/icons/vala-icon-32.png
new file mode 100644
index 0000000..528a7e6
Binary files /dev/null and b/icons/vala-icon-32.png differ
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..a5897de
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,519 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-12-25.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/missing b/missing
new file mode 100755
index 0000000..1c8ff70
--- /dev/null
+++ b/missing
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake at gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f y.tab.h; then
+	echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f lex.yy.c; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case $firstarg in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case $firstarg in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/templates/ConsoleValaProject.xpt.xml b/templates/ConsoleValaProject.xpt.xml
new file mode 100644
index 0000000..b1182cd
--- /dev/null
+++ b/templates/ConsoleValaProject.xpt.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<Template
+	originator   = "Levi Bard"
+    created      = "03/11/2008"
+    lastModified = "03/11/2008">
+	
+	<!-- Template Header -->
+	<TemplateConfiguration>
+		<_Name>Console Project</_Name>
+		<_Category>Vala</_Category>
+		<Icon>md-project-console|res:vala-icon-32.png</Icon>
+		<LanguageName>Vala</LanguageName>
+		<_Description>Creates a simple hello world Vala project.</_Description>
+	</TemplateConfiguration>
+	
+	<!-- Template Content -->
+	<Combine name = "${ProjectName}" directory = ".">
+		<Project name = "${ProjectName}" directory = "." type = "Vala">
+			<Options
+				Target = "Bin"
+				PauseConsoleOutput = "True"
+				CompilerArgs = ""
+				LinkerArgs = ""
+				Packages = "glib-2.0"
+				/>
+			
+			<Files>
+				<File name = "main.vala"><![CDATA[// project created on ${Date} at ${Time}
+using GLib;
+
+public class HelloVala: GLib.Object {
+	public static int main (string[] args) {
+		stdout.printf ("Hello world!\n");
+		
+		return 0;
+	}
+}]]></File>
+			</Files>
+		</Project>
+	</Combine>
+</Template>
diff --git a/templates/EmptyValaProject.xpt.xml b/templates/EmptyValaProject.xpt.xml
new file mode 100644
index 0000000..7b0a347
--- /dev/null
+++ b/templates/EmptyValaProject.xpt.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<Template
+	originator   = "Levi Bard"
+    created      = "03/11/2008"
+    lastModified = "03/11/2008">
+	
+	<!-- Template Header -->
+	<TemplateConfiguration>
+		<_Name>Empty Vala Project</_Name>
+		<_Category>Vala</_Category>
+		<Icon>md-project|res:vala-icon-32.png</Icon>
+		<LanguageName>Vala</LanguageName>
+		<_Description>Creates an empty Vala solution.</_Description>
+	</TemplateConfiguration>
+	
+	<!-- Template Content -->
+	<Combine name = "${ProjectName}" directory = ".">
+		<Project name = "${ProjectName}" directory = "." type = "Vala">
+			<Options
+				Target = "Bin"
+				PauseConsoleOutput = "True"
+				CompilerArgs = ""
+				LinkerArgs = ""
+				Packages = "glib-2.0"
+				/>
+		</Project>
+	</Combine>
+</Template>
diff --git a/templates/EmptyValaSourceFile.xft.xml b/templates/EmptyValaSourceFile.xft.xml
new file mode 100644
index 0000000..f0385e9
--- /dev/null
+++ b/templates/EmptyValaSourceFile.xft.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<Template
+	Originator="Levi Bard"
+	Language="Vala"
+	Created="03/11/2008"
+	LastModified="03/11/2008">
+	
+	<TemplateConfiguration>
+		<_Name>Empty Vala Source File</_Name>
+		<Icon>res:text-x-vala.32x32.png</Icon>
+		<_Category>General</_Category>
+		<LanguageName>Vala</LanguageName>
+		<_Description>Creates an empty Vala source file.</_Description>
+	</TemplateConfiguration>
+	
+	<TemplateFiles>
+		<File DefaultExtension=".vala" DefaultName="EmptyValaSourceFile"/>
+	</TemplateFiles>
+	
+	<FileOptions/>
+	
+</Template>
diff --git a/templates/SharedLibraryValaProject.xpt.xml b/templates/SharedLibraryValaProject.xpt.xml
new file mode 100644
index 0000000..9ec8d6d
--- /dev/null
+++ b/templates/SharedLibraryValaProject.xpt.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<Template
+	originator   = "Levi Bard" 
+    created      = "03/12/2008"
+    lastModified = "03/12/2008">
+	
+	<!-- Template Header -->
+	<TemplateConfiguration>
+		<_Name>Shared Library</_Name>
+		<_Category>Vala</_Category>
+		<Icon>md-project-library|res:vala-icon-32.png</Icon>
+		<LanguageName>Vala</LanguageName>
+		<_Description>Creates a simple shared library Vala project.</_Description>
+	</TemplateConfiguration>
+	
+	<!-- Template Content -->
+	<Combine name = "${ProjectName}" directory = ".">
+		<Project name = "${ProjectName}" directory = "." type = "Vala">
+			<Options
+				Target = "SharedLibrary"
+				PauseConsoleOutput = "True"
+				CompilerArgs = "" 
+				Packages = "glib-2.0"
+				/>
+			
+			<Files>
+				<File name = "main.vala"><![CDATA[// project created on ${Date} at ${Time}
+
+// Library content goes here
+
+]]></File>
+			</Files>
+		</Project>
+	</Combine>
+</Template>
diff --git a/templates/ValaTestFixture.xpt.xml b/templates/ValaTestFixture.xpt.xml
new file mode 100644
index 0000000..d8c69d5
--- /dev/null
+++ b/templates/ValaTestFixture.xpt.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<Template
+	originator   = "Levi Bard"
+    created      = "08/12/2008"
+    lastModified = "08/12/2008">
+	
+	<!-- Template Header -->
+	<TemplateConfiguration>
+		<_Name>Test Fixture</_Name>
+		<_Category>Vala</_Category>
+		<Icon>md-project-console|res:vala-icon-32.png</Icon>
+		<LanguageName>Vala</LanguageName>
+		<_Description>Creates a Vala test fixture.</_Description>
+	</TemplateConfiguration>
+	
+	<!-- Template Content -->
+	<Combine name = "${ProjectName}" directory = ".">
+		<Project name = "${ProjectName}" directory = "." type = "Vala">
+			<Options
+				Target = "Bin"
+				PauseConsoleOutput = "True"
+				CompilerArgs = ""
+				LinkerArgs = ""
+				Packages = "glib-2.0"
+				/>
+			
+			<Files>
+				<File name = "main.vala"><![CDATA[// project created on ${Date} at ${Time}
+using GLib;
+
+public class MyValaTest: GLib.Object {
+	public static void doTest() {
+		// Test code goes here
+	}
+	
+	public static int main (string[] args) {
+		Test.init(ref args);
+		
+		Test.add_func ("/MyValaTest/MyTest", doTest);
+		
+		Test.run();
+		
+		return 0;
+	}
+}]]></File>
+			</Files>
+		</Project>
+	</Combine>
+</Template>

-- 
monodevelop-vala



More information about the Pkg-cli-apps-commits mailing list