commit 7f5103ec59e1e1da6c32e2bb0a3b1b6e437d57e4 Author: Nick Mathewson nickm@torproject.org Date: Thu Sep 25 11:20:04 2014 -0400
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. --- changes/require-c99 | 10 ++++++++++ configure.ac | 24 +++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/changes/require-c99 b/changes/require-c99 new file mode 100644 index 0000000..61d9612 --- /dev/null +++ b/changes/require-c99 @@ -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. + diff --git a/configure.ac b/configure.ac index 5aeeeb4..15154b3 100644 --- a/configure.ac +++ b/configure.ac @@ -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