-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 "Kevin P. Fleming" <kpfleming@xxxxxxxxxxxxxxx> writes: > Roger Leigh wrote: > >> and these work well. What it doesn't do is let me use features such >> as mixed declarations and code. These require you to use "gcc >> -std=c99" or "c99" or similar, and I can't enable this portably. If >> autoconf could find out how to put a given compiler into C99 mode, >> that would be great (in the same way as AC_PROG_GCC_TRADITIONAL >> works for K&R C). > > This sort of test is also needed to test C99 support for anonymous > unions and structures in declarators, which I have run into problems > with before. > > If there's a way to create AC_PROG_CC_C99 or something similar, that > would be wonderful. Here we go (based on _AC_PROG_CC_STDC). This currently only works with GCC; it's trivial to support others. The code is pretty brain-dead, so I'm sure there are more interesting ways of testing C99 support (possibly including the current ANSI C tests as well). # AC_PROG_CC_C99 # ---------------- # If the C compiler in not in ISO C99 C mode by default, try to add an # option to output variable @code{CC} to make it so. This macro tries # various options that select ISO C99 C on some system or another. It # considers the compiler to be in ISO C99 C mode if it handles mixed # code and declarations, _Bool, inline and restrict. AC_DEFUN([AC_PROG_CC_C99], [AC_MSG_CHECKING([for $CC option to accept ISO C99 C]) AC_CACHE_VAL(ac_cv_prog_cc_c99, [ac_cv_prog_cc_c99=no ac_save_CC=$CC AC_LANG_CONFTEST([AC_LANG_PROGRAM( [[static inline int test(const char *restrict text) { int i = 0; while (*(text+i) != '\0') ++i; return 0; }]], [[_Bool success = 1; if (test("String literal") != 0) success = 0; char *restrict newvar = "Another string";]])]) # Try # GCC -std=c99 -std=iso9899:1999 for ac_arg in "" -std=c99 -std=iso9899:1999 do CC="$ac_save_CC $ac_arg" _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_c99=$ac_arg break]) done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC ]) case "x$ac_cv_prog_cc_c99" in x|xno) AC_MSG_RESULT([none needed]) ;; *) AC_MSG_RESULT([$ac_cv_prog_cc_c99]) CC="$CC $ac_cv_prog_cc_c99" ;; esac ])# _AC_PROG_CC_C99 And this is a little patch for c.m4: - --- /usr/share/autoconf/autoconf/c.m4 2004-11-23 23:19:42.000000000 +0000 +++ c99.m4 2004-11-29 18:19:33.000000000 +0000 @@ -461,6 +461,9 @@ AC_CHECK_TOOL(CC, cc) fi if test -z "$CC"; then + AC_CHECK_PROGS(CC, [c99 c89]) +fi +if test -z "$CC"; then AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) fi if test -z "$CC"; then It would be great if in the next year, AC_PROG_CC could default to using a C99 compiler. Since it should be backward-compatible with C89 (??), this shouldn't be required, but I would really like to see C99 as the default, with some means of choosing an older standard if so required. Regards, Roger - -- Roger Leigh Printing on GNU/Linux? http://gimp-print.sourceforge.net/ Debian GNU/Linux http://www.debian.org/ GPG Public Key: 0x25BFB848. Please sign and encrypt your mail. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.5 (GNU/Linux) Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/> iD8DBQFBq2m1VcFcaSW/uEgRAs6sAKDYDAqCORidgrHCJVz6pjo5Cu6ktQCeKAh6 9rRaZXOzwgI++jw3WfAGF38= =bStj -----END PGP SIGNATURE----- _______________________________________________ Autoconf mailing list Autoconf@xxxxxxx http://lists.gnu.org/mailman/listinfo/autoconf