2007-02-08 Marcus Brinkmann <marcus@g10code.de>
[oftpd.git] / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3
4 AC_INIT([oftpd], [0.3.7-wk3], [bug-oftpd@g10code.com])
5 AC_CONFIG_SRCDIR(src/file_list.c)
6 AM_CONFIG_HEADER(src/config.h)
7 AM_INIT_AUTOMAKE
8
9 dnl Checks for programs.
10 AC_PROG_AWK
11 AC_PROG_CC
12 AC_PROG_INSTALL
13 AC_PROG_LN_S
14
15 dnl Checks for header files.
16 AC_HEADER_STDC
17 AC_CHECK_HEADERS(fcntl.h limits.h sys/time.h syslog.h unistd.h sys/types.h sys/sendfile.h)
18
19 dnl Check for ss_family
20 AC_EGREP_CPP(__ss_family,
21 [#include<sys/socket.h>
22 ],,AC_DEFINE([HAVE_NEW_SS_FAMILY], 1,
23         [new ss_family or old (meaning __ss_family) in sockaddr structure]))
24
25 dnl Checks for typedefs, structures, and compiler characteristics.
26 AC_C_CONST
27 AC_TYPE_MODE_T
28 AC_TYPE_OFF_T
29 AC_TYPE_SIZE_T
30 AC_STRUCT_ST_BLOCKS
31 AC_STRUCT_ST_RDEV
32 AC_HEADER_STAT
33 AC_HEADER_TIME
34 AC_STRUCT_ST_BLOCKS
35 AC_STRUCT_ST_RDEV
36 AC_STRUCT_TM
37
38 # We need the size of some types to be able to detect overflows 
39 # in parsing numeric values.
40 AC_CHECK_SIZEOF(off_t)
41 AC_CHECK_SIZEOF(unsigned long)
42 AC_CHECK_SIZEOF(unsigned long long)
43
44 dnl Checks for library functions.
45 AC_FUNC_ALLOCA
46 AC_FUNC_MEMCMP
47 AC_TYPE_SIGNAL
48 AC_FUNC_STRFTIME
49 AC_CHECK_FUNCS(getcwd gettimeofday select socket strerror localtime_r gmtime_r)
50 AC_CHECK_FUNCS(strerror_r)
51 dnl AC_CHECK_LIB(pthread, pthread_create)
52 dnl AC_SEARCH_LIBS(pthread_create, [ pthread pthreads thread threads ])
53 AC_SEARCH_LIBS(socket, socket)
54 AC_SEARCH_LIBS(inet_ntoa, nsl)
55 AC_CHECK_FUNCS(inet_aton)
56
57
58 dnl check for efficient file transfer mechanisms (i.e. sendfile())
59 have_sendfile=no
60 AC_TRY_LINK([
61 #include <sys/types.h>
62 #include <sys/socket.h>
63 #include <unistd.h>
64 ], [
65 off_t offset;
66 sendfile(0, 1, &offset);
67 ], 
68 AC_DEFINE([HAVE_LINUX_SENDFILE], 1, [Linux-style sendfile() supported])
69 AC_DEFINE([HAVE_SENDFILE], 1, [sendfile() supported])
70 have_sendfile=yes
71 )
72 if test $have_sendfile = no; then
73 AC_TRY_LINK([
74 #include <sys/types.h>
75 #include <sys/socket.h>
76 #include <unistd.h>
77 ], [
78 off_t offset;
79 off_t sbytes;
80 sendfile(0, 1, &offset, 0, NULL, &sbytes, 0);
81 ],
82 dnl sendfile() seems broken on FreeBSD, so for now we'll just omit it
83 dnl AC_DEFINE(HAVE_FREEBSD_SENDFILE) AC_DEFINE(HAVE_SENDFILE) have_sendfile=yes
84 )
85 fi
86
87
88
89 dnl decipher pthread compilation model
90
91 dnl first, try linking a threaded application with "-pthread", 
92 dnl which will work on FreeBSD (and OpenBSD) systems
93 save_LDFLAGS="$LDFLAGS"
94 LDFLAGS="-pthread $LDFLAGS"
95 AC_TRY_LINK([ 
96 #include <pthread.h>
97 ], [
98 pthread_self();
99 ],
100 ,
101 LDFLAGS="$save_LDFLAGS"
102 )
103
104 dnl then, try looking in various libraries, which will work on other systems
105 AC_SEARCH_LIBS(pthread_self, [ pthread pthreads thread threads ])
106
107 dnl add reentrant flags
108 CFLAGS="$CFLAGS -D_REENTRANT -D_THREAD_SAFE"
109
110 dnl Check whether to enable IPv6 support
111 AC_ARG_ENABLE([ipv6],[  --enable-ipv6           Enable IPv6 support (disabled by default)],
112               CFLAGS="$CFLAGS -DINET6",)
113
114
115 AH_BOTTOM([
116 /* Size of the buffer used for strerror_r. */
117 #define ERRBUF_SIZE 256
118 ])
119
120
121 AC_SUBST(HAVE_NEW_SS_FAMILY)
122
123 AC_CONFIG_FILES([Makefile src/Makefile man/Makefile])
124 AC_OUTPUT