xref: /netbsd-src/external/bsd/tre/dist/m4/vl_prog_cc_warnings.m4 (revision 63d4abf06d37aace2f9e41a494102a64fe3abddb)
1*63d4abf0Sagcdnl @synopsis VL_PROG_CC_WARNINGS([ANSI])
2*63d4abf0Sagcdnl
3*63d4abf0Sagcdnl Enables a high level of warnings for the C compiler.  Optionally,
4*63d4abf0Sagcdnl if the first argument is nonempty, turns on flags which enforce and/or
5*63d4abf0Sagcdnl enable proper ANSI C if such are known with the compiler used.
6*63d4abf0Sagcdnl
7*63d4abf0Sagcdnl Currently this macro knows about GCC, Solaris C compiler,
8*63d4abf0Sagcdnl Digital Unix C compiler, C for AIX Compiler, HP-UX C compiler,
9*63d4abf0Sagcdnl IRIX C compiler, NEC SX-5 (Super-UX 10) C compiler, and Cray J90
10*63d4abf0Sagcdnl (Unicos 10.0.0.8) C compiler.
11*63d4abf0Sagcdnl
12*63d4abf0Sagcdnl @version 1.2
13*63d4abf0Sagcdnl @author Ville Laurikari <vl@iki.fi>
14*63d4abf0Sagcdnl
15*63d4abf0SagcAC_DEFUN([VL_PROG_CC_WARNINGS], [
16*63d4abf0Sagc  # Don't override if CFLAGS was already set.
17*63d4abf0Sagc  if test -z "$ac_env_CFLAGS_set"; then
18*63d4abf0Sagc    ansi=$1
19*63d4abf0Sagc    if test -z "$ansi"; then
20*63d4abf0Sagc      msg="for C compiler warning flags"
21*63d4abf0Sagc    else
22*63d4abf0Sagc      msg="for C compiler warning and ANSI conformance flags"
23*63d4abf0Sagc    fi
24*63d4abf0Sagc    AC_CACHE_CHECK($msg, vl_cv_prog_cc_warnings, [
25*63d4abf0Sagc      if test -n "$CC"; then
26*63d4abf0Sagc        cat > conftest.c <<EOF
27*63d4abf0Sagcint main(int argc, char **argv) { return 0; }
28*63d4abf0SagcEOF
29*63d4abf0Sagc
30*63d4abf0Sagc        dnl GCC
31*63d4abf0Sagc        if test "$GCC" = "yes"; then
32*63d4abf0Sagc          if test -z "$ansi"; then
33*63d4abf0Sagc            vl_cv_prog_cc_warnings="-Wall"
34*63d4abf0Sagc          else
35*63d4abf0Sagc            vl_cv_prog_cc_warnings="-Wall -ansi -pedantic"
36*63d4abf0Sagc          fi
37*63d4abf0Sagc
38*63d4abf0Sagc        dnl Most compilers print some kind of a version string with some command
39*63d4abf0Sagc        dnl line options (often "-V").  The version string should be checked
40*63d4abf0Sagc        dnl before doing a test compilation run with compiler-specific flags.
41*63d4abf0Sagc        dnl This is because some compilers (like the Cray compiler) only
42*63d4abf0Sagc        dnl produce a warning message for unknown flags instead of returning
43*63d4abf0Sagc        dnl an error, resulting in a false positive.  Also, compilers may do
44*63d4abf0Sagc        dnl erratic things when invoked with flags meant for a different
45*63d4abf0Sagc        dnl compiler.
46*63d4abf0Sagc
47*63d4abf0Sagc        dnl Solaris C compiler
48*63d4abf0Sagc        elif $CC -V 2>&1 | grep -i "WorkShop" > /dev/null 2>&1 &&
49*63d4abf0Sagc             $CC -c -v -Xc conftest.c > /dev/null 2>&1 &&
50*63d4abf0Sagc             test -f conftest.o; then
51*63d4abf0Sagc          if test -z "$ansi"; then
52*63d4abf0Sagc            vl_cv_prog_cc_warnings="-v"
53*63d4abf0Sagc          else
54*63d4abf0Sagc            vl_cv_prog_cc_warnings="-v -Xc"
55*63d4abf0Sagc          fi
56*63d4abf0Sagc
57*63d4abf0Sagc        dnl Compaq (formerly Digital Unix) C compiler
58*63d4abf0Sagc        elif ($CC -V 2>&1 | grep -i "Digital UNIX Compiler" > /dev/null 2>&1 ||
59*63d4abf0Sagc              $CC -V 2>&1 | grep -i "Compaq C" > /dev/null 2>&1) &&
60*63d4abf0Sagc             $CC -c -verbose -w0 -warnprotos -std1 conftest.c > /dev/null 2>&1 &&
61*63d4abf0Sagc             test -f conftest.o; then
62*63d4abf0Sagc          if test -z "$ansi"; then
63*63d4abf0Sagc            vl_cv_prog_cc_warnings="-verbose -w0 -warnprotos"
64*63d4abf0Sagc          else
65*63d4abf0Sagc            vl_cv_prog_cc_warnings="-verbose -w0 -warnprotos -std1"
66*63d4abf0Sagc          fi
67*63d4abf0Sagc
68*63d4abf0Sagc        dnl C for AIX Compiler
69*63d4abf0Sagc        elif $CC 2>&1 | grep -i "C for AIX Compiler" > /dev/null 2>&1 &&
70*63d4abf0Sagc	     $CC -c -qlanglvl=ansi -qinfo=all conftest.c > /dev/null 2>&1 &&
71*63d4abf0Sagc             test -f conftest.o; then
72*63d4abf0Sagc          if test -z "$ansi"; then
73*63d4abf0Sagc            vl_cv_prog_cc_warnings="-qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd:nouni:nocnv"
74*63d4abf0Sagc          else
75*63d4abf0Sagc            vl_cv_prog_cc_warnings="-qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd:nouni:nocnv -qlanglvl=ansi"
76*63d4abf0Sagc          fi
77*63d4abf0Sagc
78*63d4abf0Sagc        dnl IRIX C compiler
79*63d4abf0Sagc        elif $CC -version 2>&1 | grep -i "MIPSpro Compilers" > /dev/null 2>&1 &&
80*63d4abf0Sagc             $CC -c -fullwarn -ansi -ansiE conftest.c > /dev/null 2>&1 &&
81*63d4abf0Sagc             test -f conftest.o; then
82*63d4abf0Sagc          if test -z "$ansi"; then
83*63d4abf0Sagc            vl_cv_prog_cc_warnings="-fullwarn"
84*63d4abf0Sagc          else
85*63d4abf0Sagc            vl_cv_prog_cc_warnings="-fullwarn -ansi -ansiE"
86*63d4abf0Sagc          fi
87*63d4abf0Sagc
88*63d4abf0Sagc        dnl HP-UX C compiler
89*63d4abf0Sagc        elif what $CC 2>&1 | grep -i "HP C Compiler" > /dev/null 2>&1 &&
90*63d4abf0Sagc             $CC -c -Aa +w1 conftest.c > /dev/null 2>&1 &&
91*63d4abf0Sagc             test -f conftest.o; then
92*63d4abf0Sagc          if test -z "$ansi"; then
93*63d4abf0Sagc            vl_cv_prog_cc_warnings="+w1"
94*63d4abf0Sagc          else
95*63d4abf0Sagc            vl_cv_prog_cc_warnings="+w1 -Aa"
96*63d4abf0Sagc          fi
97*63d4abf0Sagc
98*63d4abf0Sagc        dnl The NEC SX-5 (Super-UX 10) C compiler
99*63d4abf0Sagc        elif $CC -V 2>&1 | grep "/SX" > /dev/null 2>&1 &&
100*63d4abf0Sagc             $CC -c -pvctl[,]fullmsg -Xc conftest.c > /dev/null 2>&1 &&
101*63d4abf0Sagc             test -f conftest.o; then
102*63d4abf0Sagc          if test -z "$ansi"; then
103*63d4abf0Sagc            vl_cv_prog_cc_warnings="-pvctl[,]fullmsg"
104*63d4abf0Sagc          else
105*63d4abf0Sagc            vl_cv_prog_cc_warnings="-pvctl[,]fullmsg -Xc"
106*63d4abf0Sagc          fi
107*63d4abf0Sagc
108*63d4abf0Sagc        dnl The Cray C compiler (Unicos)
109*63d4abf0Sagc        elif $CC -V 2>&1 | grep -i "Cray" > /dev/null 2>&1 &&
110*63d4abf0Sagc             $CC -c -h msglevel 2 conftest.c > /dev/null 2>&1 &&
111*63d4abf0Sagc             test -f conftest.o; then
112*63d4abf0Sagc          if test -z "$ansi"; then
113*63d4abf0Sagc            vl_cv_prog_cc_warnings="-h msglevel 2"
114*63d4abf0Sagc          else
115*63d4abf0Sagc            vl_cv_prog_cc_warnings="-h msglevel 2 -h conform"
116*63d4abf0Sagc          fi
117*63d4abf0Sagc
118*63d4abf0Sagc        fi
119*63d4abf0Sagc        rm -f conftest.*
120*63d4abf0Sagc      fi
121*63d4abf0Sagc      if test -n "$vl_cv_prog_cc_warnings"; then
122*63d4abf0Sagc        CFLAGS="$CFLAGS $vl_cv_prog_cc_warnings"
123*63d4abf0Sagc      else
124*63d4abf0Sagc        vl_cv_prog_cc_warnings="unknown"
125*63d4abf0Sagc      fi
126*63d4abf0Sagc    ])
127*63d4abf0Sagc  fi
128*63d4abf0Sagc])dnl
129