Home | History | Annotate | Download | only in jemalloc
      1 dnl Process this file with autoconf to produce a configure script.
      2 AC_INIT([Makefile.in])
      3 
      4 dnl ============================================================================
      5 dnl Custom macro definitions.
      6 
      7 dnl JE_CFLAGS_APPEND(cflag)
      8 AC_DEFUN([JE_CFLAGS_APPEND],
      9 [
     10 AC_MSG_CHECKING([whether compiler supports $1])
     11 TCFLAGS="${CFLAGS}"
     12 if test "x${CFLAGS}" = "x" ; then
     13   CFLAGS="$1"
     14 else
     15   CFLAGS="${CFLAGS} $1"
     16 fi
     17 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
     18 [[
     19 ]], [[
     20     return 0;
     21 ]])],
     22               [je_cv_cflags_appended=$1]
     23               AC_MSG_RESULT([yes]),
     24               [je_cv_cflags_appended=]
     25               AC_MSG_RESULT([no])
     26               [CFLAGS="${TCFLAGS}"]
     27 )
     28 ])
     29 
     30 dnl JE_COMPILABLE(label, hcode, mcode, rvar)
     31 dnl 
     32 dnl Use AC_LINK_IFELSE() rather than AC_COMPILE_IFELSE() so that linker errors
     33 dnl cause failure.
     34 AC_DEFUN([JE_COMPILABLE],
     35 [
     36 AC_CACHE_CHECK([whether $1 is compilable],
     37                [$4],
     38                [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2],
     39                                                 [$3])],
     40                                [$4=yes],
     41                                [$4=no])])
     42 ])
     43 
     44 dnl ============================================================================
     45 
     46 dnl Library revision.
     47 rev=2
     48 AC_SUBST([rev])
     49 
     50 srcroot=$srcdir
     51 if test "x${srcroot}" = "x." ; then
     52   srcroot=""
     53 else
     54   srcroot="${srcroot}/"
     55 fi
     56 AC_SUBST([srcroot])
     57 abs_srcroot="`cd \"${srcdir}\"; pwd`/"
     58 AC_SUBST([abs_srcroot])
     59 
     60 objroot=""
     61 AC_SUBST([objroot])
     62 abs_objroot="`pwd`/"
     63 AC_SUBST([abs_objroot])
     64 
     65 dnl Munge install path variables.
     66 if test "x$prefix" = "xNONE" ; then
     67   prefix="/usr/local"
     68 fi
     69 if test "x$exec_prefix" = "xNONE" ; then
     70   exec_prefix=$prefix
     71 fi
     72 PREFIX=$prefix
     73 AC_SUBST([PREFIX])
     74 BINDIR=`eval echo $bindir`
     75 BINDIR=`eval echo $BINDIR`
     76 AC_SUBST([BINDIR])
     77 INCLUDEDIR=`eval echo $includedir`
     78 INCLUDEDIR=`eval echo $INCLUDEDIR`
     79 AC_SUBST([INCLUDEDIR])
     80 LIBDIR=`eval echo $libdir`
     81 LIBDIR=`eval echo $LIBDIR`
     82 AC_SUBST([LIBDIR])
     83 DATADIR=`eval echo $datadir`
     84 DATADIR=`eval echo $DATADIR`
     85 AC_SUBST([DATADIR])
     86 MANDIR=`eval echo $mandir`
     87 MANDIR=`eval echo $MANDIR`
     88 AC_SUBST([MANDIR])
     89 
     90 dnl Support for building documentation.
     91 AC_PATH_PROG([XSLTPROC], [xsltproc], [false], [$PATH])
     92 if test -d "/usr/share/xml/docbook/stylesheet/docbook-xsl" ; then
     93   DEFAULT_XSLROOT="/usr/share/xml/docbook/stylesheet/docbook-xsl"
     94 elif test -d "/usr/share/sgml/docbook/xsl-stylesheets" ; then
     95   DEFAULT_XSLROOT="/usr/share/sgml/docbook/xsl-stylesheets"
     96 else
     97   dnl Documentation building will fail if this default gets used.
     98   DEFAULT_XSLROOT=""
     99 fi
    100 AC_ARG_WITH([xslroot],
    101   [AS_HELP_STRING([--with-xslroot=<path>], [XSL stylesheet root path])], [
    102 if test "x$with_xslroot" = "xno" ; then
    103   XSLROOT="${DEFAULT_XSLROOT}"
    104 else
    105   XSLROOT="${with_xslroot}"
    106 fi
    107 ],
    108   XSLROOT="${DEFAULT_XSLROOT}"
    109 )
    110 AC_SUBST([XSLROOT])
    111 
    112 dnl If CFLAGS isn't defined, set CFLAGS to something reasonable.  Otherwise,
    113 dnl just prevent autoconf from molesting CFLAGS.
    114 CFLAGS=$CFLAGS
    115 AC_PROG_CC
    116 if test "x$GCC" != "xyes" ; then
    117   AC_CACHE_CHECK([whether compiler is MSVC],
    118                  [je_cv_msvc],
    119                  [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
    120                                                      [
    121 #ifndef _MSC_VER
    122   int fail[-1];
    123 #endif
    124 ])],
    125                                [je_cv_msvc=yes],
    126                                [je_cv_msvc=no])])
    127 fi
    128 
    129 if test "x$CFLAGS" = "x" ; then
    130   no_CFLAGS="yes"
    131   if test "x$GCC" = "xyes" ; then
    132     JE_CFLAGS_APPEND([-std=gnu99])
    133     if test "x$je_cv_cflags_appended" = "x-std=gnu99" ; then
    134       AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT])
    135     fi
    136     JE_CFLAGS_APPEND([-Wall])
    137     JE_CFLAGS_APPEND([-pipe])
    138     JE_CFLAGS_APPEND([-g3])
    139   elif test "x$je_cv_msvc" = "xyes" ; then
    140     CC="$CC -nologo"
    141     JE_CFLAGS_APPEND([-Zi])
    142     JE_CFLAGS_APPEND([-MT])
    143     JE_CFLAGS_APPEND([-W3])
    144     JE_CFLAGS_APPEND([-FS])
    145     CPPFLAGS="$CPPFLAGS -I${srcdir}/include/msvc_compat"
    146   fi
    147 fi
    148 dnl Append EXTRA_CFLAGS to CFLAGS, if defined.
    149 if test "x$EXTRA_CFLAGS" != "x" ; then
    150   JE_CFLAGS_APPEND([$EXTRA_CFLAGS])
    151 fi
    152 AC_PROG_CPP
    153 
    154 AC_C_BIGENDIAN([ac_cv_big_endian=1], [ac_cv_big_endian=0])
    155 if test "x${ac_cv_big_endian}" = "x1" ; then
    156   AC_DEFINE_UNQUOTED([JEMALLOC_BIG_ENDIAN], [ ])
    157 fi
    158 
    159 if test "x${je_cv_msvc}" = "xyes" -a "x${ac_cv_header_inttypes_h}" = "xno"; then
    160   CPPFLAGS="$CPPFLAGS -I${srcdir}/include/msvc_compat/C99"
    161 fi
    162 
    163 AC_CHECK_SIZEOF([void *])
    164 if test "x${ac_cv_sizeof_void_p}" = "x8" ; then
    165   LG_SIZEOF_PTR=3
    166 elif test "x${ac_cv_sizeof_void_p}" = "x4" ; then
    167   LG_SIZEOF_PTR=2
    168 else
    169   AC_MSG_ERROR([Unsupported pointer size: ${ac_cv_sizeof_void_p}])
    170 fi
    171 AC_DEFINE_UNQUOTED([LG_SIZEOF_PTR], [$LG_SIZEOF_PTR])
    172 
    173 AC_CHECK_SIZEOF([int])
    174 if test "x${ac_cv_sizeof_int}" = "x8" ; then
    175   LG_SIZEOF_INT=3
    176 elif test "x${ac_cv_sizeof_int}" = "x4" ; then
    177   LG_SIZEOF_INT=2
    178 else
    179   AC_MSG_ERROR([Unsupported int size: ${ac_cv_sizeof_int}])
    180 fi
    181 AC_DEFINE_UNQUOTED([LG_SIZEOF_INT], [$LG_SIZEOF_INT])
    182 
    183 AC_CHECK_SIZEOF([long])
    184 if test "x${ac_cv_sizeof_long}" = "x8" ; then
    185   LG_SIZEOF_LONG=3
    186 elif test "x${ac_cv_sizeof_long}" = "x4" ; then
    187   LG_SIZEOF_LONG=2
    188 else
    189   AC_MSG_ERROR([Unsupported long size: ${ac_cv_sizeof_long}])
    190 fi
    191 AC_DEFINE_UNQUOTED([LG_SIZEOF_LONG], [$LG_SIZEOF_LONG])
    192 
    193 AC_CHECK_SIZEOF([intmax_t])
    194 if test "x${ac_cv_sizeof_intmax_t}" = "x16" ; then
    195   LG_SIZEOF_INTMAX_T=4
    196 elif test "x${ac_cv_sizeof_intmax_t}" = "x8" ; then
    197   LG_SIZEOF_INTMAX_T=3
    198 elif test "x${ac_cv_sizeof_intmax_t}" = "x4" ; then
    199   LG_SIZEOF_INTMAX_T=2
    200 else
    201   AC_MSG_ERROR([Unsupported intmax_t size: ${ac_cv_sizeof_intmax_t}])
    202 fi
    203 AC_DEFINE_UNQUOTED([LG_SIZEOF_INTMAX_T], [$LG_SIZEOF_INTMAX_T])
    204 
    205 AC_CANONICAL_HOST
    206 dnl CPU-specific settings.
    207 CPU_SPINWAIT=""
    208 case "${host_cpu}" in
    209   i[[345]]86)
    210 	;;
    211   i686|x86_64)
    212 	JE_COMPILABLE([pause instruction], [],
    213 	              [[__asm__ volatile("pause"); return 0;]],
    214 	              [je_cv_pause])
    215 	if test "x${je_cv_pause}" = "xyes" ; then
    216 	    CPU_SPINWAIT='__asm__ volatile("pause")'
    217 	fi
    218 	dnl emmintrin.h fails to compile unless MMX, SSE, and SSE2 are
    219 	dnl supported.
    220 	JE_COMPILABLE([SSE2 intrinsics], [
    221 #include <emmintrin.h>
    222 ], [], [je_cv_sse2])
    223 	if test "x${je_cv_sse2}" = "xyes" ; then
    224 	  AC_DEFINE_UNQUOTED([HAVE_SSE2], [ ])
    225 	fi
    226 	;;
    227   powerpc)
    228 	AC_DEFINE_UNQUOTED([HAVE_ALTIVEC], [ ])
    229 	;;
    230   *)
    231 	;;
    232 esac
    233 AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT])
    234 
    235 LD_PRELOAD_VAR="LD_PRELOAD"
    236 so="so"
    237 importlib="${so}"
    238 o="$ac_objext"
    239 a="a"
    240 exe="$ac_exeext"
    241 libprefix="lib"
    242 DSO_LDFLAGS='-shared -Wl,-soname,$(@F)'
    243 RPATH='-Wl,-rpath,$(1)'
    244 SOREV="${so}.${rev}"
    245 PIC_CFLAGS='-fPIC -DPIC'
    246 CTARGET='-o $@'
    247 LDTARGET='-o $@'
    248 EXTRA_LDFLAGS=
    249 ARFLAGS='crus'
    250 AROUT=' $@'
    251 CC_MM=1
    252 
    253 AN_MAKEVAR([AR], [AC_PROG_AR])
    254 AN_PROGRAM([ar], [AC_PROG_AR])
    255 AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
    256 AC_PROG_AR
    257 
    258 dnl Platform-specific settings.  abi and RPATH can probably be determined
    259 dnl programmatically, but doing so is error-prone, which makes it generally
    260 dnl not worth the trouble.
    261 dnl 
    262 dnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the
    263 dnl definitions need to be seen before any headers are included, which is a pain
    264 dnl to make happen otherwise.
    265 default_munmap="1"
    266 case "${host}" in
    267   *-*-darwin* | *-*-ios*)
    268 	CFLAGS="$CFLAGS"
    269 	abi="macho"
    270 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
    271 	RPATH=""
    272 	LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
    273 	so="dylib"
    274 	importlib="${so}"
    275 	force_tls="0"
    276 	DSO_LDFLAGS='-shared -Wl,-dylib_install_name,$(@F)'
    277 	SOREV="${rev}.${so}"
    278 	sbrk_deprecated="1"
    279 	;;
    280   *-*-freebsd*)
    281 	CFLAGS="$CFLAGS"
    282 	abi="elf"
    283 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
    284 	force_lazy_lock="1"
    285 	;;
    286   *-*-linux*)
    287 	CFLAGS="$CFLAGS"
    288 	CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
    289 	abi="elf"
    290 	AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
    291 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ])
    292 	AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
    293 	default_munmap="0"
    294 	;;
    295   *-*-netbsd*)
    296 	AC_MSG_CHECKING([ABI])
    297         AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
    298 [[#ifdef __ELF__
    299 /* ELF */
    300 #else
    301 #error aout
    302 #endif
    303 ]])],
    304                           [CFLAGS="$CFLAGS"; abi="elf"],
    305                           [abi="aout"])
    306 	AC_MSG_RESULT([$abi])
    307 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
    308 	;;
    309   *-*-solaris2*)
    310 	CFLAGS="$CFLAGS"
    311 	abi="elf"
    312 	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
    313 	RPATH='-Wl,-R,$(1)'
    314 	dnl Solaris needs this for sigwait().
    315 	CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
    316 	LIBS="$LIBS -lposix4 -lsocket -lnsl"
    317 	;;
    318   *-ibm-aix*)
    319 	if "$LG_SIZEOF_PTR" = "8"; then
    320 	  dnl 64bit AIX
    321 	  LD_PRELOAD_VAR="LDR_PRELOAD64"
    322 	else
    323 	  dnl 32bit AIX
    324 	  LD_PRELOAD_VAR="LDR_PRELOAD"
    325 	fi
    326 	abi="xcoff"
    327 	;;
    328   *-*-mingw*)
    329 	abi="pecoff"
    330 	force_tls="0"
    331 	RPATH=""
    332 	so="dll"
    333 	if test "x$je_cv_msvc" = "xyes" ; then
    334 	  importlib="lib"
    335 	  DSO_LDFLAGS="-LD"
    336 	  EXTRA_LDFLAGS="-link -DEBUG"
    337 	  CTARGET='-Fo$@'
    338 	  LDTARGET='-Fe$@'
    339 	  AR='lib'
    340 	  ARFLAGS='-nologo -out:'
    341 	  AROUT='$@'
    342 	  CC_MM=
    343         else
    344 	  importlib="${so}"
    345 	  DSO_LDFLAGS="-shared"
    346 	fi
    347 	a="lib"
    348 	libprefix=""
    349 	SOREV="${so}"
    350 	PIC_CFLAGS=""
    351 	;;
    352   *)
    353 	AC_MSG_RESULT([Unsupported operating system: ${host}])
    354 	abi="elf"
    355 	;;
    356 esac
    357 
    358 JEMALLOC_USABLE_SIZE_CONST=const
    359 AC_CHECK_HEADERS([malloc.h], [
    360   AC_MSG_CHECKING([whether malloc_usable_size definition can use const argument])
    361   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
    362     [#include <malloc.h>
    363      #include <stddef.h>
    364     size_t malloc_usable_size(const void *ptr);
    365     ],
    366     [])],[
    367                 AC_MSG_RESULT([yes])
    368          ],[
    369                 JEMALLOC_USABLE_SIZE_CONST=
    370                 AC_MSG_RESULT([no])
    371          ])
    372 ])
    373 AC_DEFINE_UNQUOTED([JEMALLOC_USABLE_SIZE_CONST], [$JEMALLOC_USABLE_SIZE_CONST])
    374 AC_SUBST([abi])
    375 AC_SUBST([RPATH])
    376 AC_SUBST([LD_PRELOAD_VAR])
    377 AC_SUBST([so])
    378 AC_SUBST([importlib])
    379 AC_SUBST([o])
    380 AC_SUBST([a])
    381 AC_SUBST([exe])
    382 AC_SUBST([libprefix])
    383 AC_SUBST([DSO_LDFLAGS])
    384 AC_SUBST([EXTRA_LDFLAGS])
    385 AC_SUBST([SOREV])
    386 AC_SUBST([PIC_CFLAGS])
    387 AC_SUBST([CTARGET])
    388 AC_SUBST([LDTARGET])
    389 AC_SUBST([MKLIB])
    390 AC_SUBST([ARFLAGS])
    391 AC_SUBST([AROUT])
    392 AC_SUBST([CC_MM])
    393 
    394 JE_COMPILABLE([__attribute__ syntax],
    395               [static __attribute__((unused)) void foo(void){}],
    396               [],
    397               [je_cv_attribute])
    398 if test "x${je_cv_attribute}" = "xyes" ; then
    399   AC_DEFINE([JEMALLOC_HAVE_ATTR], [ ])
    400   if test "x${GCC}" = "xyes" -a "x${abi}" = "xelf"; then
    401     JE_CFLAGS_APPEND([-fvisibility=hidden])
    402   fi
    403 fi
    404 dnl Check for tls_model attribute support (clang 3.0 still lacks support).
    405 SAVED_CFLAGS="${CFLAGS}"
    406 JE_CFLAGS_APPEND([-Werror])
    407 JE_COMPILABLE([tls_model attribute], [],
    408               [static __thread int
    409                __attribute__((tls_model("initial-exec"))) foo;
    410                foo = 0;],
    411               [je_cv_tls_model])
    412 CFLAGS="${SAVED_CFLAGS}"
    413 if test "x${je_cv_tls_model}" = "xyes" ; then
    414   AC_DEFINE([JEMALLOC_TLS_MODEL],
    415             [__attribute__((tls_model("initial-exec")))])
    416 else
    417   AC_DEFINE([JEMALLOC_TLS_MODEL], [ ])
    418 fi
    419 
    420 dnl Support optional additions to rpath.
    421 AC_ARG_WITH([rpath],
    422   [AS_HELP_STRING([--with-rpath=<rpath>], [Colon-separated rpath (ELF systems only)])],
    423 if test "x$with_rpath" = "xno" ; then
    424   RPATH_EXTRA=
    425 else
    426   RPATH_EXTRA="`echo $with_rpath | tr \":\" \" \"`"
    427 fi,
    428   RPATH_EXTRA=
    429 )
    430 AC_SUBST([RPATH_EXTRA])
    431 
    432 dnl Disable rules that do automatic regeneration of configure output by default.
    433 AC_ARG_ENABLE([autogen],
    434   [AS_HELP_STRING([--enable-autogen], [Automatically regenerate configure output])],
    435 if test "x$enable_autogen" = "xno" ; then
    436   enable_autogen="0"
    437 else
    438   enable_autogen="1"
    439 fi
    440 ,
    441 enable_autogen="0"
    442 )
    443 AC_SUBST([enable_autogen])
    444 
    445 AC_PROG_INSTALL
    446 AC_PROG_RANLIB
    447 AC_PATH_PROG([LD], [ld], [false], [$PATH])
    448 AC_PATH_PROG([AUTOCONF], [autoconf], [false], [$PATH])
    449 
    450 public_syms="malloc_conf malloc_message malloc calloc posix_memalign aligned_alloc realloc free mallocx rallocx xallocx sallocx dallocx nallocx mallctl mallctlnametomib mallctlbymib malloc_stats_print malloc_usable_size"
    451 
    452 dnl Check for allocator-related functions that should be wrapped.
    453 AC_CHECK_FUNC([memalign],
    454 	      [AC_DEFINE([JEMALLOC_OVERRIDE_MEMALIGN], [ ])
    455 	       public_syms="${public_syms} memalign"])
    456 AC_CHECK_FUNC([valloc],
    457 	      [AC_DEFINE([JEMALLOC_OVERRIDE_VALLOC], [ ])
    458 	       public_syms="${public_syms} valloc"])
    459 
    460 dnl Do not compute test code coverage by default.
    461 GCOV_FLAGS=
    462 AC_ARG_ENABLE([code-coverage],
    463   [AS_HELP_STRING([--enable-code-coverage],
    464    [Enable code coverage])],
    465 [if test "x$enable_code_coverage" = "xno" ; then
    466   enable_code_coverage="0"
    467 else
    468   enable_code_coverage="1"
    469 fi
    470 ],
    471 [enable_code_coverage="0"]
    472 )
    473 if test "x$enable_code_coverage" = "x1" ; then
    474   deoptimize="no"
    475   echo "$CFLAGS $EXTRA_CFLAGS" | grep '\-O' >/dev/null || deoptimize="yes"
    476   if test "x${deoptimize}" = "xyes" ; then
    477     JE_CFLAGS_APPEND([-O0])
    478   fi
    479   JE_CFLAGS_APPEND([-fprofile-arcs -ftest-coverage])
    480   EXTRA_LDFLAGS="$EXTRA_LDFLAGS -fprofile-arcs -ftest-coverage"
    481   AC_DEFINE([JEMALLOC_CODE_COVERAGE], [ ])
    482 fi
    483 AC_SUBST([enable_code_coverage])
    484 
    485 dnl Perform no name mangling by default.
    486 AC_ARG_WITH([mangling],
    487   [AS_HELP_STRING([--with-mangling=<map>], [Mangle symbols in <map>])],
    488   [mangling_map="$with_mangling"], [mangling_map=""])
    489 
    490 dnl Do not prefix public APIs by default.
    491 AC_ARG_WITH([jemalloc_prefix],
    492   [AS_HELP_STRING([--with-jemalloc-prefix=<prefix>], [Prefix to prepend to all public APIs])],
    493   [JEMALLOC_PREFIX="$with_jemalloc_prefix"],
    494   [if test "x$abi" != "xmacho" -a "x$abi" != "xpecoff"; then
    495   JEMALLOC_PREFIX=""
    496 else
    497   JEMALLOC_PREFIX="je_"
    498 fi]
    499 )
    500 if test "x$JEMALLOC_PREFIX" != "x" ; then
    501   JEMALLOC_CPREFIX=`echo ${JEMALLOC_PREFIX} | tr "a-z" "A-Z"`
    502   AC_DEFINE_UNQUOTED([JEMALLOC_PREFIX], ["$JEMALLOC_PREFIX"])
    503   AC_DEFINE_UNQUOTED([JEMALLOC_CPREFIX], ["$JEMALLOC_CPREFIX"])
    504 fi
    505 
    506 AC_ARG_WITH([export],
    507   [AS_HELP_STRING([--without-export], [disable exporting jemalloc public APIs])],
    508   [if test "x$with_export" = "xno"; then
    509   AC_DEFINE([JEMALLOC_EXPORT],[])
    510 fi]
    511 )
    512 
    513 dnl Mangle library-private APIs.
    514 AC_ARG_WITH([private_namespace],
    515   [AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])],
    516   [JEMALLOC_PRIVATE_NAMESPACE="${with_private_namespace}je_"],
    517   [JEMALLOC_PRIVATE_NAMESPACE="je_"]
    518 )
    519 AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], [$JEMALLOC_PRIVATE_NAMESPACE])
    520 private_namespace="$JEMALLOC_PRIVATE_NAMESPACE"
    521 AC_SUBST([private_namespace])
    522 
    523 dnl Do not add suffix to installed files by default.
    524 AC_ARG_WITH([install_suffix],
    525   [AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])],
    526   [INSTALL_SUFFIX="$with_install_suffix"],
    527   [INSTALL_SUFFIX=]
    528 )
    529 install_suffix="$INSTALL_SUFFIX"
    530 AC_SUBST([install_suffix])
    531 
    532 dnl Substitute @je_@ in jemalloc_protos.h.in, primarily to make generation of
    533 dnl jemalloc_protos_jet.h easy.
    534 je_="je_"
    535 AC_SUBST([je_])
    536 
    537 cfgoutputs_in="${srcroot}Makefile.in"
    538 cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/html.xsl.in"
    539 cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/manpages.xsl.in"
    540 cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/jemalloc.xml.in"
    541 cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc_macros.h.in"
    542 cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc_protos.h.in"
    543 cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/internal/jemalloc_internal.h.in"
    544 cfgoutputs_in="${cfgoutputs_in} ${srcroot}test/test.sh.in"
    545 cfgoutputs_in="${cfgoutputs_in} ${srcroot}test/include/test/jemalloc_test.h.in"
    546 
    547 cfgoutputs_out="Makefile"
    548 cfgoutputs_out="${cfgoutputs_out} doc/html.xsl"
    549 cfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl"
    550 cfgoutputs_out="${cfgoutputs_out} doc/jemalloc.xml"
    551 cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_macros.h"
    552 cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_protos.h"
    553 cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_internal.h"
    554 cfgoutputs_out="${cfgoutputs_out} test/test.sh"
    555 cfgoutputs_out="${cfgoutputs_out} test/include/test/jemalloc_test.h"
    556 
    557 cfgoutputs_tup="Makefile"
    558 cfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in"
    559 cfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in"
    560 cfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc.xml:doc/jemalloc.xml.in"
    561 cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_macros.h:include/jemalloc/jemalloc_macros.h.in"
    562 cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_protos.h:include/jemalloc/jemalloc_protos.h.in"
    563 cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_internal.h"
    564 cfgoutputs_tup="${cfgoutputs_tup} test/test.sh:test/test.sh.in"
    565 cfgoutputs_tup="${cfgoutputs_tup} test/include/test/jemalloc_test.h:test/include/test/jemalloc_test.h.in"
    566 
    567 cfghdrs_in="${srcroot}include/jemalloc/jemalloc_defs.h.in"
    568 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/jemalloc_internal_defs.h.in"
    569 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/private_namespace.sh"
    570 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/private_unnamespace.sh"
    571 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/private_symbols.txt"
    572 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/public_namespace.sh"
    573 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/public_unnamespace.sh"
    574 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/size_classes.sh"
    575 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/jemalloc_rename.sh"
    576 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/jemalloc_mangle.sh"
    577 cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/jemalloc.sh"
    578 cfghdrs_in="${cfghdrs_in} ${srcroot}test/include/test/jemalloc_test_defs.h.in"
    579 
    580 cfghdrs_out="include/jemalloc/jemalloc_defs.h"
    581 cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc${install_suffix}.h"
    582 cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_namespace.h"
    583 cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_unnamespace.h"
    584 cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_symbols.txt"
    585 cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_namespace.h"
    586 cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_unnamespace.h"
    587 cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/size_classes.h"
    588 cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_protos_jet.h"
    589 cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_rename.h"
    590 cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle.h"
    591 cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle_jet.h"
    592 cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/jemalloc_internal_defs.h"
    593 cfghdrs_out="${cfghdrs_out} test/include/test/jemalloc_test_defs.h"
    594 
    595 cfghdrs_tup="include/jemalloc/jemalloc_defs.h:include/jemalloc/jemalloc_defs.h.in"
    596 cfghdrs_tup="${cfghdrs_tup} include/jemalloc/internal/jemalloc_internal_defs.h:${srcroot}include/jemalloc/internal/jemalloc_internal_defs.h.in"
    597 cfghdrs_tup="${cfghdrs_tup} test/include/test/jemalloc_test_defs.h:${srcroot}test/include/test/jemalloc_test_defs.h.in"
    598 
    599 dnl Silence irrelevant compiler warnings by default.
    600 AC_ARG_ENABLE([cc-silence],
    601   [AS_HELP_STRING([--disable-cc-silence],
    602                   [Do not silence irrelevant compiler warnings])],
    603 [if test "x$enable_cc_silence" = "xno" ; then
    604   enable_cc_silence="0"
    605 else
    606   enable_cc_silence="1"
    607 fi
    608 ],
    609 [enable_cc_silence="1"]
    610 )
    611 if test "x$enable_cc_silence" = "x1" ; then
    612   AC_DEFINE([JEMALLOC_CC_SILENCE], [ ])
    613 fi
    614 
    615 dnl Do not compile with debugging by default.
    616 AC_ARG_ENABLE([debug],
    617   [AS_HELP_STRING([--enable-debug], [Build debugging code (implies --enable-ivsalloc)])],
    618 [if test "x$enable_debug" = "xno" ; then
    619   enable_debug="0"
    620 else
    621   enable_debug="1"
    622 fi
    623 ],
    624 [enable_debug="0"]
    625 )
    626 if test "x$enable_debug" = "x1" ; then
    627   AC_DEFINE([JEMALLOC_DEBUG], [ ])
    628   enable_ivsalloc="1"
    629 fi
    630 AC_SUBST([enable_debug])
    631 
    632 dnl Do not validate pointers by default.
    633 AC_ARG_ENABLE([ivsalloc],
    634   [AS_HELP_STRING([--enable-ivsalloc], [Validate pointers passed through the public API])],
    635 [if test "x$enable_ivsalloc" = "xno" ; then
    636   enable_ivsalloc="0"
    637 else
    638   enable_ivsalloc="1"
    639 fi
    640 ],
    641 [enable_ivsalloc="0"]
    642 )
    643 if test "x$enable_ivsalloc" = "x1" ; then
    644   AC_DEFINE([JEMALLOC_IVSALLOC], [ ])
    645 fi
    646 
    647 dnl Only optimize if not debugging.
    648 if test "x$enable_debug" = "x0" -a "x$no_CFLAGS" = "xyes" ; then
    649   dnl Make sure that an optimization flag was not specified in EXTRA_CFLAGS.
    650   optimize="no"
    651   echo "$CFLAGS $EXTRA_CFLAGS" | grep '\-O' >/dev/null || optimize="yes"
    652   if test "x${optimize}" = "xyes" ; then
    653     if test "x$GCC" = "xyes" ; then
    654       JE_CFLAGS_APPEND([-O3])
    655       JE_CFLAGS_APPEND([-funroll-loops])
    656     elif test "x$je_cv_msvc" = "xyes" ; then
    657       JE_CFLAGS_APPEND([-O2])
    658     else
    659       JE_CFLAGS_APPEND([-O])
    660     fi
    661   fi
    662 fi
    663 
    664 dnl Enable statistics calculation by default.
    665 AC_ARG_ENABLE([stats],
    666   [AS_HELP_STRING([--disable-stats],
    667                   [Disable statistics calculation/reporting])],
    668 [if test "x$enable_stats" = "xno" ; then
    669   enable_stats="0"
    670 else
    671   enable_stats="1"
    672 fi
    673 ],
    674 [enable_stats="1"]
    675 )
    676 if test "x$enable_stats" = "x1" ; then
    677   AC_DEFINE([JEMALLOC_STATS], [ ])
    678 fi
    679 AC_SUBST([enable_stats])
    680 
    681 dnl Do not enable profiling by default.
    682 AC_ARG_ENABLE([prof],
    683   [AS_HELP_STRING([--enable-prof], [Enable allocation profiling])],
    684 [if test "x$enable_prof" = "xno" ; then
    685   enable_prof="0"
    686 else
    687   enable_prof="1"
    688 fi
    689 ],
    690 [enable_prof="0"]
    691 )
    692 if test "x$enable_prof" = "x1" ; then
    693   backtrace_method=""
    694 else
    695   backtrace_method="N/A"
    696 fi
    697 
    698 AC_ARG_ENABLE([prof-libunwind],
    699   [AS_HELP_STRING([--enable-prof-libunwind], [Use libunwind for backtracing])],
    700 [if test "x$enable_prof_libunwind" = "xno" ; then
    701   enable_prof_libunwind="0"
    702 else
    703   enable_prof_libunwind="1"
    704 fi
    705 ],
    706 [enable_prof_libunwind="0"]
    707 )
    708 AC_ARG_WITH([static_libunwind],
    709   [AS_HELP_STRING([--with-static-libunwind=<libunwind.a>],
    710   [Path to static libunwind library; use rather than dynamically linking])],
    711 if test "x$with_static_libunwind" = "xno" ; then
    712   LUNWIND="-lunwind"
    713 else
    714   if test ! -f "$with_static_libunwind" ; then
    715     AC_MSG_ERROR([Static libunwind not found: $with_static_libunwind])
    716   fi
    717   LUNWIND="$with_static_libunwind"
    718 fi,
    719   LUNWIND="-lunwind"
    720 )
    721 if test "x$backtrace_method" = "x" -a "x$enable_prof_libunwind" = "x1" ; then
    722   AC_CHECK_HEADERS([libunwind.h], , [enable_prof_libunwind="0"])
    723   if test "x$LUNWIND" = "x-lunwind" ; then
    724     AC_CHECK_LIB([unwind], [unw_backtrace], [LIBS="$LIBS $LUNWIND"],
    725                  [enable_prof_libunwind="0"])
    726   else
    727     LIBS="$LIBS $LUNWIND"
    728   fi
    729   if test "x${enable_prof_libunwind}" = "x1" ; then
    730     backtrace_method="libunwind"
    731     AC_DEFINE([JEMALLOC_PROF_LIBUNWIND], [ ])
    732   fi
    733 fi
    734 
    735 AC_ARG_ENABLE([prof-libgcc],
    736   [AS_HELP_STRING([--disable-prof-libgcc],
    737   [Do not use libgcc for backtracing])],
    738 [if test "x$enable_prof_libgcc" = "xno" ; then
    739   enable_prof_libgcc="0"
    740 else
    741   enable_prof_libgcc="1"
    742 fi
    743 ],
    744 [enable_prof_libgcc="1"]
    745 )
    746 if test "x$backtrace_method" = "x" -a "x$enable_prof_libgcc" = "x1" \
    747      -a "x$GCC" = "xyes" ; then
    748   AC_CHECK_HEADERS([unwind.h], , [enable_prof_libgcc="0"])
    749   AC_CHECK_LIB([gcc], [_Unwind_Backtrace], [LIBS="$LIBS -lgcc"], [enable_prof_libgcc="0"])
    750   if test "x${enable_prof_libgcc}" = "x1" ; then
    751     backtrace_method="libgcc"
    752     AC_DEFINE([JEMALLOC_PROF_LIBGCC], [ ])
    753   fi
    754 else
    755   enable_prof_libgcc="0"
    756 fi
    757 
    758 AC_ARG_ENABLE([prof-gcc],
    759   [AS_HELP_STRING([--disable-prof-gcc],
    760   [Do not use gcc intrinsics for backtracing])],
    761 [if test "x$enable_prof_gcc" = "xno" ; then
    762   enable_prof_gcc="0"
    763 else
    764   enable_prof_gcc="1"
    765 fi
    766 ],
    767 [enable_prof_gcc="1"]
    768 )
    769 if test "x$backtrace_method" = "x" -a "x$enable_prof_gcc" = "x1" \
    770      -a "x$GCC" = "xyes" ; then
    771   JE_CFLAGS_APPEND([-fno-omit-frame-pointer])
    772   backtrace_method="gcc intrinsics"
    773   AC_DEFINE([JEMALLOC_PROF_GCC], [ ])
    774 else
    775   enable_prof_gcc="0"
    776 fi
    777 
    778 if test "x$backtrace_method" = "x" ; then
    779   backtrace_method="none (disabling profiling)"
    780   enable_prof="0"
    781 fi
    782 AC_MSG_CHECKING([configured backtracing method])
    783 AC_MSG_RESULT([$backtrace_method])
    784 if test "x$enable_prof" = "x1" ; then
    785   if test "x${force_tls}" = "x0" ; then
    786     AC_MSG_ERROR([Heap profiling requires TLS]);
    787   fi
    788   force_tls="1"
    789 
    790   if test "x$abi" != "xpecoff"; then
    791     dnl Heap profiling uses the log(3) function.
    792     LIBS="$LIBS -lm"
    793   fi
    794 
    795   AC_DEFINE([JEMALLOC_PROF], [ ])
    796 fi
    797 AC_SUBST([enable_prof])
    798 
    799 dnl Enable thread-specific caching by default.
    800 AC_ARG_ENABLE([tcache],
    801   [AS_HELP_STRING([--disable-tcache], [Disable per thread caches])],
    802 [if test "x$enable_tcache" = "xno" ; then
    803   enable_tcache="0"
    804 else
    805   enable_tcache="1"
    806 fi
    807 ],
    808 [enable_tcache="1"]
    809 )
    810 if test "x$enable_tcache" = "x1" ; then
    811   AC_DEFINE([JEMALLOC_TCACHE], [ ])
    812 fi
    813 AC_SUBST([enable_tcache])
    814 
    815 dnl Enable VM deallocation via munmap() by default.
    816 AC_ARG_ENABLE([munmap],
    817   [AS_HELP_STRING([--disable-munmap], [Disable VM deallocation via munmap(2)])],
    818 [if test "x$enable_munmap" = "xno" ; then
    819   enable_munmap="0"
    820 else
    821   enable_munmap="1"
    822 fi
    823 ],
    824 [enable_munmap="${default_munmap}"]
    825 )
    826 if test "x$enable_munmap" = "x1" ; then
    827   AC_DEFINE([JEMALLOC_MUNMAP], [ ])
    828 fi
    829 AC_SUBST([enable_munmap])
    830 
    831 dnl Enable allocation from DSS if supported by the OS.
    832 have_dss="1"
    833 dnl Check whether the BSD/SUSv1 sbrk() exists.  If not, disable DSS support.
    834 AC_CHECK_FUNC([sbrk], [have_sbrk="1"], [have_sbrk="0"])
    835 if test "x$have_sbrk" = "x1" ; then
    836   if test "x$sbrk_deprecated" == "x1" ; then
    837     AC_MSG_RESULT([Disabling dss allocation because sbrk is deprecated])
    838     have_dss="0"
    839   fi
    840 else
    841   have_dss="0"
    842 fi
    843 
    844 if test "x$have_dss" = "x1" ; then
    845   AC_DEFINE([JEMALLOC_DSS], [ ])
    846 fi
    847 
    848 dnl Support the junk/zero filling option by default.
    849 AC_ARG_ENABLE([fill],
    850   [AS_HELP_STRING([--disable-fill],
    851                   [Disable support for junk/zero filling, quarantine, and redzones])],
    852 [if test "x$enable_fill" = "xno" ; then
    853   enable_fill="0"
    854 else
    855   enable_fill="1"
    856 fi
    857 ],
    858 [enable_fill="1"]
    859 )
    860 if test "x$enable_fill" = "x1" ; then
    861   AC_DEFINE([JEMALLOC_FILL], [ ])
    862 fi
    863 AC_SUBST([enable_fill])
    864 
    865 dnl Disable utrace(2)-based tracing by default.
    866 AC_ARG_ENABLE([utrace],
    867   [AS_HELP_STRING([--enable-utrace], [Enable utrace(2)-based tracing])],
    868 [if test "x$enable_utrace" = "xno" ; then
    869   enable_utrace="0"
    870 else
    871   enable_utrace="1"
    872 fi
    873 ],
    874 [enable_utrace="0"]
    875 )
    876 JE_COMPILABLE([utrace(2)], [
    877 #include <sys/types.h>
    878 #include <sys/param.h>
    879 #include <sys/time.h>
    880 #include <sys/uio.h>
    881 #include <sys/ktrace.h>
    882 ], [
    883 	utrace((void *)0, 0);
    884 ], [je_cv_utrace])
    885 if test "x${je_cv_utrace}" = "xno" ; then
    886   enable_utrace="0"
    887 fi
    888 if test "x$enable_utrace" = "x1" ; then
    889   AC_DEFINE([JEMALLOC_UTRACE], [ ])
    890 fi
    891 AC_SUBST([enable_utrace])
    892 
    893 dnl Support Valgrind by default.
    894 AC_ARG_ENABLE([valgrind],
    895   [AS_HELP_STRING([--disable-valgrind], [Disable support for Valgrind])],
    896 [if test "x$enable_valgrind" = "xno" ; then
    897   enable_valgrind="0"
    898 else
    899   enable_valgrind="1"
    900 fi
    901 ],
    902 [enable_valgrind="1"]
    903 )
    904 if test "x$enable_valgrind" = "x1" ; then
    905   JE_COMPILABLE([valgrind], [
    906 #include <valgrind/valgrind.h>
    907 #include <valgrind/memcheck.h>
    908 
    909 #if !defined(VALGRIND_RESIZEINPLACE_BLOCK)
    910 #  error "Incompatible Valgrind version"
    911 #endif
    912 ], [], [je_cv_valgrind])
    913   if test "x${je_cv_valgrind}" = "xno" ; then
    914     enable_valgrind="0"
    915   fi
    916   if test "x$enable_valgrind" = "x1" ; then
    917     AC_DEFINE([JEMALLOC_VALGRIND], [ ])
    918   fi
    919 fi
    920 AC_SUBST([enable_valgrind])
    921 
    922 dnl Do not support the xmalloc option by default.
    923 AC_ARG_ENABLE([xmalloc],
    924   [AS_HELP_STRING([--enable-xmalloc], [Support xmalloc option])],
    925 [if test "x$enable_xmalloc" = "xno" ; then
    926   enable_xmalloc="0"
    927 else
    928   enable_xmalloc="1"
    929 fi
    930 ],
    931 [enable_xmalloc="0"]
    932 )
    933 if test "x$enable_xmalloc" = "x1" ; then
    934   AC_DEFINE([JEMALLOC_XMALLOC], [ ])
    935 fi
    936 AC_SUBST([enable_xmalloc])
    937 
    938 dnl ============================================================================
    939 dnl Check for  __builtin_ffsl(), then ffsl(3), and fail if neither are found.
    940 dnl One of those two functions should (theoretically) exist on all platforms
    941 dnl that jemalloc currently has a chance of functioning on without modification.
    942 dnl We additionally assume ffs() or __builtin_ffs() are defined if
    943 dnl ffsl() or __builtin_ffsl() are defined, respectively.
    944 JE_COMPILABLE([a program using __builtin_ffsl], [
    945 #include <stdio.h>
    946 #include <strings.h>
    947 #include <string.h>
    948 ], [
    949 	{
    950 		int rv = __builtin_ffsl(0x08);
    951 		printf("%d\n", rv);
    952 	}
    953 ], [je_cv_gcc_builtin_ffsl])
    954 if test "x${je_cv_gcc_builtin_ffsl}" == "xyes" ; then
    955   AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [__builtin_ffsl])
    956   AC_DEFINE([JEMALLOC_INTERNAL_FFS], [__builtin_ffs])
    957 else
    958   JE_COMPILABLE([a program using ffsl], [
    959   #include <stdio.h>
    960   #include <strings.h>
    961   #include <string.h>
    962   ], [
    963 	{
    964 		int rv = ffsl(0x08);
    965 		printf("%d\n", rv);
    966 	}
    967   ], [je_cv_function_ffsl])
    968   if test "x${je_cv_function_ffsl}" == "xyes" ; then
    969     AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [ffsl])
    970     AC_DEFINE([JEMALLOC_INTERNAL_FFS], [ffs])
    971   else
    972     AC_MSG_ERROR([Cannot build without ffsl(3) or __builtin_ffsl()])
    973   fi
    974 fi
    975 
    976 AC_CACHE_CHECK([STATIC_PAGE_SHIFT],
    977                [je_cv_static_page_shift],
    978                AC_RUN_IFELSE([AC_LANG_PROGRAM(
    979 [[
    980 #include <strings.h>
    981 #ifdef _WIN32
    982 #include <windows.h>
    983 #else
    984 #include <unistd.h>
    985 #endif
    986 #include <stdio.h>
    987 ]],
    988 [[
    989     int result;
    990     FILE *f;
    991 
    992 #ifdef _WIN32
    993     SYSTEM_INFO si;
    994     GetSystemInfo(&si);
    995     result = si.dwPageSize;
    996 #else
    997     result = sysconf(_SC_PAGESIZE);
    998 #endif
    999     if (result == -1) {
   1000 	return 1;
   1001     }
   1002     result = JEMALLOC_INTERNAL_FFSL(result) - 1;
   1003 
   1004     f = fopen("conftest.out", "w");
   1005     if (f == NULL) {
   1006 	return 1;
   1007     }
   1008     fprintf(f, "%d\n", result);
   1009     fclose(f);
   1010 
   1011     return 0;
   1012 ]])],
   1013                              [je_cv_static_page_shift=`cat conftest.out`],
   1014                              [je_cv_static_page_shift=undefined],
   1015                              [je_cv_static_page_shift=12]))
   1016 
   1017 if test "x$je_cv_static_page_shift" != "xundefined"; then
   1018    AC_DEFINE_UNQUOTED([STATIC_PAGE_SHIFT], [$je_cv_static_page_shift])
   1019 else
   1020    AC_MSG_ERROR([cannot determine value for STATIC_PAGE_SHIFT])
   1021 fi
   1022 
   1023 dnl ============================================================================
   1024 dnl jemalloc configuration.
   1025 dnl 
   1026 
   1027 dnl Set VERSION if source directory has an embedded git repository.
   1028 if test -d "${srcroot}.git" ; then
   1029   git describe --long --abbrev=40 > ${srcroot}VERSION
   1030 fi
   1031 jemalloc_version=`cat ${srcroot}VERSION`
   1032 jemalloc_version_major=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]1}'`
   1033 jemalloc_version_minor=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]2}'`
   1034 jemalloc_version_bugfix=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]3}'`
   1035 jemalloc_version_nrev=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]4}'`
   1036 jemalloc_version_gid=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]5}'`
   1037 AC_SUBST([jemalloc_version])
   1038 AC_SUBST([jemalloc_version_major])
   1039 AC_SUBST([jemalloc_version_minor])
   1040 AC_SUBST([jemalloc_version_bugfix])
   1041 AC_SUBST([jemalloc_version_nrev])
   1042 AC_SUBST([jemalloc_version_gid])
   1043 
   1044 dnl ============================================================================
   1045 dnl Configure pthreads.
   1046 
   1047 if test "x$abi" != "xpecoff" ; then
   1048   AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])])
   1049   dnl Some systems may embed pthreads functionality in libc; check for libpthread
   1050   dnl first, but try libc too before failing.
   1051   AC_CHECK_LIB([pthread], [pthread_create], [LIBS="$LIBS -lpthread"],
   1052                [AC_SEARCH_LIBS([pthread_create], , ,
   1053                                AC_MSG_ERROR([libpthread is missing]))])
   1054 fi
   1055 
   1056 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
   1057 
   1058 dnl Check whether the BSD-specific _malloc_thread_cleanup() exists.  If so, use
   1059 dnl it rather than pthreads TSD cleanup functions to support cleanup during
   1060 dnl thread exit, in order to avoid pthreads library recursion during
   1061 dnl bootstrapping.
   1062 AC_CHECK_FUNC([_malloc_thread_cleanup],
   1063               [have__malloc_thread_cleanup="1"],
   1064               [have__malloc_thread_cleanup="0"]
   1065              )
   1066 if test "x$have__malloc_thread_cleanup" = "x1" ; then
   1067   AC_DEFINE([JEMALLOC_MALLOC_THREAD_CLEANUP], [ ])
   1068   force_tls="1"
   1069 fi
   1070 
   1071 dnl Check whether the BSD-specific _pthread_mutex_init_calloc_cb() exists.  If
   1072 dnl so, mutex initialization causes allocation, and we need to implement this
   1073 dnl callback function in order to prevent recursive allocation.
   1074 AC_CHECK_FUNC([_pthread_mutex_init_calloc_cb],
   1075               [have__pthread_mutex_init_calloc_cb="1"],
   1076               [have__pthread_mutex_init_calloc_cb="0"]
   1077              )
   1078 if test "x$have__pthread_mutex_init_calloc_cb" = "x1" ; then
   1079   AC_DEFINE([JEMALLOC_MUTEX_INIT_CB])
   1080 fi
   1081 
   1082 dnl Disable lazy locking by default.
   1083 AC_ARG_ENABLE([lazy_lock],
   1084   [AS_HELP_STRING([--enable-lazy-lock],
   1085   [Enable lazy locking (only lock when multi-threaded)])],
   1086 [if test "x$enable_lazy_lock" = "xno" ; then
   1087   enable_lazy_lock="0"
   1088 else
   1089   enable_lazy_lock="1"
   1090 fi
   1091 ],
   1092 [enable_lazy_lock="0"]
   1093 )
   1094 if test "x$enable_lazy_lock" = "x0" -a "x${force_lazy_lock}" = "x1" ; then
   1095   AC_MSG_RESULT([Forcing lazy-lock to avoid allocator/threading bootstrap issues])
   1096   enable_lazy_lock="1"
   1097 fi
   1098 if test "x$enable_lazy_lock" = "x1" ; then
   1099   if test "x$abi" != "xpecoff" ; then
   1100     AC_CHECK_HEADERS([dlfcn.h], , [AC_MSG_ERROR([dlfcn.h is missing])])
   1101     AC_CHECK_FUNC([dlsym], [],
   1102       [AC_CHECK_LIB([dl], [dlsym], [LIBS="$LIBS -ldl"],
   1103                     [AC_MSG_ERROR([libdl is missing])])
   1104       ])
   1105   fi
   1106   AC_DEFINE([JEMALLOC_LAZY_LOCK], [ ])
   1107 fi
   1108 AC_SUBST([enable_lazy_lock])
   1109 
   1110 AC_ARG_ENABLE([tls],
   1111   [AS_HELP_STRING([--disable-tls], [Disable thread-local storage (__thread keyword)])],
   1112 if test "x$enable_tls" = "xno" ; then
   1113   enable_tls="0"
   1114 else
   1115   enable_tls="1"
   1116 fi
   1117 ,
   1118 enable_tls="1"
   1119 )
   1120 if test "x${enable_tls}" = "x0" -a "x${force_tls}" = "x1" ; then
   1121   AC_MSG_RESULT([Forcing TLS to avoid allocator/threading bootstrap issues])
   1122   enable_tls="1"
   1123 fi
   1124 if test "x${enable_tls}" = "x1" -a "x${force_tls}" = "x0" ; then
   1125   AC_MSG_RESULT([Forcing no TLS to avoid allocator/threading bootstrap issues])
   1126   enable_tls="0"
   1127 fi
   1128 if test "x${enable_tls}" = "x1" ; then
   1129 AC_MSG_CHECKING([for TLS])
   1130 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
   1131 [[
   1132     __thread int x;
   1133 ]], [[
   1134     x = 42;
   1135 
   1136     return 0;
   1137 ]])],
   1138               AC_MSG_RESULT([yes]),
   1139               AC_MSG_RESULT([no])
   1140               enable_tls="0")
   1141 fi
   1142 AC_SUBST([enable_tls])
   1143 if test "x${enable_tls}" = "x1" ; then
   1144   AC_DEFINE_UNQUOTED([JEMALLOC_TLS], [ ])
   1145 elif test "x${force_tls}" = "x1" ; then
   1146   AC_MSG_ERROR([Failed to configure TLS, which is mandatory for correct function])
   1147 fi
   1148 
   1149 dnl ============================================================================
   1150 dnl Check for atomic(9) operations as provided on FreeBSD.
   1151 
   1152 JE_COMPILABLE([atomic(9)], [
   1153 #include <sys/types.h>
   1154 #include <machine/atomic.h>
   1155 #include <inttypes.h>
   1156 ], [
   1157 	{
   1158 		uint32_t x32 = 0;
   1159 		volatile uint32_t *x32p = &x32;
   1160 		atomic_fetchadd_32(x32p, 1);
   1161 	}
   1162 	{
   1163 		unsigned long xlong = 0;
   1164 		volatile unsigned long *xlongp = &xlong;
   1165 		atomic_fetchadd_long(xlongp, 1);
   1166 	}
   1167 ], [je_cv_atomic9])
   1168 if test "x${je_cv_atomic9}" = "xyes" ; then
   1169   AC_DEFINE([JEMALLOC_ATOMIC9])
   1170 fi
   1171 
   1172 dnl ============================================================================
   1173 dnl Check for atomic(3) operations as provided on Darwin.
   1174 
   1175 JE_COMPILABLE([Darwin OSAtomic*()], [
   1176 #include <libkern/OSAtomic.h>
   1177 #include <inttypes.h>
   1178 ], [
   1179 	{
   1180 		int32_t x32 = 0;
   1181 		volatile int32_t *x32p = &x32;
   1182 		OSAtomicAdd32(1, x32p);
   1183 	}
   1184 	{
   1185 		int64_t x64 = 0;
   1186 		volatile int64_t *x64p = &x64;
   1187 		OSAtomicAdd64(1, x64p);
   1188 	}
   1189 ], [je_cv_osatomic])
   1190 if test "x${je_cv_osatomic}" = "xyes" ; then
   1191   AC_DEFINE([JEMALLOC_OSATOMIC], [ ])
   1192 fi
   1193 
   1194 dnl ============================================================================
   1195 dnl Check for madvise(2).
   1196 
   1197 JE_COMPILABLE([madvise(2)], [
   1198 #include <sys/mman.h>
   1199 ], [
   1200 	{
   1201 		madvise((void *)0, 0, 0);
   1202 	}
   1203 ], [je_cv_madvise])
   1204 if test "x${je_cv_madvise}" = "xyes" ; then
   1205   AC_DEFINE([JEMALLOC_HAVE_MADVISE], [ ])
   1206 fi
   1207 
   1208 dnl ============================================================================
   1209 dnl Check whether __sync_{add,sub}_and_fetch() are available despite
   1210 dnl __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n macros being undefined.
   1211 
   1212 AC_DEFUN([JE_SYNC_COMPARE_AND_SWAP_CHECK],[
   1213   AC_CACHE_CHECK([whether to force $1-bit __sync_{add,sub}_and_fetch()],
   1214                [je_cv_sync_compare_and_swap_$2],
   1215                [AC_LINK_IFELSE([AC_LANG_PROGRAM([
   1216                                                  #include <stdint.h>
   1217                                                 ],
   1218                                                 [
   1219                                                  #ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_$2
   1220                                                  {
   1221                                                     uint$1_t x$1 = 0;
   1222                                                     __sync_add_and_fetch(&x$1, 42);
   1223                                                     __sync_sub_and_fetch(&x$1, 1);
   1224                                                  }
   1225                                                  #else
   1226                                                  #error __GCC_HAVE_SYNC_COMPARE_AND_SWAP_$2 is defined, no need to force
   1227                                                  #endif
   1228                                                 ])],
   1229                                [je_cv_sync_compare_and_swap_$2=yes],
   1230                                [je_cv_sync_compare_and_swap_$2=no])])
   1231 
   1232   if test "x${je_cv_sync_compare_and_swap_$2}" = "xyes" ; then
   1233     AC_DEFINE([JE_FORCE_SYNC_COMPARE_AND_SWAP_$2], [ ])
   1234   fi
   1235 ])
   1236 
   1237 if test "x${je_cv_atomic9}" != "xyes" -a "x${je_cv_osatomic}" != "xyes" ; then
   1238   JE_SYNC_COMPARE_AND_SWAP_CHECK(32, 4)
   1239   JE_SYNC_COMPARE_AND_SWAP_CHECK(64, 8)
   1240 fi
   1241 
   1242 dnl ============================================================================
   1243 dnl Check for __builtin_clz() and __builtin_clzl().
   1244 
   1245 AC_CACHE_CHECK([for __builtin_clz],
   1246                [je_cv_builtin_clz],
   1247                [AC_LINK_IFELSE([AC_LANG_PROGRAM([],
   1248                                                 [
   1249                                                 {
   1250                                                         unsigned x = 0;
   1251                                                         int y = __builtin_clz(x);
   1252                                                 }
   1253                                                 {
   1254                                                         unsigned long x = 0;
   1255                                                         int y = __builtin_clzl(x);
   1256                                                 }
   1257                                                 ])],
   1258                                [je_cv_builtin_clz=yes],
   1259                                [je_cv_builtin_clz=no])])
   1260 
   1261 if test "x${je_cv_builtin_clz}" = "xyes" ; then
   1262   AC_DEFINE([JEMALLOC_HAVE_BUILTIN_CLZ], [ ])
   1263 fi
   1264 
   1265 dnl ============================================================================
   1266 dnl Check for spinlock(3) operations as provided on Darwin.
   1267 
   1268 JE_COMPILABLE([Darwin OSSpin*()], [
   1269 #include <libkern/OSAtomic.h>
   1270 #include <inttypes.h>
   1271 ], [
   1272 	OSSpinLock lock = 0;
   1273 	OSSpinLockLock(&lock);
   1274 	OSSpinLockUnlock(&lock);
   1275 ], [je_cv_osspin])
   1276 if test "x${je_cv_osspin}" = "xyes" ; then
   1277   AC_DEFINE([JEMALLOC_OSSPIN], [ ])
   1278 fi
   1279 
   1280 dnl ============================================================================
   1281 dnl Darwin-related configuration.
   1282 
   1283 AC_ARG_ENABLE([zone-allocator],
   1284   [AS_HELP_STRING([--disable-zone-allocator],
   1285                   [Disable zone allocator for Darwin])],
   1286 [if test "x$enable_zone_allocator" = "xno" ; then
   1287   enable_zone_allocator="0"
   1288 else
   1289   enable_zone_allocator="1"
   1290 fi
   1291 ],
   1292 [if test "x${abi}" = "xmacho"; then
   1293   enable_zone_allocator="1"
   1294 fi
   1295 ]
   1296 )
   1297 AC_SUBST([enable_zone_allocator])
   1298 
   1299 if test "x${enable_zone_allocator}" = "x1" ; then
   1300   if test "x${abi}" != "xmacho"; then
   1301     AC_MSG_ERROR([--enable-zone-allocator is only supported on Darwin])
   1302   fi
   1303   AC_DEFINE([JEMALLOC_IVSALLOC], [ ])
   1304   AC_DEFINE([JEMALLOC_ZONE], [ ])
   1305 
   1306   dnl The szone version jumped from 3 to 6 between the OS X 10.5.x and 10.6
   1307   dnl releases.  malloc_zone_t and malloc_introspection_t have new fields in
   1308   dnl 10.6, which is the only source-level indication of the change.
   1309   AC_MSG_CHECKING([malloc zone version])
   1310   AC_DEFUN([JE_ZONE_PROGRAM],
   1311     [AC_LANG_PROGRAM(
   1312       [#include <malloc/malloc.h>],
   1313       [static foo[[sizeof($1) $2 sizeof(void *) * $3 ? 1 : -1]]]
   1314     )])
   1315 
   1316   AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,14)],[JEMALLOC_ZONE_VERSION=3],[
   1317   AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,15)],[JEMALLOC_ZONE_VERSION=5],[
   1318   AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,16)],[
   1319     AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_introspection_t,==,9)],[JEMALLOC_ZONE_VERSION=6],[
   1320     AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_introspection_t,==,13)],[JEMALLOC_ZONE_VERSION=7],[JEMALLOC_ZONE_VERSION=]
   1321   )])],[
   1322   AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,17)],[JEMALLOC_ZONE_VERSION=8],[
   1323   AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,>,17)],[JEMALLOC_ZONE_VERSION=9],[JEMALLOC_ZONE_VERSION=]
   1324   )])])])])
   1325   if test "x${JEMALLOC_ZONE_VERSION}" = "x"; then
   1326     AC_MSG_RESULT([unsupported])
   1327     AC_MSG_ERROR([Unsupported malloc zone version])
   1328   fi
   1329   if test "${JEMALLOC_ZONE_VERSION}" = 9; then
   1330     JEMALLOC_ZONE_VERSION=8
   1331     AC_MSG_RESULT([> 8])
   1332   else
   1333     AC_MSG_RESULT([$JEMALLOC_ZONE_VERSION])
   1334   fi
   1335   AC_DEFINE_UNQUOTED(JEMALLOC_ZONE_VERSION, [$JEMALLOC_ZONE_VERSION])
   1336 fi
   1337 
   1338 dnl ============================================================================
   1339 dnl Check for typedefs, structures, and compiler characteristics.
   1340 AC_HEADER_STDBOOL
   1341 
   1342 dnl ============================================================================
   1343 dnl Define commands that generate output files.
   1344 
   1345 AC_CONFIG_COMMANDS([include/jemalloc/internal/private_namespace.h], [
   1346   mkdir -p "${objroot}include/jemalloc/internal"
   1347   "${srcdir}/include/jemalloc/internal/private_namespace.sh" "${srcdir}/include/jemalloc/internal/private_symbols.txt" > "${objroot}include/jemalloc/internal/private_namespace.h"
   1348 ], [
   1349   srcdir="${srcdir}"
   1350   objroot="${objroot}"
   1351 ])
   1352 AC_CONFIG_COMMANDS([include/jemalloc/internal/private_unnamespace.h], [
   1353   mkdir -p "${objroot}include/jemalloc/internal"
   1354   "${srcdir}/include/jemalloc/internal/private_unnamespace.sh" "${srcdir}/include/jemalloc/internal/private_symbols.txt" > "${objroot}include/jemalloc/internal/private_unnamespace.h"
   1355 ], [
   1356   srcdir="${srcdir}"
   1357   objroot="${objroot}"
   1358 ])
   1359 AC_CONFIG_COMMANDS([include/jemalloc/internal/public_symbols.txt], [
   1360   f="${objroot}include/jemalloc/internal/public_symbols.txt"
   1361   mkdir -p "${objroot}include/jemalloc/internal"
   1362   cp /dev/null "${f}"
   1363   for nm in `echo ${mangling_map} |tr ',' ' '` ; do
   1364     n=`echo ${nm} |tr ':' ' ' |awk '{print $[]1}'`
   1365     m=`echo ${nm} |tr ':' ' ' |awk '{print $[]2}'`
   1366     echo "${n}:${m}" >> "${f}"
   1367     dnl Remove name from public_syms so that it isn't redefined later.
   1368     public_syms=`for sym in ${public_syms}; do echo "${sym}"; done |grep -v "^${n}\$" |tr '\n' ' '`
   1369   done
   1370   for sym in ${public_syms} ; do
   1371     n="${sym}"
   1372     m="${JEMALLOC_PREFIX}${sym}"
   1373     echo "${n}:${m}" >> "${f}"
   1374   done
   1375 ], [
   1376   srcdir="${srcdir}"
   1377   objroot="${objroot}"
   1378   mangling_map="${mangling_map}"
   1379   public_syms="${public_syms}"
   1380   JEMALLOC_PREFIX="${JEMALLOC_PREFIX}"
   1381 ])
   1382 AC_CONFIG_COMMANDS([include/jemalloc/internal/public_namespace.h], [
   1383   mkdir -p "${objroot}include/jemalloc/internal"
   1384   "${srcdir}/include/jemalloc/internal/public_namespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_namespace.h"
   1385 ], [
   1386   srcdir="${srcdir}"
   1387   objroot="${objroot}"
   1388 ])
   1389 AC_CONFIG_COMMANDS([include/jemalloc/internal/public_unnamespace.h], [
   1390   mkdir -p "${objroot}include/jemalloc/internal"
   1391   "${srcdir}/include/jemalloc/internal/public_unnamespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_unnamespace.h"
   1392 ], [
   1393   srcdir="${srcdir}"
   1394   objroot="${objroot}"
   1395 ])
   1396 AC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [
   1397   mkdir -p "${objroot}include/jemalloc/internal"
   1398   "${srcdir}/include/jemalloc/internal/size_classes.sh" > "${objroot}include/jemalloc/internal/size_classes.h"
   1399 ], [
   1400   srcdir="${srcdir}"
   1401   objroot="${objroot}"
   1402 ])
   1403 AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_protos_jet.h], [
   1404   mkdir -p "${objroot}include/jemalloc"
   1405   cat "${srcdir}/include/jemalloc/jemalloc_protos.h.in" | sed -e 's/@je_@/jet_/g' > "${objroot}include/jemalloc/jemalloc_protos_jet.h"
   1406 ], [
   1407   srcdir="${srcdir}"
   1408   objroot="${objroot}"
   1409 ])
   1410 AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_rename.h], [
   1411   mkdir -p "${objroot}include/jemalloc"
   1412   "${srcdir}/include/jemalloc/jemalloc_rename.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/jemalloc_rename.h"
   1413 ], [
   1414   srcdir="${srcdir}"
   1415   objroot="${objroot}"
   1416 ])
   1417 AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle.h], [
   1418   mkdir -p "${objroot}include/jemalloc"
   1419   "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" je_ > "${objroot}include/jemalloc/jemalloc_mangle.h"
   1420 ], [
   1421   srcdir="${srcdir}"
   1422   objroot="${objroot}"
   1423 ])
   1424 AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle_jet.h], [
   1425   mkdir -p "${objroot}include/jemalloc"
   1426   "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" jet_ > "${objroot}include/jemalloc/jemalloc_mangle_jet.h"
   1427 ], [
   1428   srcdir="${srcdir}"
   1429   objroot="${objroot}"
   1430 ])
   1431 AC_CONFIG_COMMANDS([include/jemalloc/jemalloc.h], [
   1432   mkdir -p "${objroot}include/jemalloc"
   1433   "${srcdir}/include/jemalloc/jemalloc.sh" "${objroot}" > "${objroot}include/jemalloc/jemalloc${install_suffix}.h"
   1434 ], [
   1435   srcdir="${srcdir}"
   1436   objroot="${objroot}"
   1437   install_suffix="${install_suffix}"
   1438 ])
   1439 
   1440 dnl Process .in files.
   1441 AC_SUBST([cfghdrs_in])
   1442 AC_SUBST([cfghdrs_out])
   1443 AC_CONFIG_HEADERS([$cfghdrs_tup])
   1444 
   1445 dnl ============================================================================
   1446 dnl Generate outputs.
   1447 
   1448 AC_CONFIG_FILES([$cfgoutputs_tup config.stamp bin/jemalloc.sh])
   1449 AC_SUBST([cfgoutputs_in])
   1450 AC_SUBST([cfgoutputs_out])
   1451 AC_OUTPUT
   1452 
   1453 dnl ============================================================================
   1454 dnl Print out the results of configuration.
   1455 AC_MSG_RESULT([===============================================================================])
   1456 AC_MSG_RESULT([jemalloc version   : ${jemalloc_version}])
   1457 AC_MSG_RESULT([library revision   : ${rev}])
   1458 AC_MSG_RESULT([])
   1459 AC_MSG_RESULT([CC                 : ${CC}])
   1460 AC_MSG_RESULT([CPPFLAGS           : ${CPPFLAGS}])
   1461 AC_MSG_RESULT([CFLAGS             : ${CFLAGS}])
   1462 AC_MSG_RESULT([LDFLAGS            : ${LDFLAGS}])
   1463 AC_MSG_RESULT([EXTRA_LDFLAGS      : ${EXTRA_LDFLAGS}])
   1464 AC_MSG_RESULT([LIBS               : ${LIBS}])
   1465 AC_MSG_RESULT([RPATH_EXTRA        : ${RPATH_EXTRA}])
   1466 AC_MSG_RESULT([])
   1467 AC_MSG_RESULT([XSLTPROC           : ${XSLTPROC}])
   1468 AC_MSG_RESULT([XSLROOT            : ${XSLROOT}])
   1469 AC_MSG_RESULT([])
   1470 AC_MSG_RESULT([PREFIX             : ${PREFIX}])
   1471 AC_MSG_RESULT([BINDIR             : ${BINDIR}])
   1472 AC_MSG_RESULT([INCLUDEDIR         : ${INCLUDEDIR}])
   1473 AC_MSG_RESULT([LIBDIR             : ${LIBDIR}])
   1474 AC_MSG_RESULT([DATADIR            : ${DATADIR}])
   1475 AC_MSG_RESULT([MANDIR             : ${MANDIR}])
   1476 AC_MSG_RESULT([])
   1477 AC_MSG_RESULT([srcroot            : ${srcroot}])
   1478 AC_MSG_RESULT([abs_srcroot        : ${abs_srcroot}])
   1479 AC_MSG_RESULT([objroot            : ${objroot}])
   1480 AC_MSG_RESULT([abs_objroot        : ${abs_objroot}])
   1481 AC_MSG_RESULT([])
   1482 AC_MSG_RESULT([JEMALLOC_PREFIX    : ${JEMALLOC_PREFIX}])
   1483 AC_MSG_RESULT([JEMALLOC_PRIVATE_NAMESPACE])
   1484 AC_MSG_RESULT([                   : ${JEMALLOC_PRIVATE_NAMESPACE}])
   1485 AC_MSG_RESULT([install_suffix     : ${install_suffix}])
   1486 AC_MSG_RESULT([autogen            : ${enable_autogen}])
   1487 AC_MSG_RESULT([cc-silence         : ${enable_cc_silence}])
   1488 AC_MSG_RESULT([debug              : ${enable_debug}])
   1489 AC_MSG_RESULT([code-coverage      : ${enable_code_coverage}])
   1490 AC_MSG_RESULT([stats              : ${enable_stats}])
   1491 AC_MSG_RESULT([prof               : ${enable_prof}])
   1492 AC_MSG_RESULT([prof-libunwind     : ${enable_prof_libunwind}])
   1493 AC_MSG_RESULT([prof-libgcc        : ${enable_prof_libgcc}])
   1494 AC_MSG_RESULT([prof-gcc           : ${enable_prof_gcc}])
   1495 AC_MSG_RESULT([tcache             : ${enable_tcache}])
   1496 AC_MSG_RESULT([fill               : ${enable_fill}])
   1497 AC_MSG_RESULT([utrace             : ${enable_utrace}])
   1498 AC_MSG_RESULT([valgrind           : ${enable_valgrind}])
   1499 AC_MSG_RESULT([xmalloc            : ${enable_xmalloc}])
   1500 AC_MSG_RESULT([munmap             : ${enable_munmap}])
   1501 AC_MSG_RESULT([lazy_lock          : ${enable_lazy_lock}])
   1502 AC_MSG_RESULT([tls                : ${enable_tls}])
   1503 AC_MSG_RESULT([===============================================================================])
   1504