1dnl Process this file with autoconf to produce a configure script. 2 3AC_PREREQ(2.61) 4AC_INIT([tinc], [1.0.36]) 5AC_CONFIG_SRCDIR([src/tincd.c]) 6AM_INIT_AUTOMAKE([1.11 check-news std-options subdir-objects nostdinc silent-rules -Wall]) 7AC_CONFIG_HEADERS([config.h]) 8AC_CONFIG_MACRO_DIR([m4]) 9AM_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. 14AC_GNU_SOURCE 15AC_DEFINE([__USE_BSD], 1, [Enable BSD extensions]) 16 17dnl Checks for programs. 18AC_PROG_CC_C99 19AC_PROG_CPP 20AC_PROG_INSTALL 21 22AM_PROG_CC_C_O 23 24dnl Check and set OS 25 26AC_CANONICAL_HOST 27 28case $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 ;; 74esac 75 76AC_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 87AC_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 99AC_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 110AC_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 117AC_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 123AS_IF([test "x$with_systemd" = "xyes"], [systemd_path="\${libdir}/systemd/system"], 124 [AS_IF([test "x$with_systemd" = "xno"], [systemd=false])]) 125 126AC_SUBST(systemd_path, $systemd_path) 127 128AM_CONDITIONAL(LINUX, test "$linux" = true) 129AM_CONDITIONAL(BSD, test "$bsd" = true) 130AM_CONDITIONAL(SOLARIS, test "$solaris" = true) 131AM_CONDITIONAL(MINGW, test "$mingw" = true) 132AM_CONDITIONAL(CYGWIN, test "$cygwin" = true) 133AM_CONDITIONAL(UML, test "$uml" = true) 134AM_CONDITIONAL(VDE, test "$vde" = true) 135AM_CONDITIONAL(TUNEMU, test "$tunemu" = true) 136AM_CONDITIONAL(WITH_SYSTEMD, test "$systemd" = true) 137 138AC_CACHE_SAVE 139 140if test -d /sw/include ; then 141 CPPFLAGS="$CPPFLAGS -I/sw/include" 142fi 143if test -d /sw/lib ; then 144 LIBS="$LIBS -L/sw/lib" 145fi 146 147dnl Compiler hardening flags 148dnl No -fstack-protector-all because it doesn't work on all platforms or architectures. 149 150AX_CFLAGS_WARN_ALL(CFLAGS) 151 152AC_ARG_ENABLE([hardening], AS_HELP_STRING([--disable-hardening], [disable compiler and linker hardening flags])) 153AS_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 172dnl Checks for libraries. 173 174dnl Checks for header files. 175dnl We do this in multiple stages, because unlike Linux all the other operating systems really suck and don't include their own dependencies. 176 177AC_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]) 178AC_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) 181AC_CHECK_HEADERS([netinet/if_ether.h netinet/ip.h netinet/ip6.h resolv.h], 182 [], [], [#include "$srcdir/src/have.h"] 183) 184AC_CHECK_HEADERS([netinet/tcp.h netinet/ip_icmp.h netinet/icmp6.h], 185 [], [], [#include "$srcdir/src/have.h"] 186) 187 188dnl Checks for typedefs, structures, and compiler characteristics. 189AC_TYPE_PID_T 190 191tinc_ATTRIBUTE(__malloc__) 192 193AC_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 197dnl Checks for library functions. 198AC_TYPE_SIGNAL 199AC_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 203AC_CHECK_FUNC(getopt_long, [getopt=true; AC_DEFINE(HAVE_GETOPT_LONG, 1, [getopt_long()])], [getopt=false]) 204AM_CONDITIONAL(GETOPT, test "$getopt" = true) 205 206dnl Support for SunOS 207 208AC_CHECK_FUNC(socket, [], [ 209 AC_CHECK_LIB(socket, connect) 210]) 211AC_CHECK_FUNC(gethostbyname, [], [ 212 AC_CHECK_LIB(nsl, gethostbyname) 213]) 214 215AC_CHECK_DECLS([freeaddrinfo, gai_strerror, getaddrinfo, getnameinfo], 216 [], [], [#include "$srcdir/src/have.h"] 217) 218 219AC_CHECK_DECLS([res_init], [AC_CHECK_LIB(resolv, res_init)], [], [ 220 #include <netinet/in.h> 221 #include <resolv.h> 222]) 223 224AC_CACHE_SAVE 225 226dnl These are defined in files in m4/ 227 228tinc_ZLIB 229tinc_LZO 230tinc_OPENSSL 231 232dnl Check if support for jumbograms is requested 233AC_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 240dnl Ensure runstatedir is set if we are using a version of autoconf that does not support it 241if test "x$runstatedir" = "x"; then 242 AC_SUBST([runstatedir], ['${localstatedir}/run']) 243fi 244 245AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile systemd/Makefile]) 246 247AC_OUTPUT 248