Blame jemalloc/configure.ac

Packit 345191
dnl Process this file with autoconf to produce a configure script.
Packit 345191
AC_PREREQ(2.63)
Packit 345191
AC_INIT([Makefile.in])
Packit 345191
Packit 345191
AC_CONFIG_AUX_DIR([build-aux])
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Custom macro definitions.
Packit 345191
Packit 345191
dnl JE_CONCAT_VVV(r, a, b)
Packit 345191
dnl
Packit 345191
dnl Set $r to the concatenation of $a and $b, with a space separating them iff
Packit 345191
dnl both $a and $b are non-empty.
Packit 345191
AC_DEFUN([JE_CONCAT_VVV],
Packit 345191
if test "x[$]{$2}" = "x" -o "x[$]{$3}" = "x" ; then
Packit 345191
  $1="[$]{$2}[$]{$3}"
Packit 345191
else
Packit 345191
  $1="[$]{$2} [$]{$3}"
Packit 345191
fi
Packit 345191
)
Packit 345191
Packit 345191
dnl JE_APPEND_VS(a, b)
Packit 345191
dnl
Packit 345191
dnl Set $a to the concatenation of $a and b, with a space separating them iff
Packit 345191
dnl both $a and b are non-empty.
Packit 345191
AC_DEFUN([JE_APPEND_VS],
Packit 345191
  T_APPEND_V=$2
Packit 345191
  JE_CONCAT_VVV($1, $1, T_APPEND_V)
Packit 345191
)
Packit 345191
Packit 345191
CONFIGURE_CFLAGS=
Packit 345191
SPECIFIED_CFLAGS="${CFLAGS}"
Packit 345191
dnl JE_CFLAGS_ADD(cflag)
Packit 345191
dnl
Packit 345191
dnl CFLAGS is the concatenation of CONFIGURE_CFLAGS and SPECIFIED_CFLAGS
Packit 345191
dnl (ignoring EXTRA_CFLAGS, which does not impact configure tests.  This macro
Packit 345191
dnl appends to CONFIGURE_CFLAGS and regenerates CFLAGS.
Packit 345191
AC_DEFUN([JE_CFLAGS_ADD],
Packit 345191
[
Packit 345191
AC_MSG_CHECKING([whether compiler supports $1])
Packit 345191
T_CONFIGURE_CFLAGS="${CONFIGURE_CFLAGS}"
Packit 345191
JE_APPEND_VS(CONFIGURE_CFLAGS, $1)
Packit 345191
JE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS)
Packit 345191
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Packit 345191
[[
Packit 345191
]], [[
Packit 345191
    return 0;
Packit 345191
]])],
Packit 345191
              [je_cv_cflags_added=$1]
Packit 345191
              AC_MSG_RESULT([yes]),
Packit 345191
              [je_cv_cflags_added=]
Packit 345191
              AC_MSG_RESULT([no])
Packit 345191
              [CONFIGURE_CFLAGS="${T_CONFIGURE_CFLAGS}"]
Packit 345191
)
Packit 345191
JE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS)
Packit 345191
])
Packit 345191
Packit 345191
dnl JE_CFLAGS_SAVE()
Packit 345191
dnl JE_CFLAGS_RESTORE()
Packit 345191
dnl
Packit 345191
dnl Save/restore CFLAGS.  Nesting is not supported.
Packit 345191
AC_DEFUN([JE_CFLAGS_SAVE],
Packit 345191
SAVED_CONFIGURE_CFLAGS="${CONFIGURE_CFLAGS}"
Packit 345191
)
Packit 345191
AC_DEFUN([JE_CFLAGS_RESTORE],
Packit 345191
CONFIGURE_CFLAGS="${SAVED_CONFIGURE_CFLAGS}"
Packit 345191
JE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS)
Packit 345191
)
Packit 345191
Packit 345191
CONFIGURE_CXXFLAGS=
Packit 345191
SPECIFIED_CXXFLAGS="${CXXFLAGS}"
Packit 345191
dnl JE_CXXFLAGS_ADD(cxxflag)
Packit 345191
AC_DEFUN([JE_CXXFLAGS_ADD],
Packit 345191
[
Packit 345191
AC_MSG_CHECKING([whether compiler supports $1])
Packit 345191
T_CONFIGURE_CXXFLAGS="${CONFIGURE_CXXFLAGS}"
Packit 345191
JE_APPEND_VS(CONFIGURE_CXXFLAGS, $1)
Packit 345191
JE_CONCAT_VVV(CXXFLAGS, CONFIGURE_CXXFLAGS, SPECIFIED_CXXFLAGS)
Packit 345191
AC_LANG_PUSH([C++])
Packit 345191
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Packit 345191
[[
Packit 345191
]], [[
Packit 345191
    return 0;
Packit 345191
]])],
Packit 345191
              [je_cv_cxxflags_added=$1]
Packit 345191
              AC_MSG_RESULT([yes]),
Packit 345191
              [je_cv_cxxflags_added=]
Packit 345191
              AC_MSG_RESULT([no])
Packit 345191
              [CONFIGURE_CXXFLAGS="${T_CONFIGURE_CXXFLAGS}"]
Packit 345191
)
Packit 345191
AC_LANG_POP([C++])
Packit 345191
JE_CONCAT_VVV(CXXFLAGS, CONFIGURE_CXXFLAGS, SPECIFIED_CXXFLAGS)
Packit 345191
])
Packit 345191
Packit 345191
dnl JE_COMPILABLE(label, hcode, mcode, rvar)
Packit 345191
dnl
Packit 345191
dnl Use AC_LINK_IFELSE() rather than AC_COMPILE_IFELSE() so that linker errors
Packit 345191
dnl cause failure.
Packit 345191
AC_DEFUN([JE_COMPILABLE],
Packit 345191
[
Packit 345191
AC_CACHE_CHECK([whether $1 is compilable],
Packit 345191
               [$4],
Packit 345191
               [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2],
Packit 345191
                                                [$3])],
Packit 345191
                               [$4=yes],
Packit 345191
                               [$4=no])])
Packit 345191
])
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
Packit 345191
CONFIG=`echo ${ac_configure_args} | sed -e 's#'"'"'\([^ ]*\)'"'"'#\1#g'`
Packit 345191
AC_SUBST([CONFIG])
Packit 345191
Packit 345191
dnl Library revision.
Packit 345191
rev=2
Packit 345191
AC_SUBST([rev])
Packit 345191
Packit 345191
srcroot=$srcdir
Packit 345191
if test "x${srcroot}" = "x." ; then
Packit 345191
  srcroot=""
Packit 345191
else
Packit 345191
  srcroot="${srcroot}/"
Packit 345191
fi
Packit 345191
AC_SUBST([srcroot])
Packit 345191
abs_srcroot="`cd \"${srcdir}\"; pwd`/"
Packit 345191
AC_SUBST([abs_srcroot])
Packit 345191
Packit 345191
objroot=""
Packit 345191
AC_SUBST([objroot])
Packit 345191
abs_objroot="`pwd`/"
Packit 345191
AC_SUBST([abs_objroot])
Packit 345191
Packit 345191
dnl Munge install path variables.
Packit 345191
if test "x$prefix" = "xNONE" ; then
Packit 345191
  prefix="/usr/local"
Packit 345191
fi
Packit 345191
if test "x$exec_prefix" = "xNONE" ; then
Packit 345191
  exec_prefix=$prefix
Packit 345191
fi
Packit 345191
PREFIX=$prefix
Packit 345191
AC_SUBST([PREFIX])
Packit 345191
BINDIR=`eval echo $bindir`
Packit 345191
BINDIR=`eval echo $BINDIR`
Packit 345191
AC_SUBST([BINDIR])
Packit 345191
INCLUDEDIR=`eval echo $includedir`
Packit 345191
INCLUDEDIR=`eval echo $INCLUDEDIR`
Packit 345191
AC_SUBST([INCLUDEDIR])
Packit 345191
LIBDIR=`eval echo $libdir`
Packit 345191
LIBDIR=`eval echo $LIBDIR`
Packit 345191
AC_SUBST([LIBDIR])
Packit 345191
DATADIR=`eval echo $datadir`
Packit 345191
DATADIR=`eval echo $DATADIR`
Packit 345191
AC_SUBST([DATADIR])
Packit 345191
MANDIR=`eval echo $mandir`
Packit 345191
MANDIR=`eval echo $MANDIR`
Packit 345191
AC_SUBST([MANDIR])
Packit 345191
Packit 345191
dnl Support for building documentation.
Packit 345191
AC_PATH_PROG([XSLTPROC], [xsltproc], [false], [$PATH])
Packit 345191
if test -d "/usr/share/xml/docbook/stylesheet/docbook-xsl" ; then
Packit 345191
  DEFAULT_XSLROOT="/usr/share/xml/docbook/stylesheet/docbook-xsl"
Packit 345191
elif test -d "/usr/share/sgml/docbook/xsl-stylesheets" ; then
Packit 345191
  DEFAULT_XSLROOT="/usr/share/sgml/docbook/xsl-stylesheets"
Packit 345191
else
Packit 345191
  dnl Documentation building will fail if this default gets used.
Packit 345191
  DEFAULT_XSLROOT=""
Packit 345191
fi
Packit 345191
AC_ARG_WITH([xslroot],
Packit 345191
  [AS_HELP_STRING([--with-xslroot=<path>], [XSL stylesheet root path])], [
Packit 345191
if test "x$with_xslroot" = "xno" ; then
Packit 345191
  XSLROOT="${DEFAULT_XSLROOT}"
Packit 345191
else
Packit 345191
  XSLROOT="${with_xslroot}"
Packit 345191
fi
Packit 345191
],
Packit 345191
  XSLROOT="${DEFAULT_XSLROOT}"
Packit 345191
)
Packit 345191
if test "x$XSLTPROC" = "xfalse" ; then
Packit 345191
  XSLROOT=""
Packit 345191
fi
Packit 345191
AC_SUBST([XSLROOT])
Packit 345191
Packit 345191
dnl If CFLAGS isn't defined, set CFLAGS to something reasonable.  Otherwise,
Packit 345191
dnl just prevent autoconf from molesting CFLAGS.
Packit 345191
CFLAGS=$CFLAGS
Packit 345191
AC_PROG_CC
Packit 345191
Packit 345191
if test "x$GCC" != "xyes" ; then
Packit 345191
  AC_CACHE_CHECK([whether compiler is MSVC],
Packit 345191
                 [je_cv_msvc],
Packit 345191
                 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
Packit 345191
                                                     [
Packit 345191
#ifndef _MSC_VER
Packit 345191
  int fail[-1];
Packit 345191
#endif
Packit 345191
])],
Packit 345191
                               [je_cv_msvc=yes],
Packit 345191
                               [je_cv_msvc=no])])
Packit 345191
fi
Packit 345191
Packit 345191
dnl check if a cray prgenv wrapper compiler is being used
Packit 345191
je_cv_cray_prgenv_wrapper=""
Packit 345191
if test "x${PE_ENV}" != "x" ; then
Packit 345191
  case "${CC}" in
Packit 345191
    CC|cc)
Packit 345191
	je_cv_cray_prgenv_wrapper="yes"
Packit 345191
	;;
Packit 345191
    *)
Packit 345191
       ;;
Packit 345191
  esac
Packit 345191
fi
Packit 345191
Packit 345191
AC_CACHE_CHECK([whether compiler is cray],
Packit 345191
              [je_cv_cray],
Packit 345191
              [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
Packit 345191
                                                  [
Packit 345191
#ifndef _CRAYC
Packit 345191
  int fail[-1];
Packit 345191
#endif
Packit 345191
])],
Packit 345191
                            [je_cv_cray=yes],
Packit 345191
                            [je_cv_cray=no])])
Packit 345191
Packit 345191
if test "x${je_cv_cray}" = "xyes" ; then
Packit 345191
  AC_CACHE_CHECK([whether cray compiler version is 8.4],
Packit 345191
                [je_cv_cray_84],
Packit 345191
                [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
Packit 345191
                                                      [
Packit 345191
#if !(_RELEASE_MAJOR == 8 && _RELEASE_MINOR == 4)
Packit 345191
  int fail[-1];
Packit 345191
#endif
Packit 345191
])],
Packit 345191
                              [je_cv_cray_84=yes],
Packit 345191
                              [je_cv_cray_84=no])])
Packit 345191
fi
Packit 345191
Packit 345191
if test "x$GCC" = "xyes" ; then
Packit 345191
  JE_CFLAGS_ADD([-std=gnu11])
Packit 345191
  if test "x$je_cv_cflags_added" = "x-std=gnu11" ; then
Packit 345191
    AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT])
Packit 345191
  else
Packit 345191
    JE_CFLAGS_ADD([-std=gnu99])
Packit 345191
    if test "x$je_cv_cflags_added" = "x-std=gnu99" ; then
Packit 345191
      AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT])
Packit 345191
    fi
Packit 345191
  fi
Packit 345191
  JE_CFLAGS_ADD([-Wall])
Packit 345191
  JE_CFLAGS_ADD([-Wextra])
Packit 345191
  JE_CFLAGS_ADD([-Wshorten-64-to-32])
Packit 345191
  JE_CFLAGS_ADD([-Wsign-compare])
Packit 345191
  JE_CFLAGS_ADD([-Wundef])
Packit 345191
  JE_CFLAGS_ADD([-Wno-format-zero-length])
Packit 345191
  JE_CFLAGS_ADD([-pipe])
Packit 345191
  JE_CFLAGS_ADD([-g3])
Packit 345191
elif test "x$je_cv_msvc" = "xyes" ; then
Packit 345191
  CC="$CC -nologo"
Packit 345191
  JE_CFLAGS_ADD([-Zi])
Packit 345191
  JE_CFLAGS_ADD([-MT])
Packit 345191
  JE_CFLAGS_ADD([-W3])
Packit 345191
  JE_CFLAGS_ADD([-FS])
Packit 345191
  JE_APPEND_VS(CPPFLAGS, -I${srcdir}/include/msvc_compat)
Packit 345191
fi
Packit 345191
if test "x$je_cv_cray" = "xyes" ; then
Packit 345191
  dnl cray compiler 8.4 has an inlining bug
Packit 345191
  if test "x$je_cv_cray_84" = "xyes" ; then
Packit 345191
    JE_CFLAGS_ADD([-hipa2])
Packit 345191
    JE_CFLAGS_ADD([-hnognu])
Packit 345191
  fi
Packit 345191
  dnl ignore unreachable code warning
Packit 345191
  JE_CFLAGS_ADD([-hnomessage=128])
Packit 345191
  dnl ignore redefinition of "malloc", "free", etc warning
Packit 345191
  JE_CFLAGS_ADD([-hnomessage=1357])
Packit 345191
fi
Packit 345191
AC_SUBST([CONFIGURE_CFLAGS])
Packit 345191
AC_SUBST([SPECIFIED_CFLAGS])
Packit 345191
AC_SUBST([EXTRA_CFLAGS])
Packit 345191
AC_PROG_CPP
Packit 345191
Packit 345191
AC_ARG_ENABLE([cxx],
Packit 345191
  [AS_HELP_STRING([--disable-cxx], [Disable C++ integration])],
Packit 345191
if test "x$enable_cxx" = "xno" ; then
Packit 345191
  enable_cxx="0"
Packit 345191
else
Packit 345191
  enable_cxx="1"
Packit 345191
fi
Packit 345191
,
Packit 345191
enable_cxx="1"
Packit 345191
)
Packit 345191
if test "x$enable_cxx" = "x1" ; then
Packit 345191
  dnl Require at least c++14, which is the first version to support sized
Packit 345191
  dnl deallocation.  C++ support is not compiled otherwise.
Packit 345191
  m4_include([m4/ax_cxx_compile_stdcxx.m4])
Packit 345191
  AX_CXX_COMPILE_STDCXX([14], [noext], [optional])
Packit 345191
  if test "x${HAVE_CXX14}" = "x1" ; then
Packit 345191
    JE_CXXFLAGS_ADD([-Wall])
Packit 345191
    JE_CXXFLAGS_ADD([-Wextra])
Packit 345191
    JE_CXXFLAGS_ADD([-g3])
Packit 345191
Packit 345191
    SAVED_LIBS="${LIBS}"
Packit 345191
    JE_APPEND_VS(LIBS, -lstdc++)
Packit 345191
    JE_COMPILABLE([libstdc++ linkage], [
Packit 345191
#include <stdlib.h>
Packit 345191
], [[
Packit 345191
	int *arr = (int *)malloc(sizeof(int) * 42);
Packit 345191
	if (arr == NULL)
Packit 345191
		return 1;
Packit 345191
]], [je_cv_libstdcxx])
Packit 345191
    if test "x${je_cv_libstdcxx}" = "xno" ; then
Packit 345191
      LIBS="${SAVED_LIBS}"
Packit 345191
    fi
Packit 345191
  else
Packit 345191
    enable_cxx="0"
Packit 345191
  fi
Packit 345191
fi
Packit 345191
AC_SUBST([enable_cxx])
Packit 345191
AC_SUBST([CONFIGURE_CXXFLAGS])
Packit 345191
AC_SUBST([SPECIFIED_CXXFLAGS])
Packit 345191
AC_SUBST([EXTRA_CXXFLAGS])
Packit 345191
Packit 345191
AC_C_BIGENDIAN([ac_cv_big_endian=1], [ac_cv_big_endian=0])
Packit 345191
if test "x${ac_cv_big_endian}" = "x1" ; then
Packit 345191
  AC_DEFINE_UNQUOTED([JEMALLOC_BIG_ENDIAN], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
if test "x${je_cv_msvc}" = "xyes" -a "x${ac_cv_header_inttypes_h}" = "xno"; then
Packit 345191
  JE_APPEND_VS(CPPFLAGS, -I${srcdir}/include/msvc_compat/C99)
Packit 345191
fi
Packit 345191
Packit 345191
if test "x${je_cv_msvc}" = "xyes" ; then
Packit 345191
  LG_SIZEOF_PTR=LG_SIZEOF_PTR_WIN
Packit 345191
  AC_MSG_RESULT([Using a predefined value for sizeof(void *): 4 for 32-bit, 8 for 64-bit])
Packit 345191
else
Packit 345191
  AC_CHECK_SIZEOF([void *])
Packit 345191
  if test "x${ac_cv_sizeof_void_p}" = "x8" ; then
Packit 345191
    LG_SIZEOF_PTR=3
Packit 345191
  elif test "x${ac_cv_sizeof_void_p}" = "x4" ; then
Packit 345191
    LG_SIZEOF_PTR=2
Packit 345191
  else
Packit 345191
    AC_MSG_ERROR([Unsupported pointer size: ${ac_cv_sizeof_void_p}])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
AC_DEFINE_UNQUOTED([LG_SIZEOF_PTR], [$LG_SIZEOF_PTR])
Packit 345191
Packit 345191
AC_CHECK_SIZEOF([int])
Packit 345191
if test "x${ac_cv_sizeof_int}" = "x8" ; then
Packit 345191
  LG_SIZEOF_INT=3
Packit 345191
elif test "x${ac_cv_sizeof_int}" = "x4" ; then
Packit 345191
  LG_SIZEOF_INT=2
Packit 345191
else
Packit 345191
  AC_MSG_ERROR([Unsupported int size: ${ac_cv_sizeof_int}])
Packit 345191
fi
Packit 345191
AC_DEFINE_UNQUOTED([LG_SIZEOF_INT], [$LG_SIZEOF_INT])
Packit 345191
Packit 345191
AC_CHECK_SIZEOF([long])
Packit 345191
if test "x${ac_cv_sizeof_long}" = "x8" ; then
Packit 345191
  LG_SIZEOF_LONG=3
Packit 345191
elif test "x${ac_cv_sizeof_long}" = "x4" ; then
Packit 345191
  LG_SIZEOF_LONG=2
Packit 345191
else
Packit 345191
  AC_MSG_ERROR([Unsupported long size: ${ac_cv_sizeof_long}])
Packit 345191
fi
Packit 345191
AC_DEFINE_UNQUOTED([LG_SIZEOF_LONG], [$LG_SIZEOF_LONG])
Packit 345191
Packit 345191
AC_CHECK_SIZEOF([long long])
Packit 345191
if test "x${ac_cv_sizeof_long_long}" = "x8" ; then
Packit 345191
  LG_SIZEOF_LONG_LONG=3
Packit 345191
elif test "x${ac_cv_sizeof_long_long}" = "x4" ; then
Packit 345191
  LG_SIZEOF_LONG_LONG=2
Packit 345191
else
Packit 345191
  AC_MSG_ERROR([Unsupported long long size: ${ac_cv_sizeof_long_long}])
Packit 345191
fi
Packit 345191
AC_DEFINE_UNQUOTED([LG_SIZEOF_LONG_LONG], [$LG_SIZEOF_LONG_LONG])
Packit 345191
Packit 345191
AC_CHECK_SIZEOF([intmax_t])
Packit 345191
if test "x${ac_cv_sizeof_intmax_t}" = "x16" ; then
Packit 345191
  LG_SIZEOF_INTMAX_T=4
Packit 345191
elif test "x${ac_cv_sizeof_intmax_t}" = "x8" ; then
Packit 345191
  LG_SIZEOF_INTMAX_T=3
Packit 345191
elif test "x${ac_cv_sizeof_intmax_t}" = "x4" ; then
Packit 345191
  LG_SIZEOF_INTMAX_T=2
Packit 345191
else
Packit 345191
  AC_MSG_ERROR([Unsupported intmax_t size: ${ac_cv_sizeof_intmax_t}])
Packit 345191
fi
Packit 345191
AC_DEFINE_UNQUOTED([LG_SIZEOF_INTMAX_T], [$LG_SIZEOF_INTMAX_T])
Packit 345191
Packit 345191
AC_CANONICAL_HOST
Packit 345191
dnl CPU-specific settings.
Packit 345191
CPU_SPINWAIT=""
Packit 345191
case "${host_cpu}" in
Packit 345191
  i686|x86_64)
Packit 345191
	HAVE_CPU_SPINWAIT=1
Packit 345191
	if test "x${je_cv_msvc}" = "xyes" ; then
Packit 345191
	    AC_CACHE_VAL([je_cv_pause_msvc],
Packit 345191
	      [JE_COMPILABLE([pause instruction MSVC], [],
Packit 345191
					[[_mm_pause(); return 0;]],
Packit 345191
					[je_cv_pause_msvc])])
Packit 345191
	    if test "x${je_cv_pause_msvc}" = "xyes" ; then
Packit 345191
		CPU_SPINWAIT='_mm_pause()'
Packit 345191
	    fi
Packit 345191
	else
Packit 345191
	    AC_CACHE_VAL([je_cv_pause],
Packit 345191
	      [JE_COMPILABLE([pause instruction], [],
Packit 345191
					[[__asm__ volatile("pause"); return 0;]],
Packit 345191
					[je_cv_pause])])
Packit 345191
	    if test "x${je_cv_pause}" = "xyes" ; then
Packit 345191
		CPU_SPINWAIT='__asm__ volatile("pause")'
Packit 345191
	    fi
Packit 345191
	fi
Packit 345191
	;;
Packit 345191
  *)
Packit 345191
	HAVE_CPU_SPINWAIT=0
Packit 345191
	;;
Packit 345191
esac
Packit 345191
AC_DEFINE_UNQUOTED([HAVE_CPU_SPINWAIT], [$HAVE_CPU_SPINWAIT])
Packit 345191
AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT])
Packit 345191
Packit 345191
AC_ARG_WITH([lg_vaddr],
Packit 345191
  [AS_HELP_STRING([--with-lg-vaddr=<lg-vaddr>], [Number of significant virtual address bits])],
Packit 345191
  [LG_VADDR="$with_lg_vaddr"], [LG_VADDR="detect"])
Packit 345191
Packit 345191
case "${host_cpu}" in
Packit 345191
  aarch64)
Packit 345191
    if test "x$LG_VADDR" = "xdetect"; then
Packit 345191
      AC_MSG_CHECKING([number of significant virtual address bits])
Packit 345191
      if test "x${LG_SIZEOF_PTR}" = "x2" ; then
Packit 345191
        #aarch64 ILP32
Packit 345191
        LG_VADDR=32
Packit 345191
      else
Packit 345191
        #aarch64 LP64
Packit 345191
        LG_VADDR=48
Packit 345191
      fi
Packit 345191
      AC_MSG_RESULT([$LG_VADDR])
Packit 345191
    fi
Packit 345191
    ;;
Packit 345191
  x86_64)
Packit 345191
    if test "x$LG_VADDR" = "xdetect"; then
Packit 345191
      AC_CACHE_CHECK([number of significant virtual address bits],
Packit 345191
                     [je_cv_lg_vaddr],
Packit 345191
                     AC_RUN_IFELSE([AC_LANG_PROGRAM(
Packit 345191
[[
Packit 345191
#include <stdio.h>
Packit 345191
#ifdef _WIN32
Packit 345191
#include <limits.h>
Packit 345191
#include <intrin.h>
Packit 345191
typedef unsigned __int32 uint32_t;
Packit 345191
#else
Packit 345191
#include <stdint.h>
Packit 345191
#endif
Packit 345191
]], [[
Packit 345191
	uint32_t r[[4]];
Packit 345191
	uint32_t eax_in = 0x80000008U;
Packit 345191
#ifdef _WIN32
Packit 345191
	__cpuid((int *)r, (int)eax_in);
Packit 345191
#else
Packit 345191
	asm volatile ("cpuid"
Packit 345191
	    : "=a" (r[[0]]), "=b" (r[[1]]), "=c" (r[[2]]), "=d" (r[[3]])
Packit 345191
	    : "a" (eax_in), "c" (0)
Packit 345191
	);
Packit 345191
#endif
Packit 345191
	uint32_t eax_out = r[[0]];
Packit 345191
	uint32_t vaddr = ((eax_out & 0x0000ff00U) >> 8);
Packit 345191
	FILE *f = fopen("conftest.out", "w");
Packit 345191
	if (f == NULL) {
Packit 345191
		return 1;
Packit 345191
	}
Packit 345191
	if (vaddr > (sizeof(void *) << 3)) {
Packit 345191
		vaddr = sizeof(void *) << 3;
Packit 345191
	}
Packit 345191
	fprintf(f, "%u", vaddr);
Packit 345191
	fclose(f);
Packit 345191
	return 0;
Packit 345191
]])],
Packit 345191
                   [je_cv_lg_vaddr=`cat conftest.out`],
Packit 345191
                   [je_cv_lg_vaddr=error],
Packit 345191
                   [je_cv_lg_vaddr=57]))
Packit 345191
      if test "x${je_cv_lg_vaddr}" != "x" ; then
Packit 345191
        LG_VADDR="${je_cv_lg_vaddr}"
Packit 345191
      fi
Packit 345191
      if test "x${LG_VADDR}" != "xerror" ; then
Packit 345191
        AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
Packit 345191
      else
Packit 345191
        AC_MSG_ERROR([cannot determine number of significant virtual address bits])
Packit 345191
      fi
Packit 345191
    fi
Packit 345191
    ;;
Packit 345191
  *)
Packit 345191
    if test "x$LG_VADDR" = "xdetect"; then
Packit 345191
      AC_MSG_CHECKING([number of significant virtual address bits])
Packit 345191
      if test "x${LG_SIZEOF_PTR}" = "x3" ; then
Packit 345191
        LG_VADDR=64
Packit 345191
      elif test "x${LG_SIZEOF_PTR}" = "x2" ; then
Packit 345191
        LG_VADDR=32
Packit 345191
      elif test "x${LG_SIZEOF_PTR}" = "xLG_SIZEOF_PTR_WIN" ; then
Packit 345191
        LG_VADDR="(1U << (LG_SIZEOF_PTR_WIN+3))"
Packit 345191
      else
Packit 345191
        AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}])
Packit 345191
      fi
Packit 345191
      AC_MSG_RESULT([$LG_VADDR])
Packit 345191
    fi
Packit 345191
    ;;
Packit 345191
esac
Packit 345191
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
Packit 345191
Packit 345191
LD_PRELOAD_VAR="LD_PRELOAD"
Packit 345191
so="so"
Packit 345191
importlib="${so}"
Packit 345191
o="$ac_objext"
Packit 345191
a="a"
Packit 345191
exe="$ac_exeext"
Packit 345191
libprefix="lib"
Packit 345191
link_whole_archive="0"
Packit 345191
DSO_LDFLAGS='-shared -Wl,-soname,$(@F)'
Packit 345191
RPATH='-Wl,-rpath,$(1)'
Packit 345191
SOREV="${so}.${rev}"
Packit 345191
PIC_CFLAGS='-fPIC -DPIC'
Packit 345191
CTARGET='-o $@'
Packit 345191
LDTARGET='-o $@'
Packit 345191
TEST_LD_MODE=
Packit 345191
EXTRA_LDFLAGS=
Packit 345191
ARFLAGS='crus'
Packit 345191
AROUT=' $@'
Packit 345191
CC_MM=1
Packit 345191
Packit 345191
if test "x$je_cv_cray_prgenv_wrapper" = "xyes" ; then
Packit 345191
  TEST_LD_MODE='-dynamic'
Packit 345191
fi
Packit 345191
Packit 345191
if test "x${je_cv_cray}" = "xyes" ; then
Packit 345191
  CC_MM=
Packit 345191
fi
Packit 345191
Packit 345191
AN_MAKEVAR([AR], [AC_PROG_AR])
Packit 345191
AN_PROGRAM([ar], [AC_PROG_AR])
Packit 345191
AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
Packit 345191
AC_PROG_AR
Packit 345191
Packit 345191
AN_MAKEVAR([NM], [AC_PROG_NM])
Packit 345191
AN_PROGRAM([nm], [AC_PROG_NM])
Packit 345191
AC_DEFUN([AC_PROG_NM], [AC_CHECK_TOOL(NM, nm, :)])
Packit 345191
AC_PROG_NM
Packit 345191
Packit 345191
AC_PROG_AWK
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl jemalloc version.
Packit 345191
dnl
Packit 345191
Packit 345191
AC_ARG_WITH([version],
Packit 345191
  [AS_HELP_STRING([--with-version=<major>.<minor>.<bugfix>-<nrev>-g<gid>],
Packit 345191
   [Version string])],
Packit 345191
  [
Packit 345191
    echo "${with_version}" | grep ['^[0-9]\+\.[0-9]\+\.[0-9]\+-[0-9]\+-g[0-9a-f]\+$'] 2>&1 1>/dev/null
Packit 345191
    if test $? -eq 0 ; then
Packit 345191
      echo "$with_version" > "${objroot}VERSION"
Packit 345191
    else
Packit 345191
      echo "${with_version}" | grep ['^VERSION$'] 2>&1 1>/dev/null
Packit 345191
      if test $? -ne 0 ; then
Packit 345191
        AC_MSG_ERROR([${with_version} does not match <major>.<minor>.<bugfix>-<nrev>-g<gid> or VERSION])
Packit 345191
      fi
Packit 345191
    fi
Packit 345191
  ], [
Packit 345191
    dnl Set VERSION if source directory is inside a git repository.
Packit 345191
    if test "x`test ! \"${srcroot}\" && cd \"${srcroot}\"; git rev-parse --is-inside-work-tree 2>/dev/null`" = "xtrue" ; then
Packit 345191
      dnl Pattern globs aren't powerful enough to match both single- and
Packit 345191
      dnl double-digit version numbers, so iterate over patterns to support up
Packit 345191
      dnl to version 99.99.99 without any accidental matches.
Packit 345191
      for pattern in ['[0-9].[0-9].[0-9]' '[0-9].[0-9].[0-9][0-9]' \
Packit 345191
                     '[0-9].[0-9][0-9].[0-9]' '[0-9].[0-9][0-9].[0-9][0-9]' \
Packit 345191
                     '[0-9][0-9].[0-9].[0-9]' '[0-9][0-9].[0-9].[0-9][0-9]' \
Packit 345191
                     '[0-9][0-9].[0-9][0-9].[0-9]' \
Packit 345191
                     '[0-9][0-9].[0-9][0-9].[0-9][0-9]']; do
Packit 345191
        (test ! "${srcroot}" && cd "${srcroot}"; git describe --long --abbrev=40 --match="${pattern}") > "${objroot}VERSION.tmp" 2>/dev/null
Packit 345191
        if test $? -eq 0 ; then
Packit 345191
          mv "${objroot}VERSION.tmp" "${objroot}VERSION"
Packit 345191
          break
Packit 345191
        fi
Packit 345191
      done
Packit 345191
    fi
Packit 345191
    rm -f "${objroot}VERSION.tmp"
Packit 345191
  ])
Packit 345191
Packit 345191
if test ! -e "${objroot}VERSION" ; then
Packit 345191
  if test ! -e "${srcroot}VERSION" ; then
Packit 345191
    AC_MSG_RESULT(
Packit 345191
      [Missing VERSION file, and unable to generate it; creating bogus VERSION])
Packit 345191
    echo "0.0.0-0-g0000000000000000000000000000000000000000" > "${objroot}VERSION"
Packit 345191
  else
Packit 345191
    cp ${srcroot}VERSION ${objroot}VERSION
Packit 345191
  fi
Packit 345191
fi
Packit 345191
jemalloc_version=`cat "${objroot}VERSION"`
Packit 345191
jemalloc_version_major=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]1}'`
Packit 345191
jemalloc_version_minor=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]2}'`
Packit 345191
jemalloc_version_bugfix=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]3}'`
Packit 345191
jemalloc_version_nrev=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]4}'`
Packit 345191
jemalloc_version_gid=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]5}'`
Packit 345191
AC_SUBST([jemalloc_version])
Packit 345191
AC_SUBST([jemalloc_version_major])
Packit 345191
AC_SUBST([jemalloc_version_minor])
Packit 345191
AC_SUBST([jemalloc_version_bugfix])
Packit 345191
AC_SUBST([jemalloc_version_nrev])
Packit 345191
AC_SUBST([jemalloc_version_gid])
Packit 345191
Packit 345191
dnl Platform-specific settings.  abi and RPATH can probably be determined
Packit 345191
dnl programmatically, but doing so is error-prone, which makes it generally
Packit 345191
dnl not worth the trouble.
Packit 345191
dnl
Packit 345191
dnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the
Packit 345191
dnl definitions need to be seen before any headers are included, which is a pain
Packit 345191
dnl to make happen otherwise.
Packit 345191
default_retain="0"
Packit 345191
maps_coalesce="1"
Packit 345191
DUMP_SYMS="${NM} -a"
Packit 345191
SYM_PREFIX=""
Packit 345191
case "${host}" in
Packit 345191
  *-*-darwin* | *-*-ios*)
Packit 345191
	abi="macho"
Packit 345191
	RPATH=""
Packit 345191
	LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
Packit 345191
	so="dylib"
Packit 345191
	importlib="${so}"
Packit 345191
	force_tls="0"
Packit 345191
	DSO_LDFLAGS='-shared -Wl,-install_name,$(LIBDIR)/$(@F)'
Packit 345191
	SOREV="${rev}.${so}"
Packit 345191
	sbrk_deprecated="1"
Packit 345191
	SYM_PREFIX="_"
Packit 345191
	;;
Packit 345191
  *-*-freebsd*)
Packit 345191
	abi="elf"
Packit 345191
	AC_DEFINE([JEMALLOC_SYSCTL_VM_OVERCOMMIT], [ ])
Packit 345191
	force_lazy_lock="1"
Packit 345191
	;;
Packit 345191
  *-*-dragonfly*)
Packit 345191
	abi="elf"
Packit 345191
	;;
Packit 345191
  *-*-openbsd*)
Packit 345191
	abi="elf"
Packit 345191
	force_tls="0"
Packit 345191
	;;
Packit 345191
  *-*-bitrig*)
Packit 345191
	abi="elf"
Packit 345191
	;;
Packit 345191
  *-*-linux-android)
Packit 345191
	dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
Packit 345191
	JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE)
Packit 345191
	abi="elf"
Packit 345191
	AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
Packit 345191
	AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_C11_ATOMICS])
Packit 345191
	force_tls="0"
Packit 345191
	if test "${LG_SIZEOF_PTR}" = "3"; then
Packit 345191
	  default_retain="1"
Packit 345191
	fi
Packit 345191
	;;
Packit 345191
  *-*-linux*)
Packit 345191
	dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
Packit 345191
	JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE)
Packit 345191
	abi="elf"
Packit 345191
	AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
Packit 345191
	AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ])
Packit 345191
	if test "${LG_SIZEOF_PTR}" = "3"; then
Packit 345191
	  default_retain="1"
Packit 345191
	fi
Packit 345191
	;;
Packit 345191
  *-*-kfreebsd*)
Packit 345191
	dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
Packit 345191
	JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE)
Packit 345191
	abi="elf"
Packit 345191
	AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
Packit 345191
	AC_DEFINE([JEMALLOC_SYSCTL_VM_OVERCOMMIT], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
Packit 345191
	AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ])
Packit 345191
	;;
Packit 345191
  *-*-netbsd*)
Packit 345191
	AC_MSG_CHECKING([ABI])
Packit 345191
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Packit 345191
[[#ifdef __ELF__
Packit 345191
/* ELF */
Packit 345191
#else
Packit 345191
#error aout
Packit 345191
#endif
Packit 345191
]])],
Packit 345191
                          [abi="elf"],
Packit 345191
                          [abi="aout"])
Packit 345191
	AC_MSG_RESULT([$abi])
Packit 345191
	;;
Packit 345191
  *-*-solaris2*)
Packit 345191
	abi="elf"
Packit 345191
	RPATH='-Wl,-R,$(1)'
Packit 345191
	dnl Solaris needs this for sigwait().
Packit 345191
	JE_APPEND_VS(CPPFLAGS, -D_POSIX_PTHREAD_SEMANTICS)
Packit 345191
	JE_APPEND_VS(LIBS, -lposix4 -lsocket -lnsl)
Packit 345191
	;;
Packit 345191
  *-ibm-aix*)
Packit 345191
	if test "${LG_SIZEOF_PTR}" = "3"; then
Packit 345191
	  dnl 64bit AIX
Packit 345191
	  LD_PRELOAD_VAR="LDR_PRELOAD64"
Packit 345191
	else
Packit 345191
	  dnl 32bit AIX
Packit 345191
	  LD_PRELOAD_VAR="LDR_PRELOAD"
Packit 345191
	fi
Packit 345191
	abi="xcoff"
Packit 345191
	;;
Packit 345191
  *-*-mingw* | *-*-cygwin*)
Packit 345191
	abi="pecoff"
Packit 345191
	force_tls="0"
Packit 345191
	maps_coalesce="0"
Packit 345191
	RPATH=""
Packit 345191
	so="dll"
Packit 345191
	if test "x$je_cv_msvc" = "xyes" ; then
Packit 345191
	  importlib="lib"
Packit 345191
	  DSO_LDFLAGS="-LD"
Packit 345191
	  EXTRA_LDFLAGS="-link -DEBUG"
Packit 345191
	  CTARGET='-Fo$@'
Packit 345191
	  LDTARGET='-Fe$@'
Packit 345191
	  AR='lib'
Packit 345191
	  ARFLAGS='-nologo -out:'
Packit 345191
	  AROUT='$@'
Packit 345191
	  CC_MM=
Packit 345191
        else
Packit 345191
	  importlib="${so}"
Packit 345191
	  DSO_LDFLAGS="-shared"
Packit 345191
	  link_whole_archive="1"
Packit 345191
	fi
Packit 345191
	case "${host}" in
Packit 345191
	  *-*-cygwin*)
Packit 345191
	    DUMP_SYMS="dumpbin /SYMBOLS"
Packit 345191
	    ;;
Packit 345191
	  *)
Packit 345191
	    ;;
Packit 345191
	esac
Packit 345191
	a="lib"
Packit 345191
	libprefix=""
Packit 345191
	SOREV="${so}"
Packit 345191
	PIC_CFLAGS=""
Packit 345191
	if test "${LG_SIZEOF_PTR}" = "3"; then
Packit 345191
	  default_retain="1"
Packit 345191
	fi
Packit 345191
	;;
Packit 345191
  *)
Packit 345191
	AC_MSG_RESULT([Unsupported operating system: ${host}])
Packit 345191
	abi="elf"
Packit 345191
	;;
Packit 345191
esac
Packit 345191
Packit 345191
JEMALLOC_USABLE_SIZE_CONST=const
Packit 345191
AC_CHECK_HEADERS([malloc.h], [
Packit 345191
  AC_MSG_CHECKING([whether malloc_usable_size definition can use const argument])
Packit 345191
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Packit 345191
    [#include <malloc.h>
Packit 345191
     #include <stddef.h>
Packit 345191
    size_t malloc_usable_size(const void *ptr);
Packit 345191
    ],
Packit 345191
    [])],[
Packit 345191
                AC_MSG_RESULT([yes])
Packit 345191
         ],[
Packit 345191
                JEMALLOC_USABLE_SIZE_CONST=
Packit 345191
                AC_MSG_RESULT([no])
Packit 345191
         ])
Packit 345191
])
Packit 345191
AC_DEFINE_UNQUOTED([JEMALLOC_USABLE_SIZE_CONST], [$JEMALLOC_USABLE_SIZE_CONST])
Packit 345191
AC_SUBST([abi])
Packit 345191
AC_SUBST([RPATH])
Packit 345191
AC_SUBST([LD_PRELOAD_VAR])
Packit 345191
AC_SUBST([so])
Packit 345191
AC_SUBST([importlib])
Packit 345191
AC_SUBST([o])
Packit 345191
AC_SUBST([a])
Packit 345191
AC_SUBST([exe])
Packit 345191
AC_SUBST([libprefix])
Packit 345191
AC_SUBST([link_whole_archive])
Packit 345191
AC_SUBST([DSO_LDFLAGS])
Packit 345191
AC_SUBST([EXTRA_LDFLAGS])
Packit 345191
AC_SUBST([SOREV])
Packit 345191
AC_SUBST([PIC_CFLAGS])
Packit 345191
AC_SUBST([CTARGET])
Packit 345191
AC_SUBST([LDTARGET])
Packit 345191
AC_SUBST([TEST_LD_MODE])
Packit 345191
AC_SUBST([MKLIB])
Packit 345191
AC_SUBST([ARFLAGS])
Packit 345191
AC_SUBST([AROUT])
Packit 345191
AC_SUBST([DUMP_SYMS])
Packit 345191
AC_SUBST([CC_MM])
Packit 345191
Packit 345191
dnl Determine whether libm must be linked to use e.g. log(3).
Packit 345191
AC_SEARCH_LIBS([log], [m], , [AC_MSG_ERROR([Missing math functions])])
Packit 345191
if test "x$ac_cv_search_log" != "xnone required" ; then
Packit 345191
  LM="$ac_cv_search_log"
Packit 345191
else
Packit 345191
  LM=
Packit 345191
fi
Packit 345191
AC_SUBST(LM)
Packit 345191
Packit 345191
JE_COMPILABLE([__attribute__ syntax],
Packit 345191
              [static __attribute__((unused)) void foo(void){}],
Packit 345191
              [],
Packit 345191
              [je_cv_attribute])
Packit 345191
if test "x${je_cv_attribute}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_ATTR], [ ])
Packit 345191
  if test "x${GCC}" = "xyes" -a "x${abi}" = "xelf"; then
Packit 345191
    JE_CFLAGS_ADD([-fvisibility=hidden])
Packit 345191
    JE_CXXFLAGS_ADD([-fvisibility=hidden])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
dnl Check for tls_model attribute support (clang 3.0 still lacks support).
Packit 345191
JE_CFLAGS_SAVE()
Packit 345191
JE_CFLAGS_ADD([-Werror])
Packit 345191
JE_CFLAGS_ADD([-herror_on_warning])
Packit 345191
JE_COMPILABLE([tls_model attribute], [],
Packit 345191
              [static __thread int
Packit 345191
               __attribute__((tls_model("initial-exec"), unused)) foo;
Packit 345191
               foo = 0;],
Packit 345191
              [je_cv_tls_model])
Packit 345191
JE_CFLAGS_RESTORE()
Packit 345191
dnl (Setting of JEMALLOC_TLS_MODEL is done later, after we've checked for
Packit 345191
dnl --disable-initial-exec-tls)
Packit 345191
Packit 345191
dnl Check for alloc_size attribute support.
Packit 345191
JE_CFLAGS_SAVE()
Packit 345191
JE_CFLAGS_ADD([-Werror])
Packit 345191
JE_CFLAGS_ADD([-herror_on_warning])
Packit 345191
JE_COMPILABLE([alloc_size attribute], [#include <stdlib.h>],
Packit 345191
              [void *foo(size_t size) __attribute__((alloc_size(1)));],
Packit 345191
              [je_cv_alloc_size])
Packit 345191
JE_CFLAGS_RESTORE()
Packit 345191
if test "x${je_cv_alloc_size}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_ATTR_ALLOC_SIZE], [ ])
Packit 345191
fi
Packit 345191
dnl Check for format(gnu_printf, ...) attribute support.
Packit 345191
JE_CFLAGS_SAVE()
Packit 345191
JE_CFLAGS_ADD([-Werror])
Packit 345191
JE_CFLAGS_ADD([-herror_on_warning])
Packit 345191
JE_COMPILABLE([format(gnu_printf, ...) attribute], [#include <stdlib.h>],
Packit 345191
              [void *foo(const char *format, ...) __attribute__((format(gnu_printf, 1, 2)));],
Packit 345191
              [je_cv_format_gnu_printf])
Packit 345191
JE_CFLAGS_RESTORE()
Packit 345191
if test "x${je_cv_format_gnu_printf}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF], [ ])
Packit 345191
fi
Packit 345191
dnl Check for format(printf, ...) attribute support.
Packit 345191
JE_CFLAGS_SAVE()
Packit 345191
JE_CFLAGS_ADD([-Werror])
Packit 345191
JE_CFLAGS_ADD([-herror_on_warning])
Packit 345191
JE_COMPILABLE([format(printf, ...) attribute], [#include <stdlib.h>],
Packit 345191
              [void *foo(const char *format, ...) __attribute__((format(printf, 1, 2)));],
Packit 345191
              [je_cv_format_printf])
Packit 345191
JE_CFLAGS_RESTORE()
Packit 345191
if test "x${je_cv_format_printf}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_ATTR_FORMAT_PRINTF], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check for format_arg(...) attribute support.
Packit 345191
JE_CFLAGS_SAVE()
Packit 345191
JE_CFLAGS_ADD([-Werror])
Packit 345191
JE_CFLAGS_ADD([-herror_on_warning])
Packit 345191
JE_COMPILABLE([format(printf, ...) attribute], [#include <stdlib.h>],
Packit 345191
              [const char * __attribute__((__format_arg__(1))) foo(const char *format);],
Packit 345191
              [je_cv_format_arg])
Packit 345191
JE_CFLAGS_RESTORE()
Packit 345191
if test "x${je_cv_format_arg}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_ATTR_FORMAT_ARG], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Support optional additions to rpath.
Packit 345191
AC_ARG_WITH([rpath],
Packit 345191
  [AS_HELP_STRING([--with-rpath=<rpath>], [Colon-separated rpath (ELF systems only)])],
Packit 345191
if test "x$with_rpath" = "xno" ; then
Packit 345191
  RPATH_EXTRA=
Packit 345191
else
Packit 345191
  RPATH_EXTRA="`echo $with_rpath | tr \":\" \" \"`"
Packit 345191
fi,
Packit 345191
  RPATH_EXTRA=
Packit 345191
)
Packit 345191
AC_SUBST([RPATH_EXTRA])
Packit 345191
Packit 345191
dnl Disable rules that do automatic regeneration of configure output by default.
Packit 345191
AC_ARG_ENABLE([autogen],
Packit 345191
  [AS_HELP_STRING([--enable-autogen], [Automatically regenerate configure output])],
Packit 345191
if test "x$enable_autogen" = "xno" ; then
Packit 345191
  enable_autogen="0"
Packit 345191
else
Packit 345191
  enable_autogen="1"
Packit 345191
fi
Packit 345191
,
Packit 345191
enable_autogen="0"
Packit 345191
)
Packit 345191
AC_SUBST([enable_autogen])
Packit 345191
Packit 345191
AC_PROG_INSTALL
Packit 345191
AC_PROG_RANLIB
Packit 345191
AC_PATH_PROG([LD], [ld], [false], [$PATH])
Packit 345191
AC_PATH_PROG([AUTOCONF], [autoconf], [false], [$PATH])
Packit 345191
Packit 345191
dnl Enable documentation
Packit 345191
AC_ARG_ENABLE([doc],
Packit 345191
	      [AS_HELP_STRING([--enable-documentation], [Build documentation])],
Packit 345191
if test "x$enable_doc" = "xno" ; then
Packit 345191
  enable_doc="0"
Packit 345191
else
Packit 345191
  enable_doc="1"
Packit 345191
fi
Packit 345191
,
Packit 345191
enable_doc="1"
Packit 345191
)
Packit 345191
AC_SUBST([enable_doc])
Packit 345191
Packit 345191
dnl Enable shared libs
Packit 345191
AC_ARG_ENABLE([shared],
Packit 345191
  [AS_HELP_STRING([--enable-shared], [Build shared libaries])],
Packit 345191
if test "x$enable_shared" = "xno" ; then
Packit 345191
  enable_shared="0"
Packit 345191
else
Packit 345191
  enable_shared="1"
Packit 345191
fi
Packit 345191
,
Packit 345191
enable_shared="1"
Packit 345191
)
Packit 345191
AC_SUBST([enable_shared])
Packit 345191
Packit 345191
dnl Enable static libs
Packit 345191
AC_ARG_ENABLE([static],
Packit 345191
  [AS_HELP_STRING([--enable-static], [Build static libaries])],
Packit 345191
if test "x$enable_static" = "xno" ; then
Packit 345191
  enable_static="0"
Packit 345191
else
Packit 345191
  enable_static="1"
Packit 345191
fi
Packit 345191
,
Packit 345191
enable_static="1"
Packit 345191
)
Packit 345191
AC_SUBST([enable_static])
Packit 345191
Packit 345191
if test "$enable_shared$enable_static" = "00" ; then
Packit 345191
  AC_MSG_ERROR([Please enable one of shared or static builds])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Perform no name mangling by default.
Packit 345191
AC_ARG_WITH([mangling],
Packit 345191
  [AS_HELP_STRING([--with-mangling=<map>], [Mangle symbols in <map>])],
Packit 345191
  [mangling_map="$with_mangling"], [mangling_map=""])
Packit 345191
Packit 345191
dnl Do not prefix public APIs by default.
Packit 345191
AC_ARG_WITH([jemalloc_prefix],
Packit 345191
  [AS_HELP_STRING([--with-jemalloc-prefix=<prefix>], [Prefix to prepend to all public APIs])],
Packit 345191
  [JEMALLOC_PREFIX="$with_jemalloc_prefix"],
Packit 345191
  [if test "x$abi" != "xmacho" -a "x$abi" != "xpecoff"; then
Packit 345191
  JEMALLOC_PREFIX=""
Packit 345191
else
Packit 345191
  JEMALLOC_PREFIX="je_"
Packit 345191
fi]
Packit 345191
)
Packit 345191
if test "x$JEMALLOC_PREFIX" = "x" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_IS_MALLOC])
Packit 345191
else
Packit 345191
  JEMALLOC_CPREFIX=`echo ${JEMALLOC_PREFIX} | tr "a-z" "A-Z"`
Packit 345191
  AC_DEFINE_UNQUOTED([JEMALLOC_PREFIX], ["$JEMALLOC_PREFIX"])
Packit 345191
  AC_DEFINE_UNQUOTED([JEMALLOC_CPREFIX], ["$JEMALLOC_CPREFIX"])
Packit 345191
fi
Packit 345191
AC_SUBST([JEMALLOC_PREFIX])
Packit 345191
AC_SUBST([JEMALLOC_CPREFIX])
Packit 345191
Packit 345191
AC_ARG_WITH([export],
Packit 345191
  [AS_HELP_STRING([--without-export], [disable exporting jemalloc public APIs])],
Packit 345191
  [if test "x$with_export" = "xno"; then
Packit 345191
  AC_DEFINE([JEMALLOC_EXPORT],[])
Packit 345191
fi]
Packit 345191
)
Packit 345191
Packit 345191
public_syms="aligned_alloc calloc dallocx free mallctl mallctlbymib mallctlnametomib malloc malloc_conf malloc_message malloc_stats_print malloc_usable_size mallocx smallocx_${jemalloc_version_gid} nallocx posix_memalign rallocx realloc sallocx sdallocx xallocx"
Packit 345191
dnl Check for additional platform-specific public API functions.
Packit 345191
AC_CHECK_FUNC([memalign],
Packit 345191
	      [AC_DEFINE([JEMALLOC_OVERRIDE_MEMALIGN], [ ])
Packit 345191
	       public_syms="${public_syms} memalign"])
Packit 345191
AC_CHECK_FUNC([valloc],
Packit 345191
	      [AC_DEFINE([JEMALLOC_OVERRIDE_VALLOC], [ ])
Packit 345191
	       public_syms="${public_syms} valloc"])
Packit 345191
Packit 345191
dnl Check for allocator-related functions that should be wrapped.
Packit 345191
wrap_syms=
Packit 345191
if test "x${JEMALLOC_PREFIX}" = "x" ; then
Packit 345191
  AC_CHECK_FUNC([__libc_calloc],
Packit 345191
		[AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_CALLOC], [ ])
Packit 345191
		 wrap_syms="${wrap_syms} __libc_calloc"])
Packit 345191
  AC_CHECK_FUNC([__libc_free],
Packit 345191
		[AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_FREE], [ ])
Packit 345191
		 wrap_syms="${wrap_syms} __libc_free"])
Packit 345191
  AC_CHECK_FUNC([__libc_malloc],
Packit 345191
		[AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_MALLOC], [ ])
Packit 345191
		 wrap_syms="${wrap_syms} __libc_malloc"])
Packit 345191
  AC_CHECK_FUNC([__libc_memalign],
Packit 345191
		[AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_MEMALIGN], [ ])
Packit 345191
		 wrap_syms="${wrap_syms} __libc_memalign"])
Packit 345191
  AC_CHECK_FUNC([__libc_realloc],
Packit 345191
		[AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_REALLOC], [ ])
Packit 345191
		 wrap_syms="${wrap_syms} __libc_realloc"])
Packit 345191
  AC_CHECK_FUNC([__libc_valloc],
Packit 345191
		[AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_VALLOC], [ ])
Packit 345191
		 wrap_syms="${wrap_syms} __libc_valloc"])
Packit 345191
  AC_CHECK_FUNC([__posix_memalign],
Packit 345191
		[AC_DEFINE([JEMALLOC_OVERRIDE___POSIX_MEMALIGN], [ ])
Packit 345191
		 wrap_syms="${wrap_syms} __posix_memalign"])
Packit 345191
fi
Packit 345191
Packit 345191
case "${host}" in
Packit 345191
  *-*-mingw* | *-*-cygwin*)
Packit 345191
    wrap_syms="${wrap_syms} tls_callback"
Packit 345191
    ;;
Packit 345191
  *)
Packit 345191
    ;;
Packit 345191
esac
Packit 345191
Packit 345191
dnl Mangle library-private APIs.
Packit 345191
AC_ARG_WITH([private_namespace],
Packit 345191
  [AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])],
Packit 345191
  [JEMALLOC_PRIVATE_NAMESPACE="${with_private_namespace}je_"],
Packit 345191
  [JEMALLOC_PRIVATE_NAMESPACE="je_"]
Packit 345191
)
Packit 345191
AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], [$JEMALLOC_PRIVATE_NAMESPACE])
Packit 345191
private_namespace="$JEMALLOC_PRIVATE_NAMESPACE"
Packit 345191
AC_SUBST([private_namespace])
Packit 345191
Packit 345191
dnl Do not add suffix to installed files by default.
Packit 345191
AC_ARG_WITH([install_suffix],
Packit 345191
  [AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])],
Packit 345191
  [INSTALL_SUFFIX="$with_install_suffix"],
Packit 345191
  [INSTALL_SUFFIX=]
Packit 345191
)
Packit 345191
install_suffix="$INSTALL_SUFFIX"
Packit 345191
AC_SUBST([install_suffix])
Packit 345191
Packit 345191
dnl Specify default malloc_conf.
Packit 345191
AC_ARG_WITH([malloc_conf],
Packit 345191
  [AS_HELP_STRING([--with-malloc-conf=<malloc_conf>], [config.malloc_conf options string])],
Packit 345191
  [JEMALLOC_CONFIG_MALLOC_CONF="$with_malloc_conf"],
Packit 345191
  [JEMALLOC_CONFIG_MALLOC_CONF=""]
Packit 345191
)
Packit 345191
config_malloc_conf="$JEMALLOC_CONFIG_MALLOC_CONF"
Packit 345191
AC_DEFINE_UNQUOTED([JEMALLOC_CONFIG_MALLOC_CONF], ["$config_malloc_conf"])
Packit 345191
Packit 345191
dnl Substitute @je_@ in jemalloc_protos.h.in, primarily to make generation of
Packit 345191
dnl jemalloc_protos_jet.h easy.
Packit 345191
je_="je_"
Packit 345191
AC_SUBST([je_])
Packit 345191
Packit 345191
cfgoutputs_in="Makefile.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} jemalloc.pc.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} doc/html.xsl.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} doc/manpages.xsl.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} doc/jemalloc.xml.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_macros.h.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_protos.h.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_typedefs.h.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} include/jemalloc/internal/jemalloc_preamble.h.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} test/test.sh.in"
Packit 345191
cfgoutputs_in="${cfgoutputs_in} test/include/test/jemalloc_test.h.in"
Packit 345191
Packit 345191
cfgoutputs_out="Makefile"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} jemalloc.pc"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} doc/html.xsl"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} doc/jemalloc.xml"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_macros.h"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_protos.h"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_typedefs.h"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_preamble.h"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} test/test.sh"
Packit 345191
cfgoutputs_out="${cfgoutputs_out} test/include/test/jemalloc_test.h"
Packit 345191
Packit 345191
cfgoutputs_tup="Makefile"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} jemalloc.pc:jemalloc.pc.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc.xml:doc/jemalloc.xml.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_macros.h:include/jemalloc/jemalloc_macros.h.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_protos.h:include/jemalloc/jemalloc_protos.h.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_typedefs.h:include/jemalloc/jemalloc_typedefs.h.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_preamble.h"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} test/test.sh:test/test.sh.in"
Packit 345191
cfgoutputs_tup="${cfgoutputs_tup} test/include/test/jemalloc_test.h:test/include/test/jemalloc_test.h.in"
Packit 345191
Packit 345191
cfghdrs_in="include/jemalloc/jemalloc_defs.h.in"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/jemalloc_internal_defs.h.in"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/private_symbols.sh"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/private_namespace.sh"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/public_namespace.sh"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/public_unnamespace.sh"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc_rename.sh"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc_mangle.sh"
Packit 345191
cfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc.sh"
Packit 345191
cfghdrs_in="${cfghdrs_in} test/include/test/jemalloc_test_defs.h.in"
Packit 345191
Packit 345191
cfghdrs_out="include/jemalloc/jemalloc_defs.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc${install_suffix}.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_symbols.awk"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_symbols_jet.awk"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_symbols.txt"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_namespace.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_unnamespace.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_protos_jet.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_rename.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle_jet.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/jemalloc_internal_defs.h"
Packit 345191
cfghdrs_out="${cfghdrs_out} test/include/test/jemalloc_test_defs.h"
Packit 345191
Packit 345191
cfghdrs_tup="include/jemalloc/jemalloc_defs.h:include/jemalloc/jemalloc_defs.h.in"
Packit 345191
cfghdrs_tup="${cfghdrs_tup} include/jemalloc/internal/jemalloc_internal_defs.h:include/jemalloc/internal/jemalloc_internal_defs.h.in"
Packit 345191
cfghdrs_tup="${cfghdrs_tup} test/include/test/jemalloc_test_defs.h:test/include/test/jemalloc_test_defs.h.in"
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl jemalloc build options.
Packit 345191
dnl
Packit 345191
Packit 345191
dnl Do not compile with debugging by default.
Packit 345191
AC_ARG_ENABLE([debug],
Packit 345191
  [AS_HELP_STRING([--enable-debug],
Packit 345191
                  [Build debugging code])],
Packit 345191
[if test "x$enable_debug" = "xno" ; then
Packit 345191
  enable_debug="0"
Packit 345191
else
Packit 345191
  enable_debug="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_debug="0"]
Packit 345191
)
Packit 345191
if test "x$enable_debug" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_DEBUG], [ ])
Packit 345191
fi
Packit 345191
if test "x$enable_debug" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_DEBUG], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_debug])
Packit 345191
Packit 345191
dnl Only optimize if not debugging.
Packit 345191
if test "x$enable_debug" = "x0" ; then
Packit 345191
  if test "x$GCC" = "xyes" ; then
Packit 345191
    JE_CFLAGS_ADD([-O3])
Packit 345191
    JE_CXXFLAGS_ADD([-O3])
Packit 345191
    JE_CFLAGS_ADD([-funroll-loops])
Packit 345191
  elif test "x$je_cv_msvc" = "xyes" ; then
Packit 345191
    JE_CFLAGS_ADD([-O2])
Packit 345191
    JE_CXXFLAGS_ADD([-O2])
Packit 345191
  else
Packit 345191
    JE_CFLAGS_ADD([-O])
Packit 345191
    JE_CXXFLAGS_ADD([-O])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
dnl Enable statistics calculation by default.
Packit 345191
AC_ARG_ENABLE([stats],
Packit 345191
  [AS_HELP_STRING([--disable-stats],
Packit 345191
                  [Disable statistics calculation/reporting])],
Packit 345191
[if test "x$enable_stats" = "xno" ; then
Packit 345191
  enable_stats="0"
Packit 345191
else
Packit 345191
  enable_stats="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_stats="1"]
Packit 345191
)
Packit 345191
if test "x$enable_stats" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_STATS], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_stats])
Packit 345191
Packit 345191
dnl Do not enable smallocx by default.
Packit 345191
AC_ARG_ENABLE([experimental_smallocx],
Packit 345191
  [AS_HELP_STRING([--enable-experimental-smallocx], [Enable experimental smallocx API])],
Packit 345191
[if test "x$enable_experimental_smallocx" = "xno" ; then
Packit 345191
enable_experimental_smallocx="0"
Packit 345191
else
Packit 345191
enable_experimental_smallocx="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_experimental_smallocx="0"]
Packit 345191
)
Packit 345191
if test "x$enable_experimental_smallocx" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_EXPERIMENTAL_SMALLOCX_API])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_experimental_smallocx])
Packit 345191
Packit 345191
dnl Do not enable profiling by default.
Packit 345191
AC_ARG_ENABLE([prof],
Packit 345191
  [AS_HELP_STRING([--enable-prof], [Enable allocation profiling])],
Packit 345191
[if test "x$enable_prof" = "xno" ; then
Packit 345191
  enable_prof="0"
Packit 345191
else
Packit 345191
  enable_prof="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_prof="0"]
Packit 345191
)
Packit 345191
if test "x$enable_prof" = "x1" ; then
Packit 345191
  backtrace_method=""
Packit 345191
else
Packit 345191
  backtrace_method="N/A"
Packit 345191
fi
Packit 345191
Packit 345191
AC_ARG_ENABLE([prof-libunwind],
Packit 345191
  [AS_HELP_STRING([--enable-prof-libunwind], [Use libunwind for backtracing])],
Packit 345191
[if test "x$enable_prof_libunwind" = "xno" ; then
Packit 345191
  enable_prof_libunwind="0"
Packit 345191
else
Packit 345191
  enable_prof_libunwind="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_prof_libunwind="0"]
Packit 345191
)
Packit 345191
AC_ARG_WITH([static_libunwind],
Packit 345191
  [AS_HELP_STRING([--with-static-libunwind=<libunwind.a>],
Packit 345191
  [Path to static libunwind library; use rather than dynamically linking])],
Packit 345191
if test "x$with_static_libunwind" = "xno" ; then
Packit 345191
  LUNWIND="-lunwind"
Packit 345191
else
Packit 345191
  if test ! -f "$with_static_libunwind" ; then
Packit 345191
    AC_MSG_ERROR([Static libunwind not found: $with_static_libunwind])
Packit 345191
  fi
Packit 345191
  LUNWIND="$with_static_libunwind"
Packit 345191
fi,
Packit 345191
  LUNWIND="-lunwind"
Packit 345191
)
Packit 345191
if test "x$backtrace_method" = "x" -a "x$enable_prof_libunwind" = "x1" ; then
Packit 345191
  AC_CHECK_HEADERS([libunwind.h], , [enable_prof_libunwind="0"])
Packit 345191
  if test "x$LUNWIND" = "x-lunwind" ; then
Packit 345191
    AC_CHECK_LIB([unwind], [unw_backtrace], [JE_APPEND_VS(LIBS, $LUNWIND)],
Packit 345191
                 [enable_prof_libunwind="0"])
Packit 345191
  else
Packit 345191
    JE_APPEND_VS(LIBS, $LUNWIND)
Packit 345191
  fi
Packit 345191
  if test "x${enable_prof_libunwind}" = "x1" ; then
Packit 345191
    backtrace_method="libunwind"
Packit 345191
    AC_DEFINE([JEMALLOC_PROF_LIBUNWIND], [ ])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
AC_ARG_ENABLE([prof-libgcc],
Packit 345191
  [AS_HELP_STRING([--disable-prof-libgcc],
Packit 345191
  [Do not use libgcc for backtracing])],
Packit 345191
[if test "x$enable_prof_libgcc" = "xno" ; then
Packit 345191
  enable_prof_libgcc="0"
Packit 345191
else
Packit 345191
  enable_prof_libgcc="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_prof_libgcc="1"]
Packit 345191
)
Packit 345191
if test "x$backtrace_method" = "x" -a "x$enable_prof_libgcc" = "x1" \
Packit 345191
     -a "x$GCC" = "xyes" ; then
Packit 345191
  AC_CHECK_HEADERS([unwind.h], , [enable_prof_libgcc="0"])
Packit 345191
  if test "x${enable_prof_libgcc}" = "x1" ; then
Packit 345191
    AC_CHECK_LIB([gcc], [_Unwind_Backtrace], [JE_APPEND_VS(LIBS, -lgcc)], [enable_prof_libgcc="0"])
Packit 345191
  fi
Packit 345191
  if test "x${enable_prof_libgcc}" = "x1" ; then
Packit 345191
    backtrace_method="libgcc"
Packit 345191
    AC_DEFINE([JEMALLOC_PROF_LIBGCC], [ ])
Packit 345191
  fi
Packit 345191
else
Packit 345191
  enable_prof_libgcc="0"
Packit 345191
fi
Packit 345191
Packit 345191
AC_ARG_ENABLE([prof-gcc],
Packit 345191
  [AS_HELP_STRING([--disable-prof-gcc],
Packit 345191
  [Do not use gcc intrinsics for backtracing])],
Packit 345191
[if test "x$enable_prof_gcc" = "xno" ; then
Packit 345191
  enable_prof_gcc="0"
Packit 345191
else
Packit 345191
  enable_prof_gcc="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_prof_gcc="1"]
Packit 345191
)
Packit 345191
if test "x$backtrace_method" = "x" -a "x$enable_prof_gcc" = "x1" \
Packit 345191
     -a "x$GCC" = "xyes" ; then
Packit 345191
  JE_CFLAGS_ADD([-fno-omit-frame-pointer])
Packit 345191
  backtrace_method="gcc intrinsics"
Packit 345191
  AC_DEFINE([JEMALLOC_PROF_GCC], [ ])
Packit 345191
else
Packit 345191
  enable_prof_gcc="0"
Packit 345191
fi
Packit 345191
Packit 345191
if test "x$backtrace_method" = "x" ; then
Packit 345191
  backtrace_method="none (disabling profiling)"
Packit 345191
  enable_prof="0"
Packit 345191
fi
Packit 345191
AC_MSG_CHECKING([configured backtracing method])
Packit 345191
AC_MSG_RESULT([$backtrace_method])
Packit 345191
if test "x$enable_prof" = "x1" ; then
Packit 345191
  dnl Heap profiling uses the log(3) function.
Packit 345191
  JE_APPEND_VS(LIBS, $LM)
Packit 345191
Packit 345191
  AC_DEFINE([JEMALLOC_PROF], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_prof])
Packit 345191
Packit 345191
dnl Indicate whether adjacent virtual memory mappings automatically coalesce
Packit 345191
dnl (and fragment on demand).
Packit 345191
if test "x${maps_coalesce}" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_MAPS_COALESCE], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Indicate whether to retain memory (rather than using munmap()) by default.
Packit 345191
if test "x$default_retain" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_RETAIN], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Enable allocation from DSS if supported by the OS.
Packit 345191
have_dss="1"
Packit 345191
dnl Check whether the BSD/SUSv1 sbrk() exists.  If not, disable DSS support.
Packit 345191
AC_CHECK_FUNC([sbrk], [have_sbrk="1"], [have_sbrk="0"])
Packit 345191
if test "x$have_sbrk" = "x1" ; then
Packit 345191
  if test "x$sbrk_deprecated" = "x1" ; then
Packit 345191
    AC_MSG_RESULT([Disabling dss allocation because sbrk is deprecated])
Packit 345191
    have_dss="0"
Packit 345191
  fi
Packit 345191
else
Packit 345191
  have_dss="0"
Packit 345191
fi
Packit 345191
Packit 345191
if test "x$have_dss" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_DSS], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Support the junk/zero filling option by default.
Packit 345191
AC_ARG_ENABLE([fill],
Packit 345191
  [AS_HELP_STRING([--disable-fill], [Disable support for junk/zero filling])],
Packit 345191
[if test "x$enable_fill" = "xno" ; then
Packit 345191
  enable_fill="0"
Packit 345191
else
Packit 345191
  enable_fill="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_fill="1"]
Packit 345191
)
Packit 345191
if test "x$enable_fill" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_FILL], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_fill])
Packit 345191
Packit 345191
dnl Disable utrace(2)-based tracing by default.
Packit 345191
AC_ARG_ENABLE([utrace],
Packit 345191
  [AS_HELP_STRING([--enable-utrace], [Enable utrace(2)-based tracing])],
Packit 345191
[if test "x$enable_utrace" = "xno" ; then
Packit 345191
  enable_utrace="0"
Packit 345191
else
Packit 345191
  enable_utrace="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_utrace="0"]
Packit 345191
)
Packit 345191
JE_COMPILABLE([utrace(2)], [
Packit 345191
#include <sys/types.h>
Packit 345191
#include <sys/param.h>
Packit 345191
#include <sys/time.h>
Packit 345191
#include <sys/uio.h>
Packit 345191
#include <sys/ktrace.h>
Packit 345191
], [
Packit 345191
	utrace((void *)0, 0);
Packit 345191
], [je_cv_utrace])
Packit 345191
if test "x${je_cv_utrace}" = "xno" ; then
Packit 345191
  enable_utrace="0"
Packit 345191
fi
Packit 345191
if test "x$enable_utrace" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_UTRACE], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_utrace])
Packit 345191
Packit 345191
dnl Do not support the xmalloc option by default.
Packit 345191
AC_ARG_ENABLE([xmalloc],
Packit 345191
  [AS_HELP_STRING([--enable-xmalloc], [Support xmalloc option])],
Packit 345191
[if test "x$enable_xmalloc" = "xno" ; then
Packit 345191
  enable_xmalloc="0"
Packit 345191
else
Packit 345191
  enable_xmalloc="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_xmalloc="0"]
Packit 345191
)
Packit 345191
if test "x$enable_xmalloc" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_XMALLOC], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_xmalloc])
Packit 345191
Packit 345191
dnl Support cache-oblivious allocation alignment by default.
Packit 345191
AC_ARG_ENABLE([cache-oblivious],
Packit 345191
  [AS_HELP_STRING([--disable-cache-oblivious],
Packit 345191
                  [Disable support for cache-oblivious allocation alignment])],
Packit 345191
[if test "x$enable_cache_oblivious" = "xno" ; then
Packit 345191
  enable_cache_oblivious="0"
Packit 345191
else
Packit 345191
  enable_cache_oblivious="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_cache_oblivious="1"]
Packit 345191
)
Packit 345191
if test "x$enable_cache_oblivious" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_CACHE_OBLIVIOUS], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_cache_oblivious])
Packit 345191
Packit 345191
dnl Do not log by default.
Packit 345191
AC_ARG_ENABLE([log],
Packit 345191
  [AS_HELP_STRING([--enable-log], [Support debug logging])],
Packit 345191
[if test "x$enable_log" = "xno" ; then
Packit 345191
  enable_log="0"
Packit 345191
else
Packit 345191
  enable_log="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_log="0"]
Packit 345191
)
Packit 345191
if test "x$enable_log" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_LOG], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_log])
Packit 345191
Packit 345191
dnl Do not use readlinkat by default
Packit 345191
AC_ARG_ENABLE([readlinkat],
Packit 345191
  [AS_HELP_STRING([--enable-readlinkat], [Use readlinkat over readlink])],
Packit 345191
[if test "x$enable_readlinkat" = "xno" ; then
Packit 345191
  enable_readlinkat="0"
Packit 345191
else
Packit 345191
  enable_readlinkat="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_readlinkat="0"]
Packit 345191
)
Packit 345191
if test "x$enable_readlinkat" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_READLINKAT], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_readlinkat])
Packit 345191
Packit 345191
dnl Avoid extra safety checks by default
Packit 345191
AC_ARG_ENABLE([opt-safety-checks],
Packit 345191
  [AS_HELP_STRING([--enable-opt-safety-checks],
Packit 345191
  [Perform certain low-overhead checks, even in opt mode])],
Packit 345191
[if test "x$enable_opt_safety_checks" = "xno" ; then
Packit 345191
  enable_opt_safety_checks="0"
Packit 345191
else
Packit 345191
  enable_opt_safety_checks="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_opt_safety_checks="0"]
Packit 345191
)
Packit 345191
if test "x$enable_opt_safety_checks" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_OPT_SAFETY_CHECKS], [ ])
Packit 345191
fi
Packit 345191
AC_SUBST([enable_opt_safety_checks])
Packit 345191
Packit 345191
JE_COMPILABLE([a program using __builtin_unreachable], [
Packit 345191
void foo (void) {
Packit 345191
  __builtin_unreachable();
Packit 345191
}
Packit 345191
], [
Packit 345191
	{
Packit 345191
		foo();
Packit 345191
	}
Packit 345191
], [je_cv_gcc_builtin_unreachable])
Packit 345191
if test "x${je_cv_gcc_builtin_unreachable}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_INTERNAL_UNREACHABLE], [__builtin_unreachable])
Packit 345191
else
Packit 345191
  AC_DEFINE([JEMALLOC_INTERNAL_UNREACHABLE], [abort])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for  __builtin_ffsl(), then ffsl(3), and fail if neither are found.
Packit 345191
dnl One of those two functions should (theoretically) exist on all platforms
Packit 345191
dnl that jemalloc currently has a chance of functioning on without modification.
Packit 345191
dnl We additionally assume ffs[ll]() or __builtin_ffs[ll]() are defined if
Packit 345191
dnl ffsl() or __builtin_ffsl() are defined, respectively.
Packit 345191
JE_COMPILABLE([a program using __builtin_ffsl], [
Packit 345191
#include <stdio.h>
Packit 345191
#include <strings.h>
Packit 345191
#include <string.h>
Packit 345191
], [
Packit 345191
	{
Packit 345191
		int rv = __builtin_ffsl(0x08);
Packit 345191
		printf("%d\n", rv);
Packit 345191
	}
Packit 345191
], [je_cv_gcc_builtin_ffsl])
Packit 345191
if test "x${je_cv_gcc_builtin_ffsl}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_INTERNAL_FFSLL], [__builtin_ffsll])
Packit 345191
  AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [__builtin_ffsl])
Packit 345191
  AC_DEFINE([JEMALLOC_INTERNAL_FFS], [__builtin_ffs])
Packit 345191
else
Packit 345191
  JE_COMPILABLE([a program using ffsl], [
Packit 345191
  #include <stdio.h>
Packit 345191
  #include <strings.h>
Packit 345191
  #include <string.h>
Packit 345191
  ], [
Packit 345191
	{
Packit 345191
		int rv = ffsl(0x08);
Packit 345191
		printf("%d\n", rv);
Packit 345191
	}
Packit 345191
  ], [je_cv_function_ffsl])
Packit 345191
  if test "x${je_cv_function_ffsl}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_INTERNAL_FFSLL], [ffsll])
Packit 345191
    AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [ffsl])
Packit 345191
    AC_DEFINE([JEMALLOC_INTERNAL_FFS], [ffs])
Packit 345191
  else
Packit 345191
    AC_MSG_ERROR([Cannot build without ffsl(3) or __builtin_ffsl()])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
JE_COMPILABLE([a program using __builtin_popcountl], [
Packit 345191
#include <stdio.h>
Packit 345191
#include <strings.h>
Packit 345191
#include <string.h>
Packit 345191
], [
Packit 345191
	{
Packit 345191
		int rv = __builtin_popcountl(0x08);
Packit 345191
		printf("%d\n", rv);
Packit 345191
	}
Packit 345191
], [je_cv_gcc_builtin_popcountl])
Packit 345191
if test "x${je_cv_gcc_builtin_popcountl}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_INTERNAL_POPCOUNT], [__builtin_popcount])
Packit 345191
  AC_DEFINE([JEMALLOC_INTERNAL_POPCOUNTL], [__builtin_popcountl])
Packit 345191
fi
Packit 345191
Packit 345191
AC_ARG_WITH([lg_quantum],
Packit 345191
  [AS_HELP_STRING([--with-lg-quantum=<lg-quantum>],
Packit 345191
   [Base 2 log of minimum allocation alignment])],
Packit 345191
  [LG_QUANTA="$with_lg_quantum"],
Packit 345191
  [LG_QUANTA="3 4"])
Packit 345191
if test "x$with_lg_quantum" != "x" ; then
Packit 345191
  AC_DEFINE_UNQUOTED([LG_QUANTUM], [$with_lg_quantum])
Packit 345191
fi
Packit 345191
Packit 345191
AC_ARG_WITH([lg_page],
Packit 345191
  [AS_HELP_STRING([--with-lg-page=<lg-page>], [Base 2 log of system page size])],
Packit 345191
  [LG_PAGE="$with_lg_page"], [LG_PAGE="detect"])
Packit 345191
if test "x$LG_PAGE" = "xdetect"; then
Packit 345191
  AC_CACHE_CHECK([LG_PAGE],
Packit 345191
               [je_cv_lg_page],
Packit 345191
               AC_RUN_IFELSE([AC_LANG_PROGRAM(
Packit 345191
[[
Packit 345191
#include <strings.h>
Packit 345191
#ifdef _WIN32
Packit 345191
#include <windows.h>
Packit 345191
#else
Packit 345191
#include <unistd.h>
Packit 345191
#endif
Packit 345191
#include <stdio.h>
Packit 345191
]],
Packit 345191
[[
Packit 345191
    int result;
Packit 345191
    FILE *f;
Packit 345191
Packit 345191
#ifdef _WIN32
Packit 345191
    SYSTEM_INFO si;
Packit 345191
    GetSystemInfo(&si);
Packit 345191
    result = si.dwPageSize;
Packit 345191
#else
Packit 345191
    result = sysconf(_SC_PAGESIZE);
Packit 345191
#endif
Packit 345191
    if (result == -1) {
Packit 345191
	return 1;
Packit 345191
    }
Packit 345191
    result = JEMALLOC_INTERNAL_FFSL(result) - 1;
Packit 345191
Packit 345191
    f = fopen("conftest.out", "w");
Packit 345191
    if (f == NULL) {
Packit 345191
	return 1;
Packit 345191
    }
Packit 345191
    fprintf(f, "%d", result);
Packit 345191
    fclose(f);
Packit 345191
Packit 345191
    return 0;
Packit 345191
]])],
Packit 345191
                             [je_cv_lg_page=`cat conftest.out`],
Packit 345191
                             [je_cv_lg_page=undefined],
Packit 345191
                             [je_cv_lg_page=12]))
Packit 345191
fi
Packit 345191
if test "x${je_cv_lg_page}" != "x" ; then
Packit 345191
  LG_PAGE="${je_cv_lg_page}"
Packit 345191
fi
Packit 345191
if test "x${LG_PAGE}" != "xundefined" ; then
Packit 345191
   AC_DEFINE_UNQUOTED([LG_PAGE], [$LG_PAGE])
Packit 345191
else
Packit 345191
   AC_MSG_ERROR([cannot determine value for LG_PAGE])
Packit 345191
fi
Packit 345191
Packit 345191
AC_ARG_WITH([lg_hugepage],
Packit 345191
  [AS_HELP_STRING([--with-lg-hugepage=<lg-hugepage>],
Packit 345191
   [Base 2 log of system huge page size])],
Packit 345191
  [je_cv_lg_hugepage="${with_lg_hugepage}"],
Packit 345191
  [je_cv_lg_hugepage=""])
Packit 345191
if test "x${je_cv_lg_hugepage}" = "x" ; then
Packit 345191
  dnl Look in /proc/meminfo (Linux-specific) for information on the default huge
Packit 345191
  dnl page size, if any.  The relevant line looks like:
Packit 345191
  dnl
Packit 345191
  dnl   Hugepagesize:       2048 kB
Packit 345191
  if test -e "/proc/meminfo" ; then
Packit 345191
    hpsk=[`cat /proc/meminfo 2>/dev/null | \
Packit 345191
          grep -e '^Hugepagesize:[[:space:]]\+[0-9]\+[[:space:]]kB$' | \
Packit 345191
          awk '{print $2}'`]
Packit 345191
    if test "x${hpsk}" != "x" ; then
Packit 345191
      je_cv_lg_hugepage=10
Packit 345191
      while test "${hpsk}" -gt 1 ; do
Packit 345191
        hpsk="$((hpsk / 2))"
Packit 345191
        je_cv_lg_hugepage="$((je_cv_lg_hugepage + 1))"
Packit 345191
      done
Packit 345191
    fi
Packit 345191
  fi
Packit 345191
Packit 345191
  dnl Set default if unable to automatically configure.
Packit 345191
  if test "x${je_cv_lg_hugepage}" = "x" ; then
Packit 345191
    je_cv_lg_hugepage=21
Packit 345191
  fi
Packit 345191
fi
Packit 345191
if test "x${LG_PAGE}" != "xundefined" -a \
Packit 345191
        "${je_cv_lg_hugepage}" -lt "${LG_PAGE}" ; then
Packit 345191
  AC_MSG_ERROR([Huge page size (2^${je_cv_lg_hugepage}) must be at least page size (2^${LG_PAGE})])
Packit 345191
fi
Packit 345191
AC_DEFINE_UNQUOTED([LG_HUGEPAGE], [${je_cv_lg_hugepage}])
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Enable libdl by default.
Packit 345191
AC_ARG_ENABLE([libdl],
Packit 345191
  [AS_HELP_STRING([--disable-libdl],
Packit 345191
  [Do not use libdl])],
Packit 345191
[if test "x$enable_libdl" = "xno" ; then
Packit 345191
  enable_libdl="0"
Packit 345191
else
Packit 345191
  enable_libdl="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_libdl="1"]
Packit 345191
)
Packit 345191
AC_SUBST([libdl])
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Configure pthreads.
Packit 345191
Packit 345191
if test "x$abi" != "xpecoff" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_PTHREAD], [ ])
Packit 345191
  AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])])
Packit 345191
  dnl Some systems may embed pthreads functionality in libc; check for libpthread
Packit 345191
  dnl first, but try libc too before failing.
Packit 345191
  AC_CHECK_LIB([pthread], [pthread_create], [JE_APPEND_VS(LIBS, -pthread)],
Packit 345191
               [AC_SEARCH_LIBS([pthread_create], , ,
Packit 345191
                               AC_MSG_ERROR([libpthread is missing]))])
Packit 345191
  wrap_syms="${wrap_syms} pthread_create"
Packit 345191
  have_pthread="1"
Packit 345191
Packit 345191
dnl Check if we have dlsym support.
Packit 345191
  if test "x$enable_libdl" = "x1" ; then
Packit 345191
    have_dlsym="1"
Packit 345191
    AC_CHECK_HEADERS([dlfcn.h], , [have_dlsym="0"])
Packit 345191
    check_dlsym_in_libdl="0"
Packit 345191
    if test "x$have_dlsym" = "x1" ; then
Packit 345191
      AC_CHECK_FUNC([dlsym], [], [check_dlsym_in_libdl="1"])
Packit 345191
    fi
Packit 345191
    if test "x$check_dlsym_in_libdl" = "x1" ; then
Packit 345191
      AC_CHECK_LIB([dl], [dlsym], [LIBS="$LIBS -ldl"], [have_dlsym="0"])
Packit 345191
    fi
Packit 345191
    if test "x$have_dlsym" = "x1" ; then
Packit 345191
      AC_DEFINE([JEMALLOC_HAVE_DLSYM], [ ])
Packit 345191
    fi
Packit 345191
  else
Packit 345191
    have_dlsym="0"
Packit 345191
  fi
Packit 345191
Packit 345191
  JE_COMPILABLE([pthread_atfork(3)], [
Packit 345191
#include <pthread.h>
Packit 345191
], [
Packit 345191
  pthread_atfork((void *)0, (void *)0, (void *)0);
Packit 345191
], [je_cv_pthread_atfork])
Packit 345191
  if test "x${je_cv_pthread_atfork}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_HAVE_PTHREAD_ATFORK], [ ])
Packit 345191
  fi
Packit 345191
  dnl Check if pthread_setname_np is available with the expected API.
Packit 345191
  JE_COMPILABLE([pthread_setname_np(3)], [
Packit 345191
#include <pthread.h>
Packit 345191
], [
Packit 345191
  pthread_setname_np(pthread_self(), "setname_test");
Packit 345191
], [je_cv_pthread_setname_np])
Packit 345191
  if test "x${je_cv_pthread_setname_np}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_HAVE_PTHREAD_SETNAME_NP], [ ])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
JE_APPEND_VS(CPPFLAGS, -D_REENTRANT)
Packit 345191
Packit 345191
dnl Check whether clock_gettime(2) is in libc or librt.
Packit 345191
AC_SEARCH_LIBS([clock_gettime], [rt])
Packit 345191
Packit 345191
dnl Cray wrapper compiler often adds `-lrt` when using `-static`. Check with
Packit 345191
dnl `-dynamic` as well in case a user tries to dynamically link in jemalloc
Packit 345191
if test "x$je_cv_cray_prgenv_wrapper" = "xyes" ; then
Packit 345191
  if test "$ac_cv_search_clock_gettime" != "-lrt"; then
Packit 345191
    JE_CFLAGS_SAVE()
Packit 345191
Packit 345191
    unset ac_cv_search_clock_gettime
Packit 345191
    JE_CFLAGS_ADD([-dynamic])
Packit 345191
    AC_SEARCH_LIBS([clock_gettime], [rt])
Packit 345191
Packit 345191
    JE_CFLAGS_RESTORE()
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
dnl check for CLOCK_MONOTONIC_COARSE (Linux-specific).
Packit 345191
JE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC_COARSE, ...)], [
Packit 345191
#include <time.h>
Packit 345191
], [
Packit 345191
	struct timespec ts;
Packit 345191
Packit 345191
	clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
Packit 345191
], [je_cv_clock_monotonic_coarse])
Packit 345191
if test "x${je_cv_clock_monotonic_coarse}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE])
Packit 345191
fi
Packit 345191
Packit 345191
dnl check for CLOCK_MONOTONIC.
Packit 345191
JE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC, ...)], [
Packit 345191
#include <unistd.h>
Packit 345191
#include <time.h>
Packit 345191
], [
Packit 345191
	struct timespec ts;
Packit 345191
Packit 345191
	clock_gettime(CLOCK_MONOTONIC, &ts);
Packit 345191
#if !defined(_POSIX_MONOTONIC_CLOCK) || _POSIX_MONOTONIC_CLOCK < 0
Packit 345191
#  error _POSIX_MONOTONIC_CLOCK missing/invalid
Packit 345191
#endif
Packit 345191
], [je_cv_clock_monotonic])
Packit 345191
if test "x${je_cv_clock_monotonic}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check for mach_absolute_time().
Packit 345191
JE_COMPILABLE([mach_absolute_time()], [
Packit 345191
#include <mach/mach_time.h>
Packit 345191
], [
Packit 345191
	mach_absolute_time();
Packit 345191
], [je_cv_mach_absolute_time])
Packit 345191
if test "x${je_cv_mach_absolute_time}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_MACH_ABSOLUTE_TIME])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Use syscall(2) (if available) by default.
Packit 345191
AC_ARG_ENABLE([syscall],
Packit 345191
  [AS_HELP_STRING([--disable-syscall], [Disable use of syscall(2)])],
Packit 345191
[if test "x$enable_syscall" = "xno" ; then
Packit 345191
  enable_syscall="0"
Packit 345191
else
Packit 345191
  enable_syscall="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_syscall="1"]
Packit 345191
)
Packit 345191
if test "x$enable_syscall" = "x1" ; then
Packit 345191
  dnl Check if syscall(2) is usable.  Treat warnings as errors, so that e.g. OS
Packit 345191
  dnl X 10.12's deprecation warning prevents use.
Packit 345191
  JE_CFLAGS_SAVE()
Packit 345191
  JE_CFLAGS_ADD([-Werror])
Packit 345191
  JE_COMPILABLE([syscall(2)], [
Packit 345191
#include <sys/syscall.h>
Packit 345191
#include <unistd.h>
Packit 345191
], [
Packit 345191
	syscall(SYS_write, 2, "hello", 5);
Packit 345191
],
Packit 345191
                [je_cv_syscall])
Packit 345191
  JE_CFLAGS_RESTORE()
Packit 345191
  if test "x$je_cv_syscall" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_USE_SYSCALL], [ ])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check if the GNU-specific secure_getenv function exists.
Packit 345191
AC_CHECK_FUNC([secure_getenv],
Packit 345191
              [have_secure_getenv="1"],
Packit 345191
              [have_secure_getenv="0"]
Packit 345191
             )
Packit 345191
if test "x$have_secure_getenv" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_SECURE_GETENV], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check if the GNU-specific sched_getcpu function exists.
Packit 345191
AC_CHECK_FUNC([sched_getcpu],
Packit 345191
              [have_sched_getcpu="1"],
Packit 345191
              [have_sched_getcpu="0"]
Packit 345191
             )
Packit 345191
if test "x$have_sched_getcpu" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_SCHED_GETCPU], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check if the GNU-specific sched_setaffinity function exists.
Packit 345191
AC_CHECK_FUNC([sched_setaffinity],
Packit 345191
              [have_sched_setaffinity="1"],
Packit 345191
              [have_sched_setaffinity="0"]
Packit 345191
             )
Packit 345191
if test "x$have_sched_setaffinity" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_SCHED_SETAFFINITY], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check if the Solaris/BSD issetugid function exists.
Packit 345191
AC_CHECK_FUNC([issetugid],
Packit 345191
              [have_issetugid="1"],
Packit 345191
              [have_issetugid="0"]
Packit 345191
             )
Packit 345191
if test "x$have_issetugid" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_ISSETUGID], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check whether the BSD-specific _malloc_thread_cleanup() exists.  If so, use
Packit 345191
dnl it rather than pthreads TSD cleanup functions to support cleanup during
Packit 345191
dnl thread exit, in order to avoid pthreads library recursion during
Packit 345191
dnl bootstrapping.
Packit 345191
AC_CHECK_FUNC([_malloc_thread_cleanup],
Packit 345191
              [have__malloc_thread_cleanup="1"],
Packit 345191
              [have__malloc_thread_cleanup="0"]
Packit 345191
             )
Packit 345191
if test "x$have__malloc_thread_cleanup" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_MALLOC_THREAD_CLEANUP], [ ])
Packit 345191
  wrap_syms="${wrap_syms} _malloc_thread_cleanup"
Packit 345191
  force_tls="1"
Packit 345191
fi
Packit 345191
Packit 345191
dnl Check whether the BSD-specific _pthread_mutex_init_calloc_cb() exists.  If
Packit 345191
dnl so, mutex initialization causes allocation, and we need to implement this
Packit 345191
dnl callback function in order to prevent recursive allocation.
Packit 345191
AC_CHECK_FUNC([_pthread_mutex_init_calloc_cb],
Packit 345191
              [have__pthread_mutex_init_calloc_cb="1"],
Packit 345191
              [have__pthread_mutex_init_calloc_cb="0"]
Packit 345191
             )
Packit 345191
if test "x$have__pthread_mutex_init_calloc_cb" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_MUTEX_INIT_CB])
Packit 345191
  wrap_syms="${wrap_syms} _malloc_prefork _malloc_postfork"
Packit 345191
fi
Packit 345191
Packit 345191
dnl Disable lazy locking by default.
Packit 345191
AC_ARG_ENABLE([lazy_lock],
Packit 345191
  [AS_HELP_STRING([--enable-lazy-lock],
Packit 345191
  [Enable lazy locking (only lock when multi-threaded)])],
Packit 345191
[if test "x$enable_lazy_lock" = "xno" ; then
Packit 345191
  enable_lazy_lock="0"
Packit 345191
else
Packit 345191
  enable_lazy_lock="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_lazy_lock=""]
Packit 345191
)
Packit 345191
if test "x${enable_lazy_lock}" = "x" ; then
Packit 345191
  if test "x${force_lazy_lock}" = "x1" ; then
Packit 345191
    AC_MSG_RESULT([Forcing lazy-lock to avoid allocator/threading bootstrap issues])
Packit 345191
    enable_lazy_lock="1"
Packit 345191
  else
Packit 345191
    enable_lazy_lock="0"
Packit 345191
  fi
Packit 345191
fi
Packit 345191
if test "x${enable_lazy_lock}" = "x1" -a "x${abi}" = "xpecoff" ; then
Packit 345191
  AC_MSG_RESULT([Forcing no lazy-lock because thread creation monitoring is unimplemented])
Packit 345191
  enable_lazy_lock="0"
Packit 345191
fi
Packit 345191
if test "x$enable_lazy_lock" = "x1" ; then
Packit 345191
  if test "x$have_dlsym" = "x1" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_LAZY_LOCK], [ ])
Packit 345191
  else
Packit 345191
    AC_MSG_ERROR([Missing dlsym support: lazy-lock cannot be enabled.])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
AC_SUBST([enable_lazy_lock])
Packit 345191
Packit 345191
dnl Automatically configure TLS.
Packit 345191
if test "x${force_tls}" = "x1" ; then
Packit 345191
  enable_tls="1"
Packit 345191
elif test "x${force_tls}" = "x0" ; then
Packit 345191
  enable_tls="0"
Packit 345191
else
Packit 345191
  enable_tls="1"
Packit 345191
fi
Packit 345191
if test "x${enable_tls}" = "x1" ; then
Packit 345191
AC_MSG_CHECKING([for TLS])
Packit 345191
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Packit 345191
[[
Packit 345191
    __thread int x;
Packit 345191
]], [[
Packit 345191
    x = 42;
Packit 345191
Packit 345191
    return 0;
Packit 345191
]])],
Packit 345191
              AC_MSG_RESULT([yes]),
Packit 345191
              AC_MSG_RESULT([no])
Packit 345191
              enable_tls="0")
Packit 345191
else
Packit 345191
  enable_tls="0"
Packit 345191
fi
Packit 345191
AC_SUBST([enable_tls])
Packit 345191
if test "x${enable_tls}" = "x1" ; then
Packit 345191
  AC_DEFINE_UNQUOTED([JEMALLOC_TLS], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for C11 atomics.
Packit 345191
Packit 345191
JE_COMPILABLE([C11 atomics], [
Packit 345191
#include <stdint.h>
Packit 345191
#if (__STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_ATOMICS__)
Packit 345191
#include <stdatomic.h>
Packit 345191
#else
Packit 345191
#error Atomics not available
Packit 345191
#endif
Packit 345191
], [
Packit 345191
    uint64_t *p = (uint64_t *)0;
Packit 345191
    uint64_t x = 1;
Packit 345191
    volatile atomic_uint_least64_t *a = (volatile atomic_uint_least64_t *)p;
Packit 345191
    uint64_t r = atomic_fetch_add(a, x) + x;
Packit 345191
    return r == 0;
Packit 345191
], [je_cv_c11_atomics])
Packit 345191
if test "x${je_cv_c11_atomics}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_C11_ATOMICS])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for GCC-style __atomic atomics.
Packit 345191
Packit 345191
JE_COMPILABLE([GCC __atomic atomics], [
Packit 345191
], [
Packit 345191
    int x = 0;
Packit 345191
    int val = 1;
Packit 345191
    int y = __atomic_fetch_add(&x, val, __ATOMIC_RELAXED);
Packit 345191
    int after_add = x;
Packit 345191
    return after_add == 1;
Packit 345191
], [je_cv_gcc_atomic_atomics])
Packit 345191
if test "x${je_cv_gcc_atomic_atomics}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_GCC_ATOMIC_ATOMICS])
Packit 345191
Packit 345191
  dnl check for 8-bit atomic support
Packit 345191
  JE_COMPILABLE([GCC 8-bit __atomic atomics], [
Packit 345191
  ], [
Packit 345191
      unsigned char x = 0;
Packit 345191
      int val = 1;
Packit 345191
      int y = __atomic_fetch_add(&x, val, __ATOMIC_RELAXED);
Packit 345191
      int after_add = (int)x;
Packit 345191
      return after_add == 1;
Packit 345191
  ], [je_cv_gcc_u8_atomic_atomics])
Packit 345191
  if test "x${je_cv_gcc_u8_atomic_atomics}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_GCC_U8_ATOMIC_ATOMICS])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for GCC-style __sync atomics.
Packit 345191
Packit 345191
JE_COMPILABLE([GCC __sync atomics], [
Packit 345191
], [
Packit 345191
    int x = 0;
Packit 345191
    int before_add = __sync_fetch_and_add(&x, 1);
Packit 345191
    int after_add = x;
Packit 345191
    return (before_add == 0) && (after_add == 1);
Packit 345191
], [je_cv_gcc_sync_atomics])
Packit 345191
if test "x${je_cv_gcc_sync_atomics}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_GCC_SYNC_ATOMICS])
Packit 345191
Packit 345191
  dnl check for 8-bit atomic support
Packit 345191
  JE_COMPILABLE([GCC 8-bit __sync atomics], [
Packit 345191
  ], [
Packit 345191
      unsigned char x = 0;
Packit 345191
      int before_add = __sync_fetch_and_add(&x, 1);
Packit 345191
      int after_add = (int)x;
Packit 345191
      return (before_add == 0) && (after_add == 1);
Packit 345191
  ], [je_cv_gcc_u8_sync_atomics])
Packit 345191
  if test "x${je_cv_gcc_u8_sync_atomics}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_GCC_U8_SYNC_ATOMICS])
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for atomic(3) operations as provided on Darwin.
Packit 345191
dnl We need this not for the atomic operations (which are provided above), but
Packit 345191
dnl rather for the OS_unfair_lock type it exposes.
Packit 345191
Packit 345191
JE_COMPILABLE([Darwin OSAtomic*()], [
Packit 345191
#include <libkern/OSAtomic.h>
Packit 345191
#include <inttypes.h>
Packit 345191
], [
Packit 345191
	{
Packit 345191
		int32_t x32 = 0;
Packit 345191
		volatile int32_t *x32p = &x3;;
Packit 345191
		OSAtomicAdd32(1, x32p);
Packit 345191
	}
Packit 345191
	{
Packit 345191
		int64_t x64 = 0;
Packit 345191
		volatile int64_t *x64p = &x6;;
Packit 345191
		OSAtomicAdd64(1, x64p);
Packit 345191
	}
Packit 345191
], [je_cv_osatomic])
Packit 345191
if test "x${je_cv_osatomic}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_OSATOMIC], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for madvise(2).
Packit 345191
Packit 345191
JE_COMPILABLE([madvise(2)], [
Packit 345191
#include <sys/mman.h>
Packit 345191
], [
Packit 345191
	madvise((void *)0, 0, 0);
Packit 345191
], [je_cv_madvise])
Packit 345191
if test "x${je_cv_madvise}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_MADVISE], [ ])
Packit 345191
Packit 345191
  dnl Check for madvise(..., MADV_FREE).
Packit 345191
  JE_COMPILABLE([madvise(..., MADV_FREE)], [
Packit 345191
#include <sys/mman.h>
Packit 345191
], [
Packit 345191
	madvise((void *)0, 0, MADV_FREE);
Packit 345191
], [je_cv_madv_free])
Packit 345191
  if test "x${je_cv_madv_free}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
Packit 345191
  elif test "x${je_cv_madvise}" = "xyes" ; then
Packit 345191
    case "${host_cpu}" in i686|x86_64)
Packit 345191
        case "${host}" in *-*-linux*)
Packit 345191
            AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
Packit 345191
            AC_DEFINE([JEMALLOC_DEFINE_MADVISE_FREE], [ ])
Packit 345191
	    ;;
Packit 345191
        esac
Packit 345191
        ;;
Packit 345191
    esac
Packit 345191
  fi
Packit 345191
Packit 345191
  dnl Check for madvise(..., MADV_DONTNEED).
Packit 345191
  JE_COMPILABLE([madvise(..., MADV_DONTNEED)], [
Packit 345191
#include <sys/mman.h>
Packit 345191
], [
Packit 345191
	madvise((void *)0, 0, MADV_DONTNEED);
Packit 345191
], [je_cv_madv_dontneed])
Packit 345191
  if test "x${je_cv_madv_dontneed}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ])
Packit 345191
  fi
Packit 345191
Packit 345191
  dnl Check for madvise(..., MADV_DO[NT]DUMP).
Packit 345191
  JE_COMPILABLE([madvise(..., MADV_DO[[NT]]DUMP)], [
Packit 345191
#include <sys/mman.h>
Packit 345191
], [
Packit 345191
	madvise((void *)0, 0, MADV_DONTDUMP);
Packit 345191
	madvise((void *)0, 0, MADV_DODUMP);
Packit 345191
], [je_cv_madv_dontdump])
Packit 345191
  if test "x${je_cv_madv_dontdump}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_MADVISE_DONTDUMP], [ ])
Packit 345191
  fi
Packit 345191
Packit 345191
  dnl Check for madvise(..., MADV_[NO]HUGEPAGE).
Packit 345191
  JE_COMPILABLE([madvise(..., MADV_[[NO]]HUGEPAGE)], [
Packit 345191
#include <sys/mman.h>
Packit 345191
], [
Packit 345191
	madvise((void *)0, 0, MADV_HUGEPAGE);
Packit 345191
	madvise((void *)0, 0, MADV_NOHUGEPAGE);
Packit 345191
], [je_cv_thp])
Packit 345191
case "${host_cpu}" in
Packit 345191
  arm*)
Packit 345191
    ;;
Packit 345191
  *)
Packit 345191
  if test "x${je_cv_thp}" = "xyes" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_HAVE_MADVISE_HUGE], [ ])
Packit 345191
  fi
Packit 345191
  ;;
Packit 345191
esac
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for __builtin_clz() and __builtin_clzl().
Packit 345191
Packit 345191
AC_CACHE_CHECK([for __builtin_clz],
Packit 345191
               [je_cv_builtin_clz],
Packit 345191
               [AC_LINK_IFELSE([AC_LANG_PROGRAM([],
Packit 345191
                                                [
Packit 345191
                                                {
Packit 345191
                                                        unsigned x = 0;
Packit 345191
                                                        int y = __builtin_clz(x);
Packit 345191
                                                }
Packit 345191
                                                {
Packit 345191
                                                        unsigned long x = 0;
Packit 345191
                                                        int y = __builtin_clzl(x);
Packit 345191
                                                }
Packit 345191
                                                ])],
Packit 345191
                               [je_cv_builtin_clz=yes],
Packit 345191
                               [je_cv_builtin_clz=no])])
Packit 345191
Packit 345191
if test "x${je_cv_builtin_clz}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_BUILTIN_CLZ], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for os_unfair_lock operations as provided on Darwin.
Packit 345191
Packit 345191
JE_COMPILABLE([Darwin os_unfair_lock_*()], [
Packit 345191
#include <os/lock.h>
Packit 345191
#include <AvailabilityMacros.h>
Packit 345191
], [
Packit 345191
	#if MAC_OS_X_VERSION_MIN_REQUIRED < 101200
Packit 345191
	#error "os_unfair_lock is not supported"
Packit 345191
	#else
Packit 345191
	os_unfair_lock lock = OS_UNFAIR_LOCK_INIT;
Packit 345191
	os_unfair_lock_lock(&lock);
Packit 345191
	os_unfair_lock_unlock(&lock);
Packit 345191
	#endif
Packit 345191
], [je_cv_os_unfair_lock])
Packit 345191
if test "x${je_cv_os_unfair_lock}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_OS_UNFAIR_LOCK], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Darwin-related configuration.
Packit 345191
Packit 345191
AC_ARG_ENABLE([zone-allocator],
Packit 345191
  [AS_HELP_STRING([--disable-zone-allocator],
Packit 345191
                  [Disable zone allocator for Darwin])],
Packit 345191
[if test "x$enable_zone_allocator" = "xno" ; then
Packit 345191
  enable_zone_allocator="0"
Packit 345191
else
Packit 345191
  enable_zone_allocator="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[if test "x${abi}" = "xmacho"; then
Packit 345191
  enable_zone_allocator="1"
Packit 345191
fi
Packit 345191
]
Packit 345191
)
Packit 345191
AC_SUBST([enable_zone_allocator])
Packit 345191
Packit 345191
if test "x${enable_zone_allocator}" = "x1" ; then
Packit 345191
  if test "x${abi}" != "xmacho"; then
Packit 345191
    AC_MSG_ERROR([--enable-zone-allocator is only supported on Darwin])
Packit 345191
  fi
Packit 345191
  AC_DEFINE([JEMALLOC_ZONE], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Use initial-exec TLS by default.
Packit 345191
AC_ARG_ENABLE([initial-exec-tls],
Packit 345191
  [AS_HELP_STRING([--disable-initial-exec-tls],
Packit 345191
                  [Disable the initial-exec tls model])],
Packit 345191
[if test "x$enable_initial_exec_tls" = "xno" ; then
Packit 345191
  enable_initial_exec_tls="0"
Packit 345191
else
Packit 345191
  enable_initial_exec_tls="1"
Packit 345191
fi
Packit 345191
],
Packit 345191
[enable_initial_exec_tls="1"]
Packit 345191
)
Packit 345191
AC_SUBST([enable_initial_exec_tls])
Packit 345191
Packit 345191
if test "x${je_cv_tls_model}" = "xyes" -a \
Packit 345191
       "x${enable_initial_exec_tls}" = "x1" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_TLS_MODEL],
Packit 345191
            [__attribute__((tls_model("initial-exec")))])
Packit 345191
else
Packit 345191
  AC_DEFINE([JEMALLOC_TLS_MODEL], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Enable background threads if possible.
Packit 345191
Packit 345191
if test "x${have_pthread}" = "x1" -a "x${je_cv_os_unfair_lock}" != "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_BACKGROUND_THREAD])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for glibc malloc hooks
Packit 345191
Packit 345191
JE_COMPILABLE([glibc malloc hook], [
Packit 345191
#include <stddef.h>
Packit 345191
Packit 345191
extern void (* __free_hook)(void *ptr);
Packit 345191
extern void *(* __malloc_hook)(size_t size);
Packit 345191
extern void *(* __realloc_hook)(void *ptr, size_t size);
Packit 345191
], [
Packit 345191
  void *ptr = 0L;
Packit 345191
  if (__malloc_hook) ptr = __malloc_hook(1);
Packit 345191
  if (__realloc_hook) ptr = __realloc_hook(ptr, 2);
Packit 345191
  if (__free_hook && ptr) __free_hook(ptr);
Packit 345191
], [je_cv_glibc_malloc_hook])
Packit 345191
if test "x${je_cv_glibc_malloc_hook}" = "xyes" ; then
Packit 345191
  if test "x${JEMALLOC_PREFIX}" = "x" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_GLIBC_MALLOC_HOOK], [ ])
Packit 345191
    wrap_syms="${wrap_syms} __free_hook __malloc_hook __realloc_hook"
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
JE_COMPILABLE([glibc memalign hook], [
Packit 345191
#include <stddef.h>
Packit 345191
Packit 345191
extern void *(* __memalign_hook)(size_t alignment, size_t size);
Packit 345191
], [
Packit 345191
  void *ptr = 0L;
Packit 345191
  if (__memalign_hook) ptr = __memalign_hook(16, 7);
Packit 345191
], [je_cv_glibc_memalign_hook])
Packit 345191
if test "x${je_cv_glibc_memalign_hook}" = "xyes" ; then
Packit 345191
  if test "x${JEMALLOC_PREFIX}" = "x" ; then
Packit 345191
    AC_DEFINE([JEMALLOC_GLIBC_MEMALIGN_HOOK], [ ])
Packit 345191
    wrap_syms="${wrap_syms} __memalign_hook"
Packit 345191
  fi
Packit 345191
fi
Packit 345191
Packit 345191
JE_COMPILABLE([pthreads adaptive mutexes], [
Packit 345191
#include <pthread.h>
Packit 345191
], [
Packit 345191
  pthread_mutexattr_t attr;
Packit 345191
  pthread_mutexattr_init(&attr);
Packit 345191
  pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
Packit 345191
  pthread_mutexattr_destroy(&attr);
Packit 345191
], [je_cv_pthread_mutex_adaptive_np])
Packit 345191
if test "x${je_cv_pthread_mutex_adaptive_np}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
JE_CFLAGS_SAVE()
Packit 345191
JE_CFLAGS_ADD([-D_GNU_SOURCE])
Packit 345191
JE_CFLAGS_ADD([-Werror])
Packit 345191
JE_CFLAGS_ADD([-herror_on_warning])
Packit 345191
JE_COMPILABLE([strerror_r returns char with gnu source], [
Packit 345191
#include <errno.h>
Packit 345191
#include <stdio.h>
Packit 345191
#include <stdlib.h>
Packit 345191
#include <string.h>
Packit 345191
], [
Packit 345191
  char *buffer = (char *) malloc(100);
Packit 345191
  char *error = strerror_r(EINVAL, buffer, 100);
Packit 345191
  printf("%s\n", error);
Packit 345191
], [je_cv_strerror_r_returns_char_with_gnu_source])
Packit 345191
JE_CFLAGS_RESTORE()
Packit 345191
if test "x${je_cv_strerror_r_returns_char_with_gnu_source}" = "xyes" ; then
Packit 345191
  AC_DEFINE([JEMALLOC_STRERROR_R_RETURNS_CHAR_WITH_GNU_SOURCE], [ ])
Packit 345191
fi
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Check for typedefs, structures, and compiler characteristics.
Packit 345191
AC_HEADER_STDBOOL
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Define commands that generate output files.
Packit 345191
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/internal/public_symbols.txt], [
Packit 345191
  f="${objroot}include/jemalloc/internal/public_symbols.txt"
Packit 345191
  mkdir -p "${objroot}include/jemalloc/internal"
Packit 345191
  cp /dev/null "${f}"
Packit 345191
  for nm in `echo ${mangling_map} |tr ',' ' '` ; do
Packit 345191
    n=`echo ${nm} |tr ':' ' ' |awk '{print $[]1}'`
Packit 345191
    m=`echo ${nm} |tr ':' ' ' |awk '{print $[]2}'`
Packit 345191
    echo "${n}:${m}" >> "${f}"
Packit 345191
    dnl Remove name from public_syms so that it isn't redefined later.
Packit 345191
    public_syms=`for sym in ${public_syms}; do echo "${sym}"; done |grep -v "^${n}\$" |tr '\n' ' '`
Packit 345191
  done
Packit 345191
  for sym in ${public_syms} ; do
Packit 345191
    n="${sym}"
Packit 345191
    m="${JEMALLOC_PREFIX}${sym}"
Packit 345191
    echo "${n}:${m}" >> "${f}"
Packit 345191
  done
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
  mangling_map="${mangling_map}"
Packit 345191
  public_syms="${public_syms}"
Packit 345191
  JEMALLOC_PREFIX="${JEMALLOC_PREFIX}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/internal/private_symbols.awk], [
Packit 345191
  f="${objroot}include/jemalloc/internal/private_symbols.awk"
Packit 345191
  mkdir -p "${objroot}include/jemalloc/internal"
Packit 345191
  export_syms=`for sym in ${public_syms}; do echo "${JEMALLOC_PREFIX}${sym}"; done; for sym in ${wrap_syms}; do echo "${sym}"; done;`
Packit 345191
  "${srcdir}/include/jemalloc/internal/private_symbols.sh" "${SYM_PREFIX}" ${export_syms} > "${objroot}include/jemalloc/internal/private_symbols.awk"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
  public_syms="${public_syms}"
Packit 345191
  wrap_syms="${wrap_syms}"
Packit 345191
  SYM_PREFIX="${SYM_PREFIX}"
Packit 345191
  JEMALLOC_PREFIX="${JEMALLOC_PREFIX}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/internal/private_symbols_jet.awk], [
Packit 345191
  f="${objroot}include/jemalloc/internal/private_symbols_jet.awk"
Packit 345191
  mkdir -p "${objroot}include/jemalloc/internal"
Packit 345191
  export_syms=`for sym in ${public_syms}; do echo "jet_${sym}"; done; for sym in ${wrap_syms}; do echo "${sym}"; done;`
Packit 345191
  "${srcdir}/include/jemalloc/internal/private_symbols.sh" "${SYM_PREFIX}" ${export_syms} > "${objroot}include/jemalloc/internal/private_symbols_jet.awk"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
  public_syms="${public_syms}"
Packit 345191
  wrap_syms="${wrap_syms}"
Packit 345191
  SYM_PREFIX="${SYM_PREFIX}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/internal/public_namespace.h], [
Packit 345191
  mkdir -p "${objroot}include/jemalloc/internal"
Packit 345191
  "${srcdir}/include/jemalloc/internal/public_namespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_namespace.h"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/internal/public_unnamespace.h], [
Packit 345191
  mkdir -p "${objroot}include/jemalloc/internal"
Packit 345191
  "${srcdir}/include/jemalloc/internal/public_unnamespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_unnamespace.h"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_protos_jet.h], [
Packit 345191
  mkdir -p "${objroot}include/jemalloc"
Packit 345191
  cat "${srcdir}/include/jemalloc/jemalloc_protos.h.in" | sed -e 's/@je_@/jet_/g' > "${objroot}include/jemalloc/jemalloc_protos_jet.h"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_rename.h], [
Packit 345191
  mkdir -p "${objroot}include/jemalloc"
Packit 345191
  "${srcdir}/include/jemalloc/jemalloc_rename.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/jemalloc_rename.h"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle.h], [
Packit 345191
  mkdir -p "${objroot}include/jemalloc"
Packit 345191
  "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" je_ > "${objroot}include/jemalloc/jemalloc_mangle.h"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle_jet.h], [
Packit 345191
  mkdir -p "${objroot}include/jemalloc"
Packit 345191
  "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" jet_ > "${objroot}include/jemalloc/jemalloc_mangle_jet.h"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
])
Packit 345191
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc.h], [
Packit 345191
  mkdir -p "${objroot}include/jemalloc"
Packit 345191
  "${srcdir}/include/jemalloc/jemalloc.sh" "${objroot}" > "${objroot}include/jemalloc/jemalloc${install_suffix}.h"
Packit 345191
], [
Packit 345191
  srcdir="${srcdir}"
Packit 345191
  objroot="${objroot}"
Packit 345191
  install_suffix="${install_suffix}"
Packit 345191
])
Packit 345191
Packit 345191
dnl Process .in files.
Packit 345191
AC_SUBST([cfghdrs_in])
Packit 345191
AC_SUBST([cfghdrs_out])
Packit 345191
AC_CONFIG_HEADERS([$cfghdrs_tup])
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Generate outputs.
Packit 345191
Packit 345191
AC_CONFIG_FILES([$cfgoutputs_tup config.stamp bin/jemalloc-config bin/jemalloc.sh bin/jeprof])
Packit 345191
AC_SUBST([cfgoutputs_in])
Packit 345191
AC_SUBST([cfgoutputs_out])
Packit 345191
AC_OUTPUT
Packit 345191
Packit 345191
dnl ============================================================================
Packit 345191
dnl Print out the results of configuration.
Packit 345191
AC_MSG_RESULT([===============================================================================])
Packit 345191
AC_MSG_RESULT([jemalloc version   : ${jemalloc_version}])
Packit 345191
AC_MSG_RESULT([library revision   : ${rev}])
Packit 345191
AC_MSG_RESULT([])
Packit 345191
AC_MSG_RESULT([CONFIG             : ${CONFIG}])
Packit 345191
AC_MSG_RESULT([CC                 : ${CC}])
Packit 345191
AC_MSG_RESULT([CONFIGURE_CFLAGS   : ${CONFIGURE_CFLAGS}])
Packit 345191
AC_MSG_RESULT([SPECIFIED_CFLAGS   : ${SPECIFIED_CFLAGS}])
Packit 345191
AC_MSG_RESULT([EXTRA_CFLAGS       : ${EXTRA_CFLAGS}])
Packit 345191
AC_MSG_RESULT([CPPFLAGS           : ${CPPFLAGS}])
Packit 345191
AC_MSG_RESULT([CXX                : ${CXX}])
Packit 345191
AC_MSG_RESULT([CONFIGURE_CXXFLAGS : ${CONFIGURE_CXXFLAGS}])
Packit 345191
AC_MSG_RESULT([SPECIFIED_CXXFLAGS : ${SPECIFIED_CXXFLAGS}])
Packit 345191
AC_MSG_RESULT([EXTRA_CXXFLAGS     : ${EXTRA_CXXFLAGS}])
Packit 345191
AC_MSG_RESULT([LDFLAGS            : ${LDFLAGS}])
Packit 345191
AC_MSG_RESULT([EXTRA_LDFLAGS      : ${EXTRA_LDFLAGS}])
Packit 345191
AC_MSG_RESULT([DSO_LDFLAGS        : ${DSO_LDFLAGS}])
Packit 345191
AC_MSG_RESULT([LIBS               : ${LIBS}])
Packit 345191
AC_MSG_RESULT([RPATH_EXTRA        : ${RPATH_EXTRA}])
Packit 345191
AC_MSG_RESULT([])
Packit 345191
AC_MSG_RESULT([XSLTPROC           : ${XSLTPROC}])
Packit 345191
AC_MSG_RESULT([XSLROOT            : ${XSLROOT}])
Packit 345191
AC_MSG_RESULT([])
Packit 345191
AC_MSG_RESULT([PREFIX             : ${PREFIX}])
Packit 345191
AC_MSG_RESULT([BINDIR             : ${BINDIR}])
Packit 345191
AC_MSG_RESULT([DATADIR            : ${DATADIR}])
Packit 345191
AC_MSG_RESULT([INCLUDEDIR         : ${INCLUDEDIR}])
Packit 345191
AC_MSG_RESULT([LIBDIR             : ${LIBDIR}])
Packit 345191
AC_MSG_RESULT([MANDIR             : ${MANDIR}])
Packit 345191
AC_MSG_RESULT([])
Packit 345191
AC_MSG_RESULT([srcroot            : ${srcroot}])
Packit 345191
AC_MSG_RESULT([abs_srcroot        : ${abs_srcroot}])
Packit 345191
AC_MSG_RESULT([objroot            : ${objroot}])
Packit 345191
AC_MSG_RESULT([abs_objroot        : ${abs_objroot}])
Packit 345191
AC_MSG_RESULT([])
Packit 345191
AC_MSG_RESULT([JEMALLOC_PREFIX    : ${JEMALLOC_PREFIX}])
Packit 345191
AC_MSG_RESULT([JEMALLOC_PRIVATE_NAMESPACE])
Packit 345191
AC_MSG_RESULT([                   : ${JEMALLOC_PRIVATE_NAMESPACE}])
Packit 345191
AC_MSG_RESULT([install_suffix     : ${install_suffix}])
Packit 345191
AC_MSG_RESULT([malloc_conf        : ${config_malloc_conf}])
Packit 345191
AC_MSG_RESULT([documentation      : ${enable_doc}])
Packit 345191
AC_MSG_RESULT([shared libs        : ${enable_shared}])
Packit 345191
AC_MSG_RESULT([static libs        : ${enable_static}])
Packit 345191
AC_MSG_RESULT([autogen            : ${enable_autogen}])
Packit 345191
AC_MSG_RESULT([debug              : ${enable_debug}])
Packit 345191
AC_MSG_RESULT([stats              : ${enable_stats}])
Packit 345191
AC_MSG_RESULT([experimetal_smallocx : ${enable_experimental_smallocx}])
Packit 345191
AC_MSG_RESULT([prof               : ${enable_prof}])
Packit 345191
AC_MSG_RESULT([prof-libunwind     : ${enable_prof_libunwind}])
Packit 345191
AC_MSG_RESULT([prof-libgcc        : ${enable_prof_libgcc}])
Packit 345191
AC_MSG_RESULT([prof-gcc           : ${enable_prof_gcc}])
Packit 345191
AC_MSG_RESULT([fill               : ${enable_fill}])
Packit 345191
AC_MSG_RESULT([utrace             : ${enable_utrace}])
Packit 345191
AC_MSG_RESULT([xmalloc            : ${enable_xmalloc}])
Packit 345191
AC_MSG_RESULT([log                : ${enable_log}])
Packit 345191
AC_MSG_RESULT([lazy_lock          : ${enable_lazy_lock}])
Packit 345191
AC_MSG_RESULT([cache-oblivious    : ${enable_cache_oblivious}])
Packit 345191
AC_MSG_RESULT([cxx                : ${enable_cxx}])
Packit 345191
AC_MSG_RESULT([===============================================================================])