15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)## Process this file with autoconf to produce configure.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)## In general, the safest way to proceed is to run ./autogen.sh
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# make sure we're interpreted by some minimal autoconf
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_PREREQ(2.57)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_INIT(gperftools, 2.0, google-perftools@googlegroups.com)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Update this value for every release!  (A:B:C will map to foo.so.(A-C).C.B)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TCMALLOC_SO_VERSION=5:0:1
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PROFILER_SO_VERSION=3:0:3
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(TCMALLOC_SO_VERSION)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(PROFILER_SO_VERSION)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The argument here is just something that should be in the current directory
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# (for sanity checking)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CONFIG_SRCDIR(README)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CONFIG_MACRO_DIR([m4])
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CANONICAL_HOST
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_INIT_AUTOMAKE([dist-zip])
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONFIG_HEADER(src/config.h)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Export the version information (for tc_version and friends)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TC_VERSION_MAJOR=`expr "$PACKAGE_VERSION" : '\([[0-9]]*\)'`
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TC_VERSION_MINOR=`expr "$PACKAGE_VERSION" : '[[0-9]]*\.\([[0-9]]*\)'`
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TC_VERSION_PATCH=`expr "$PACKAGE_VERSION" : '[[0-9]]*\.[[0-9]]*\(.*\)$'`
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(TC_VERSION_MAJOR)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(TC_VERSION_MINOR)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(TC_VERSION_PATCH)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(PACKAGE_STRING)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The user can choose not to compile in the heap-profiler, the
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# heap-checker, or the cpu-profiler.  There's also the possibility
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# for a 'fully minimal' compile, which leaves out the stacktrace
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# code as well.  By default, we include all of these that the
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# target system supports.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)default_enable_cpu_profiler=yes
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)default_enable_heap_profiler=yes
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)default_enable_heap_checker=yes
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)default_enable_debugalloc=yes
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)default_enable_minimal=no
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)need_nanosleep=yes   # Used later, to decide if to run ACX_NANOSLEEP
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)case "$host" in
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *-mingw*) default_enable_minimal=yes; default_enable_debugalloc=no;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             need_nanosleep=no;;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *-cygwin*) default_enable_heap_checker=no; default_enable_cpu_profiler=no;;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *-freebsd*) default_enable_heap_checker=no;;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *-darwin*) default_enable_heap_checker=no;;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)esac
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_ARG_ENABLE([cpu-profiler],
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [AS_HELP_STRING([--disable-cpu-profiler],
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              [do not build the cpu profiler])],
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [],
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [enable_cpu_profiler="$default_enable_cpu_profiler"])
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_ARG_ENABLE([heap-profiler],
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [AS_HELP_STRING([--disable-heap-profiler],
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              [do not build the heap profiler])],
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [],
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [enable_heap_profiler="$default_enable_heap_profiler"])
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_ARG_ENABLE([heap-checker],
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [AS_HELP_STRING([--disable-heap-checker],
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              [do not build the heap checker])],
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [],
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [enable_heap_checker="$default_enable_heap_checker"])
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_ARG_ENABLE([debugalloc],
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [AS_HELP_STRING([--disable-debugalloc],
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              [do not build versions of libs with debugalloc])],
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [],
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [enable_debugalloc="$default_enable_debugalloc"])
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_ARG_ENABLE([minimal],
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [AS_HELP_STRING([--enable-minimal],
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              [build only tcmalloc-minimal (and maybe tcmalloc-minimal-debug)])],
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [],
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              [enable_minimal="$default_enable_minimal"])
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if test "$enable_minimal" = yes; then
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enable_cpu_profiler=no
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enable_heap_profiler=no
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enable_heap_checker=no
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Checks for programs.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_PROG_CXX
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_PROG_CC
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_PROG_CPP
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(GCC, test "$GCC" = yes)   # let the Makefile know if we're gcc
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_PROG_CC_C_O      # shrug: autogen.sh suddenly needs this for some reason
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Check if we have an objcopy installed that supports -W
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_TOOL([OBJCOPY], [objcopy], [])
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AS_IF([test -n "$OBJCOPY"], [dnl
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AC_CACHE_CHECK([if $OBJCOPY supports -W], gpt_cv_objcopy_weaken, [dnl
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AC_LINK_IFELSE([void foo() {} int main() {return 0;}], [dnl
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AS_IF(["$OBJCOPY" -W foo conftest$ac_exeext /dev/null],
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      	    [gpt_cv_objcopy_weaken=yes], [gpt_cv_objcopy_weaken=no])],
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    [gpt_cv_objcopy_weaken=no])])],
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  [gpt_cv_objcopy_weaken=no])
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(HAVE_OBJCOPY_WEAKEN, test $gpt_cv_objcopy_weaken = yes)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)case $host_os in
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *mingw*)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Disabling fast install keeps libtool from creating wrapper scripts
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # around the executables it builds.  Such scripts have caused failures on
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # MinGW.  Using this option means an extra link step is executed during
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # "make install".
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AC_DISABLE_FAST_INSTALL
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ;;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AC_ENABLE_FAST_INSTALL
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ;;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)esac
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_PROG_LIBTOOL
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(LIBTOOL_DEPS)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(USE_LIBTOOL, test "x$LIBTOOL" != "x")
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_C_INLINE
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AX_C___ATTRIBUTE__
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Check whether some low-level functions/files are available
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_HEADER_STDC
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# TODO(csilvers): we could remove a lot when WITH_CPU_PROFILER etc is "no".
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_TYPES([__int64])       # defined in some windows platforms
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_TYPES([struct mallinfo],,, [#include <malloc.h>])
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_TYPES([Elf32_Versym],,, [#include <elf.h>])   # for vdso_support.h
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_FUNCS(sbrk)            # for tcmalloc to get memory
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_FUNCS(geteuid)         # for turning off services when run as root
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(features.h)    # for vdso_support.h
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(malloc.h)      # some systems define stuff there, others not
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sys/malloc.h)  # where some versions of OS X put malloc.h
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(malloc/malloc.h)  # another place OS X puts malloc.h (?)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(glob.h)        # for heap-profile-table (cleaning up profiles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(execinfo.h)    # for stacktrace? and heapchecker_unittest
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(libunwind.h)   # for stacktrace
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(unwind.h)      # for stacktrace
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sched.h)       # for being nice in our spinlock code
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(conflict-signal.h)      # defined on some windows platforms?
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sys/prctl.h)   # for thread_lister (needed by leak-checker)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(linux/ptrace.h)# also needed by leak-checker
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sys/syscall.h)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sys/socket.h)  # optional; for forking out to symbolizer
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sys/wait.h)    # optional; for forking out to symbolizer
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(poll.h)        # optional; for forking out to symbolizer
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(fcntl.h)       # for tcmalloc_unittest
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(grp.h)         # for heapchecker_unittest
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(pwd.h)         # for heapchecker_unittest
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sys/resource.h)         # for memalign_unittest.cc
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(valgrind.h)    # we have a local copy if this isn't found
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(sys/cdefs.h)   # Where glibc defines __THROW
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_HEADERS(features.h)    # Where __GLIBC__ is defined
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We also need <ucontext.h>/<sys/ucontext.h>, but we get those from
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# AC_PC_FROM_UCONTEXT, below.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We override a lot of memory allocation routines, not all of which are
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# standard.  For those the system doesn't declare, we'll declare ourselves.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_DECLS([cfree,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                posix_memalign,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                memalign,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                valloc,
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                pvalloc],,,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [#define _XOPEN_SOURCE 600
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                #include <stdlib.h>
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                #include <malloc.h>])
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if test "$ac_cv_type_struct_mallinfo" = yes; then
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AC_SUBST(ac_cv_have_struct_mallinfo, 1)   # gperftools/tcmalloc.h needs this
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AC_SUBST(ac_cv_have_struct_mallinfo, 0)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We need to check for mmap.  cygwin supports mmap, but the autoconf
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# test doesn't work on cygwin:
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#    http://www.cygwin.com/ml/cygwin/2002-04/msg00412.html
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This workaround comes from
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#    http://cygwin.com/ml/cygwin/2004-11/msg00138.html
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)case "$host" in
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *-*-cygwin*)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       ac_cv_func_mmap_fixed_mapped=yes
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               AC_DEFINE(HAVE_MMAP, 1,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         [Define to 1 if you have a working `mmap' system call.])
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               ;;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            *) AC_FUNC_MMAP
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               ;;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)esac
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If AtomicWord != Atomic32, we need to define two versions of all the
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# atomicops functions.  If they're the same, we want to define only one.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_MSG_CHECKING([if int32_t is the same type as intptr_t])
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_TRY_COMPILE([#include <stdint.h>],
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       [int32_t v1 = 0; intptr_t v2 = 0; return (&v1 - &v2)],
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_DEFINE(INT32_EQUALS_INTPTR, 1,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          Define to 1 if int32_t is equivalent to intptr_t)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                AC_MSG_RESULT([yes])],
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_MSG_RESULT([no])])
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We want to access the "PC" (Program Counter) register from a struct
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# ucontext.  Every system has its own way of doing that.  We try all the
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# possibilities we know about.  Note REG_PC should come first (REG_RIP
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# is also defined on solaris, but does the wrong thing).  But don't
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# bother if we're not doing cpu-profiling.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# [*] means that we've not actually tested one of these systems
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if test "$enable_cpu_profiler" = yes; then
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AC_PC_FROM_UCONTEXT(AC_MSG_WARN(Could not find the PC.  Will not try to compile libprofiler...);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      enable_cpu_profiler=no)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Some tests test the behavior of .so files, and only make sense for dynamic.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(ENABLE_STATIC, test "$enable_static" = yes)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We want to link in libunwind if it exists
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_LIB(unwind, backtrace, UNWIND_LIBS=-lunwind, UNWIND_LIBS=)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(UNWIND_LIBS)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# On x86_64, instead of libunwind, we can choose to compile with frame-pointers
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# (This isn't needed on i386, where -fno-omit-frame-pointer is the default).
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_ARG_ENABLE(frame_pointers,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              AS_HELP_STRING([--enable-frame-pointers],
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             [On x86_64 systems, compile with -fno-omit-frame-pointer (see INSTALL)]),
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	      , enable_frame_pointers=no)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(ENABLE_FRAME_POINTERS, test "$enable_frame_pointers" = yes)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Some x86_64 systems do not insert frame pointers by default (all
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# i386 systems that I know of, do.  I don't know about non-x86 chips).
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We want to see if the current system is one of those.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __x86_64__ == 1 ? 0 : 1])],
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [is_x86_64=yes], [is_x86_64=no])
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OLD_CFLAGS="$CFLAGS"
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CFLAGS="$CFLAGS -S -O2 -o fp.s"
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This test will always fail because we don't name our output file properly.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We do our own determination of success/failure in the grep, below.
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int f(int x) {return x;}], [return f(0);])],
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [:], [:])
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(X86_64_AND_NO_FP_BY_DEFAULT,
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               test "$is_x86_64" = yes && ! grep 'mov.*rsp.*rbp' fp.s >/dev/null 2>&1)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)rm fp.s
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CFLAGS="$OLD_CFLAGS"
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We need to know if we're i386 so we can turn on -mmms, which is not
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# on by default for i386 (it is for x86_64).
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __i386__ == 1 ? 0 : 1])],
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [is_i386=yes], [is_i386=no])
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(I386, test "$is_i386" = yes)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# See if the compiler supports -Wno-unused-result.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Newer ubuntu's turn on -D_FORTIFY_SOURCE=2, enabling
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# __attribute__((warn_unused_result)) for things like write(),
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# which we don't care about.
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CACHE_CHECK([if the compiler supports -Wno-unused-result],
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               perftools_cv_w_no_unused_result,
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       [OLD_CFLAGS="$CFLAGS"
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        CFLAGS="$CFLAGS -Wno-error -Wno-unused-result"
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		# gcc doesn't warn about unknown flags unless it's
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		# also warning for some other purpose, hence the
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		# divide-by-0.  (We use -Wno-error to make sure the
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		# divide-by-0 doesn't cause this test to fail!)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return 1/0)],
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	                          perftools_cv_w_no_unused_result=yes,
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  perftools_cv_w_no_unused_result=no)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	        CFLAGS="$OLD_CFLAGS"])
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(HAVE_W_NO_UNUSED_RESULT,
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       test "$perftools_cv_w_no_unused_result" = yes)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Defines PRIuS
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_COMPILER_CHARACTERISTICS
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Also make sure we get standard PRI... definitions, even with glibc.
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We have to use AH_VERBATIM because we need the #ifdef guard (gcc buglet)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AH_VERBATIM([__STDC_FORMAT_MACROS],
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            [/* C99 says: define this to get the PRI... macros from stdint.h */
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __STDC_FORMAT_MACROS
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define __STDC_FORMAT_MACROS 1
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif])
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Check if __builtin_stack_pointer() is available (for elfcore.h)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_MSG_CHECKING([for __builtin_stack_pointer()])
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_LINK_IFELSE([AC_LANG_PROGRAM(, [void *sp = __builtin_stack_pointer()])],
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_DEFINE(HAVE_BUILTIN_STACK_POINTER, 1,
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      Define to 1 if compiler supports __builtin_stack_pointer)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                AC_MSG_RESULT([yes])],
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_MSG_RESULT([no])])
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Check if __environ is available (for GetenvBeforeMain)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_MSG_CHECKING([for __environ])
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <unistd.h>],
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                [char **env = __environ])],
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_DEFINE(HAVE___ENVIRON, 1,
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          [Define to 1 if compiler supports __environ])
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                AC_MSG_RESULT([yes])],
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_MSG_RESULT([no])])
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If we support __thread, that can speed up tcmalloc a bit.
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Note, however, that our code tickles a bug in gcc < 4.1.2
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# involving TLS and -fPIC (which our libraries will use) on x86:
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#   http://gcc.gnu.org/ml/gcc-bugs/2006-09/msg02275.html
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_MSG_CHECKING([for __thread])
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_LINK_IFELSE([AC_LANG_PROGRAM([#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) || (__GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ < 2))
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error gcc has this bug: http://gcc.gnu.org/ml/gcc-bugs/2006-09/msg02275.html
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif], [static __thread int p = 0])],
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_DEFINE(HAVE_TLS, 1,
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          Define to 1 if compiler supports __thread)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                AC_MSG_RESULT([yes])],
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               [AC_MSG_RESULT([no])])
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# glibc's __malloc_hook/etc were declared volatile starting in glibc 2.14
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_MSG_CHECKING([if __malloc_hook is declared volatile])
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <malloc.h>
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* (* volatile __malloc_hook)(size_t, const void*) = 0;],)],
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [AC_DEFINE(MALLOC_HOOK_MAYBE_VOLATILE, volatile,
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             Define to 'volatile' if __malloc_hook is declared volatile)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   AC_MSG_RESULT([yes])],
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  [AC_DEFINE(MALLOC_HOOK_MAYBE_VOLATILE, )
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   AC_MSG_RESULT([no])])
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Nanosleep requires extra libraries on some architectures (solaris).
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This sets NANOSLEEP_LIBS.  nanosleep doesn't exist on mingw, which
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# is fine for us because we don't compile libspinlock, which uses it.
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if test "$need_nanosleep" = yes; then
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ACX_NANOSLEEP
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AC_SUBST(NANOSLEEP_LIBS)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Solaris 10 6/06 has a bug where /usr/sfw/lib/libstdc++.la is empty.
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If so, we replace it with our own version.
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LIBSTDCXX_LA_LINKER_FLAG=
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if test -f /usr/sfw/lib/libstdc++.la && ! test -s /usr/sfw/lib/libstdc++.la
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)then
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LIBSTDCXX_LA_LINKER_FLAG='-L$(top_srcdir)/src/solaris'
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_SUBST(LIBSTDCXX_LA_LINKER_FLAG)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We also need to check if the kernel supports __thread, which requires uname()
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CHECK_DECLS(uname,,, [#include <sys/utsname.h>])
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# In fact, a lot of the code in this directory depends on pthreads
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACX_PTHREAD
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Find out what namespace 'normal' STL code lives in
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CXX_STL_NAMESPACE
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Figure out where libc has program_invocation_name
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_PROGRAM_INVOCATION_NAME
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Make the install prefix available, to figure out where to look for pprof
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_INSTALL_PREFIX
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# For windows, this has a non-trivial value (__declspec(export)), but any
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# system that uses configure wants this to be the empty string.
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_DEFINE(PERFTOOLS_DLL_DECL,,
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          [Always the empty-string on non-windows systems.
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           On windows, should be "__declspec(dllexport)".
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	   This way, when we compile the dll, we export our functions/classes.
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	   It's safe to define this here because config.h is only used
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	   internally, to compile the DLL, and every DLL source file
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	   #includes "config.h" before anything else.])
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# In theory, config.h files shouldn't need a header guard, but we do,
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# because we (maybe) #include windows/mingw.h from within config.h,
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# and it #includes other .h files.  These all have header guards, so
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# the end result is if config.h is #included twice, its #undefs get
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# evaluated twice, but all the ones in mingw.h/etc only get evaluated
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# once, potentially causing trouble.  c.f.
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#   http://code.google.com/p/gperftools/issues/detail?id=246
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AH_TOP([
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPERFTOOLS_CONFIG_H_
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPERFTOOLS_CONFIG_H_
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)])
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AH_VERBATIM([PTHREADS_CRASHES_IF_RUN_TOO_EARLY],
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    [/* Mark the systems where we know it's bad if pthreads runs too
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   early before main (before threads are initialized, presumably).  */
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __FreeBSD__
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PTHREADS_CRASHES_IF_RUN_TOO_EARLY 1
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif])
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# MinGW uses autoconf, but also needs the windows shim routines
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# (since it doesn't have its own support for, say, pthreads).
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This requires us to #include a special header file, and also to
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# link in some windows versions of .o's instead of the unix versions.
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Also, manually mark systems where we have to be careful how early
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# we run pthreads.  TODO(csilvers): turn this into an autoconf check.
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AH_BOTTOM([
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __MINGW32__
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "windows/mingw.h"
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  /* #ifndef GPERFTOOLS_CONFIG_H_ */
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)])
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(MINGW, expr $host : '.*-mingw' >/dev/null 2>&1)
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(OSX, expr $host : '.*-apple-darwin.*' >/dev/null 2>&1)
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Redhat 7 (and below?) has sys/ucontext.h, but if you try to #include
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# it directly, the compiler gets upset.  So we pretend we don't have
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# it.
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if cat /etc/redhat-release 2>/dev/null | grep "Red Hat Linux release 7" >/dev/null 2>&1; then
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_DEFINE(HAVE_SYS_UCONTEXT_H, 0, [<sys/ucontext.h> is broken on redhat 7])
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Export the --enable flags we set above.  We do this at the end so
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# other configure rules can enable or disable targets based on what
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# they find.
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(WITH_CPU_PROFILER, test "$enable_cpu_profiler" = yes)
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(WITH_HEAP_PROFILER, test "$enable_heap_profiler" = yes)
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(WITH_HEAP_CHECKER, test "$enable_heap_checker" = yes)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(WITH_DEBUGALLOC, test "$enable_debugalloc" = yes)
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# We make tcmalloc.so if either heap-profiler or heap-checker is asked for.
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(WITH_HEAP_PROFILER_OR_CHECKER,
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               test "$enable_heap_profiler" = yes -o \
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    "$enable_heap_checker" = yes)
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If we don't use any profilers, we don't need stack traces (or pprof)
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AM_CONDITIONAL(WITH_STACK_TRACE, test "$enable_cpu_profiler" = yes -o \
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      "$enable_heap_profiler" = yes -o \
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      "$enable_heap_checker" = yes)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Write generated configuration file
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_CONFIG_FILES([Makefile
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 src/gperftools/tcmalloc.h src/windows/gperftools/tcmalloc.h])
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AC_OUTPUT
422