Blame m4/malloc.m4

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