Merge branch 'master' of black:tinc
[tinc] / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 AC_PREREQ(2.61)
4 AC_INIT
5 AC_CONFIG_SRCDIR([src/tincd.c])
6 AM_INIT_AUTOMAKE(tinc, 1.0.16)
7 AC_CONFIG_HEADERS([config.h])
8 AM_MAINTAINER_MODE
9
10 # Enable GNU extensions.
11 # Define this here, not in acconfig's @TOP@ section, since definitions
12 # in the latter don't make it into the configure-time tests.
13 AC_GNU_SOURCE
14 AC_DEFINE([__USE_BSD], 1, [Enable BSD extensions])
15
16 dnl Checks for programs.
17 AC_PROG_CC_C99
18 AC_PROG_CPP
19 AC_PROG_INSTALL
20 AC_PROG_LN_S
21 AC_PROG_RANLIB
22
23 dnl Check and set OS
24
25 AC_CANONICAL_HOST
26
27 case $host_os in
28   *linux*)
29     AC_DEFINE(HAVE_LINUX, 1, [Linux])
30     [ rm -f src/device.c; ln -sf linux/device.c src/device.c ]
31   ;;
32   *freebsd*)
33     AC_DEFINE(HAVE_FREEBSD, 1, [FreeBSD])
34     [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ]
35   ;;
36   *darwin*)
37     AC_DEFINE(HAVE_DARWIN, 1, [Darwin (MacOS/X)])
38     [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ]
39   ;;
40   *solaris*)
41     AC_DEFINE(HAVE_SOLARIS, 1, [Solaris/SunOS])
42     [ rm -f src/device.c; ln -sf solaris/device.c src/device.c ]
43   ;;
44   *openbsd*)
45     AC_DEFINE(HAVE_OPENBSD, 1, [OpenBSD])
46     [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ]
47   ;;
48   *netbsd*)
49     AC_DEFINE(HAVE_NETBSD, 1, [NetBSD])
50     [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ]
51   ;;
52   *dragonfly*)
53     AC_DEFINE(HAVE_DRAGONFLY, 1, [DragonFly])
54     [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ]
55   ;;
56   *bsd*)
57     AC_MSG_WARN("Unknown BSD variant, tinc might not compile or work!")
58     AC_DEFINE(HAVE_BSD, 1, [Unknown BSD variant])
59     [ rm -f src/device.c; ln -sf bsd/device.c src/device.c ]
60   ;;
61   *cygwin*)
62     AC_DEFINE(HAVE_CYGWIN, 1, [Cygwin])
63     [ rm -f src/device.c; ln -sf cygwin/device.c src/device.c ]
64   ;;
65   *mingw*)
66     AC_DEFINE(HAVE_MINGW, 1, [MinGW])
67     [ rm -f src/device.c; cp -f src/mingw/device.c src/device.c ]
68     LIBS="$LIBS -lws2_32 -lgdi32 -lcrypt32"
69   ;;
70   *)
71     AC_MSG_ERROR("Unknown operating system.")
72   ;;
73 esac
74
75 AC_ARG_ENABLE(uml,
76   AS_HELP_STRING([--enable-uml], [enable support for User Mode Linux]),
77   [ AC_DEFINE(ENABLE_UML, 1, [Support for UML])
78     uml=true
79   ]
80 )
81
82 AC_ARG_ENABLE(vde,
83   AS_HELP_STRING([--enable-vde], [enable support for Virtual Distributed Ethernet]),
84   [ AC_CHECK_HEADERS(libvdeplug_dyn.h, [], [AC_MSG_ERROR([VDE plug header files not found.]); break])
85     AC_DEFINE(ENABLE_VDE, 1, [Support for VDE])
86     vde=true
87   ]
88 )
89
90 AC_ARG_ENABLE(tunemu,
91   AS_HELP_STRING([--enable-tunemu], [enable support for the tunemu driver]),
92   [ AC_DEFINE(ENABLE_TUNEMU, 1, [Support for tunemu])
93     tunemu=true
94   ]
95 )
96
97 AC_ARG_WITH(windows2000,
98   AS_HELP_STRING([--with-windows2000], [compile with support for Windows 2000. This disables support for tunneling over existing IPv6 networks.]),
99   [AC_DEFINE(WITH_WINDOWS2000, 1, [Compile with support for Windows 2000])]
100 )
101
102 AM_CONDITIONAL(UML, test "$uml" = true)
103 AM_CONDITIONAL(VDE, test "$vde" = true)
104 AM_CONDITIONAL(TUNEMU, test "$tunemu" = true)
105
106 AC_CACHE_SAVE
107
108 if test -d /sw/include ; then
109   CPPFLAGS="$CPPFLAGS -I/sw/include"
110 fi
111 if test -d /sw/lib ; then
112   LIBS="$LIBS -L/sw/lib"
113 fi
114
115 dnl Checks for libraries.
116
117 dnl Checks for header files.
118 dnl We do this in multiple stages, because unlike Linux all the other operating systems really suck and don't include their own dependencies.
119
120 AC_HEADER_STDC
121 AC_CHECK_HEADERS([stdbool.h syslog.h sys/file.h sys/ioctl.h sys/mman.h sys/param.h sys/resource.h sys/socket.h sys/time.h time.h sys/uio.h sys/wait.h netdb.h arpa/inet.h dirent.h])
122 AC_CHECK_HEADERS([net/if.h net/if_types.h linux/if_tun.h net/if_tun.h net/tun/if_tun.h net/if_tap.h net/tap/if_tap.h net/ethernet.h net/if_arp.h netinet/in_systm.h netinet/in.h netinet/in6.h],
123   [], [], [#include "have.h"]
124 )
125 AC_CHECK_HEADERS([netinet/if_ether.h netinet/ip.h netinet/ip6.h],
126   [], [], [#include "have.h"]
127 )
128 AC_CHECK_HEADERS([netinet/tcp.h netinet/ip_icmp.h netinet/icmp6.h],
129   [], [], [#include "have.h"]
130 )
131
132 dnl Checks for typedefs, structures, and compiler characteristics.
133 AC_C_CONST
134 AC_C_VOLATILE
135 AC_TYPE_PID_T
136 AC_TYPE_SIZE_T
137 AC_HEADER_TIME
138 AC_STRUCT_TM
139
140 tinc_ATTRIBUTE(__malloc__)
141
142 AC_CHECK_TYPES([socklen_t, struct ether_header, struct arphdr, struct ether_arp, struct in_addr, struct addrinfo, struct ip, struct icmp, struct in6_addr, struct sockaddr_in6, struct ip6_hdr, struct icmp6_hdr, struct nd_neighbor_solicit, struct nd_opt_hdr], , ,
143   [#include "have.h"]
144 )
145
146 dnl Checks for library functions.
147 AC_FUNC_MEMCMP
148 AC_FUNC_ALLOCA
149 AC_TYPE_SIGNAL
150 AC_CHECK_FUNCS([asprintf daemon fchmod flock ftime fork get_current_dir_name gettimeofday mlockall pselect putenv random select strdup strerror strsignal strtol system unsetenv usleep vsyslog writev],
151   [], [], [#include "have.h"]
152 )
153 AC_FUNC_MALLOC
154 AC_FUNC_REALLOC
155
156 dnl Support for SunOS
157
158 AC_CHECK_FUNC(socket, [], [
159   AC_CHECK_LIB(socket, connect)
160 ])
161 AC_CHECK_FUNC(gethostbyname, [], [
162   AC_CHECK_LIB(nsl, gethostbyname)
163 ])
164
165 AC_CHECK_DECLS([freeaddrinfo, gai_strerror, getaddrinfo, getnameinfo],
166   [], [], [#include "have.h"]
167 )
168
169 AC_CACHE_SAVE
170
171 dnl These are defined in files in m4/
172
173 tinc_ZLIB
174 tinc_LZO
175 tinc_OPENSSL
176
177 dnl Check if support for jumbograms is requested 
178 AC_ARG_ENABLE(jumbograms,
179   AS_HELP_STRING([--enable-jumbograms], [enable support for jumbograms (packets up to 9000 bytes)]),
180   [ AC_DEFINE(ENABLE_JUMBOGRAMS, 1, [Support for jumbograms (packets up to 9000 bytes)]) ]
181 )
182
183 AC_SUBST(INCLUDES)
184
185 AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile lib/Makefile m4/Makefile])
186
187 AC_OUTPUT