1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
|
# Process this file with autoconf to produce a configure script.
AC_INIT([libatomic_ops],[7.6.2],https://github.com/ivmai/libatomic_ops/issues)
AC_PREREQ(2.61)
AC_CANONICAL_TARGET([])
AC_CONFIG_SRCDIR(src/atomic_ops.c)
AM_INIT_AUTOMAKE([foreign dist-bzip2 nostdinc])
AM_MAINTAINER_MODE
AC_CONFIG_HEADERS([src/config.h])
# Checks for programs.
AM_PROG_CC_C_O
AM_PROG_AS
AC_PROG_RANLIB
# Checks for functions.
AC_FUNC_MMAP
# Determine PIC flag.
need_asm=false
PICFLAG=
AC_MSG_CHECKING(for PIC compiler flag)
if test "$GCC" = yes; then
old_CC="$CC"
if test -n "$CROSS_CC"; then
CC="$CROSS_CC"
fi
case "$host" in
*-*-cygwin* | *-*-mingw*)
# Cygwin and Mingw[-w32/64] do not need -fPIC.
AC_MSG_RESULT([not needed])
;;
*)
AC_MSG_RESULT(-fPIC)
PICFLAG=-fPIC
AC_MSG_CHECKING(whether -fPIC compiler option causes __PIC__ definition)
# Workaround: at least GCC 3.4.6 (Solaris) does not define this macro.
old_CFLAGS="$CFLAGS"
CFLAGS="$PICFLAG $CFLAGS"
AC_TRY_COMPILE([],[
#ifndef __PIC__
# error
#endif
], [ac_cv_pic_macro=yes], [ac_cv_pic_macro=no])
CFLAGS="$old_CFLAGS"
AC_MSG_RESULT($ac_cv_pic_macro)
AS_IF([test "$ac_cv_pic_macro" = yes], [],
[PICFLAG="-D__PIC__=1 $PICFLAG"])
;;
esac
# Output all warnings.
AC_MSG_CHECKING([whether compiler supports -Wextra])
old_CFLAGS="$CFLAGS"
CFLAGS="-Wextra $CFLAGS"
AC_TRY_COMPILE([],[], [ac_cv_cc_wextra=yes], [ac_cv_cc_wextra=no])
CFLAGS="$old_CFLAGS"
AC_MSG_RESULT($ac_cv_cc_wextra)
AS_IF([test "$ac_cv_cc_wextra" = yes], [WEXTRA="-Wextra"], [WEXTRA="-W"])
AC_MSG_CHECKING([whether compiler supports -Wpedantic])
CFLAGS="-Wpedantic -Wno-long-long $CFLAGS"
AC_TRY_COMPILE([],[
extern int quiet;
], [ac_cv_cc_pedantic=yes], [ac_cv_cc_pedantic=no])
CFLAGS="$old_CFLAGS"
AC_MSG_RESULT($ac_cv_cc_pedantic)
WPEDANTIC=
AS_IF([test "$ac_cv_cc_pedantic" = yes],
[WPEDANTIC="-Wpedantic -Wno-long-long"])
CFLAGS="-Wall $WEXTRA $WPEDANTIC $CFLAGS"
AC_ARG_ENABLE(werror, [AC_HELP_STRING([--enable-werror],
[Pass -Werror to the C compiler])])
if test "$enable_werror" = yes; then
CFLAGS="-Werror $CFLAGS"
fi
CC="$old_CC"
else
case "$host" in
*-*-hpux*)
AC_MSG_RESULT([+Z])
PICFLAG="+Z"
CFLAGS="+O2 -mt $CFLAGS"
;;
*-*-solaris*)
AC_MSG_RESULT(-Kpic)
PICFLAG=-Kpic
CFLAGS="-O $CFLAGS"
need_asm=true
;;
*-*-linux*)
AC_MSG_RESULT(-fPIC)
PICFLAG=-fPIC
# Any Linux compiler had better be gcc compatible.
;;
*)
AC_MSG_RESULT([none])
;;
esac
fi
AC_ARG_ENABLE(assertions,
[AC_HELP_STRING([--enable-assertions], [Assertion checking])])
if test "$enable_assertions" != yes; then
AC_DEFINE([NDEBUG], 1, [Define to disable assertion checking.])
fi
AC_ARG_ENABLE(atomic-intrinsics,
[AC_HELP_STRING([--disable-atomic-intrinsics],
[Do not use C11 atomic intrinsics])])
if test "$enable_atomic_intrinsics" = no; then
AC_DEFINE([AO_DISABLE_GCC_ATOMICS], 1,
[Define to avoid C11 atomic intrinsics even if available.])
fi
AC_ARG_ENABLE(gcov, AC_HELP_STRING([--enable-gcov],
[Turn on code coverage analysis]))
if test "$enable_gcov" = "yes"; then
CFLAGS="$CFLAGS --coverage"
# Turn off code optimization to get accurate line numbers.
CFLAGS=`echo "$CFLAGS" | sed -e 's/-O\(1\|2\|3\|4\|s\|fast\)\?//g'`
fi
AC_ARG_ENABLE(docs,
[AC_HELP_STRING([--disable-docs],
[Do not build and install documentation])])
AM_CONDITIONAL(ENABLE_DOCS, test x$enable_docs != xno)
AC_SUBST(PICFLAG)
AC_SUBST(DEFS)
# Extra user-defined C flags.
AC_SUBST([CFLAGS_EXTRA])
AH_TEMPLATE([_PTHREADS], [Indicates the use of pthreads (NetBSD).])
AH_TEMPLATE([AO_USE_NANOSLEEP],
[Use nanosleep() instead of select() (only if atomic operations \
are emulated)])
AH_TEMPLATE([AO_USE_NO_SIGNALS],
[Do not block signals in compare_and_swap (only if atomic operations \
are emulated)])
AH_TEMPLATE([AO_USE_WIN32_PTHREADS],
[Use Win32 Sleep() instead of select() (only if atomic operations \
are emulated)])
AH_TEMPLATE([AO_TRACE_MALLOC], [Trace AO_malloc/free calls (for debug only)])
# These macros are tested in public headers
AH_TEMPLATE([AO_GENERALIZE_ASM_BOOL_CAS],
[Force compare_and_swap definition via fetch_compare_and_swap])
AH_TEMPLATE([AO_PREFER_GENERALIZED],
[Prefer generalized definitions to direct assembly-based ones])
AH_TEMPLATE([AO_USE_PTHREAD_DEFS],
[Emulate atomic operations via slow and async-signal-unsafe \
pthread locking])
AH_TEMPLATE([AO_ASM_X64_AVAILABLE],
[Inline assembly available (only VC/x86_64)])
AH_TEMPLATE([AO_ASSUME_VISTA],
[Assume Windows Server 2003, Vista or later target (only VC/x86)])
AH_TEMPLATE([AO_CMPXCHG16B_AVAILABLE],
[Assume target is not old AMD Opteron chip (only x86_64)])
AH_TEMPLATE([AO_FORCE_USE_SWP],
[Force test_and_set to use SWP instruction instead of LDREX/STREX \
(only arm v6+)])
AH_TEMPLATE([AO_NO_SPARC_V9], [Assume target is not sparc v9+ (only sparc)])
AH_TEMPLATE([AO_OLD_STYLE_INTERLOCKED_COMPARE_EXCHANGE],
[Assume ancient MS VS Win32 headers (only VC/arm v6+, VC/x86)])
AH_TEMPLATE([AO_UNIPROCESSOR], [Assume single-core target (only arm v6+)])
AH_TEMPLATE([AO_USE_INTERLOCKED_INTRINSICS],
[Assume Win32 _Interlocked primitives available as intrinsics \
(only VC/arm)])
AH_TEMPLATE([AO_USE_PENTIUM4_INSTRS],
[Use Pentium 4 'mfence' instruction (only x86)])
AH_TEMPLATE([AO_USE_SYNC_CAS_BUILTIN],
[Prefer GCC built-in CAS intrinsics in favor of inline assembly \
(only gcc/x86, gcc/x86_64)])
AH_TEMPLATE([AO_WEAK_DOUBLE_CAS_EMULATION],
[Emulate double-width CAS via pthread locking in case of no hardware \
support (only gcc/x86_64, the emulation is unsafe)])
AH_TEMPLATE([AO_PREFER_BUILTIN_ATOMICS],
[Prefer C11 atomic intrinsics over assembly-based implementation \
even in case of inefficient implementation (do not use assembly for \
any atomic_ops primitive if C11/GCC atomic intrinsics available)])
AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads.])
# Libraries needed to support threads (if any).
have_pthreads=false
AC_CHECK_LIB(pthread, pthread_self, have_pthreads=true)
if test x$have_pthreads = xtrue; then
THREADDLLIBS=-lpthread
case "$host" in
*-*-netbsd*)
# Indicates the use of pthreads.
AC_DEFINE(_PTHREADS)
;;
*-*-openbsd* | *-*-kfreebsd*-gnu | *-*-dgux*)
THREADDLLIBS=-pthread
;;
*-*-cygwin* | *-*-darwin*)
# Cygwin does not have a real libpthread, so Libtool cannot link
# against it.
THREADDLLIBS=
;;
*-*-mingw*)
# Use Win32 threads for tests anyway.
THREADDLLIBS=
# Skip test_atomic_pthreads.
have_pthreads=false
;;
esac
else
AC_DEFINE([AO_NO_PTHREADS], 1, [No pthreads library available])
# Assume VxWorks or Win32.
THREADDLLIBS=
fi
AC_SUBST(THREADDLLIBS)
AM_CONDITIONAL(HAVE_PTHREAD_H, test x$have_pthreads = xtrue)
AM_CONDITIONAL(NEED_ASM, test x$need_asm = xtrue)
AC_CONFIG_FILES([ src/Makefile ])
AC_CONFIG_COMMANDS([default],[[]],[[
PICFLAG="${PICFLAG}"
CC="${CC}"
DEFS="${DEFS}"
]])
AC_OUTPUT
|