Fix segfault when dest->mtu is 0.
[oweals/tinc.git] / configure.ac
1 dnl Process this file with autoconf to produce a configure script.
2
3 AC_PREREQ(2.61)
4 AC_INIT([tinc], [1.0.35])
5 AC_CONFIG_SRCDIR([src/tincd.c])
6 AM_INIT_AUTOMAKE([1.11 check-news std-options subdir-objects nostdinc silent-rules -Wall])
7 AC_CONFIG_HEADERS([config.h])
8 AC_CONFIG_MACRO_DIR([m4])
9 AM_SILENT_RULES([yes])
10
11 # Enable GNU extensions.
12 # Define this here, not in acconfig's @TOP@ section, since definitions
13 # in the latter don't make it into the configure-time tests.
14 AC_GNU_SOURCE
15 AC_DEFINE([__USE_BSD], 1, [Enable BSD extensions])
16
17 dnl Checks for programs.
18 AC_PROG_CC_C99
19 AC_PROG_CPP
20 AC_PROG_INSTALL
21
22 AM_PROG_CC_C_O
23
24 dnl Check and set OS
25
26 AC_CANONICAL_HOST
27
28 case $host_os in
29   *linux*)
30     linux=true
31     AC_DEFINE(HAVE_LINUX, 1, [Linux])
32   ;;
33   *freebsd*)
34     bsd=true
35     AC_DEFINE(HAVE_FREEBSD, 1, [FreeBSD])
36   ;;
37   *darwin*)
38     bsd=true
39     AC_DEFINE(HAVE_DARWIN, 1, [Darwin (MacOS/X)])
40   ;;
41   *solaris*)
42     solaris=true
43     AC_DEFINE(HAVE_SOLARIS, 1, [Solaris/SunOS])
44   ;;
45   *openbsd*)
46     bsd=true
47     AC_DEFINE(HAVE_OPENBSD, 1, [OpenBSD])
48   ;;
49   *netbsd*)
50     bsd=true
51     AC_DEFINE(HAVE_NETBSD, 1, [NetBSD])
52   ;;
53   *dragonfly*)
54     bsd=true
55     AC_DEFINE(HAVE_DRAGONFLY, 1, [DragonFly])
56   ;;
57   *bsd*)
58     bsd=true
59     AC_MSG_WARN("Unknown BSD variant, tinc might not compile or work!")
60     AC_DEFINE(HAVE_BSD, 1, [Unknown BSD variant])
61   ;;
62   *cygwin*)
63     cygwin=true
64     AC_DEFINE(HAVE_CYGWIN, 1, [Cygwin])
65   ;;
66   *mingw*)
67     mingw=true
68     AC_DEFINE(HAVE_MINGW, 1, [MinGW])
69     LIBS="$LIBS -lws2_32 -lgdi32 -lcrypt32"
70   ;;
71   *)
72     AC_MSG_ERROR("Unknown operating system.")
73   ;;
74 esac
75
76 AC_ARG_ENABLE(uml,
77   AS_HELP_STRING([--enable-uml], [enable support for User Mode Linux]),
78   [ AS_IF([test "x$enable_uml" = "xyes"],
79       [ AC_DEFINE(ENABLE_UML, 1, [Support for UML])
80         uml=true
81       ],
82       [uml=false])
83   ],
84   [uml=false]
85 )
86
87 AC_ARG_ENABLE(vde,
88   AS_HELP_STRING([--enable-vde], [enable support for Virtual Distributed Ethernet]),
89   [ AS_IF([test "x$enable_vde" = "xyes"],
90       [ AC_CHECK_HEADERS(libvdeplug_dyn.h, [], [AC_MSG_ERROR([VDE plug header files not found.]); break])
91         AC_DEFINE(ENABLE_VDE, 1, [Support for VDE])
92         vde=true
93       ],
94       [vde=false])
95   ],
96   [vde=false]
97 )
98
99 AC_ARG_ENABLE(tunemu,
100   AS_HELP_STRING([--enable-tunemu], [enable support for the tunemu driver]),
101   [ AS_IF([test "x$enable_tunemu" = "xyes"],
102       [ AC_DEFINE(ENABLE_TUNEMU, 1, [Support for tunemu])
103         tunemu=true
104       ],
105       [tunemu=false])
106   ],
107   [tunemu=false]
108 )
109
110 AC_ARG_WITH(windows2000,
111   AS_HELP_STRING([--with-windows2000], [compile with support for Windows 2000. This disables support for tunneling over existing IPv6 networks.]),
112   [ AS_IF([test "x$with_windows2000" = "xyes"],
113       [AC_DEFINE(WITH_WINDOWS2000, 1, [Compile with support for Windows 2000])])
114   ]
115 )
116
117 AC_ARG_WITH(systemd,
118   AS_HELP_STRING([--with-systemd@<:@=DIR@:>@], [install systemd service files @<:@to DIR if specified@:>@]),
119   [ systemd=true; systemd_path="$with_systemd" ],
120   [ systemd=false ]
121 )
122
123 AS_IF([test "x$with_systemd" = "xyes"], [systemd_path="\${libdir}/systemd/system"],
124       [AS_IF([test "x$with_systemd" = "xno"], [systemd=false])])
125
126 AC_SUBST(systemd_path, $systemd_path)
127
128 AM_CONDITIONAL(LINUX, test "$linux" = true)
129 AM_CONDITIONAL(BSD, test "$bsd" = true)
130 AM_CONDITIONAL(SOLARIS, test "$solaris" = true)
131 AM_CONDITIONAL(MINGW, test "$mingw" = true)
132 AM_CONDITIONAL(CYGWIN, test "$cygwin" = true)
133 AM_CONDITIONAL(UML, test "$uml" = true)
134 AM_CONDITIONAL(VDE, test "$vde" = true)
135 AM_CONDITIONAL(TUNEMU, test "$tunemu" = true)
136 AM_CONDITIONAL(WITH_SYSTEMD, test "$systemd" = true)
137
138 AC_CACHE_SAVE
139
140 if test -d /sw/include ; then
141   CPPFLAGS="$CPPFLAGS -I/sw/include"
142 fi
143 if test -d /sw/lib ; then
144   LIBS="$LIBS -L/sw/lib"
145 fi
146
147 dnl Compiler hardening flags
148 dnl No -fstack-protector-all because it doesn't work on all platforms or architectures.
149
150 AX_CFLAGS_WARN_ALL(CFLAGS)
151
152 AC_ARG_ENABLE([hardening], AS_HELP_STRING([--disable-hardening], [disable compiler and linker hardening flags]))
153 AS_IF([test "x$enable_hardening" != "xno"],
154   [AX_CHECK_COMPILE_FLAG([-DFORTIFY_SOURCE=2], [CPPFLAGS="$CPPFLAGS -DFORTIFY_SOURCE=2"])
155    AX_CHECK_COMPILE_FLAG([-fwrapv], [CPPFLAGS="$CPPFLAGS -fwrapv"],
156    AX_CHECK_COMPILE_FLAG([-fno-strict-overflow], [CPPFLAGS="$CPPFLAGS -fno-strict-overflow"]))
157    case $host_os in
158      *mingw*)
159        AX_CHECK_LINK_FLAG([-Wl,--dynamicbase], [LDFLAGS="$LDFLAGS -Wl,--dynamicbase"])
160        AX_CHECK_LINK_FLAG([-Wl,--nxcompat], [LDFLAGS="$LDFLAGS -Wl,--nxcompat"])
161        ;;
162      *)
163        AX_CHECK_COMPILE_FLAG([-fPIE], [CPPFLAGS="$CPPFLAGS -fPIE"])
164        AX_CHECK_LINK_FLAG([-pie], [LDFLAGS="$LDFLAGS -pie"])
165        ;;
166    esac
167    AX_CHECK_LINK_FLAG([-Wl,-z,relro], [LDFLAGS="$LDFLAGS -Wl,-z,relro"])
168    AX_CHECK_LINK_FLAG([-Wl,-z,now], [LDFLAGS="$LDFLAGS -Wl,-z,now"])
169   ]
170 );
171
172 dnl Checks for libraries.
173
174 dnl Checks for header files.
175 dnl We do this in multiple stages, because unlike Linux all the other operating systems really suck and don't include their own dependencies.
176
177 AC_CHECK_HEADERS([syslog.h sys/file.h sys/ioctl.h sys/mman.h sys/param.h sys/resource.h sys/socket.h sys/time.h sys/uio.h sys/wait.h netdb.h arpa/inet.h arpa/nameser.h dirent.h getopt.h])
178 AC_CHECK_HEADERS([net/if.h net/if_types.h linux/if_tun.h net/if_tun.h net/if_utun.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 netpacket/packet.h],
179   [], [], [#include "$srcdir/src/have.h"]
180 )
181 AC_CHECK_HEADERS([netinet/if_ether.h netinet/ip.h netinet/ip6.h resolv.h],
182   [], [], [#include "$srcdir/src/have.h"]
183 )
184 AC_CHECK_HEADERS([netinet/tcp.h netinet/ip_icmp.h netinet/icmp6.h],
185   [], [], [#include "$srcdir/src/have.h"]
186 )
187
188 dnl Checks for typedefs, structures, and compiler characteristics.
189 AC_TYPE_PID_T
190
191 tinc_ATTRIBUTE(__malloc__)
192
193 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], , ,
194   [#include "$srcdir/src/have.h"]
195 )
196
197 dnl Checks for library functions.
198 AC_TYPE_SIGNAL
199 AC_CHECK_FUNCS([asprintf daemon fchmod flock fork gettimeofday mlockall pselect putenv strsignal system unsetenv usleep vsyslog devname fdevname],
200   [], [], [#include "$srcdir/src/have.h"]
201 )
202
203 AC_CHECK_FUNC(getopt_long, [getopt=true; AC_DEFINE(HAVE_GETOPT_LONG, 1, [getopt_long()])], [getopt=false])
204 AM_CONDITIONAL(GETOPT, test "$getopt" = true)
205
206 dnl Support for SunOS
207
208 AC_CHECK_FUNC(socket, [], [
209   AC_CHECK_LIB(socket, connect)
210 ])
211 AC_CHECK_FUNC(gethostbyname, [], [
212   AC_CHECK_LIB(nsl, gethostbyname)
213 ])
214
215 AC_CHECK_DECLS([freeaddrinfo, gai_strerror, getaddrinfo, getnameinfo],
216   [], [], [#include "$srcdir/src/have.h"]
217 )
218
219 AC_CHECK_DECLS([res_init], [AC_CHECK_LIB(resolv, res_init)], [], [
220   #include <netinet/in.h>
221   #include <resolv.h>
222 ])
223
224 AC_CACHE_SAVE
225
226 dnl These are defined in files in m4/
227
228 tinc_ZLIB
229 tinc_LZO
230 tinc_OPENSSL
231
232 dnl Check if support for jumbograms is requested
233 AC_ARG_ENABLE(jumbograms,
234   AS_HELP_STRING([--enable-jumbograms], [enable support for jumbograms (packets up to 9000 bytes)]),
235   [ AS_IF([test "x$enable_jumbograms" = "xyes"],
236       [ AC_DEFINE(ENABLE_JUMBOGRAMS, 1, [Support for jumbograms (packets up to 9000 bytes)]) ])
237   ]
238 )
239
240 dnl Ensure runstatedir is set if we are using a version of autoconf that does not suppport it
241 if test "x$runstatedir" = "x"; then
242   AC_SUBST([runstatedir], ['${localstatedir}/run'])
243 fi
244
245 AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile systemd/Makefile])
246
247 AC_OUTPUT