correct exception handler range checks
[cacao.git] / configure.in
1 cdnl autoconf; autoheader; automake
2
3 dnl Process this file with autoconf to produce a configure script.
4 AC_INIT([main.c])
5 AC_CANONICAL_HOST
6
7 AC_PREREQ(2.59)
8 AM_INIT_AUTOMAKE(cacao, 0.40)
9 AM_CONFIG_HEADER([config.h])
10
11 AC_PREFIX_DEFAULT(/usr/local/cacao)
12
13 dnl system type
14
15 case "$host_cpu" in
16 alpha* )
17         ARCH_DIR="alpha"
18         STATIC_CLASSPATH="1"
19         CFLAGS="-Wall -O2 -g3 -mieee -D__ALPHA__"
20         AC_DEFINE([TRACE_ARGS_NUM], 6, [Defines integer argument register count])
21         AC_DEFINE([USE_CODEMMAP], 1, [use code mmap])
22         ;;
23
24 i386* | i486* | i586* | i686* )
25         ARCH_DIR="i386"
26         STATIC_CLASSPATH="0"
27         CFLAGS="-Wall -O0 -g3 -D__I386__"
28         AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count])
29         AC_DEFINE([USE_CODEMMAP], 1, [use code mmap])
30         ;;
31
32 mips* )
33         ARCH_DIR="mips"
34         STATIC_CLASSPATH="1"
35         CFLAGS="-64 -O2 -OPT:Olimit=0 -g -DMAP_ANONYMOUS=0 -woff 1110,1164,1515 -D__MIPS__"
36         LIBS="-lelfutil"
37         AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count])
38         ;;
39
40 powerpc* | ppc* )
41         ARCH_DIR="powerpc"
42         STATIC_CLASSPATH="1"
43         CFLAGS="-Wall -O2 -g -DMAP_ANONYMOUS=0 -no-cpp-precomp -D__POWERPC__"
44         AC_DEFINE([TRACE_ARGS_NUM], 8, [Defines integer argument register count])
45         ;;
46
47 x86_64* )
48         ARCH_DIR="x86_64"
49         STATIC_CLASSPATH="1"
50         CFLAGS="-Wall -O2 -g3 -D__X86_64__"
51         AC_DEFINE([TRACE_ARGS_NUM], 6, [Defines integer argument register count])
52         AC_DEFINE([USE_CODEMMAP], 1, [use code mmap])
53         ;;
54
55 sparc* | * )
56         AC_MSG_ERROR($host_cpu systems are not supported at this time)
57         ;;
58 esac
59
60
61 case "$host_os" in
62 *linux* | *Linux* )
63         CFLAGS="$CFLAGS -D__LINUX__ -D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_BSD_SOURCE"
64         ;;
65 *darwin* )
66         CFLAGS="$CFLAGS -D__DARWIN__"
67         ;;
68 *irix* )
69         CFLAGS="$CFLAGS -D__IRIX__"
70         ;;
71 * )
72         ;;
73 esac
74
75 AC_SUBST(COMPILER_OBJECTS)
76
77 AC_DEFINE_UNQUOTED([ARCH_DIR], "$ARCH_DIR", [Architecture directory])
78 AC_SUBST(ARCH_DIR)
79
80 AC_ARG_ENABLE([dynamicclasspath], [AS_HELP_STRING(--disable-dynamicclasspath, link classpath native code static even on platforms supporting dynamic loading)], [use_dynamicclasspath=$enableval], [use_dynamicclasspath=yes])
81 dnl force static classpath linking ??
82 AC_MSG_CHECKING(Link classpath static)
83 if test "xno" == "x$use_dynamicclasspath"; then
84   STATIC_CLASSPATH="1"
85 fi
86
87 if test "$STATIC_CLASSPATH" == "1"; then
88         AC_MSG_RESULT(yes)
89 else
90         AC_MSG_RESULT(no)
91 fi
92 AC_SUBST(STATIC_CLASSPATH)
93
94 dnl Checks for programs.
95 AC_PROG_CC
96 AM_PROG_AS
97 AC_PROG_RANLIB
98 AC_PROG_MAKE_SET
99
100 dnl Checks for libraries.
101 dnl AC_CHECK_LIB(m, sin)
102
103 dnl Checks for header files.
104 AC_HEADER_DIRENT
105 AC_HEADER_STDC
106 AC_CHECK_HEADERS([fcntl.h])
107 AC_CHECK_HEADERS([sys/time.h])
108 AC_CHECK_HEADERS([unistd.h])
109 AC_CHECK_HEADERS([sys/ioctl.h])
110
111 dnl Checks for typedefs, structures, and compiler characteristics.
112 AC_C_CONST
113 AC_C_INLINE
114 AC_TYPE_OFF_T
115 AC_TYPE_SIZE_T
116 AC_HEADER_TIME
117 AC_STRUCT_TM
118
119 dnl Checks for library functions.
120 AC_PROG_GCC_TRADITIONAL
121 AC_FUNC_MEMCMP
122 AC_FUNC_MMAP
123 AC_TYPE_SIGNAL
124 AC_CHECK_FUNCS(getcwd gettimeofday mkdir mktime select socket)
125
126 dnl Check for mmap header anomalies (missing MAP_FAILED, etc.)
127 if test $ac_cv_func_mmap_fixed_mapped = yes; then
128         AC_CACHE_CHECK(whether MAP_FAILED is defined,
129                        ac_cv_map_failed,
130                        AC_EGREP_CPP(yes, 
131                                     [#include <sys/mman.h>
132                                      #ifdef MAP_FAILED
133                                         yes
134                                      #endif],
135                                     ac_cv_map_failed=yes,
136                                     ac_cv_map_failed=no))
137
138         AC_CACHE_CHECK(whether MAP_ANONYMOUS is defined,
139                        ac_cv_map_anonymous,
140                        AC_EGREP_CPP(yes, 
141                                     [#include <sys/mman.h>
142                                      #ifdef MAP_ANONYMOUS
143                                         yes
144                                      #endif],
145                                     ac_cv_map_anonymous=yes,
146                                     ac_cv_map_anonymous=no))
147
148         if test $ac_cv_map_failed = yes; then
149                 AC_DEFINE([HAVE_MAP_FAILED], 1, [Define if mman.h defines MAP_FAILED])
150         fi
151
152         if test $ac_cv_map_anonymous = yes; then
153                 AC_DEFINE([HAVE_MAP_ANONYMOUS], 1, [Define if mman.h defines MAP_ANONYMOUS])
154         fi
155 fi
156
157
158 dnl Features
159
160 dnl check arguments
161 AC_ARG_ENABLE([threads], [AS_HELP_STRING(--enable-threads,enable threads support (none,green,native) [[default=native]])])
162 AC_ARG_ENABLE([__thread], [AS_HELP_STRING(--disable-__thread,do not use TLS features even when supporting them)], [use__thread=$enableval], [use__thread=yes])
163
164
165 dnl threads
166 AC_MSG_CHECKING(whether to include threads support)
167 enable_threads=${enable_threads:-native}
168 case "$enable_threads" in
169 no | none | single)
170         AC_MSG_RESULT(no)
171         dnl no threads for boehm
172         ac_configure_args="$ac_configure_args --disable-boehm-threads"
173         ;;
174 green | native | posix | pthreads)
175         AC_DEFINE([USE_THREADS], 1, [use threads])
176         AC_DEFINE([EXTERNAL_OVERFLOW], 1, [external overflow])
177         AC_DEFINE([DONT_FREE_FIRST], 1, [don't free first])
178
179         LIBTHREAD="libthreads.a"
180         THREAD_OBJ="threads/libthreads.a"
181         AC_SUBST(LIBTHREAD)
182         AC_SUBST(THREAD_OBJ)
183
184         if test x"$enable_threads" != "xgreen"; then
185                 AC_DEFINE([NATIVE_THREADS], 1, [use pthreads])
186                 THREAD_LIB="-lpthread"
187                 AC_SUBST(THREAD_LIB)
188                 AC_MSG_RESULT(yes, native)
189                 AC_CHECK_LIB(pthread, main)
190
191                 CFLAGS="$CFLAGS -D_REENTRANT"
192
193                 dnl tell boehm to support threads as well and classpath to
194                 dnl synchronize VM threads portably
195                 ac_configure_args="$ac_configure_args --enable-boehm-threads=posix --enable-portable-native-sync"
196         else
197                 AC_MSG_RESULT(yes, green)
198
199                 dnl no threads for boehm
200                 ac_configure_args="$ac_configure_args --disable-boehm-threads"
201         fi
202     ;;
203 *)
204     AC_MSG_ERROR($enable_threads is an unknown thread package)
205     ;;
206 esac
207
208
209 dnl Check whether the compiler supports the __thread keyword.
210 if test "x$use__thread" != xno; then
211   AC_CACHE_CHECK([for __thread], ac_cv_gcc___thread,
212   [cat > conftest.c <<\EOF
213 __thread int a = 42;
214 EOF
215   if AC_TRY_COMMAND([${CC-cc} $CFLAGS -c conftest.c >&AS_MESSAGE_LOG_FD]); then
216     ac_cv_gcc___thread=yes 
217   else
218     ac_cv_gcc___thread=no
219   fi
220   rm -f conftest*])
221   if test "$ac_cv_gcc___thread" = yes; then
222     AC_DEFINE([HAVE___THREAD], 1, [have __thread])
223   fi
224 else
225   ac_cv_gcc___thread=no
226 fi
227
228
229 dnl check if zlib should be used
230 AC_ARG_ENABLE([zlib], [AS_HELP_STRING(--enable-zlib,enable zip archive class storage (needs zlib) [[default=yes]])])
231
232 AC_MSG_CHECKING(whether zip archives should be supported)
233 if test x"$enable_zlib" = "xno"; then
234         ZIP_LIBS=""
235         ZIP_C=""
236         AC_MSG_RESULT(no)
237 else
238         ZIP_LIBS="-lz"
239         ZIP_C="unzip.c"
240         AC_DEFINE([USE_ZLIB], 1, [use zlib])
241         AC_MSG_RESULT(yes)
242         AC_CHECK_LIB(z, main)
243 fi
244 AC_SUBST(ZIP_LIBS)
245 AC_SUBST(ZIP_C)
246
247
248 dnl set some essential classpath options, even if their classpath default is
249 dnl suitable for us
250 ac_configure_args="$ac_configure_args --enable-jni --disable-cni --disable-regen-headers --enable-static --enable-shared --enable-load-library"
251
252
253 dnl check arguments
254 AC_ARG_ENABLE([gtk-peer], [AS_HELP_STRING(--enable-gtk-peer,compile GTK native peers [[default=no]])])
255
256
257 dnl enable gtk peer
258 AC_MSG_CHECKING(whether to use gtk awt peers)
259 if test x"$enable_gtk_peer" = "xyes"; then
260         AC_MSG_RESULT(yes)
261         CACAO_GTK=yes
262         AWTPEERS="java.awt.peer.ComponentPeer \
263                 java.awt.Graphics\
264                 java.awt.Window\
265                 java.awt.peer.MenuPeer \
266                 java.awt.peer.MenuItemPeer \
267                 gnu.java.awt.peer.gtk.GdkPixbufDecoder \
268                 gnu.java.awt.peer.gtk.GtkGenericPeer \
269                 gnu.java.awt.peer.gtk.GtkMenuBarPeer \
270                 gnu.java.awt.peer.gtk.GtkScrollPanePeer \
271                 gnu.java.awt.peer.gtk.GtkMenuPeer \
272                 gnu.java.awt.peer.gtk.GtkTextComponentPeer \
273                 gnu.java.awt.peer.gtk.GtkComponentPeer \
274                 gnu.java.awt.peer.gtk.GtkPopupMenuPeer \
275                 gnu.java.awt.peer.gtk.GtkCheckboxPeer \
276                 gnu.java.awt.peer.gtk.GtkCheckboxGroupPeer \
277                 gnu.java.awt.peer.gtk.GtkMenuItemPeer \
278                 gnu.java.awt.peer.gtk.GdkGraphics \
279                 gnu.java.awt.peer.gtk.GtkToolkit \
280                 gnu.java.awt.peer.gtk.GtkCanvasPeer \
281                 gnu.java.awt.peer.gtk.GtkFramePeer \
282                 gnu.java.awt.peer.gtk.GdkFontMetrics \
283                 gnu.java.awt.peer.gtk.GtkScrollbarPeer \
284                 gnu.java.awt.peer.gtk.GtkListPeer \
285                 gnu.java.awt.peer.gtk.GtkLabelPeer \
286                 gnu.java.awt.peer.gtk.GtkTextAreaPeer \
287                 gnu.java.awt.peer.gtk.GtkFileDialogPeer \
288                 gnu.java.awt.peer.gtk.GtkImagePainter \
289                 gnu.java.awt.peer.gtk.GtkChoicePeer \
290                 gnu.java.awt.peer.gtk.GtkPanelPeer \
291                 gnu.java.awt.peer.gtk.GtkMainThread \
292                 gnu.java.awt.peer.gtk.GtkButtonPeer \
293                 gnu.java.awt.peer.gtk.GtkTextFieldPeer \
294                 gnu.java.awt.peer.gtk.GtkCheckboxMenuItemPeer \
295                 gnu.java.awt.peer.gtk.GtkClipboard \
296                 gnu.java.awt.peer.gtk.GtkWindowPeer"
297                 AWT_OBJS="classpath/native/jni/gtk-peer/.libs/libgtkpeer.a \
298                         -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 \
299                         -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 \
300                         -lgthread-2.0 -lart_lgpl_2"
301                 USEGTK="yes"
302                 AC_SUBST(USEGTK)
303                 AC_SUBST(AWTPEERS)
304                 AC_SUBST(AWT_OBJS)
305                 AC_DEFINE([USE_GTK], 1, [use gtk])
306
307 else
308         CACAO_GTK=no
309         AWT_OBJS=""
310         AWTPEERS=""
311         USEGTK="no"
312         AC_SUBST(USEGTK)
313         AC_SUBST(AWTPEERS)
314         AC_SUBST(AWT_OBJS)
315         AC_MSG_RESULT(no)
316
317         ac_configure_args="$ac_configure_args --disable-gtk-peer"
318 fi
319
320
321 if test "x1" == "x$STATIC_CLASSPATH"; then
322         STATIC_CLASSPATH_LIBS=" \
323         classpath/native/jni/java-io/.libs/libjavaio.a \
324         classpath/native/jni/java-nio/.libs/libjavanio.a \
325         classpath/native/jni/java-net/.libs/libjavanet.a \
326         classpath/native/jni/java-util/.libs/libjavautil.a \
327         classpath/native/jni/java-lang/.libs/libjavalang.a \
328         classpath/native/jni/java-lang/.libs/libjavalangreflect.a"
329         DYNAMIC_CLASSPATH_LIBS=""
330         AC_SUBST(STATIC_CLASSPATH_LIBS)
331         AC_SUBST(DYNAMIC_CLASSPATH_LIBS)
332         AC_DEFINE([STATIC_CLASSPATH], 1, [use classpath statically linked])
333
334 else
335         DYNAMIC_CLASSPATH_LIBS="-ldl -Wl,--export-dynamic"
336         STATIC_CLASSPATH_LIBS=""
337         AC_SUBST(STATIC_CLASSPATH_LIBS)
338         AC_SUBST(DYNAMIC_CLASSPATH_LIBS)
339 fi
340
341
342
343
344 dnl now configure boehm gc and gnu classpath
345 dnl the export is not my favorite (is there another way?)
346 export CFLAGS
347 export CACAO_GTK
348 AC_CONFIG_SUBDIRS(mm/boehm-gc classpath)
349
350
351 AC_OUTPUT(Makefile \
352           mm/Makefile \
353           toolbox/Makefile \
354           threads/Makefile \
355           jit/Makefile \
356           jit/loop/Makefile \
357           jit/alpha/Makefile \
358           jit/i386/Makefile \
359           jit/mips/Makefile \
360           jit/powerpc/Makefile \
361           jit/x86_64/Makefile \
362           nat/Makefile \
363           doc/Makefile \
364           tst/Makefile \
365           tst/kaffe/Makefile \
366           jvmtst/Makefile )