[Mono-list] [patch] MacOSX autoconf/automake fixes

Benjamin Reed ranger@befunk.com
Mon, 26 Jan 2004 12:42:54 -0500


This is a multi-part message in MIME format.
--------------070107040803020807080704
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

(This is in response to an earlier "howto" from Dave Morford.)

>     a. comment out the #ifdef __APPLE__ at the top of the file 
> mono/io-layer/sockets.h. This is not needed on 10.3, only 10.2.
>     b. in mono/mini, run: grep -n "version-script" Makefile. This 
> should return, at least on the 0.30 Previews, the following: 
> 157:#monoldflags = -Wl,-version-script=$(srcdir)/ldscript. If this 
> line is not commented out and/or has a ./ldscript instead of 
> $(srcdir)/ldscript, you can comment it out or remove the "-Wl,". I 
> commented it out to no problems as well as removed the "-Wl,", which 
> fails when linking.

Attached is a patch that fixes these issues properly, within autoconf 
and automake.  You still need to do glibtoolize and friends (autogen.sh 
stuff) until a new release is made, though.

It removes the hardcoded apple "socklen_t" thing, and instead does a 
check for socklen_t in autoconf (taken, somewhat, from KDE's checks). 
(Then it patches anything that includes mono/io-layer/sockets.h, 
directly or indirectly, to include config.h to get the socklen_t define, 
since I didn't want to touch headers.)  I ended up having to patch a 
decent number of c files to make them find config.h; I don't know if 
external projects link against the mono headers a lot, but if they do 
maybe there needs to be a way to encode the socklen_t bits into the 
headers so other projects don't need these same defines.

It also defines an automake conditional on GNU ld for the 
-version-script thing, since, as far as I'm aware, that's a gnuism.

These changes let it work on panther or jaguar...  Possibly earlier, I 
don't have a 10.1 or earlier system to test with.

> 1. Some of the assumptions in the configure scripts, in particular 
> threading, need to be examined. gcc does not need the -pthread flags 
> to be specified according to Apple's documentation for the 10.3 
> Developer tool chain. Most of the standard library modules live in 
> libSystem.dylib, which is always linked in.

Yeah, it's no big deal, though.  Apple's gcc just ignores -pthread.  The 
pthread stuff is in libSystem, so nothing's lost.  Just get an annoying 
message to the screen while compiling.  ;)

> 2. The ICU check looks for icu-config and fails but ICU *is* present 
> on OS X Panther in /usr/lib/libicucore.dylib but the icu-config tool 
> is not present. Perhaps a better check for this is possible? Does it 
> need to be linked in or is icu-config called or used anywhere?

The only thing that's there is the library, no headers or configuration. 
  Apple does that when they've included a library, but they're not 
willing to officially support the library (in a binary-compatible way). 
  You'll need to build your own, or download apple's project from 
www.opensource.apple.com and try building everything yourself but only 
install headers and config bits.



--------------070107040803020807080704
Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0";
 name="mono.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="mono.patch"

diff -uNr mono-0.30/configure.in mono-0.30-patched/configure.in
--- mono-0.30/configure.in	Sat Jan 17 13:55:29 2004
+++ mono-0.30-patched/configure.in	Mon Jan 26 10:56:35 2004
@@ -141,6 +141,11 @@
 AC_SUBST(HOST_CC)
 AC_SUBST(BUILD_EXEEXT)
 
+# check for GNU LD, this comes from libtool.m4
+AC_PROG_LD
+AC_PROG_LD_GNU
+AM_CONDITIONAL(LD_GNU, test x$lt_cv_prog_gnu_ld = xyes)
+
 # Set STDC_HEADERS
 AC_HEADER_STDC
 AC_LIBTOOL_WIN32_DLL
@@ -351,6 +356,38 @@
 	dnl *** Checks for libsocket  ***
 	dnl *****************************
 	AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket")
+
+	dnl ****************************
+	dnl *** Checks for socklen_t ***
+	dnl ****************************
+
+ 	AC_MSG_CHECKING([for socklen_t])
+	ac_cv_socklen_t=""
+	AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>
+	],[
+socklen_t a=0;
+getsockname(0,(struct sockaddr*)0, &a);
+	],
+		ac_cv_socklen_t="socklen_t",
+		AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/socket.h>
+		],[
+int a=0;
+getsockname(0,(struct sockaddr*)0, &a);
+		],
+			ac_cv_socklen_t="int",
+			ac_cv_socklen_t="size_t"
+		)
+	)
+
+	AC_MSG_RESULT($ac_cv_socklen_t)
+	if test "$ac_cv_socklen_t" != "socklen_t"; then
+		AC_DEFINE_UNQUOTED(socklen_t, $ac_cv_socklen_t,
+			[Define the real type of socklen_t])
+	fi
 
 	dnl *******************************
 	dnl *** Checks for MSG_NOSIGNAL ***
diff -uNr mono-0.30/mono/interpreter/main.c mono-0.30-patched/mono/interpreter/main.c
--- mono-0.30/mono/interpreter/main.c	Fri Dec 19 15:19:37 2003
+++ mono-0.30-patched/mono/interpreter/main.c	Mon Jan 26 11:40:09 2004
@@ -1,3 +1,4 @@
+#include <config.h>
 #include "interp.h"
 #include "embed.h"
 
diff -uNr mono-0.30/mono/io-layer/sockets.h mono-0.30-patched/mono/io-layer/sockets.h
--- mono-0.30/mono/io-layer/sockets.h	Fri Nov 21 11:56:00 2003
+++ mono-0.30-patched/mono/io-layer/sockets.h	Mon Jan 26 10:27:39 2004
@@ -23,10 +23,6 @@
 #define WSADESCRIPTION_LEN 256
 #define WSASYS_STATUS_LEN 128
 
-#ifdef __APPLE__
-typedef unsigned int socklen_t;
-#endif
-
 typedef struct 
 {
 	guint16 wVersion;
diff -uNr mono-0.30/mono/metadata/debug-helpers.c mono-0.30-patched/mono/metadata/debug-helpers.c
--- mono-0.30/mono/metadata/debug-helpers.c	Mon Nov 24 22:07:26 2003
+++ mono-0.30-patched/mono/metadata/debug-helpers.c	Mon Jan 26 11:39:37 2004
@@ -1,4 +1,4 @@
-
+#include <config.h>
 #include <string.h>
 #include "mono/metadata/tokentype.h"
 #include "mono/metadata/opcodes.h"
diff -uNr mono-0.30/mono/metadata/decimal.c mono-0.30-patched/mono/metadata/decimal.c
--- mono-0.30/mono/metadata/decimal.c	Fri Oct  3 13:02:34 2003
+++ mono-0.30-patched/mono/metadata/decimal.c	Mon Jan 26 11:39:37 2004
@@ -13,6 +13,7 @@
  * CSharp value type System.Decimal
  */
 
+#include <config.h>
 #include <mono/metadata/exception.h>
 #include <stdio.h>
 #include <memory.h>
diff -uNr mono-0.30/mono/metadata/exception.c mono-0.30-patched/mono/metadata/exception.c
--- mono-0.30/mono/metadata/exception.c	Mon Jan 19 15:02:30 2004
+++ mono-0.30-patched/mono/metadata/exception.c	Mon Jan 26 11:39:37 2004
@@ -10,6 +10,7 @@
  * (C) 2001, 2002 Ximian, Inc.
  */
 
+#include <config.h>
 #include <mono/metadata/exception.h>
 #include <mono/metadata/class.h>
 #include <mono/metadata/appdomain.h>
diff -uNr mono-0.30/mono/metadata/monosn.c mono-0.30-patched/mono/metadata/monosn.c
--- mono-0.30/mono/metadata/monosn.c	Thu Sep  4 15:46:43 2003
+++ mono-0.30-patched/mono/metadata/monosn.c	Mon Jan 26 11:39:37 2004
@@ -7,6 +7,7 @@
  * (C) 2002 Ximian, Inc.
  *
  */
+#include <config.h>
 #include <mono/metadata/class.h>
 #include <mono/metadata/debug-helpers.h>
 #include <mono/metadata/tokentype.h>
diff -uNr mono-0.30/mono/metadata/profiler.c mono-0.30-patched/mono/metadata/profiler.c
--- mono-0.30/mono/metadata/profiler.c	Fri Jan  2 09:47:10 2004
+++ mono-0.30-patched/mono/metadata/profiler.c	Mon Jan 26 11:39:37 2004
@@ -1,4 +1,4 @@
-
+#include <config.h>
 #include "mono/metadata/profiler-private.h"
 #include "mono/metadata/debug-helpers.h"
 #include "mono/metadata/mono-debug.h"
diff -uNr mono-0.30/mono/metadata/verify.c mono-0.30-patched/mono/metadata/verify.c
--- mono-0.30/mono/metadata/verify.c	Mon Jan 19 15:02:31 2004
+++ mono-0.30-patched/mono/metadata/verify.c	Mon Jan 26 11:23:44 2004
@@ -1,4 +1,4 @@
-
+#include <config.h>
 #include <mono/metadata/object.h>
 #include <mono/metadata/verify.h>
 #include <mono/metadata/opcodes.h>
diff -uNr mono-0.30/mono/mini/Makefile.am mono-0.30-patched/mono/mini/Makefile.am
--- mono-0.30/mono/mini/Makefile.am	Fri Dec  5 02:21:43 2003
+++ mono-0.30-patched/mono/mini/Makefile.am	Mon Jan 26 10:51:08 2004
@@ -28,7 +28,9 @@
 # hack for automake to have the same source file in a library and a bin
 genmdesc_CFLAGS = $(AM_CFLAGS)
 
+if LD_GNU
 libmono_la_LDFLAGS=-Wl,-version-script=$(srcdir)/ldscript
+endif
 
 if JIT_SUPPORTED
 bin_PROGRAMS = mono
diff -uNr mono-0.30/mono/mini/dominators.c mono-0.30-patched/mono/mini/dominators.c
--- mono-0.30/mono/mini/dominators.c	Sat Apr  5 14:21:32 2003
+++ mono-0.30-patched/mono/mini/dominators.c	Mon Jan 26 11:40:47 2004
@@ -7,6 +7,7 @@
  *
  * (C) 2003 Ximian, Inc.
  */
+#include <config.h>
 #include <string.h>
 #include <mono/metadata/debug-helpers.h>
 
diff -uNr mono-0.30/mono/mini/graph.c mono-0.30-patched/mono/mini/graph.c
--- mono-0.30/mono/mini/graph.c	Mon Sep  1 12:09:40 2003
+++ mono-0.30-patched/mono/mini/graph.c	Mon Jan 26 11:40:47 2004
@@ -6,6 +6,7 @@
  *
  * (C) 2003 Ximian, Inc.
  */
+#include <config.h>
 #include <string.h>
 #include <mono/metadata/debug-helpers.h>
 
diff -uNr mono-0.30/mono/mini/ssa.c mono-0.30-patched/mono/mini/ssa.c
--- mono-0.30/mono/mini/ssa.c	Sat Jan  3 20:08:38 2004
+++ mono-0.30-patched/mono/mini/ssa.c	Mon Jan 26 11:40:47 2004
@@ -6,6 +6,7 @@
  *
  * (C) 2003 Ximian, Inc.
  */
+#include <config.h>
 #include <string.h>
 #include <mono/metadata/debug-helpers.h>
 
diff -uNr mono-0.30/mono/monograph/monograph.c mono-0.30-patched/mono/monograph/monograph.c
--- mono-0.30/mono/monograph/monograph.c	Wed Nov 12 13:49:11 2003
+++ mono-0.30-patched/mono/monograph/monograph.c	Mon Jan 26 11:39:47 2004
@@ -1,3 +1,4 @@
+#include <config.h>
 #include <glib.h>
 #include <string.h>
 #include "mono/metadata/class.h"
diff -uNr mono-0.30/mono/profiler/mono-cov.c mono-0.30-patched/mono/profiler/mono-cov.c
--- mono-0.30/mono/profiler/mono-cov.c	Wed Nov 12 13:49:11 2003
+++ mono-0.30-patched/mono/profiler/mono-cov.c	Mon Jan 26 11:40:59 2004
@@ -1,3 +1,4 @@
+#include <config.h>
 #include <mono/metadata/profiler.h>
 #include <mono/metadata/tokentype.h>
 #include <mono/metadata/tabledefs.h>

--------------070107040803020807080704--