aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac686
1 files changed, 444 insertions, 242 deletions
diff --git a/configure.ac b/configure.ac
index 200ea0216c..f7bdd97e13 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl Copyright (c) 2007-2015, The Tor Project, Inc.
dnl See LICENSE for licensing information
AC_PREREQ([2.63])
-AC_INIT([tor],[0.2.8.12-dev])
+AC_INIT([tor],[0.2.9.9-dev])
AC_CONFIG_SRCDIR([src/or/main.c])
AC_CONFIG_MACRO_DIR([m4])
@@ -16,6 +16,7 @@ AM_INIT_AUTOMAKE([foreign 1.11 subdir-objects])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AC_CONFIG_HEADERS([orconfig.h])
+AC_USE_SYSTEM_EXTENSIONS
AC_CANONICAL_HOST
PKG_PROG_PKG_CONFIG
@@ -30,11 +31,8 @@ fi
# the += operator on it in src/or/Makefile.am
CPPFLAGS="$CPPFLAGS -I\${top_srcdir}/src/common"
-#XXXX020 We should make these enabled or not, before 0.2.0.x-final
AC_ARG_ENABLE(openbsd-malloc,
AS_HELP_STRING(--enable-openbsd-malloc, [use malloc code from OpenBSD. Linux only]))
-AC_ARG_ENABLE(instrument-downloads,
- AS_HELP_STRING(--enable-instrument-downloads, [instrument downloads of directory resources etc.]))
AC_ARG_ENABLE(static-openssl,
AS_HELP_STRING(--enable-static-openssl, [link against a static openssl library. Requires --with-openssl-dir]))
AC_ARG_ENABLE(static-libevent,
@@ -73,18 +71,6 @@ if test "$enable_system_torrc" = "no"; then
fi
AM_CONDITIONAL(USE_OPENBSD_MALLOC, test "x$enable_openbsd_malloc" = "xyes")
-if test "x$enable_instrument_downloads" = "xyes"; then
- AC_DEFINE(INSTRUMENT_DOWNLOADS, 1,
- [Defined if we want to keep track of how much of each kind of resource we download.])
-fi
-
-AC_ARG_ENABLE(transparent,
- AS_HELP_STRING(--disable-transparent, [disable transparent proxy support]),
- [case "${enableval}" in
- "yes") transparent=true ;;
- "no") transparent=false ;;
- *) AC_MSG_ERROR(bad value for --enable-transparent) ;;
- esac], [transparent=true])
AC_ARG_ENABLE(asciidoc,
AS_HELP_STRING(--disable-asciidoc, [don't use asciidoc (disables building of manpages)]),
@@ -143,9 +129,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,
@@ -173,9 +161,6 @@ AC_ARG_ENABLE(tor2web-mode,
CFLAGS="$CFLAGS -D ENABLE_TOR2WEB_MODE=1"
fi])
-AC_ARG_ENABLE(bufferevents,
- AS_HELP_STRING(--enable-bufferevents, [use Libevent's buffered IO]))
-
AC_ARG_ENABLE(tool-name-check,
AS_HELP_STRING(--disable-tool-name-check, [check for sanely named toolchain when cross-compiling]))
@@ -430,6 +415,7 @@ AC_CHECK_FUNCS(
strtoull \
sysconf \
sysctl \
+ truncate \
uname \
usleep \
vasprintf \
@@ -444,11 +430,11 @@ AC_MSG_CHECKING([for a pre-Sierra OSX build target])
AC_TRY_COMPILE([
#ifdef __APPLE__
# include <AvailabilityMacros.h>
-# ifndef MAC_OS_VERSION_10_12
-# define MAC_OS_VERSION_10_12 101200
+# ifndef MAC_OS_X_VERSION_10_12
+# define MAC_OS_X_VERSION_10_12 101200
# endif
# if defined(MAC_OS_X_VERSION_MIN_REQUIRED)
-# if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_VERSION_10_12
+# if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12
# error "Running on Mac OSX 10.11 or earlier"
# endif
# endif
@@ -518,40 +504,30 @@ TOR_SEARCH_LIBRARY(libevent, $trylibeventdir, [-levent $STATIC_LIBEVENT_FLAGS $T
#endif
#include <sys/time.h>
#include <sys/types.h>
-#include <event.h>], [
+#include <event2/event.h>], [
#ifdef _WIN32
#include <winsock2.h>
#endif
-void *event_init(void);],
+struct event_base;
+struct event_base *event_base_new(void);],
[
#ifdef _WIN32
{WSADATA d; WSAStartup(0x101,&d); }
#endif
-event_init();
+event_base_new();
], [--with-libevent-dir], [/opt/libevent])
-dnl Now check for particular libevent functions.
+dnl Determine the incantation needed to link libevent.
save_LIBS="$LIBS"
save_LDFLAGS="$LDFLAGS"
save_CPPFLAGS="$CPPFLAGS"
-LIBS="-levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $LIBS"
+
+LIBS="$STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $save_LIBS"
LDFLAGS="$TOR_LDFLAGS_libevent $LDFLAGS"
CPPFLAGS="$TOR_CPPFLAGS_libevent $CPPFLAGS"
-AC_CHECK_FUNCS([event_get_version_number \
- evutil_secure_rng_set_urandom_device_file \
- evutil_secure_rng_init \
- ])
-AC_CHECK_MEMBERS([struct event.min_heap_idx], , ,
-[#include <event.h>
-])
AC_CHECK_HEADERS(event2/event.h event2/dns.h event2/bufferevent_ssl.h)
-LIBS="$STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $save_LIBS"
-
-AM_CONDITIONAL(USE_EXTERNAL_EVDNS,
- test "x$ac_cv_header_event2_dns_h" = "xyes")
-
if test "$enable_static_libevent" = "yes"; then
if test "$tor_cv_library_libevent_dir" = "(system)"; then
AC_MSG_ERROR("You must specify an explicit --with-libevent-dir=x option when using --enable-static-libevent")
@@ -570,67 +546,39 @@ else
TOR_LIBEVENT_LIBS="$ac_cv_search_evdns_base_new $TOR_LIBEVENT_LIBS"
fi
else
- TOR_LIBEVENT_LIBS="-levent"
+ AC_MSG_ERROR("libevent2 is required but the headers could not be found")
fi
fi
+dnl Now check for particular libevent functions.
+AC_CHECK_FUNCS([evutil_secure_rng_set_urandom_device_file \
+ evutil_secure_rng_add_bytes \
+])
+
LIBS="$save_LIBS"
LDFLAGS="$save_LDFLAGS"
CPPFLAGS="$save_CPPFLAGS"
-dnl This isn't the best test for Libevent 2.0.3-alpha. Once it's released,
-dnl we can do much better.
-if test "$enable_bufferevents" = "yes"; then
- if test "$ac_cv_header_event2_bufferevent_ssl_h" != "yes"; then
- AC_MSG_ERROR([You've asked for bufferevent support, but you're using a version of Libevent without SSL support. This won't work. We need Libevent 2.0.8-rc or later, and you don't seem to even have Libevent 2.0.3-alpha.])
- else
-
- CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent"
-
- # Check for the right version. First see if version detection works.
- AC_MSG_CHECKING([whether we can detect the Libevent version])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-#include <event2/event.h>
-#if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 10
-#error
-int x = y(zz);
-#else
-int x = 1;
-#endif
- ])], [event_version_number_works=yes; AC_MSG_RESULT([yes]) ],
- [event_version_number_works=no; AC_MSG_RESULT([no])])
- if test "$event_version_number_works" != "yes"; then
- AC_MSG_WARN([Version detection on Libevent seems broken. Your Libevent installation is probably screwed up or very old.])
- else
- AC_MSG_CHECKING([whether Libevent is new enough for bufferevents])
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+dnl Check that libevent is at least at version 2.0.10, the first stable
+dnl release of its series
+CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent"
+AC_MSG_CHECKING([whether Libevent is new enough])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <event2/event.h>
-#if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 0x02000d00
+#if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 0x02000a00
#error
int x = y(zz);
#else
int x = 1;
#endif
- ])], [ AC_MSG_RESULT([yes]) ],
- [ AC_MSG_RESULT([no])
- AC_MSG_ERROR([Libevent does not seem new enough to support bufferevents. We require 2.0.13-stable or later]) ] )
- fi
- fi
-fi
+])], [ AC_MSG_RESULT([yes]) ],
+ [ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([Libevent is not new enough. We require 2.0.10-stable or later]) ] )
LIBS="$save_LIBS"
LDFLAGS="$save_LDFLAGS"
CPPFLAGS="$save_CPPFLAGS"
-AM_CONDITIONAL(USE_BUFFEREVENTS, test "$enable_bufferevents" = "yes")
-if test "$enable_bufferevents" = "yes"; then
- AC_DEFINE(USE_BUFFEREVENTS, 1, [Defined if we're going to use Libevent's buffered IO API])
- if test "$enable_static_libevent" = "yes"; then
- TOR_LIBEVENT_LIBS="$TOR_LIBDIR_libevent/libevent_openssl.a $TOR_LIBEVENT_LIBS"
- else
- TOR_LIBEVENT_LIBS="-levent_openssl $TOR_LIBEVENT_LIBS"
- fi
-fi
AC_SUBST(TOR_LIBEVENT_LIBS)
dnl ------------------------------------------------------
@@ -693,12 +641,12 @@ CPPFLAGS="$TOR_CPPFLAGS_openssl $CPPFLAGS"
AC_TRY_COMPILE([
#include <openssl/opensslv.h>
-#if OPENSSL_VERSION_NUMBER < 0x1000000fL
+#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x1000100fL
#error "too old"
#endif
], [],
[ : ],
- [ AC_ERROR([OpenSSL is too old. We require 1.0.0 or later. You can specify a path to a newer one with --with-openssl-dir.]) ])
+ [ AC_ERROR([OpenSSL is too old. We require 1.0.1 or later. You can specify a path to a newer one with --with-openssl-dir.]) ])
AC_TRY_COMPILE([
#include <openssl/opensslv.h>
@@ -729,6 +677,11 @@ AC_CHECK_FUNCS([ \
dnl Check if OpenSSL has scrypt implementation.
AC_CHECK_FUNCS([ EVP_PBE_scrypt ])
+dnl Check if OpenSSL structures are opaque
+AC_CHECK_MEMBERS([SSL.state], , ,
+[#include <openssl/ssl.h>
+])
+
LIBS="$save_LIBS"
LDFLAGS="$save_LDFLAGS"
CPPFLAGS="$save_CPPFLAGS"
@@ -781,6 +734,11 @@ dnl use it with a build of a library.
all_ldflags_for_check="$TOR_LDFLAGS_zlib $TOR_LDFLAGS_openssl $TOR_LDFLAGS_libevent"
all_libs_for_check="$TOR_ZLIB_LIBS $TOR_LIB_MATH $TOR_LIBEVENT_LIBS $TOR_OPENSSL_LIBS $TOR_SYSTEMD_LIBS $TOR_LIB_WS32 $TOR_LIB_GDI $TOR_CAP_LIBS"
+CFLAGS_FTRAPV=
+CFLAGS_FWRAPV=
+CFLAGS_ASAN=
+CFLAGS_UBSAN=
+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
#if !defined(__clang__)
#error
@@ -803,20 +761,89 @@ m4_ifdef([AS_VAR_IF],[
AS_VAR_POPDEF([can_link])
AS_VAR_POPDEF([can_compile])
TOR_CHECK_CFLAGS(-Wstack-protector)
- TOR_CHECK_CFLAGS(-fwrapv)
TOR_CHECK_CFLAGS(--param ssp-buffer-size=1)
if test "$bwin32" = "false"; then
TOR_CHECK_CFLAGS(-fPIE)
TOR_CHECK_LDFLAGS(-pie, "$all_ldflags_for_check", "$all_libs_for_check")
fi
+ TOR_TRY_COMPILE_WITH_CFLAGS(-fwrapv, also_link, CFLAGS_FWRAPV="-fwrapv", true)
fi
if test "x$enable_expensive_hardening" = "xyes"; then
- TOR_CHECK_CFLAGS([-fsanitize=address])
- TOR_CHECK_CFLAGS([-fsanitize=undefined])
- TOR_CHECK_CFLAGS([-fno-omit-frame-pointer])
+ TOR_TRY_COMPILE_WITH_CFLAGS(-ftrapv, also_link, CFLAGS_FTRAPV="-ftrapv", true)
+ if test "$tor_cv_cflags__ftrapv" = "yes" && test "$tor_can_link__ftrapv" != "yes"; then
+ AC_MSG_WARN([The compiler supports -ftrapv, but for some reason I was not able to link with -ftrapv. Are you missing run-time support? Run-time hardening will not work as well as it should.])
+ fi
+
+ if test "$tor_cv_cflags__ftrapv" != "yes"; then
+ AC_MSG_ERROR([You requested expensive hardening, but the compiler does not seem to support -ftrapv.])
+ fi
+
+ TOR_TRY_COMPILE_WITH_CFLAGS([-fsanitize=address], also_link, CFLAGS_ASAN="-fsanitize=address", true)
+ if test "$tor_cv_cflags__fsanitize_address" = "yes" && test "$tor_can_link__fsanitize_address" != "yes"; then
+ AC_MSG_ERROR([The compiler supports -fsanitize=address, but for some reason I was not able to link when using it. Are you missing run-time support? With GCC you need libubsan.so, and with Clang you need libclang_rt.ubsan*])
+ fi
+
+ TOR_TRY_COMPILE_WITH_CFLAGS([-fsanitize=undefined], also_link, CFLAGS_UBSAN="-fsanitize=undefined", true)
+ if test "$tor_cv_cflags__fsanitize_address" = "yes" && test "$tor_can_link__fsanitize_address" != "yes"; then
+ AC_MSG_ERROR([The compiler supports -fsanitize=undefined, but for some reason I was not able to link when using it. Are you missing run-time support? With GCC you need libasan.so, and with Clang you need libclang_rt.ubsan*])
+ fi
+
+TOR_CHECK_CFLAGS([-fno-omit-frame-pointer])
+fi
+
+CFLAGS_BUGTRAP="$CFLAGS_FTRAPV $CFLAGS_ASAN $CFLAGS_UBSAN"
+CFLAGS_CONSTTIME="$CFLAGS_FWRAPV"
+
+mulodi_fixes_ftrapv=no
+if test "$have_clang" = "yes"; then
+ saved_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $CFLAGS_FTRAPV"
+ AC_MSG_CHECKING([whether clang -ftrapv can link a 64-bit int multiply])
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([[
+ #include <stdint.h>
+ #include <stdlib.h>
+ int main(int argc, char **argv)
+ {
+ int64_t x = ((int64_t)atoi(argv[1])) * (int64_t)atoi(argv[2])
+ * (int64_t)atoi(argv[3]);
+ return x == 9;
+ } ]])],
+ [ftrapv_can_link=yes; AC_MSG_RESULT([yes])],
+ [ftrapv_can_link=no; AC_MSG_RESULT([no])])
+ if test "$ftrapv_can_link" = "no"; then
+ AC_MSG_CHECKING([whether defining __mulodi4 fixes that])
+ AC_LINK_IFELSE([
+ AC_LANG_SOURCE([[
+ #include <stdint.h>
+ #include <stdlib.h>
+ int64_t __mulodi4(int64_t a, int64_t b, int *overflow) {
+ *overflow=0;
+ return a;
+ }
+ int main(int argc, char **argv)
+ {
+ int64_t x = ((int64_t)atoi(argv[1])) * (int64_t)atoi(argv[2])
+ * (int64_t)atoi(argv[3]);
+ return x == 9;
+ } ]])],
+ [mulodi_fixes_ftrapv=yes; AC_MSG_RESULT([yes])],
+ [mulodi_fixes_ftrapv=no; AC_MSG_RESULT([no])])
+ fi
+ CFLAGS="$saved_CFLAGS"
fi
+AM_CONDITIONAL(ADD_MULODI4, test "$mulodi_fixes_ftrapv" = "yes")
+
+dnl These cflags add bunches of branches, and we haven't been able to
+dnl persuade ourselves that they're suitable for code that needs to be
+dnl constant time.
+AC_SUBST(CFLAGS_BUGTRAP)
+dnl These cflags are variant ones sutable for code that needs to be
+dnl constant-time.
+AC_SUBST(CFLAGS_CONSTTIME)
+
if test "x$enable_linker_hardening" != "xno"; then
TOR_CHECK_LDFLAGS(-z relro -z now, "$all_ldflags_for_check", "$all_libs_for_check")
fi
@@ -969,64 +996,58 @@ AC_SUBST(CURVE25519_LIBS)
dnl Make sure to enable support for large off_t if available.
AC_SYS_LARGEFILE
-AC_CHECK_HEADERS(
- assert.h \
- errno.h \
- fcntl.h \
- signal.h \
- string.h \
- sys/capability.h \
- sys/fcntl.h \
- sys/stat.h \
- sys/time.h \
- sys/types.h \
- time.h \
- unistd.h
- , , AC_MSG_WARN(Some headers were not found, compilation may fail. If compilation succeeds, please send your orconfig.h to the developers so we can fix this warning.))
-
-dnl These headers are not essential
-
-AC_CHECK_HEADERS(
- arpa/inet.h \
- crt_externs.h \
- execinfo.h \
- grp.h \
- ifaddrs.h \
- inttypes.h \
- limits.h \
- linux/types.h \
- machine/limits.h \
- malloc.h \
- malloc/malloc.h \
- malloc_np.h \
- netdb.h \
- netinet/in.h \
- netinet/in6.h \
- pwd.h \
- readpassphrase.h \
- stdint.h \
- sys/eventfd.h \
- sys/file.h \
- sys/ioctl.h \
- sys/limits.h \
- sys/mman.h \
- sys/param.h \
- sys/prctl.h \
- sys/resource.h \
- sys/select.h \
- sys/socket.h \
- sys/statvfs.h \
- sys/syscall.h \
- sys/sysctl.h \
- sys/syslimits.h \
- sys/time.h \
- sys/types.h \
- sys/un.h \
- sys/utime.h \
- sys/wait.h \
- syslog.h \
- utime.h
-)
+AC_CHECK_HEADERS([assert.h \
+ errno.h \
+ fcntl.h \
+ signal.h \
+ string.h \
+ sys/capability.h \
+ sys/fcntl.h \
+ sys/stat.h \
+ sys/time.h \
+ sys/types.h \
+ time.h \
+ unistd.h \
+ arpa/inet.h \
+ crt_externs.h \
+ execinfo.h \
+ grp.h \
+ ifaddrs.h \
+ inttypes.h \
+ limits.h \
+ linux/types.h \
+ machine/limits.h \
+ malloc.h \
+ malloc/malloc.h \
+ malloc_np.h \
+ netdb.h \
+ netinet/in.h \
+ netinet/in6.h \
+ pwd.h \
+ readpassphrase.h \
+ stdint.h \
+ sys/eventfd.h \
+ sys/file.h \
+ sys/ioctl.h \
+ sys/limits.h \
+ sys/mman.h \
+ sys/param.h \
+ sys/prctl.h \
+ sys/random.h \
+ sys/resource.h \
+ sys/select.h \
+ sys/socket.h \
+ sys/statvfs.h \
+ sys/syscall.h \
+ sys/sysctl.h \
+ sys/syslimits.h \
+ sys/time.h \
+ sys/types.h \
+ sys/un.h \
+ sys/utime.h \
+ sys/wait.h \
+ syslog.h \
+ utime.h])
AC_CHECK_HEADERS(sys/param.h)
@@ -1103,26 +1124,24 @@ AC_CHECK_HEADERS(linux/netfilter_ipv6/ip6_tables.h,
#include <linux/if.h>
#endif])
-if test "x$transparent" = "xtrue"; then
- transparent_ok=0
- if test "x$net_if_found" = "x1" && test "x$net_pfvar_found" = "x1"; then
- transparent_ok=1
- fi
- if test "x$linux_netfilter_ipv4" = "x1"; then
- transparent_ok=1
- fi
- if test "x$linux_netfilter_ipv6_ip6_tables" = "x1"; then
- transparent_ok=1
- fi
- if test "x$transparent_ok" = "x1"; then
- AC_DEFINE(USE_TRANSPARENT, 1, "Define to enable transparent proxy support")
- case "$host" in
- *-*-openbsd* | *-*-bitrig*)
- AC_DEFINE(OPENBSD, 1, "Define to handle pf on OpenBSD properly") ;;
- esac
- else
- AC_MSG_NOTICE([Transparent proxy support enabled, but missing headers.])
- fi
+transparent_ok=0
+if test "x$net_if_found" = "x1" && test "x$net_pfvar_found" = "x1"; then
+ transparent_ok=1
+fi
+if test "x$linux_netfilter_ipv4" = "x1"; then
+ transparent_ok=1
+fi
+if test "x$linux_netfilter_ipv6_ip6_tables" = "x1"; then
+ transparent_ok=1
+fi
+if test "x$transparent_ok" = "x1"; then
+ AC_DEFINE(USE_TRANSPARENT, 1, "Define to enable transparent proxy support")
+ case "$host" in
+ *-*-openbsd* | *-*-bitrig*)
+ AC_DEFINE(OPENBSD, 1, "Define to handle pf on OpenBSD properly") ;;
+ esac
+else
+ AC_MSG_NOTICE([Transparent proxy support enabled, but missing headers.])
fi
AC_CHECK_MEMBERS([struct timeval.tv_sec], , ,
@@ -1516,9 +1535,6 @@ int main(int c, char **v) { puts(__FUNCTION__); }])],
AC_CACHE_CHECK([whether we have extern char **environ already declared],
tor_cv_have_environ_declared,
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-/* We define _GNU_SOURCE here because it is also defined in compat.c.
- * Without it environ doesn't get declared. */
-#define _GNU_SOURCE
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -1603,6 +1619,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.
@@ -1615,35 +1637,11 @@ 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
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
-#if !defined(__GNUC__) || (__GNUC__ < 4)
-#error
-#endif])], have_gcc4=yes, have_gcc4=no)
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
-#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
-#error
-#endif])], have_gcc42=yes, have_gcc42=no)
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
-#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)
-#error
-#endif])], have_gcc43=yes, have_gcc43=no)
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
-#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
-#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,
- have_shorten64_flag=no)
- CFLAGS="$save_CFLAGS"
+#
+# Note that we have to do this near the end of the autoconf process, or
+# else we may run into problems when these warnings hit on the testing C
+# programs that autoconf wants to build.
+if test "x$enable_gcc_warnings_advisory" != "xno"; then
case "$host" in
*-*-openbsd* | *-*-bitrig*)
@@ -1654,62 +1652,266 @@ if test "x$enable_gcc_warnings" = "xyes" ||
CFLAGS="$CFLAGS -Wno-system-headers" ;;
esac
+ # GCC4.3 users once report trouble with -Wstrict-overflow=5. GCC5 users
+ # have it work better.
+ # CFLAGS="$CFLAGS -Wstrict-overflow=1"
+
+ # This warning was added in gcc 4.3, but it appears to generate
+ # spurious warnings in gcc 4.4. I don't know if it works in 4.5.
+ #CFLAGS="$CFLAGS -Wlogical-op"
+
+ m4_foreach_w([warning_flag], [
+ -Waddress
+ -Waddress-of-array-temporary
+ -Waddress-of-temporary
+ -Wambiguous-macro
+ -Wanonymous-pack-parens
+ -Warc
+ -Warc-abi
+ -Warc-bridge-casts-disallowed-in-nonarc
+ -Warc-maybe-repeated-use-of-weak
+ -Warc-performSelector-leaks
+ -Warc-repeated-use-of-weak
+ -Warray-bounds
+ -Warray-bounds-pointer-arithmetic
+ -Wasm
+ -Wasm-operand-widths
+ -Watomic-properties
+ -Watomic-property-with-user-defined-accessor
+ -Wauto-import
+ -Wauto-storage-class
+ -Wauto-var-id
+ -Wavailability
+ -Wbackslash-newline-escape
+ -Wbad-array-new-length
+ -Wbind-to-temporary-copy
+ -Wbitfield-constant-conversion
+ -Wbool-conversion
+ -Wbool-conversions
+ -Wbuiltin-requires-header
+ -Wchar-align
+ -Wcompare-distinct-pointer-types
+ -Wcomplex-component-init
+ -Wconditional-type-mismatch
+ -Wconfig-macros
+ -Wconstant-conversion
+ -Wconstant-logical-operand
+ -Wconstexpr-not-const
+ -Wcustom-atomic-properties
+ -Wdangling-field
+ -Wdangling-initializer-list
+ -Wdate-time
+ -Wdelegating-ctor-cycles
+ -Wdeprecated-implementations
+ -Wdeprecated-register
+ -Wdirect-ivar-access
+ -Wdiscard-qual
+ -Wdistributed-object-modifiers
+ -Wdivision-by-zero
+ -Wdollar-in-identifier-extension
+ -Wdouble-promotion
+ -Wduplicate-decl-specifier
+ -Wduplicate-enum
+ -Wduplicate-method-arg
+ -Wduplicate-method-match
+ -Wduplicated-cond
+ -Wdynamic-class-memaccess
+ -Wembedded-directive
+ -Wempty-translation-unit
+ -Wenum-conversion
+ -Wexit-time-destructors
+ -Wexplicit-ownership-type
+ -Wextern-initializer
+ -Wextra
+ -Wextra-semi
+ -Wextra-tokens
+ -Wflexible-array-extensions
+ -Wfloat-conversion
+ -Wformat-non-iso
+ -Wfour-char-constants
+ -Wgcc-compat
+ -Wglobal-constructors
+ -Wgnu-array-member-paren-init
+ -Wgnu-designator
+ -Wgnu-static-float-init
+ -Wheader-guard
+ -Wheader-hygiene
+ -Widiomatic-parentheses
+ -Wignored-attributes
+ -Wimplicit-atomic-properties
+ -Wimplicit-conversion-floating-point-to-bool
+ -Wimplicit-exception-spec-mismatch
+ -Wimplicit-fallthrough
+ -Wimplicit-fallthrough-per-function
+ -Wimplicit-retain-self
+ -Wimport-preprocessor-directive-pedantic
+ -Wincompatible-library-redeclaration
+ -Wincompatible-pointer-types-discards-qualifiers
+ -Wincomplete-implementation
+ -Wincomplete-module
+ -Wincomplete-umbrella
+ -Winit-self
+ -Wint-conversions
+ -Wint-to-void-pointer-cast
+ -Winteger-overflow
+ -Winvalid-constexpr
+ -Winvalid-iboutlet
+ -Winvalid-noreturn
+ -Winvalid-pp-token
+ -Winvalid-source-encoding
+ -Winvalid-token-paste
+ -Wknr-promoted-parameter
+ -Wlanguage-extension-token
+ -Wlarge-by-value-copy
+ -Wliteral-conversion
+ -Wliteral-range
+ -Wlocal-type-template-args
+ -Wlogical-op
+ -Wloop-analysis
+ -Wmain-return-type
+ -Wmalformed-warning-check
+ -Wmethod-signatures
+ -Wmicrosoft
+ -Wmicrosoft-exists
+ -Wmismatched-parameter-types
+ -Wmismatched-return-types
+ -Wmissing-field-initializers
+ -Wmissing-format-attribute
+ -Wmissing-noreturn
+ -Wmissing-selector-name
+ -Wmissing-sysroot
+ -Wmissing-variable-declarations
+ -Wmodule-conflict
+ -Wnested-anon-types
+ -Wnewline-eof
+ -Wnon-literal-null-conversion
+ -Wnon-pod-varargs
+ -Wnonportable-cfstrings
+ -Wnormalized=id
+ -Wnull-arithmetic
+ -Wnull-character
+ -Wnull-conversion
+ -Wnull-dereference
+ -Wout-of-line-declaration
+ -Wover-aligned
+ -Woverlength-strings
+ -Woverride-init
+ -Woverriding-method-mismatch
+ -Wpointer-type-mismatch
+ -Wpredefined-identifier-outside-function
+ -Wprotocol-property-synthesis-ambiguity
+ -Wreadonly-iboutlet-property
+ -Wreadonly-setter-attrs
+ -Wreceiver-expr
+ -Wreceiver-forward-class
+ -Wreceiver-is-weak
+ -Wreinterpret-base-class
+ -Wrequires-super-attribute
+ -Wreserved-user-defined-literal
+ -Wreturn-stack-address
+ -Wsection
+ -Wselector-type-mismatch
+ -Wsentinel
+ -Wserialized-diagnostics
+ -Wshadow
+ -Wshift-count-negative
+ -Wshift-count-overflow
+ -Wshift-negative-value
+ -Wshift-overflow=2
+ -Wshift-sign-overflow
+ -Wshorten-64-to-32
+ -Wsizeof-array-argument
+ -Wsource-uses-openmp
+ -Wstatic-float-init
+ -Wstatic-in-inline
+ -Wstatic-local-in-inline
+ -Wstrict-overflow=1
+ -Wstring-compare
+ -Wstring-conversion
+ -Wstrlcpy-strlcat-size
+ -Wstrncat-size
+ -Wsuggest-attribute=format
+ -Wsuggest-attribute=noreturn
+ -Wsuper-class-method-mismatch
+ -Wswitch-bool
+ -Wsync-nand
+ -Wtautological-constant-out-of-range-compare
+ -Wtentative-definition-incomplete-type
+ -Wtrampolines
+ -Wtype-safety
+ -Wtypedef-redefinition
+ -Wtypename-missing
+ -Wundefined-inline
+ -Wundefined-internal
+ -Wundefined-reinterpret-cast
+ -Wunicode
+ -Wunicode-whitespace
+ -Wunknown-warning-option
+ -Wunnamed-type-template-args
+ -Wunneeded-member-function
+ -Wunsequenced
+ -Wunsupported-visibility
+ -Wunused-but-set-parameter
+ -Wunused-but-set-variable
+ -Wunused-command-line-argument
+ -Wunused-const-variable=2
+ -Wunused-exception-parameter
+ -Wunused-local-typedefs
+ -Wunused-member-function
+ -Wunused-sanitize-argument
+ -Wunused-volatile-lvalue
+ -Wuser-defined-literals
+ -Wvariadic-macros
+ -Wvector-conversion
+ -Wvector-conversions
+ -Wvexing-parse
+ -Wvisibility
+ -Wvla-extension
+ -Wzero-length-array
+ ], [ TOR_CHECK_CFLAGS([warning_flag]) ])
+
+dnl We should re-enable this in some later version. Clang doesn't
+dnl mind, but it causes trouble with GCC.
+dnl -Wstrict-overflow=2
+
+dnl These seem to require annotations that we don't currently use,
+dnl and they give false positives in our pthreads wrappers. (Clang 4)
+dnl -Wthread-safety
+dnl -Wthread-safety-analysis
+dnl -Wthread-safety-attributes
+dnl -Wthread-safety-beta
+dnl -Wthread-safety-precise
+
CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith"
CFLAGS="$CFLAGS -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings"
CFLAGS="$CFLAGS -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat=2"
- CFLAGS="$CFLAGS -Wwrite-strings -Wmissing-declarations -Wredundant-decls"
+ CFLAGS="$CFLAGS -Wwrite-strings"
CFLAGS="$CFLAGS -Wnested-externs -Wbad-function-cast -Wswitch-enum"
-
- if test "x$enable_gcc_warnings" = "xyes"; then
- CFLAGS="$CFLAGS -Werror"
+ CFLAGS="$CFLAGS -Waggregate-return -Wpacked -Wunused"
+ CFLAGS="$CFLAGS -Wunused-parameter "
+ # These interfere with building main() { return 0; }, which autoconf
+ # likes to use as its default program.
+ CFLAGS="$CFLAGS -Wold-style-definition -Wmissing-declarations"
+
+ if test "$tor_cv_cflags__Wnull_dereference" = "yes"; then
+ AC_DEFINE([HAVE_CFLAG_WNULL_DEREFERENCE], 1, [True if we have -Wnull-dereference])
fi
-
- # Disabled, so we can use mallinfo(): -Waggregate-return
-
- 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 -Wold-style-definition"
+ if test "$tor_cv_cflags__Woverlength_strings" = "yes"; then
+ AC_DEFINE([HAVE_CFLAG_WOVERLENGTH_STRINGS], 1, [True if we have -Woverlength-strings])
fi
- if test "x$have_gcc42" = "xyes"; then
- # These warnings break gcc 4.0.2 and work on gcc 4.2
- # XXXX020 See if any of these work with earlier versions.
- CFLAGS="$CFLAGS -Waddress -Wmissing-noreturn -Wstrict-overflow=1"
-
- # We used to use -Wstrict-overflow=5, but that breaks us heavily under 4.3.
- fi
-
- if test "x$have_gcc42" = "xyes" && test "x$have_clang" = "xno"; then
- # These warnings break gcc 4.0.2 and clang, but work on gcc 4.2
- CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init"
- fi
-
- if test "x$have_gcc43" = "xyes"; then
- # These warnings break gcc 4.2 and work on gcc 4.3
- # XXXX020 See if any of these work with earlier versions.
- CFLAGS="$CFLAGS -Wextra -Warray-bounds"
- fi
-
- if test "x$have_gcc46" = "xyes"; then
- # This warning was added in gcc 4.3, but it appears to generate
- # spurious warnings in gcc 4.4. I don't know if it works in 4.5.
- CFLAGS="$CFLAGS -Wlogical-op"
- fi
-
- if test "x$have_shorten64_flag" = "xyes"; then
- CFLAGS="$CFLAGS -Wshorten-64-to-32"
+ 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"
fi
if test "$enable_coverage" = "yes" && test "$have_clang" = "no"; then
case "$host_os" in
darwin*)
- AC_MSG_WARN([Tried to enable coverage on OSX without using the clang compiler. This might not work! If coverage fails, use CC=clang when configuring with --enable-profiling.])
+ AC_MSG_WARN([Tried to enable coverage on OSX without using the clang compiler. This might not work! If coverage fails, use CC=clang when configuring with --enable-coverage.])
esac
fi