Hi all,

Through some dirty fixes, I was able to build Python.NET on Ubuntu. Can
anyone please review and merge my patch (attached) ?

Thanks,
Vikas

Changes:
1. Added namespace to src/runtime/pyansistring.cs
2. Some generalizations in src/monoclr/Makefile
3. I was getting error "Irrecoverable syntax error" with ilasm on
clrmodule.il . Fixed by following changes:
   3.1 Renamed src/runtime/clrmodule.il to src/runtime/clrmodule.pp.il .
   3.2 Modified ./Makefile to run cpp preprocessor on src/runtime/
clrmodule.pp.il and generate src/runtime/clrmodule.il
Index: src/runtime/pyansistring.cs
===================================================================
--- src/runtime/pyansistring.cs	(revision 126)
+++ src/runtime/pyansistring.cs	(working copy)
@@ -1,63 +1,82 @@
-public class PyAnsiString : PySequence {
-	/// <summary>
-	/// PyAnsiString Constructor
-	/// </summary>
-	///
-	/// <remarks>
-	/// Creates a new PyAnsiString from an existing object reference. Note
-	/// that the instance assumes ownership of the object reference.
-	/// The object reference is not checked for type-correctness.
-	/// </remarks>
-
-	public PyAnsiString(IntPtr ptr) : base(ptr) { }
-
-
-	/// <summary>
-	/// PyString Constructor
-	/// </summary>
-	///
-	/// <remarks>
-	/// Copy constructor - obtain a PyAnsiString from a generic PyObject.
-	/// An ArgumentException will be thrown if the given object is not
-	/// a Python string object.
-	/// </remarks>
-
-	public PyAnsiString(PyObject o)
-		: base() {
-		if (!IsStringType(o)) {
-			throw new ArgumentException("object is not a string");
-		}
-		Runtime.Incref(o.obj);
-		obj = o.obj;
-	}
-
-
-	/// <summary>
-	/// PyAnsiString Constructor
-	/// </summary>
-	///
-	/// <remarks>
-	/// Creates a Python string from a managed string.
-	/// </remarks>
-
-	public PyAnsiString(string s)
-		: base() {
-		obj = Runtime.PyString_FromStringAndSize(s, s.Length);
-		if (obj == IntPtr.Zero) {
-			throw new PythonException();
-		}
-	}
-
-
-	/// <summary>
-	/// IsStringType Method
-	/// </summary>
-	///
-	/// <remarks>
-	/// Returns true if the given object is a Python string.
-	/// </remarks>
-
-	public static bool IsStringType(PyObject value) {
-		return Runtime.PyString_Check(value.obj);
-	}
-}
\ No newline at end of file
+// ==========================================================================
+// This software is subject to the provisions of the Zope Public License,
+// Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+// THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+// WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+// FOR A PARTICULAR PURPOSE.
+// ==========================================================================
+
+using System;
+namespace Python.Runtime {
+
+    /// <summary>
+    /// Represents a standard Python list object. See the documentation at
+    /// http://www.python.org/doc/current/api/listObjects.html for details.
+    /// </summary>
+
+    public class PyAnsiString : PySequence {
+        /// <summary>
+        /// PyAnsiString Constructor
+        /// </summary>
+        ///
+        /// <remarks>
+        /// Creates a new PyAnsiString from an existing object reference. Note
+        /// that the instance assumes ownership of the object reference.
+        /// The object reference is not checked for type-correctness.
+        /// </remarks>
+
+        public PyAnsiString(IntPtr ptr) : base(ptr) { }
+
+
+        /// <summary>
+        /// PyString Constructor
+        /// </summary>
+        ///
+        /// <remarks>
+        /// Copy constructor - obtain a PyAnsiString from a generic PyObject.
+        /// An ArgumentException will be thrown if the given object is not
+        /// a Python string object.
+        /// </remarks>
+
+        public PyAnsiString(PyObject o)
+            : base() {
+            if (!IsStringType(o)) {
+                throw new ArgumentException("object is not a string");
+            }
+            Runtime.Incref(o.obj);
+            obj = o.obj;
+        }
+
+
+        /// <summary>
+        /// PyAnsiString Constructor
+        /// </summary>
+        ///
+        /// <remarks>
+        /// Creates a Python string from a managed string.
+        /// </remarks>
+
+        public PyAnsiString(string s)
+            : base() {
+            obj = Runtime.PyString_FromStringAndSize(s, s.Length);
+            if (obj == IntPtr.Zero) {
+                throw new PythonException();
+            }
+        }
+
+
+        /// <summary>
+        /// IsStringType Method
+        /// </summary>
+        ///
+        /// <remarks>
+        /// Returns true if the given object is a Python string.
+        /// </remarks>
+
+        public static bool IsStringType(PyObject value) {
+            return Runtime.PyString_Check(value.obj);
+        }
+    }
+}
+
Index: src/runtime/clrmodule.pp.il
===================================================================
--- src/runtime/clrmodule.pp.il	(revision 0)
+++ src/runtime/clrmodule.pp.il	(revision 0)
@@ -0,0 +1,274 @@
+// ==========================================================================
+// This software is subject to the provisions of the Zope Public License,
+// Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+// THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+// WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+// FOR A PARTICULAR PURPOSE.
+// ==========================================================================
+
+//============================================================================
+// This file is a hand-maintained stub - it implements clr.dll, which can be
+// loaded by a standard CPython interpreter as an extension module. When it
+// is loaded, it bootstraps the managed runtime integration layer and defers
+// to it to do initialization and put the clr module into sys.modules, etc.
+
+// The "USE_PYTHON_RUNTIME_*" defines control what extra evidence is used
+// to help the CLR find the appropriate Python.Runtime assembly.
+
+// If defined, the "pythonRuntimeVersionString" variable must be set to
+// Python.Runtime's current version.
+#define USE_PYTHON_RUNTIME_VERSION
+
+// If defined, the "PythonRuntimePublicKeyTokenData" data array must be
+// set to Python.Runtime's public key token.
+//#define USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
+
+// If DEBUG_PRINT is defined, a few System.Console.WriteLine calls are made
+// to indicate what's going on during the load...
+//#define DEBUG_PRINT
+//============================================================================
+
+.assembly extern mscorlib
+{
+	.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
+	.ver 2:0:0:0
+}
+
+.assembly clr
+{
+	.hash algorithm 0x00008004
+	.ver 2:0:0:2
+}
+
+.module clr.dll
+.imagebase 0x00400000
+.subsystem 0x00000003
+.file alignment 512
+
+// This includes the platform-specific IL.  The include search path
+// is set depending on whether we're compiling 32 or 64 bit.
+// This MUST come before any other .data directives!
+// Why, oh why, can't ilasm support command line #defines? :(
+#include "clrmodule-platform.il"
+
+#ifdef USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
+.data PythonRuntimePublicKeyTokenData = bytearray (64 e1 4e 84 5a bf 2e 60)
+#endif
+
+.class public auto ansi beforefieldinit clrModule extends [mscorlib]System.Object
+{
+#ifdef USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
+	.field static assembly int64 PythonRuntimePublicKeyToken at PythonRuntimePublicKeyTokenData
+#endif
+
+	.method public hidebysig specialname rtspecialname instance void
+		.ctor() cil managed
+	{
+		.maxstack 1
+		ldarg.0
+		call		instance void [mscorlib]System.Object::.ctor()
+		ret
+	}
+
+	.method public hidebysig static void modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl)
+		initclr() cil managed
+	{
+		.vtentry 1:1
+		.export [1] as initclr
+
+		.maxstack  6
+		.locals init (
+			class [mscorlib]System.Reflection.Assembly		pythonRuntime,
+			class [mscorlib]System.Reflection.Assembly		executingAssembly,
+			class [mscorlib]System.Reflection.AssemblyName	pythonRuntimeName,
+			class [mscorlib]System.Type						pythonEngineType,
+			int8[]											publicKeyToken,
+			string											assemblyDirectory,
+			string											pythonRuntimeVersionString,
+			string											pythonRuntimeDllPath)
+
+		// pythonRuntime = null;
+		ldnull
+		stloc		pythonRuntime
+
+		.try
+		{
+#ifdef DEBUG_PRINT
+			ldstr		"Attempting to load Python.Runtime using standard binding rules... "
+			call		void [mscorlib]System.Console::Write(string)
+#endif
+
+			// Attempt to find and load Python.Runtime using standard assembly binding rules.
+			// This roughly translates into looking in order:
+			// - GAC
+			// - ApplicationBase
+			// - A PrivateBinPath under ApplicationBase
+			// With an unsigned assembly, the GAC is skipped.
+
+			// System.Reflection.AssemblyName pythonRuntimeName = new System.Reflection.AssemblyName();
+			newobj		instance void [mscorlib]System.Reflection.AssemblyName::.ctor()
+			stloc		pythonRuntimeName
+
+			// pythonRuntimeName.Name = "Python.Runtime";
+			ldloc		pythonRuntimeName
+			ldstr		"Python.Runtime"
+			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::set_Name(string)
+
+#ifdef USE_PYTHON_RUNTIME_VERSION
+			// pythonRuntimeVersionString = "...";
+			ldstr		"2.0.0.2"
+			stloc		pythonRuntimeVersionString
+
+			// pythonRuntimeName.Version = new Version(pythonRuntimeVersionString);
+			ldloc		pythonRuntimeName
+			ldloc		pythonRuntimeVersionString
+			newobj		instance void [mscorlib]System.Version::.ctor(string)
+			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::set_Version(class [mscorlib]System.Version)
+#endif
+
+#ifdef USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
+			// publicKeyToken = new byte[] { ... };
+			ldc.i4.8
+			newarr		[mscorlib]System.Byte
+			dup
+			ldtoken		field int64 clrModule::PythonRuntimePublicKeyToken
+			call		void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array, valuetype [mscorlib]System.RuntimeFieldHandle)
+			stloc		publicKeyToken
+
+			// pythonRuntimeName.SetPublicKeyToken(publicKeyToken);
+			ldloc		pythonRuntimeName
+			ldloc		publicKeyToken
+			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::SetPublicKeyToken(uint8[])
+#endif
+
+			// pythonRuntimeName.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
+			ldloc		pythonRuntimeName
+			call		class [mscorlib]System.Globalization.CultureInfo [mscorlib]System.Globalization.CultureInfo::get_InvariantCulture()
+			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::set_CultureInfo(class [mscorlib]System.Globalization.CultureInfo)
+
+			// return System.Reflection.Assembly.Load(pythonRuntimeName);
+			ldloc		pythonRuntimeName
+			call		class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::Load(class [mscorlib]System.Reflection.AssemblyName)
+			stloc		pythonRuntime
+
+#ifdef DEBUG_PRINT
+			ldstr		"Success!"
+			call		void [mscorlib]System.Console::WriteLine(string)
+#endif
+			leave.s		LOADED_PYTHON_RUNTIME
+		}
+		catch [mscorlib]System.Object
+		{
+#ifdef DEBUG_PRINT
+			ldstr		"Failed."
+			call		void [mscorlib]System.Console::WriteLine(string)
+#endif
+			leave.s		EXIT_CLR_LOAD
+		}
+		EXIT_CLR_LOAD: nop
+
+		.try
+		{
+			// If the above fails for any reason, we fallback to attempting to load "Python.Runtime.dll"
+			// from the directory this assembly is running in. "This assembly" is probably "clr.pyd",
+			// sitting somewhere in PYTHONPATH.  This is using Assembly.LoadFrom, and inherits all the
+			// caveats of that call.  See MSDN docs for details.
+			// Suzanne Cook's blog is also an excellent source of info on this:
+			// http://blogs.msdn.com/suzcook/
+			// http://blogs.msdn.com/suzcook/archive/2003/05/29/57143.aspx
+			// http://blogs.msdn.com/suzcook/archive/2003/06/13/57180.aspx
+			// executingAssembly = System.Reflection.Assembly.GetExecutingAssembly();
+			call		class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::GetExecutingAssembly()
+			stloc		executingAssembly
+
+			// assemblyDirectory = System.IO.Path.GetDirectoryName(executingAssembly.Location);
+			ldloc		executingAssembly
+			callvirt	instance string [mscorlib]System.Reflection.Assembly::get_Location()
+			call		string [mscorlib]System.IO.Path::GetDirectoryName(string)
+			stloc		assemblyDirectory
+
+			// pythonRuntimeDllPath = System.IO.Path.Combine(assemblyDirectory, "Python.Runtime.dll");
+			ldloc		assemblyDirectory
+			ldstr		"Python.Runtime.dll"
+			call		string [mscorlib]System.IO.Path::Combine(string, string)
+			stloc		pythonRuntimeDllPath
+
+#ifdef DEBUG_PRINT
+			ldstr		"Attempting to load Python.Runtime from: '{0}'... "
+			ldloc		pythonRuntimeDllPath
+			call		void [mscorlib]System.Console::Write(string, object)
+#endif
+
+			// pythonRuntime = System.Reflection.Assembly.LoadFrom(pythonRuntimeDllPath);
+			ldloc		pythonRuntimeDllPath
+			call		class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::LoadFrom(string)
+			stloc		pythonRuntime
+
+#ifdef DEBUG_PRINT
+			ldstr		"Success!"
+			call		void [mscorlib]System.Console::WriteLine(string)
+#endif
+			leave.s		LOADED_PYTHON_RUNTIME
+		}
+		catch [mscorlib]System.Object
+		{
+#ifdef DEBUG_PRINT
+			ldstr		"Failed."
+			call		void [mscorlib]System.Console::WriteLine(string)
+#endif
+			leave.s		EXIT_PYTHONPATH_LOAD
+		}
+		EXIT_PYTHONPATH_LOAD: nop
+
+		// If we get here, we haven't loaded Python.Runtime, so bail.
+#ifdef DEBUG_PRINT
+		ldstr		"Could not load Python.Runtime, so sad."
+		call		void [mscorlib]System.Console::WriteLine(string)
+#endif
+		ret
+
+		// Once here, we've successfully loaded SOME version of Python.Runtime
+		// So now we get the PythonEngine and execute the InitExt method on it.
+		LOADED_PYTHON_RUNTIME: nop
+		.try
+		{
+#ifdef DEBUG_PRINT
+			ldstr		"Running Python.Runtime.PythonEngine.InitExt()"
+			call		void [mscorlib]System.Console::WriteLine(string)
+#endif
+			// pythonEngineType = pythonRuntime.GetType("Python.Runtime.PythonEngine");
+			ldloc		pythonRuntime
+			ldstr		"Python.Runtime.PythonEngine"
+			callvirt	instance class [mscorlib]System.Type [mscorlib]System.Reflection.Assembly::GetType(string)
+			stloc		pythonEngineType
+
+			// pythonEngineType.InvokeMember("InitExt", System.Reflection.BindingFlags.InvokeMethod, null, null, null);
+			ldloc		pythonEngineType
+			ldstr		"InitExt"
+			ldc.i4		0x100
+			ldnull
+			ldnull
+			ldnull
+			callvirt	instance object [mscorlib]System.Type::InvokeMember(	string,
+																				valuetype [mscorlib]System.Reflection.BindingFlags,
+																				class [mscorlib]System.Reflection.Binder,
+																				object,
+																				object[])
+			pop
+			leave.s    EXIT_TRY_INVOKE
+		}
+		catch [mscorlib]System.Object
+		{
+#ifdef DEBUG_PRINT
+			ldstr		"Error calling Python.Runtime.PythonEngine.InitExt()."
+			call		void [mscorlib]System.Console::WriteLine(string)
+#endif
+			leave.s    EXIT_TRY_INVOKE
+		}
+		EXIT_TRY_INVOKE: nop
+
+		ret
+	}
+}
+

Property changes on: src/runtime/clrmodule.pp.il
___________________________________________________________________
Added: svn:executable
   + *

Index: src/runtime/clrmodule.il
===================================================================
--- src/runtime/clrmodule.il	(revision 126)
+++ src/runtime/clrmodule.il	(working copy)
@@ -1,274 +0,0 @@
-// ==========================================================================
-// This software is subject to the provisions of the Zope Public License,
-// Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
-// THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-// WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-// WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-// FOR A PARTICULAR PURPOSE.
-// ==========================================================================
-
-//============================================================================
-// This file is a hand-maintained stub - it implements clr.dll, which can be
-// loaded by a standard CPython interpreter as an extension module. When it
-// is loaded, it bootstraps the managed runtime integration layer and defers
-// to it to do initialization and put the clr module into sys.modules, etc.
-
-// The "USE_PYTHON_RUNTIME_*" defines control what extra evidence is used
-// to help the CLR find the appropriate Python.Runtime assembly.
-
-// If defined, the "pythonRuntimeVersionString" variable must be set to
-// Python.Runtime's current version.
-#define USE_PYTHON_RUNTIME_VERSION
-
-// If defined, the "PythonRuntimePublicKeyTokenData" data array must be
-// set to Python.Runtime's public key token.
-//#define USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
-
-// If DEBUG_PRINT is defined, a few System.Console.WriteLine calls are made
-// to indicate what's going on during the load...
-//#define DEBUG_PRINT
-//============================================================================
-
-.assembly extern mscorlib
-{
-	.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
-	.ver 2:0:0:0
-}
-
-.assembly clr
-{
-	.hash algorithm 0x00008004
-	.ver 2:0:0:2
-}
-
-.module clr.dll
-.imagebase 0x00400000
-.subsystem 0x00000003
-.file alignment 512
-
-// This includes the platform-specific IL.  The include search path
-// is set depending on whether we're compiling 32 or 64 bit.
-// This MUST come before any other .data directives!
-// Why, oh why, can't ilasm support command line #defines? :(
-#include "clrmodule-platform.il"
-
-#ifdef USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
-.data PythonRuntimePublicKeyTokenData = bytearray (64 e1 4e 84 5a bf 2e 60)
-#endif
-
-.class public auto ansi beforefieldinit clrModule extends [mscorlib]System.Object
-{
-#ifdef USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
-	.field static assembly int64 PythonRuntimePublicKeyToken at PythonRuntimePublicKeyTokenData
-#endif
-
-	.method public hidebysig specialname rtspecialname instance void
-		.ctor() cil managed
-	{
-		.maxstack 1
-		ldarg.0
-		call		instance void [mscorlib]System.Object::.ctor()
-		ret
-	}
-
-	.method public hidebysig static void modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl)
-		initclr() cil managed
-	{
-		.vtentry 1:1
-		.export [1] as initclr
-
-		.maxstack  6
-		.locals init (
-			class [mscorlib]System.Reflection.Assembly		pythonRuntime,
-			class [mscorlib]System.Reflection.Assembly		executingAssembly,
-			class [mscorlib]System.Reflection.AssemblyName	pythonRuntimeName,
-			class [mscorlib]System.Type						pythonEngineType,
-			int8[]											publicKeyToken,
-			string											assemblyDirectory,
-			string											pythonRuntimeVersionString,
-			string											pythonRuntimeDllPath)
-
-		// pythonRuntime = null;
-		ldnull
-		stloc		pythonRuntime
-
-		.try
-		{
-#ifdef DEBUG_PRINT
-			ldstr		"Attempting to load Python.Runtime using standard binding rules... "
-			call		void [mscorlib]System.Console::Write(string)
-#endif
-
-			// Attempt to find and load Python.Runtime using standard assembly binding rules.
-			// This roughly translates into looking in order:
-			// - GAC
-			// - ApplicationBase
-			// - A PrivateBinPath under ApplicationBase
-			// With an unsigned assembly, the GAC is skipped.
-
-			// System.Reflection.AssemblyName pythonRuntimeName = new System.Reflection.AssemblyName();
-			newobj		instance void [mscorlib]System.Reflection.AssemblyName::.ctor()
-			stloc		pythonRuntimeName
-
-			// pythonRuntimeName.Name = "Python.Runtime";
-			ldloc		pythonRuntimeName
-			ldstr		"Python.Runtime"
-			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::set_Name(string)
-
-#ifdef USE_PYTHON_RUNTIME_VERSION
-			// pythonRuntimeVersionString = "...";
-			ldstr		"2.0.0.2"
-			stloc		pythonRuntimeVersionString
-
-			// pythonRuntimeName.Version = new Version(pythonRuntimeVersionString);
-			ldloc		pythonRuntimeName
-			ldloc		pythonRuntimeVersionString
-			newobj		instance void [mscorlib]System.Version::.ctor(string)
-			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::set_Version(class [mscorlib]System.Version)
-#endif
-
-#ifdef USE_PYTHON_RUNTIME_PUBLIC_KEY_TOKEN
-			// publicKeyToken = new byte[] { ... };
-			ldc.i4.8
-			newarr		[mscorlib]System.Byte
-			dup
-			ldtoken		field int64 clrModule::PythonRuntimePublicKeyToken
-			call		void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array, valuetype [mscorlib]System.RuntimeFieldHandle)
-			stloc		publicKeyToken
-
-			// pythonRuntimeName.SetPublicKeyToken(publicKeyToken);
-			ldloc		pythonRuntimeName
-			ldloc		publicKeyToken
-			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::SetPublicKeyToken(uint8[])
-#endif
-
-			// pythonRuntimeName.CultureInfo = System.Globalization.CultureInfo.InvariantCulture;
-			ldloc		pythonRuntimeName
-			call		class [mscorlib]System.Globalization.CultureInfo [mscorlib]System.Globalization.CultureInfo::get_InvariantCulture()
-			callvirt	instance void [mscorlib]System.Reflection.AssemblyName::set_CultureInfo(class [mscorlib]System.Globalization.CultureInfo)
-
-			// return System.Reflection.Assembly.Load(pythonRuntimeName);
-			ldloc		pythonRuntimeName
-			call		class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::Load(class [mscorlib]System.Reflection.AssemblyName)
-			stloc		pythonRuntime
-
-#ifdef DEBUG_PRINT
-			ldstr		"Success!"
-			call		void [mscorlib]System.Console::WriteLine(string)
-#endif
-			leave.s		LOADED_PYTHON_RUNTIME
-		}
-		catch [mscorlib]System.Object
-		{
-#ifdef DEBUG_PRINT
-			ldstr		"Failed."
-			call		void [mscorlib]System.Console::WriteLine(string)
-#endif
-			leave.s		EXIT_CLR_LOAD
-		}
-		EXIT_CLR_LOAD: nop
-
-		.try
-		{
-			// If the above fails for any reason, we fallback to attempting to load "Python.Runtime.dll"
-			// from the directory this assembly is running in. "This assembly" is probably "clr.pyd",
-			// sitting somewhere in PYTHONPATH.  This is using Assembly.LoadFrom, and inherits all the
-			// caveats of that call.  See MSDN docs for details.
-			// Suzanne Cook's blog is also an excellent source of info on this:
-			// http://blogs.msdn.com/suzcook/
-			// http://blogs.msdn.com/suzcook/archive/2003/05/29/57143.aspx
-			// http://blogs.msdn.com/suzcook/archive/2003/06/13/57180.aspx
-			// executingAssembly = System.Reflection.Assembly.GetExecutingAssembly();
-			call		class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::GetExecutingAssembly()
-			stloc		executingAssembly
-
-			// assemblyDirectory = System.IO.Path.GetDirectoryName(executingAssembly.Location);
-			ldloc		executingAssembly
-			callvirt	instance string [mscorlib]System.Reflection.Assembly::get_Location()
-			call		string [mscorlib]System.IO.Path::GetDirectoryName(string)
-			stloc		assemblyDirectory
-
-			// pythonRuntimeDllPath = System.IO.Path.Combine(assemblyDirectory, "Python.Runtime.dll");
-			ldloc		assemblyDirectory
-			ldstr		"Python.Runtime.dll"
-			call		string [mscorlib]System.IO.Path::Combine(string, string)
-			stloc		pythonRuntimeDllPath
-
-#ifdef DEBUG_PRINT
-			ldstr		"Attempting to load Python.Runtime from: '{0}'... "
-			ldloc		pythonRuntimeDllPath
-			call		void [mscorlib]System.Console::Write(string, object)
-#endif
-
-			// pythonRuntime = System.Reflection.Assembly.LoadFrom(pythonRuntimeDllPath);
-			ldloc		pythonRuntimeDllPath
-			call		class [mscorlib]System.Reflection.Assembly [mscorlib]System.Reflection.Assembly::LoadFrom(string)
-			stloc		pythonRuntime
-
-#ifdef DEBUG_PRINT
-			ldstr		"Success!"
-			call		void [mscorlib]System.Console::WriteLine(string)
-#endif
-			leave.s		LOADED_PYTHON_RUNTIME
-		}
-		catch [mscorlib]System.Object
-		{
-#ifdef DEBUG_PRINT
-			ldstr		"Failed."
-			call		void [mscorlib]System.Console::WriteLine(string)
-#endif
-			leave.s		EXIT_PYTHONPATH_LOAD
-		}
-		EXIT_PYTHONPATH_LOAD: nop
-
-		// If we get here, we haven't loaded Python.Runtime, so bail.
-#ifdef DEBUG_PRINT
-		ldstr		"Could not load Python.Runtime, so sad."
-		call		void [mscorlib]System.Console::WriteLine(string)
-#endif
-		ret;
-
-		// Once here, we've successfully loaded SOME version of Python.Runtime
-		// So now we get the PythonEngine and execute the InitExt method on it.
-		LOADED_PYTHON_RUNTIME: nop
-		.try
-		{
-#ifdef DEBUG_PRINT
-			ldstr		"Running Python.Runtime.PythonEngine.InitExt()"
-			call		void [mscorlib]System.Console::WriteLine(string)
-#endif
-			// pythonEngineType = pythonRuntime.GetType("Python.Runtime.PythonEngine");
-			ldloc		pythonRuntime
-			ldstr		"Python.Runtime.PythonEngine"
-			callvirt	instance class [mscorlib]System.Type [mscorlib]System.Reflection.Assembly::GetType(string)
-			stloc		pythonEngineType
-
-			// pythonEngineType.InvokeMember("InitExt", System.Reflection.BindingFlags.InvokeMethod, null, null, null);
-			ldloc		pythonEngineType
-			ldstr		"InitExt"
-			ldc.i4		0x100
-			ldnull
-			ldnull
-			ldnull
-			callvirt	instance object [mscorlib]System.Type::InvokeMember(	string,
-																				valuetype [mscorlib]System.Reflection.BindingFlags,
-																				class [mscorlib]System.Reflection.Binder,
-																				object,
-																				object[])
-			pop
-			leave.s    EXIT_TRY_INVOKE
-		}
-		catch [mscorlib]System.Object
-		{
-#ifdef DEBUG_PRINT
-			ldstr		"Error calling Python.Runtime.PythonEngine.InitExt()."
-			call		void [mscorlib]System.Console::WriteLine(string)
-#endif
-			leave.s    EXIT_TRY_INVOKE
-		}
-		EXIT_TRY_INVOKE: nop
-
-		ret
-	}
-}
-
Index: src/monoclr/Makefile
===================================================================
--- src/monoclr/Makefile	(revision 126)
+++ src/monoclr/Makefile	(working copy)
@@ -1,9 +1,13 @@
 # Author: Christian Heimes
 
-PYTHON = python2.5
+PYTHON = python
 BASENAME = $(shell $(PYTHON) -c "import sys; print 'python%i.%i' % sys.version_info[:2]")
 GCC = gcc
-
+ifeq ($(origin WINDIR), undefined)
+    DLL_OR_SO = "-shared"
+else
+    DLL_OR_SO = "-dynamiclib"
+endif 
 PY_LIBS = $(shell $(PYTHON) -c "from distutils.sysconfig import get_config_vars; \
     print get_config_vars('BLDLIBRARY')[0]") -lpython
 PY_CFLAGS = -I$(shell $(PYTHON) -c "from distutils.sysconfig import get_config_vars; \
@@ -30,7 +34,7 @@ $(BASENAME): python.c 
 	$(GCC) $(PY_CFLAGS) $(PY_LIBS) python.c -o $(BASENAME)
 
 clr.so: clrmod.o pynetinit.o
-	$(GCC) $(LIBS) -dynamiclib pynetinit.o clrmod.o -o clr.so
+	$(GCC) $(LIBS) $(DLL_OR_SO) pynetinit.o clrmod.o -o clr.so
 
 clr$(BASENAME): clrpython.o pynetinit.o
 	$(GCC) $(LIBS) clrpython.o pynetinit.o -o clr$(BASENAME) 
Index: Makefile
===================================================================
--- Makefile	(revision 126)
+++ Makefile	(working copy)
@@ -16,6 +16,12 @@ UCS ?= $(shell $(PYTHON) -c "import sys;
 SITEPACKAGES = $(shell $(PYTHON) -c "from distutils.sysconfig import get_python_lib; \
     print get_python_lib(plat_specific=1, standard_lib=0)")
 INSTALL=/usr/bin/install -m644
+ARCH_FULL = $(shell uname -m)
+ifneq (, $(findstring 86, $(ARCH_FULL)))
+	ARCH = x86
+else
+	ARCH = x64
+endif 
 
 ifeq ($(origin WINDIR), undefined)
     RUNNER = mono
@@ -70,6 +76,14 @@ Python.Runtime.dll: $(RUNTIME_CS)
 	$(CSC) /unsafe /target:library \
 	    $(RUNTIME_REF) /out:../../Python.Runtime.dll /recurse:*.cs
 
+src/runtime/clrmodule.il: src/runtime/clrmodule.pp.il
+ifeq ($(origin WINDIR), undefined)
+	cd "$(BASEDIR)/src/runtime";\
+	$(CPP) -C -P -x c++ -I $(ARCH) clrmodule.pp.il -o clrmodule.il
+else
+	cd "$(BASEDIR)/src/runtime";\
+	cp clrmodule.pp.il clrmodule.il
+endif
 
 clr.pyd: Python.Runtime.dll src/runtime/clrmodule.il
 	$(ILASM) /nologo /dll /quiet /output=clr.pyd \
@@ -106,7 +120,7 @@ realclean: clean
 	rm -f Python*.il Python*.il2 Python*.res
 	rm -rf build/
 	cd src/console; rm -rf bin; rm -rf obj; cd ../..;
-	cd src/runtime; rm -rf bin; rm -rf obj; cd ../..;
+	cd src/runtime; rm -rf bin; rm -rf obj; rm clrmodule.il; cd ../..;
 	cd src/testing; rm -rf bin; rm -rf obj; cd ../..;
 	cd src/embed_tests; rm -rf bin; rm -rf obj; rm -f TestResult.xml; cd ../..;
 	cd src/monoclr; make clean; cd ../..
_________________________________________________
Python.NET mailing list - PythonDotNet@python.org
http://mail.python.org/mailman/listinfo/pythondotnet

Reply via email to