From: cpickett Date: Sun, 28 Dec 2008 23:24:25 +0000 (+0000) Subject: * use AX_CFLAGS_WARN_ALL_ANSI X-Git-Tag: 0.10.0~688 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=897fc499602c18e27fecd7956e5cacc5d65afae5;p=check * use AX_CFLAGS_WARN_ALL_ANSI * remove tests that support fail() and friends without NULL - otherwise GCC complains about this not being ISO C99 * remove setting -ansi and -pedantic in src/Makefile.am git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@474 64e312b2-a51f-0410-8e61-82d0ca0eb02a --- diff --git a/configure.ac b/configure.ac index 7f2fdcd..6aca9b0 100644 --- a/configure.ac +++ b/configure.ac @@ -85,7 +85,7 @@ AC_PROG_LIBTOOL # add these options to CFLAGS if the compiler supports them AC_DEFUN([AX_CFLAGS_ADD],[AX_C_CHECK_FLAG($1, , , CFLAGS="$CFLAGS $1")]) -AX_CFLAGS_ADD([-Wall]) +AX_CFLAGS_WARN_ALL_ANSI AX_CFLAGS_ADD([-Wextra]) AX_CFLAGS_ADD([-Wstrict-prototypes]) AX_CFLAGS_ADD([-Wmissing-prototypes]) diff --git a/m4/ax_cflags_warn_all_ansi.html b/m4/ax_cflags_warn_all_ansi.html new file mode 100644 index 0000000..74c5b84 --- /dev/null +++ b/m4/ax_cflags_warn_all_ansi.html @@ -0,0 +1,266 @@ + + + + + Autoconf Macro: ax_cflags_warn_all_ansi + + + + + + + + + + + + + +
+ Download M4 + Source + + + Macro History + + Category Index + +
+
+ Search: +
+
+
+
+

+ ax_cflags_warn_all_ansi +

+

+ Synopsis +

+

+ AX_CFLAGS_WARN_ALL_ANSI [(shellvar [,default, [A/NA]])] +

+

+ Description +

+
+

+ Try to find a compiler option that enables most reasonable warnings. This + macro is directly derived from VL_PROG_CC_WARNINGS which is split up into + two AX_CFLAGS_WARN_ALL and + AX_CFLAGS_WARN_ALL_ANSI +

+

+ For the GNU CC compiler it will be -Wall (and -ansi -pedantic) The result + is added to the shellvar being CFLAGS by default. +

+

+ Currently this macro knows about GCC, Solaris C compiler, Digital Unix C + compiler, C for AIX Compiler, HP-UX C compiler, IRIX C compiler, NEC SX-5 + (Super-UX 10) C compiler, and Cray J90 (Unicos 10.0.0.8) C compiler. +

+
+ - $1 shell-variable-to-add-to : CFLAGS
+ - $2 add-value-if-not-found : nothing
+ - $3 action-if-found : add value to shellvariable
+ - $4 action-if-not-found : nothing
+
+
+

+ Author +

+

+ Guido U. Draheim <guidod@gmx.de> +

+

+ Last Modified +

+

+ 2008-04-12 +

+

+ Cross References +

+

+ group8-xrefs.png + + + + + + + + + + + +

+

+ M4 Source Code +

+
+
+AC_DEFUN([AX_CFLAGS_WARN_ALL_ANSI],[dnl
+AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl
+AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_warn_all_ansi])dnl
+AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum ansi warnings],
+VAR,[VAR="no, unknown"
+ AC_LANG_SAVE
+ AC_LANG_C
+ ac_save_[]FLAGS="$[]FLAGS"
+# IRIX C compiler:
+#      -use_readonly_const is the default for IRIX C,
+#       puts them into .rodata, but they are copied later.
+#       need to be "-G0 -rdatashared" for strictmode but
+#       I am not sure what effect that has really.         - guidod
+for ac_arg dnl
+in "-pedantic  % -Wall -ansi -pedantic"       dnl   GCC
+   "-xstrconst % -v -Xc"                      dnl Solaris C
+   "-std1      % -verbose -w0 -warnprotos -std1" dnl Digital Unix
+   " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
+   " % -ansi -ansiE -fullwarn"                dnl IRIX
+   "+ESlit     % +w1 -Aa"                     dnl HP-UX C
+   "-Xc        % -pvctl[,]fullmsg -Xc"        dnl NEC SX-5 (Super-UX 10)
+   "-h conform % -h msglevel 2 -h conform"    dnl Cray C (Unicos)
+   #
+do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
+   AC_TRY_COMPILE([],[return 0;],
+   [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
+done
+ FLAGS="$ac_save_[]FLAGS"
+ AC_LANG_RESTORE
+])
+case ".$VAR" in
+     .ok|.ok,*) m4_ifvaln($3,$3) ;;
+   .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[
+        AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])
+                      m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;;
+   *) m4_ifvaln($3,$3,[
+   if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null
+   then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR])
+   else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"])
+                      m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"
+   fi ]) ;;
+esac
+AS_VAR_POPDEF([VAR])dnl
+AS_VAR_POPDEF([FLAGS])dnl
+])
+
+dnl the only difference - the LANG selection... and the default FLAGS
+
+AC_DEFUN([AX_CXXFLAGS_WARN_ALL_ANSI],[dnl
+AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl
+AS_VAR_PUSHDEF([VAR],[ac_cv_cxxflags_warn_all_ansi])dnl
+AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum ansi warnings],
+VAR,[VAR="no, unknown"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_[]FLAGS="$[]FLAGS"
+# IRIX C compiler:
+#      -use_readonly_const is the default for IRIX C,
+#       puts them into .rodata, but they are copied later.
+#       need to be "-G0 -rdatashared" for strictmode but
+#       I am not sure what effect that has really.         - guidod
+for ac_arg dnl
+in "-pedantic  % -Wall -ansi -pedantic"       dnl   GCC
+   "-xstrconst % -v -Xc"                      dnl Solaris C
+   "-std1      % -verbose -w0 -warnprotos -std1" dnl Digital Unix
+   " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
+   " % -ansi -ansiE -fullwarn"                dnl IRIX
+   "+ESlit     % +w1 -Aa"                     dnl HP-UX C
+   "-Xc        % -pvctl[,]fullmsg -Xc"        dnl NEC SX-5 (Super-UX 10)
+   "-h conform % -h msglevel 2 -h conform"    dnl Cray C (Unicos)
+   #
+do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
+   AC_TRY_COMPILE([],[return 0;],
+   [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
+done
+ FLAGS="$ac_save_[]FLAGS"
+ AC_LANG_RESTORE
+])
+case ".$VAR" in
+     .ok|.ok,*) m4_ifvaln($3,$3) ;;
+   .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[
+        AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])
+                      m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;;
+   *) m4_ifvaln($3,$3,[
+   if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null
+   then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR])
+   else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"])
+                      m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"
+   fi ]) ;;
+esac
+AS_VAR_POPDEF([VAR])dnl
+AS_VAR_POPDEF([FLAGS])dnl
+])
+
+
+

+ License +

+
+ Copyright © 2008 Guido U. Draheim + <guidod@gmx.de> +

+ This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. +

+

+ This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. +

+

+ You should have received a copy of the GNU General Public License along + with this program. If not, see <http://www.gnu.org/licenses/>. +

+

+ As a special exception, the respective Autoconf Macro's copyright owner + gives unlimited permission to copy, distribute and modify the configure + scripts that are the output of Autoconf when processing the Macro. You need + not follow the terms of the GNU General Public License when using or + distributing such scripts, even though portions of the text of the Macro + appear in them. The GNU General Public License (GPL) does govern all other + use of the material that constitutes the Autoconf Macro. +

+

+ This special exception to the GPL applies to versions of the Autoconf Macro + released by the Autoconf Macro Archive. When you make and distribute a + modified version of the Autoconf Macro, you may extend this special + exception to the GPL to apply to your modified version as well. +

+
+ + diff --git a/m4/ax_cflags_warn_all_ansi.m4 b/m4/ax_cflags_warn_all_ansi.m4 new file mode 100644 index 0000000..53f21cc --- /dev/null +++ b/m4/ax_cflags_warn_all_ansi.m4 @@ -0,0 +1,154 @@ +# =========================================================================== +# http://autoconf-archive.cryp.to/ax_cflags_warn_all_ansi.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CFLAGS_WARN_ALL_ANSI [(shellvar [,default, [A/NA]])] +# +# DESCRIPTION +# +# Try to find a compiler option that enables most reasonable warnings. +# This macro is directly derived from VL_PROG_CC_WARNINGS which is split +# up into two AX_CFLAGS_WARN_ALL and AX_CFLAGS_WARN_ALL_ANSI +# +# For the GNU CC compiler it will be -Wall (and -ansi -pedantic) The +# result is added to the shellvar being CFLAGS by default. +# +# Currently this macro knows about GCC, Solaris C compiler, Digital Unix C +# compiler, C for AIX Compiler, HP-UX C compiler, IRIX C compiler, NEC +# SX-5 (Super-UX 10) C compiler, and Cray J90 (Unicos 10.0.0.8) C +# compiler. +# +# - $1 shell-variable-to-add-to : CFLAGS +# - $2 add-value-if-not-found : nothing +# - $3 action-if-found : add value to shellvariable +# - $4 action-if-not-found : nothing +# +# LAST MODIFICATION +# +# 2008-04-12 +# +# COPYLEFT +# +# Copyright (c) 2008 Guido U. Draheim +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Macro Archive. When you make and +# distribute a modified version of the Autoconf Macro, you may extend this +# special exception to the GPL to apply to your modified version as well. + +AC_DEFUN([AX_CFLAGS_WARN_ALL_ANSI],[dnl +AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl +AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_warn_all_ansi])dnl +AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum ansi warnings], +VAR,[VAR="no, unknown" + AC_LANG_SAVE + AC_LANG_C + ac_save_[]FLAGS="$[]FLAGS" +# IRIX C compiler: +# -use_readonly_const is the default for IRIX C, +# puts them into .rodata, but they are copied later. +# need to be "-G0 -rdatashared" for strictmode but +# I am not sure what effect that has really. - guidod +for ac_arg dnl +in "-pedantic % -Wall -ansi -pedantic" dnl GCC + "-xstrconst % -v -Xc" dnl Solaris C + "-std1 % -verbose -w0 -warnprotos -std1" dnl Digital Unix + " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX + " % -ansi -ansiE -fullwarn" dnl IRIX + "+ESlit % +w1 -Aa" dnl HP-UX C + "-Xc % -pvctl[,]fullmsg -Xc" dnl NEC SX-5 (Super-UX 10) + "-h conform % -h msglevel 2 -h conform" dnl Cray C (Unicos) + # +do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` + AC_TRY_COMPILE([],[return 0;], + [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) +done + FLAGS="$ac_save_[]FLAGS" + AC_LANG_RESTORE +]) +case ".$VAR" in + .ok|.ok,*) m4_ifvaln($3,$3) ;; + .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ + AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; + *) m4_ifvaln($3,$3,[ + if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null + then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) + else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" + fi ]) ;; +esac +AS_VAR_POPDEF([VAR])dnl +AS_VAR_POPDEF([FLAGS])dnl +]) + +dnl the only difference - the LANG selection... and the default FLAGS + +AC_DEFUN([AX_CXXFLAGS_WARN_ALL_ANSI],[dnl +AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl +AS_VAR_PUSHDEF([VAR],[ac_cv_cxxflags_warn_all_ansi])dnl +AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum ansi warnings], +VAR,[VAR="no, unknown" + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_[]FLAGS="$[]FLAGS" +# IRIX C compiler: +# -use_readonly_const is the default for IRIX C, +# puts them into .rodata, but they are copied later. +# need to be "-G0 -rdatashared" for strictmode but +# I am not sure what effect that has really. - guidod +for ac_arg dnl +in "-pedantic % -Wall -ansi -pedantic" dnl GCC + "-xstrconst % -v -Xc" dnl Solaris C + "-std1 % -verbose -w0 -warnprotos -std1" dnl Digital Unix + " % -qlanglvl=ansi -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX + " % -ansi -ansiE -fullwarn" dnl IRIX + "+ESlit % +w1 -Aa" dnl HP-UX C + "-Xc % -pvctl[,]fullmsg -Xc" dnl NEC SX-5 (Super-UX 10) + "-h conform % -h msglevel 2 -h conform" dnl Cray C (Unicos) + # +do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` + AC_TRY_COMPILE([],[return 0;], + [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) +done + FLAGS="$ac_save_[]FLAGS" + AC_LANG_RESTORE +]) +case ".$VAR" in + .ok|.ok,*) m4_ifvaln($3,$3) ;; + .|.no|.no,*) m4_ifvaln($4,$4,[m4_ifval($2,[ + AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $2"])]) ;; + *) m4_ifvaln($3,$3,[ + if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " $VAR " 2>&1 >/dev/null + then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain $VAR]) + else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR"]) + m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) $VAR" + fi ]) ;; +esac +AS_VAR_POPDEF([VAR])dnl +AS_VAR_POPDEF([FLAGS])dnl +]) diff --git a/src/Makefile.am b/src/Makefile.am index 4eaae19..047196c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -9,7 +9,7 @@ include_HEADERS = check.h EXTRA_DIST = check.h.in -AM_CFLAGS = @GCOV_CFLAGS@ -ansi -pedantic +AM_CFLAGS = @GCOV_CFLAGS@ CFILES =\ diff --git a/tests/check_check_master.c b/tests/check_check_master.c index 8256a65..61f2002 100644 --- a/tests/check_check_master.c +++ b/tests/check_check_master.c @@ -24,6 +24,7 @@ static char signal_11_str[SIG_STR_LEN]; static char signal_11_8_str[SIG_STR_LEN]; static char signal_8_str[SIG_STR_LEN]; +/* FIXME: all these line numbers are kind of hard to maintain */ static master_test_t master_tests[] = { { "Simple Tests", 18, CK_FAILURE, "Failure expected" }, { "Simple Tests", 24, CK_ERROR, "Early exit with return value 1" }, diff --git a/tests/check_check_sub.c b/tests/check_check_sub.c index 6062630..795c2dc 100644 --- a/tests/check_check_sub.c +++ b/tests/check_check_sub.c @@ -60,8 +60,8 @@ END_TEST #if defined(__GNUC__) START_TEST(test_fail_no_msg) -{ - fail_unless(4 == 5); +{ /* taking out the NULL provokes an ISO C99 warning in GCC */ + fail_unless(4 == 5, NULL); } END_TEST #endif /* __GNUC__ */ @@ -73,8 +73,8 @@ END_TEST #if defined(__GNUC__) START_TEST(test_fail_if_no_msg) -{ - fail_if(4 != 5); +{ /* taking out the NULL provokes an ISO C99 warning in GCC */ + fail_if(4 != 5, NULL); } END_TEST #endif /* __GNUC__ */ @@ -104,11 +104,11 @@ END_TEST #if defined(__GNUC__) START_TEST(test_fail_empty) { /* plain fail() doesn't compile with xlc in C mode because of `, ## __VA_ARGS__' problem */ - fail(); + /* on the other hand, taking out the NULL provokes an ISO C99 warning in GCC */ + fail(NULL); } END_TEST #endif /* __GNUC__ */ -/* FIXME: all these line numbers are kind of hard to maintain */ START_TEST(test_ck_abort) { ck_abort(); /* line 114 */