Require two c99 features (midblock decls, designated initializers)

c99 lets us do neat stuff like:

    {
      int j, k;
      foo(&j, &k);
      int z = j + k;
    }

and also
    struct point { int x; int y; };
    struct point pt = { .x=5, .y=5 };

This commit makes the configure scripts check to make sure your
compiler implements them.  It also disables our longstanding warning
about midblock declarations.

Closes ticket 13233.
This commit is contained in:
Nick Mathewson 2014-09-25 11:20:04 -04:00
parent ecab261641
commit 7f5103ec59
2 changed files with 33 additions and 1 deletions

10
changes/require-c99 Normal file
View File

@ -0,0 +1,10 @@
o New compiler requirements:
- Tor 0.2.6.x requires that your compiler support more of the C99
language standard than before. The 'configure' script now detects
whether your compiler supports C99 mid-block declarations and
designated initializers. If it does not, Tor will not compile.
We may revisit this requirement if it turns out that a significant
number of people need to build Tor with compilers that don't
bother implementing a 15-year-old standard. Closes ticket 13233.

View File

@ -221,6 +221,28 @@ AC_C_FLEXIBLE_ARRAY_MEMBER
fi
])
AC_CACHE_CHECK([for working C99 mid-block declaration syntax],
tor_cv_c_c99_decl,
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([], [int x; x = 3; int y; y = 4 + x;])],
[tor_cv_c_c99_decl=yes],
[tor_cv_c_c99_decl=no] )])
if test "$tor_cv_c_c99_decl" != "yes"; then
AC_MSG_ERROR([Your compiler doesn't support c99 mid-block declarations. This is required as of Tor 0.2.6.x])
fi
AC_CACHE_CHECK([for working C99 designated initializers],
tor_cv_c_c99_designated_init,
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([struct s { int a; int b; };],
[[ struct s ss = { .b = 5, .a = 6 }; ]])],
[tor_cv_c_c99_designated_init=yes],
[tor_cv_c_c99_designated_init=no] )])
if test "$tor_cv_c_c99_designated_init" != "yes"; then
AC_MSG_ERROR([Your compiler doesn't support c99 designated initializers. This is required as of Tor 0.2.6.x])
fi
AC_PATH_PROG([SHA1SUM], [sha1sum], none)
AC_PATH_PROG([OPENSSL], [openssl], none)
@ -1500,7 +1522,7 @@ if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xy
if test x$have_gcc4 = xyes ; then
# These warnings break gcc 3.3.5 and work on gcc 4.0.2
CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wdeclaration-after-statement -Wold-style-definition"
CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wold-style-definition"
fi
if test x$have_gcc42 = xyes ; then