Blame gnulib/m4/stdarg.m4

Packit Service b70e42
# stdarg.m4 serial 6
Packit Service b70e42
dnl Copyright (C) 2006, 2008-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
dnl From Bruno Haible.
Packit Service b70e42
dnl Provide a working va_copy in combination with <stdarg.h>.
Packit Service b70e42
Packit Service b70e42
AC_DEFUN([gl_STDARG_H],
Packit Service b70e42
[
Packit Service b70e42
  STDARG_H=''
Packit Service b70e42
  NEXT_STDARG_H='<stdarg.h>'
Packit Service b70e42
  AC_MSG_CHECKING([for va_copy])
Packit Service b70e42
  AC_CACHE_VAL([gl_cv_func_va_copy], [
Packit Service b70e42
    AC_COMPILE_IFELSE(
Packit Service b70e42
      [AC_LANG_PROGRAM(
Packit Service b70e42
         [[#include <stdarg.h>]],
Packit Service b70e42
         [[
Packit Service b70e42
#ifndef va_copy
Packit Service b70e42
void (*func) (va_list, va_list) = va_copy;
Packit Service b70e42
#endif
Packit Service b70e42
         ]])],
Packit Service b70e42
      [gl_cv_func_va_copy=yes],
Packit Service b70e42
      [gl_cv_func_va_copy=no])])
Packit Service b70e42
  AC_MSG_RESULT([$gl_cv_func_va_copy])
Packit Service b70e42
  if test $gl_cv_func_va_copy = no; then
Packit Service b70e42
    dnl Provide a substitute.
Packit Service b70e42
    dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5
Packit Service b70e42
    dnl with some versions of the /usr/vac/bin/cc compiler. It has an <stdarg.h>
Packit Service b70e42
    dnl which does '#undef va_copy', leading to a missing va_copy symbol. For
Packit Service b70e42
    dnl this platform, we use an <stdarg.h> substitute. But we cannot use this
Packit Service b70e42
    dnl approach on other platforms, because <stdarg.h> often defines only
Packit Service b70e42
    dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do
Packit Service b70e42
    dnl not work in this situation.
Packit Service b70e42
    AC_EGREP_CPP([vaccine],
Packit Service b70e42
      [#if defined _AIX && !defined __GNUC__
Packit Service b70e42
        AIX vaccine
Packit Service b70e42
       #endif
Packit Service b70e42
      ], [gl_aixcc=yes], [gl_aixcc=no])
Packit Service b70e42
    if test $gl_aixcc = yes; then
Packit Service b70e42
      dnl Provide a substitute <stdarg.h> file.
Packit Service b70e42
      STDARG_H=stdarg.h
Packit Service b70e42
      gl_NEXT_HEADERS([stdarg.h])
Packit Service b70e42
      dnl Fallback for the case when <stdarg.h> contains only macro definitions.
Packit Service b70e42
      if test "$gl_cv_next_stdarg_h" = '""'; then
Packit Service b70e42
        gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
Packit Service b70e42
        NEXT_STDARG_H="$gl_cv_next_stdarg_h"
Packit Service b70e42
      fi
Packit Service b70e42
    else
Packit Service b70e42
      dnl Provide a substitute in <config.h>, either __va_copy or as a simple
Packit Service b70e42
      dnl assignment.
Packit Service b70e42
      gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [
Packit Service b70e42
        AC_COMPILE_IFELSE(
Packit Service b70e42
          [AC_LANG_PROGRAM(
Packit Service b70e42
             [[#include <stdarg.h>]],
Packit Service b70e42
             [[
Packit Service b70e42
#ifndef __va_copy
Packit Service b70e42
error, bail out
Packit Service b70e42
#endif
Packit Service b70e42
             ]])],
Packit Service b70e42
          [gl_cv_func___va_copy=yes],
Packit Service b70e42
          [gl_cv_func___va_copy=no])])
Packit Service b70e42
      if test $gl_cv_func___va_copy = yes; then
Packit Service b70e42
        AC_DEFINE([va_copy], [__va_copy],
Packit Service b70e42
          [Define as a macro for copying va_list variables.])
Packit Service b70e42
      else
Packit Service b70e42
        AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed.  */
Packit Service b70e42
#define gl_va_copy(a,b) ((a) = (b))])
Packit Service b70e42
        AC_DEFINE([va_copy], [gl_va_copy],
Packit Service b70e42
          [Define as a macro for copying va_list variables.])
Packit Service b70e42
      fi
Packit Service b70e42
    fi
Packit Service b70e42
  fi
Packit Service b70e42
  AC_SUBST([STDARG_H])
Packit Service b70e42
  AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"])
Packit Service b70e42
  AC_SUBST([NEXT_STDARG_H])
Packit Service b70e42
])