2002-01-04 Ravi Pratap <ravi@ximian.com>
[mono.git] / configure.in
1 AC_INIT(README)
2 AM_CONFIG_HEADER(config.h)
3 AM_INIT_AUTOMAKE(mono, 0.7)
4 AM_MAINTAINER_MODE
5
6 AC_CANONICAL_HOST
7
8 AC_PROG_CC
9 AM_PROG_CC_STDC
10 AC_PROG_INSTALL
11
12 # Set STDC_HEADERS
13 AC_HEADER_STDC
14 AM_PROG_LIBTOOL
15
16 AC_CHECK_SIZEOF(void *)
17
18 CFLAGS='-g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations'
19
20 ## Versions of dependencies
21 GLIB_REQUIRED_VERSION=1.3.11
22
23 PKG_CHECK_MODULES(BASE_DEPENDENCIES, glib-2.0 >= $GLIB_REQUIRED_VERSION)
24
25 GLIB_CFLAGS=`$PKG_CONFIG --cflags glib-2.0`
26 GLIB_LIBS=`$PKG_CONFIG --libs glib-2.0`
27
28 AC_SUBST(GLIB_CFLAGS)
29 AC_SUBST(GLIB_LIBS)
30
31 GMODULE_CFLAGS=`$PKG_CONFIG --cflags gmodule-2.0`
32 GMODULE_LIBS=`$PKG_CONFIG --libs gmodule-2.0`
33
34 AC_SUBST(GMODULE_CFLAGS)
35 AC_SUBST(GMODULE_LIBS)
36
37 dnl ****************************************
38 dnl *** Check if we're building on win32 ***
39 dnl ****************************************
40 AC_MSG_CHECKING([if building for some Win32 platform])
41 case "$host" in
42         *-*-mingw*|*-*-cygwin*)
43                 platform_win32=yes
44                 AC_DEFINE(PLATFORM_WIN32)
45                 ;;
46         *)
47                 platform_win32=no
48                 ;;
49 esac
50 AC_MSG_RESULT($platform_win32)
51 AM_CONDITIONAL(PLATFORM_WIN32, test x$platform_win32 = xyes)
52
53 if test x$platform_win32 = xyes; then
54         AC_MSG_CHECKING([if building for native Win32])
55         case "$host" in
56                 *-*-mingw*)
57                         platform_win32_native=yes
58                         AC_DEFINE(PLATFORM_WIN32_NATIVE)
59                         ;;
60                 *)
61                         platform_win32_native=no
62                         ;;
63         esac
64         AC_MSG_RESULT($platform_win32_native)
65         AM_CONDITIONAL(PLATFORM_WIN32_NATIVE,
66                        test x$platform_win32_native = xyes)
67 fi
68
69
70 if test x$platform_win32 = xno; then
71         dnl ******************************************************************
72         dnl *** Check for large file support                               ***
73         dnl *** (If we were using autoconf 2.50 we'd use AC_SYS_LARGEFILE) ***
74         dnl ******************************************************************
75         
76         # Check that off_t can represent 2**63 - 1 correctly, working around
77         # potential compiler bugs.  Defines LARGE_FILE_SUPPORT, adds $1 to
78         # CFLAGS and sets $large_offt to yes if the test succeeds
79         large_offt=no
80         AC_DEFUN(LARGE_FILES, [
81                 large_CPPFLAGS=$CPPFLAGS
82                 CPPFLAGS="$CPPFLAGS $1"
83                 AC_TRY_RUN([
84                         #include <sys/types.h>
85
86                         #define BIG_OFF_T (((off_t)1<<62)-1+((off_t)1<<62))
87
88                         int main(void) {
89                                 int big_off_t=((BIG_OFF_T%2147483629==721) &&
90                                                (BIG_OFF_T%2147483647==1));
91                                 if(big_off_t) {
92                                         exit(0);
93                                 } else {
94                                         exit(1);
95                                 }
96                         }
97                 ], [
98                         AC_MSG_RESULT(ok)
99                         AC_DEFINE(HAVE_LARGE_FILE_SUPPORT)
100                         CFLAGS="$CFLAGS $1"
101                         large_offt=yes
102                 ], [
103                         AC_MSG_RESULT(no)
104                 ])
105                 CPPFLAGS=$large_CPPFLAGS
106         ])
107
108         AC_MSG_CHECKING(if off_t is 64 bits wide)
109         LARGE_FILES("")
110         if test $large_offt = no; then
111                 AC_MSG_CHECKING(if _FILE_OFFSET_BITS=64 gives 64 bit off_t)
112                 LARGE_FILES("-D_FILE_OFFSET_BITS=64")
113         fi
114         if test $large_offt = no; then
115                 AC_MSG_WARN([No 64 bit file size support available])
116         fi
117
118
119         dnl *****************************
120         dnl *** Checks for libpthread ***
121         dnl *****************************
122         AC_SEARCH_LIBS(pthread_create, pthread, [
123                 AM_CONDITIONAL(THREADS_PTHREAD, true)
124                 AC_DEFINE(HAVE_PTHREAD)
125
126                 # Need pthread_mutex_timedlock
127                 pthread_CFLAGS=""
128                 orig_CPPFLAGS=$CPPFLAGS
129                 # This is a gcc-specific error, but we already set
130                 # gcc-specific options in CFLAGS
131                 CPPFLAGS="$CPPFLAGS -Werror-implicit-function-declaration"
132                 AC_MSG_CHECKING(for pthread_mutex_timedlock)
133                 AC_TRY_COMPILE([ #include <pthread.h>], [
134                         pthread_mutex_t mut=PTHREAD_MUTEX_INITIALIZER;
135                         pthread_mutex_timedlock(&mut, NULL);
136                 ], [
137                         # Works!
138                         AC_MSG_RESULT(ok)
139                         AC_DEFINE(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
140                 ], [
141                         AC_MSG_RESULT(no)
142
143                         # glibc requires -D_GNU_SOURCE before it will declare
144                         # this function
145                         AC_MSG_CHECKING(whether _GNU_SOURCE is needed for pthread_mutex_timedlock)
146                         CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
147                         AC_TRY_COMPILE([ #include <pthread.h>], [
148                                 pthread_mutex_t mut=PTHREAD_MUTEX_INITIALIZER;
149                                 pthread_mutex_timedlock(&mut, NULL);
150                         ], [
151                                 AC_MSG_RESULT(ok)
152                                 pthread_CFLAGS="-D_GNU_SOURCE"
153                                 AC_DEFINE(HAVE_PTHREAD_MUTEX_TIMEDLOCK)
154                         ], [
155                                 AC_MSG_RESULT(no)
156                                 dnl Add other variants here
157                                 AC_MSG_WARN(Working around pthread_mutex_timedlock)
158                         ])
159                 ])
160                 CPPFLAGS=$orig_CPPFLAGS
161                 CFLAGS="$CFLAGS $pthread_CFLAGS"
162
163                 # Need PTHREAD_MUTEX_RECURSIVE
164                 pthread_CFLAGS=""
165                 orig_CPPFLAGS=$CPPFLAGS
166                 # This is a gcc-specific error, but we already set
167                 # gcc-specific options in CFLAGS
168                 CPPFLAGS="$CPPFLAGS -Werror-implicit-function-declaration"
169                 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE)
170                 AC_TRY_COMPILE([ #include <pthread.h>], [
171                         pthread_mutexattr_t attr;
172                         pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
173                 ], [
174                         # Works!
175                         AC_MSG_RESULT(ok)
176                 ], [
177                         AC_MSG_RESULT(no)
178
179                         # glibc requires -D_GNU_SOURCE before it will declare
180                         # this macro
181                         AC_MSG_CHECKING(whether _GNU_SOURCE is needed for PTHREAD_MUTEX_RECURSIVE)
182                         CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
183                         AC_TRY_COMPILE([ #include <pthread.h>], [
184                                 pthread_mutexattr_t attr;
185                                 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
186                         ], [
187                                 AC_MSG_RESULT(ok)
188                                 pthread_CFLAGS="-D_GNU_SOURCE"
189                         ], [
190                                 AC_MSG_RESULT(no)
191                                 dnl Add other variants here
192                                 AC_MSG_ERROR([PTHREAD_MUTEX_RECURSIVE not found])
193                         ])
194                 ])
195                 CPPFLAGS=$orig_CPPFLAGS
196                 CFLAGS="$CFLAGS $pthread_CFLAGS"
197         ], [
198                 AC_MSG_ERROR([libpthread is required on non-win32 hosts])
199         ])
200 fi
201
202 # check for new iconv version
203 AC_MSG_CHECKING(for new iconv)
204 AC_CACHE_VAL(new_iconv,[
205         AC_TRY_RUN([#include <stdio.h> 
206                 #include <iconv.h>
207  
208                 int main()
209                 {
210                   exit (iconv_open ("UTF-16le", "UTF-8") == (iconv_t)-1);
211                 }
212                 ],
213                 new_iconv=yes)])
214 if test -n "$new_iconv"; then
215         AC_MSG_RESULT(yes)
216         AC_DEFINE(HAVE_NEW_ICONV)
217 else
218         AC_MSG_RESULT(no)
219 fi
220
221
222 TARGET="unknown"
223 ACCESS_UNALIGNED="yes"
224
225 case "$host" in
226 #mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS; ACCESS_UNALIGNED="no";;
227 i*86-*-*) TARGET=X86; arch_target=x86;;
228 sparc*-*-*) TARGET=SPARC; ACCESS_UNALIGNED="no";;
229 #alpha*-*-linux* | alpha*-*-osf*) TARGET=ALPHA; ACCESS_UNALIGNED="no";;
230 #m68k-*-linux*) TARGET=M68K;;
231 powerpc-*-linux* | powerpc-*-sysv*) TARGET=POWERPC; arch_target=ppc;;
232 #arm-*-linux-*) TARGET=ARM; ACCESS_UNALIGNED="no";;
233 esac
234
235 if test ${TARGET} = unknown; then
236         CFLAGS="$CFLAGS -DNO_PORT"
237         AC_MSG_WARN("mono has not been ported to $host: some things may not work.")
238 fi
239
240 if test ${ACCESS_UNALIGNED} = no; then
241         CPPFLAGS="$CPPFLAGS -DNO_UNALIGNED_ACCESS"
242 fi
243
244 AM_CONDITIONAL(MIPS_GCC, test ${TARGET}${ac_cv_prog_gcc} = MIPSyes)
245 AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
246 AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
247 AM_CONDITIONAL(X86, test x$TARGET = xX86)
248 AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
249 AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
250 AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
251 AM_CONDITIONAL(ARM, test x$TARGET = xARM)
252
253 AC_SUBST(arch_target)
254 AC_SUBST(CFLAGS)
255
256 AC_OUTPUT([
257 Makefile
258 mono/Makefile
259 mono/metadata/Makefile
260 mono/dis/Makefile
261 mono/cil/Makefile
262 mono/arch/Makefile
263 mono/arch/x86/Makefile
264 mono/arch/ppc/Makefile
265 mono/interpreter/Makefile
266 mono/tests/Makefile
267 mono/wrapper/Makefile
268 mono/monoburg/Makefile
269 mono/jit/Makefile
270 mono/io-layer/Makefile
271 runtime/Makefile
272 doc/Makefile
273 ])