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