configure.in 8.49 KB
Newer Older
1
2

AC_INIT
3
AM_INIT_AUTOMAKE(tor, 0.0.9pre5)
4
5
AM_CONFIG_HEADER(orconfig.h)

6
7
AC_CANONICAL_HOST

8
9
10
if test -f /etc/redhat-release; then
    CFLAGS="$CFLAGS -I/usr/kerberos/include"
fi
11
12
13
14

AC_ARG_ENABLE(debug,
[  --enable-debug          compiles with debugging info],
[if test x$enableval = xyes; then
15
    CFLAGS="$CFLAGS -g"
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
fi])

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
        ]
)

33
AC_SEARCH_LIBS(socket, [socket])
34
AC_SEARCH_LIBS(gethostbyname, [nsl])
35

36
37
38
39
40
41
42
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, [
43
        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
44
45
                CPPFLAGS="$saved_CPPFLAGS"
                LDFLAGS="$saved_LDFLAGS"
46
47
                LIBS="$saved_LIBS -lssl -lcrypto"

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
                # 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
                        # Try to use $ssldir/lib if it exists, otherwise 
                        # $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
                        # Try to use $ssldir/include if it exists, otherwise 
                        # $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>
int main(void) 
{
        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
101
                AC_MSG_ERROR([Could not find working OpenSSL library, please install or check config.log])
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
        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
                # Try to use $ssldir/lib if it exists, otherwise 
                # $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
                # Try to use $ssldir/include if it exists, otherwise 
                # $ssldir
                if test -d "$ssldir/include" ; then
                        CPPFLAGS="-I$ssldir/include $saved_CPPFLAGS"
                else
                        CPPFLAGS="-I$ssldir $saved_CPPFLAGS"
                fi
        fi
fi
136
LIBS="$saved_LIBS"
137

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

140
AC_CHECK_HEADERS(unistd.h string.h signal.h netdb.h ctype.h poll.h sys/stat.h sys/poll.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 zlib.h, , AC_MSG_WARN(some headers were not found, compilation may fail))
141
142
143

dnl These headers are not essential

144
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)
Felipe Bergo's avatar
Felipe Bergo committed
145

146
AC_CHECK_FUNCS(gettimeofday ftime socketpair uname inet_aton strptime getrlimit setrlimit strlcat strlcpy strtoull)
147

148
149
AC_CHECK_MEMBERS([struct timeval.tv_sec])

150
151
152
dnl In case we aren't given a working stdint.h, we'll need to grow our own.
dnl Watch out.

153
154
155
156
157
158
159
160
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)
161
162
AC_CHECK_SIZEOF(intptr_t)
AC_CHECK_SIZEOF(uintptr_t)
163

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

166
167
168
169
170
171
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)
172
AC_CHECK_SIZEOF(void *)
173

174
175
176
177
178
179
180
# Now, let's see about alignment requirements.  On some platforms, we override
# the default.
case $host in
 ia64-*-* | arm-*-* )
    tor_cv_unaligned_ok=no
    ;;
 *)
181
182
183
184
185
186
187
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])])
188
189
esac

Nick Mathewson's avatar
Nick Mathewson committed
190
if test $tor_cv_unaligned_ok = yes; then
191
192
193
194
  AC_DEFINE([UNALIGNED_INT_ACCESS_OK], 1,
            [Define to 1 iff unaligned int access is allowed])
fi

195
196
197
198
199
# 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>
int main () { char *p1,*p2; p1=NULL; memset(&p2,0,sizeof(p2));
200
return memcmp(&p1,&p2,sizeof(char*))?1:0; }]])],
201
202
203
204
205
206
207
208
209
       [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

210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# $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)

233
234
# Set CFLAGS _after_ all the above checks, since our warnings are stricter
# than autoconf's macros like.
235
236
237
CFLAGS="$CFLAGS -Wall -W -Wno-unused-parameter -Wfloat-equal -Wundef -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -g -O2"
# Add some more warnings which we use in the cvs version but not in the
# released versions.
238
#CFLAGS="$CFLAGS -Wwrite-strings -Wredundant-decls"
239
240

# Add these in when you feel like fun.
241
# -Wbad-function-cast -Werror  -Wdeclaration-after-statement
242

243
244
echo "confdir: $CONFDIR"

245
AC_OUTPUT(Makefile tor.spec contrib/tor.sh contrib/torify contrib/Makefile 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)