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

AC_INIT
Roger Dingledine's avatar
Roger Dingledine committed
7
AM_INIT_AUTOMAKE(tor, 0.1.0.8-rc)
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
33
34
35
36
37
38
39
40
41
     enable_threads="no";;
    *)
     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

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
AC_PROG_CC
AC_PROG_MAKE_SET
AC_PROG_RANLIB

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

57
AC_SEARCH_LIBS(socket, [socket])
58
AC_SEARCH_LIBS(gethostbyname, [nsl])
Nick Mathewson's avatar
Nick Mathewson committed
59
AC_SEARCH_LIBS(pthread_create, [pthread])
60
AC_SEARCH_LIBS(pthread_detach, [pthread])
61
62
63
64
65

dnl ------------------------------------------------------
dnl Where do you live, libevent?


Nick Mathewson's avatar
Nick Mathewson committed
66
AC_CACHE_CHECK([for a normal libevent], ac_cv_libevent_normal, [
67
68
69
70
71
72
73
74
75
76
77
78
79
80
   saved_LIBS="$LIBS"
   LIBS="$LIBS -levent"
   AC_TRY_RUN([
void *event_init(void);
int main(void)
{
	if (!event_init())
	        return -1;
        return 0;
}], ac_cv_libevent_normal=yes, ac_cv_libevent_normal=no)
   LIBS="$saved_LIBS"
])


Nick Mathewson's avatar
Nick Mathewson committed
81
if test "$ac_cv_libevent_normal" = yes; then
82
83
  LIBS="$LIBS -levent"
else
84
  AC_CACHE_CHECK([for libevent in /usr/local/lib], ac_cv_libevent_local, [
85
86
     saved_LIBS="$LIBS"
     saved_LDFLAGS="$LDFLAGS"  
87
88
     LIBS="$LIBS -levent"
     LDFLAGS="$LDFLAGS -L/usr/local/lib"
89
90
     AC_TRY_LINK([], [ void *event_init(void); event_init(); ],
        [ libevent_is_in_local=yes ], [ libevent_is_in_local=no ])
91
    if test $libevent_is_in_local = yes; then
92
       AC_TRY_RUN([
93
void *event_init(void);
94
95
int main(void)
{
96
97
	if (!event_init())
	        return -1;
98
        return 0;
99
}], [ ac_cv_libevent_local=yes ], [ ac_cv_libevent_local=unlinked ])
100
101
102
    else
       ac_cv_libevent_local=no   
    fi
Nick Mathewson's avatar
Nick Mathewson committed
103
    if test "$GCC" = yes -a $ac_cv_libevent_local = unlinked ; then
104
105
       LDFLAGS="$LDFLAGS -Wl,-R/usr/local/lib"
       AC_TRY_RUN([
106
void *event_init(void);
107
108
int main(void)
{
109
110
	if (!event_init())
	        return -1;
111
        return 0;
112
113
114
115
116
117
118
119
120
121
}], [ ac_cv_libevent_local=unlinked_gcc_elf ])
    fi 

    LIBS="$saved_LIBS"
    CFLAGS="$saved_CFLAGS"
    LDFLAGS="$saved_LDFLAGS" ])

  if test $ac_cv_libevent_local != no; then
      LIBS="$LIBS -levent"
      LDFLAGS="$LDFLAGS -L/usr/local/lib"
122
      CPPFLAGS="$CPPFLAGS -I/usr/local/include"
123
  fi
Nick Mathewson's avatar
Nick Mathewson committed
124
  if test $ac_cv_libevent_local = unlinked_gcc_elf; then
125
      LDFLAGS="$LDFLAGS -Wl,-R/usr/local/lib"
126
127
128
129
130
131
      if test -f /etc/ld.so.conf ; then
        AC_MSG_NOTICE([
Apparently, you don't have /usr/local/lib in your /etc/ld.so.conf.
Tor is smart enought to deal this now, but other applications aren't.
You might want to add it in.])
      fi
132
133
  fi

134
  if test $ac_cv_libevent_local = unlinked ; then
Nick Mathewson's avatar
Nick Mathewson committed
135
    if test -f /etc/ld.so.conf ; then
136
137
      AC_MSG_NOTICE([
=================================================
138
139
140
141
142
143
Your libevent library is installed in /usr/local/lib,
but your dynamic linker isn't configured to look for
it there.

Maybe you need to add /usr/local/lib to /etc/ld.so.conf,
and then run ldconfig -v ?
144
145
146
147
148
149
150
151
152
153
=================================================])
    else
      AC_MSG_NOTICE([
=================================================
Your libevent library is installed in /usr/local/lib,
but your dynamic linker isn't configured to look for
it there.
=================================================])
    fi 
  fi
154
155

  if test $ac_cv_libevent_local = no ; then
156
      AC_MSG_ERROR([
157
Tor requires libevent to build.  You can download the latest
158
version of libevent from http://monkey.org/~provos/libevent/])
159
  fi
160

161
162
163
164
fi

dnl ------------------------------------------------------
dnl Where do you live, OpenSSL?
165

166
167
168
169
170
171
172
saved_LIBS="$LIBS"
saved_LDFLAGS="$LDFLAGS"
saved_CPPFLAGS="$CPPFLAGS"
if test "x$prefix" != "xNONE" ; then
        tryssldir="$tryssldir $prefix"
fi
AC_CACHE_CHECK([for OpenSSL directory], ac_cv_openssldir, [
173
        for ssldir in $tryssldir "" /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/athena /usr/pkg /opt /opt/openssl ; do
174
175
                CPPFLAGS="$saved_CPPFLAGS"
                LDFLAGS="$saved_LDFLAGS"
176
177
                LIBS="$saved_LIBS -lssl -lcrypto"

178
179
180
181
182
                # Skip directories if they don't exist
                if test ! -z "$ssldir" -a ! -d "$ssldir" ; then
                        continue;
                fi
                if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
Nick Mathewson's avatar
Nick Mathewson committed
183
                        # Try to use $ssldir/lib if it exists, otherwise
184
185
186
187
188
189
190
191
192
193
194
195
                        # $ssldir
                        if test -d "$ssldir/lib" ; then
                                LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
                                if test ! -z "$need_dash_r" ; then
                                        LDFLAGS="-R$ssldir/lib $LDFLAGS"
                                fi
                        else
                                LDFLAGS="-L$ssldir $saved_LDFLAGS"
                                if test ! -z "$need_dash_r" ; then
                                        LDFLAGS="-R$ssldir $LDFLAGS"
                                fi
                        fi
Nick Mathewson's avatar
Nick Mathewson committed
196
                        # Try to use $ssldir/include if it exists, otherwise
197
198
199
200
201
202
203
204
205
206
207
208
209
210
                        # $ssldir
                        if test -d "$ssldir/include" ; then
                                CPPFLAGS="-I$ssldir/include $saved_CPPFLAGS"
                        else
                                CPPFLAGS="-I$ssldir $saved_CPPFLAGS"
                        fi
                fi

                # Basic test to check for compatible version and correct linking
                # *does not* test for RSA - that comes later.
                AC_TRY_RUN(
                        [
#include <string.h>
#include <openssl/rand.h>
Nick Mathewson's avatar
Nick Mathewson committed
211
int main(void)
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
{
        char a[2048];
        memset(a, 0, sizeof(a));
        RAND_add(a, sizeof(a), sizeof(a));
        return(RAND_status() <= 0);
}
                        ],
                        [
                                found_crypto=1
                                break;
                        ], []
                )

                if test ! -z "$found_crypto" ; then
                        break;
                fi
        done

        if test -z "$found_crypto" ; then
Roger Dingledine's avatar
Roger Dingledine committed
231
                AC_MSG_ERROR([Could not find working OpenSSL library, please install or check config.log])
232
233
234
235
236
237
238
239
240
241
242
243
        fi
        if test -z "$ssldir" ; then
                ssldir="(system)"
        fi

        ac_cv_openssldir=$ssldir
])
if (test ! -z "$ac_cv_openssldir" && test "x$ac_cv_openssldir" != "x(system)") ;
 then
        dnl Need to recover ssldir - test above runs in subshell
        ssldir=$ac_cv_openssldir
        if test ! -z "$ssldir" -a "x$ssldir" != "x/usr"; then
Nick Mathewson's avatar
Nick Mathewson committed
244
                # Try to use $ssldir/lib if it exists, otherwise
245
246
247
248
249
250
251
252
253
254
255
256
                # $ssldir
                if test -d "$ssldir/lib" ; then
                        LDFLAGS="-L$ssldir/lib $saved_LDFLAGS"
                        if test ! -z "$need_dash_r" ; then
                                LDFLAGS="-R$ssldir/lib $LDFLAGS"
                        fi
                else
                        LDFLAGS="-L$ssldir $saved_LDFLAGS"
                        if test ! -z "$need_dash_r" ; then
                                LDFLAGS="-R$ssldir $LDFLAGS"
                        fi
                fi
Nick Mathewson's avatar
Nick Mathewson committed
257
                # Try to use $ssldir/include if it exists, otherwise
258
259
260
261
262
263
264
265
                # $ssldir
                if test -d "$ssldir/include" ; then
                        CPPFLAGS="-I$ssldir/include $saved_CPPFLAGS"
                else
                        CPPFLAGS="-I$ssldir $saved_CPPFLAGS"
                fi
        fi
fi
266
LIBS="$saved_LIBS"
267

268
269
AC_SYS_LARGEFILE

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

272
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))
273
274

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

276
277
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.))

278
279
dnl These headers are not essential

280
AC_CHECK_HEADERS(stdint.h sys/types.h inttypes.h sys/param.h sys/wait.h sys/limits.h netinet/in.h arpa/inet.h machine/limits.h syslog.h sys/time.h sys/resource.h pthread.h stddef.h inttypes.h)
Felipe Bergo's avatar
Felipe Bergo committed
281

282
AC_CHECK_FUNCS(gettimeofday ftime socketpair uname inet_aton strptime getrlimit setrlimit strlcat strlcpy strtoull getpwnam ftello pthread_create getaddrinfo localtime_r gmtime_r event_get_version event_get_method event_set_log_callback)
283
AC_FUNC_FSEEKO
284

285
286
AC_CHECK_MEMBERS([struct timeval.tv_sec])

287

288
289
290
dnl In case we aren't given a working stdint.h, we'll need to grow our own.
dnl Watch out.

291
292
293
294
295
296
297
298
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)
299
300
AC_CHECK_SIZEOF(intptr_t)
AC_CHECK_SIZEOF(uintptr_t)
301

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

304
305
306
307
308
309
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)
310
AC_CHECK_SIZEOF(void *)
311
AC_CHECK_SIZEOF(time_t)
312
313
314
315
316
AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
])
317

318
319
320
321
# We want to make sure that we _don't_ have a cell_t defined, like IRIX does.

AC_CHECK_SIZEOF(cell_t)

322
323
324
325
326
327
328
# Now, let's see about alignment requirements.  On some platforms, we override
# the default.
case $host in
 ia64-*-* | arm-*-* )
    tor_cv_unaligned_ok=no
    ;;
 *)
329
330
331
332
333
334
335
AC_CACHE_CHECK([whether unaligned int access is allowed], tor_cv_unaligned_ok,
[AC_RUN_IFELSE([AC_LANG_SOURCE(
[[int main () { char s[] = "A\x00\x00\x00\x00\x00\x00\x00";
return *(int*)(&s[1]); }]])],
       [tor_cv_unaligned_ok=yes],
       [tor_cv_unaligned_ok=no],
       [tor_cv_unaligned_ok=cross])])
336
337
esac

Nick Mathewson's avatar
Nick Mathewson committed
338
if test $tor_cv_unaligned_ok = yes; then
339
340
341
342
  AC_DEFINE([UNALIGNED_INT_ACCESS_OK], 1,
            [Define to 1 iff unaligned int access is allowed])
fi

343
344
345
346
# Now make sure that NULL can be represented as zero bytes.
AC_CACHE_CHECK([whether memset(0) sets pointers to NULL], tor_cv_null_is_zero,
[AC_RUN_IFELSE([AC_LANG_SOURCE(
[[#include <stdlib.h>
347
#include <string.h>
348
349
350
351
#include <stdio.h>
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
352
int main () { char *p1,*p2; p1=NULL; memset(&p2,0,sizeof(p2));
353
return memcmp(&p1,&p2,sizeof(char*))?1:0; }]])],
354
355
356
357
358
359
360
361
362
       [tor_cv_null_is_zero=yes],
       [tor_cv_null_is_zero=no],
       [tor_cv_null_is_zero=cross])])

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

363
# Whether we should use the dmalloc memory allocation debugging library.
Roger Dingledine's avatar
Roger Dingledine committed
364
AC_MSG_CHECKING(whether to use dmalloc (debug memory allocation library))
365
AC_ARG_WITH(dmalloc,
366
[  --with-dmalloc          Use debug memory allocation library. ],
367
368
369
370
371
372
373
374
375
376
[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
377
  AC_CHECK_HEADERS(dmalloc.h, , AC_MSG_ERROR(dmalloc header file not found. Do you have the development files for dmalloc installed?))
378
379
380
381
382
  AC_SEARCH_LIBS(dmalloc_malloc, [dmalloc], , AC_MSG_ERROR(Libdmalloc library not found. If you enable it you better have it installed.))
  AC_DEFINE(USE_DMALLOC, 1, [Debug memory allocation library])
  AC_DEFINE(DMALLOC_FUNC_CHECK, 1, [Enable dmalloc's malloc function check])
fi

383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
# 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
])

438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
# $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)
AC_DEFINE_UNQUOTED(CONFDIR,"$CONFDIR")
AC_DEFINE([CONFDIR], [], [tor's configuration directory])

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

LOCALSTATEDIR=`eval echo $localstatedir`
AC_SUBST(LOCALSTATEDIR)
460
461
AC_DEFINE_UNQUOTED(LOCALSTATEDIR,"$LOCALSTATEDIR")
AC_DEFINE([LOCALSTATEDIR], [], [Default location to store state files.])
462

463
464
# Set CFLAGS _after_ all the above checks, since our warnings are stricter
# than autoconf's macros like.
465
CFLAGS="$CFLAGS -Wall -g -O2"
466
# Add some more warnings which we use in the cvs version but not in the
467
468
# released versions.  (Some relevant gcc versions can't handle these.)
#CFLAGS="$CFLAGS -W -Wno-unused-parameter -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wwrite-strings -Wredundant-decls"
469
# Add these in when you feel like fun.
470
#CFLAGS="$CFLAGS -Wbad-function-cast -Werror -Wdeclaration-after-statement"
471

472
473
echo "confdir: $CONFDIR"

474
AC_OUTPUT(Makefile tor.spec contrib/tor.sh contrib/torctl contrib/torify contrib/Makefile contrib/osx/Makefile contrib/osx/TorBundleDesc.plist contrib/osx/TorBundleInfo.plist contrib/osx/TorDesc.plist contrib/osx/TorInfo.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)
475
476
477
478
479

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