Commit 7f5103ec authored by Nick Mathewson's avatar Nick Mathewson
Browse files

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.
parent ecab2616
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.
...@@ -221,6 +221,28 @@ AC_C_FLEXIBLE_ARRAY_MEMBER ...@@ -221,6 +221,28 @@ AC_C_FLEXIBLE_ARRAY_MEMBER
fi 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([SHA1SUM], [sha1sum], none)
AC_PATH_PROG([OPENSSL], [openssl], 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 ...@@ -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 if test x$have_gcc4 = xyes ; then
# These warnings break gcc 3.3.5 and work on gcc 4.0.2 # 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 fi
if test x$have_gcc42 = xyes ; then if test x$have_gcc42 = xyes ; then
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment