blob: 9f51999c7b3a605fdda8ee685f7a6171fc13eef8 [file] [log] [blame]
Jason Evansb7924f52009-06-23 19:01:18 -07001dnl Process this file with autoconf to produce a configure script.
2AC_INIT([Makefile.in])
3
Jason Evansf3340ca2009-06-30 16:17:05 -07004dnl ============================================================================
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_RUN_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)
29AC_DEFUN([JE_COMPILABLE],
30[
31AC_MSG_CHECKING([whether $1 is compilable])
32AC_RUN_IFELSE([AC_LANG_PROGRAM(
33[$2], [$3])],
34 AC_MSG_RESULT([yes])
35 [$4="yes"],
36 AC_MSG_RESULT([no])
37 [$4="no"]
38)
39])
40
41dnl ============================================================================
42
Jason Evansb7924f52009-06-23 19:01:18 -070043srcroot=$srcdir
44if test "x${srcroot}" = "x." ; then
45 srcroot=""
46else
47 srcroot="${srcroot}/"
48fi
49AC_SUBST([srcroot])
50abs_srcroot="`cd \"${srcdir}\"; pwd`/"
51AC_SUBST([abs_srcroot])
52
53objroot=""
54AC_SUBST([objroot])
55abs_objroot="`pwd`/"
56AC_SUBST([abs_objroot])
57
58dnl Munge install path variables.
59if test "x$prefix" = "xNONE" ; then
60 prefix="/usr/local"
61fi
62if test "x$exec_prefix" = "xNONE" ; then
63 exec_prefix=$prefix
64fi
65PREFIX=$prefix
66AC_SUBST([PREFIX])
67BINDIR=`eval echo $bindir`
68BINDIR=`eval echo $BINDIR`
69AC_SUBST([BINDIR])
70INCLUDEDIR=`eval echo $includedir`
71INCLUDEDIR=`eval echo $INCLUDEDIR`
72AC_SUBST([INCLUDEDIR])
73LIBDIR=`eval echo $libdir`
74LIBDIR=`eval echo $LIBDIR`
75AC_SUBST([LIBDIR])
76DATADIR=`eval echo $datadir`
77DATADIR=`eval echo $DATADIR`
78AC_SUBST([DATADIR])
79MANDIR=`eval echo $mandir`
80MANDIR=`eval echo $MANDIR`
81AC_SUBST([MANDIR])
82
Jason Evansf3340ca2009-06-30 16:17:05 -070083dnl If CFLAGS isn't defined, set CFLAGS to something reasonable. Otherwise,
84dnl just prevent autoconf from molesting CFLAGS.
Jason Evansb7924f52009-06-23 19:01:18 -070085CFLAGS=$CFLAGS
86AC_PROG_CC
87if test "x$CFLAGS" = "x" ; then
88 no_CFLAGS="yes"
Jason Evanscfeccd32010-03-03 15:48:20 -080089 if test "x$GCC" = "xyes" ; then
90 JE_CFLAGS_APPEND([-std=gnu99])
91 JE_CFLAGS_APPEND([-Wall])
92 JE_CFLAGS_APPEND([-pipe])
93 JE_CFLAGS_APPEND([-g3])
94 fi
Jason Evansb7924f52009-06-23 19:01:18 -070095fi
96dnl Append EXTRA_CFLAGS to CFLAGS, if defined.
97if test "x$EXTRA_CFLAGS" != "x" ; then
Jason Evansf3340ca2009-06-30 16:17:05 -070098 JE_CFLAGS_APPEND([$EXTRA_CFLAGS])
Jason Evansb7924f52009-06-23 19:01:18 -070099fi
100AC_PROG_CPP
101
Jason Evansb7924f52009-06-23 19:01:18 -0700102AC_CHECK_SIZEOF([void *])
103if test "x${ac_cv_sizeof_void_p}" = "x8" ; then
Jason Evans94ad2b52009-12-29 00:09:15 -0800104 LG_SIZEOF_PTR=3
Jason Evansb7924f52009-06-23 19:01:18 -0700105elif test "x${ac_cv_sizeof_void_p}" = "x4" ; then
Jason Evans94ad2b52009-12-29 00:09:15 -0800106 LG_SIZEOF_PTR=2
Jason Evansb7924f52009-06-23 19:01:18 -0700107else
108 AC_MSG_ERROR([Unsupported pointer size: ${ac_cv_sizeof_void_p}])
109fi
Jason Evans94ad2b52009-12-29 00:09:15 -0800110AC_DEFINE_UNQUOTED([LG_SIZEOF_PTR], [$LG_SIZEOF_PTR])
111
112AC_CHECK_SIZEOF([int])
113if test "x${ac_cv_sizeof_int}" = "x8" ; then
114 LG_SIZEOF_INT=3
115elif test "x${ac_cv_sizeof_int}" = "x4" ; then
116 LG_SIZEOF_INT=2
117else
118 AC_MSG_ERROR([Unsupported int size: ${ac_cv_sizeof_int}])
119fi
120AC_DEFINE_UNQUOTED([LG_SIZEOF_INT], [$LG_SIZEOF_INT])
Jason Evansb7924f52009-06-23 19:01:18 -0700121
122AC_CANONICAL_HOST
123dnl CPU-specific settings.
124CPU_SPINWAIT=""
125case "${host_cpu}" in
126 i[[345]]86)
127 ;;
128 i686)
Jason Evansf3340ca2009-06-30 16:17:05 -0700129 JE_COMPILABLE([__asm__], [], [[__asm__ volatile("pause"); return 0;]],
130 [asm])
131 if test "x${asm}" = "xyes" ; then
132 CPU_SPINWAIT='__asm__ volatile("pause")'
133 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700134 ;;
135 x86_64)
Jason Evansf3340ca2009-06-30 16:17:05 -0700136 JE_COMPILABLE([__asm__ syntax], [],
137 [[__asm__ volatile("pause"); return 0;]], [asm])
138 if test "x${asm}" = "xyes" ; then
139 CPU_SPINWAIT='__asm__ volatile("pause")'
140 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700141 ;;
142 *)
143 ;;
144esac
145AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT])
146
Jason Evansf3340ca2009-06-30 16:17:05 -0700147JE_COMPILABLE([__attribute__ syntax],
148 [static __attribute__((unused)) void foo(void){}],
149 [],
150 [attribute])
151if test "x${attribute}" = "xyes" ; then
Jason Evans9ad48232010-01-03 11:59:20 -0800152 AC_DEFINE([JEMALLOC_HAVE_ATTR], [ ])
Jason Evanse476f8a2010-01-16 09:53:50 -0800153 if test "x$GCC" = "xyes" ; then
154 JE_CFLAGS_APPEND([-fvisibility=internal])
155 fi
Jason Evansf3340ca2009-06-30 16:17:05 -0700156fi
157
Jason Evansb7924f52009-06-23 19:01:18 -0700158dnl Platform-specific settings. abi and RPATH can probably be determined
159dnl programmatically, but doing so is error-prone, which makes it generally
160dnl not worth the trouble.
161dnl
162dnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the
163dnl definitions need to be seen before any headers are included, which is a pain
164dnl to make happen otherwise.
165case "${host}" in
166 *-*-darwin*)
167 CFLAGS="$CFLAGS -fno-common -no-cpp-precomp"
168 abi="macho"
169 RPATH=""
170 ;;
171 *-*-freebsd*)
172 CFLAGS="$CFLAGS"
173 abi="elf"
174 RPATH="-Wl,-rpath,"
175 ;;
176 *-*-linux*)
177 CFLAGS="$CFLAGS"
178 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
179 abi="elf"
180 RPATH="-Wl,-rpath,"
181 ;;
182 *-*-netbsd*)
183 AC_MSG_CHECKING([ABI])
184 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
185[[#ifdef __ELF__
186/* ELF */
187#else
188#error aout
189#endif
190]])],
191 [CFLAGS="$CFLAGS"; abi="elf"],
192 [abi="aout"])
193 AC_MSG_RESULT([$abi])
194 RPATH="-Wl,-rpath,"
195 ;;
196 *-*-solaris2*)
197 CFLAGS="$CFLAGS"
198 abi="elf"
199 RPATH="-Wl,-R,"
200 dnl Solaris needs this for sigwait().
201 CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
202 LIBS="$LIBS -lposix4 -lsocket -lnsl"
203 ;;
204 *)
205 AC_MSG_RESULT([Unsupported operating system: ${host}])
206 abi="elf"
207 RPATH="-Wl,-rpath,"
208 ;;
209esac
210AC_SUBST([abi])
211AC_SUBST([RPATH])
212
213dnl Support optional additions to rpath.
214AC_ARG_WITH([rpath],
Jason Evans90895cf2009-12-29 00:09:15 -0800215 [AS_HELP_STRING([--with-rpath=<rpath>], [Colon-separated rpath (ELF systems only)])],
Jason Evansb7924f52009-06-23 19:01:18 -0700216if test "x$with_rpath" = "xno" ; then
217 RPATH_EXTRA=
218else
219 RPATH_EXTRA="`echo $with_rpath | tr \":\" \" \"`"
220fi,
221 RPATH_EXTRA=
222)
223AC_SUBST([RPATH_EXTRA])
224
225dnl Disable rules that do automatic regeneration of configure output by default.
226AC_ARG_ENABLE([autogen],
Jason Evans78d815c2010-01-17 14:06:20 -0800227 [AS_HELP_STRING([--enable-autogen], [Automatically regenerate configure output])],
Jason Evansb7924f52009-06-23 19:01:18 -0700228if test "x$enable_autogen" = "xno" ; then
229 enable_autogen="0"
230else
231 enable_autogen="1"
232fi
233,
234enable_autogen="0"
235)
236AC_SUBST([enable_autogen])
237
238AC_PROG_INSTALL
239AC_PROG_RANLIB
240AC_PATH_PROG([AR], [ar], , [$PATH])
241AC_PATH_PROG([LD], [ld], , [$PATH])
242AC_PATH_PROG([AUTOCONF], [autoconf], , [$PATH])
243
Jason Evans90895cf2009-12-29 00:09:15 -0800244dnl Do not prefix public APIs by default.
245AC_ARG_WITH([jemalloc_prefix],
246 [AS_HELP_STRING([--with-jemalloc-prefix=<prefix>], [Prefix to prepend to all public APIs])],
Jason Evansb0fd5012010-01-17 01:49:20 -0800247 [JEMALLOC_PREFIX="$with_jemalloc_prefix"],
248 [JEMALLOC_PREFIX=]
Jason Evans90895cf2009-12-29 00:09:15 -0800249)
250if test "x$JEMALLOC_PREFIX" != "x" ; then
251 AC_DEFINE([JEMALLOC_PREFIX], [ ])
Jason Evansb0fd5012010-01-17 01:49:20 -0800252 jemalloc_prefix="$JEMALLOC_PREFIX"
Jason Evans90895cf2009-12-29 00:09:15 -0800253 AC_SUBST([jemalloc_prefix])
Jason Evanse476f8a2010-01-16 09:53:50 -0800254 AC_DEFINE_UNQUOTED([JEMALLOC_P(string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix)], [${JEMALLOC_PREFIX}##string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix])
Jason Evans90895cf2009-12-29 00:09:15 -0800255fi
256
Jason Evansb0fd5012010-01-17 01:49:20 -0800257dnl Do not add suffix to installed files by default.
258AC_ARG_WITH([install_suffix],
259 [AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])],
260 [INSTALL_SUFFIX="$with_install_suffix"],
261 [INSTALL_SUFFIX=]
262)
263install_suffix="$INSTALL_SUFFIX"
264AC_SUBST([install_suffix])
265
266cfgoutputs_in="Makefile doc/jemalloc.3.in"
Jason Evans376b1522010-02-11 14:45:59 -0800267cfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc.h.in"
268cfgoutputs_in="${cfgoutputs_in} include/jemalloc/internal/jemalloc_internal.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800269
270cfgoutputs_out="Makefile doc/jemalloc${install_suffix}.3"
Jason Evans376b1522010-02-11 14:45:59 -0800271cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc${install_suffix}.h"
272cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_internal.h"
Jason Evansb0fd5012010-01-17 01:49:20 -0800273
274cfgoutputs_tup="Makefile doc/jemalloc${install_suffix}.3:doc/jemalloc.3.in"
Jason Evans376b1522010-02-11 14:45:59 -0800275cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc${install_suffix}.h:include/jemalloc/jemalloc.h.in"
276cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_internal.h"
Jason Evansb0fd5012010-01-17 01:49:20 -0800277
Jason Evans376b1522010-02-11 14:45:59 -0800278cfghdrs_in="include/jemalloc/jemalloc_defs.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800279
Jason Evans376b1522010-02-11 14:45:59 -0800280cfghdrs_out="include/jemalloc/jemalloc_defs${install_suffix}.h"
Jason Evansb0fd5012010-01-17 01:49:20 -0800281
Jason Evans376b1522010-02-11 14:45:59 -0800282cfghdrs_tup="include/jemalloc/jemalloc_defs${install_suffix}.h:include/jemalloc/jemalloc_defs.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800283
Jason Evansb7924f52009-06-23 19:01:18 -0700284dnl Do not compile with debugging by default.
285AC_ARG_ENABLE([debug],
286 [AS_HELP_STRING([--enable-debug], [Build debugging code])],
287[if test "x$enable_debug" = "xno" ; then
288 enable_debug="0"
289else
290 enable_debug="1"
291fi
292],
293[enable_debug="0"]
294)
295if test "x$enable_debug" = "x1" ; then
296 AC_DEFINE([JEMALLOC_DEBUG], [ ])
297fi
298AC_SUBST([enable_debug])
299
300dnl Only optimize if not debugging.
301if test "x$enable_debug" = "x0" -a "x$no_CFLAGS" = "xyes" ; then
302 dnl Make sure that an optimization flag was not specified in EXTRA_CFLAGS.
Jason Evansf3340ca2009-06-30 16:17:05 -0700303 optimize="no"
304 echo "$EXTRA_CFLAGS" | grep "\-O" >/dev/null || optimize="yes"
305 if test "x${optimize}" = "xyes" ; then
306 if test "x$GCC" = "xyes" ; then
307 JE_CFLAGS_APPEND([-O3])
308 JE_CFLAGS_APPEND([-funroll-loops])
Jason Evanscfeccd32010-03-03 15:48:20 -0800309 JE_CFLAGS_APPEND([-march=native])
Jason Evansf3340ca2009-06-30 16:17:05 -0700310 else
311 JE_CFLAGS_APPEND([-O])
312 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700313 fi
314fi
315
316dnl Do not enable statistics calculation by default.
317AC_ARG_ENABLE([stats],
318 [AS_HELP_STRING([--enable-stats], [Enable statistics calculation/reporting])],
319[if test "x$enable_stats" = "xno" ; then
320 enable_stats="0"
321else
322 enable_stats="1"
323fi
324],
325[enable_stats="0"]
326)
327if test "x$enable_stats" = "x1" ; then
328 AC_DEFINE([JEMALLOC_STATS], [ ])
329fi
330AC_SUBST([enable_stats])
Jason Evanscc00a152009-06-25 18:06:48 -0700331if test "x$enable_stats" = "x0" ; then
332 roff_stats=".\\\" "
333else
334 roff_stats=""
335fi
336AC_SUBST([roff_stats])
Jason Evansb7924f52009-06-23 19:01:18 -0700337
Jason Evans6109fe02010-02-10 10:37:56 -0800338dnl Do not enable profiling by default.
339AC_ARG_ENABLE([prof],
340 [AS_HELP_STRING([--enable-prof], [Enable allocation profiling])],
341[if test "x$enable_prof" = "xno" ; then
342 enable_prof="0"
343else
344 enable_prof="1"
345fi
346],
347[enable_prof="0"]
348)
Jason Evansb27805b2010-02-10 18:15:53 -0800349AC_ARG_ENABLE([prof-libgcc],
350 [AS_HELP_STRING([--disable-prof-libgcc],
351 [Do not use libgcc for backtracing])],
352[if test "x$enable_prof_libgcc" = "xno" ; then
353 enable_prof_libgcc="0"
354else
355 enable_prof_libgcc="1"
356fi
357],
358[enable_prof_libgcc="1"]
359)
Jason Evans6109fe02010-02-10 10:37:56 -0800360AC_ARG_ENABLE([prof-libunwind],
361 [AS_HELP_STRING([--enable-prof-libunwind], [Use libunwind for backtracing])],
362[if test "x$enable_prof_libunwind" = "xno" ; then
363 enable_prof_libunwind="0"
364else
365 enable_prof_libunwind="1"
366fi
367],
368[enable_prof_libunwind="0"]
369)
Jason Evansca6bd4f2010-03-02 14:12:58 -0800370AC_ARG_WITH([static_libunwind],
371 [AS_HELP_STRING([--with-static-libunwind=<libunwind.a>],
372 [Path to static libunwind library; use rather than dynamically linking])],
373if test "x$with_static_libunwind" = "xno" ; then
374 LUNWIND="-lunwind"
375else
376 if test ! -f "$with_static_libunwind" ; then
377 AC_MSG_ERROR([Static libunwind not found: $with_static_libunwind])
378 fi
379 LUNWIND="$with_static_libunwind"
380fi,
381 LUNWIND="-lunwind"
382)
Jason Evans6109fe02010-02-10 10:37:56 -0800383dnl Finish prof-related definitions below, once TLS configuration is done.
384
Jason Evansb7924f52009-06-23 19:01:18 -0700385dnl Enable tiny allocations by default.
386AC_ARG_ENABLE([tiny],
387 [AS_HELP_STRING([--disable-tiny], [Disable tiny (sub-quantum) allocations])],
388[if test "x$enable_tiny" = "xno" ; then
389 enable_tiny="0"
390else
391 enable_tiny="1"
392fi
393],
394[enable_tiny="1"]
395)
396if test "x$enable_tiny" = "x1" ; then
397 AC_DEFINE([JEMALLOC_TINY], [ ])
398fi
399AC_SUBST([enable_tiny])
Jason Evanscc00a152009-06-25 18:06:48 -0700400if test "x$enable_tiny" = "x0" ; then
401 roff_tiny=".\\\" "
402 roff_no_tiny=""
403else
404 roff_tiny=""
405 roff_no_tiny=".\\\" "
406fi
407AC_SUBST([roff_tiny])
408AC_SUBST([roff_no_tiny])
Jason Evansb7924f52009-06-23 19:01:18 -0700409
Jason Evans84cbbcb2009-12-29 00:09:15 -0800410dnl Enable thread-specific caching by default.
411AC_ARG_ENABLE([tcache],
412 [AS_HELP_STRING([--disable-tcache], [Disable per thread caches])],
413[if test "x$enable_tcache" = "xno" ; then
414 enable_tcache="0"
Jason Evansb7924f52009-06-23 19:01:18 -0700415else
Jason Evans84cbbcb2009-12-29 00:09:15 -0800416 enable_tcache="1"
Jason Evansb7924f52009-06-23 19:01:18 -0700417fi
418],
Jason Evans84cbbcb2009-12-29 00:09:15 -0800419[enable_tcache="1"]
Jason Evansb7924f52009-06-23 19:01:18 -0700420)
Jason Evans84cbbcb2009-12-29 00:09:15 -0800421dnl Finish tcache-related definitions below, once TLS configuration is done.
Jason Evansb7924f52009-06-23 19:01:18 -0700422
Jason Evans4201af02010-01-24 02:53:40 -0800423dnl Do not enable mmap()ped swap files by default.
424AC_ARG_ENABLE([swap],
425 [AS_HELP_STRING([--enable-swap], [Enable mmap()ped swap files])],
426[if test "x$enable_swap" = "xno" ; then
427 enable_swap="0"
428else
429 enable_swap="1"
430fi
431],
432[enable_swap="0"]
433)
434if test "x$enable_swap" = "x1" ; then
435 AC_DEFINE([JEMALLOC_SWAP], [ ])
436fi
437AC_SUBST([enable_swap])
438if test "x$enable_swap" = "x0" ; then
439 roff_swap=".\\\" "
440else
441 roff_swap=""
442fi
443AC_SUBST([roff_swap])
444
Jason Evansb7924f52009-06-23 19:01:18 -0700445dnl Do not enable allocation from DSS by default.
446AC_ARG_ENABLE([dss],
447 [AS_HELP_STRING([--enable-dss], [Enable allocation from DSS])],
448[if test "x$enable_dss" = "xno" ; then
449 enable_dss="0"
450else
451 enable_dss="1"
452fi
453],
454[enable_dss="0"]
455)
456if test "x$enable_dss" = "x1" ; then
457 AC_DEFINE([JEMALLOC_DSS], [ ])
458fi
459AC_SUBST([enable_dss])
Jason Evanscc00a152009-06-25 18:06:48 -0700460if test "x$enable_dss" = "x0" ; then
461 roff_dss=".\\\" "
462else
463 roff_dss=""
464fi
465AC_SUBST([roff_dss])
Jason Evansb7924f52009-06-23 19:01:18 -0700466
467dnl Do not support the junk/zero filling option by default.
468AC_ARG_ENABLE([fill],
469 [AS_HELP_STRING([--enable-fill], [Support junk/zero filling option])],
470[if test "x$enable_fill" = "xno" ; then
471 enable_fill="0"
472else
473 enable_fill="1"
474fi
475],
476[enable_fill="0"]
477)
478if test "x$enable_fill" = "x1" ; then
479 AC_DEFINE([JEMALLOC_FILL], [ ])
480fi
481AC_SUBST([enable_fill])
Jason Evanscc00a152009-06-25 18:06:48 -0700482if test "x$enable_fill" = "x0" ; then
483 roff_fill=".\\\" "
484else
485 roff_fill=""
486fi
487AC_SUBST([roff_fill])
Jason Evansb7924f52009-06-23 19:01:18 -0700488
489dnl Do not support the xmalloc option by default.
490AC_ARG_ENABLE([xmalloc],
491 [AS_HELP_STRING([--enable-xmalloc], [Support xmalloc option])],
492[if test "x$enable_xmalloc" = "xno" ; then
493 enable_xmalloc="0"
494else
495 enable_xmalloc="1"
496fi
497],
498[enable_xmalloc="0"]
499)
500if test "x$enable_xmalloc" = "x1" ; then
501 AC_DEFINE([JEMALLOC_XMALLOC], [ ])
502fi
503AC_SUBST([enable_xmalloc])
Jason Evanscc00a152009-06-25 18:06:48 -0700504if test "x$enable_xmalloc" = "x0" ; then
505 roff_xmalloc=".\\\" "
506else
507 roff_xmalloc=""
508fi
509AC_SUBST([roff_xmalloc])
Jason Evansb7924f52009-06-23 19:01:18 -0700510
511dnl Do not support the SYSV option by default.
512AC_ARG_ENABLE([sysv],
513 [AS_HELP_STRING([--enable-sysv], [Support SYSV semantics option])],
514[if test "x$enable_sysv" = "xno" ; then
515 enable_sysv="0"
516else
517 enable_sysv="1"
518fi
519],
520[enable_sysv="0"]
521)
522if test "x$enable_sysv" = "x1" ; then
523 AC_DEFINE([JEMALLOC_SYSV], [ ])
524fi
525AC_SUBST([enable_sysv])
Jason Evanscc00a152009-06-25 18:06:48 -0700526if test "x$enable_sysv" = "x0" ; then
527 roff_sysv=".\\\" "
528else
529 roff_sysv=""
530fi
531AC_SUBST([roff_sysv])
Jason Evansb7924f52009-06-23 19:01:18 -0700532
533dnl Do not determine page shift at run time by default.
534AC_ARG_ENABLE([dynamic_page_shift],
535 [AS_HELP_STRING([--enable-dynamic-page-shift],
536 [Determine page size at run time (don't trust configure result)])],
537[if test "x$enable_dynamic_page_shift" = "xno" ; then
538 enable_dynamic_page_shift="0"
539else
540 enable_dynamic_page_shift="1"
541fi
542],
543[enable_dynamic_page_shift="0"]
544)
545if test "x$enable_dynamic_page_shift" = "x1" ; then
546 AC_DEFINE([DYNAMIC_PAGE_SHIFT], [ ])
547fi
548AC_SUBST([enable_dynamic_page_shift])
549
550AC_MSG_CHECKING([STATIC_PAGE_SHIFT])
551AC_RUN_IFELSE([AC_LANG_PROGRAM(
552[[#include <stdio.h>
553#include <unistd.h>
554#include <strings.h>
555]], [[
556 long result;
557 FILE *f;
558
559 result = sysconf(_SC_PAGESIZE);
560 if (result == -1) {
561 return 1;
562 }
563 f = fopen("conftest.out", "w");
564 if (f == NULL) {
565 return 1;
566 }
567 fprintf(f, "%u\n", ffs((int)result) - 1);
568 close(f);
569
570 return 0;
571]])],
572 [STATIC_PAGE_SHIFT=`cat conftest.out`]
573 AC_MSG_RESULT([$STATIC_PAGE_SHIFT])
574 AC_DEFINE_UNQUOTED([STATIC_PAGE_SHIFT], [$STATIC_PAGE_SHIFT]),
575 AC_MSG_RESULT([error]))
576
577dnl ============================================================================
578dnl jemalloc configuration.
579dnl
Jason Evansa40bc7a2010-03-02 13:01:16 -0800580
581dnl Set VERSION if source directory has an embedded git repository.
582if test -d "${srcroot}../.git" ; then
583 git describe --long > ${srcroot}VERSION
584fi
Jason Evansb7924f52009-06-23 19:01:18 -0700585jemalloc_version=`cat ${srcroot}VERSION`
Jason Evansa40bc7a2010-03-02 13:01:16 -0800586jemalloc_version_major=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]1}'`
587jemalloc_version_minor=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]2}'`
588jemalloc_version_bugfix=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]3}'`
589jemalloc_version_nrev=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]4}'`
590jemalloc_version_gid=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]5}'`
Jason Evansb7924f52009-06-23 19:01:18 -0700591AC_SUBST([jemalloc_version])
Jason Evansa40bc7a2010-03-02 13:01:16 -0800592AC_SUBST([jemalloc_version_major])
593AC_SUBST([jemalloc_version_minor])
594AC_SUBST([jemalloc_version_bugfix])
595AC_SUBST([jemalloc_version_nrev])
596AC_SUBST([jemalloc_version_gid])
Jason Evansb7924f52009-06-23 19:01:18 -0700597
598dnl ============================================================================
599dnl Configure pthreads.
600
601AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])])
602AC_CHECK_LIB([pthread], [pthread_create], [LIBS="$LIBS -lpthread"],
603 [AC_MSG_ERROR([libpthread is missing])])
604
605CPPFLAGS="$CPPFLAGS -D_REENTRANT"
606
Jason Evanscc00a152009-06-25 18:06:48 -0700607dnl Enable lazy locking by default.
Jason Evansb7924f52009-06-23 19:01:18 -0700608AC_ARG_ENABLE([lazy_lock],
Jason Evansa1624022009-11-09 14:58:12 -0800609 [AS_HELP_STRING([--disable-lazy-lock],
Jason Evanscc00a152009-06-25 18:06:48 -0700610 [Disable lazy locking (always lock, even when single-threaded)])],
Jason Evansb7924f52009-06-23 19:01:18 -0700611[if test "x$enable_lazy_lock" = "xno" ; then
612 enable_lazy_lock="0"
613else
614 enable_lazy_lock="1"
615fi
616],
Jason Evanscc00a152009-06-25 18:06:48 -0700617[enable_lazy_lock="1"]
Jason Evansb7924f52009-06-23 19:01:18 -0700618)
619if test "x$enable_lazy_lock" = "x1" ; then
620 AC_CHECK_HEADERS([dlfcn.h], , [AC_MSG_ERROR([dlfcn.h is missing])])
621 AC_CHECK_LIB([dl], [dlopen], [LIBS="$LIBS -ldl"],
622 [AC_MSG_ERROR([libdl is missing])])
623 AC_DEFINE([JEMALLOC_LAZY_LOCK], [ ])
624fi
625AC_SUBST([enable_lazy_lock])
626
Jason Evans78d815c2010-01-17 14:06:20 -0800627AC_ARG_ENABLE([tls],
628 [AS_HELP_STRING([--disable-tls], [Disable thread-local storage (__thread keyword)])],
629if test "x$enable_tls" = "xno" ; then
630 enable_tls="0"
631else
632 enable_tls="1"
633fi
634,
635enable_tls="1"
636)
637if test "x${enable_tls}" = "x1" ; then
638AC_MSG_CHECKING([for TLS])
639AC_RUN_IFELSE([AC_LANG_PROGRAM(
640[[
641 __thread int x;
642]], [[
643 x = 42;
644
645 return 0;
646]])],
647 AC_MSG_RESULT([yes]),
648 AC_MSG_RESULT([no])
649 enable_tls="0")
650fi
651if test "x${enable_tls}" = "x0" ; then
652 AC_DEFINE_UNQUOTED([NO_TLS], [ ])
653fi
654
655dnl Finish tcache-related definitions, now that TLS configuration is done.
656if test "x$enable_tls" = "x0" ; then
657 enable_tcache="0"
658fi
659if test "x$enable_tcache" = "x1" ; then
660 AC_DEFINE([JEMALLOC_TCACHE], [ ])
661fi
662AC_SUBST([enable_tcache])
663if test "x$enable_tcache" = "x0" ; then
664 roff_tcache=".\\\" "
665 roff_no_tcache=""
666else
667 roff_tcache=""
668 roff_no_tcache=".\\\" "
669fi
670AC_SUBST([roff_tcache])
671AC_SUBST([roff_no_tcache])
672
Jason Evans6109fe02010-02-10 10:37:56 -0800673dnl Finish prof-related definitions, now that TLS configuration is done.
674if test "x$enable_tls" = "x0" ; then
675 enable_prof="0"
676fi
677if test "x$enable_prof" = "x1" ; then
Jason Evansb9477e72010-03-01 20:15:26 -0800678 LIBS="$LIBS -lm"
Jason Evans6109fe02010-02-10 10:37:56 -0800679 AC_DEFINE([JEMALLOC_PROF], [ ])
680 if test "x$enable_prof_libunwind" = "x1" ; then
681 AC_CHECK_HEADERS([libunwind.h], , [enable_prof_libunwind="0"])
Jason Evanscfeccd32010-03-03 15:48:20 -0800682 if test "x$LUNWIND" = "x-lunwind" ; then
683 AC_CHECK_LIB([unwind], [backtrace], [LIBS="$LIBS $LUNWIND"],
684 [enable_prof_libunwind="0"])
685 else
686 LIBS="$LIBS $LUNWIND"
687 fi
Jason Evans6109fe02010-02-10 10:37:56 -0800688 if test "x${enable_prof_libunwind}" = "x1" ; then
689 AC_DEFINE([JEMALLOC_PROF_LIBUNWIND], [ ])
690 fi
691 fi
692fi
693AC_SUBST([enable_prof])
694if test "x$enable_prof" = "x0" ; then
695 roff_prof=".\\\" "
Jason Evansb01a6c22010-02-11 10:25:36 -0800696 roff_no_prof=""
Jason Evans6109fe02010-02-10 10:37:56 -0800697else
698 roff_prof=""
Jason Evansb01a6c22010-02-11 10:25:36 -0800699 roff_no_prof=".\\\" "
Jason Evans6109fe02010-02-10 10:37:56 -0800700fi
701AC_SUBST([roff_prof])
Jason Evansb01a6c22010-02-11 10:25:36 -0800702AC_SUBST([roff_no_prof])
Jason Evans6109fe02010-02-10 10:37:56 -0800703
Jason Evansb27805b2010-02-10 18:15:53 -0800704dnl If libunwind isn't enabled, try to use libgcc rather than gcc intrinsics
705dnl for backtracing.
706if test "x$enable_prof" = "x1" -a "x$enable_prof_libunwind" = "x0" \
707 -a "x$GCC" = "xyes" -a "x$enable_prof_libgcc" = "x1" ; then
708 enable_prof_libgcc="1"
709 AC_CHECK_HEADERS([unwind.h], , [enable_prof_libgcc="0"])
710 AC_CHECK_LIB([gcc], [_Unwind_Backtrace], [LIBS="$LIBS -lgcc"], [enable_prof_libgcc="0"])
711 if test "x${enable_prof_libgcc}" = "x1" ; then
712 AC_DEFINE([JEMALLOC_PROF_LIBGCC], [ ])
713 fi
714fi
715
Jason Evansb7924f52009-06-23 19:01:18 -0700716dnl ============================================================================
717dnl Check for typedefs, structures, and compiler characteristics.
718AC_HEADER_STDBOOL
719
720dnl Process .in files.
Jason Evansb0fd5012010-01-17 01:49:20 -0800721AC_SUBST([cfghdrs_in])
722AC_SUBST([cfghdrs_out])
723AC_CONFIG_HEADERS([$cfghdrs_tup cfghdrs.stamp])
Jason Evansb7924f52009-06-23 19:01:18 -0700724
725dnl ============================================================================
726dnl Generate outputs.
Jason Evansb0fd5012010-01-17 01:49:20 -0800727AC_CONFIG_FILES([$cfgoutputs_tup cfgoutputs.stamp])
728AC_SUBST([cfgoutputs_in])
729AC_SUBST([cfgoutputs_out])
Jason Evansb7924f52009-06-23 19:01:18 -0700730AC_OUTPUT
731
732dnl ============================================================================
733dnl Print out the results of configuration.
734AC_MSG_RESULT([===============================================================================])
735AC_MSG_RESULT([jemalloc version : $jemalloc_version])
736AC_MSG_RESULT([])
737AC_MSG_RESULT([CC : ${CC}])
738AC_MSG_RESULT([CPPFLAGS : ${CPPFLAGS}])
739AC_MSG_RESULT([CFLAGS : ${CFLAGS}])
740AC_MSG_RESULT([LDFLAGS : ${LDFLAGS}])
741AC_MSG_RESULT([LIBS : ${LIBS}])
742AC_MSG_RESULT([RPATH_EXTRA : ${RPATH_EXTRA}])
743AC_MSG_RESULT([])
744AC_MSG_RESULT([PREFIX : ${PREFIX}])
745AC_MSG_RESULT([BINDIR : ${BINDIR}])
Jason Evans662a0172009-07-01 19:24:31 -0700746AC_MSG_RESULT([INCLUDEDIR : ${INCLUDEDIR}])
747AC_MSG_RESULT([LIBDIR : ${LIBDIR}])
Jason Evansb7924f52009-06-23 19:01:18 -0700748AC_MSG_RESULT([DATADIR : ${DATADIR}])
749AC_MSG_RESULT([MANDIR : ${MANDIR}])
750AC_MSG_RESULT([])
751AC_MSG_RESULT([srcroot : ${srcroot}])
752AC_MSG_RESULT([abs_srcroot : ${abs_srcroot}])
753AC_MSG_RESULT([objroot : ${objroot}])
754AC_MSG_RESULT([abs_objroot : ${abs_objroot}])
755AC_MSG_RESULT([])
Jason Evans90895cf2009-12-29 00:09:15 -0800756AC_MSG_RESULT([JEMALLOC_PREFIX : ${JEMALLOC_PREFIX}])
Jason Evansb0fd5012010-01-17 01:49:20 -0800757AC_MSG_RESULT([install_suffix : ${install_suffix}])
Jason Evansb7924f52009-06-23 19:01:18 -0700758AC_MSG_RESULT([autogen : ${enable_autogen}])
759AC_MSG_RESULT([debug : ${enable_debug}])
760AC_MSG_RESULT([stats : ${enable_stats}])
Jason Evans6109fe02010-02-10 10:37:56 -0800761AC_MSG_RESULT([prof : ${enable_prof}])
762AC_MSG_RESULT([prof-libunwind : ${enable_prof_libunwind}])
Jason Evansb7924f52009-06-23 19:01:18 -0700763AC_MSG_RESULT([tiny : ${enable_tiny}])
Jason Evans84cbbcb2009-12-29 00:09:15 -0800764AC_MSG_RESULT([tcache : ${enable_tcache}])
Jason Evansb7924f52009-06-23 19:01:18 -0700765AC_MSG_RESULT([fill : ${enable_fill}])
766AC_MSG_RESULT([xmalloc : ${enable_xmalloc}])
767AC_MSG_RESULT([sysv : ${enable_sysv}])
Jason Evans4201af02010-01-24 02:53:40 -0800768AC_MSG_RESULT([swap : ${enable_swap}])
Jason Evansb7924f52009-06-23 19:01:18 -0700769AC_MSG_RESULT([dss : ${enable_dss}])
770AC_MSG_RESULT([dynamic_page_shift : ${enable_dynamic_page_shift}])
771AC_MSG_RESULT([lazy_lock : ${enable_lazy_lock}])
772AC_MSG_RESULT([===============================================================================])