Blame gnulib/m4/malloc.m4

Packit Service b70e42
# malloc.m4 serial 14
Packit Service b70e42
dnl Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc.
Packit Service b70e42
dnl This file is free software; the Free Software Foundation
Packit Service b70e42
dnl gives unlimited permission to copy and/or distribute it,
Packit Service b70e42
dnl with or without modifications, as long as this notice is preserved.
Packit Service b70e42
Packit Service b70e42
m4_version_prereq([2.70], [] ,[
Packit Service b70e42
Packit Service b70e42
# This is taken from the following Autoconf patch:
Packit Service b70e42
# http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9
Packit Service b70e42
AC_DEFUN([_AC_FUNC_MALLOC_IF],
Packit Service b70e42
[
Packit Service b70e42
  AC_REQUIRE([AC_HEADER_STDC])dnl
Packit Service b70e42
  AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
Packit Service b70e42
  AC_CHECK_HEADERS([stdlib.h])
Packit Service b70e42
  AC_CACHE_CHECK([for GNU libc compatible malloc],
Packit Service b70e42
    [ac_cv_func_malloc_0_nonnull],
Packit Service b70e42
    [AC_RUN_IFELSE(
Packit Service b70e42
       [AC_LANG_PROGRAM(
Packit Service b70e42
          [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
Packit Service b70e42
            # include <stdlib.h>
Packit Service b70e42
            #else
Packit Service b70e42
            char *malloc ();
Packit Service b70e42
            #endif
Packit Service b70e42
          ]],
Packit Service b70e42
          [[return ! malloc (0);]])
Packit Service b70e42
       ],
Packit Service b70e42
       [ac_cv_func_malloc_0_nonnull=yes],
Packit Service b70e42
       [ac_cv_func_malloc_0_nonnull=no],
Packit Service b70e42
       [case "$host_os" in
Packit Service b70e42
          # Guess yes on platforms where we know the result.
Packit Service b70e42
          *-gnu* | freebsd* | netbsd* | openbsd* \
Packit Service b70e42
          | hpux* | solaris* | cygwin* | mingw*)
Packit Service b70e42
            ac_cv_func_malloc_0_nonnull=yes ;;
Packit Service b70e42
          # If we don't know, assume the worst.
Packit Service b70e42
          *) ac_cv_func_malloc_0_nonnull=no ;;
Packit Service b70e42
        esac
Packit Service b70e42
       ])
Packit Service b70e42
    ])
Packit Service b70e42
  AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2])
Packit Service b70e42
])# _AC_FUNC_MALLOC_IF
Packit Service b70e42
Packit Service b70e42
])
Packit Service b70e42
Packit Service b70e42
# gl_FUNC_MALLOC_GNU
Packit Service b70e42
# ------------------
Packit Service b70e42
# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
Packit Service b70e42
# it is not.
Packit Service b70e42
AC_DEFUN([gl_FUNC_MALLOC_GNU],
Packit Service b70e42
[
Packit Service b70e42
  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
Packit Service b70e42
  dnl _AC_FUNC_MALLOC_IF is defined in Autoconf.
Packit Service b70e42
  _AC_FUNC_MALLOC_IF(
Packit Service b70e42
    [AC_DEFINE([HAVE_MALLOC_GNU], [1],
Packit Service b70e42
               [Define to 1 if your system has a GNU libc compatible 'malloc'
Packit Service b70e42
                function, and to 0 otherwise.])],
Packit Service b70e42
    [AC_DEFINE([HAVE_MALLOC_GNU], [0])
Packit Service b70e42
     REPLACE_MALLOC=1
Packit Service b70e42
    ])
Packit Service b70e42
])
Packit Service b70e42
Packit Service b70e42
# gl_FUNC_MALLOC_POSIX
Packit Service b70e42
# --------------------
Packit Service b70e42
# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
Packit Service b70e42
# fails), and replace malloc if it is not.
Packit Service b70e42
AC_DEFUN([gl_FUNC_MALLOC_POSIX],
Packit Service b70e42
[
Packit Service b70e42
  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
Packit Service b70e42
  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
Packit Service b70e42
  if test $gl_cv_func_malloc_posix = yes; then
Packit Service b70e42
    AC_DEFINE([HAVE_MALLOC_POSIX], [1],
Packit Service b70e42
      [Define if the 'malloc' function is POSIX compliant.])
Packit Service b70e42
  else
Packit Service b70e42
    REPLACE_MALLOC=1
Packit Service b70e42
  fi
Packit Service b70e42
])
Packit Service b70e42
Packit Service b70e42
# Test whether malloc, realloc, calloc are POSIX compliant,
Packit Service b70e42
# Set gl_cv_func_malloc_posix to yes or no accordingly.
Packit Service b70e42
AC_DEFUN([gl_CHECK_MALLOC_POSIX],
Packit Service b70e42
[
Packit Service b70e42
  AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
Packit Service b70e42
    [gl_cv_func_malloc_posix],
Packit Service b70e42
    [
Packit Service b70e42
      dnl It is too dangerous to try to allocate a large amount of memory:
Packit Service b70e42
      dnl some systems go to their knees when you do that. So assume that
Packit Service b70e42
      dnl all Unix implementations of the function are POSIX compliant.
Packit Service b70e42
      AC_COMPILE_IFELSE(
Packit Service b70e42
        [AC_LANG_PROGRAM(
Packit Service b70e42
           [[]],
Packit Service b70e42
           [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
Packit Service b70e42
             choke me
Packit Service b70e42
             #endif
Packit Service b70e42
            ]])],
Packit Service b70e42
        [gl_cv_func_malloc_posix=yes],
Packit Service b70e42
        [gl_cv_func_malloc_posix=no])
Packit Service b70e42
    ])
Packit Service b70e42
])