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