Browse Source

Merge remote-tracking branch 'public/ticket19044'

Nick Mathewson 8 years ago
parent
commit
a0dd836098
4 changed files with 28 additions and 17 deletions
  1. 5 0
      changes/19044
  2. 16 10
      configure.ac
  3. 6 6
      doc/HACKING/CodingStandards.md
  4. 1 1
      doc/HACKING/HowToReview.md

+ 5 - 0
changes/19044

@@ -0,0 +1,5 @@
+  o Minor features (compilation):
+    - Our big list of extra GCC warnings is now enabled by default when
+      building with GCC (or with anything like Clang that claims to be
+      GCC-compatible). To make all warnings into fatal compilation errors,
+      pass --enable-fatal-warnings to configure. Closes ticket 19044.

+ 16 - 10
configure.ac

@@ -143,9 +143,11 @@ case "$host" in
 esac
 
 AC_ARG_ENABLE(gcc-warnings,
-     AS_HELP_STRING(--enable-gcc-warnings, [enable verbose warnings]))
+     AS_HELP_STRING(--enable-gcc-warnings, [deprecated alias for enable-fatal-warnings]))
+AC_ARG_ENABLE(fatal-warnings,
+     AS_HELP_STRING(--enable-fatal-warnings, [tell the compiler to treat all warnings as errors.]))
 AC_ARG_ENABLE(gcc-warnings-advisory,
-     AS_HELP_STRING(--enable-gcc-warnings-advisory, [enable verbose warnings, excluding -Werror]))
+     AS_HELP_STRING(--disable-gcc-warnings-advisory, [disable the regular verbose warnings]))
 
 dnl Others suggest '/gs /safeseh /nxcompat /dynamicbase' for non-gcc on Windows
 AC_ARG_ENABLE(gcc-hardening,
@@ -1636,6 +1638,12 @@ else
   enable_gcc_warnings_advisory=no
 fi
 
+# Warnings implies advisory-warnings and -Werror.
+if test "$enable_gcc_warnings" = "yes"; then
+  enable_gcc_warnings_advisory=yes
+  enable_fatal_warnings=yes
+fi
+
 # OS X Lion started deprecating the system openssl. Let's just disable
 # all deprecation warnings on OS X. Also, to potentially make the binary
 # a little smaller, let's enable dead_strip.
@@ -1648,8 +1656,7 @@ esac
 
 # Add some more warnings which we use in development but not in the
 # released versions.  (Some relevant gcc versions can't handle these.)
-if test "x$enable_gcc_warnings" = "xyes" ||
-  test "x$enable_gcc_warnings_advisory" = "xyes"; then
+if test "x$enable_gcc_warnings_advisory" != "xno"; then
 
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
 #if !defined(__GNUC__) || (__GNUC__ < 4)
@@ -1671,7 +1678,6 @@ if test "x$enable_gcc_warnings" = "xyes" ||
 #error
 #endif])], have_gcc46=yes, have_gcc46=no)
 
-
   save_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -Wshorten-64-to-32"
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], have_shorten64_flag=yes,
@@ -1693,10 +1699,6 @@ if test "x$enable_gcc_warnings" = "xyes" ||
   CFLAGS="$CFLAGS -Wwrite-strings -Wmissing-declarations -Wredundant-decls"
   CFLAGS="$CFLAGS -Wnested-externs -Wbad-function-cast -Wswitch-enum"
 
-  if test "x$enable_gcc_warnings" = "xyes"; then
-    CFLAGS="$CFLAGS -Werror"
-  fi
-
   # Disabled, so we can use mallinfo(): -Waggregate-return
 
   if test "x$have_gcc4" = "xyes"; then
@@ -1733,7 +1735,11 @@ if test "x$enable_gcc_warnings" = "xyes" ||
     CFLAGS="$CFLAGS -Wshorten-64-to-32"
   fi
 
-
+  if test "x$enable_fatal_warnings" = "xyes"; then
+    # I'd like to use TOR_CHECK_CFLAGS here, but I can't, since the
+    # default autoconf programs are full of errors.
+    CFLAGS="$CFLAGS -Werror"
+  fi
 
 ##This will break the world on some 64-bit architectures
 # CFLAGS="$CFLAGS -Winline"

+ 6 - 6
doc/HACKING/CodingStandards.md

@@ -3,7 +3,7 @@ Coding conventions for Tor
 
 tl;dr:
 
-   - Run configure with `--enable-gcc-warnings`
+   - Run configure with `--enable-fatal-warnings`
    - Run `make check-spaces` to catch whitespace errors
    - Document your functions
    - Write unit tests
@@ -21,7 +21,7 @@ preference)
 
 Did you remember...
 
-   - To build your code while configured with `--enable-gcc-warnings`?
+   - To build your code while configured with `--enable-fatal-warnings`?
    - To run `make check-spaces` on your code?
    - To run `make check-docs` to see whether all new options are on
      the manpage?
@@ -125,10 +125,10 @@ deviations from our C whitespace style.  Generally, we use:
      `puts (x)`.
    - Function declarations at the start of the line.
 
-We try hard to build without warnings everywhere.  In particular, if you're
-using gcc, you should invoke the configure script with the option
-`--enable-gcc-warnings`.  This will give a bunch of extra warning flags to
-the compiler, and help us find divergences from our preferred C style.
+We try hard to build without warnings everywhere.  In particular, if
+you're using gcc, you should invoke the configure script with the
+option `--enable-fatal-warnings`.  This will tell the compiler
+to make all warnings into errors.
 
 Functions to use; functions not to use
 --------------------------------------

+ 1 - 1
doc/HACKING/HowToReview.md

@@ -15,7 +15,7 @@ Top-level smell-checks
 
 (Difficulty: easy)
 
-- Does it compile with `--enable-gcc-warnings`?
+- Does it compile with `--enable-fatal-warnings`?
 
 - Does `make check-spaces` pass?