1 # Process this file with autoconf to produce a configure script.
2 AC_INIT([libatomic_ops],[7.5.0],bdwgc@lists.opendylan.org)
5 AC_CANONICAL_TARGET([])
6 AC_CONFIG_SRCDIR(src/atomic_ops.c)
7 AC_CONFIG_MACRO_DIR([m4])
8 AM_INIT_AUTOMAKE([foreign dist-bzip2 nostdinc])
11 AC_CONFIG_HEADERS([src/config.h])
13 # Checks for programs.
16 LT_INIT([disable-shared])
18 # Checks for functions.
24 AC_MSG_CHECKING(for PIC compiler flag)
25 if test "$GCC" = yes; then
27 if test -n "$CROSS_CC"; then
32 *-*-cygwin* | *-*-mingw*)
33 # Cygwin and Mingw[-w32/64] do not need -fPIC.
34 AC_MSG_RESULT([not needed])
39 AC_MSG_CHECKING(whether -fPIC compiler option causes __PIC__ definition)
40 # Workaround: at least GCC 3.4.6 (Solaris) does not define this macro.
42 CFLAGS="$PICFLAG $CFLAGS"
47 ], [ac_cv_pic_macro=yes], [ac_cv_pic_macro=no])
49 AC_MSG_RESULT($ac_cv_pic_macro)
50 AS_IF([test "$ac_cv_pic_macro" = yes], [],
51 [PICFLAG="-D__PIC__=1 $PICFLAG"])
55 # Output all warnings.
56 AC_MSG_CHECKING([whether compiler supports -Wextra])
58 CFLAGS="-Wextra $CFLAGS"
59 AC_TRY_COMPILE([],[], [ac_cv_cc_wextra=yes], [ac_cv_cc_wextra=no])
61 AC_MSG_RESULT($ac_cv_cc_wextra)
62 AS_IF([test "$ac_cv_cc_wextra" = yes], [WEXTRA="-Wextra"], [WEXTRA="-W"])
63 AC_MSG_CHECKING([whether compiler supports -Wpedantic])
64 CFLAGS="-Wpedantic -Wno-long-long $CFLAGS"
67 ], [ac_cv_cc_pedantic=yes], [ac_cv_cc_pedantic=no])
69 AC_MSG_RESULT($ac_cv_cc_pedantic)
71 AS_IF([test "$ac_cv_cc_pedantic" = yes],
72 [WPEDANTIC="-Wpedantic -Wno-long-long"])
73 CFLAGS="-Wall $WEXTRA $WPEDANTIC $CFLAGS"
75 AC_ARG_ENABLE(werror, [AC_HELP_STRING([--enable-werror],
76 [Pass -Werror to the C compiler])])
77 if test "$enable_werror" = yes; then
78 CFLAGS="-Werror $CFLAGS"
87 CFLAGS="+O2 -mt $CFLAGS"
98 # Any Linux compiler had better be gcc compatible.
101 AC_MSG_RESULT([none])
106 AC_ARG_ENABLE(assertions,
107 [AC_HELP_STRING([--enable-assertions], [Assertion checking])])
108 if test "$enable_assertions" != yes; then
109 AC_DEFINE([NDEBUG], 1, [Define to disable assertion checking.])
112 AC_ARG_ENABLE(atomic-intrinsics,
113 [AC_HELP_STRING([--disable-atomic-intrinsics],
114 [Do not use C11 atomic intrinsics])])
115 if test "$enable_atomic_intrinsics" = no; then
116 AC_DEFINE([AO_DISABLE_GCC_ATOMICS], 1,
117 [Define to avoid C11 atomic intrinsics even if available.])
120 AC_ARG_ENABLE(gcov, AC_HELP_STRING([--enable-gcov],
121 [Turn on code coverage analysis]))
122 if test "$enable_gcov" = "yes"; then
123 CFLAGS="$CFLAGS --coverage"
124 # Turn off code optimization to get accurate line numbers.
125 CFLAGS=`echo "$CFLAGS" | sed -e 's/-O\(1\|2\|3\|4\|s\|fast\)\?//g'`
131 # Extra user-defined C flags.
132 AC_SUBST([CFLAGS_EXTRA])
134 AH_TEMPLATE([_PTHREADS], [Indicates the use of pthreads (NetBSD).])
136 AH_TEMPLATE([AO_USE_NANOSLEEP],
137 [Use nanosleep() instead of select() (only if atomic operations \
139 AH_TEMPLATE([AO_USE_NO_SIGNALS],
140 [Do not block signals in compare_and_swap (only if atomic operations \
142 AH_TEMPLATE([AO_USE_WIN32_PTHREADS],
143 [Use Win32 Sleep() instead of select() (only if atomic operations \
145 AH_TEMPLATE([AO_TRACE_MALLOC], [Trace AO_malloc/free calls (for debug only)])
147 # These macros are tested in public headers
148 AH_TEMPLATE([AO_GENERALIZE_ASM_BOOL_CAS],
149 [Force compare_and_swap definition via fetch_compare_and_swap])
150 AH_TEMPLATE([AO_PREFER_GENERALIZED],
151 [Prefer generalized definitions to direct assembly-based ones])
152 AH_TEMPLATE([AO_USE_PTHREAD_DEFS],
153 [Emulate atomic operations via slow and async-signal-unsafe \
155 AH_TEMPLATE([AO_ASM_X64_AVAILABLE],
156 [Inline assembly available (only VC/x86_64)])
157 AH_TEMPLATE([AO_ASSUME_VISTA],
158 [Assume Windows Server 2003, Vista or later target (only VC/x86)])
159 AH_TEMPLATE([AO_CMPXCHG16B_AVAILABLE],
160 [Assume target is not old AMD Opteron chip (only x86_64)])
161 AH_TEMPLATE([AO_FORCE_USE_SWP],
162 [Force test_and_set to use SWP instruction instead of LDREX/STREX \
164 AH_TEMPLATE([AO_NO_SPARC_V9], [Assume target is not sparc v9+ (only sparc)])
165 AH_TEMPLATE([AO_OLD_STYLE_INTERLOCKED_COMPARE_EXCHANGE],
166 [Assume ancient MS VS Win32 headers (only VC/arm v6+, VC/x86)])
167 AH_TEMPLATE([AO_UNIPROCESSOR], [Assume single-core target (only arm v6+)])
168 AH_TEMPLATE([AO_USE_INTERLOCKED_INTRINSICS],
169 [Assume Win32 _Interlocked primitives available as intrinsics \
171 AH_TEMPLATE([AO_USE_PENTIUM4_INSTRS],
172 [Use Pentium 4 'mfence' instruction (only x86)])
173 AH_TEMPLATE([AO_USE_SYNC_CAS_BUILTIN],
174 [Prefer GCC built-in CAS intrinsics in favor of inline assembly \
175 (only gcc/x86, gcc/x86_64)])
176 AH_TEMPLATE([AO_WEAK_DOUBLE_CAS_EMULATION],
177 [Emulate double-width CAS via pthread locking in case of no hardware \
178 support (only gcc/x86_64, the emulation is unsafe)])
179 AH_TEMPLATE([AO_PREFER_BUILTIN_ATOMICS],
180 [Prefer C11 atomic intrinsics over assembly-based implementation \
181 even in case of inefficient implementation (do not use assembly for \
182 any atomic_ops primitive if C11/GCC atomic intrinsics available)])
184 AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads.])
186 # Libraries needed to support threads (if any).
188 AC_CHECK_LIB(pthread, pthread_self, have_pthreads=true)
189 if test x$have_pthreads = xtrue; then
190 THREADDLLIBS=-lpthread
193 # Indicates the use of pthreads.
196 *-*-openbsd* | *-*-kfreebsd*-gnu | *-*-dgux*)
197 THREADDLLIBS=-pthread
199 *-*-cygwin* | *-*-darwin*)
200 # Cygwin does not have a real libpthread, so Libtool cannot link
205 # Use Win32 threads for tests anyway.
207 # Skip test_atomic_pthreads.
212 AC_DEFINE([AO_NO_PTHREADS], 1, [No pthreads library available])
213 # Assume VxWorks or Win32.
216 AC_SUBST(THREADDLLIBS)
218 AM_CONDITIONAL(HAVE_PTHREAD_H, test x$have_pthreads = xtrue)
219 AM_CONDITIONAL(NEED_ASM, test x$need_asm = xtrue)
226 pkgconfig/atomic_ops.pc
227 pkgconfig/atomic_ops-uninstalled.pc ])
229 AC_CONFIG_COMMANDS([default],[[]],[[