Blame m4/malloc.m4

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