2010-03-12 Jb Evain <jbevain@novell.com>
[mono.git] / libgc / configure.in
1 # Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved.
2
3 # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
4 # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
5
6 # Permission is hereby granted to use or copy this program
7 # for any purpose,  provided the above notices are retained on all copies.
8 # Permission to modify the code and to distribute modified code is granted,
9 # provided the above notices are retained, and a notice that the code was
10 # modified is included with the above copyright notice.
11 #
12 # Original author: Tom Tromey
13 # Modified by: Grzegorz Jakacki <jakacki at acm dot org>
14
15 dnl Process this file with autoconf to produce configure.
16
17 AC_PREREQ(2.53)
18 AC_INIT(libgc-mono, 6.6, Hans_Boehm@hp.com)
19
20 AM_INIT_AUTOMAKE(libgc-mono, 6.6, no-define)
21
22 AC_CONFIG_SRCDIR(gcj_mlc.c)
23 AC_CANONICAL_HOST
24
25 AC_SUBST(PACKAGE)
26 AC_SUBST(GC_VERSION)
27
28 AC_PROG_CC
29 AC_PROG_CXX
30
31 dnl automake 1.6 and later need the AM_PROG_AS macro.
32 ifdef([AM_PROG_AS],[AM_PROG_AS],[])
33 AC_CHECK_TOOL(AR, ar)
34 AC_CHECK_TOOL(RANLIB, ranlib, :)  # :)
35
36 AC_PROG_INSTALL
37
38 AM_MAINTAINER_MODE
39
40 . [$]{srcdir}/configure.host
41
42 # We use a separate variable to pass down CPPFLAGS and CFLAGS from the main mono 
43 # configure, because of autoconf brokeness
44 if test "x$CPPFLAGS_FOR_LIBGC" != "x"; then
45    CPPFLAGS=$CPPFLAGS_FOR_LIBGC
46 fi
47 if test "x$CFLAGS_FOR_LIBGC" != "x"; then
48    CFLAGS=$CFLAGS_FOR_LIBGC
49 fi
50
51 GC_CFLAGS=${gc_cflags}
52 AC_SUBST(GC_CFLAGS)
53
54 case $enable_embed_check in
55 no) ;;
56 *) AC_MSG_ERROR([This module is now part of 'mono' and cannot be built as a stand-alone module any longer.]) ;;
57 esac
58
59 THREADS=$with_libgc_threads
60
61 AC_ARG_ENABLE(win32-dllmain,
62 [  --enable-win32-dllmain    Define the DllMain function in win32_threads.c even if the collector is not built as a dll],
63 )
64
65 AC_ARG_ENABLE(parallel-mark,
66 [  --enable-parallel-mark       parallelize marking and free list construction],
67    [case "$THREADS" in
68       no | none | single)
69         AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
70         ;;
71     esac]
72 )
73
74 AC_ARG_ENABLE(cplusplus,
75 [  --enable-cplusplus           install C++ support],
76 )
77
78 INCLUDES=-I${srcdir}/include
79 THREADDLLIBS=
80 ## Libraries needed to support dynamic loading and/or threads.
81 case "$THREADS" in
82  no | none | single)
83     THREADS=none
84     ;;
85  posix | pthreads)
86     THREADS=posix
87     THREADDLLIBS=-lpthread
88     case "$host" in
89      x86-*-linux* | ia64-*-linux* | i386-*-linux* | i486-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha*-*-linux* | s390*-*-linux* | sparc*-*-linux* | powerpc-*-linux*)
90         AC_DEFINE(GC_LINUX_THREADS)
91         AC_DEFINE(_REENTRANT)
92         if test "${enable_parallel_mark}" = yes; then
93           AC_DEFINE(PARALLEL_MARK)
94         fi
95         AC_DEFINE(THREAD_LOCAL_ALLOC)
96         ;;
97      *-*-linux*)
98         AC_DEFINE(GC_LINUX_THREADS)
99         AC_DEFINE(_REENTRANT)
100         ;;
101      *-*-aix*)
102         AC_DEFINE(GC_AIX_THREADS)
103         AC_DEFINE(_REENTRANT)
104         ;;
105      *-*-hpux*)
106         AC_MSG_WARN("Only HP/UX 11 threads are supported.")
107         AC_DEFINE(GC_HPUX_THREADS)
108         AC_DEFINE(_POSIX_C_SOURCE,199506L)
109         if test "${enable_parallel_mark}" = yes; then
110           AC_DEFINE(PARALLEL_MARK)
111         fi
112         AC_DEFINE(THREAD_LOCAL_ALLOC)
113         THREADDLLIBS="-lpthread -lrt"
114         ;;
115       *-*-freebsd*)
116         AC_DEFINE(GC_FREEBSD_THREADS)
117         if test "x$PTHREAD_CFLAGS" != "x"; then
118                 INCLUDES="$INCLUDES $PTHREAD_CFLAGS"
119         fi
120         if test "x$PTHREAD_LIBS" = "x"; then
121                 THREADDLLIBS=-pthread
122         else
123                 THREADDLLIBS="$PTHREAD_LIBS"
124         fi
125         ;;
126      *-*-solaris*)
127         AC_DEFINE(GC_SOLARIS_THREADS)
128         AC_DEFINE(GC_SOLARIS_PTHREADS)
129         ;;
130      *-*-irix*)
131         AC_DEFINE(GC_IRIX_THREADS)
132         ;;
133      *-*-cygwin*)
134         AC_DEFINE(GC_WIN32_THREADS)
135         ;;
136      *-*-darwin*)
137         AC_DEFINE(GC_DARWIN_THREADS)
138         AC_DEFINE(THREAD_LOCAL_ALLOC)
139         if test "${enable_parallel_mark}" = yes; then
140           AC_DEFINE(PARALLEL_MARK)
141         fi
142         ;;
143      *-*-netbsd*)
144         AC_DEFINE(GC_NETBSD_THREADS)
145         if test "${enable_parallel_mark}" = yes; then
146           AC_DEFINE(PARALLEL_MARK)
147         fi
148         AC_DEFINE(THREAD_LOCAL_ALLOC)
149         ;;
150      *-*-osf*)
151         AC_DEFINE(GC_OSF1_THREADS)
152         if test "${enable_parallel_mark}" = yes; then
153           AC_DEFINE(PARALLEL_MARK)
154           AC_DEFINE(THREAD_LOCAL_ALLOC)
155           # May want to enable it in other cases, too.
156           # Measurements havent yet been done.
157         fi
158         INCLUDES="$INCLUDES -pthread"
159         THREADDLLIBS="-lpthread -lrt"
160         ;;
161       *)
162         AC_MSG_ERROR("Pthreads not supported by the GC on this platform.")
163         ;;
164     esac
165     ;;
166  win32)
167     AC_DEFINE(GC_WIN32_THREADS)
168     dnl Wine getenv may not return NULL for missing entry
169     AC_DEFINE(NO_GETENV)
170         if test "${enable_win32_dllmain}" = yes; then
171            AC_DEFINE(GC_INSIDE_DLL)
172         fi
173     ;;
174  dgux386)
175     THREADS=dgux386
176     AC_MSG_RESULT($THREADDLLIBS)
177     # Use pthread GCC  switch
178     THREADDLLIBS=-pthread
179     if test "${enable_parallel_mark}" = yes; then
180         AC_DEFINE(PARALLEL_MARK)
181     fi
182     AC_DEFINE(THREAD_LOCAL_ALLOC)
183     AC_DEFINE(GC_DGUX386_THREADS)
184     AC_DEFINE(DGUX_THREADS)
185     # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
186     INCLUDES="-pthread $INCLUDES"
187     ;;
188  aix)
189     THREADS=posix
190     THREADDLLIBS=-lpthread
191     AC_DEFINE(GC_AIX_THREADS)
192     AC_DEFINE(_REENTRANT)
193     ;;
194  decosf1 | irix | mach | os2 | solaris | dce | vxworks)
195     AC_MSG_ERROR(thread package $THREADS not yet supported)
196     ;;
197  *)
198     AC_MSG_ERROR($THREADS is an unknown thread package)
199     ;;
200 esac
201 AC_SUBST(THREADDLLIBS)
202
203 case "$host" in 
204    powerpc-*-darwin*)
205       powerpc_darwin=true
206       ;;
207 esac
208 AM_CONDITIONAL(POWERPC_DARWIN,test x$powerpc_darwin = xtrue)
209
210 AC_MSG_CHECKING(for xlc)
211 AC_TRY_COMPILE([],[
212  #ifndef __xlC__
213  # error
214  #endif
215 ], [compiler_xlc=yes], [compiler_xlc=no])
216 AC_MSG_RESULT($compiler_xlc)
217 AM_CONDITIONAL(COMPILER_XLC,test $compiler_xlc = yes)
218 if test $compiler_xlc = yes -a "$powerpc_darwin" = true; then
219   # the darwin stack-frame-walking code is completely broken on xlc
220   AC_DEFINE(DARWIN_DONT_PARSE_STACK)
221 fi
222
223 # We never want libdl on darwin. It is a fake libdl that just ends up making
224 # dyld calls anyway
225 case "$host" in
226   *-*-darwin*) ;;
227   *) 
228     AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl")
229     ;;
230 esac
231
232 AC_SUBST(EXTRA_TEST_LIBS)
233
234 target_all=libgc.la
235 AC_SUBST(target_all)
236
237 dnl If the target is an eCos system, use the appropriate eCos
238 dnl I/O routines.
239 dnl FIXME: this should not be a local option but a global target
240 dnl system; at present there is no eCos target.
241 TARGET_ECOS="no"
242 AC_ARG_WITH(ecos,
243 [  --with-ecos             enable runtime eCos target support],
244 TARGET_ECOS="$with_ecos"
245 )
246
247 addobjs=
248 addlibs=
249 addincludes=
250 addtests=
251 CXXINCLUDES=
252 case "$TARGET_ECOS" in
253    no)
254       ;;
255    *)
256       AC_DEFINE(ECOS)
257       CXXINCLUDES="-I${TARGET_ECOS}/include"
258       addobjs="$addobjs ecos.lo"
259       ;;
260 esac
261
262 if test "${enable_cplusplus}" = yes; then
263       addincludes="$addincludes include/gc_cpp.h include/gc_allocator.h"
264       addtests="$addtests test_cpp"
265 fi
266
267 AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
268
269 AC_SUBST(CXX)
270
271 AC_SUBST(INCLUDES)
272 AC_SUBST(CXXINCLUDES)
273
274 # Configuration of shared libraries
275 #
276 AC_MSG_CHECKING(whether to build shared libraries)
277 AC_ENABLE_SHARED
278
279 case "$host" in
280  alpha-*-openbsd*)
281      enable_shared=no
282      AC_MSG_RESULT(no)
283      ;;
284  *)
285      AC_MSG_RESULT(yes)
286      ;;
287 esac
288
289 # Configuration of machine-dependent code
290 #
291 AC_MSG_CHECKING(which machine-dependent code should be used) 
292 machdep=
293 case "$host" in
294  alpha-*-openbsd*)
295     machdep="alpha_mach_dep.lo"
296     if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
297        AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
298     fi
299     ;;
300  alpha*-*-linux*)
301     machdep="alpha_mach_dep.lo"
302     ;;
303  i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
304     AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED)
305     ;;
306  mipstx39-*-elf*)
307     machdep="mips_ultrix_mach_dep.lo"
308     AC_DEFINE(STACKBASE, __stackbase)
309     AC_DEFINE(DATASTART_IS_ETEXT)
310     ;;
311  mips-dec-ultrix*)
312     machdep="mips_ultrix_mach-dep.lo"
313     ;;
314  mips-nec-sysv*|mips-unknown-sysv*)
315     ;;
316  mips*-*-linux*) 
317     ;; 
318  mips-*-*)
319     machdep="mips_sgi_mach_dep.lo"
320     AC_DEFINE(NO_EXECUTE_PERMISSION)
321     ;;
322  sparc-*-netbsd*)
323     machdep="sparc_netbsd_mach_dep.lo"
324     ;;
325  sparc-sun-solaris2.3)
326     machdep="sparc_mach_dep.lo"
327     AC_DEFINE(SUNOS53_SHARED_LIB)
328     ;;
329  sparc*-sun-solaris2.*)
330     machdep="sparc_mach_dep.lo"
331     ;;
332  ia64-*-*)
333     machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
334     ;;
335 esac
336 if test x"$machdep" = x; then
337 AC_MSG_RESULT($machdep)
338    machdep="mach_dep.lo"
339 fi
340 addobjs="$addobjs $machdep"
341 AC_SUBST(addobjs)
342 AC_SUBST(addincludes)
343 AC_SUBST(addlibs)
344 AC_SUBST(addtests)
345
346 AC_PROG_LIBTOOL
347
348 #
349 # Check for AViiON Machines running DGUX
350 #
351 ac_is_dgux=no
352 AC_CHECK_HEADER(sys/dg_sys_info.h,
353 [ac_is_dgux=yes;])
354
355     ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
356 if test $ac_is_dgux = yes; then
357     if test "$enable_full_debug" = "yes"; then
358       CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
359       CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
360     else
361       CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
362       CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
363     fi
364     AC_SUBST(CFLAGS)
365     AC_SUBST(CXXFLAGS)
366 fi
367
368 dnl We use these options to decide which functions to include.
369 AC_ARG_WITH(target-subdir,
370 [  --with-target-subdir=SUBDIR
371                           configuring with a cross compiler])
372 AC_ARG_WITH(cross-host,
373 [  --with-cross-host=HOST  configuring with a cross compiler])
374
375 # automake wants to see AC_EXEEXT.  But we don't need it.  And having
376 # it is actually a problem, because the compiler we're passed can't
377 # necessarily do a full link.  So we fool automake here.
378 if false; then
379   # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
380   # to nothing, so nothing would remain between `then' and `fi' if it
381   # were not for the `:' below.
382   :
383   AC_EXEEXT
384 fi
385
386 AC_MSG_CHECKING([for threads package to use])
387 AC_MSG_RESULT($THREADS)
388
389 dnl As of 4.13a2, the collector will not properly work on Solaris when
390 dnl built with gcc and -O.  So we remove -O in the appropriate case.
391 dnl Not needed anymore on Solaris.
392 AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
393 case "$host" in
394  *aix*)
395     if test "$GCC" = yes; then
396        AC_MSG_RESULT(yes)
397        new_CFLAGS=
398        for i in $CFLAGS; do
399           case "$i" in
400            -O*)
401               ;;
402            *)
403               new_CFLAGS="$new_CFLAGS $i"
404               ;;
405           esac
406        done
407        CFLAGS="$new_CFLAGS"
408     else
409        AC_MSG_RESULT(no)
410     fi
411     ;;
412  *) AC_MSG_RESULT(no) ;;
413 esac
414
415 dnl We need to override the top-level CFLAGS.  This is how we do it.
416 MY_CFLAGS="$CFLAGS"
417 AC_SUBST(MY_CFLAGS)
418
419 dnl Include defines that have become de facto standard.
420 dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
421 AC_DEFINE(SILENT)
422 AC_DEFINE(NO_SIGNALS)
423 AC_DEFINE(NO_EXECUTE_PERMISSION)
424 dnl AC_DEFINE(ALL_INTERIOR_POINTERS)
425
426 dnl By default, make the library as general as possible.
427 AC_DEFINE(JAVA_FINALIZATION)
428 AC_DEFINE(GC_GCJ_SUPPORT)
429 AC_DEFINE(ATOMIC_UNCOLLECTABLE)
430
431 dnl This is something of a hack.  When cross-compiling we turn off
432 dnl some functionality.  We also enable the "small" configuration.
433 dnl These is only correct when targetting an embedded system.  FIXME.
434 if test -n "${with_cross_host}"; then
435    AC_DEFINE(NO_SIGSET)
436    AC_DEFINE(NO_CLOCK)
437    AC_DEFINE(SMALL_CONFIG)
438    AC_DEFINE(NO_DEBUGGING)
439 fi
440
441 UNWINDLIBS=
442 AC_ARG_ENABLE(full-debug,
443 [  --enable-full-debug  include full support for pointer backtracing etc.],
444 [ if test "$enable_full_debug" = "yes"; then
445     AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.")
446     AC_DEFINE(KEEP_BACK_PTRS)
447     AC_DEFINE(DBG_HDRS_ALL)
448     case $host in
449       ia64-*-linux* )
450         AC_DEFINE(MAKE_BACK_GRAPH)
451         AC_DEFINE(SAVE_CALL_COUNT, 8)
452         AC_CHECK_LIB(unwind, backtrace, [
453           AC_DEFINE(GC_HAVE_BUILTIN_BACKTRACE)
454           UNWINDLIBS=-lunwind
455           AC_MSG_WARN("Client code may need to link against libunwind.")
456         ])
457       ;;
458       x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
459         AC_DEFINE(MAKE_BACK_GRAPH)
460         AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
461         AC_DEFINE(SAVE_CALL_COUNT, 8)
462       ;;
463       i[3456]86-*-dgux*)
464         AC_DEFINE(MAKE_BACK_GRAPH)
465       ;;
466     esac ]
467   fi)
468
469 AC_SUBST(UNWINDLIBS)
470
471 AC_ARG_ENABLE(redirect-malloc,
472 [  --enable-redirect-malloc  redirect malloc and friends to GC routines])
473
474 if test "${enable_redirect_malloc}" = yes; then
475     if test "${enable_full_debug}" = yes; then
476         AC_DEFINE(REDIRECT_MALLOC, GC_debug_malloc_replacement)
477         AC_DEFINE(REDIRECT_REALLOC, GC_debug_realloc_replacement)
478         AC_DEFINE(REDIRECT_FREE, GC_debug_free)
479     else
480         AC_DEFINE(REDIRECT_MALLOC, GC_malloc)
481     fi
482 fi
483
484 AC_DEFINE(_IN_LIBGC)
485
486 AC_ARG_ENABLE(gc-assertions,
487 [  --enable-gc-assertions  collector-internal assertion checking])
488 if test "${enable_gc_assertions}" = yes; then
489     AC_DEFINE(GC_ASSERTIONS)
490 fi
491
492 AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
493
494 if test "${multilib}" = "yes"; then
495   multilib_arg="--enable-multilib"
496 else
497   multilib_arg=
498 fi
499
500 AC_OUTPUT(Makefile
501 include/Makefile
502 include/private/Makefile
503 doc/Makefile,,
504 srcdir=${srcdir}
505 host=${host}
506 CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
507 CC="${CC}"
508 DEFS="$DEFS"
509 )