Merge branch 'master' of https://git.torproject.org/tor into bug13111-empty-key-files...
[tor.git] / configure.ac
blob2c92a6c4091d1bd8e820780527ab81101e62b5b0
1 dnl Copyright (c) 2001-2004, Roger Dingledine
2 dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
3 dnl Copyright (c) 2007-2015, The Tor Project, Inc.
4 dnl See LICENSE for licensing information
6 AC_INIT([tor],[0.2.6.2-alpha-dev])
7 AC_CONFIG_SRCDIR([src/or/main.c])
8 AC_CONFIG_MACRO_DIR([m4])
9 AM_INIT_AUTOMAKE
10 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
11 AC_CONFIG_HEADERS([orconfig.h])
13 AC_CANONICAL_HOST
15 PKG_PROG_PKG_CONFIG
17 if test -f /etc/redhat-release ; then
18   if test -f /usr/kerberos/include ; then
19     CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
20   fi
23 # Not a no-op; we want to make sure that CPPFLAGS is set before we use
24 # the += operator on it in src/or/Makefile.am
25 CPPFLAGS="$CPPFLAGS -I\${top_srcdir}/src/common"
27 #XXXX020 We should make these enabled or not, before 0.2.0.x-final
28 AC_ARG_ENABLE(buf-freelists,
29    AS_HELP_STRING(--enable-buf-freelists, enable freelists for buffer RAM))
30 AC_ARG_ENABLE(mempools,
31    AS_HELP_STRING(--enable-mempools, enable mempools for relay cells))
32 AC_ARG_ENABLE(openbsd-malloc,
33    AS_HELP_STRING(--enable-openbsd-malloc, Use malloc code from openbsd.  Linux only))
34 AC_ARG_ENABLE(instrument-downloads,
35    AS_HELP_STRING(--enable-instrument-downloads, Instrument downloads of directory resources etc.))
36 AC_ARG_ENABLE(static-openssl,
37    AS_HELP_STRING(--enable-static-openssl, Link against a static openssl library. Requires --with-openssl-dir))
38 AC_ARG_ENABLE(static-libevent,
39    AS_HELP_STRING(--enable-static-libevent, Link against a static libevent library. Requires --with-libevent-dir))
40 AC_ARG_ENABLE(static-zlib,
41    AS_HELP_STRING(--enable-static-zlib, Link against a static zlib library. Requires --with-zlib-dir))
42 AC_ARG_ENABLE(static-tor,
43    AS_HELP_STRING(--enable-static-tor, Create an entirely static Tor binary. Requires --with-openssl-dir and --with-libevent-dir and --with-zlib-dir))
44 AC_ARG_ENABLE(unittests,
45    AS_HELP_STRING(--disable-unittests, [Don't build unit tests for Tor. Risky!]))
46 AC_ARG_ENABLE(coverage,
47    AS_HELP_STRING(--enable-coverage, [Enable coverage support in the unit-test build]))
49 AM_CONDITIONAL(UNITTESTS_ENABLED, test x$enable_unittests != xno)
50 AM_CONDITIONAL(COVERAGE_ENABLED, test x$enable_coverage = xyes)
52 if test "$enable_static_tor" = "yes"; then
53   enable_static_libevent="yes";
54   enable_static_openssl="yes";
55   enable_static_zlib="yes";
56   CFLAGS="$CFLAGS -static"
59 if test x$enable_buf_freelists = xyes; then
60   AC_DEFINE(ENABLE_BUF_FREELISTS, 1,
61             [Defined if we try to use freelists for buffer RAM chunks])
64 AM_CONDITIONAL(USE_MEMPOOLS, test x$enable_mempools = xyes)
65 if test x$enable_mempools = xyes; then
66   AC_DEFINE(ENABLE_MEMPOOLS, 1,
67             [Defined if we try to use mempools for cells being relayed])
70 AM_CONDITIONAL(USE_OPENBSD_MALLOC, test x$enable_openbsd_malloc = xyes)
71 if test x$enable_instrument_downloads = xyes; then
72   AC_DEFINE(INSTRUMENT_DOWNLOADS, 1,
73             [Defined if we want to keep track of how much of each kind of resource we download.])
76 AC_ARG_ENABLE(transparent,
77      AS_HELP_STRING(--disable-transparent, disable transparent proxy support),
78      [case "${enableval}" in
79         yes) transparent=true ;;
80         no)  transparent=false ;;
81         *) AC_MSG_ERROR(bad value for --enable-transparent) ;;
82       esac], [transparent=true])
84 AC_ARG_ENABLE(asciidoc,
85      AS_HELP_STRING(--disable-asciidoc, don't use asciidoc (disables building of manpages)),
86      [case "${enableval}" in
87         yes) asciidoc=true ;;
88         no)  asciidoc=false ;;
89         *) AC_MSG_ERROR(bad value for --disable-asciidoc) ;;
90       esac], [asciidoc=true])
92 # By default, we're not ready to ship a NAT-PMP aware Tor
93 AC_ARG_ENABLE(nat-pmp,
94      AS_HELP_STRING(--enable-nat-pmp, enable NAT-PMP support),
95      [case "${enableval}" in
96         yes) natpmp=true ;;
97         no)  natpmp=false ;;
98         * ) AC_MSG_ERROR(bad value for --enable-nat-pmp) ;;
99       esac], [natpmp=false])
101 # By default, we're not ready to ship a UPnP aware Tor
102 AC_ARG_ENABLE(upnp,
103      AS_HELP_STRING(--enable-upnp, enable UPnP support),
104      [case "${enableval}" in
105         yes) upnp=true ;;
106         no)  upnp=false ;;
107         * ) AC_MSG_ERROR(bad value for --enable-upnp) ;;
108       esac], [upnp=false])
110 # systemd notify support
111 AC_ARG_ENABLE(systemd,
112       AS_HELP_STRING(--enable-systemd, enable systemd notification support),
113       [case "${enableval}" in
114         yes) systemd=true ;;
115         no)  systemd=false ;;
116         * ) AC_MSG_ERROR(bad value for --enable-systemd) ;;
117       esac], [systemd=auto])
121 # systemd support
122 if test x$enable_systemd = xfalse ; then
123     have_systemd=no;
124 else
125     PKG_CHECK_MODULES(SYSTEMD,
126         [libsystemd-daemon],
127         have_systemd=yes,
128         have_systemd=no)
131 if test x$have_systemd = xyes; then
132     AC_DEFINE(HAVE_SYSTEMD,1,[Have systemd])
133     CFLAGS="${CFLAGS} ${SYSTEMD_CFLAGS}"
134     TOR_SYSTEMD_LIBS="${SYSTEMD_LIBS}"
136 AC_SUBST(TOR_SYSTEMD_LIBS)
138 if test x$enable_systemd = xyes -a x$have_systemd != xyes ; then
139     AC_MSG_ERROR([Explicitly requested systemd support, but systemd not found])
142 AC_ARG_ENABLE(threads,
143      AS_HELP_STRING(--disable-threads, disable multi-threading support))
145 if test x$enable_threads = x; then
146    case $host in
147     *-*-solaris* )
148      # Don't try multithreading on solaris -- cpuworkers seem to lock.
149      AC_MSG_NOTICE([You are running Solaris; Sometimes threading makes
150 cpu workers lock up here, so I will disable threads.])
151      enable_threads="no";;
152     *)
153      enable_threads="yes";;
154    esac
157 ifdef([HAVE_SYSTEMD], [
158 AC_SEARCH_LIBS([sd_watchdog_enabled], [systemd-daemon],
159     [AC_DEFINE(HAVE_SYSTEMD_209,1,[Have systemd v209 or more])], [])
162 case $host in
163    *-*-solaris* )
164      AC_DEFINE(_REENTRANT, 1, [Define on some platforms to activate x_r() functions in time.h])
165      ;;
166 esac
168 AC_ARG_ENABLE(gcc-warnings,
169      AS_HELP_STRING(--enable-gcc-warnings, enable verbose warnings))
170 AC_ARG_ENABLE(gcc-warnings-advisory,
171      AS_HELP_STRING(--enable-gcc-warnings-advisory, [enable verbose warnings, excluding -Werror]))
173 dnl Others suggest '/gs /safeseh /nxcompat /dynamicbase' for non-gcc on Windows
174 AC_ARG_ENABLE(gcc-hardening,
175     AS_HELP_STRING(--disable-gcc-hardening, disable compiler security checks))
177 AC_ARG_ENABLE(expensive-hardening,
178     AS_HELP_STRING(--enable-expensive-hardening, enable more expensive compiler hardening; makes Tor slower))
180 dnl Linker hardening options
181 dnl Currently these options are ELF specific - you can't use this with MacOSX
182 AC_ARG_ENABLE(linker-hardening,
183     AS_HELP_STRING(--disable-linker-hardening, disable linker security fixups))
185 AC_ARG_ENABLE(local-appdata,
186    AS_HELP_STRING(--enable-local-appdata, default to host local application data paths on Windows))
187 if test "$enable_local_appdata" = "yes"; then
188   AC_DEFINE(ENABLE_LOCAL_APPDATA, 1,
189             [Defined if we default to host local appdata paths on Windows])
192 # Tor2web mode flag
193 AC_ARG_ENABLE(tor2web-mode,
194      AS_HELP_STRING(--enable-tor2web-mode, support tor2web non-anonymous mode),
195 [if test x$enableval = xyes; then
196     CFLAGS="$CFLAGS -D ENABLE_TOR2WEB_MODE=1"
197 fi])
199 AC_ARG_ENABLE(bufferevents,
200      AS_HELP_STRING(--enable-bufferevents, use Libevent's buffered IO.))
202 AC_ARG_ENABLE(tool-name-check,
203      AS_HELP_STRING(--disable-tool-name-check, check for sanely named toolchain when cross-compiling))
205 AC_ARG_ENABLE(seccomp,
206      AS_HELP_STRING(--disable-seccomp, do not attempt to use libseccomp))
208 AC_ARG_ENABLE(libscrypt,
209      AS_HELP_STRING(--disable-libscrypt, do not attempt to use libscrypt))
211 dnl check for the correct "ar" when cross-compiling
212 AN_MAKEVAR([AR], [AC_PROG_AR])
213 AN_PROGRAM([ar], [AC_PROG_AR])
214 AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL([AR], [ar], [ar])])
215 AC_PROG_AR
217 dnl Check whether the above macro has settled for a simply named tool even
218 dnl though we're cross compiling. We must do this before running AC_PROG_CC,
219 dnl because that will find any cc on the system, not only the cross-compiler,
220 dnl and then verify that a binary built with this compiler runs on the
221 dnl build system. It will then come to the false conclusion that we're not
222 dnl cross-compiling.
223 if test x$enable_tool_name_check != xno; then
224     if test x$ac_tool_warned = xyes; then
225         AC_MSG_ERROR([We are cross compiling but could not find a properly named toolchain. Do you have your cross-compiling toolchain in PATH? (You can --disable-tool-name-check to ignore this.)])
226         elif test "x$ac_ct_AR" != x -a x$cross_compiling = xmaybe; then
227                 AC_MSG_ERROR([We think we are cross compiling but could not find a properly named toolchain. Do you have your cross-compiling toolchain in PATH? (You can --disable-tool-name-check to ignore this.)])
228         fi
231 AC_PROG_CC
232 AC_PROG_CPP
233 AC_PROG_MAKE_SET
234 AC_PROG_RANLIB
236 dnl autoconf 2.59 appears not to support AC_PROG_SED
237 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
239 dnl check for asciidoc and a2x
240 AC_PATH_PROG([ASCIIDOC], [asciidoc], none)
241 AC_PATH_PROGS([A2X], [a2x a2x.py], none)
243 AM_CONDITIONAL(USE_ASCIIDOC, test x$asciidoc = xtrue)
245 AM_CONDITIONAL(USE_FW_HELPER, test x$natpmp = xtrue || test x$upnp = xtrue)
246 AM_CONDITIONAL(NAT_PMP, test x$natpmp = xtrue)
247 AM_CONDITIONAL(MINIUPNPC, test x$upnp = xtrue)
248 AM_PROG_CC_C_O
249 AC_PROG_CC_C99
251 AC_ARG_VAR(PYTHON)
252 AC_CHECK_PROGS(PYTHON, [python python2 python2.7 python3 python3.3])
253 if test "x$PYTHON" = "x"; then
254   AC_MSG_WARN([Python unavailable; some tests will not be run.])
256 AM_CONDITIONAL(USEPYTHON, [test "x$PYTHON" != "x"])
258 ifdef([AC_C_FLEXIBLE_ARRAY_MEMBER], [
259 AC_C_FLEXIBLE_ARRAY_MEMBER
260 ], [
261  dnl Maybe we've got an old autoconf...
262  AC_CACHE_CHECK([for flexible array members],
263      tor_cv_c_flexarray,
264      [AC_COMPILE_IFELSE(
265        AC_LANG_PROGRAM([
266  struct abc { int a; char b[]; };
267 ], [
268  struct abc *def = malloc(sizeof(struct abc)+sizeof(char));
269  def->b[0] = 33;
271   [tor_cv_c_flexarray=yes],
272   [tor_cv_c_flexarray=no])])
273  if test $tor_cv_flexarray = yes ; then
274    AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not.])
275  else
276    AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1], [Define to nothing if C supports flexible array members, and to 1 if it does not.])
277  fi
280 AC_CACHE_CHECK([for working C99 mid-block declaration syntax],
281       tor_cv_c_c99_decl,
282       [AC_COMPILE_IFELSE(
283          [AC_LANG_PROGRAM([], [int x; x = 3; int y; y = 4 + x;])],
284          [tor_cv_c_c99_decl=yes],
285          [tor_cv_c_c99_decl=no] )])
286 if test "$tor_cv_c_c99_decl" != "yes"; then
287   AC_MSG_ERROR([Your compiler doesn't support c99 mid-block declarations. This is required as of Tor 0.2.6.x])
290 AC_CACHE_CHECK([for working C99 designated initializers],
291       tor_cv_c_c99_designated_init,
292       [AC_COMPILE_IFELSE(
293          [AC_LANG_PROGRAM([struct s { int a; int b; };],
294                [[ struct s ss = { .b = 5, .a = 6 }; ]])],
295          [tor_cv_c_c99_designated_init=yes],
296          [tor_cv_c_c99_designated_init=no] )])
298 if test "$tor_cv_c_c99_designated_init" != "yes"; then
299   AC_MSG_ERROR([Your compiler doesn't support c99 designated initializers. This is required as of Tor 0.2.6.x])
302 AC_PATH_PROG([SHA1SUM], [sha1sum], none)
303 AC_PATH_PROG([OPENSSL], [openssl], none)
305 TORUSER=_tor
306 AC_ARG_WITH(tor-user,
307         [  --with-tor-user=NAME    Specify username for tor daemon ],
308         [
309            TORUSER=$withval
310         ]
312 AC_SUBST(TORUSER)
314 TORGROUP=_tor
315 AC_ARG_WITH(tor-group,
316         [  --with-tor-group=NAME   Specify group name for tor daemon ],
317         [
318            TORGROUP=$withval
319         ]
321 AC_SUBST(TORGROUP)
324 dnl If _WIN32 is defined and non-zero, we are building for win32
325 AC_MSG_CHECKING([for win32])
326 AC_RUN_IFELSE([AC_LANG_SOURCE([
327 int main(int c, char **v) {
328 #ifdef _WIN32
329 #if _WIN32
330   return 0;
331 #else
332   return 1;
333 #endif
334 #else
335   return 2;
336 #endif
337 }])],
338 bwin32=true; AC_MSG_RESULT([yes]),
339 bwin32=false; AC_MSG_RESULT([no]),
340 bwin32=cross; AC_MSG_RESULT([cross])
343 if test "$bwin32" = cross; then
344 AC_MSG_CHECKING([for win32 (cross)])
345 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
346 #ifdef _WIN32
347 int main(int c, char **v) {return 0;}
348 #else
349 #error
350 int main(int c, char **v) {return x(y);}
351 #endif
352 ])],
353 bwin32=true; AC_MSG_RESULT([yes]),
354 bwin32=false; AC_MSG_RESULT([no]))
357 AM_CONDITIONAL(BUILD_NT_SERVICES, test x$bwin32 = xtrue)
359 dnl Enable C99 when compiling with MIPSpro
360 AC_MSG_CHECKING([for MIPSpro compiler])
361 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [
362 #if (defined(__sgi) && defined(_COMPILER_VERSION))
363 #error
364   return x(y);
365 #endif
366 ])],
367 bmipspro=false; AC_MSG_RESULT(no),
368 bmipspro=true; AC_MSG_RESULT(yes))
370 if test "$bmipspro" = true; then
371   CFLAGS="$CFLAGS -c99"
374 AC_C_BIGENDIAN
376 AC_SEARCH_LIBS(socket, [socket network])
377 AC_SEARCH_LIBS(gethostbyname, [nsl])
378 AC_SEARCH_LIBS(dlopen, [dl])
379 AC_SEARCH_LIBS(inet_aton, [resolv])
380 saved_LIBS="$LIBS"
381 AC_SEARCH_LIBS([clock_gettime], [rt])
382 if test "$LIBS" != "$saved_LIBS"; then
383    # Looks like we need -lrt for clock_gettime().
384    have_rt=yes
387 AC_SEARCH_LIBS(pthread_create, [pthread])
388 AC_SEARCH_LIBS(pthread_detach, [pthread])
390 dnl -------------------------------------------------------------------
391 dnl Check for functions before libevent, since libevent-1.2 apparently
392 dnl exports strlcpy without defining it in a header.
394 AC_CHECK_FUNCS(
395         _NSGetEnviron \
396         accept4 \
397         backtrace \
398         backtrace_symbols_fd \
399         clock_gettime \
400         flock \
401         ftime \
402         getaddrinfo \
403         getifaddrs \
404         getrlimit \
405         gettimeofday \
406         gmtime_r \
407         inet_aton \
408         ioctl \
409         issetugid \
410         llround \
411         localtime_r \
412         lround \
413         memmem \
414         prctl \
415         rint \
416         sigaction \
417         socketpair \
418         strlcat \
419         strlcpy \
420         strnlen \
421         strptime \
422         strtok_r \
423         strtoull \
424         sysconf \
425         sysctl \
426         uname \
427         usleep \
428         vasprintf \
429         _vscprintf
432 if test "$bwin32" != true; then
433   AC_CHECK_HEADERS(pthread.h)
434   AC_CHECK_FUNCS(pthread_create)
437 dnl ------------------------------------------------------
438 dnl Where do you live, libevent?  And how do we call you?
440 if test "$bwin32" = true; then
441   TOR_LIB_WS32=-lws2_32
442   TOR_LIB_IPHLPAPI=-liphlpapi
443   # Some of the cargo-cults recommend -lwsock32 as well, but I don't
444   # think it's actually necessary.
445   TOR_LIB_GDI=-lgdi32
446 else
447   TOR_LIB_WS32=
448   TOR_LIB_GDI=
450 AC_SUBST(TOR_LIB_WS32)
451 AC_SUBST(TOR_LIB_GDI)
452 AC_SUBST(TOR_LIB_IPHLPAPI)
454 dnl We need to do this before we try our disgusting hack below.
455 AC_CHECK_HEADERS([sys/types.h])
457 dnl This is a disgusting hack so we safely include older libevent headers.
458 AC_CHECK_TYPE(u_int64_t, unsigned long long)
459 AC_CHECK_TYPE(u_int32_t, unsigned long)
460 AC_CHECK_TYPE(u_int16_t, unsigned short)
461 AC_CHECK_TYPE(u_int8_t, unsigned char)
463 tor_libevent_pkg_redhat="libevent"
464 tor_libevent_pkg_debian="libevent-dev"
465 tor_libevent_devpkg_redhat="libevent-devel"
466 tor_libevent_devpkg_debian="libevent-dev"
468 dnl On Gnu/Linux or any place we require it, we'll add librt to the Libevent
469 dnl linking for static builds.
470 STATIC_LIBEVENT_FLAGS=""
471 if test "$enable_static_libevent" = "yes"; then
472     if test "$have_rt" = yes; then
473       STATIC_LIBEVENT_FLAGS=" -lrt "
474     fi
477 TOR_SEARCH_LIBRARY(libevent, $trylibeventdir, [-levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32], [
478 #ifdef _WIN32
479 #include <winsock2.h>
480 #endif
481 #include <stdlib.h>
482 #include <sys/time.h>
483 #include <sys/types.h>
484 #include <event.h>], [
485 #ifdef _WIN32
486 #include <winsock2.h>
487 #endif
488 void exit(int); void *event_init(void);],
489     [
490 #ifdef _WIN32
491 {WSADATA d; WSAStartup(0x101,&d); }
492 #endif
493 event_init(); exit(0);
494 ], [--with-libevent-dir], [/opt/libevent])
496 dnl Now check for particular libevent functions.
497 save_LIBS="$LIBS"
498 save_LDFLAGS="$LDFLAGS"
499 save_CPPFLAGS="$CPPFLAGS"
500 LIBS="-levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $LIBS"
501 LDFLAGS="$TOR_LDFLAGS_libevent $LDFLAGS"
502 CPPFLAGS="$TOR_CPPFLAGS_libevent $CPPFLAGS"
503 AC_CHECK_FUNCS([event_get_version \
504                 event_get_version_number \
505                 event_get_method \
506                 event_set_log_callback \
507                 evutil_secure_rng_set_urandom_device_file \
508                 evutil_secure_rng_init \
509                 event_base_loopexit])
510 AC_CHECK_MEMBERS([struct event.min_heap_idx], , ,
511 [#include <event.h>
514 AC_CHECK_HEADERS(event2/event.h event2/dns.h event2/bufferevent_ssl.h)
516 LIBS="$save_LIBS"
517 LDFLAGS="$save_LDFLAGS"
518 CPPFLAGS="$save_CPPFLAGS"
521 AM_CONDITIONAL(USE_EXTERNAL_EVDNS, test x$ac_cv_header_event2_dns_h = xyes)
523 if test "$enable_static_libevent" = "yes"; then
524    if test "$tor_cv_library_libevent_dir" = "(system)"; then
525      AC_MSG_ERROR("You must specify an explicit --with-libevent-dir=x option when using --enable-static-libevent")
526    else
527      TOR_LIBEVENT_LIBS="$TOR_LIBDIR_libevent/libevent.a $STATIC_LIBEVENT_FLAGS"
528    fi
529 else
530      TOR_LIBEVENT_LIBS="-levent"
533 dnl This isn't the best test for Libevent 2.0.3-alpha.  Once it's released,
534 dnl we can do much better.
535 if test "$enable_bufferevents" = "yes" ; then
536   if test "$ac_cv_header_event2_bufferevent_ssl_h" != "yes" ; then
537     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.])
538   else
540     CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent"
542     # Check for the right version.  First see if version detection works.
543     AC_MSG_CHECKING([whether we can detect the Libevent version])
544     AC_COMPILE_IFELSE([AC_LANG_SOURCE([
545 #include <event2/event.h>
546 #if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 10
547 #error
548 int x = y(zz);
549 #else
550 int x = 1;
551 #endif
552   ])], [event_version_number_works=yes; AC_MSG_RESULT([yes]) ],
553      [event_version_number_works=no;  AC_MSG_RESULT([no])])
554     if test "$event_version_number_works" != 'yes'; then
555       AC_MSG_WARN([Version detection on Libevent seems broken.  Your Libevent installation is probably screwed up or very old.])
556     else
557       AC_MSG_CHECKING([whether Libevent is new enough for bufferevents])
558       AC_COMPILE_IFELSE([AC_LANG_SOURCE([
559 #include <event2/event.h>
560 #if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 0x02000d00
561 #error
562 int x = y(zz);
563 #else
564 int x = 1;
565 #endif
566    ])], [ AC_MSG_RESULT([yes]) ],
567       [ AC_MSG_RESULT([no])
568         AC_MSG_ERROR([Libevent does not seem new enough to support bufferevents.  We require 2.0.13-stable or later]) ] )
569     fi
570   fi
573 LIBS="$save_LIBS"
574 LDFLAGS="$save_LDFLAGS"
575 CPPFLAGS="$save_CPPFLAGS"
577 AM_CONDITIONAL(USE_BUFFEREVENTS, test "$enable_bufferevents" = "yes")
578 if test "$enable_bufferevents" = "yes"; then
579   AC_DEFINE(USE_BUFFEREVENTS, 1, [Defined if we're going to use Libevent's buffered IO API])
580   if test "$enable_static_libevent" = "yes"; then
581     TOR_LIBEVENT_LIBS="$TOR_LIBDIR_libevent/libevent_openssl.a $TOR_LIBEVENT_LIBS"
582   else
583     TOR_LIBEVENT_LIBS="-levent_openssl $TOR_LIBEVENT_LIBS"
584   fi
586 AC_SUBST(TOR_LIBEVENT_LIBS)
588 dnl ------------------------------------------------------
589 dnl Where do you live, libm?
591 dnl On some platforms (Haiku/BeOS) the math library is
592 dnl part of libroot. In which case don't link against lm
593 TOR_LIB_MATH=""
594 save_LIBS="$LIBS"
595 AC_SEARCH_LIBS(pow, [m], , AC_MSG_ERROR([Could not find pow in libm or libc.]))
596 if test "$ac_cv_search_pow" != "none required"; then
597     TOR_LIB_MATH="$ac_cv_search_pow"
599 LIBS="$save_LIBS"
600 AC_SUBST(TOR_LIB_MATH)
602 dnl ------------------------------------------------------
603 dnl Where do you live, openssl?  And how do we call you?
605 tor_openssl_pkg_redhat="openssl"
606 tor_openssl_pkg_debian="libssl-dev"
607 tor_openssl_devpkg_redhat="openssl-devel"
608 tor_openssl_devpkg_debian="libssl-dev"
610 ALT_openssl_WITHVAL=""
611 AC_ARG_WITH(ssl-dir,
612   [  --with-ssl-dir=PATH    Obsolete alias for --with-openssl-dir ],
613   [
614       if test "x$withval" != xno && test "x$withval" != "x" ; then
615          ALT_openssl_WITHVAL="$withval"
616       fi
617   ])
619 TOR_SEARCH_LIBRARY(openssl, $tryssldir, [-lssl -lcrypto $TOR_LIB_GDI],
620     [#include <openssl/rand.h>],
621     [void RAND_add(const void *buf, int num, double entropy);],
622     [RAND_add((void*)0,0,0); exit(0);], [],
623     [/usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/athena /opt/openssl])
625 dnl XXXX check for OPENSSL_VERSION_NUMBER == SSLeay()
627 if test "$enable_static_openssl" = "yes"; then
628    if test "$tor_cv_library_openssl_dir" = "(system)"; then
629      AC_MSG_ERROR("You must specify an explicit --with-openssl-dir=x option when using --enable-static-openssl")
630    else
631      TOR_OPENSSL_LIBS="$TOR_LIBDIR_openssl/libssl.a $TOR_LIBDIR_openssl/libcrypto.a"
632    fi
633 else
634      TOR_OPENSSL_LIBS="-lssl -lcrypto"
636 AC_SUBST(TOR_OPENSSL_LIBS)
638 AC_CHECK_MEMBERS([struct ssl_method_st.get_cipher_by_char], , ,
639 [#include <openssl/ssl.h>
642 dnl ------------------------------------------------------
643 dnl Where do you live, zlib?  And how do we call you?
645 tor_zlib_pkg_redhat="zlib"
646 tor_zlib_pkg_debian="zlib1g"
647 tor_zlib_devpkg_redhat="zlib-devel"
648 tor_zlib_devpkg_debian="zlib1g-dev"
650 TOR_SEARCH_LIBRARY(zlib, $tryzlibdir, [-lz],
651     [#include <zlib.h>],
652     [const char * zlibVersion(void);],
653     [zlibVersion(); exit(0);], [--with-zlib-dir],
654     [/opt/zlib])
656 if test "$enable_static_zlib" = "yes"; then
657    if test "$tor_cv_library_zlib_dir" = "(system)"; then
658      AC_MSG_ERROR("You must specify an explicit --with-zlib-dir=x option when
659  using --enable-static-zlib")
660    else
661      TOR_ZLIB_LIBS="$TOR_LIBDIR_zlib/libz.a"
662    fi
663 else
664      TOR_ZLIB_LIBS="-lz"
666 AC_SUBST(TOR_ZLIB_LIBS)
668 dnl ---------------------------------------------------------------------
669 dnl Now that we know about our major libraries, we can check for compiler
670 dnl and linker hardening options.  We need to do this with the libraries known,
671 dnl since sometimes the linker will like an option but not be willing to
672 dnl use it with a build of a library.
674 all_ldflags_for_check="$TOR_LDFLAGS_zlib $TOR_LDFLAGS_openssl $TOR_LDFLAGS_libevent"
675 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"
677 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
678 #if !defined(__clang__)
679 #error
680 #endif])], have_clang=yes, have_clang=no)
682 if test x$enable_gcc_hardening != xno; then
683     CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
684     if test x$have_clang = xyes; then
685         TOR_CHECK_CFLAGS(-Qunused-arguments)
686     fi
687     TOR_CHECK_CFLAGS(-fstack-protector-all, also_link)
688     AS_VAR_PUSHDEF([can_compile], [tor_cv_cflags_-fstack-protector-all])
689     AS_VAR_PUSHDEF([can_link], [tor_can_link_-fstack-protector-all])
690 m4_ifdef([AS_VAR_IF],[
691     AS_VAR_IF(can_compile, [yes],
692         AS_VAR_IF(can_link, [yes],
693                   [],
694                   AC_MSG_ERROR([We tried to build with stack protection; it looks like your compiler supports it but your libc does not provide it. Are you missing libssp? (You can --disable-gcc-hardening to ignore this error.)]))
695         )])
696     AS_VAR_POPDEF([can_link])
697     AS_VAR_POPDEF([can_compile])
698     TOR_CHECK_CFLAGS(-Wstack-protector)
699     TOR_CHECK_CFLAGS(-fwrapv)
700     TOR_CHECK_CFLAGS(--param ssp-buffer-size=1)
701     if test "$bwin32" = "false"; then
702        TOR_CHECK_CFLAGS(-fPIE)
703        TOR_CHECK_LDFLAGS(-pie, "$all_ldflags_for_check", "$all_libs_for_check")
704     fi
707 if test x$enable_expensive_hardening = xyes ; then
708    TOR_CHECK_CFLAGS([-fsanitize=address])
709    TOR_CHECK_CFLAGS([-fsanitize=undefined])
710    TOR_CHECK_CFLAGS([-fno-omit-frame-pointer])
713 if test x$enable_linker_hardening != xno; then
714     TOR_CHECK_LDFLAGS(-z relro -z now, "$all_ldflags_for_check", "$all_libs_for_check")
717 # For backtrace support
718 TOR_CHECK_LDFLAGS(-rdynamic)
720 dnl ------------------------------------------------------
721 dnl Now see if we have a -fomit-frame-pointer compiler option.
723 saved_CFLAGS="$CFLAGS"
724 TOR_CHECK_CFLAGS(-fomit-frame-pointer)
725 F_OMIT_FRAME_POINTER=''
726 if test "$saved_CFLAGS" != "$CFLAGS"; then
727   if test x$enable_expensive_hardening != xyes ; then
728     F_OMIT_FRAME_POINTER='-fomit-frame-pointer'
729   fi
731 CFLAGS="$saved_CFLAGS"
732 AC_SUBST(F_OMIT_FRAME_POINTER)
734 dnl ------------------------------------------------------
735 dnl If we are adding -fomit-frame-pointer (or if the compiler's doing it
736 dnl for us, as GCC 4.6 and later do at many optimization levels), then
737 dnl we should try to add -fasynchronous-unwind-tables so that our backtrace
738 dnl code will work.
739 TOR_CHECK_CFLAGS(-fasynchronous-unwind-tables)
741 dnl ------------------------------------------------------
742 dnl Where do you live, libnatpmp?  And how do we call you?
743 dnl There are no packages for Debian or Redhat as of this patch
745 if test "$natpmp" = "true"; then
746     AC_DEFINE(NAT_PMP, 1, [Define to 1 if we are building with nat-pmp.])
747     TOR_SEARCH_LIBRARY(libnatpmp, $trylibnatpmpdir, [-lnatpmp $TOR_LIB_WS32 $TOR_LIB_IPHLPAPI],
748         [#include <natpmp.h>],
749         [#ifdef _WIN32
750          #define STATICLIB
751          #endif
752          #include <natpmp.h>],
753         [   int r;
754             natpmp_t natpmp;
755             natpmpresp_t response;
756             r = initnatpmp(&natpmp, 0, 0);],
757             [printf("initnatpmp() returned %d (%s)\n", r, r?"FAILED":"SUCCESS");
758             exit(0);],
759         [--with-libnatpmp-dir],
760         [/usr/lib/])
764 dnl ------------------------------------------------------
765 dnl Where do you live, libminiupnpc?  And how do we call you?
766 dnl There are no packages for Debian or Redhat as of this patch
768 if test "$upnp" = "true"; then
769     AC_DEFINE(MINIUPNPC, 1, [Define to 1 if we are building with UPnP.])
771     dnl Before we call TOR_SEARCH_LIBRARY we'll do a quick compile test
772     dnl to see if we have miniupnpc-1.5 or -1.6
773     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <miniupnpc/miniupnpc.h>],
774         [upnpDiscover(1, 0, 0, 0);exit(0);])],[miniupnpc15="true"],[miniupnpc15="false"])
776     if test "$miniupnpc15" = "true" ; then
777         AC_DEFINE([MINIUPNPC15],[1],[libminiupnpc version 1.5 found])
778         TOR_SEARCH_LIBRARY(libminiupnpc, $trylibminiupnpcdir, [-lminiupnpc $TOR_LIB_WS32 $TOR_LIB_IPHLPAPI],
779             [#include <miniupnpc/miniwget.h>
780              #include <miniupnpc/miniupnpc.h>
781              #include <miniupnpc/upnpcommands.h>],
782             [void upnpDiscover(int delay, const char * multicastif,
783              const char * minissdpdsock, int sameport);],
784             [upnpDiscover(1, 0, 0, 0); exit(0);],
785             [--with-libminiupnpc-dir],
786             [/usr/lib/])
787     else
788         TOR_SEARCH_LIBRARY(libminiupnpc, $trylibminiupnpcdir, [-lminiupnpc $TOR_LIB_WS32 $TOR_LIB_IPHLPAPI],
789             [#include <miniupnpc/miniwget.h>
790              #include <miniupnpc/miniupnpc.h>
791              #include <miniupnpc/upnpcommands.h>],
792             [void upnpDiscover(int delay, const char * multicastif,
793              const char * minissdpdsock, int sameport, int ipv6, int * error);],
794             [upnpDiscover(1, 0, 0, 0, 0, 0); exit(0);],
795             [--with-libminiupnpc-dir],
796             [/usr/lib/])
797     fi
800 dnl ============================================================
801 dnl Check for libseccomp
803 if test "x$enable_seccomp" != "xno"; then
804   AC_CHECK_HEADERS([seccomp.h])
805   AC_SEARCH_LIBS(seccomp_init, [seccomp])
808 dnl ============================================================
809 dnl Check for libscrypt
811 if test "x$enable_libscrypt" != "xno"; then
812   AC_CHECK_HEADERS([libscrypt.h])
813   AC_SEARCH_LIBS(libscrypt_scrypt, [scrypt])
816 dnl ============================================================
817 dnl We need an implementation of curve25519.
819 dnl set these defaults.
820 build_curve25519_donna=no
821 build_curve25519_donna_c64=no
822 use_curve25519_donna=no
823 use_curve25519_nacl=no
824 CURVE25519_LIBS=
826 dnl The best choice is using curve25519-donna-c64, but that requires
827 dnl that we
828 AC_CACHE_CHECK([whether we can use curve25519-donna-c64],
829   tor_cv_can_use_curve25519_donna_c64,
830   [AC_RUN_IFELSE(
831     [AC_LANG_PROGRAM([dnl
832       #include <stdint.h>
833       typedef unsigned uint128_t __attribute__((mode(TI)));
834   int func(uint64_t a, uint64_t b) {
835            uint128_t c = ((uint128_t)a) * b;
836            int ok = ((uint64_t)(c>>96)) == 522859 &&
837              (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L &&
838                  (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L &&
839                  (((uint64_t)(c))&0xffffffffL) == 0;
840            return ok;
841       }
842   ], [dnl
843     int ok = func( ((uint64_t)2000000000) * 1000000000,
844                    ((uint64_t)1234567890) << 24);
845         return !ok;
846       ])],
847   [tor_cv_can_use_curve25519_donna_c64=yes],
848       [tor_cv_can_use_curve25519_donna_c64=no],
849   [AC_LINK_IFELSE(
850         [AC_LANG_PROGRAM([dnl
851       #include <stdint.h>
852       typedef unsigned uint128_t __attribute__((mode(TI)));
853   int func(uint64_t a, uint64_t b) {
854            uint128_t c = ((uint128_t)a) * b;
855            int ok = ((uint64_t)(c>>96)) == 522859 &&
856              (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L &&
857                  (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L &&
858                  (((uint64_t)(c))&0xffffffffL) == 0;
859            return ok;
860       }
861   ], [dnl
862     int ok = func( ((uint64_t)2000000000) * 1000000000,
863                  ((uint64_t)1234567890) << 24);
864         return !ok;
865       ])],
866           [tor_cv_can_use_curve25519_donna_c64=cross],
867       [tor_cv_can_use_curve25519_donna_c64=no])])])
869 AC_CHECK_HEADERS([crypto_scalarmult_curve25519.h \
870                   nacl/crypto_scalarmult_curve25519.h])
872 AC_CACHE_CHECK([for nacl compiled with a fast curve25519 implementation],
873   tor_cv_can_use_curve25519_nacl,
874   [tor_saved_LIBS="$LIBS"
875    LIBS="$LIBS -lnacl"
876    AC_LINK_IFELSE(
877      [AC_LANG_PROGRAM([dnl
878        #ifdef HAVE_CRYPTO_SCALARMULT_CURVE25519_H
879        #include <crypto_scalarmult_curve25519.h>
880    #elif defined(HAVE_NACL_CRYPTO_SCALARMULT_CURVE25519_H)
881    #include <nacl/crypto_scalarmult_curve25519.h>
882    #endif
883        #ifdef crypto_scalarmult_curve25519_ref_BYTES
884    #error Hey, this is the reference implementation! That's not fast.
885    #endif
886      ], [
887    unsigned char *a, *b, *c; crypto_scalarmult_curve25519(a,b,c);
888      ])], [tor_cv_can_use_curve25519_nacl=yes],
889      [tor_cv_can_use_curve25519_nacl=no])
890    LIBS="$tor_saved_LIBS" ])
892  dnl Okay, now we need to figure out which one to actually use. Fall back
893  dnl to curve25519-donna.c
895  if test x$tor_cv_can_use_curve25519_donna_c64 != xno; then
896    build_curve25519_donna_c64=yes
897    use_curve25519_donna=yes
898  elif test x$tor_cv_can_use_curve25519_nacl = xyes; then
899    use_curve25519_nacl=yes
900    CURVE25519_LIBS=-lnacl
901  else
902    build_curve25519_donna=yes
903    use_curve25519_donna=yes
904  fi
906 if test x$use_curve25519_donna = xyes; then
907   AC_DEFINE(USE_CURVE25519_DONNA, 1,
908             [Defined if we should use an internal curve25519_donna{,_c64} implementation])
910 if test x$use_curve25519_nacl = xyes; then
911   AC_DEFINE(USE_CURVE25519_NACL, 1,
912             [Defined if we should use a curve25519 from nacl])
914 AM_CONDITIONAL(BUILD_CURVE25519_DONNA, test x$build_curve25519_donna = xyes)
915 AM_CONDITIONAL(BUILD_CURVE25519_DONNA_C64, test x$build_curve25519_donna_c64 = xyes)
916 AC_SUBST(CURVE25519_LIBS)
918 dnl Make sure to enable support for large off_t if available.
919 AC_SYS_LARGEFILE
921 AC_CHECK_HEADERS(
922         assert.h \
923         errno.h \
924         fcntl.h \
925         signal.h \
926         string.h \
927         sys/fcntl.h \
928         sys/stat.h \
929         sys/time.h \
930         sys/types.h \
931         time.h \
932         unistd.h
933  , , 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.))
935 dnl These headers are not essential
937 AC_CHECK_HEADERS(
938         arpa/inet.h \
939         crt_externs.h \
940         execinfo.h \
941         grp.h \
942         ifaddrs.h \
943         inttypes.h \
944         limits.h \
945         linux/types.h \
946         machine/limits.h \
947         malloc.h \
948         malloc/malloc.h \
949         malloc_np.h \
950         netdb.h \
951         netinet/in.h \
952         netinet/in6.h \
953         pwd.h \
954         stdint.h \
955         sys/file.h \
956         sys/ioctl.h \
957         sys/limits.h \
958         sys/mman.h \
959         sys/param.h \
960         sys/prctl.h \
961         sys/resource.h \
962         sys/select.h \
963         sys/socket.h \
964         sys/sysctl.h \
965         sys/syslimits.h \
966         sys/time.h \
967         sys/types.h \
968         sys/un.h \
969         sys/utime.h \
970         sys/wait.h \
971         syslog.h \
972         utime.h
975 AC_CHECK_HEADERS(sys/param.h)
977 AC_CHECK_HEADERS(net/if.h, net_if_found=1, net_if_found=0,
978 [#ifdef HAVE_SYS_TYPES_H
979 #include <sys/types.h>
980 #endif
981 #ifdef HAVE_SYS_SOCKET_H
982 #include <sys/socket.h>
983 #endif])
984 AC_CHECK_HEADERS(net/pfvar.h, net_pfvar_found=1, net_pfvar_found=0,
985 [#ifdef HAVE_SYS_TYPES_H
986 #include <sys/types.h>
987 #endif
988 #ifdef HAVE_SYS_SOCKET_H
989 #include <sys/socket.h>
990 #endif
991 #ifdef HAVE_NET_IF_H
992 #include <net/if.h>
993 #endif])
995 AC_CHECK_HEADERS(linux/if.h,[],[],
997 #ifdef HAVE_SYS_SOCKET_H
998 #include <sys/socket.h>
999 #endif
1002 AC_CHECK_HEADERS(linux/netfilter_ipv4.h,
1003         linux_netfilter_ipv4=1, linux_netfilter_ipv4=0,
1004 [#ifdef HAVE_SYS_TYPES_H
1005 #include <sys/types.h>
1006 #endif
1007 #ifdef HAVE_SYS_SOCKET_H
1008 #include <sys/socket.h>
1009 #endif
1010 #ifdef HAVE_LIMITS_H
1011 #include <limits.h>
1012 #endif
1013 #ifdef HAVE_LINUX_TYPES_H
1014 #include <linux/types.h>
1015 #endif
1016 #ifdef HAVE_NETINET_IN6_H
1017 #include <netinet/in6.h>
1018 #endif
1019 #ifdef HAVE_NETINET_IN_H
1020 #include <netinet/in.h>
1021 #endif])
1023 AC_CHECK_HEADERS(linux/netfilter_ipv6/ip6_tables.h,
1024         linux_netfilter_ipv6_ip6_tables=1, linux_netfilter_ipv6_ip6_tables=0,
1025 [#ifdef HAVE_SYS_TYPES_H
1026 #include <sys/types.h>
1027 #endif
1028 #ifdef HAVE_SYS_SOCKET_H
1029 #include <sys/socket.h>
1030 #endif
1031 #ifdef HAVE_LIMITS_H
1032 #include <limits.h>
1033 #endif
1034 #ifdef HAVE_LINUX_TYPES_H
1035 #include <linux/types.h>
1036 #endif
1037 #ifdef HAVE_NETINET_IN6_H
1038 #include <netinet/in6.h>
1039 #endif
1040 #ifdef HAVE_NETINET_IN_H
1041 #include <netinet/in.h>
1042 #endif
1043 #ifdef HAVE_LINUX_IF_H
1044 #include <linux/if.h>
1045 #endif])
1047 if test x$transparent = xtrue ; then
1048    transparent_ok=0
1049    if test x$net_if_found = x1 && test x$net_pfvar_found = x1 ; then
1050      transparent_ok=1
1051    fi
1052    if test x$linux_netfilter_ipv4 = x1 ; then
1053      transparent_ok=1
1054    fi
1055    if test x$linux_netfilter_ipv6_ip6_tables = x1 ; then
1056      transparent_ok=1
1057    fi
1058    if test x$transparent_ok = x1 ; then
1059      AC_DEFINE(USE_TRANSPARENT, 1, "Define to enable transparent proxy support")
1060      case $host in
1061        *-*-openbsd* | *-*-bitrig*)
1062          AC_DEFINE(OPENBSD, 1, "Define to handle pf on OpenBSD properly") ;;
1063      esac
1064    else
1065      AC_MSG_NOTICE([Transparent proxy support enabled, but missing headers.])
1066    fi
1069 AC_CHECK_MEMBERS([struct timeval.tv_sec], , ,
1070 [#ifdef HAVE_SYS_TYPES_H
1071 #include <sys/types.h>
1072 #endif
1073 #ifdef HAVE_SYS_TIME_H
1074 #include <sys/time.h>
1075 #endif])
1077 dnl In case we aren't given a working stdint.h, we'll need to grow our own.
1078 dnl Watch out.
1080 AC_CHECK_SIZEOF(int8_t)
1081 AC_CHECK_SIZEOF(int16_t)
1082 AC_CHECK_SIZEOF(int32_t)
1083 AC_CHECK_SIZEOF(int64_t)
1084 AC_CHECK_SIZEOF(uint8_t)
1085 AC_CHECK_SIZEOF(uint16_t)
1086 AC_CHECK_SIZEOF(uint32_t)
1087 AC_CHECK_SIZEOF(uint64_t)
1088 AC_CHECK_SIZEOF(intptr_t)
1089 AC_CHECK_SIZEOF(uintptr_t)
1091 dnl AC_CHECK_TYPES([int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, intptr_t, uintptr_t])
1093 AC_CHECK_SIZEOF(char)
1094 AC_CHECK_SIZEOF(short)
1095 AC_CHECK_SIZEOF(int)
1096 AC_CHECK_SIZEOF(long)
1097 AC_CHECK_SIZEOF(long long)
1098 AC_CHECK_SIZEOF(__int64)
1099 AC_CHECK_SIZEOF(void *)
1100 AC_CHECK_SIZEOF(time_t)
1101 AC_CHECK_SIZEOF(size_t)
1102 AC_CHECK_SIZEOF(pid_t)
1104 AC_CHECK_TYPES([uint, u_char, ssize_t])
1106 AC_PC_FROM_UCONTEXT([/bin/true])
1108 dnl used to include sockaddr_storage, but everybody has that.
1109 AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, sa_family_t], , ,
1110 [#ifdef HAVE_SYS_TYPES_H
1111 #include <sys/types.h>
1112 #endif
1113 #ifdef HAVE_NETINET_IN_H
1114 #include <netinet/in.h>
1115 #endif
1116 #ifdef HAVE_NETINET_IN6_H
1117 #include <netinet/in6.h>
1118 #endif
1119 #ifdef HAVE_SYS_SOCKET_H
1120 #include <sys/socket.h>
1121 #endif
1122 #ifdef _WIN32
1123 #define _WIN32_WINNT 0x0501
1124 #define WIN32_LEAN_AND_MEAN
1125 #if defined(_MSC_VER) && (_MSC_VER < 1300)
1126 #include <winsock.h>
1127 #else
1128 #include <winsock2.h>
1129 #include <ws2tcpip.h>
1130 #endif
1131 #endif
1133 AC_CHECK_MEMBERS([struct in6_addr.s6_addr32, struct in6_addr.s6_addr16, struct sockaddr_in.sin_len, struct sockaddr_in6.sin6_len], , ,
1134 [#ifdef HAVE_SYS_TYPES_H
1135 #include <sys/types.h>
1136 #endif
1137 #ifdef HAVE_NETINET_IN_H
1138 #include <netinet/in.h>
1139 #endif
1140 #ifdef HAVE_NETINET_IN6_H
1141 #include <netinet/in6.h>
1142 #endif
1143 #ifdef HAVE_SYS_SOCKET_H
1144 #include <sys/socket.h>
1145 #endif
1146 #ifdef _WIN32
1147 #define _WIN32_WINNT 0x0501
1148 #define WIN32_LEAN_AND_MEAN
1149 #if defined(_MSC_VER) && (_MSC_VER < 1300)
1150 #include <winsock.h>
1151 #else
1152 #include <winsock2.h>
1153 #include <ws2tcpip.h>
1154 #endif
1155 #endif
1158 AC_CHECK_TYPES([rlim_t], , ,
1159 [#ifdef HAVE_SYS_TYPES_H
1160 #include <sys/types.h>
1161 #endif
1162 #ifdef HAVE_SYS_TIME_H
1163 #include <sys/time.h>
1164 #endif
1165 #ifdef HAVE_SYS_RESOURCE_H
1166 #include <sys/resource.h>
1167 #endif
1170 AX_CHECK_SIGN([time_t],
1171        [ AC_DEFINE(TIME_T_IS_SIGNED, 1, [Define if time_t is signed]) ],
1172        [ : ], [
1173 #ifdef HAVE_SYS_TYPES_H
1174 #include <sys/types.h>
1175 #endif
1176 #ifdef HAVE_SYS_TIME_H
1177 #include <sys/time.h>
1178 #endif
1179 #ifdef HAVE_TIME_H
1180 #include <time.h>
1181 #endif
1184 if test "$ax_cv_decl_time_t_signed" = no; then
1185   AC_MSG_WARN([You have an unsigned time_t; some things will probably break. Please tell the Tor developers about your interesting platform.])
1188 AX_CHECK_SIGN([size_t],
1189        [ tor_cv_size_t_signed=yes ],
1190        [ tor_cv_size_t_signed=no ], [
1191 #ifdef HAVE_SYS_TYPES_H
1192 #include <sys/types.h>
1193 #endif
1196 if test "$ax_cv_decl_size_t_signed" = yes; then
1197   AC_MSG_ERROR([You have a signed size_t; that's grossly nonconformant.])
1200 AX_CHECK_SIGN([enum always],
1201        [ AC_DEFINE(ENUM_VALS_ARE_SIGNED, 1, [Define if enum is always signed]) ],
1202        [ : ], [
1203  enum always { AAA, BBB, CCC };
1206 AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
1207 #ifdef HAVE_SYS_SOCKET_H
1208 #include <sys/socket.h>
1209 #endif
1212 # We want to make sure that we _don't_ have a cell_t defined, like IRIX does.
1214 AC_CHECK_SIZEOF(cell_t)
1216 # Now make sure that NULL can be represented as zero bytes.
1217 AC_CACHE_CHECK([whether memset(0) sets pointers to NULL], tor_cv_null_is_zero,
1218 [AC_RUN_IFELSE([AC_LANG_SOURCE(
1219 [[#include <stdlib.h>
1220 #include <string.h>
1221 #include <stdio.h>
1222 #ifdef HAVE_STDDEF_H
1223 #include <stddef.h>
1224 #endif
1225 int main () { char *p1,*p2; p1=NULL; memset(&p2,0,sizeof(p2));
1226 return memcmp(&p1,&p2,sizeof(char*))?1:0; }]])],
1227        [tor_cv_null_is_zero=yes],
1228        [tor_cv_null_is_zero=no],
1229        [tor_cv_null_is_zero=cross])])
1231 if test "$tor_cv_null_is_zero" = cross ; then
1232   # Cross-compiling; let's hope that the target isn't raving mad.
1233   AC_MSG_NOTICE([Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes.])
1236 if test "$tor_cv_null_is_zero" != no; then
1237   AC_DEFINE([NULL_REP_IS_ZERO_BYTES], 1,
1238             [Define to 1 iff memset(0) sets pointers to NULL])
1241 AC_CACHE_CHECK([whether memset(0) sets doubles to 0.0], tor_cv_dbl0_is_zero,
1242 [AC_RUN_IFELSE([AC_LANG_SOURCE(
1243 [[#include <stdlib.h>
1244 #include <string.h>
1245 #include <stdio.h>
1246 #ifdef HAVE_STDDEF_H
1247 #include <stddef.h>
1248 #endif
1249 int main () { double d1,d2; d1=0; memset(&d2,0,sizeof(d2));
1250 return memcmp(&d1,&d2,sizeof(d1))?1:0; }]])],
1251        [tor_cv_dbl0_is_zero=yes],
1252        [tor_cv_dbl0_is_zero=no],
1253        [tor_cv_dbl0_is_zero=cross])])
1255 if test "$tor_cv_dbl0_is_zero" = cross ; then
1256   # Cross-compiling; let's hope that the target isn't raving mad.
1257   AC_MSG_NOTICE([Cross-compiling: we'll assume that 0.0 can be represented as a sequence of 0-valued bytes.])
1260 if test "$tor_cv_dbl0_is_zero" != no; then
1261   AC_DEFINE([DOUBLE_0_REP_IS_ZERO_BYTES], 1,
1262             [Define to 1 iff memset(0) sets doubles to 0.0])
1265 # And what happens when we malloc zero?
1266 AC_CACHE_CHECK([whether we can malloc(0) safely.], tor_cv_malloc_zero_works,
1267 [AC_RUN_IFELSE([AC_LANG_SOURCE(
1268 [[#include <stdlib.h>
1269 #include <string.h>
1270 #include <stdio.h>
1271 #ifdef HAVE_STDDEF_H
1272 #include <stddef.h>
1273 #endif
1274 int main () { return malloc(0)?0:1; }]])],
1275        [tor_cv_malloc_zero_works=yes],
1276        [tor_cv_malloc_zero_works=no],
1277        [tor_cv_malloc_zero_works=cross])])
1279 if test "$tor_cv_malloc_zero_works" = cross; then
1280   # Cross-compiling; let's hope that the target isn't raving mad.
1281   AC_MSG_NOTICE([Cross-compiling: we'll assume that we need to check malloc() arguments for 0.])
1284 if test "$tor_cv_malloc_zero_works" = yes; then
1285   AC_DEFINE([MALLOC_ZERO_WORKS], 1,
1286             [Define to 1 iff malloc(0) returns a pointer])
1289 # whether we seem to be in a 2s-complement world.
1290 AC_CACHE_CHECK([whether we are using 2s-complement arithmetic], tor_cv_twos_complement,
1291 [AC_RUN_IFELSE([AC_LANG_SOURCE(
1292 [[int main () { int problem = ((-99) != (~99)+1);
1293 return problem ? 1 : 0; }]])],
1294        [tor_cv_twos_complement=yes],
1295        [tor_cv_twos_complement=no],
1296        [tor_cv_twos_complement=cross])])
1298 if test "$tor_cv_twos_complement" = cross ; then
1299   # Cross-compiling; let's hope that the target isn't raving mad.
1300   AC_MSG_NOTICE([Cross-compiling: we'll assume that negative integers are represented with two's complement.])
1303 if test "$tor_cv_twos_complement" != no ; then
1304   AC_DEFINE([USING_TWOS_COMPLEMENT], 1,
1305             [Define to 1 iff we represent negative integers with two's complement])
1308 # What does shifting a negative value do?
1309 AC_CACHE_CHECK([whether right-shift on negative values does sign-extension], tor_cv_sign_extend,
1310 [AC_RUN_IFELSE([AC_LANG_SOURCE(
1311 [[int main () { int okay = (-60 >> 8) == -1; return okay ? 0 : 1; }]])],
1312        [tor_cv_sign_extend=yes],
1313        [tor_cv_sign_extend=no],
1314        [tor_cv_sign_extend=cross])])
1316 if test "$tor_cv_sign_extend" = cross ; then
1317   # Cross-compiling; let's hope that the target isn't raving mad.
1318   AC_MSG_NOTICE([Cross-compiling: we'll assume that right-shifting negative integers causes sign-extension])
1321 if test "$tor_cv_sign_extend" != no ; then
1322   AC_DEFINE([RSHIFT_DOES_SIGN_EXTEND], 1,
1323             [Define to 1 iff right-shifting a negative value performs sign-extension])
1326 # Whether we should use the dmalloc memory allocation debugging library.
1327 AC_MSG_CHECKING(whether to use dmalloc (debug memory allocation library))
1328 AC_ARG_WITH(dmalloc,
1329 [  --with-dmalloc          Use debug memory allocation library. ],
1330 [if [[ "$withval" = "yes" ]]; then
1331   dmalloc=1
1332   AC_MSG_RESULT(yes)
1333 else
1334   dmalloc=1
1335   AC_MSG_RESULT(no)
1336 fi], [ dmalloc=0; AC_MSG_RESULT(no) ]
1339 if [[ $dmalloc -eq 1 ]]; then
1340   AC_CHECK_HEADERS(dmalloc.h, , AC_MSG_ERROR(dmalloc header file not found. Do you have the development files for dmalloc installed?))
1341   AC_SEARCH_LIBS(dmalloc_malloc, [dmallocth dmalloc], , AC_MSG_ERROR(Libdmalloc library not found. If you enable it you better have it installed.))
1342   AC_DEFINE(USE_DMALLOC, 1, [Debug memory allocation library])
1343   AC_CHECK_FUNCS(dmalloc_strdup dmalloc_strndup)
1346 AC_ARG_WITH(tcmalloc,
1347 [  --with-tcmalloc         Use tcmalloc memory allocation library. ],
1348 [ tcmalloc=yes ], [ tcmalloc=no ])
1350 if test x$tcmalloc = xyes ; then
1351    LDFLAGS="-ltcmalloc $LDFLAGS"
1354 using_custom_malloc=no
1355 if test x$enable_openbsd_malloc = xyes ; then
1356    using_custom_malloc=yes
1358 if test x$tcmalloc = xyes ; then
1359    using_custom_malloc=yes
1361 if test $using_custom_malloc = no ; then
1362    AC_CHECK_FUNCS(mallinfo)
1365 # By default, we're going to assume we don't have mlockall()
1366 # bionic and other platforms have various broken mlockall subsystems.
1367 # Some systems don't have a working mlockall, some aren't linkable,
1368 # and some have it but don't declare it.
1369 AC_CHECK_FUNCS(mlockall)
1370 AC_CHECK_DECLS([mlockall], , , [
1371 #ifdef HAVE_SYS_MMAN_H
1372 #include <sys/mman.h>
1373 #endif])
1375 # Allow user to specify an alternate syslog facility
1376 AC_ARG_WITH(syslog-facility,
1377 [  --with-syslog-facility=LOG syslog facility to use (default=LOG_DAEMON)],
1378 syslog_facility="$withval", syslog_facility="LOG_DAEMON")
1379 AC_DEFINE_UNQUOTED(LOGFACILITY,$syslog_facility,[name of the syslog facility])
1380 AC_SUBST(LOGFACILITY)
1382 # Check if we have getresuid and getresgid
1383 AC_CHECK_FUNCS(getresuid getresgid)
1385 # Check for gethostbyname_r in all its glorious incompatible versions.
1386 #   (This logic is based on that in Python's configure.in)
1387 AH_TEMPLATE(HAVE_GETHOSTBYNAME_R,
1388   [Define this if you have any gethostbyname_r()])
1390 AC_CHECK_FUNC(gethostbyname_r, [
1391   AC_MSG_CHECKING([how many arguments gethostbyname_r() wants])
1392   OLD_CFLAGS=$CFLAGS
1393   CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS"
1394   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1395 #include <netdb.h>
1396   ], [[
1397     char *cp1, *cp2;
1398     struct hostent *h1, *h2;
1399     int i1, i2;
1400     (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2);
1401   ]])],[
1402     AC_DEFINE(HAVE_GETHOSTBYNAME_R)
1403     AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1,
1404      [Define this if gethostbyname_r takes 6 arguments])
1405     AC_MSG_RESULT(6)
1406   ], [
1407     AC_TRY_COMPILE([
1408 #include <netdb.h>
1409     ], [
1410       char *cp1, *cp2;
1411       struct hostent *h1;
1412       int i1, i2;
1413       (void)gethostbyname_r(cp1,h1,cp2,i1,&i2);
1414     ], [
1415       AC_DEFINE(HAVE_GETHOSTBYNAME_R)
1416       AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARG, 1,
1417         [Define this if gethostbyname_r takes 5 arguments])
1418       AC_MSG_RESULT(5)
1419    ], [
1420       AC_TRY_COMPILE([
1421 #include <netdb.h>
1422      ], [
1423        char *cp1;
1424        struct hostent *h1;
1425        struct hostent_data hd;
1426        (void) gethostbyname_r(cp1,h1,&hd);
1427      ], [
1428        AC_DEFINE(HAVE_GETHOSTBYNAME_R)
1429        AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARG, 1,
1430          [Define this if gethostbyname_r takes 3 arguments])
1431        AC_MSG_RESULT(3)
1432      ], [
1433        AC_MSG_RESULT(0)
1434      ])
1435   ])
1436  ])
1437  CFLAGS=$OLD_CFLAGS
1440 AC_CACHE_CHECK([whether the C compiler supports __func__],
1441   tor_cv_have_func_macro,
1442   AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1443 #include <stdio.h>
1444 int main(int c, char **v) { puts(__func__); }])],
1445   tor_cv_have_func_macro=yes,
1446   tor_cv_have_func_macro=no))
1448 AC_CACHE_CHECK([whether the C compiler supports __FUNC__],
1449   tor_cv_have_FUNC_macro,
1450   AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1451 #include <stdio.h>
1452 int main(int c, char **v) { puts(__FUNC__); }])],
1453   tor_cv_have_FUNC_macro=yes,
1454   tor_cv_have_FUNC_macro=no))
1456 AC_CACHE_CHECK([whether the C compiler supports __FUNCTION__],
1457   tor_cv_have_FUNCTION_macro,
1458   AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1459 #include <stdio.h>
1460 int main(int c, char **v) { puts(__FUNCTION__); }])],
1461   tor_cv_have_FUNCTION_macro=yes,
1462   tor_cv_have_FUNCTION_macro=no))
1464 AC_CACHE_CHECK([whether we have extern char **environ already declared],
1465   tor_cv_have_environ_declared,
1466   AC_COMPILE_IFELSE([AC_LANG_SOURCE([
1467 /* We define _GNU_SOURCE here because it is also defined in compat.c.
1468  * Without it environ doesn't get declared. */
1469 #define _GNU_SOURCE
1470 #ifdef HAVE_UNISTD_H
1471 #include <unistd.h>
1472 #endif
1473 #include <stdlib.h>
1474 int main(int c, char **v) { char **t = environ; }])],
1475   tor_cv_have_environ_declared=yes,
1476   tor_cv_have_environ_declared=no))
1478 if test "$tor_cv_have_func_macro" = 'yes'; then
1479   AC_DEFINE(HAVE_MACRO__func__, 1, [Defined if the compiler supports __func__])
1482 if test "$tor_cv_have_FUNC_macro" = 'yes'; then
1483   AC_DEFINE(HAVE_MACRO__FUNC__, 1, [Defined if the compiler supports __FUNC__])
1486 if test "$tor_cv_have_FUNCTION_macro" = 'yes'; then
1487   AC_DEFINE(HAVE_MACRO__FUNCTION__, 1,
1488            [Defined if the compiler supports __FUNCTION__])
1491 if test "$tor_cv_have_environ_declared" = 'yes'; then
1492   AC_DEFINE(HAVE_EXTERN_ENVIRON_DECLARED, 1,
1493            [Defined if we have extern char **environ already declared])
1496 # $prefix stores the value of the --prefix command line option, or
1497 # NONE if the option wasn't set.  In the case that it wasn't set, make
1498 # it be the default, so that we can use it to expand directories now.
1499 if test "x$prefix" = "xNONE"; then
1500   prefix=$ac_default_prefix
1503 # and similarly for $exec_prefix
1504 if test "x$exec_prefix" = "xNONE"; then
1505   exec_prefix=$prefix
1508 if test "x$BUILDDIR" = "x"; then
1509   BUILDDIR=`pwd`
1511 AC_SUBST(BUILDDIR)
1512 AH_TEMPLATE([BUILDDIR],[tor's build directory])
1513 AC_DEFINE_UNQUOTED(BUILDDIR,"$BUILDDIR")
1515 if test "x$CONFDIR" = "x"; then
1516   CONFDIR=`eval echo $sysconfdir/tor`
1518 AC_SUBST(CONFDIR)
1519 AH_TEMPLATE([CONFDIR],[tor's configuration directory])
1520 AC_DEFINE_UNQUOTED(CONFDIR,"$CONFDIR")
1522 BINDIR=`eval echo $bindir`
1523 AC_SUBST(BINDIR)
1524 LOCALSTATEDIR=`eval echo $localstatedir`
1525 AC_SUBST(LOCALSTATEDIR)
1527 if test "$bwin32" = true; then
1528   # Test if the linker supports the --nxcompat and --dynamicbase options
1529   # for Windows
1530   save_LDFLAGS="$LDFLAGS"
1531   LDFLAGS="-Wl,--nxcompat -Wl,--dynamicbase"
1532   AC_MSG_CHECKING([whether the linker supports DllCharacteristics])
1533   AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
1534     [AC_MSG_RESULT([yes])]
1535     [save_LDFLAGS="$save_LDFLAGS $LDFLAGS"],
1536     [AC_MSG_RESULT([no])]
1537   )
1538   LDFLAGS="$save_LDFLAGS"
1541 # Set CFLAGS _after_ all the above checks, since our warnings are stricter
1542 # than autoconf's macros like.
1543 if test "$GCC" = yes; then
1544   # Disable GCC's strict aliasing checks.  They are an hours-to-debug
1545   # accident waiting to happen.
1546   CFLAGS="$CFLAGS -Wall -fno-strict-aliasing -g -O2"
1547 else
1548   # Override optimization level for non-gcc compilers
1549   CFLAGS="$CFLAGS -O"
1550   enable_gcc_warnings=no
1551   enable_gcc_warnings_advisory=no
1554 # OS X Lion started deprecating the system openssl. Let's just disable
1555 # all deprecation warnings on OS X. Also, to potentially make the binary
1556 # a little smaller, let's enable dead_strip.
1557 case "$host_os" in
1559  darwin*)
1560     CFLAGS="$CFLAGS -Wno-deprecated-declarations"
1561     LDFLAGS="$LDFLAGS -dead_strip" ;;
1562 esac
1564 # Add some more warnings which we use in development but not in the
1565 # released versions.  (Some relevant gcc versions can't handle these.)
1566 if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xyes; then
1568   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
1569 #if !defined(__GNUC__) || (__GNUC__ < 4)
1570 #error
1571 #endif])], have_gcc4=yes, have_gcc4=no)
1573   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
1574 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)
1575 #error
1576 #endif])], have_gcc42=yes, have_gcc42=no)
1578   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
1579 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)
1580 #error
1581 #endif])], have_gcc43=yes, have_gcc43=no)
1583   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
1584 #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
1585 #error
1586 #endif])], have_gcc46=yes, have_gcc46=no)
1589   save_CFLAGS="$CFLAGS"
1590   CFLAGS="$CFLAGS -Wshorten-64-to-32"
1591   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], have_shorten64_flag=yes,
1592                     have_shorten64_flag=no)
1593   CFLAGS="$save_CFLAGS"
1595   case $host in
1596     *-*-openbsd* | *-*-bitrig*)
1597       # Some OpenBSD versions (like 4.8) have -Wsystem-headers by default.
1598       # That's fine, except that the headers don't pass -Wredundant-decls.
1599       # Therefore, let's disable -Wsystem-headers when we're building
1600       # with maximal warnings on OpenBSD.
1601       CFLAGS="$CFLAGS -Wno-system-headers" ;;
1602   esac
1604   CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith"
1605   CFLAGS="$CFLAGS -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings"
1606   CFLAGS="$CFLAGS -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat=2"
1607   CFLAGS="$CFLAGS -Wwrite-strings -Wmissing-declarations -Wredundant-decls"
1608   CFLAGS="$CFLAGS -Wnested-externs -Wbad-function-cast -Wswitch-enum"
1610   if test x$enable_gcc_warnings = xyes; then
1611     CFLAGS="$CFLAGS -Werror"
1612   fi
1614   # Disabled, so we can use mallinfo(): -Waggregate-return
1616   if test x$have_gcc4 = xyes ; then
1617     # These warnings break gcc 3.3.5 and work on gcc 4.0.2
1618     CFLAGS="$CFLAGS -Winit-self -Wmissing-field-initializers -Wold-style-definition"
1619   fi
1621   if test x$have_gcc42 = xyes ; then
1622     # These warnings break gcc 4.0.2 and work on gcc 4.2
1623     # XXXX020 See if any of these work with earlier versions.
1624     CFLAGS="$CFLAGS -Waddress -Wmissing-noreturn -Wstrict-overflow=1"
1626     # We used to use -Wstrict-overflow=5, but that breaks us heavily under 4.3.
1627   fi
1629   if test x$have_gcc42 = xyes && test x$have_clang = xno; then
1630     # These warnings break gcc 4.0.2 and clang, but work on gcc 4.2
1631     CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init"
1632   fi
1634   if test x$have_gcc43 = xyes ; then
1635     # These warnings break gcc 4.2 and work on gcc 4.3
1636     # XXXX020 See if any of these work with earlier versions.
1637     CFLAGS="$CFLAGS -Wextra -Warray-bounds"
1638   fi
1640   if test x$have_gcc46 = xyes ; then
1641     # This warning was added in gcc 4.3, but it appears to generate
1642     # spurious warnings in gcc 4.4.  I don't know if it works in 4.5.
1643     CFLAGS="$CFLAGS -Wlogical-op"
1644   fi
1646   if test x$have_shorten64_flag = xyes ; then
1647     CFLAGS="$CFLAGS -Wshorten-64-to-32"
1648   fi
1652 ##This will break the world on some 64-bit architectures
1653 # CFLAGS="$CFLAGS -Winline"
1656 if test "$enable_coverage" = yes && test "$have_clang" = "no"; then
1657    case "$host_os" in
1658     darwin*)
1659       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.])
1660    esac
1663 CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent $TOR_CPPFLAGS_openssl $TOR_CPPFLAGS_zlib"
1665 AC_CONFIG_FILES([
1666         Doxyfile
1667         Makefile
1668         contrib/dist/suse/tor.sh
1669         contrib/operator-tools/tor.logrotate
1670         contrib/dist/tor.sh
1671         contrib/dist/torctl
1672         contrib/dist/tor.service
1673         src/config/torrc.sample
1674         src/config/torrc.minimal
1677 if test x$asciidoc = xtrue && test "$ASCIIDOC" = "none" ; then
1678   regular_mans="doc/tor doc/tor-gencert doc/tor-resolve doc/torify"
1679   for file in $regular_mans ; do
1680     if ! [[ -f "$srcdir/$file.1.in" ]] || ! [[ -f "$srcdir/$file.html.in" ]] ; then
1681       echo "==================================";
1682       echo;
1683       echo "Building Tor has failed since manpages cannot be built.";
1684       echo;
1685       echo "You need asciidoc installed to be able to build the manpages.";
1686       echo "To build without manpages, use the --disable-asciidoc argument";
1687       echo "when calling configure.";
1688       echo;
1689       echo "==================================";
1690       exit 1;
1691     fi
1692   done
1695 AC_OUTPUT
1697 if test -x /usr/bin/perl && test -x ./scripts/maint/updateVersions.pl ; then
1698   ./scripts/maint/updateVersions.pl