OpenVPN: update to 2.3.5
[tomato.git] / release / src / router / openvpn / configure.ac
blob0e0fae578ccf088399d17f896366ed45bd3b930f
1 dnl  OpenVPN -- An application to securely tunnel IP networks
2 dnl             over a single UDP port, with support for SSL/TLS-based
3 dnl             session authentication and key exchange,
4 dnl             packet encryption, packet authentication, and
5 dnl             packet compression.
6 dnl
7 dnl  Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
8 dnl  Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com>
9 dnl
10 dnl  This program is free software; you can redistribute it and/or modify
11 dnl  it under the terms of the GNU General Public License as published by
12 dnl  the Free Software Foundation; either version 2 of the License, or
13 dnl  (at your option) any later version.
14 dnl
15 dnl  This program is distributed in the hope that it will be useful,
16 dnl  but WITHOUT ANY WARRANTY; without even the implied warranty of
17 dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 dnl  GNU General Public License for more details.
19 dnl
20 dnl  You should have received a copy of the GNU General Public License
21 dnl  along with this program (see the file COPYING included with this
22 dnl  distribution); if not, write to the Free Software Foundation, Inc.,
23 dnl  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25 dnl Process this file with autoconf to produce a configure script.
27 AC_PREREQ(2.59)
29 m4_include(version.m4)
30 AC_INIT([PRODUCT_NAME], [PRODUCT_VERSION], [PRODUCT_BUGREPORT], [PRODUCT_TARNAME])
31 m4_include(compat.m4)
32 AC_DEFINE([OPENVPN_VERSION_RESOURCE], [PRODUCT_VERSION_RESOURCE], [Version in windows resource format])
34 AC_CONFIG_AUX_DIR([.])
35 AC_CONFIG_HEADERS([config.h])
36 AC_CONFIG_SRCDIR([src/openvpn/syshead.h])
37 AC_CONFIG_MACRO_DIR([m4])
38 AM_INIT_AUTOMAKE
39 AC_CANONICAL_HOST
40 AC_USE_SYSTEM_EXTENSIONS
42 AC_ARG_ENABLE(
43         [lzo],
44         [AS_HELP_STRING([--disable-lzo], [disable LZO compression support @<:@default=yes@:>@])],
45         ,
46         [enable_lzo="yes"]
49 AC_ARG_ENABLE(
50         [lzo-stub],
51         [AS_HELP_STRING([--enable-lzo-stub], [don't compile LZO compression support but still allow limited interoperability with LZO-enabled peers @<:@default=no@:>@])],
52         ,
53         [enable_lzo_stub="no"]
56 AC_ARG_ENABLE(
57         [crypto],
58         [AS_HELP_STRING([--disable-crypto], [disable crypto support @<:@default=yes@:>@])],
59         ,
60         [enable_crypto="yes"]
63 AC_ARG_ENABLE(
64         [ofb-cfb],
65         [AS_HELP_STRING([--enable-ofb-cfb], [enable support for OFB and CFB cipher modes @<:@default=yes@:>@])],
66         ,
67         [enable_crypto_ofb_cfb="yes"]
70 AC_ARG_ENABLE(
71         [ssl],
72         [AS_HELP_STRING([--disable-ssl], [disable SSL support for TLS-based key exchange @<:@default=yes@:>@])],
73         ,
74         [enable_ssl="yes"]
77 AC_ARG_ENABLE(
78         [x509-alt-username],
79         [AS_HELP_STRING([--enable-x509-alt-username], [enable the --x509-username-field feature @<:@default=no@:>@])],
80         ,
81         [enable_x509_alt_username="no"]
84 AC_ARG_ENABLE(
85         [multi],
86         [AS_HELP_STRING([--disable-multi], [disable client/server support (--mode server + client mode) @<:@default=yes@:>@])],
87         ,
88         [enable_multi="yes"]
91 AC_ARG_ENABLE(
92         [server],
93         [AS_HELP_STRING([--disable-server], [disable server support only (but retain client support) @<:@default=yes@:>@])],
94         ,
95         [enable_server="yes"]
98 AC_ARG_ENABLE(
99         [plugins],
100         [AS_HELP_STRING([--disable-plugins], [disable plug-in support @<:@default=yes@:>@])],
101         ,
102         [enable_plugins="yes"]
105 AC_ARG_ENABLE(
106         [management],
107         [AS_HELP_STRING([--disable-management], [disable management server support @<:@default=yes@:>@])],
108         ,
109         [enable_management="yes"]
112 AC_ARG_ENABLE(
113         [pkcs11],
114         [AS_HELP_STRING([--enable-pkcs11], [enable pkcs11 support @<:@default=no@:>@])],
115         ,
116         [enable_pkcs11="no"]
119 AC_ARG_ENABLE(
120         [socks],
121         [AS_HELP_STRING([--disable-socks], [disable Socks support @<:@default=yes@:>@])],
122         ,
123         [enable_socks="yes"]
126 AC_ARG_ENABLE(
127         [http-proxy],
128         [AS_HELP_STRING([--disable-http-proxy], [disable HTTP proxy support @<:@default=yes@:>@])],
129         ,
130         [enable_http_proxy="yes"]
133 AC_ARG_ENABLE(
134         [fragment],
135         [AS_HELP_STRING([--disable-fragment], [disable internal fragmentation support (--fragment) @<:@default=yes@:>@])],
136         ,
137         [enable_fragment="yes"]
140 AC_ARG_ENABLE(
141         [multihome],
142         [AS_HELP_STRING([--disable-multihome], [disable multi-homed UDP server support (--multihome) @<:@default=yes@:>@])],
143         ,
144         [enable_multihome="yes"]
147 AC_ARG_ENABLE(
148         [port-share],
149         [AS_HELP_STRING([--disable-port-share], [disable TCP server port-share support (--port-share) @<:@default=yes@:>@])],
150         ,
151         [enable_port_share="yes"]
154 AC_ARG_ENABLE(
155         [debug],
156         [AS_HELP_STRING([--disable-debug], [disable debugging support (disable gremlin and verb 7+ messages) @<:@default=yes@:>@])],
157         ,
158         [enable_debug="yes"]
161 AC_ARG_ENABLE(
162         [small],
163         [AS_HELP_STRING([--enable-small], [enable smaller executable size (disable OCC, usage message, and verb 4 parm list) @<:@default=yes@:>@])],
164         ,
165         [enable_small="no"]
168 AC_ARG_ENABLE(
169         [password-save],
170         [AS_HELP_STRING([--enable-password-save], [allow --askpass and --auth-user-pass passwords to be read from a file @<:@default=yes@:>@])],
171         ,
172         [enable_password_save="no"]
175 AC_ARG_ENABLE(
176         [iproute2],
177         [AS_HELP_STRING([--enable-iproute2], [enable support for iproute2 @<:@default=no@:>@])],
178         ,
179         [enable_iproute2="no"]
182 AC_ARG_ENABLE(
183         [def-auth],
184         [AS_HELP_STRING([--disable-def-auth], [disable deferred authentication @<:@default=yes@:>@])],
185         ,
186         [enable_def_auth="yes"]
189 AC_ARG_ENABLE(
190         [pf],
191         [AS_HELP_STRING([--disable-pf], [disable internal packet filter @<:@default=yes@:>@])],
192         ,
193         [enable_pf="yes"]
196 AC_ARG_ENABLE(
197         [plugin-auth-pam],
198         [AS_HELP_STRING([--disable-plugin-auth-pam], [disable auth-pam plugin @<:@default=platform specific@:>@])],
199         ,
200         [
201                 case "$host" in
202                         *-*-openbsd*) enable_plugin_auth_pam="no";;
203                         *-mingw*) enable_plugin_auth_pam="no";;
204                         *) enable_plugin_auth_pam="yes";;
205                 esac
206         ]
209 AC_ARG_ENABLE(
210         [plugin-down-root],
211         [AS_HELP_STRING([--disable-plugin-down-root], [disable down-root plugin @<:@default=platform specific@:>@])],
212         ,
213         [
214                 case "$host" in
215                         *-mingw*) enable_plugin_down_root="no";;
216                         *) enable_plugin_down_root="yes";;
217                 esac
218         ]
221 AC_ARG_ENABLE(
222         [pam-dlopen],
223         [AS_HELP_STRING([--enable-pam-dlopen], [dlopen libpam @<:@default=no@:>@])],
224         ,
225         [enable_pam_dlopen="no"]
228 AC_ARG_ENABLE(
229         [strict],
230         [AS_HELP_STRING([--enable-strict], [enable strict compiler warnings (debugging option) @<:@default=no@:>@])],
231         ,
232         [enable_strict="no"]
235 AC_ARG_ENABLE(
236         [pedantic],
237         [AS_HELP_STRING([--enable-pedantic], [enable pedantic compiler warnings, will not generate a working executable (debugging option) @<:@default=no@:>@])],
238         ,
239         [enable_pedantic="no"]
242 AC_ARG_ENABLE(
243         [strict-options],
244         [AS_HELP_STRING([--enable-strict-options], [enable strict options check between peers (debugging option) @<:@default=no@:>@])],
245         ,
246         [enable_strict_options="no"]
249 AC_ARG_ENABLE(
250         [selinux],
251         [AS_HELP_STRING([--enable-selinux], [enable SELinux support @<:@default=no@:>@])],
252         ,
253         [enable_selinux="no"]
256 AC_ARG_ENABLE(
257         [systemd],
258         [AS_HELP_STRING([--enable-systemd], [enable systemd suppport @<:@default=no@:>@])],
259         ,
260         [enable_systemd="no"]
263 AC_ARG_WITH(
264         [special-build],
265         [AS_HELP_STRING([--with-special-build=STRING], [specify special build string])],
266         [test -n "${withval}" && AC_DEFINE_UNQUOTED([CONFIGURE_SPECIAL_BUILD], ["${withval}"], [special build string])]
269 AC_ARG_WITH(
270         [mem-check],
271         [AS_HELP_STRING([--with-mem-check=TYPE], [build with debug memory checking, TYPE=no|dmalloc|valgrind|ssl @<:@default=no@:>@])],
272         [
273                 case "${withval}" in
274                         dmalloc|valgrind|ssl|no) ;;
275                         *) AC_MSG_ERROR([bad value ${withval} for --mem-check]) ;;
276                 esac
277         ],
278         [with_mem_check="no"]
281 AC_ARG_WITH(
282         [crypto-library],
283         [AS_HELP_STRING([--with-crypto-library=library], [build with the given crypto library, TYPE=openssl|polarssl @<:@default=openssl@:>@])],
284         [
285                 case "${withval}" in 
286                         openssl|polarssl) ;;
287                         *) AC_MSG_ERROR([bad value ${withval} for --with-crypto-library]) ;;
288                 esac
289         ],
290         [with_crypto_library="openssl"]
293 AC_ARG_WITH(
294         [plugindir],
295         [AS_HELP_STRING([--with-plugindir], [plugin directory @<:@default=LIBDIR/openvpn@:>@])],
296         ,
297         [with_plugindir="\$(libdir)/openvpn/plugins"]
301 AC_DEFINE_UNQUOTED([TARGET_ALIAS], ["${host}"], [A string representing our host])
302 case "$host" in
303         *-*-linux*)
304                 AC_DEFINE([TARGET_LINUX], [1], [Are we running on Linux?])
305                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["L"], [Target prefix])
306                 ;;
307         *-*-solaris*)
308                 AC_DEFINE([TARGET_SOLARIS], [1], [Are we running on Solaris?])
309                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["S"], [Target prefix])
310                 ;;
311         *-*-openbsd*)
312                 AC_DEFINE([TARGET_OPENBSD], [1], [Are we running on OpenBSD?])
313                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["O"], [Target prefix])
314                 ;;
315         *-*-freebsd*)
316                 AC_DEFINE([TARGET_FREEBSD], [1], [Are we running on FreeBSD?])
317                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["F"], [Target prefix])
318                 ;;
319         *-*-netbsd*)
320                 AC_DEFINE([TARGET_NETBSD], [1], [Are we running NetBSD?])
321                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["N"], [Target prefix])
322                 ;;
323         *-*-darwin*)
324                 AC_DEFINE([TARGET_DARWIN], [1], [Are we running on Mac OS X?])
325                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["M"], [Target prefix])
326                 have_tap_header="yes"
327                 dnl some Mac OS X tendering (we use vararg macros...)
328                 CPPFLAGS="$CPPFLAGS -no-cpp-precomp"
329                 ;;
330         *-mingw*)
331                 AC_DEFINE([TARGET_WIN32], [1], [Are we running WIN32?])
332                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["W"], [Target prefix])
333                 CPPFLAGS="${CPPFLAGS} -DWIN32_LEAN_AND_MEAN"
334                 CPPFLAGS="${CPPFLAGS} -DNTDDI_VERSION=NTDDI_WINXP -D_WIN32_WINNT=_WIN32_WINNT_WINXP"
335                 WIN32=yes
336                 ;;
337         *-*-dragonfly*)
338                 AC_DEFINE([TARGET_DRAGONFLY], [1], [Are we running on DragonFlyBSD?])
339                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["D"], [Target prefix])
340                 ;;
341         *)
342                 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["X"], [Target prefix])
343                 have_tap_header="yes"
344                 ;;
345 esac
347 PKG_PROG_PKG_CONFIG
348 AC_PROG_CPP
349 AC_PROG_INSTALL
350 AC_PROG_LN_S
351 AC_PROG_SED
352 AC_PROG_MAKE_SET
354 AC_ARG_VAR([IFCONFIG], [full path to ipconfig utility])
355 AC_ARG_VAR([ROUTE], [full path to route utility])
356 AC_ARG_VAR([IPROUTE], [full path to ip utility])
357 AC_ARG_VAR([NETSTAT], [path to netstat utility]) # tests
358 AC_ARG_VAR([MAN2HTML], [path to man2html utility])
359 AC_ARG_VAR([GIT], [path to git utility])
360 AC_ARG_VAR([SYSTEMD_ASK_PASSWORD], [path to systemd-ask-password utility])
361 AC_PATH_PROGS([IFCONFIG], [ifconfig],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
362 AC_PATH_PROGS([ROUTE], [route],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
363 AC_PATH_PROGS([IPROUTE], [ip],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
364 AC_PATH_PROGS([SYSTEMD_ASK_PASSWORD], [systemd-ask-password],, [$PATH:/usr/local/bin:/usr/bin:/bin])
365 AC_CHECK_PROGS([NETSTAT], [netstat], [netstat], [$PATH:/usr/local/sbin:/usr/sbin:/sbin:/etc]) # tests
366 AC_CHECK_PROGS([MAN2HTML], [man2html])
367 AC_CHECK_PROGS([GIT], [git]) # optional
368 AC_DEFINE_UNQUOTED([IFCONFIG_PATH], ["$IFCONFIG"], [Path to ifconfig tool])
369 AC_DEFINE_UNQUOTED([IPROUTE_PATH], ["$IPROUTE"], [Path to iproute tool])
370 AC_DEFINE_UNQUOTED([ROUTE_PATH], ["$ROUTE"], [Path to route tool])
371 AC_DEFINE_UNQUOTED([SYSTEMD_ASK_PASSWORD_PATH], ["$SYSTEMD_ASK_PASSWORD"], [Path to systemd-ask-password tool])
374 # Libtool
376 ifdef(
377         [LT_INIT],
378         [
379                 LT_INIT([win32-dll])
380                 LT_LANG([Windows Resource])
381         ],
382         [
383                 AC_LIBTOOL_WIN32_DLL
384                 AC_LIBTOOL_RC
385                 AC_PROG_LIBTOOL
386         ]
389 AC_C_CONST
390 AC_C_INLINE
391 AC_C_VOLATILE
392 AC_TYPE_OFF_T
393 AC_TYPE_PID_T
394 AC_TYPE_SIZE_T
395 AC_TYPE_UID_T
396 AC_TYPE_INT8_T
397 AC_TYPE_INT16_T
398 AC_TYPE_INT32_T
399 AC_TYPE_INT64_T
400 AC_TYPE_UINT8_T
401 AC_TYPE_UINT16_T
402 AC_TYPE_UINT32_T
403 AC_TYPE_UINT64_T
404 AC_TYPE_SIGNAL
405 AX_CPP_VARARG_MACRO_ISO
406 AX_CPP_VARARG_MACRO_GCC
407 AX_TYPE_SOCKLEN_T
408 AX_EMPTY_ARRAY
409 AC_CHECK_SIZEOF([unsigned int])
410 AC_CHECK_SIZEOF([unsigned long])
411 AC_CHECK_HEADERS([ \
412         stdio.h stdarg.h stdbool.h limits.h \
413         time.h errno.h fcntl.h io.h direct.h \
414         ctype.h sys/types.h sys/socket.h \
415         signal.h unistd.h dlfcn.h \
416         netinet/in.h netinet/in_systm.h \
417         netinet/tcp.h arpa/inet.h netdb.h \
418         windows.h winsock2.h ws2tcpip.h \
420 AC_CHECK_HEADERS([ \
421         sys/time.h sys/ioctl.h sys/stat.h \
422         sys/mman.h sys/file.h sys/wait.h \
423         unistd.h signal.h libgen.h stropts.h \
424         syslog.h pwd.h grp.h \
425         sys/sockio.h sys/uio.h linux/sockios.h \
426         linux/types.h sys/poll.h sys/epoll.h err.h \
429 SOCKET_INCLUDES="
430 #ifdef HAVE_STDLIB_H
431 #include <stdlib.h>
432 #endif
433 #ifdef HAVE_SYS_TYPES_H
434 #include <sys/types.h>
435 #endif
436 #ifdef HAVE_SYS_SOCKET_H
437 #include <sys/socket.h>
438 #endif
439 #ifdef HAVE_NETINET_IN_H
440 #include <netinet/in.h>
441 #endif
442 #ifdef HAVE_WINDOWS_H
443 #include <windows.h>
444 #endif
445 #ifdef HAVE_WINSOCK2_H
446 #include <winsock2.h>
447 #endif
448 #ifdef HAVE_WS2TCPIP_H
449 #include <ws2tcpip.h>
450 #endif
451 #ifdef HAVE_NETINET_IN_SYSTM_H
452 #include <netinet/in_systm.h>
453 #endif
454 #ifdef HAVE_NETINET_IP_H
455 #include <netinet/ip.h>
456 #endif
459 AC_CHECK_HEADERS(
460         [net/if.h netinet/ip.h netinet/if_ether.h resolv.h sys/un.h net/if_utun.h sys/kern_control.h],
461         ,
462         ,
463         [[${SOCKET_INCLUDES}]]
466 AC_CHECK_TYPES(
467         [in_addr_t],
468         ,
469         [AC_DEFINE([in_addr_t], [uint32_t], [Workaround missing in_addr_t])],
470         [[${SOCKET_INCLUDES}]]
472 AC_CHECK_TYPE(
473         [struct iphdr],
474         [AC_DEFINE([HAVE_IPHDR], [1], [struct iphdr needed for IPv6 support])],
475         ,
476         [[${SOCKET_INCLUDES}]]
478 AC_CHECK_TYPE(
479         [struct sock_extended_err],
480         [AC_DEFINE([HAVE_SOCK_EXTENDED_ERR], [1], [struct sock_extended_err needed for extended socket error support])],
481         ,
482         [[${SOCKET_INCLUDES}]]
484 AC_CHECK_TYPE(
485         [struct msghdr],
486         [AC_DEFINE([HAVE_MSGHDR], [1], [struct msghdr needed for extended socket error support])],
487         ,
488         [[${SOCKET_INCLUDES}]]
490 AC_CHECK_TYPE(
491         [struct cmsghdr],
492         [AC_DEFINE([HAVE_CMSGHDR], [1], [struct cmsghdr needed for extended socket error support])],
493         ,
494         [[${SOCKET_INCLUDES}]]
496 AC_CHECK_TYPE(
497         [struct in_pktinfo],
498         [AC_DEFINE([HAVE_IN_PKTINFO], [1], [struct in_pktinfo needed for IP_PKTINFO support])],
499         ,
500         [[${SOCKET_INCLUDES}]]
502 AC_CHECK_TYPE(
503         [struct sockaddr_in6],
504         ,
505         [AC_MSG_ERROR([struct sockaddr_in6 not found, needed for ipv6 transport support.])],
506         [[${SOCKET_INCLUDES}]]
508 AC_CHECK_DECLS(
509         [SO_MARK],
510         ,
511         ,
512         [[${SOCKET_INCLUDES}]]
515 dnl We emulate signals in Windows
516 AC_CHECK_DECLS(
517         [SIGHUP],
518         ,
519         [AC_DEFINE([SIGHUP], [1], [SIGHUP replacement])],
520         [[
521                 #ifdef HAVE_SIGNAL_H
522                 #include <signal.h>
523                 #endif
524         ]]
526 AC_CHECK_DECLS(
527         [SIGINT],
528         ,
529         [AC_DEFINE([SIGINT], [2], [SIGINT replacement])],
530         [[
531                 #ifdef HAVE_SIGNAL_H
532                 #include <signal.h>
533                 #endif
534         ]]
536 AC_CHECK_DECLS(
537         [SIGUSR1],
538         ,
539         [AC_DEFINE([SIGUSR1], [10], [SIGUSR1 replacement])],
540         [[
541                 #ifdef HAVE_SIGNAL_H
542                 #include <signal.h>
543                 #endif
544         ]]
546 AC_CHECK_DECLS(
547         [SIGUSR2],
548         ,
549         [AC_DEFINE([SIGUSR2], [12], [SIGUSR2 replacement])],
550         [[
551                 #ifdef HAVE_SIGNAL_H
552                 #include <signal.h>
553                 #endif
554         ]]
556 AC_CHECK_DECLS(
557         [SIGTERM],
558         ,
559         [AC_DEFINE([SIGTERM], [15], [SIGTERM replacement])],
560         [[
561                 #ifdef HAVE_SIGNAL_H
562                 #include <signal.h>
563                 #endif
564         ]]
567 AC_FUNC_FORK
569 AC_CHECK_FUNCS([ \
570         daemon chroot getpwnam setuid nice system getpid dup dup2 \
571         getpass strerror syslog openlog mlockall getgrnam setgid \
572         setgroups stat flock readv writev time gettimeofday \
573         ctime memset vsnprintf strdup \
574         setsid chdir putenv getpeername unlink \
575         chsize ftruncate execve getpeereid umask basename dirname access \
576         epoll_create \
579 AC_CHECK_LIB(
580         [dl],
581         [dlopen],
582         [DL_LIBS="-ldl"]
584 AC_SUBST([DL_LIBS])
586 AC_CHECK_LIB(
587         [nsl],
588         [inet_ntoa],
589         [SOCKETS_LIBS="${SOCKETS_LIBS} -lnsl"]
591 AC_CHECK_LIB(
592         [socket],
593         [socket],
594         [SOCKETS_LIBS="${SOCKETS_LIBS} -lsocket"]
596 AC_CHECK_LIB(
597         [resolv],
598         [gethostbyname],
599         [SOCKETS_LIBS="${SOCKETS_LIBS} -lresolv"]
601 AC_SUBST([SOCKETS_LIBS])
603 old_LIBS="${LIBS}"
604 LIBS="${LIBS} ${SOCKETS_LIBS}"
605 AC_CHECK_FUNCS([sendmsg recvmsg inet_ntop inet_pton])
606 AC_CHECK_FUNCS(
607         [res_init],
608         ,
609         ,
610         [[#include <resolv.h>]]
612 # Windows use stdcall for winsock so we cannot auto detect these
613 m4_define(
614         [SOCKET_FUNCS],
615 [socket recv recvfrom send sendto listen dnl
616 accept connect bind select gethostbyname inet_ntoa]dnl
618 m4_define(
619         [SOCKET_OPT_FUNCS],
620         [setsockopt getsockopt getsockname poll]dnl
622 if test "${WIN32}" = "yes"; then
623         m4_foreach(
624                 [F],
625                 m4_split(SOCKET_FUNCS SOCKET_OPT_FUNCS),
626                         m4_define([UF], [[m4_join([_], [HAVE], m4_toupper(F))]])
627                         AC_DEFINE([UF], [1], [Win32 builtin])
628         )
629 else
630         AC_CHECK_FUNCS(
631                 SOCKET_FUNCS,
632                 ,
633                 [AC_MSG_ERROR([Required library function not found])]
634         )
635         AC_CHECK_FUNCS(SOCKET_OPT_FUNCS)
637 LIBS="${old_LIBS}"
639 AC_ARG_VAR([TAP_CFLAGS], [C compiler flags for tap])
640 old_CFLAGS="${CFLAGS}"
641 CFLAGS="${CFLAGS} ${TAP_CFLAGS}"
642 AC_CHECK_HEADERS(
643         [ \
644                 net/if_tun.h net/tun/if_tun.h \
645                 linux/if_tun.h \
646                 tap-windows.h \
647         ],
648         [have_tap_header="yes"]
650 AC_CHECK_DECLS(
651         [TUNSETPERSIST],
652         [AC_DEFINE([ENABLE_FEATURE_TUN_PERSIST], [1], [We have persist tun capability])],
653         ,
654         [[
655                 #ifdef HAVE_LINUX_IF_TUN_H
656                 #include <linux/if_tun.h>
657                 #endif
658         ]]
660 CFLAGS="${old_CFLAGS}"
661 test "${have_tap_header}" = "yes" || AC_MSG_ERROR([no tap header could be found])
663 AC_CHECK_LIB(
664         [selinux],
665         [setcon],
666         [SELINUX_LIBS="-lselinux"]
668 AC_SUBST([SELINUX_LIBS])
670 AC_ARG_VAR([LIBPAM_CFLAGS], [C compiler flags for libpam])
671 AC_ARG_VAR([LIBPAM_LIBS], [linker flags for libpam])
672 if test -z "${LIBPAM_LIBS}"; then
673         AC_CHECK_LIB(
674                 [pam],
675                 [pam_start],
676                 [LIBPAM_LIBS="-lpam"]
677         )
680 case "${with_mem_check}" in
681         valgrind)
682                 AC_CHECK_HEADER(
683                         [valgrind/memcheck.h],
684                         [
685                                 CFLAGS="${CFLAGS} -g -fno-inline"
686                                 AC_DEFINE(
687                                         [USE_VALGRIND],
688                                         [1],
689                                         [Use valgrind memory debugging library]
690                                 )
691                         ],
692                         [AC_MSG_ERROR([valgrind headers not found.])]
693                 )
694                 ;;
695         dmalloc)
696                 AC_CHECK_HEADER(
697                         [dmalloc.h],
698                         [AC_CHECK_LIB(
699                                 [dmalloc],
700                                 [malloc],
701                                 [
702                                         LIBS="${LIBS} -ldmalloc"
703                                         AC_DEFINE(
704                                                 [DMALLOC],
705                                                 [1],
706                                                 [Use dmalloc memory debugging library]
707                                         )
708                                 ],
709                                 [AC_MSG_ERROR([dmalloc library not found.])]
710                         )],
711                         [AC_MSG_ERROR([dmalloc headers not found.])]
712                 )
713                 ;;
714         ssl)
715                 AC_CHECK_LIB(
716                         [ssl],
717                         [CRYPTO_mem_ctrl],
718                         [
719                                 AC_DEFINE(
720                                         [CRYPTO_MDEBUG],
721                                         [1],
722                                         [Use memory debugging function in OpenSSL]
723                                 )
724                                 AC_MSG_NOTICE([NOTE: OpenSSL library must be compiled with CRYPTO_MDEBUG])
725                         ],
726                         [AC_MSG_ERROR([Memory Debugging function in OpenSSL library not found.])]
727                 )
728                 ;;
729 esac
731 PKG_CHECK_MODULES(
732         [PKCS11_HELPER],
733         [libpkcs11-helper-1 >= 1.11],
734         [have_pkcs11_helper="yes"],
735         []
738 PKG_CHECK_MODULES(
739         [OPENSSL_CRYPTO],
740         [libcrypto >= 0.9.6],
741         [have_openssl_crypto="yes"],
742         [AC_CHECK_LIB(
743                 [crypto],
744                 [RSA_new],
745                 [
746                         have_openssl_crypto="yes"
747                         OPENSSL_CRYPTO_LIBS="-lcrypto"
748                 ]
749         )]
752 PKG_CHECK_MODULES(
753         [OPENSSL_SSL],
754         [libssl >= 0.9.6],
755         [have_openssl_ssl="yes"],
756         [AC_CHECK_LIB(
757                 [ssl],
758                 [SSL_CTX_new],
759                 [
760                         have_openssl_ssl="yes"
761                         OPENSSL_SSL_LIBS="-lssl"
762                 ],
763                 [],
764                 [-lcrypto]
765         )]
768 if test "${have_openssl_crypto}" = "yes"; then
769         saved_CFLAGS="${CFLAGS}"
770         saved_LIBS="${LIBS}"
771         CFLAGS="${CFLAGS} ${OPENSSL_CRYPTO_CFLAGS}"
772         LIBS="${LIBS} ${OPENSSL_CRYPTO_LIBS}"
773         AC_CHECK_FUNCS([EVP_CIPHER_CTX_set_key_length])
774         have_openssl_engine="yes"
775         AC_CHECK_FUNCS(
776                 [ \
777                         ENGINE_load_builtin_engines \
778                         ENGINE_register_all_complete \
779                         ENGINE_cleanup \
780                 ],
781                 ,
782                 [have_openssl_engine="no"; break]
783         )
785         CFLAGS="${saved_CFLAGS}"
786         LIBS="${saved_LIBS}"
789 AC_ARG_VAR([POLARSSL_CFLAGS], [C compiler flags for polarssl])
790 AC_ARG_VAR([POLARSSL_LIBS], [linker flags for polarssl])
791 have_polarssl_ssl="yes"
792 have_polarssl_crypto="yes"
793 if test -z "${POLARSSL_LIBS}"; then
794         AC_CHECK_LIB(
795                 [polarssl],
796                 [ssl_init],
797                 [POLARSSL_LIBS="-lpolarssl"],
798                 [
799                         have_polarssl_ssl="no"
800                         AC_CHECK_LIB(
801                                 [polarssl],
802                                 [aes_crypt_cbc],
803                                 ,
804                                 [have_polarssl_crypto="no"],
805                                 [${PKCS11_HELPER_LIBS}]
806                         )
807                 ],
808                 [${PKCS11_HELPER_LIBS}]
809         )
812 if test "${with_crypto_library}" = "polarssl" ; then
813         AC_MSG_CHECKING([polarssl version])
814         old_CFLAGS="${CFLAGS}"
815         CFLAGS="${POLARSSL_CFLAGS} ${CFLAGS}"
816         AC_COMPILE_IFELSE(
817                 [AC_LANG_PROGRAM(
818                         [[
819 #include <polarssl/version.h>
820                         ]],
821                         [[
822 #if POLARSSL_VERSION_NUMBER < 0x01020A00 || POLARSSL_VERSION_NUMBER >= 0x01030000
823 #error invalid version
824 #endif
825                         ]]
826                 )],
827                 [AC_MSG_RESULT([ok])],
828                 [AC_MSG_ERROR([PolarSSL 1.2.x required and must be 1.2.10 or later])]
829         )
831         polarssl_with_pkcs11="no"
832         AC_COMPILE_IFELSE(
833                 [AC_LANG_PROGRAM(
834                         [[
835 #include <polarssl/config.h>
836                         ]],
837                         [[
838 #ifndef POLARSSL_PKCS11_C
839 #error pkcs11 wrapper missing
840 #endif
841                         ]]
842                 )],
843                 polarssl_with_pkcs11="yes")
844         CFLAGS="${old_CFLAGS}"
846         AC_MSG_CHECKING([polarssl pkcs11 support])
847         if test "${enable_pkcs11}" = "yes"; then
848                 if test "${polarssl_with_pkcs11}" = "yes"; then
849                         AC_MSG_RESULT([ok])
850                 else
851                         AC_MSG_ERROR([polarssl has no pkcs11 wrapper compiled in])
852                 fi
853         else
854                 if test "${polarssl_with_pkcs11}" != "yes"; then
855                         AC_MSG_RESULT([ok])
856                 else
857                         AC_MSG_ERROR([PolarSSL compiled with PKCS11, while OpenVPN is not])
858                 fi
859         fi
863 AC_ARG_VAR([LZO_CFLAGS], [C compiler flags for lzo])
864 AC_ARG_VAR([LZO_LIBS], [linker flags for lzo])
865 have_lzo="yes"
866 if test -z "${LZO_LIBS}"; then
867         AC_CHECK_LIB(
868                 [lzo2],
869                 [lzo1x_1_15_compress],
870                 [LZO_LIBS="-llzo2"],
871                 [AC_CHECK_LIB(
872                         [lzo],
873                         [lzo1x_1_15_compress],
874                         [LZO_LIBS="-llzo"],
875                         [have_lzo="no"]
876                 )]
877         )
879 if test "${have_lzo}" = "yes"; then
880         saved_CFLAGS="${CFLAGS}"
881         CFLAGS="${CFLAGS} ${LZO_CFLAGS}"
882         AC_CHECK_HEADERS(
883                 [lzo/lzoutil.h],
884                 ,
885                 [AC_CHECK_HEADERS(
886                         [lzoutil.h],
887                         ,
888                         [AC_MSG_ERROR([lzoutil.h is missing])]
889                 )]
890         )
891         AC_CHECK_HEADERS(
892                 [lzo/lzo1x.h],
893                 ,
894                 [AC_CHECK_HEADERS(
895                         [lzo1x.h],
896                         ,
897                         [AC_MSG_ERROR([lzo1x.h is missing])]
898                 )]
899         )
900         CFLAGS="${saved_CFLAGS}"
905 dnl Check for systemd
908 if test "$enable_systemd" = "yes" ; then
909     PKG_CHECK_MODULES([libsystemd], [systemd libsystemd],
910                       [],
911                       [PKG_CHECK_MODULES([libsystemd], [libsystemd-daemon])]
912                       )
913     AC_CHECK_HEADERS(systemd/sd-daemon.h,
914        ,
915        [
916            AC_MSG_ERROR([systemd development headers not found.])
917        ])
919     saved_LIBS="${LIBS}"
920     LIBS="${LIBS} ${libsystemd_LIBS}"
921     AC_CHECK_FUNCS([sd_booted], [], [AC_MSG_ERROR([systemd library is missing sd_booted()])])
922     OPTIONAL_SYSTEMD_LIBS="${libsystemd_LIBS}"
923     AC_DEFINE(ENABLE_SYSTEMD, 1, [Enable systemd integration])
924     LIBS="${saved_LIBS}"
928 AC_MSG_CHECKING([git checkout])
929 GIT_CHECKOUT="no"
930 if test -n "${GIT}" -a -d "${srcdir}/.git"; then
931         AC_DEFINE([HAVE_CONFIG_VERSION_H], [1], [extra version available in config-version.h])
932         GIT_CHECKOUT="yes"
934 AC_MSG_RESULT([${GIT_CHECKOUT}])
936 if test -n "${SP_PLATFORM_WINDOWS}"; then
937         AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['\\\\'], [Path separator]) #"
938         AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["\\\\"], [Path separator]) #"
939 else
940         AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['/'], [Path separator])
941         AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["/"], [Path separator])
944 dnl enable --x509-username-field feature if requested
945 if test "${enable_x509_alt_username}" = "yes"; then
946         if test "${with_crypto_library}" = "polarssl" ; then
947                 AC_MSG_ERROR([PolarSSL does not support the --x509-username-field feature])
948         fi
950         AC_DEFINE([ENABLE_X509ALTUSERNAME], [1], [Enable --x509-username-field feature])
953 test "${ac_cv_header_sys_uio_h}" = "yes" && AC_DEFINE([HAVE_IOVEC], [1], [struct iovec needed for IPv6 support])
954 test "${enable_multi}" = "yes" && AC_DEFINE([ENABLE_CLIENT_SERVER], [1], [Enable client/server capability])
955 test "${enable_server}" = "no" && AC_DEFINE([ENABLE_CLIENT_ONLY], [1], [Enable client capability only])
956 test "${enable_management}" = "yes" && AC_DEFINE([ENABLE_MANAGEMENT], [1], [Enable management server capability])
957 test "${enable_socks}" = "yes" && AC_DEFINE([ENABLE_SOCKS], [1], [Enable Socks proxy support])
958 test "${enable_http_proxy}" = "yes" && AC_DEFINE([ENABLE_HTTP_PROXY], [1], [Enable HTTP proxy support])
959 test "${enable_multihome}" = "yes" && AC_DEFINE([ENABLE_MULTIHOME], [1], [Enable multi-homed UDP server capability])
960 test "${enable_debug}" = "yes" && AC_DEFINE([ENABLE_DEBUG], [1], [Enable debugging support])
961 test "${enable_small}" = "yes" && AC_DEFINE([ENABLE_SMALL], [1], [Enable smaller executable size])
962 test "${enable_fragment}" = "yes" && AC_DEFINE([ENABLE_FRAGMENT], [1], [Enable internal fragmentation support])
963 test "${enable_port_share}" = "yes" && AC_DEFINE([ENABLE_PORT_SHARE], [1], [Enable TCP Server port sharing])
964 test "${enable_def_auth}" = "yes" && AC_DEFINE([ENABLE_DEF_AUTH], [1], [Enable deferred authentication])
965 test "${enable_pf}" = "yes" && AC_DEFINE([ENABLE_PF], [1], [Enable internal packet filter])
966 test "${enable_strict_options}" = "yes" && AC_DEFINE([ENABLE_STRICT_OPTIONS_CHECK], [1], [Enable strict options check between peers])
967 test "${enable_password_save}" = "yes" && AC_DEFINE([ENABLE_PASSWORD_SAVE], [1], [Allow --askpass and --auth-user-pass passwords to be read from a file])
969 case "${with_crypto_library}" in
970         openssl)
971                 have_crypto_crypto="${have_openssl_crypto}"
972                 have_crypto_ssl="${have_openssl_ssl}"
973                 CRYPTO_CRYPTO_CFLAGS="${OPENSSL_CRYPTO_CFLAGS}"
974                 CRYPTO_CRYPTO_LIBS="${OPENSSL_CRYPTO_LIBS}"
975                 CRYPTO_SSL_CFLAGS="${OPENSSL_SSL_CFLAGS}"
976                 CRYPTO_SSL_LIBS="${OPENSSL_SSL_LIBS}"
977                 AC_DEFINE([ENABLE_CRYPTO_OPENSSL], [1], [Use OpenSSL library])
978                 test "${have_openssl_engine}" = "yes" && AC_DEFINE([HAVE_OPENSSL_ENGINE], [1], [Use crypto library])
979                 ;;
980         polarssl)
981                 have_crypto_crypto="${have_polarssl_crypto}"
982                 have_crypto_ssl="${have_polarssl_ssl}"
983                 CRYPTO_CRYPTO_CFLAGS="${POLARSSL_CFLAGS}"
984                 CRYPTO_CRYPTO_LIBS="${POLARSSL_LIBS}"
985                 AC_DEFINE([ENABLE_CRYPTO_POLARSSL], [1], [Use PolarSSL library])
986                 ;;
987 esac
989 if test "${enable_ssl}" = "yes"; then
990         test "${enable_crypto}" != "yes" && AC_MSG_ERROR([crypto must be enabled for ssl])
991         test "${have_crypto_ssl}" != "yes" && AC_MSG_ERROR([${with_ssl_library} ssl is required but missing])
992         OPTIONAL_CRYPTO_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${CRYPTO_SSL_CFLAGS}"
993         OPTIONAL_CRYPTO_LIBS="${OPTIONAL_CRYPTO_LIBS} ${CRYPTO_SSL_LIBS}"
994         AC_DEFINE([ENABLE_SSL], [1], [Enable ssl library])
997 if test "${enable_crypto}" = "yes"; then
998         test "${have_crypto_crypto}" != "yes" && AC_MSG_ERROR([${with_crypto_library} crypto is required but missing])
999         test "${enable_crypto_ofb_cfb}" = "yes" && AC_DEFINE([ENABLE_OFB_CFB_MODE], [1], [Enable OFB and CFB cipher modes])
1000         OPTIONAL_CRYPTO_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${CRYPTO_CRYPTO_CFLAGS}"
1001         OPTIONAL_CRYPTO_LIBS="${OPTIONAL_CRYPTO_LIBS} ${CRYPTO_CRYPTO_LIBS}"
1002         AC_DEFINE([ENABLE_CRYPTO], [1], [Enable crypto library])
1005 if test "${enable_plugins}" = "yes"; then
1006         OPTIONAL_DL_LIBS="${DL_LIBS}"
1007         AC_DEFINE([ENABLE_PLUGIN], [1], [Enable plug-in support])
1008 else
1009         enable_plugin_auth_pam="no"
1010         enable_plugin_down_root="no"
1013 if test "${enable_iproute2}" = "yes"; then
1014         test -z "${IPROUTE}" && AC_MSG_ERROR([ip utility is required but missing])
1015         AC_DEFINE([ENABLE_IPROUTE], [1], [enable iproute2 support])
1016 else
1017         if test "${WIN32}" != "yes"; then
1018                 test -z "${ROUTE}" && AC_MSG_ERROR([route utility is required but missing])
1019                 test -z "${IFCONFIG}" && AC_MSG_ERROR([ifconfig utility is required but missing])
1020         fi
1023 if test "${enable_selinux}" = "yes"; then
1024         test -z "${SELINUX_LIBS}" && AC_MSG_ERROR([libselinux required but missing])
1025         OPTIONAL_SELINUX_LIBS="${SELINUX_LIBS}"
1026         AC_DEFINE([ENABLE_SELINUX], [1], [SELinux support])
1029 if test "${enable_lzo}" = "yes"; then
1030         test "${have_lzo}" != "yes" && AC_MSG_ERROR([lzo enabled but missing])
1031         OPTIONAL_LZO_CFLAGS="${LZO_CFLAGS}"
1032         OPTIONAL_LZO_LIBS="${LZO_LIBS}"
1033         AC_DEFINE([ENABLE_LZO], [1], [Enable LZO compression library])
1035 if test "${enable_lzo_stub}" = "yes"; then
1036         test "${enable_lzo}" = "yes" && AC_MSG_ERROR([Cannot have both lzo stub and lzo enabled])
1037         AC_DEFINE([ENABLE_LZO_STUB], [1], [Enable LZO stub capability])
1038         AC_DEFINE([ENABLE_LZO], [1], [Enable LZO compression library])
1041 if test "${enable_pkcs11}" = "yes"; then
1042         test "${have_pkcs11_helper}" != "yes" && AC_MSG_ERROR([PKCS11 enabled but libpkcs11-helper is missing])
1043         test "${enable_ssl}" != "yes" && AC_MSG_ERROR([PKCS11 can be enabled only if SSL is enabled])
1044         OPTIONAL_PKCS11_HELPER_CFLAGS="${PKCS11_HELPER_CFLAGS}"
1045         OPTIONAL_PKCS11_HELPER_LIBS="${PKCS11_HELPER_LIBS}"
1046         AC_DEFINE([ENABLE_PKCS11], [1], [Enable PKCS11])
1049 if test "${enable_pedantic}" = "yes"; then
1050         enable_strict="yes"
1051         CFLAGS="${CFLAGS} -pedantic"
1052         test "${WIN32}" != "yes" && CFLAGS="${CFLAGS} -ansi"
1054 if test "${enable_strict}" = "yes"; then
1055         CFLAGS="${CFLAGS} -Wall -Wno-unused-parameter -Wno-unused-function"
1058 if test "${WIN32}" = "yes"; then
1059         test -z "${MAN2HTML}" && AC_MSG_ERROR([man2html is required for win32])
1062 if test "${enable_plugin_auth_pam}" = "yes"; then
1063         PLUGIN_AUTH_PAM_CFLAGS="${LIBPAM_CFLAGS}"
1064         if test "${enable_pam_dlopen}" = "yes"; then
1065                 AC_DEFINE([USE_PAM_DLOPEN], [1], [dlopen libpam])
1066                 PLUGIN_AUTH_PAM_LIBS="${DL_LIBS}"
1067         else
1068                 test -z "${LIBPAM_LIBS}" && AC_MSG_ERROR([libpam required but missing])
1069                 PLUGIN_AUTH_PAM_LIBS="${LIBPAM_LIBS}"
1070         fi
1073 CONFIGURE_DEFINES="`set | grep '^enable_.*=' ; set | grep '^with_.*='`"
1074 AC_DEFINE_UNQUOTED([CONFIGURE_DEFINES], ["`echo ${CONFIGURE_DEFINES}`"], [Configuration settings])
1076 TAP_WIN_COMPONENT_ID="PRODUCT_TAP_WIN_COMPONENT_ID"
1077 TAP_WIN_MIN_MAJOR="PRODUCT_TAP_WIN_MIN_MAJOR"
1078 TAP_WIN_MIN_MINOR="PRODUCT_TAP_WIN_MIN_MINOR"
1079 AC_DEFINE_UNQUOTED([TAP_WIN_COMPONENT_ID], ["${TAP_WIN_COMPONENT_ID}"], [The tap-windows id])
1080 AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MAJOR], [${TAP_WIN_MIN_MAJOR}], [The tap-windows version number is required for OpenVPN])
1081 AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MINOR], [${TAP_WIN_MIN_MINOR}], [The tap-windows version number is required for OpenVPN])
1082 AC_SUBST([TAP_WIN_COMPONENT_ID])
1083 AC_SUBST([TAP_WIN_MIN_MAJOR])
1084 AC_SUBST([TAP_WIN_MIN_MINOR])
1086 AC_SUBST([OPTIONAL_DL_LIBS])
1087 AC_SUBST([OPTIONAL_SELINUX_LIBS])
1088 AC_SUBST([OPTIONAL_CRYPTO_CFLAGS])
1089 AC_SUBST([OPTIONAL_CRYPTO_LIBS])
1090 AC_SUBST([OPTIONAL_LZO_CFLAGS])
1091 AC_SUBST([OPTIONAL_LZO_LIBS])
1092 AC_SUBST([OPTIONAL_SYSTEMD_LIBS])
1093 AC_SUBST([OPTIONAL_PKCS11_HELPER_CFLAGS])
1094 AC_SUBST([OPTIONAL_PKCS11_HELPER_LIBS])
1096 AC_SUBST([PLUGIN_AUTH_PAM_CFLAGS])
1097 AC_SUBST([PLUGIN_AUTH_PAM_LIBS])
1099 AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
1100 AM_CONDITIONAL([GIT_CHECKOUT], [test "${GIT_CHECKOUT}" = "yes"])
1101 AM_CONDITIONAL([ENABLE_PLUGIN_AUTH_PAM], [test "${enable_plugin_auth_pam}" = "yes"])
1102 AM_CONDITIONAL([ENABLE_PLUGIN_DOWN_ROOT], [test "${enable_plugin_down_root}" = "yes"])
1104 plugindir="${with_plugindir}"
1105 sampledir="\$(docdir)/sample"
1106 AC_SUBST([plugindir])
1107 AC_SUBST([sampledir])
1109 AC_CONFIG_FILES([
1110         version.sh
1111         Makefile
1112         build/Makefile
1113         build/msvc/Makefile
1114         build/msvc/msvc-generate/Makefile
1115         distro/Makefile
1116         distro/rpm/Makefile
1117         distro/rpm/openvpn.spec
1118         include/Makefile
1119         src/Makefile
1120         src/compat/Makefile
1121         src/openvpn/Makefile
1122         src/openvpnserv/Makefile
1123         src/plugins/Makefile
1124         src/plugins/auth-pam/Makefile
1125         src/plugins/down-root/Makefile
1126         tests/Makefile
1127         sample/Makefile
1128         doc/Makefile
1130 AC_CONFIG_FILES([tests/t_client.sh], [chmod +x tests/t_client.sh])
1131 AC_OUTPUT