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