[Mono-devel-list] Mono CVS compilation with MinGW

Albert Strasheim 13640887 at sun.ac.za
Tue Dec 16 16:36:07 EST 2003


Hello all,

I started experimenting with getting Mono from CVS to compile under MinGW 
today. I haven't seen this kind of setup documented anywhere on 
go-mono.com or elsewhere. It seems Cygwin is the currently the method of 
choice.

I am doing this setup on Windows Server 2003 with MSVS .NET 2003 
Academic installed. I am using the latest version of MinGW and MSYS, 
installed to C:\mingw and c:\msys respectively. I also installed the 
binutils, bison and libiconv packages provided by the MinGW project.

The following commands were all executed under the MSYS environment.

The Mono build requires pkg-config, which can be obtained from here:

http://www.gimp.org/~tml/gimp/win32/downloads.html

You can also compile pkg-config from source (but this requires GLib 2, 
also available from the URL above). I followed the latter option after 
installed the glib and glib-dev zip files to c:\mingw. I installed 
pkg-config to c:\mingw (called /mingw under MSYS).

I had to copy /mingw/share/aclocal/pkg.m4 to /share/aclocal so that the 
configure file generated by autogen.sh could find the pkg-config macros. 
Not quite sure why MinGW doesn't check both directories (or maybe even 
only the former).

I also have to copy libiconv-2.dll to iconv.dll and libintl-2.dll to 
intl.dll in the /mingw/bin directory before pkg-config would run. Also 
pretty strange... probably an issue with MinGW's iconv?

I set up the MSVS environment by turning the vsvars32.bat file (in the 
Common7\Tools directory) include a shell script which I installed as 
/etc/profile.d/vs.sh (attached). This added csc.exe to the path.

I then executed autogen.sh (after applying mingw-autogen.patch, attached) 
in the mono directory (with sibling mcs):

./autogen --prefix=/opt --with-gc=included

I think did a make fullbuild.

Compilation died while compiling libgc, which I fixed with another patch 
(mingw-libgc.patch). With the patch, libgc seems to compile.

Next up, the compile failed while compiling mcs/jay, because mkstemp is 
not part of the Win32 API (I think?). I fixed this with another patch 
(mingw-jay.patch).

I also had to fix a few Makefiles because csc.exe seemed to get confused 
between command line options starting with / and directories. Replacing / 
with - for command line options all round seemed to do the trick. I think 
all the / arguments might have to be changed to - arguments in the 
Makefiles in order for MinGW to work... Thoughts?

Currently my compilation progreses until I receive the following error:

make[2]: Entering directory `/c/work/mono/mcs/class/System.Drawing'
make[2]: *** No rule to make target `System.Drawing.Printing/Duplex.cs', 
needed by `../../build/deps/System.Drawing.dll.stamp'.  Stop.
make[2]: Leaving directory `/c/work/mono/mcs/class/System.Drawing'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/c/work/mono/mcs/class'

Any comments?

Cheers,

Albert
-------------- next part --------------
--- mono.orig/mono/libgc/win32_threads.c	Tue Aug 26 23:21:14 2003
+++ mono/mono/libgc/win32_threads.c	Tue Dec 16 18:30:04 2003
@@ -397,9 +397,9 @@
     LPVOID param;
 } thread_args;
 
-DWORD WINAPI thread_start(LPVOID arg);
+static DWORD WINAPI thread_start(LPVOID arg);
 
-HANDLE WINAPI GC_CreateThread(
+GC_API HANDLE GC_CreateThread(
     LPSECURITY_ATTRIBUTES lpThreadAttributes, 
     DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, 
     LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId )
-------------- next part --------------
--- mono.orig/mcs/jay/main.c	Tue May 20 23:06:47 2003
+++ mono/mcs/jay/main.c	Tue Dec 16 22:52:15 2003
@@ -91,7 +91,13 @@
 short **derives;
 char *nullable;
 
+#if defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
+extern char* mktemp();
+#define mkstemp mktemp
+#else
 extern char *mkstemp();
+#endif
+
 extern char *getenv();
 
 done(k)
@@ -253,8 +259,12 @@
     int i, len;
     char *tmpdir;
 
+#if defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
+    tmpdir = ".";
+#else
     tmpdir = getenv("TMPDIR");
     if (tmpdir == 0) tmpdir = "/tmp";
+#endif
 
     len = strlen(tmpdir);
     i = len + 13;
-------------- next part --------------
--- mono.orig/mono/autogen.sh	Fri Nov  7 23:05:39 2003
+++ mono/mono/autogen.sh	Tue Dec 16 21:32:47 2003
@@ -98,7 +98,7 @@
 if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
   if test -z "$NO_LIBTOOLIZE" ; then 
     echo "Running libtoolize..."
-    ${LIBTOOL}ize --force --copy
+    `basename ${LIBTOOL}ize` --force --copy
   fi
 fi
 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vs.sh
Type: application/x-sh
Size: 949 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20031216/75918c32/attachment.sh 


More information about the Mono-devel-list mailing list