aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages
diff options
context:
space:
mode:
authorunmush <unmush@hashbang.sh>2024-11-26 12:55:57 +0200
committerEfraim Flashner <efraim@flashner.co.il>2024-12-22 15:37:34 +0200
commit7d96fa640a6b71af444493f745a93837a7ea3e70 (patch)
treeca26b782c00f8123eee7ffcd99fd44a3e37e5009 /gnu/packages
parentd65ac39c9130284692a0c856b2fc71241a2f8913 (diff)
downloadguix-7d96fa640a6b71af444493f745a93837a7ea3e70.tar.gz
guix-7d96fa640a6b71af444493f745a93837a7ea3e70.zip
gnu: Add mono-1.2.6.
* gnu/packages/dotnet.scm (mono-1.2.6): New variable. * gnu/packages/patches/mono-1.2.6-bootstrap.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Change-Id: I02799b39eb53f01f7103e9a127428f420b287f4a
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/dotnet.scm137
-rw-r--r--gnu/packages/patches/mono-1.2.6-bootstrap.patch585
2 files changed, 722 insertions, 0 deletions
diff --git a/gnu/packages/dotnet.scm b/gnu/packages/dotnet.scm
index db15cb3519..427ae28676 100644
--- a/gnu/packages/dotnet.scm
+++ b/gnu/packages/dotnet.scm
@@ -260,3 +260,140 @@ assembler, disassembler, and runtime engine.")
"DotGNU Portable.NET Library contains an implementation of the C# library,
for use with .NET-capable runtime engines and applications.")
(license license:gpl2+))))
+
+(define prepare-mono-source-0
+ #~((when (file-exists? "configure")
+ (delete-file "configure"))
+ (when (file-exists? "libgc")
+ (delete-file-recursively "libgc"))
+ ;; just to be sure
+ (for-each delete-file
+ (find-files "." "\\.(dll|exe|DLL|EXE|so)$"))
+ ;; We deleted docs/AgilityPack.dll earlier (if it existed), and it's
+ ;; required for building the documentation, so skip building the
+ ;; documentation. According to docs/README, "the sources to this DLL
+ ;; live in GNOME CVS module beagle/Filters/AgilityPack".
+ (substitute* "Makefile.am"
+ (("^(|DIST_|MOONLIGHT_|MONOTOUCH_)SUBDIRS =.*" all)
+ (string-replace-substring
+ (string-replace-substring
+ (string-replace-substring all " docs" "")
+ " $(libgc_dir)" "")
+ " libgc" "")))))
+
+;; A lot of the fixes are shared between many versions, and it doesn't hurt to
+;; apply them to versions before or after they are necessary, so just include
+;; them all.
+(define prepare-mono-source
+ #~(begin
+ #$@prepare-mono-source-0
+ (substitute* (filter file-exists?
+ '("configure.in"
+ "configure.ac"))
+ (("int f = isinf \\(1\\);")
+ "int f = isinf (1.0);"))
+ ;; makedev is in <sys/sysmacros.h> now. Include it.
+ (substitute* "mono/io-layer/processes.c"
+ (("#ifdef HAVE_SYS_MKDEV_H") "#if 1")
+ (("sys/mkdev.h") "sys/sysmacros.h"))
+ (substitute* (filter file-exists? '("mono/metadata/boehm-gc.c"))
+ (("GC_set_finalizer_notify_proc")
+ "GC_set_await_finalize_proc")
+ (("GC_toggleref_register_callback")
+ "GC_set_toggleref_func"))
+ (substitute* (filter file-exists? '("mono/utils/mono-compiler.h"))
+ (("static __thread gpointer x MONO_TLS_FAST")
+ "static __thread gpointer x __attribute__((used))"))
+ ;; Since the time the old mono versions were written at, gcc has started
+ ;; removing more things it thinks are unused (for example because they
+ ;; are only referenced in inline assembly of some sort).
+ (substitute* (filter file-exists? '("mono/metadata/sgen-alloc.c"))
+ (("static __thread char \\*\\*tlab_next_addr")
+ "static __thread char **tlab_next_addr __attribute__((used))"))
+ (substitute* (filter file-exists? '("mono/utils/mono-compiler.h"))
+ (("#define MONO_TLS_FAST ")
+ "#define MONO_TLS_FAST __attribute__((used)) "))))
+
+(define-public mono-1.2.6
+ (package
+ (version "1.2.6")
+ (name "mono")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "http://download.mono-project.com/sources/mono/"
+ "mono-" version ".tar.bz2"))
+ (sha256
+ (base32 "03sn7wyvrjkkkbrqajpmqifxfn83p30qprizpb3m6c5cdhwlzk14"))
+ (modules '((guix build utils)
+ (ice-9 string-fun)))
+ (snippet #~(begin
+ #$prepare-mono-source
+ (with-directory-excursion
+ "mcs/class/System/System.Text.RegularExpressions"
+ (delete-file "BaseMachine.cs")
+ ;; Can't patch a file with different line endings,
+ ;; so the patch creates a new one, and we overwrite
+ ;; the old one here.
+ (rename-file "BaseMachine.cs-2"
+ "BaseMachine.cs"))))
+ (patches (search-patches "mono-1.2.6-bootstrap.patch"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ (list autoconf
+ automake
+ bison
+ libtool
+ pnet-git
+ pnetlib-git
+ pkg-config))
+ (inputs
+ (list glib
+ libgc
+ libx11
+ zlib))
+ (arguments
+ (list
+ #:configure-flags #~(list "--with-gc=boehm")
+ #:make-flags #~(list (string-append "EXTERNAL_MCS="
+ #+(this-package-native-input "pnet-git")
+ "/bin/cscc")
+ (string-append "EXTERNAL_RUNTIME="
+ #+(this-package-native-input "pnet-git")
+ "/bin/ilrun")
+ "CFLAGS=-O2 -g -DARG_MAX=500"
+ #$(string-append "CC=" (cc-for-target))
+ "V=1")
+ ;; build fails nondeterministically without this
+ #:parallel-build? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'set-env
+ (lambda _
+ ;; All tests under mcs/class fail trying to access $HOME
+ (setenv "HOME" "/tmp")
+ ;; ZIP files have "DOS time" which starts in Jan 1980.
+ (setenv "SOURCE_DATE_EPOCH" "315532800"))))
+ ;; System.Object isn't marked as serializable because it causes issues
+ ;; with compiling with pnet (circular class reference between Object and
+ ;; SerializableAttribute), and this causes tests to fail.
+ #:tests? #f))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "MONO_PATH")
+ (files (list "lib/mono")))))
+ (synopsis "Compiler and libraries for the C# programming language")
+ (description "Mono is a compiler, vm, debugger and set of libraries for C#
+a C-style programming language from Microsoft that is very similar to Java.")
+ (home-page "https://www.mono-project.com/")
+ ;; See ./LICENSE
+ (license (list
+ ;; most of mcs/tools, mono/man, most of mcs/class, tests by
+ ;; default, mono/eglib
+ license:x11
+ ;; mcs/mcs, mcs/gmcs, some of mcs/tools
+ license:gpl1+ ;; note: ./mcs/LICENSE.GPL specifies no version
+ ;; mono/mono (the mono VM, I think they meant mono/mini)
+ license:lgpl2.0+ ;; note: ./mcs/LICENSE.LGPL specifies no version
+ ;; mcs/jay
+ license:bsd-4))))
diff --git a/gnu/packages/patches/mono-1.2.6-bootstrap.patch b/gnu/packages/patches/mono-1.2.6-bootstrap.patch
new file mode 100644
index 0000000000..0f6efd4a03
--- /dev/null
+++ b/gnu/packages/patches/mono-1.2.6-bootstrap.patch
@@ -0,0 +1,585 @@
+diff --git a/mcs/class/System/System.Diagnostics/ICollectData.cs b/mcs/class/System/System.Diagnostics/ICollectData.cs
+index c52f9871589..c66c1936d3d 100644
+--- a/mcs/class/System/System.Diagnostics/ICollectData.cs
++++ b/mcs/class/System/System.Diagnostics/ICollectData.cs
+@@ -41,7 +41,7 @@ namespace System.Diagnostics
+ #endif
+ public interface ICollectData {
+ void CloseData ();
+- [return: MarshalAs(UnmanagedType.I4)]
++ //[return: MarshalAs(UnmanagedType.I4)]
+ void CollectData (
+ [In] [MarshalAs(UnmanagedType.I4)] int id,
+ [In] [MarshalAs(UnmanagedType.SysInt)] IntPtr valueName,
+diff --git a/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs b/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs
+index 280e6a97227..c41816dca24 100644
+--- a/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs
++++ b/mcs/class/System/System.Diagnostics/LocalFileEventLog.cs
+@@ -140,6 +140,30 @@ namespace System.Diagnostics
+ file_watcher.EnableRaisingEvents = false;
+ }
+
++ void FileCreationWatcher(object o, FileSystemEventArgs e)
++ {
++ lock (this) {
++ if (_notifying)
++ return;
++ _notifying = true;
++ }
++
++ // Process every new entry in one notification event.
++ try {
++ while (GetLatestIndex () > last_notification_index) {
++ try {
++ CoreEventLog.OnEntryWritten (GetEntry (last_notification_index++));
++ } catch (Exception ex) {
++ // FIXME: find some proper way to output this error
++ Debug.WriteLine (ex);
++ }
++ }
++ } finally {
++ lock (this)
++ _notifying = false;
++ }
++ }
++
+ public override void EnableNotification ()
+ {
+ if (file_watcher == null) {
+@@ -149,28 +173,7 @@ namespace System.Diagnostics
+
+ file_watcher = new FileSystemWatcher ();
+ file_watcher.Path = logDir;
+- file_watcher.Created += delegate (object o, FileSystemEventArgs e) {
+- lock (this) {
+- if (_notifying)
+- return;
+- _notifying = true;
+- }
+-
+- // Process every new entry in one notification event.
+- try {
+- while (GetLatestIndex () > last_notification_index) {
+- try {
+- CoreEventLog.OnEntryWritten (GetEntry (last_notification_index++));
+- } catch (Exception ex) {
+- // FIXME: find some proper way to output this error
+- Debug.WriteLine (ex);
+- }
+- }
+- } finally {
+- lock (this)
+- _notifying = false;
+- }
+- };
++ file_watcher.Created += new FileSystemEventHandler(FileCreationWatcher);
+ }
+ last_notification_index = GetLatestIndex ();
+ file_watcher.EnableRaisingEvents = true;
+diff --git a/mcs/class/System/System.IO/InotifyWatcher.cs b/mcs/class/System/System.IO/InotifyWatcher.cs
+index d8e7acce3a7..7b0907eebc1 100644
+--- a/mcs/class/System/System.IO/InotifyWatcher.cs
++++ b/mcs/class/System/System.IO/InotifyWatcher.cs
+@@ -423,19 +423,36 @@ namespace System.IO {
+ return 16 + len;
+ }
+
++ class ThingEnumerator : IEnumerator, IEnumerable
++ {
++ object thing;
++ int j;
++ public ThingEnumerator(object thing)
++ { this.thing = thing; j = -1; }
++
++ public IEnumerator GetEnumerator() { return this; }
++ public bool MoveNext()
++ {
++ if(thing == null) { return false; }
++ if(thing is ArrayList)
++ {
++ ArrayList list = (ArrayList) thing;
++ if(j+1 >= list.Count) { return false; }
++ j++;
++ return true;
++ }
++ if(j == -1) { j = 0; return true; }
++ return false;
++ }
++ public void Reset() { j = -1; }
++ public object Current
++ { get { if(thing is ArrayList) return ((ArrayList)thing)[j];
++ return thing; }}
++ }
++
+ static IEnumerable GetEnumerator (object source)
+ {
+- if (source == null)
+- yield break;
+-
+- if (source is InotifyData)
+- yield return source;
+-
+- if (source is ArrayList) {
+- ArrayList list = (ArrayList) source;
+- for (int i = 0; i < list.Count; i++)
+- yield return list [i];
+- }
++ return new ThingEnumerator(source);
+ }
+
+ /* Interesting events:
+diff --git a/mcs/class/System/System.Net/ServicePoint.cs b/mcs/class/System/System.Net/ServicePoint.cs
+index a884d90f507..e1c73b098c2 100644
+--- a/mcs/class/System/System.Net/ServicePoint.cs
++++ b/mcs/class/System/System.Net/ServicePoint.cs
+@@ -137,7 +137,7 @@ namespace System.Net
+ get {
+ return idleSince;
+ }
+- internal set {
++ set {
+ lock (locker)
+ idleSince = value;
+ }
+diff --git a/mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs-2 b/mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs-2
+new file mode 100644
+index 00000000000..a685e2679b7
+--- /dev/null
++++ b/mcs/class/System/System.Text.RegularExpressions/BaseMachine.cs-2
+@@ -0,0 +1,168 @@
++//
++// BaseMachine.jvm.cs
++//
++// Author:
++// author: Dan Lewis (dlewis@gmx.co.uk)
++// (c) 2002
++// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
++//
++
++//
++// 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.Specialized;
++
++namespace System.Text.RegularExpressions
++{
++ abstract class BaseMachine : IMachine
++ {
++ internal delegate void MatchAppendEvaluator (Match match, StringBuilder sb);
++
++ public virtual string Replace (Regex regex, string input, string replacement, int count, int startat)
++ {
++ ReplacementEvaluator ev = new ReplacementEvaluator (regex, replacement);
++ if (regex.RightToLeft)
++ return RTLReplace (regex, input, new MatchEvaluator (ev.Evaluate), count, startat);
++ else
++ return LTRReplace (regex, input, new MatchAppendEvaluator (ev.EvaluateAppend), count, startat);
++ }
++
++ virtual public string [] Split (Regex regex, string input, int count, int startat)
++ {
++ ArrayList splits = new ArrayList ();
++ if (count == 0)
++ count = Int32.MaxValue;
++
++ int ptr = startat;
++ Match m = null;
++ while (--count > 0) {
++ if (m != null)
++ m = m.NextMatch ();
++ else
++ m = regex.Match (input, ptr);
++
++ if (!m.Success)
++ break;
++
++ if (regex.RightToLeft)
++ splits.Add (input.Substring (m.Index + m.Length, ptr - m.Index - m.Length));
++ else
++ splits.Add (input.Substring (ptr, m.Index - ptr));
++
++ int gcount = m.Groups.Count;
++ for (int gindex = 1; gindex < gcount; gindex++) {
++ Group grp = m.Groups [gindex];
++ splits.Add (input.Substring (grp.Index, grp.Length));
++ }
++
++ if (regex.RightToLeft)
++ ptr = m.Index;
++ else
++ ptr = m.Index + m.Length;
++
++ }
++
++ if (regex.RightToLeft && ptr >= 0)
++ splits.Add (input.Substring (0, ptr));
++ if (!regex.RightToLeft && ptr <= input.Length)
++ splits.Add (input.Substring (ptr));
++
++ return (string []) splits.ToArray (typeof (string));
++ }
++
++ virtual public Match Scan (Regex regex, string text, int start, int end)
++ {
++ throw new NotImplementedException ("Scan method must be implemented in derived classes");
++ }
++
++ virtual public string Result (string replacement, Match match)
++ {
++ return ReplacementEvaluator.Evaluate (replacement, match);
++ }
++
++ internal static string LTRReplace (Regex regex, string input, MatchAppendEvaluator evaluator, int count, int startat)
++ {
++ Match m = regex.Match (input, startat);
++ if (!m.Success)
++ return input;
++
++ StringBuilder result = new StringBuilder ();
++ int ptr = startat;
++ int counter = count;
++
++ result.Append (input, 0, ptr);
++
++ do {
++ if (count != -1)
++ if (counter-- <= 0)
++ break;
++ if (m.Index < ptr)
++ throw new SystemException ("how");
++ result.Append (input, ptr, m.Index - ptr);
++ evaluator (m, result);
++
++ ptr = m.Index + m.Length;
++ m = m.NextMatch ();
++ } while (m.Success);
++
++ result.Append (input, ptr, input.Length - ptr);
++
++ return result.ToString ();
++ }
++
++ internal static string RTLReplace (Regex regex, string input, MatchEvaluator evaluator, int count, int startat)
++ {
++ Match m = regex.Match (input, startat);
++ if (!m.Success)
++ return input;
++
++ int ptr = startat;
++ int counter = count;
++ StringCollection pieces = new StringCollection ();
++ pieces.Add (input.Substring (ptr));
++
++ do {
++ if (count != -1)
++ if (counter-- <= 0)
++ break;
++ if (m.Index + m.Length > ptr)
++ throw new SystemException ("how");
++ pieces.Add (input.Substring (m.Index + m.Length, ptr - m.Index - m.Length));
++ pieces.Add (evaluator (m));
++
++ ptr = m.Index;
++ m = m.NextMatch ();
++ } while (m.Success);
++
++ StringBuilder result = new StringBuilder ();
++
++ result.Append (input, 0, ptr);
++ for (int i = pieces.Count; i > 0; )
++ result.Append (pieces [--i]);
++
++ pieces.Clear ();
++
++ return result.ToString ();
++ }
++ }
++}
+diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs
+index 94069d1727e..042574178fa 100644
+--- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs
++++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodCall.cs
+@@ -272,6 +272,10 @@ namespace System.Runtime.Remoting.Messaging {
+ set { _uri = value; }
+ }
+
++ string IMethodMessage.Uri {
++ get { return Uri; }
++ }
++
+ string IInternalMessage.Uri {
+ get { return Uri; }
+ set { Uri = value; }
+diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs
+index 1b1eab014b3..575e7e37dee 100644
+--- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs
++++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/MethodResponse.cs
+@@ -272,6 +272,10 @@ namespace System.Runtime.Remoting.Messaging {
+ }
+ }
+
++ string IMethodMessage.Uri {
++ get { return Uri; }
++ }
++
+ string IInternalMessage.Uri {
+ get { return Uri; }
+ set { Uri = value; }
+diff --git a/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs b/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs
+index aee39f5bb81..ec09b73c15d 100644
+--- a/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs
++++ b/mcs/class/corlib/System.Runtime.Remoting.Messaging/ReturnMessage.cs
+@@ -166,6 +166,10 @@ namespace System.Runtime.Remoting.Messaging
+ }
+ }
+
++ string IMethodMessage.Uri {
++ get { return Uri; }
++ }
++
+ string IInternalMessage.Uri {
+ get { return Uri; }
+ set { Uri = value; }
+diff --git a/mcs/class/corlib/System/MulticastDelegate.cs b/mcs/class/corlib/System/MulticastDelegate.cs
+index b36aff33492..cf9134a33b3 100644
+--- a/mcs/class/corlib/System/MulticastDelegate.cs
++++ b/mcs/class/corlib/System/MulticastDelegate.cs
+@@ -262,16 +262,16 @@ namespace System
+
+ public static bool operator == (MulticastDelegate a, MulticastDelegate b)
+ {
+- if (a == null)
+- return b == null;
++ if ((object)a == null)
++ return (object)b == null;
+
+ return a.Equals (b);
+ }
+
+ public static bool operator != (MulticastDelegate a, MulticastDelegate b)
+ {
+- if (a == null)
+- return b != null;
++ if ((object)a == null)
++ return (object)b != null;
+
+ return !a.Equals (b);
+ }
+diff --git a/mcs/class/corlib/System/Object.cs b/mcs/class/corlib/System/Object.cs
+index 6b0a03d2a31..694cbd454e1 100644
+--- a/mcs/class/corlib/System/Object.cs
++++ b/mcs/class/corlib/System/Object.cs
+@@ -40,7 +40,7 @@ using System.Runtime.ConstrainedExecution;
+
+ namespace System {
+
+- [Serializable]
++ //[Serializable]
+ [ClassInterface (ClassInterfaceType.AutoDual)]
+ #if NET_2_0
+ [ComVisible (true)]
+@@ -47,6 +47,12 @@
+ #endif
+ public class Object {
+
++ // Default definition of the object finalizer.
++ #if NET_2_0
++ [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)]
++ #endif
++ protected virtual void Finalize() {}
++
+ // <summary>
+ // Compares this object to the specified object.
+ // Returns true if they are equal, false otherwise.
+@@ -80,16 +86,6 @@ namespace System {
+ {
+ }
+
+- // <summary>
+- // Object destructor.
+- // </summary>
+-#if NET_2_0
+- [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)]
+-#endif
+- ~Object ()
+- {
+- }
+-
+ // <summary>
+ // Returns a hashcode for this object. Each derived
+ // class should return a hash code that makes sense
+diff --git a/mcs/mcs/codegen.cs b/mcs/mcs/codegen.cs
+index c94a61772f4..8546d671ec6 100644
+--- a/mcs/mcs/codegen.cs
++++ b/mcs/mcs/codegen.cs
+@@ -498,7 +498,7 @@ namespace Mono.CSharp {
+
+ // utility helper for CheckExpr, UnCheckExpr, Checked and Unchecked statements
+ // it's public so that we can use a struct at the callsite
+- public struct FlagsHandle : IDisposable
++ public class FlagsHandle : IDisposable
+ {
+ EmitContext ec;
+ readonly Flags invmask, oldval;
+diff --git a/mcs/mcs/typemanager.cs b/mcs/mcs/typemanager.cs
+index 1e173de89d2..58477af41a3 100644
+--- a/mcs/mcs/typemanager.cs
++++ b/mcs/mcs/typemanager.cs
+@@ -629,18 +629,42 @@ namespace Mono.CSharp {
+ return CSharpName (GetFullName (t));
+ }
+
++ static bool StartsWithWord(string haystack, string check)
++ {
++ if(String.Compare(haystack, 0, check, 0, check.Length, false) != 0)
++ { return false; }
++ if(check.Length == haystack.Length) { return true; }
++ char c = haystack[check.Length];
++ return !(Char.IsLetter(c) || Char.IsDigit(c));
++ }
++
+ public static string CSharpName (string name)
+ {
+ if (name.StartsWith (AnonymousTypeClass.ClassNamePrefix))
+ return AnonymousTypeClass.SignatureForError;
+-
+- return Regex.Replace (name,
+- @"^System\." +
+- @"(Int32|UInt32|Int16|UInt16|Int64|UInt64|" +
+- @"Single|Double|Char|Decimal|Byte|SByte|Object|" +
+- @"Boolean|String|Void|Null)" +
+- @"(\W+|\b)",
+- new MatchEvaluator (CSharpNameMatch)).Replace ('+', '.');
++
++ int l = "System.".Length;
++ if(name.StartsWith("System.") && name.Length > l)
++ {
++ string s2 = name.Substring(l).ToLower();
++ if(StartsWithWord(s2, "int32"))
++ return "int";
++ if(StartsWithWord(s2, "uint32"))
++ return "uint";
++ if(StartsWithWord(s2, "int16"))
++ return "short";
++ if(StartsWithWord(s2, "uint16"))
++ return "ushort";
++ if(StartsWithWord(s2, "int64"))
++ return "long";
++ if(StartsWithWord(s2, "uint64"))
++ return "ulong";
++ if(StartsWithWord(s2, "single"))
++ return "float";
++ if(StartsWithWord(s2, "boolean"))
++ return "bool";
++ }
++ return name;
+ }
+
+ static public string CSharpName (Type[] types)
+@@ -654,21 +678,6 @@ namespace Mono.CSharp {
+ return sb.ToString ();
+ }
+
+- static String CSharpNameMatch (Match match)
+- {
+- string s = match.Groups [1].Captures [0].Value;
+- return s.ToLower ().
+- Replace ("int32", "int").
+- Replace ("uint32", "uint").
+- Replace ("int16", "short").
+- Replace ("uint16", "ushort").
+- Replace ("int64", "long").
+- Replace ("uint64", "ulong").
+- Replace ("single", "float").
+- Replace ("boolean", "bool")
+- + match.Groups [2].Captures [0].Value;
+- }
+-
+ // Used for error reporting to show symbolic name instead of underlying value
+ public static string CSharpEnumValue (Type t, object value)
+ {
+diff --git a/mono/io-layer/processes.c b/mono/io-layer/processes.c
+index cd6176cdda2..486087d3a1b 100644
+--- a/mono/io-layer/processes.c
++++ b/mono/io-layer/processes.c
+@@ -15,6 +15,7 @@
+ #include <sys/time.h>
+ #include <errno.h>
+ #include <sys/types.h>
++#include <sys/sysmacros.h>
+ #include <unistd.h>
+ #include <signal.h>
+ #include <sys/wait.h>
+diff --git a/mono/metadata/Makefile.am b/mono/metadata/Makefile.am
+index 6ff2368895b..b8ba66e8756 100644
+--- a/mono/metadata/Makefile.am
++++ b/mono/metadata/Makefile.am
+@@ -154,7 +154,6 @@ libmonoruntimeinclude_HEADERS = \
+ object.h \
+ exception.h \
+ profiler.h \
+- appdomain.h \
+ mono-config.h \
+ debug-helpers.h \
+ mempool.h
+diff --git a/mono/metadata/class.c b/mono/metadata/class.c
+index f13f37632fe..128710337f4 100644
+--- a/mono/metadata/class.c
++++ b/mono/metadata/class.c
+@@ -2695,10 +2695,10 @@ initialize_object_slots (MonoClass *class)
+ finalize_slot = i;
+ }
+
+- g_assert (ghc_slot > 0);
++ g_assert (ghc_slot >= 0);
+ default_ghc = class->vtable [ghc_slot];
+
+- g_assert (finalize_slot > 0);
++ g_assert (finalize_slot >= 0);
+ default_finalize = class->vtable [finalize_slot];
+ }
+ }
+diff --git a/mono/metadata/object.c b/mono/metadata/object.c
+index 2b6f4909b34..ef4c8fd8b44 100644
+--- a/mono/metadata/object.c
++++ b/mono/metadata/object.c
+@@ -861,7 +861,7 @@ mono_class_compute_gc_descriptor (MonoClass *class)
+ mono_register_jit_icall (GC_local_gcj_fast_malloc, "GC_local_gcj_fast_malloc", mono_create_icall_signature ("object int ptr"), FALSE);
+ #endif
+ mono_register_jit_icall (GC_gcj_malloc, "GC_gcj_malloc", mono_create_icall_signature ("object int ptr"), FALSE);
+- mono_register_jit_icall (GC_gcj_fast_malloc, "GC_gcj_fast_malloc", mono_create_icall_signature ("object int ptr"), FALSE);
++ mono_register_jit_icall (GC_gcj_malloc, "GC_gcj_fast_malloc", mono_create_icall_signature ("object int ptr"), FALSE);
+ #endif
+ gcj_inited = TRUE;
+ mono_loader_unlock ();
+diff --git a/runtime/Makefile.am b/runtime/Makefile.am
+index 779787b3ce3..b67957dcf16 100644
+--- a/runtime/Makefile.am
++++ b/runtime/Makefile.am
+@@ -1,6 +1,3 @@
+-# hack to prevent 'check' from depending on 'all'
+-AUTOMAKE_OPTIONS = cygnus
+-
+ tmpinst = _tmpinst
+
+ noinst_SCRIPTS = mono-wrapper monodis-wrapper semdel-wrapper