Blame configure.ac

Packit fe9d6e
# Process this file with autoconf to produce a configure script.
Packit fe9d6e
AC_INIT([libatomic_ops],[7.6.2],https://github.com/ivmai/libatomic_ops/issues)
Packit fe9d6e
Packit fe9d6e
AC_PREREQ(2.61)
Packit fe9d6e
AC_CANONICAL_TARGET([])
Packit fe9d6e
AC_CONFIG_SRCDIR(src/atomic_ops.c)
Packit fe9d6e
AC_CONFIG_MACRO_DIR([m4])
Packit fe9d6e
AM_INIT_AUTOMAKE([foreign nostdinc])
Packit fe9d6e
AM_MAINTAINER_MODE
Packit fe9d6e
Packit fe9d6e
AC_CONFIG_HEADERS([src/config.h])
Packit fe9d6e
Packit fe9d6e
# Checks for programs.
Packit fe9d6e
AM_PROG_CC_C_O
Packit fe9d6e
AM_PROG_AS
Packit fe9d6e
LT_INIT([disable-shared])
Packit fe9d6e
Packit fe9d6e
# Checks for functions.
Packit fe9d6e
AC_FUNC_MMAP
Packit fe9d6e
Packit fe9d6e
# Determine PIC flag.
Packit fe9d6e
need_asm=false
Packit fe9d6e
PICFLAG=
Packit fe9d6e
AC_MSG_CHECKING(for PIC compiler flag)
Packit fe9d6e
if test "$GCC" = yes; then
Packit fe9d6e
  old_CC="$CC"
Packit fe9d6e
  if test -n "$CROSS_CC"; then
Packit fe9d6e
    CC="$CROSS_CC"
Packit fe9d6e
  fi
Packit fe9d6e
Packit fe9d6e
  case "$host" in
Packit fe9d6e
    *-*-cygwin* | *-*-mingw*)
Packit fe9d6e
      # Cygwin and Mingw[-w32/64] do not need -fPIC.
Packit fe9d6e
      AC_MSG_RESULT([not needed])
Packit fe9d6e
      ;;
Packit fe9d6e
    *)
Packit fe9d6e
      AC_MSG_RESULT(-fPIC)
Packit fe9d6e
      PICFLAG=-fPIC
Packit fe9d6e
      AC_MSG_CHECKING(whether -fPIC compiler option causes __PIC__ definition)
Packit fe9d6e
      # Workaround: at least GCC 3.4.6 (Solaris) does not define this macro.
Packit fe9d6e
      old_CFLAGS="$CFLAGS"
Packit fe9d6e
      CFLAGS="$PICFLAG $CFLAGS"
Packit fe9d6e
      AC_TRY_COMPILE([],[
Packit fe9d6e
 #ifndef __PIC__
Packit fe9d6e
 # error
Packit fe9d6e
 #endif
Packit fe9d6e
      ], [ac_cv_pic_macro=yes], [ac_cv_pic_macro=no])
Packit fe9d6e
      CFLAGS="$old_CFLAGS"
Packit fe9d6e
      AC_MSG_RESULT($ac_cv_pic_macro)
Packit fe9d6e
      AS_IF([test "$ac_cv_pic_macro" = yes], [],
Packit fe9d6e
            [PICFLAG="-D__PIC__=1 $PICFLAG"])
Packit fe9d6e
      ;;
Packit fe9d6e
  esac
Packit fe9d6e
Packit fe9d6e
  # Output all warnings.
Packit fe9d6e
  AC_MSG_CHECKING([whether compiler supports -Wextra])
Packit fe9d6e
  old_CFLAGS="$CFLAGS"
Packit fe9d6e
  CFLAGS="-Wextra $CFLAGS"
Packit fe9d6e
  AC_TRY_COMPILE([],[], [ac_cv_cc_wextra=yes], [ac_cv_cc_wextra=no])
Packit fe9d6e
  CFLAGS="$old_CFLAGS"
Packit fe9d6e
  AC_MSG_RESULT($ac_cv_cc_wextra)
Packit fe9d6e
  AS_IF([test "$ac_cv_cc_wextra" = yes], [WEXTRA="-Wextra"], [WEXTRA="-W"])
Packit fe9d6e
  AC_MSG_CHECKING([whether compiler supports -Wpedantic])
Packit fe9d6e
  CFLAGS="-Wpedantic -Wno-long-long $CFLAGS"
Packit fe9d6e
  AC_TRY_COMPILE([],[
Packit fe9d6e
extern int quiet;
Packit fe9d6e
  ], [ac_cv_cc_pedantic=yes], [ac_cv_cc_pedantic=no])
Packit fe9d6e
  CFLAGS="$old_CFLAGS"
Packit fe9d6e
  AC_MSG_RESULT($ac_cv_cc_pedantic)
Packit fe9d6e
  WPEDANTIC=
Packit fe9d6e
  AS_IF([test "$ac_cv_cc_pedantic" = yes],
Packit fe9d6e
        [WPEDANTIC="-Wpedantic -Wno-long-long"])
Packit fe9d6e
  CFLAGS="-Wall $WEXTRA $WPEDANTIC $CFLAGS"
Packit fe9d6e
Packit fe9d6e
  AC_ARG_ENABLE(werror, [AC_HELP_STRING([--enable-werror],
Packit fe9d6e
                            [Pass -Werror to the C compiler])])
Packit fe9d6e
  if test "$enable_werror" = yes; then
Packit fe9d6e
    CFLAGS="-Werror $CFLAGS"
Packit fe9d6e
  fi
Packit fe9d6e
Packit fe9d6e
  CC="$old_CC"
Packit fe9d6e
else
Packit fe9d6e
  case "$host" in
Packit fe9d6e
    *-*-hpux*)
Packit fe9d6e
      AC_MSG_RESULT([+Z])
Packit fe9d6e
      PICFLAG="+Z"
Packit fe9d6e
      CFLAGS="+O2 -mt $CFLAGS"
Packit fe9d6e
      ;;
Packit fe9d6e
    *-*-solaris*)
Packit fe9d6e
      AC_MSG_RESULT(-Kpic)
Packit fe9d6e
      PICFLAG=-Kpic
Packit fe9d6e
      CFLAGS="-O $CFLAGS"
Packit fe9d6e
      need_asm=true
Packit fe9d6e
      ;;
Packit fe9d6e
    *-*-linux*)
Packit fe9d6e
      AC_MSG_RESULT(-fPIC)
Packit fe9d6e
      PICFLAG=-fPIC
Packit fe9d6e
      # Any Linux compiler had better be gcc compatible.
Packit fe9d6e
      ;;
Packit fe9d6e
    *)
Packit fe9d6e
      AC_MSG_RESULT([none])
Packit fe9d6e
      ;;
Packit fe9d6e
  esac
Packit fe9d6e
fi
Packit fe9d6e
Packit fe9d6e
AC_ARG_ENABLE(assertions,
Packit fe9d6e
        [AC_HELP_STRING([--enable-assertions], [Assertion checking])])
Packit fe9d6e
if test "$enable_assertions" != yes; then
Packit fe9d6e
  AC_DEFINE([NDEBUG], 1, [Define to disable assertion checking.])
Packit fe9d6e
fi
Packit fe9d6e
Packit fe9d6e
AC_ARG_ENABLE(atomic-intrinsics,
Packit fe9d6e
        [AC_HELP_STRING([--disable-atomic-intrinsics],
Packit fe9d6e
                        [Do not use C11 atomic intrinsics])])
Packit fe9d6e
if test "$enable_atomic_intrinsics" = no; then
Packit fe9d6e
  AC_DEFINE([AO_DISABLE_GCC_ATOMICS], 1,
Packit fe9d6e
            [Define to avoid C11 atomic intrinsics even if available.])
Packit fe9d6e
fi
Packit fe9d6e
Packit fe9d6e
AC_ARG_ENABLE(gcov, AC_HELP_STRING([--enable-gcov],
Packit fe9d6e
                                   [Turn on code coverage analysis]))
Packit fe9d6e
if test "$enable_gcov" = "yes"; then
Packit fe9d6e
  CFLAGS="$CFLAGS --coverage"
Packit fe9d6e
  # Turn off code optimization to get accurate line numbers.
Packit fe9d6e
  CFLAGS=`echo "$CFLAGS" | sed -e 's/-O\(1\|2\|3\|4\|s\|fast\)\?//g'`
Packit fe9d6e
fi
Packit fe9d6e
Packit fe9d6e
AC_ARG_ENABLE(docs,
Packit fe9d6e
        [AC_HELP_STRING([--disable-docs],
Packit fe9d6e
                        [Do not build and install documentation])])
Packit fe9d6e
AM_CONDITIONAL(ENABLE_DOCS, test x$enable_docs != xno)
Packit fe9d6e
Packit fe9d6e
AC_SUBST(PICFLAG)
Packit fe9d6e
AC_SUBST(DEFS)
Packit fe9d6e
Packit fe9d6e
# Extra user-defined C flags.
Packit fe9d6e
AC_SUBST([CFLAGS_EXTRA])
Packit fe9d6e
Packit fe9d6e
AH_TEMPLATE([_PTHREADS], [Indicates the use of pthreads (NetBSD).])
Packit fe9d6e
Packit fe9d6e
AH_TEMPLATE([AO_USE_NANOSLEEP],
Packit fe9d6e
        [Use nanosleep() instead of select() (only if atomic operations \
Packit fe9d6e
         are emulated)])
Packit fe9d6e
AH_TEMPLATE([AO_USE_NO_SIGNALS],
Packit fe9d6e
        [Do not block signals in compare_and_swap (only if atomic operations \
Packit fe9d6e
         are emulated)])
Packit fe9d6e
AH_TEMPLATE([AO_USE_WIN32_PTHREADS],
Packit fe9d6e
        [Use Win32 Sleep() instead of select() (only if atomic operations \
Packit fe9d6e
         are emulated)])
Packit fe9d6e
AH_TEMPLATE([AO_TRACE_MALLOC], [Trace AO_malloc/free calls (for debug only)])
Packit fe9d6e
Packit fe9d6e
# These macros are tested in public headers
Packit fe9d6e
AH_TEMPLATE([AO_GENERALIZE_ASM_BOOL_CAS],
Packit fe9d6e
        [Force compare_and_swap definition via fetch_compare_and_swap])
Packit fe9d6e
AH_TEMPLATE([AO_PREFER_GENERALIZED],
Packit fe9d6e
        [Prefer generalized definitions to direct assembly-based ones])
Packit fe9d6e
AH_TEMPLATE([AO_USE_PTHREAD_DEFS],
Packit fe9d6e
        [Emulate atomic operations via slow and async-signal-unsafe \
Packit fe9d6e
         pthread locking])
Packit fe9d6e
AH_TEMPLATE([AO_ASM_X64_AVAILABLE],
Packit fe9d6e
        [Inline assembly available (only VC/x86_64)])
Packit fe9d6e
AH_TEMPLATE([AO_ASSUME_VISTA],
Packit fe9d6e
        [Assume Windows Server 2003, Vista or later target (only VC/x86)])
Packit fe9d6e
AH_TEMPLATE([AO_CMPXCHG16B_AVAILABLE],
Packit fe9d6e
        [Assume target is not old AMD Opteron chip (only x86_64)])
Packit fe9d6e
AH_TEMPLATE([AO_FORCE_USE_SWP],
Packit fe9d6e
        [Force test_and_set to use SWP instruction instead of LDREX/STREX \
Packit fe9d6e
         (only arm v6+)])
Packit fe9d6e
AH_TEMPLATE([AO_NO_SPARC_V9], [Assume target is not sparc v9+ (only sparc)])
Packit fe9d6e
AH_TEMPLATE([AO_OLD_STYLE_INTERLOCKED_COMPARE_EXCHANGE],
Packit fe9d6e
        [Assume ancient MS VS Win32 headers (only VC/arm v6+, VC/x86)])
Packit fe9d6e
AH_TEMPLATE([AO_UNIPROCESSOR], [Assume single-core target (only arm v6+)])
Packit fe9d6e
AH_TEMPLATE([AO_USE_INTERLOCKED_INTRINSICS],
Packit fe9d6e
        [Assume Win32 _Interlocked primitives available as intrinsics \
Packit fe9d6e
         (only VC/arm)])
Packit fe9d6e
AH_TEMPLATE([AO_USE_PENTIUM4_INSTRS],
Packit fe9d6e
        [Use Pentium 4 'mfence' instruction (only x86)])
Packit fe9d6e
AH_TEMPLATE([AO_USE_SYNC_CAS_BUILTIN],
Packit fe9d6e
        [Prefer GCC built-in CAS intrinsics in favor of inline assembly \
Packit fe9d6e
         (only gcc/x86, gcc/x86_64)])
Packit fe9d6e
AH_TEMPLATE([AO_WEAK_DOUBLE_CAS_EMULATION],
Packit fe9d6e
        [Emulate double-width CAS via pthread locking in case of no hardware \
Packit fe9d6e
         support (only gcc/x86_64, the emulation is unsafe)])
Packit fe9d6e
AH_TEMPLATE([AO_PREFER_BUILTIN_ATOMICS],
Packit fe9d6e
        [Prefer C11 atomic intrinsics over assembly-based implementation \
Packit fe9d6e
        even in case of inefficient implementation (do not use assembly for \
Packit fe9d6e
        any atomic_ops primitive if C11/GCC atomic intrinsics available)])
Packit fe9d6e
Packit fe9d6e
AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads.])
Packit fe9d6e
Packit fe9d6e
# Libraries needed to support threads (if any).
Packit fe9d6e
have_pthreads=false
Packit fe9d6e
AC_CHECK_LIB(pthread, pthread_self, have_pthreads=true)
Packit fe9d6e
if test x$have_pthreads = xtrue; then
Packit fe9d6e
  THREADDLLIBS=-lpthread
Packit fe9d6e
  case "$host" in
Packit fe9d6e
    *-*-netbsd*)
Packit fe9d6e
      # Indicates the use of pthreads.
Packit fe9d6e
      AC_DEFINE(_PTHREADS)
Packit fe9d6e
      ;;
Packit fe9d6e
    *-*-openbsd* | *-*-kfreebsd*-gnu | *-*-dgux*)
Packit fe9d6e
      THREADDLLIBS=-pthread
Packit fe9d6e
      ;;
Packit fe9d6e
    *-*-cygwin* | *-*-darwin*)
Packit fe9d6e
      # Cygwin does not have a real libpthread, so Libtool cannot link
Packit fe9d6e
      # against it.
Packit fe9d6e
      THREADDLLIBS=
Packit fe9d6e
      ;;
Packit fe9d6e
    *-*-mingw*)
Packit fe9d6e
      # Use Win32 threads for tests anyway.
Packit fe9d6e
      THREADDLLIBS=
Packit fe9d6e
      # Skip test_atomic_pthreads.
Packit fe9d6e
      have_pthreads=false
Packit fe9d6e
      ;;
Packit fe9d6e
  esac
Packit fe9d6e
else
Packit fe9d6e
  AC_DEFINE([AO_NO_PTHREADS], 1, [No pthreads library available])
Packit fe9d6e
  # Assume VxWorks or Win32.
Packit fe9d6e
  THREADDLLIBS=
Packit fe9d6e
fi
Packit fe9d6e
AC_SUBST(THREADDLLIBS)
Packit fe9d6e
Packit fe9d6e
AM_CONDITIONAL(HAVE_PTHREAD_H, test x$have_pthreads = xtrue)
Packit fe9d6e
AM_CONDITIONAL(NEED_ASM, test x$need_asm = xtrue)
Packit fe9d6e
Packit fe9d6e
AC_CONFIG_FILES([
Packit fe9d6e
        Makefile
Packit fe9d6e
        doc/Makefile
Packit fe9d6e
        src/Makefile
Packit fe9d6e
        tests/Makefile
Packit fe9d6e
        pkgconfig/atomic_ops.pc
Packit fe9d6e
        pkgconfig/atomic_ops-uninstalled.pc ])
Packit fe9d6e
Packit fe9d6e
AC_CONFIG_COMMANDS([default],[[]],[[
Packit fe9d6e
PICFLAG="${PICFLAG}"
Packit fe9d6e
CC="${CC}"
Packit fe9d6e
DEFS="${DEFS}"
Packit fe9d6e
]])
Packit fe9d6e
AC_OUTPUT