dnl -*- shell-script -*-
dnl
dnl Copyright (c) 2001-2004 The Trustees of Indiana University.  
dnl                         All rights reserved.
dnl Copyright (c) 1998-2001 University of Notre Dame. 
dnl                         All rights reserved.
dnl Copyright (c) 1994-1998 The Ohio State University.  
dnl                         All rights reserved.
dnl 
dnl This file is part of the LAM/MPI software package.  For license
dnl information, see the LICENSE file in the top level directory of the
dnl LAM/MPI source distribution.
dnl
dnl

AC_DEFUN([LAM_PTMALLOC_SETUP],[
#
# Call the top-level LAM threads setup stuff
#
OLD_CPPFLAGS="$CPPFLAGS"
OLD_LDFLAGS="$LDFLAGS"
OLD_LIBS="$LIBS"

CPPFLAGS="$CPPFLAGS $THREADCPPFLAGS"
LDFLAGS="$LDFLAGS $THREADLDFLAGS"
LIBS="$LIBS $THREADLIBS"

if test "`echo $host | grep apple-darwin`" != "" ; then
    AC_MSG_WARN([*** Using ptmalloc with OS X will result in failure.])
    AC_MSG_ERROR([*** Aborting to save you the effort])
fi

#
# See if we can use syscall interface
#
use_syscall=0
AC_CHECK_HEADER([syscall.h], [have_syscall_h=yes], [have_syscall_h=no])
if test "$have_syscall_h" = "yes"; then
    AC_CHECK_FUNCS([syscall])
fi
AC_DEFINE_UNQUOTED([LAM_USE_SYSCALL], $use_syscall,
	[Whether we can get munmap through syscall() or not])

#
# See if we have sbrk prototyped
#
AC_CHECK_DECL([sbrk], [have_decl_sbrk=1], [have_decl_sbrk=0])
AC_DEFINE_UNQUOTED(LAM_HAVE_DECL_SBRK, $have_decl_sbrk,
	[Whether we have a declaration for sbrk() or not])

CPPFLAGS="$OLD_CPPFLAGS"
LDFLAGS="$OLD_LDFLAGS"
LIBS="$OLD_LIBS"
])dnl

AC_DEFUN([LAM_DARWIN_MALLOC_SETUP],[
case "$host" in
  *apple-darwin*)
    WRAPPER_EXTRA_LDFLAGS="-Wl,-u -Wl,_lam_darwin_malloc_linker_hack -Wl,-multiply_defined,suppress -Wl,-force_flat_namespace -Wl,-flat_namespace $WRAPPER_EXTRA_LDFLAGS"
    LDFLAGS="-Wl,-multiply_defined,suppress $LDFLAGS"
    ;;
  *)
    AC_MSG_ERROR([Trying to use Darwin malloc while not on a Darwin system.])
    ;;
esac
])dnl

AC_DEFUN([LAM_MEMORY_SETUP],[
case "$host" in
    *apple-darwin*)
        default_type="darwin"
        ;;
    *solaris* | *-aix* | *cygwin* | *bsd*)
        default_type="none"
        ;;
    *)
        default_type="ptmalloc2"
        ;;
esac

AC_ARG_WITH(memory-manager,
    AC_HELP_STRING([--with-memory-manager=TYPE],
		   [Use TYPE for intercepting memory management calls to control memory pinning (TYPE is one of darwin,ptmalloc,ptmalloc2,external,none)]),
    [WANT_MEMORY="$withval"], [WANT_MEMORY="$default_type"])

AC_MSG_CHECKING([for memory management type])
if test "$WANT_MEMORY" = "darwin" ; then
    AC_MSG_RESULT([Darwin / Mac OS X])
    LAM_DARWIN_MALLOC_SETUP
    LAM_WANT_DARWIN7MALLOC=1
    LAM_WANT_PTMALLOC=0
    LAM_WANT_PTMALLOC2=0
    LAM_WANT_EXTERNALMALLOC=0
elif test "$WANT_MEMORY" = "ptmalloc" ; then
    AC_MSG_RESULT([ptmalloc])
    LAM_PTMALLOC_SETUP
    LAM_WANT_DARWIN7MALLOC=0
    LAM_WANT_PTMALLOC=1
    LAM_WANT_PTMALLOC2=0
    LAM_WANT_EXTERNALMALLOC=0
elif test "$WANT_MEMORY" = "ptmalloc2" ; then
    AC_MSG_RESULT([ptmalloc2])
    LAM_PTMALLOC_SETUP
    LAM_WANT_DARWIN7MALLOC=0
    LAM_WANT_PTMALLOC=0
    LAM_WANT_PTMALLOC2=1
    LAM_WANT_EXTERNALMALLOC=0
elif test "$WANT_MEMORY" = "external" ; then
    AC_MSG_RESULT([external])
    LAM_PTMALLOC_SETUP
    LAM_WANT_DARWIN7MALLOC=0
    LAM_WANT_PTMALLOC=0
    LAM_WANT_PTMALLOC2=0
    LAM_WANT_EXTERNALMALLOC=1
else
    AC_MSG_RESULT([none])
    LAM_WANT_DARWIN7MALLOC=0
    LAM_WANT_PTMALLOC=0
    LAM_WANT_PTMALLOC2=0
    LAM_WANT_EXTERNALMALLOC=0
fi

AC_DEFINE_UNQUOTED([LAM_WANT_PTMALLOC], $LAM_WANT_PTMALLOC,
    [Do we want ptmalloc support])
AM_CONDITIONAL(LAM_WANT_PTMALLOC, test "$LAM_WANT_PTMALLOC" = "1")

AC_DEFINE_UNQUOTED([LAM_WANT_PTMALLOC2], $LAM_WANT_PTMALLOC2,
    [Do we want ptmalloc2 support])
AM_CONDITIONAL(LAM_WANT_PTMALLOC2, test "$LAM_WANT_PTMALLOC2" = "1")

AC_DEFINE_UNQUOTED([LAM_WANT_DARWIN7MALLOC], $LAM_WANT_DARWIN7MALLOC,
    [Do we want darwin7malloc support])
AM_CONDITIONAL(LAM_WANT_DARWIN7MALLOC, test "$LAM_WANT_DARWIN7MALLOC" = "1")

AC_DEFINE_UNQUOTED([LAM_WANT_EXTERNALMALLOC], $LAM_WANT_EXTERNALMALLOC,
    [Do we want external malloc support])

])dnl


syntax highlighted by Code2HTML, v. 0.9.1