configure.in 20.1 KB
Newer Older
Nick Mathewson's avatar
Nick Mathewson committed
1
dnl $Id$
Roger Dingledine's avatar
Roger Dingledine committed
2
3
dnl Copyright (c) 2001-2004, Roger Dingledine
dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
Nick Mathewson's avatar
Nick Mathewson committed
4
dnl See LICENSE for licensing information
5
6

AC_INIT
Roger Dingledine's avatar
Roger Dingledine committed
7
AM_INIT_AUTOMAKE(tor, 0.1.2.0-alpha-cvs)
8
9
AM_CONFIG_HEADER(orconfig.h)

10
11
AC_CANONICAL_HOST

12
13
14
if test -f /etc/redhat-release; then
    CFLAGS="$CFLAGS -I/usr/kerberos/include"
fi
15
16

AC_ARG_ENABLE(debug,
Nick Mathewson's avatar
Nick Mathewson committed
17
 AC_HELP_STRING(--enable-debug, compile with debugging info),
18
[if test x$enableval = xyes; then
19
    CFLAGS="$CFLAGS -g"
20
21
fi])

Nick Mathewson's avatar
Nick Mathewson committed
22
23
24
25
AC_ARG_ENABLE(threads,
     AC_HELP_STRING(--disable-threads, disable multi-threading support))

if test x$enable_threads = x; then
26
   case $host in
27
    *-*-netbsd* | *-*-openbsd* )
28
29
     # Don't try multithreading on netbsd -- there is no threadsafe DNS
     # lookup function there.
30
31
     AC_MSG_NOTICE([You are running OpenBSD or NetBSD; I am assuming that
getaddrinfo is not threadsafe here, so I will disable threads.])
Nick Mathewson's avatar
Nick Mathewson committed
32
     enable_threads="no";;
33
34
35
36
37
    *-*-solaris* )
     # Don't try multithreading on solaris -- cpuworkers seem to lock.
     AC_MSG_NOTICE([You are running Solaris; Sometimes threading makes
cpu workers lock up here, so I will disable threads.])
     enable_threads="no";;
Nick Mathewson's avatar
Nick Mathewson committed
38
39
40
41
42
43
44
45
46
    *)
     enable_threads="yes";;
   esac
fi

if test $enable_threads = "yes"; then
  AC_DEFINE(ENABLE_THREADS, 1, [Defined if we will try to use multithreading])
fi

47
48
49
50
51
52
53
54
55
56
57
58
AC_ARG_ENABLE(eventdns,
     AC_HELP_STRING(--enable-eventdns, enable asynchronous dns module),
     [case "${enableval}" in 
        yes) eventdns=true ;;
        no)  eventdns=false ;;
        *) AC_MSG_ERROR(bad value for --enable-eventdns) ;;
      esac], [eventdns=false])
AM_CONDITIONAL(EVENTDNS, test x$eventdns = xtrue)
if test x$eventdns = xtrue; then
   AC_DEFINE([USE_EVENTDNS], 1, "Define to 1 if we'll be using eventdns.c")
fi

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
AC_ARG_ENABLE(transparent,
     AC_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])
if test x$transparent = xtrue; then
   AC_DEFINE(USE_TRANSPARENT, 1, "Define to enable transparent proxy support")
   case $host in
     *-*-linux* )
       AC_DEFINE(TRANS_NETFILTER, 1, "Define for transparent netfilter") ;;
     *-*-openbsd*)
       AC_DEFINE(TRANS_PF, 1, "Define for transparent pf")
       AC_DEFINE(OPENBSD, 1, "Define to handle pf on OpenBSD properly") ;;
     *-*-*bsd* )
       AC_DEFINE(TRANS_PF, 1, "Define for transparent pf") ;;
   esac
fi

79
80
81
82
83
84
case $host in
   *-*-solaris* )
     AC_DEFINE(_REENTRANT, 1, [Define on some platforms to activate x_r() functions in time.h])
     ;;
esac

85
86
87
88
89
90
AC_PROG_CC
AC_PROG_MAKE_SET
AC_PROG_RANLIB

# The big search for OpenSSL
# copied from openssh's configure.ac
91
tryssldir=""
92
93
94
95
96
97
98
99
100
AC_ARG_WITH(ssl-dir,
        [  --with-ssl-dir=PATH     Specify path to OpenSSL installation ],
        [
                if test "x$withval" != "xno" ; then
                        tryssldir=$withval
                fi
        ]
)

101
102
103
104
105
106
107
108
109
110
trylibeventdir=""
AC_ARG_WITH(libevent-dir,
       [  --with-libevent-dir=PATH     Specify path to Libevent installation ],
       [
                if test "x$withval" != "xno" ; then
                        trylibeventdir=$withval
                fi
       ]
)

111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
TORUSER=_tor
AC_ARG_WITH(tor-user,
        [  --with-tor-user=NAME    Specify username for tor daemon ],
        [
           TORUSER=$withval
        ]
)
AC_SUBST(TORUSER)

TORGROUP=_tor
AC_ARG_WITH(tor-group,
        [  --with-tor-group=NAME   Specify group name for tor daemon ],
        [
           TORGROUP=$withval
        ]
)
AC_SUBST(TORGROUP)

129
AC_SEARCH_LIBS(socket, [socket])
130
AC_SEARCH_LIBS(gethostbyname, [nsl])
131
AC_SEARCH_LIBS(dlopen, [dl])
132
133
134
135
136

if test $enable_threads = "yes"; then
  AC_SEARCH_LIBS(pthread_create, [pthread])
  AC_SEARCH_LIBS(pthread_detach, [pthread])
fi
137
138

dnl ------------------------------------------------------
139
dnl Where do you live, libevent?  And how do we call you?
140

141
AC_CACHE_CHECK([for libevent directory], ac_cv_libevent_dir, [
142
143
  saved_LIBS="$LIBS"
  saved_LDFLAGS="$LDFLAGS"
144
  saved_CPPFLAGS="$CPPFLAGS"
145
  le_found=no
146
  for ledir in $trylibeventdir "" $prefix /usr/local ; do
147
148
    LDFLAGS="$saved_LDFLAGS"
    LIBS="$saved_LIBS -levent"
149

150
151
    # Skip the directory if it isn't there.
    if test ! -z "$ledir" -a ! -d "$ledir" ; then
152
       continue;
153
    fi
154
155
156
157
158
159
    if test ! -z "$ledir" ; then
      if test -d "$ledir/lib" ; then
        LDFLAGS="-L$ledir/lib $LDFLAGS"
      else
        LDFLAGS="-L$ledir $LDFLAGS"
      fi
160
161
162
163
164
      if test -d "$ledir/include" ; then
        CPPFLAGS="-I$ledir/include $CPPFLAGS"
      else
        CPPFLAGS="-I$ledir $CPPFLAGS"
      fi
165
    fi
166
    # Can I compile and link it?
167
    AC_TRY_LINK([#include <sys/time.h>
Roger Dingledine's avatar
Roger Dingledine committed
168
#include <sys/types.h>
169
#include <event.h>], [ event_init(); ],
170
171
172
173
174
175
176
       [ libevent_linked=yes ], [ libevent_linked=no ])
    if test $libevent_linked = yes; then
       if test ! -z "$ledir" ; then
         ac_cv_libevent_dir=$ledir
       else
         ac_cv_libevent_dir="(system)"
       fi
177
       le_found=yes
178
179
180
       break
    fi
  done
181
  LIBS="$saved_LIBS"
182
  LDFLAGS="$saved_LDFLAGS"
183
  CPPFLAGS="$saved_CPPFLAGS"
184
  if test $le_found = no ; then
185
186
    AC_MSG_ERROR([Could not find a linkable libevent. You can specify an explicit path using --with-libevent-dir])
  fi
187
188
189
190
191
192
193
194
195
])
LIBS="$LIBS -levent"
if test $ac_cv_libevent_dir != "(system)"; then
  if test -d "$ac_cv_libevent_dir/lib" ; then
    LDFLAGS="-L$ac_cv_libevent_dir/lib $LDFLAGS"
    le_libdir="$ac_cv_libevent_dir/lib"
  else
    LDFLAGS="-L$ac_cv_libevent_dir $LDFLAGS"
    le_libdir="$ac_cv_libevent_dir"
196
  fi
197
198
199
200
  if test -d "$ac_cv_libevent_dir/include" ; then
    CPPFLAGS="-I$ac_cv_libevent_dir/include $CPPFLAGS"
  else
    CPPFLAGS="-I$ac_cv_libevent_dir $CPPFLAGS"
201
  fi
202
fi
203

204
if test -z "$CROSS_COMPILE"; then
205
206
AC_CACHE_CHECK([whether we need extra options to link libevent],
               ac_cv_libevent_linker_option, [
207
    saved_LDFLAGS="$LDFLAGS"
208
    le_runs=no
209
    linked_with=nothing
210
    for le_extra in "" "-Wl,-R$le_libdir" "-R$le_libdir" ; do
211
      LDFLAGS="$le_extra $saved_LDFLAGS"
212
      AC_TRY_RUN([void *event_init(void);
213
214
                int main(int c, char **v) {
                   event_init(); return 0;
215
                }],
216
                libevent_runs=yes, libevent_runs=no)
217
218
      if test $libevent_runs = yes ; then
        if test -z "$le_extra" ; then
219
          ac_cv_libevent_linker_option='(none)'
220
221
222
223
224
225
226
        else
          ac_cv_libevent_linker_option=$le_extra
        fi
        le_runs=yes
        break
      fi
    done
227
    if test $le_runs = no ; then
228
      AC_MSG_ERROR([Found linkable libevent in $ac_cv_libevent_dir, but it doesn't run, even with -R.  Maybe specify another using --with-libevent-dir?])
229
230
231
    fi
    LDFLAGS="$saved_LDFLAGS"
])
232

233
234
if test $ac_cv_libevent_linker_option != '(none)' ; then
   LDFLAGS="$ac_cv_libevent_linker_option $LDFLAGS"
235
fi
236
fi
237
238

dnl ------------------------------------------------------
239
dnl Where do you live, openssl?  And how do we call you?
240

241
242
243
AC_CACHE_CHECK([for OpenSSL directory], ac_cv_openssl_dir, [
  saved_LIBS="$LIBS"
  saved_LDFLAGS="$LDFLAGS"
244
  saved_CPPFLAGS="$CPPFLAGS"
245
246
247
248
  ssl_found=no
  for ssldir in $tryssldir "" $prefix /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/athena /usr/pkg /opt /opt/openssl ; do
    LDFLAGS="$saved_LDFLAGS"
    LIBS="$saved_LIBS -lssl -lcrypto"
249

250
251
252
253
254
255
256
257
258
259
    # Skip the directory if it isn't there.
    if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
       continue;
    fi
    if test ! -z "$ssldir" ; then
      if test -d "$ssldir/lib" ; then
        LDFLAGS="-L$ssldir/lib $LDFLAGS"
      else
        LDFLAGS="-L$ssldir $LDFLAGS"
      fi
260
261
262
263
264
      if test -d "$ssldir/include" ; then
        CPPFLAGS="-I$ssldir/include $CPPFLAGS"
      else
        CPPFLAGS="-I$ssldir $CPPFLAGS"
      fi
265
266
    fi
    # Can I link it?
267
268
    AC_TRY_LINK([#include <openssl/rand.h>],
       [ RAND_add((void*)0,0,0); ],
269
270
271
272
273
274
275
276
277
278
279
280
       [ openssl_linked=yes ], [ openssl_linked=no ])
    if test $openssl_linked = yes; then
       if test ! -z "$ssldir" ; then
         ac_cv_openssl_dir=$ssldir
       else
         ac_cv_openssl_dir="(system)"
       fi
       ssl_found=yes
       break
    fi
  done
  LIBS="$saved_LIBS"
281
  LDFLAGS="$saved_LDFLAGS"
282
  CPPFLAGS="$saved_CPPFLAGS"
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
  if test $ssl_found = no ; then
    AC_MSG_ERROR([Could not find a linkable OpenSSL. You can specify an explicit path using --with-ssl-dir])
  fi
])
LIBS="$LIBS -lssl -lcrypto"
if test "$ac_cv_openssl_dir" != "(system)"; then
  if test -d "$ac_cv_openssl_dir/lib" ; then
    LDFLAGS="-L$ac_cv_openssl_dir/lib $LDFLAGS"
    ssl_libdir="$ac_cv_openssl_dir/lib"
  else
    LDFLAGS="-L$ac_cv_openssl_dir $LDFLAGS"
    ssl_libdir="$ac_cv_openssl_dir"
  fi
  if test -d "$ac_cv_openssl_dir/include" ; then
    CPPFLAGS="-I$ac_cv_openssl_dir/include $CPPFLAGS"
  else
    CPPFLAGS="-I$ac_cv_openssl_dir $CPPFLAGS"
  fi
fi
302

303
304
if test -z $CROSS_COMPILE
then
305
306
307
308
AC_CACHE_CHECK([whether we need extra options to link OpenSSL],
               ac_cv_openssl_linker_option, [
    saved_LDFLAGS="$LDFLAGS"
    ssl_runs=no
309
    linked_with=nothing
310
311
312
    for ssl_extra in "" "-Wl,-R$ssl_libdir" "-R$ssl_libdir" ; do
      LDFLAGS="$ssl_extra $saved_LDFLAGS"
      AC_TRY_RUN([
313
314
#include <string.h>
#include <openssl/rand.h>
Nick Mathewson's avatar
Nick Mathewson committed
315
int main(void)
316
317
318
319
320
321
322
{
        char a[2048];
        memset(a, 0, sizeof(a));
        RAND_add(a, sizeof(a), sizeof(a));
        return(RAND_status() <= 0);
}
                        ],
323
324
                openssl_runs=yes, openssl_runs=no)
      if test $openssl_runs = yes ; then
325
326
327
328
329
        if test "$linked_with" = nothing; then
           linked_with="$ssl_extra"
        fi
        AC_TRY_RUN([
#include <openssl/opensslv.h>
330
#include <openssl/crypto.h>
331
332
333
int main(void) {
return (OPENSSL_VERSION_NUMBER == SSLeay()) == 0;
}],
334
335
336
        right_version=yes, right_version=no)
        if test "$right_version" = yes; then
          if test -z "$ssl_extra" ; then
337
            ac_cv_openssl_linker_option='(none)'
338
339
340
341
342
343
344
345
346
347
348
349
350
          else
            ac_cv_openssl_linker_option=$ssl_extra
          fi
          ssl_runs=yes
          break
        fi
     fi
    done
    if test $ssl_runs = no ; then
      if test "$linked_with" = 'nothing' ; then
        AC_MSG_ERROR([Found linkable OpenSSL in $ac_cv_openssl_dir, but it doesn't run, even with -R.  Maybe specify another using --with-ssl-dir?])
      else
        if test -z "$linked_with" ; then
351
            ac_cv_openssl_linker_option='(none)'
352
        else
353
            ac_cv_openssl_linker_option=$linked_with
354
        fi
355
        AC_MSG_WARN([I managed to make OpenSSL link and run, but I couldn't make it link against the same version I found header files for.])
356
357
358
      fi
    fi
    LDFLAGS="$saved_LDFLAGS"
359
])
360

361
if test "$ac_cv_openssl_linker_option" != '(none)' ; then
362
   LDFLAGS="$ac_cv_openssl_linker_option $LDFLAGS"
363
fi
364
fi
365
366

dnl Make sure to enable support for large off_t if avalable.
367

368
369
AC_SYS_LARGEFILE

Nick Mathewson's avatar
Nick Mathewson committed
370
371
dnl The warning message here is no longer strictly accurate.

372
AC_CHECK_HEADERS(unistd.h string.h signal.h netdb.h ctype.h sys/stat.h sys/types.h fcntl.h sys/fcntl.h sys/ioctl.h sys/socket.h sys/time.h netinet/in.h arpa/inet.h errno.h assert.h time.h pwd.h grp.h, , AC_MSG_WARN(some headers were not found, compilation may fail))
373
374

AC_CHECK_HEADERS(event.h, , AC_MSG_ERROR(Libevent header (event.h) not found. Tor requires libevent to build.))
375

376
377
AC_CHECK_HEADERS(zlib.h, , AC_MSG_ERROR(Zlib header (zlib.h) not found. Tor requires zlib to build. You may need to install a zlib development package.))

378
379
dnl These headers are not essential

380
AC_CHECK_HEADERS(stdint.h sys/types.h inttypes.h sys/param.h sys/wait.h limits.h sys/limits.h netinet/in.h arpa/inet.h machine/limits.h syslog.h sys/time.h sys/resource.h stddef.h inttypes.h utime.h sys/utime.h sys/mman.h alloca.h)
381

382
AC_CHECK_FUNCS(gettimeofday ftime socketpair uname inet_aton strptime getrlimit setrlimit strlcat strlcpy strtoull getpwnam getpwuid ftello getaddrinfo localtime_r gmtime_r event_get_version event_get_method event_set_log_callback memmem mmap strtok_r)
383
384
385
386
387

if test $enable_threads = "yes"; then
  AC_CHECK_HEADERS(pthread.h)
  AC_CHECK_FUNCS(pthread_create)
fi
Felipe Bergo's avatar
Felipe Bergo committed
388

389
AC_FUNC_FSEEKO
390

391
392
AC_CHECK_MEMBERS([struct timeval.tv_sec])

393
394
395
dnl In case we aren't given a working stdint.h, we'll need to grow our own.
dnl Watch out.

396
397
398
399
400
401
402
403
AC_CHECK_SIZEOF(int8_t)
AC_CHECK_SIZEOF(int16_t)
AC_CHECK_SIZEOF(int32_t)
AC_CHECK_SIZEOF(int64_t)
AC_CHECK_SIZEOF(uint8_t)
AC_CHECK_SIZEOF(uint16_t)
AC_CHECK_SIZEOF(uint32_t)
AC_CHECK_SIZEOF(uint64_t)
404
405
AC_CHECK_SIZEOF(intptr_t)
AC_CHECK_SIZEOF(uintptr_t)
406

407
dnl AC_CHECK_TYPES([int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, intptr_t, uintptr_t])
408

409
410
411
412
413
414
AC_CHECK_SIZEOF(char)
AC_CHECK_SIZEOF(short)
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)
AC_CHECK_SIZEOF(__int64)
415
AC_CHECK_SIZEOF(void *)
416
AC_CHECK_SIZEOF(time_t)
417
418

if test -z "$CROSS_COMPILE"; then
419
420
421
422
423
AC_CACHE_CHECK([whether time_t is signed], tor_cv_time_t_signed, [
AC_TRY_RUN([
int main(int c, char**v) { if (((time_t)-1)<0) return 1; else return 0; }],
  tor_cv_time_t_signed=no, tor_cv_time_t_signed=yes)
])
424
425
426
427
428
else
  # Cross-compiling; let's hope the target platform isn't loony.
  AC_MSG_NOTICE([Cross compiling: assuming that time_t is signed.])
  tor_cv_time_t_signed=yes
fi
429
430
431
432
433
434

if test $tor_cv_time_t_signed = yes; then
  AC_DEFINE([TIME_T_IS_SIGNED], 1,
            [Define to 1 iff time_t is signed])
fi

435
436
437
438
439
AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
])
440

441
442
443
444
# We want to make sure that we _don't_ have a cell_t defined, like IRIX does.

AC_CHECK_SIZEOF(cell_t)

445
# Now make sure that NULL can be represented as zero bytes.
446
if test -z "$CROSS_COMPILE"; then
447
448
449
AC_CACHE_CHECK([whether memset(0) sets pointers to NULL], tor_cv_null_is_zero,
[AC_RUN_IFELSE([AC_LANG_SOURCE(
[[#include <stdlib.h>
450
#include <string.h>
451
452
453
454
#include <stdio.h>
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
455
int main () { char *p1,*p2; p1=NULL; memset(&p2,0,sizeof(p2));
456
return memcmp(&p1,&p2,sizeof(char*))?1:0; }]])],
457
458
459
460
       [tor_cv_null_is_zero=yes],
       [tor_cv_null_is_zero=no],
       [tor_cv_null_is_zero=cross])])

461
462
463
464
465
466
else
  # Cross-compiling; let's hope that the target isn't raving mad.
  AC_MSG_NOTICE([Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes.])
  tor_cv_null_is_zero=yes
fi

467
468
469
470
471
if test $tor_cv_null_is_zero = yes; then
  AC_DEFINE([NULL_REP_IS_ZERO_BYTES], 1,
            [Define to 1 iff memset(0) sets pointers to NULL])
fi

472
# Whether we should use the dmalloc memory allocation debugging library.
Roger Dingledine's avatar
Roger Dingledine committed
473
AC_MSG_CHECKING(whether to use dmalloc (debug memory allocation library))
474
AC_ARG_WITH(dmalloc,
475
[  --with-dmalloc          Use debug memory allocation library. ],
476
477
478
479
480
481
482
483
484
485
[if [[ "$withval" = "yes" ]]; then
  dmalloc=1
  AC_MSG_RESULT(yes)
else
  dmalloc=1
  AC_MSG_RESULT(no)
fi], [ dmalloc=0; AC_MSG_RESULT(no) ]
)

if [[ $dmalloc -eq 1 ]]; then
Peter Palfrader's avatar
Peter Palfrader committed
486
  AC_CHECK_HEADERS(dmalloc.h, , AC_MSG_ERROR(dmalloc header file not found. Do you have the development files for dmalloc installed?))
487
  AC_SEARCH_LIBS(dmalloc_malloc, [dmallocth dmalloc], , AC_MSG_ERROR(Libdmalloc library not found. If you enable it you better have it installed.))
488
489
490
491
  AC_DEFINE(USE_DMALLOC, 1, [Debug memory allocation library])
  AC_DEFINE(DMALLOC_FUNC_CHECK, 1, [Enable dmalloc's malloc function check])
fi

492
493
494
495
496
497
498
# Allow user to specify an alternate syslog facility
AC_ARG_WITH(syslog-facility,
[  --with-syslog-facility=LOG syslog facility to use (default=LOG_DAEMON)],
syslog_facility="$withval", syslog_facility="LOG_DAEMON")
AC_DEFINE_UNQUOTED(LOGFACILITY,$syslog_facility,[name of the syslog facility])
AC_SUBST(LOGFACILITY)

499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
# Check for gethostbyname_r in all its glorious incompatible versions.
#   (This logic is based on that in Python's configure.in)
AH_TEMPLATE(HAVE_GETHOSTBYNAME_R,
  [Define this if you have any gethostbyname_r()])

AC_CHECK_FUNC(gethostbyname_r, [
  AC_MSG_CHECKING([how many arguments gethostbyname_r() wants])
  OLD_CFLAGS=$CFLAGS
  CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS"
  AC_TRY_COMPILE([
#include <netdb.h>
  ], [
    char *cp1, *cp2;
    struct hostent *h1, *h2;
    int i1, i2;
    (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2);
  ], [
    AC_DEFINE(HAVE_GETHOSTBYNAME_R)
    AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1,
     [Define this if gethostbyname_r takes 6 arguments])
    AC_MSG_RESULT(6)
  ], [
    AC_TRY_COMPILE([
#include <netdb.h>
    ], [
      char *cp1, *cp2;
      struct hostent *h1;
      int i1, i2;
      (void)gethostbyname_r(cp1,h1,cp2,i1,&i2);
    ], [
      AC_DEFINE(HAVE_GETHOSTBYNAME_R)
      AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARG, 1,
        [Define this if gethostbyname_r takes 5 arguments])
      AC_MSG_RESULT(5)
   ], [
      AC_TRY_COMPILE([
#include <netdb.h>
     ], [
       char *cp1;
       struct hostent *h1;
       struct hostent_data hd;
       (void) gethostbyname_r(cp1,h1,&hd);
     ], [
       AC_DEFINE(HAVE_GETHOSTBYNAME_R)
       AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARG, 1,
         [Define this if gethostbyname_r takes 3 arguments])
       AC_MSG_RESULT(3)
     ], [
       AC_MSG_RESULT(0)
     ])
  ])
 ])
 CFLAGS=$OLD_CFLAGS
])

554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
AC_CACHE_CHECK([whether the C compiler supports __func__],
  ac_cv_have_func_macro,
  AC_COMPILE_IFELSE([
#include <stdio.h>
int main(int c, char **v) { puts(__func__); }],
  ac_cv_have_func_macro=yes,
  ac_cv_have_func_macro=no))

AC_CACHE_CHECK([whether the C compiler supports __FUNC__],
  ac_cv_have_FUNC_macro,
  AC_COMPILE_IFELSE([
#include <stdio.h>
int main(int c, char **v) { puts(__FUNC__); }],
  ac_cv_have_FUNC_macro=yes,
  ac_cv_have_FUNC_macro=no))

AC_CACHE_CHECK([whether the C compiler supports __FUNCTION__],
  ac_cv_have_FUNCTION_macro,
  AC_COMPILE_IFELSE([
#include <stdio.h>
int main(int c, char **v) { puts(__FUNCTION__); }],
  ac_cv_have_FUNCTION_macro=yes,
  ac_cv_have_FUNCTION_macro=no))

if test $ac_cv_have_func_macro = 'yes'; then
  AC_DEFINE(HAVE_MACRO__func__, 1, [Defined if the compiler supports __func__])
fi


if test $ac_cv_have_FUNC_macro = 'yes'; then
  AC_DEFINE(HAVE_MACRO__FUNC__, 1, [Defined if the compiler supports __FUNC__])
fi

if test $ac_cv_have_FUNCTION_macro = 'yes'; then
  AC_DEFINE(HAVE_MACRO__FUNCTION__, 1,
           [Defined if the compiler supports __FUNCTION__])
fi


593
594
595
596
597
598
599
600
601
602
603
604
605
606
# $prefix stores the value of the --prefix command line option, or
# NONE if the option wasn't set.  In the case that it wasn't set, make
# it be the default, so that we can use it to expand directories now.
if test "x$prefix" = "xNONE"; then
  prefix=$ac_default_prefix
fi

# and similarly for $exec_prefix
if test "x$exec_prefix" = "xNONE"; then
  exec_prefix=$prefix
fi

CONFDIR=`eval echo $sysconfdir/tor`
AC_SUBST(CONFDIR)
607
AH_TEMPLATE([CONFDIR],[tor's configuration directory])
608
609
610
611
612
613
614
AC_DEFINE_UNQUOTED(CONFDIR,"$CONFDIR")

BINDIR=`eval echo $bindir`
AC_SUBST(BINDIR)

LOCALSTATEDIR=`eval echo $localstatedir`
AC_SUBST(LOCALSTATEDIR)
615
AH_TEMPLATE([LOCALSTATEDIR], [Default location to store state files.])
616
AC_DEFINE_UNQUOTED(LOCALSTATEDIR,"$LOCALSTATEDIR")
617

618
619
# Set CFLAGS _after_ all the above checks, since our warnings are stricter
# than autoconf's macros like.
620
621
622
623
624
if test $ac_cv_c_compiler_gnu = yes; then
  CFLAGS="$CFLAGS -Wall -g -O2"
else
  CFLAGS="$CFLAGS -g -O"
fi
625
# Add some more warnings which we use in the cvs version but not in the
626
# released versions.  (Some relevant gcc versions can't handle these.)
627
#CFLAGS="$CFLAGS -W -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment -Wformat=2 -Winit-self -Wwrite-strings -Waggregate-return -Wmissing-declarations -Wmissing-field-initializers -Wredundant-decls -Winline"
628
# Add these in when you feel like fun.
629
#CFLAGS="$CFLAGS -Wbad-function-cast -Werror -Wdeclaration-after-statement -Wold-style-definition"
630

631
632
echo "confdir: $CONFDIR"

633
AC_OUTPUT(Makefile tor.spec contrib/tor.sh contrib/torctl contrib/torify contrib/tor.logrotate contrib/Makefile contrib/osx/Makefile contrib/osx/TorBundleDesc.plist contrib/osx/TorBundleInfo.plist contrib/osx/TorDesc.plist contrib/osx/TorInfo.plist contrib/osx/TorStartupDesc.plist src/config/torrc.sample doc/tor.1 src/Makefile doc/Makefile doc/design-paper/Makefile src/config/Makefile src/common/Makefile src/or/Makefile src/win32/Makefile src/tools/Makefile contrib/suse/Makefile contrib/suse/tor.sh)
634
635
636
637
638

if test -x /usr/bin/perl && test -x ./contrib/updateVersions.pl ; then
  ./contrib/updateVersions.pl
fi