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