1## ----------------------------------------- ##
2## ANSIfy the C compiler whenever possible.  ##
3## From Franc,ois Pinard                     ##
4## ----------------------------------------- ##
5
6# serial 1
7
8# @defmac AC_PROG_CC_STDC
9# @maindex PROG_CC_STDC
10# @ovindex CC
11# If the C compiler in not in ANSI C mode by default, try to add an option
12# to output variable @code{CC} to make it so.  This macro tries various
13# options that select ANSI C on some system or another.  It considers the
14# compiler to be in ANSI C mode if it handles function prototypes correctly.
15#
16# If you use this macro, you should check after calling it whether the C
17# compiler has been set to accept ANSI C; if not, the shell variable
18# @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
19# code in ANSI C, you can make an un-ANSIfied copy of it by using the
20# program @code{ansi2knr}, which comes with Ghostscript.
21# @end defmac
22
23AC_DEFUN(AM_PROG_CC_STDC,
24[AC_REQUIRE([AC_PROG_CC])
25AC_BEFORE([$0], [AC_C_INLINE])
26AC_BEFORE([$0], [AC_C_CONST])
27dnl Force this before AC_PROG_CPP.  Some cpp's, eg on HPUX, require
28dnl a magic option to avoid problems with ANSI preprocessor commands
29dnl like #elif.
30dnl FIXME: can't do this because then AC_AIX won't work due to a
31dnl circular dependency.
32dnl AC_BEFORE([$0], [AC_PROG_CPP])
33AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
34AC_CACHE_VAL(am_cv_prog_cc_stdc,
35[am_cv_prog_cc_stdc=no
36ac_save_CC="$CC"
37# Don't try gcc -ansi; that turns off useful extensions and
38# breaks some systems' header files.
39# AIX			-qlanglvl=ansi
40# Ultrix and OSF/1	-std1
41# HP-UX 10.20 and later	-Ae
42# HP-UX older versions	-Aa -D_HPUX_SOURCE
43# SVR4			-Xc -D__EXTENSIONS__
44for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
45do
46  CC="$ac_save_CC $ac_arg"
47  AC_TRY_COMPILE(
48[#include <stdarg.h>
49#include <stdio.h>
50#include <sys/types.h>
51#include <sys/stat.h>
52/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
53struct buf { int x; };
54FILE * (*rcsopen) (struct buf *, struct stat *, int);
55static char *e (p, i)
56     char **p;
57     int i;
58{
59  return p[i];
60}
61static char *f (char * (*g) (char **, int), char **p, ...)
62{
63  char *s;
64  va_list v;
65  va_start (v,p);
66  s = g (p, va_arg (v,int));
67  va_end (v);
68  return s;
69}
70int test (int i, double x);
71struct s1 {int (*f) (int a);};
72struct s2 {int (*f) (double a);};
73int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
74int argc;
75char **argv;
76], [
77return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
78],
79[am_cv_prog_cc_stdc="$ac_arg"; break])
80done
81CC="$ac_save_CC"
82])
83if test -z "$am_cv_prog_cc_stdc"; then
84  AC_MSG_RESULT([none needed])
85else
86  AC_MSG_RESULT($am_cv_prog_cc_stdc)
87fi
88case "x$am_cv_prog_cc_stdc" in
89  x|xno) ;;
90  *) CC="$CC $am_cv_prog_cc_stdc" ;;
91esac
92])
93