summaryrefslogtreecommitdiffstats
path: root/gl/m4/eoverflow.m4
blob: 3bffd10ed125133e6c66356d868c8aec04b92614 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# eoverflow.m4 serial 2
dnl Copyright (C) 2004, 2006 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

dnl From Bruno Haible.

# The EOVERFLOW errno value ought to be defined in <errno.h>, according to
# POSIX.  But some systems (like AIX 3) don't define it, and some systems
# (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined.

# Define EOVERFLOW as a C macro and as a substituted macro in such a way that
# 1. on all systems, after inclusion of <errno.h>, EOVERFLOW is usable,
# 2. on systems where EOVERFLOW is defined elsewhere, we use the same numeric
#    value.

AC_DEFUN([gl_EOVERFLOW],
[
  AC_REQUIRE([AC_PROG_CC])dnl

  AC_CACHE_CHECK([for EOVERFLOW], ac_cv_decl_EOVERFLOW, [
    AC_EGREP_CPP(yes,[
#include <errno.h>
#ifdef EOVERFLOW
yes
#endif
      ], have_eoverflow=1)
    if test -n "$have_eoverflow"; then
      dnl EOVERFLOW exists in <errno.h>. Don't need to define EOVERFLOW ourselves.
      ac_cv_decl_EOVERFLOW=yes
    else
      AC_EGREP_CPP(yes,[
#define _XOPEN_SOURCE_EXTENDED 1
#include <errno.h>
#ifdef EOVERFLOW
yes
#endif
        ], have_eoverflow=1)
      if test -n "$have_eoverflow"; then
        dnl EOVERFLOW exists but is hidden.
        dnl Define it to the same value.
        AC_COMPUTE_INT([ac_cv_decl_EOVERFLOW], [EOVERFLOW], [
#define _XOPEN_SOURCE_EXTENDED 1
#include <errno.h>
/* The following two lines are a workaround against an autoconf-2.52 bug.  */
#include <stdio.h>
#include <stdlib.h>
])
      else
        dnl EOVERFLOW isn't defined by the system. Define EOVERFLOW ourselves, but
        dnl don't define it as EINVAL, because snprintf() callers want to
        dnl distinguish EINVAL and EOVERFLOW.
        ac_cv_decl_EOVERFLOW=E2BIG
      fi
    fi
  ])
  if test "$ac_cv_decl_EOVERFLOW" != yes; then
    AC_DEFINE_UNQUOTED([EOVERFLOW], [$ac_cv_decl_EOVERFLOW],
                       [Define as good substitute value for EOVERFLOW.])
    EOVERFLOW="$ac_cv_decl_EOVERFLOW"
    AC_SUBST(EOVERFLOW)
  fi
])

dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
dnl Remove this when we can assume autoconf >= 2.61.
m4_ifdef([AC_COMPUTE_INT], [], [
  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
])