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