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
15dnl Process this file with autoconf to produce configure.
16
17# Initialization
18# ==============
19
20AC_INIT(gc,7.0,Hans.Boehm@hp.com)
21    ## version must conform to [0-9]+[.][0-9]+(alpha[0-9]+)?
22AC_CONFIG_SRCDIR(gcj_mlc.c)
23AC_CANONICAL_TARGET
24AC_PREREQ(2.53)
25AC_REVISION($Revision: 1.25 $)
26GC_SET_VERSION
27AM_INIT_AUTOMAKE([foreign dist-bzip2 subdir-objects nostdinc])
28AM_MAINTAINER_MODE
29
30AC_SUBST(PACKAGE)
31AC_SUBST(GC_VERSION)
32
33AM_PROG_CC_C_O
34AC_PROG_CXX
35
36AM_PROG_AS
37## FIXME: really needed? (AC_LIBTOOL already provides this)
38AC_CHECK_TOOL(AR, ar)
39AC_CHECK_TOOL(RANLIB, ranlib, :)  # :)
40
41AC_PROG_INSTALL
42
43. ${srcdir}/configure.host
44
45GC_CFLAGS=${gc_cflags}
46AC_SUBST(GC_CFLAGS)
47
48AC_ARG_ENABLE(threads,
49  [AC_HELP_STRING([--enable-threads=TYPE], [choose threading package])],
50  THREADS=$enableval,
51  [ AC_MSG_CHECKING([for thread model used by GCC])
52    THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
53    if test -z "$THREADS"; then
54      THREADS=no
55    fi
56    AC_MSG_RESULT([$THREADS]) ])
57
58AC_ARG_ENABLE(parallel-mark,
59   [AC_HELP_STRING([--enable-parallel-mark],
60	[parallelize marking and free list construction])],
61   [case "$THREADS" in
62      no | none | single)
63	AC_MSG_ERROR([Parallel mark requires --enable-threads=x spec])
64	;;
65    esac ]
66)
67
68AC_ARG_ENABLE(cplusplus,
69    [AC_HELP_STRING([--enable-cplusplus], [install C++ support])])
70
71INCLUDES=-I${srcdir}/include
72THREADDLLIBS=
73need_atomic_ops_asm=false
74## Libraries needed to support dynamic loading and/or threads.
75case "$THREADS" in
76 no | none | single)
77    THREADS=none
78    ;;
79 posix | pthreads)
80    THREADS=posix
81    THREADDLLIBS=-lpthread
82    case "$host" in
83     x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* | alpha-*-linux*)
84	AC_DEFINE(GC_LINUX_THREADS)
85	AC_DEFINE(_REENTRANT)
86        if test "${enable_parallel_mark}" = yes; then
87	  AC_DEFINE(PARALLEL_MARK)
88	fi
89	AC_DEFINE(THREAD_LOCAL_ALLOC)
90	AC_MSG_WARN("Explict GC_INIT() calls may be required.");
91	;;
92     *-*-linux*)
93	AC_DEFINE(GC_LINUX_THREADS)
94	AC_DEFINE(_REENTRANT)
95	;;
96     *-*-aix*)
97	AC_DEFINE(GC_AIX_THREADS)
98	AC_DEFINE(_REENTRANT)
99	;;
100     *-*-hpux11*)
101	AC_MSG_WARN("Only HP/UX 11 POSIX threads are supported.")
102	AC_DEFINE(GC_HPUX_THREADS)
103	AC_DEFINE(_POSIX_C_SOURCE,199506L)
104	if test "${enable_parallel_mark}" = yes; then
105	  AC_DEFINE(PARALLEL_MARK)
106	fi
107	AC_DEFINE(THREAD_LOCAL_ALLOC)
108	AC_MSG_WARN("Explict GC_INIT() calls may be required.");
109	THREADDLLIBS="-lpthread -lrt"
110	# HPUX needs REENTRANT for the _r calls.
111	AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads])
112	;;
113     *-*-hpux10*)
114	AC_MSG_WARN("Only HP-UX 11 POSIX threads are supported.")
115	;;
116     *-*-freebsd*)
117	AC_MSG_WARN("FreeBSD does not yet fully support threads with Boehm GC.")
118	AC_DEFINE(GC_FREEBSD_THREADS)
119	INCLUDES="$INCLUDES -pthread"
120      	;;
121     *-*-kfreebsd*-gnu)
122	AC_DEFINE(GC_FREEBSD_THREADS)
123	INCLUDES="$INCLUDES -pthread"
124	THREADDLLIBS=-pthread
125	AC_DEFINE(_REENTRANT)
126        if test "${enable_parallel_mark}" = yes; then
127	  AC_DEFINE(PARALLEL_MARK)
128	fi
129	AC_DEFINE(THREAD_LOCAL_ALLOC)
130	AC_DEFINE(USE_COMPILER_TLS)
131      	;;
132     *-*-gnu*)
133	AC_DEFINE(GC_GNU_THREADS)
134	AC_DEFINE(_REENTRANT)
135	AC_DEFINE(THREAD_LOCAL_ALLOC)
136	;;
137     *-*-netbsd*)
138	AC_MSG_WARN("Only on NetBSD 2.0 or later.")
139	AC_DEFINE(GC_NETBSD_THREADS)
140	AC_DEFINE(_REENTRANT)
141	AC_DEFINE(_PTHREADS)
142	THREADDLLIBS="-lpthread -lrt"
143	;;
144     *-*-solaris*)
145	AC_DEFINE(GC_SOLARIS_THREADS)
146	AC_DEFINE(THREAD_LOCAL_ALLOC)
147	THREADDLLIBS="-lpthread -lrt"
148	if test "$GCC" != yes; then
149          CFLAGS="$CFLAGS -O"
150          need_atomic_ops_asm=true
151        fi
152	;;
153     *-*-irix*)
154	AC_DEFINE(GC_IRIX_THREADS)
155	;;
156     *-*-cygwin*)
157	AC_DEFINE(GC_WIN32_THREADS)
158	AC_DEFINE(THREAD_LOCAL_ALLOC)
159	win32_threads=true
160	;;
161     *-*-darwin*)
162	AC_DEFINE(GC_DARWIN_THREADS)
163	AC_DEFINE(THREAD_LOCAL_ALLOC)
164	AC_MSG_WARN("Explict GC_INIT() calls may be required.");
165	if test "${enable_parallel_mark}" = yes; then
166	  AC_DEFINE(PARALLEL_MARK)
167	fi
168	darwin_threads=true
169	;;
170     *-*-osf*)
171	AC_DEFINE(GC_OSF1_THREADS)
172        if test "${enable_parallel_mark}" = yes; then
173	  AC_DEFINE(PARALLEL_MARK)
174	  AC_DEFINE(THREAD_LOCAL_ALLOC)
175	  AC_MSG_WARN("Explict GC_INIT() calls may be required.");
176	  # May want to enable it in other cases, too.
177	  # Measurements havent yet been done.
178	fi
179	INCLUDES="$INCLUDES -pthread"
180	THREADDLLIBS="-lpthread -lrt"
181	;;
182      *)
183	AC_MSG_ERROR("Pthreads not supported by the GC on this platform.")
184	;;
185    esac
186    ;;
187 win32)
188    AC_DEFINE(GC_WIN32_THREADS)
189    dnl Wine getenv may not return NULL for missing entry
190    AC_DEFINE(NO_GETENV)
191    ;;
192 dgux386)
193    THREADS=dgux386
194    AC_MSG_RESULT($THREADDLLIBS)
195    # Use pthread GCC  switch
196    THREADDLLIBS=-pthread
197    if test "${enable_parallel_mark}" = yes; then
198        AC_DEFINE(PARALLEL_MARK)
199    fi
200    AC_DEFINE(THREAD_LOCAL_ALLOC)
201    AC_MSG_WARN("Explict GC_INIT() calls may be required.");
202    AC_DEFINE(GC_DGUX386_THREADS)
203    AC_DEFINE(DGUX_THREADS)
204    # Enable _POSIX4A_DRAFT10_SOURCE with flag -pthread
205    INCLUDES="-pthread $INCLUDES"
206    ;;
207 aix)
208    THREADS=posix
209    THREADDLLIBS=-lpthread
210    AC_DEFINE(GC_AIX_THREADS)
211    AC_DEFINE(_REENTRANT)
212    ;;
213 decosf1 | irix | mach | os2 | solaris | dce | vxworks)
214    AC_MSG_ERROR(thread package $THREADS not yet supported)
215    ;;
216 *)
217    AC_MSG_ERROR($THREADS is an unknown thread package)
218    ;;
219esac
220AC_SUBST(THREADDLLIBS)
221AM_CONDITIONAL(THREADS, test x$THREADS != xnone)
222AM_CONDITIONAL(PTHREADS, test x$THREADS = xposix)
223AM_CONDITIONAL(DARWIN_THREADS, test x$darwin_threads = xtrue)
224AM_CONDITIONAL(WIN32_THREADS, test x$win32_threads = xtrue)
225
226case "$host" in
227   powerpc-*-darwin*)
228      powerpc_darwin=true
229      ;;
230esac
231
232# Darwin needs a few extra special tests to deal with variation in the
233# system headers.
234case "$host" in
235  powerpc*-*-darwin*)
236    AC_CHECK_MEMBER(ppc_thread_state_t.r0,
237      AC_DEFINE(HAS_PPC_THREAD_STATE_R0,1,
238	[ppc_thread_state_t has field r0]),,
239      [#include <mach/thread_status.h>])
240    AC_CHECK_MEMBER(ppc_thread_state_t.__r0,
241      AC_DEFINE(HAS_PPC_THREAD_STATE___R0,1,dnl
242	[ppc_thread_state_t has field __r0]),,
243      [#include <mach/thread_status.h>])
244    AC_CHECK_MEMBER(ppc_thread_state64_t.r0,
245      AC_DEFINE(HAS_PPC_THREAD_STATE64_R0,1,dnl
246	[ppc_thread_state64_t has field r0]),,
247      [#include <mach/thread_status.h>])
248    AC_CHECK_MEMBER(ppc_thread_state64_t.__r0,
249      AC_DEFINE(HAS_PPC_THREAD_STATE64___R0,1,dnl
250	[ppc_thread_state64_t has field __r0]),,
251      [#include <mach/thread_status.h>])
252    ;;
253  i?86*-*-darwin*)
254    AC_CHECK_MEMBER(x86_thread_state32_t.eax,
255      AC_DEFINE(HAS_X86_THREAD_STATE32_EAX,1,dnl
256	[x86_thread_state32_t has field eax]),,
257      [#include <sys/cdefs.h>
258      #include <mach/thread_status.h>])
259    AC_CHECK_MEMBER(x86_thread_state32_t.__eax,
260      AC_DEFINE(HAS_X86_THREAD_STATE32___EAX,1,dnl
261	[x86_thread_state32_t has field __eax]),,
262      [#include <sys/cdefs.h>
263      #include <mach/thread_status.h>])
264    ;;
265  x86_64-*-darwin*)
266    AC_CHECK_MEMBER(x86_thread_state64_t.rax,
267      AC_DEFINE(HAS_X86_THREAD_STATE64_RAX,1,dnl
268	[x86_thread_state64_t has field rax]),,
269      [#include <sys/cdefs.h>
270      #include <mach/thread_status.h>])
271    AC_CHECK_MEMBER(x86_thread_state64_t.__rax,
272      AC_DEFINE(HAS_X86_THREAD_STATE64___RAX,1,dnl
273	[x86_thread_state64_t has field __rax]),,
274      [#include <sys/cdefs.h>
275      #include <mach/thread_status.h>])
276     ;;
277  *) ;;
278esac
279
280AC_MSG_CHECKING(for xlc)
281AC_TRY_COMPILE([],[
282 #ifndef __xlC__
283 # error
284 #endif
285], [compiler_xlc=yes], [compiler_xlc=no])
286AC_MSG_RESULT($compiler_xlc)
287AM_CONDITIONAL(COMPILER_XLC,test $compiler_xlc = yes)
288if test $compiler_xlc = yes -a "$powerpc_darwin" = true; then
289  # the darwin stack-frame-walking code is completely broken on xlc
290  AC_DEFINE(DARWIN_DONT_PARSE_STACK)
291fi
292
293# We never want libdl on darwin. It is a fake libdl that just ends up making
294# dyld calls anyway
295case "$host" in
296  *-*-darwin*) ;;
297  *)
298    AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl")
299    ;;
300esac
301
302# extra LD Flags which are required for targets
303case "${host}" in
304  *-*-darwin*)
305    extra_ldflags_libgc=-Wl,-single_module
306    ;;
307esac
308AC_SUBST(extra_ldflags_libgc)
309
310AC_SUBST(EXTRA_TEST_LIBS)
311
312target_all=libgc.la
313AC_SUBST(target_all)
314
315dnl If the target is an eCos system, use the appropriate eCos
316dnl I/O routines.
317dnl FIXME: this should not be a local option but a global target
318dnl system; at present there is no eCos target.
319TARGET_ECOS="no"
320AC_ARG_WITH(ecos,
321[  --with-ecos             enable runtime eCos target support],
322TARGET_ECOS="$with_ecos"
323)
324
325addobjs=
326addlibs=
327CXXINCLUDES=
328case "$TARGET_ECOS" in
329   no)
330      ;;
331   *)
332      AC_DEFINE(ECOS)
333      CXXINCLUDES="-I${TARGET_ECOS}/include"
334      addobjs="$addobjs ecos.lo"
335      ;;
336esac
337
338AM_CONDITIONAL(CPLUSPLUS, test "${enable_cplusplus}" = yes)
339
340AC_SUBST(CXX)
341
342AC_SUBST(INCLUDES)
343AC_SUBST(CXXINCLUDES)
344
345# Configuration of shared libraries
346#
347AC_MSG_CHECKING(whether to build shared libraries)
348AC_ENABLE_SHARED
349
350case "$host" in
351 alpha-*-openbsd*)
352     enable_shared=no
353     AC_MSG_RESULT(no)
354     ;;
355 *)
356     AC_MSG_RESULT(yes)
357     ;;
358esac
359
360# Configuration of machine-dependent code
361#
362AC_MSG_CHECKING(which machine-dependent code should be used)
363machdep=
364case "$host" in
365 alpha-*-openbsd*)
366    machdep="mach_dep.lo"
367    if test x"${ac_cv_lib_dl_dlopen}" != xyes ; then
368       AC_MSG_WARN(OpenBSD/Alpha without dlopen(). Shared library support is disabled)
369    fi
370    ;;
371 alpha*-*-linux*)
372    machdep="mach_dep.lo"
373    ;;
374 i?86-*-solaris2.[[89]] | i?86-*-solaris2.1?)
375    AC_DEFINE(SOLARIS25_PROC_VDB_BUG_FIXED)
376    ;;
377 mipstx39-*-elf*)
378    machdep="mach_dep.lo"
379    AC_DEFINE(STACKBASE, __stackbase)
380    AC_DEFINE(DATASTART_IS_ETEXT)
381    ;;
382 mips-dec-ultrix*)
383    machdep="mach-dep.lo"
384    ;;
385 mips-nec-sysv*|mips-unknown-sysv*)
386    ;;
387 mips*-*-linux*)
388    ;;
389 mips-*-*)
390    machdep="mach_dep.lo"
391    dnl AC_DEFINE(NO_EXECUTE_PERMISSION)
392    dnl This is now redundant, but it is also important for incremental GC
393    dnl performance under Irix.
394    ;;
395 sparc-*-netbsd*)
396    machdep="mach_dep.lo sparc_netbsd_mach_dep.lo"
397    ;;
398 sparc-sun-solaris2.3)
399    machdep="mach_dep.lo sparc_mach_dep.lo"
400    AC_DEFINE(SUNOS53_SHARED_LIB)
401    ;;
402 sparc*-sun-solaris2.*)
403    machdep="mach_dep.lo sparc_mach_dep.lo"
404    ;;
405 ia64-*-*)
406    machdep="mach_dep.lo ia64_save_regs_in_stack.lo"
407    ;;
408esac
409if test x"$machdep" = x; then
410AC_MSG_RESULT($machdep)
411   machdep="mach_dep.lo"
412fi
413addobjs="$addobjs $machdep"
414AC_SUBST(addobjs)
415AC_SUBST(addlibs)
416
417AC_PROG_LIBTOOL
418
419#
420# Check for AViiON Machines running DGUX
421#
422ac_is_dgux=no
423AC_CHECK_HEADER(sys/dg_sys_info.h,
424[ac_is_dgux=yes;])
425
426    ## :GOTCHA: we do not check anything but sys/dg_sys_info.h
427if test $ac_is_dgux = yes; then
428    if test "$enable_full_debug" = "yes"; then
429      CFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
430      CXXFLAGS="-g -mstandard -DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
431    else
432      CFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
433      CXXFLAGS="-DDGUX -D_DGUX_SOURCE -Di386 -mno-legend -O2"
434    fi
435    AC_SUBST(CFLAGS)
436    AC_SUBST(CXXFLAGS)
437fi
438
439dnl We use these options to decide which functions to include.
440AC_ARG_WITH(target-subdir,
441[  --with-target-subdir=SUBDIR
442                          configuring with a cross compiler])
443AC_ARG_WITH(cross-host,
444[  --with-cross-host=HOST  configuring with a cross compiler])
445
446# automake wants to see AC_EXEEXT.  But we don't need it.  And having
447# it is actually a problem, because the compiler we're passed can't
448# necessarily do a full link.  So we fool automake here.
449if false; then
450  # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands
451  # to nothing, so nothing would remain between `then' and `fi' if it
452  # were not for the `:' below.
453  :
454  AC_EXEEXT
455fi
456
457dnl As of 4.13a2, the collector will not properly work on Solaris when
458dnl built with gcc and -O.  So we remove -O in the appropriate case.
459dnl Not needed anymore on Solaris.
460AC_MSG_CHECKING(whether Solaris gcc optimization fix is necessary)
461case "$host" in
462 *aix*)
463    if test "$GCC" = yes; then
464       AC_MSG_RESULT(yes)
465       new_CFLAGS=
466       for i in $CFLAGS; do
467	  case "$i" in
468	   -O*)
469	      ;;
470	   *)
471	      new_CFLAGS="$new_CFLAGS $i"
472	      ;;
473	  esac
474       done
475       CFLAGS="$new_CFLAGS"
476    else
477       AC_MSG_RESULT(no)
478    fi
479    ;;
480 *) AC_MSG_RESULT(no) ;;
481esac
482
483dnl Include defines that have become de facto standard.
484dnl ALL_INTERIOR_POINTERS can be overridden in startup code.
485AC_DEFINE(NO_EXECUTE_PERMISSION)
486AC_DEFINE(ALL_INTERIOR_POINTERS)
487
488
489dnl Interface Selection
490dnl -------------------
491dnl
492dnl By default, make the library as general as possible.
493dnl enable_gcj_support=no
494AC_ARG_ENABLE(gcj-support,
495    [AC_HELP_STRING([--disable-gcj-support],
496	[Disable support for gcj.])])
497AM_CONDITIONAL(ENABLE_GCJ_SUPPORT,
498    [test x"$enable_gcj_support" != xno])
499if test x"$enable_gcj_support" != xno; then
500    AC_DEFINE(GC_GCJ_SUPPORT, 1, [Define to include support for gcj])
501fi
502
503AC_ARG_ENABLE(java-finalization,
504    [AC_HELP_STRING([--disable-java-finalization],
505	[Disable support for java finalization.])])
506if test x"$enable_java_finalization" != xno; then
507    AC_DEFINE(JAVA_FINALIZATION)
508fi
509
510AC_ARG_ENABLE(atomic-uncollectable,
511    [AC_HELP_STRING([--disable-atomic-uncollectible],
512	[Disable support for atomic uncollectible allocation.])])
513if test x"$enable_atomic_uncollectible" != x"no"; then
514    AC_DEFINE(ATOMIC_UNCOLLECTABLE, 1,
515	[Define to enable atomic uncollectible allocation.])
516fi
517
518AC_ARG_ENABLE(redirect-malloc,
519    [AC_HELP_STRING([--enable-redirect-malloc],
520	[Redirect malloc and friends to GC routines])])
521
522if test "${enable_redirect_malloc}" = yes; then
523    if test "${enable_full_debug}" = yes; then
524	AC_DEFINE(REDIRECT_MALLOC, GC_debug_malloc_replacement)
525	AC_DEFINE(REDIRECT_REALLOC, GC_debug_realloc_replacement)
526	AC_DEFINE(REDIRECT_FREE, GC_debug_free)
527    else
528	AC_DEFINE(REDIRECT_MALLOC, GC_malloc)
529    fi
530fi
531
532AC_ARG_ENABLE(large-config,
533    [AC_HELP_STRING([--enable-large-config],
534	[Optimize for large (> 100 MB) heap or root set])])
535
536if test "${enable_large_config}" = yes; then
537    AC_DEFINE(LARGE_CONFIG, 1, [Define to optimize for large heaps or root sets])
538fi
539
540dnl This is something of a hack.  When cross-compiling we turn off
541dnl some functionality.  We also enable the "small" configuration.
542dnl These is only correct when targetting an embedded system.  FIXME.
543if test -n "${with_cross_host}"; then
544   AC_DEFINE(NO_CLOCK)
545   AC_DEFINE(SMALL_CONFIG)
546   AC_DEFINE(NO_DEBUGGING)
547fi
548
549
550dnl Debugging
551dnl ---------
552
553UNWINDLIBS=
554AC_ARG_ENABLE(gc-debug,
555[AC_HELP_STRING([--enable-gc-debug],
556    [include full support for pointer backtracing etc.])],
557[ if test "$enable_gc_debug" = "yes"; then
558    AC_MSG_WARN("Should define GC_DEBUG and use debug alloc. in clients.")
559    AC_DEFINE(KEEP_BACK_PTRS)
560    AC_DEFINE(DBG_HDRS_ALL)
561    case $host in
562      ia64-*-linux* )
563	AC_DEFINE(MAKE_BACK_GRAPH)
564	AC_DEFINE(SAVE_CALL_COUNT, 8)
565        AC_CHECK_LIB(unwind, backtrace, [
566	  AC_DEFINE(GC_HAVE_BUILTIN_BACKTRACE)
567	  UNWINDLIBS=-lunwind
568	  AC_MSG_WARN("Client code may need to link against libunwind.")
569	])
570      ;;
571      x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* )
572	AC_DEFINE(MAKE_BACK_GRAPH)
573	AC_MSG_WARN("Client must not use -fomit-frame-pointer.")
574	AC_DEFINE(SAVE_CALL_COUNT, 8)
575      ;;
576      i[3456]86-*-dgux*)
577	AC_DEFINE(MAKE_BACK_GRAPH)
578      ;;
579    esac ]
580  fi)
581
582AC_SUBST(UNWINDLIBS)
583
584AC_ARG_ENABLE(gc-assertions,
585    [AC_HELP_STRING([--enable-gc-assertions],
586	[collector-internal assertion checking])])
587if test "${enable_gc_assertions}" = yes; then
588    AC_DEFINE(GC_ASSERTIONS)
589fi
590
591AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
592
593
594dnl Atomic Ops
595dnl ----------
596
597atomic_ops_libs=-latomic_ops
598AC_CHECK_HEADER(atomic_ops.h,
599  [ AC_MSG_NOTICE([Using pre-installed libatomic_ops]) ],
600  [ ao_dir=
601    for candidate in ${srcdir}/libatomic_ops*; do
602	case $candidate in
603	    *.tar.gz)
604		;;
605	    *install)
606	    	dnl generated by alternate Makefile.
607		;;
608	    *)
609		if test -e "$candidate"; then
610		    ao_dir="$candidate"
611		fi
612		;;
613	esac
614    done
615    if test -z "$ao_dir"; then
616	AC_MSG_ERROR([Missig libatomic_ops.])
617    fi
618    ao_version="${ao_dir#*libatomic_ops-}"
619    AC_MSG_NOTICE([Using internal version of libatomic_ops])
620
621    dnl Automake does not accept shell variables in AC_CONFIG_SUBDIRS
622    test -e ${srcdir}/libatomic_ops \
623	|| ln -s ${ao_dir} ${srcdir}/libatomic_ops
624    AC_CONFIG_SUBDIRS(libatomic_ops)
625
626    dnl Also copy the source files to be linked in.
627    test -e ${srcdir}/atomic_ops.c \
628    	|| ln -s ${srcdir}/libatomic_ops/src/atomic_ops.c \
629		 ${srcdir}/atomic_ops.c
630
631    test -e ${srcdir}/atomic_ops_sysdeps.S \
632    	|| ln -s ${srcdir}/libatomic_ops/src/atomic_ops_sysdeps.S \
633		 ${srcdir}/atomic_ops_sysdeps.S
634
635    dnl This gets the source include files, which is often close enough.
636    dnl It also makes atomic_ops_sysdeps.S assemble.
637    GC_CFLAGS="${GC_CFLAGS} -I \$(top_srcdir)/libatomic_ops/src"
638    maybe_libatomic_ops="libatomic_ops"
639  ])
640
641AM_CONDITIONAL(USE_INTERNAL_LIBATOMIC_OPS,
642		test -n "$maybe_libatomic_ops" -a "$THREADS" != "none")
643AM_CONDITIONAL(NEED_ATOMIC_OPS_ASM, test -n "$maybe_libatomic_ops" -a x$need_atomic_ops_asm = xtrue)
644AC_SUBST(atomic_ops_libs)
645
646dnl Produce the Files
647dnl -----------------
648
649AC_CONFIG_FILES([Makefile bdw-gc.pc])
650
651AC_CONFIG_COMMANDS([default],,
652  [ srcdir=${srcdir}
653    host=${host}
654    CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
655    CC="${CC}"
656    DEFS="$DEFS" ])
657
658AC_OUTPUT
659