Extended MOTD with GUI
[tomato.git] / release / src / router / openvpn / configure.ac
blob2f780b7af2c2d8d1892cab26d5d5696c08bd449c
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 AM_CONFIG_HEADER([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         [ssl],
65         [AS_HELP_STRING([--disable-ssl], [disable SSL support for TLS-based key exchange @<:@default=yes@:>@])],
66         ,
67         [enable_ssl="yes"]
70 AC_ARG_ENABLE(
71         [x509-alt-username],
72         [AS_HELP_STRING([--enable-x509-alt-username], [enable the --x509-username-field feature @<:@default=no@:>@])],
73         ,
74         [enable_x509_alt_username="no"]
77 AC_ARG_ENABLE(
78         [multi],
79         [AS_HELP_STRING([--disable-multi], [disable client/server support (--mode server + client mode) @<:@default=yes@:>@])],
80         ,
81         [enable_multi="yes"]
84 AC_ARG_ENABLE(
85         [server],
86         [AS_HELP_STRING([--disable-server], [disable server support only (but retain client support) @<:@default=yes@:>@])],
87         ,
88         [enable_server="yes"]
91 AC_ARG_ENABLE(
92         [plugins],
93         [AS_HELP_STRING([--disable-plugins], [disable plug-in support @<:@default=yes@:>@])],
94         ,
95         [enable_plugins="yes"]
98 AC_ARG_ENABLE(
99         [eurephia],
100         [AS_HELP_STRING([--disable-eurephia], [disable support for the eurephia plug-in @<:@default=yes@:>@])],
101         ,
102         [enable_eurephia="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_PATH_PROGS([IFCONFIG], [ifconfig],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
361 AC_PATH_PROGS([ROUTE], [route],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
362 AC_PATH_PROGS([IPROUTE], [ip],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
363 AC_CHECK_PROGS([NETSTAT], [netstat], [netstat], [$PATH:/usr/local/sbin:/usr/sbin:/sbin:/etc]) # tests
364 AC_CHECK_PROGS([MAN2HTML], [man2html])
365 AC_CHECK_PROGS([GIT], [git]) # optional
366 AC_DEFINE_UNQUOTED([IFCONFIG_PATH], ["$IFCONFIG"], [Path to ifconfig tool])
367 AC_DEFINE_UNQUOTED([IPROUTE_PATH], ["$IPROUTE"], [Path to iproute tool])
368 AC_DEFINE_UNQUOTED([ROUTE_PATH], ["$ROUTE"], [Path to route tool])
371 # Libtool
373 ifdef(
374         [LT_INIT],
375         [
376                 LT_INIT([win32-dll])
377                 LT_LANG([Windows Resource])
378         ],
379         [
380                 AC_LIBTOOL_WIN32_DLL
381                 AC_LIBTOOL_RC
382                 AC_PROG_LIBTOOL
383         ]
386 AC_C_CONST
387 AC_C_INLINE
388 AC_C_VOLATILE
389 AC_TYPE_OFF_T
390 AC_TYPE_PID_T
391 AC_TYPE_SIZE_T
392 AC_TYPE_UID_T
393 AC_TYPE_INT8_T
394 AC_TYPE_INT16_T
395 AC_TYPE_INT32_T
396 AC_TYPE_INT64_T
397 AC_TYPE_UINT8_T
398 AC_TYPE_UINT16_T
399 AC_TYPE_UINT32_T
400 AC_TYPE_UINT64_T
401 AC_TYPE_SIGNAL
402 AX_CPP_VARARG_MACRO_ISO
403 AX_CPP_VARARG_MACRO_GCC
404 AX_TYPE_SOCKLEN_T
405 AX_EMPTY_ARRAY
406 AC_CHECK_SIZEOF([unsigned int])
407 AC_CHECK_SIZEOF([unsigned long])
408 AC_CHECK_HEADERS([ \
409         stdio.h stdarg.h stdbool.h limits.h \
410         time.h errno.h fcntl.h io.h direct.h \
411         ctype.h sys/types.h sys/socket.h \
412         signal.h unistd.h dlfcn.h \
413         netinet/in.h netinet/in_systm.h \
414         netinet/tcp.h arpa/inet.h netdb.h \
415         windows.h winsock2.h ws2tcpip.h \
417 AC_CHECK_HEADERS([ \
418         sys/time.h sys/ioctl.h sys/stat.h \
419         sys/mman.h sys/file.h sys/wait.h \
420         unistd.h signal.h libgen.h stropts.h \
421         syslog.h pwd.h grp.h \
422         sys/sockio.h sys/uio.h linux/sockios.h \
423         linux/types.h sys/poll.h sys/epoll.h err.h \
426 SOCKET_INCLUDES="
427 #ifdef HAVE_STDLIB_H
428 #include <stdlib.h>
429 #endif
430 #ifdef HAVE_SYS_TYPES_H
431 #include <sys/types.h>
432 #endif
433 #ifdef HAVE_SYS_SOCKET_H
434 #include <sys/socket.h>
435 #endif
436 #ifdef HAVE_NETINET_IN_H
437 #include <netinet/in.h>
438 #endif
439 #ifdef HAVE_WINDOWS_H
440 #include <windows.h>
441 #endif
442 #ifdef HAVE_WINSOCK2_H
443 #include <winsock2.h>
444 #endif
445 #ifdef HAVE_WS2TCPIP_H
446 #include <ws2tcpip.h>
447 #endif
448 #ifdef HAVE_NETINET_IN_SYSTM_H
449 #include <netinet/in_systm.h>
450 #endif
451 #ifdef HAVE_NETINET_IP_H
452 #include <netinet/ip.h>
453 #endif
456 AC_CHECK_HEADERS(
457         [net/if.h netinet/ip.h netinet/if_ether.h resolv.h sys/un.h],
458         ,
459         ,
460         [[${SOCKET_INCLUDES}]]
463 AC_CHECK_TYPES(
464         [in_addr_t],
465         ,
466         [AC_DEFINE([in_addr_t], [uint32_t], [Workaround missing in_addr_t])],
467         [[${SOCKET_INCLUDES}]]
469 AC_CHECK_TYPE(
470         [struct iphdr],
471         [AC_DEFINE([HAVE_IPHDR], [1], [struct iphdr needed for IPv6 support])],
472         ,
473         [[${SOCKET_INCLUDES}]]
475 AC_CHECK_TYPE(
476         [struct sock_extended_err],
477         [AC_DEFINE([HAVE_SOCK_EXTENDED_ERR], [1], [struct sock_extended_err needed for extended socket error support])],
478         ,
479         [[${SOCKET_INCLUDES}]]
481 AC_CHECK_TYPE(
482         [struct msghdr],
483         [AC_DEFINE([HAVE_MSGHDR], [1], [struct msghdr needed for extended socket error support])],
484         ,
485         [[${SOCKET_INCLUDES}]]
487 AC_CHECK_TYPE(
488         [struct cmsghdr],
489         [AC_DEFINE([HAVE_CMSGHDR], [1], [struct cmsghdr needed for extended socket error support])],
490         ,
491         [[${SOCKET_INCLUDES}]]
493 AC_CHECK_TYPE(
494         [struct in_pktinfo],
495         [AC_DEFINE([HAVE_IN_PKTINFO], [1], [struct in_pktinfo needed for IP_PKTINFO support])],
496         ,
497         [[${SOCKET_INCLUDES}]]
499 AC_CHECK_TYPE(
500         [struct sockaddr_in6],
501         ,
502         [AC_MSG_ERROR([struct sockaddr_in6 not found, needed for ipv6 transport support.])],
503         [[${SOCKET_INCLUDES}]]
505 AC_CHECK_DECLS(
506         [SO_MARK],
507         ,
508         ,
509         [[${SOCKET_INCLUDES}]]
512 dnl We emulate signals in Windows
513 AC_CHECK_DECLS(
514         [SIGHUP],
515         ,
516         [AC_DEFINE([SIGHUP], [1], [SIGHUP replacement])],
517         [[
518                 #ifdef HAVE_SIGNAL_H
519                 #include <signal.h>
520                 #endif
521         ]]
523 AC_CHECK_DECLS(
524         [SIGINT],
525         ,
526         [AC_DEFINE([SIGINT], [2], [SIGINT replacement])],
527         [[
528                 #ifdef HAVE_SIGNAL_H
529                 #include <signal.h>
530                 #endif
531         ]]
533 AC_CHECK_DECLS(
534         [SIGUSR1],
535         ,
536         [AC_DEFINE([SIGUSR1], [10], [SIGUSR1 replacement])],
537         [[
538                 #ifdef HAVE_SIGNAL_H
539                 #include <signal.h>
540                 #endif
541         ]]
543 AC_CHECK_DECLS(
544         [SIGUSR2],
545         ,
546         [AC_DEFINE([SIGUSR2], [12], [SIGUSR2 replacement])],
547         [[
548                 #ifdef HAVE_SIGNAL_H
549                 #include <signal.h>
550                 #endif
551         ]]
553 AC_CHECK_DECLS(
554         [SIGTERM],
555         ,
556         [AC_DEFINE([SIGTERM], [15], [SIGTERM replacement])],
557         [[
558                 #ifdef HAVE_SIGNAL_H
559                 #include <signal.h>
560                 #endif
561         ]]
564 AC_FUNC_FORK
566 AC_CHECK_FUNCS([ \
567         daemon chroot getpwnam setuid nice system getpid dup dup2 \
568         getpass strerror syslog openlog mlockall getgrnam setgid \
569         setgroups stat flock readv writev time gettimeofday \
570         ctime memset vsnprintf strdup \
571         setsid chdir putenv getpeername unlink \
572         chsize ftruncate execve getpeereid umask basename dirname access \
573         epoll_create \
576 AC_CHECK_LIB(
577         [dl],
578         [dlopen],
579         [DL_LIBS="-ldl"]
581 AC_SUBST([DL_LIBS])
583 AC_CHECK_LIB(
584         [nsl],
585         [inet_ntoa],
586         [SOCKETS_LIBS="${SOCKETS_LIBS} -lnsl"]
588 AC_CHECK_LIB(
589         [socket],
590         [socket],
591         [SOCKETS_LIBS="${SOCKETS_LIBS} -lsocket"]
593 AC_CHECK_LIB(
594         [resolv],
595         [gethostbyname],
596         [SOCKETS_LIBS="${SOCKETS_LIBS} -lresolv"]
598 AC_SUBST([SOCKETS_LIBS])
600 old_LIBS="${LIBS}"
601 LIBS="${LIBS} ${SOCKETS_LIBS}"
602 AC_CHECK_FUNCS([sendmsg recvmsg inet_ntop inet_pton])
603 AC_CHECK_FUNCS(
604         [res_init],
605         ,
606         ,
607         [[#include <resolv.h>]]
609 # Windows use stdcall for winsock so we cannot auto detect these
610 m4_define(
611         [SOCKET_FUNCS],
612 [socket recv recvfrom send sendto listen dnl
613 accept connect bind select gethostbyname inet_ntoa]dnl
615 m4_define(
616         [SOCKET_OPT_FUNCS],
617         [setsockopt getsockopt getsockname poll]dnl
619 if test "${WIN32}" = "yes"; then
620         m4_foreach(
621                 [F],
622                 m4_split(SOCKET_FUNCS SOCKET_OPT_FUNCS),
623                         m4_define([UF], [[m4_join([_], [HAVE], m4_toupper(F))]])
624                         AC_DEFINE([UF], [1], [Win32 builtin])
625         )
626 else
627         AC_CHECK_FUNCS(
628                 SOCKET_FUNCS,
629                 ,
630                 [AC_MSG_ERROR([Required library function not found])]
631         )
632         AC_CHECK_FUNCS(SOCKET_OPT_FUNCS)
634 LIBS="${old_LIBS}"
636 AC_ARG_VAR([TAP_CFLAGS], [C compiler flags for tap])
637 old_CFLAGS="${CFLAGS}"
638 CFLAGS="${CFLAGS} ${TAP_CFLAGS}"
639 AC_CHECK_HEADERS(
640         [ \
641                 net/if_tun.h net/tun/if_tun.h \
642                 linux/if_tun.h \
643                 tap-windows.h \
644         ],
645         [have_tap_header="yes"]
647 AC_CHECK_DECLS(
648         [TUNSETPERSIST],
649         [AC_DEFINE([ENABLE_FEATURE_TUN_PERSIST], [1], [We have persist tun capability])],
650         ,
651         [[
652                 #ifdef HAVE_LINUX_IF_TUN_H
653                 #include <linux/if_tun.h>
654                 #endif
655         ]]
657 CFLAGS="${old_CFLAGS}"
658 test "${have_tap_header}" = "yes" || AC_MSG_ERROR([no tap header could be found])
660 AC_CHECK_LIB(
661         [selinux],
662         [setcon],
663         [SELINUX_LIBS="-lselinux"]
665 AC_SUBST([SELINUX_LIBS])
667 AC_ARG_VAR([LIBPAM_CFLAGS], [C compiler flags for libpam])
668 AC_ARG_VAR([LIBPAM_LIBS], [linker flags for libpam])
669 if test -z "${LIBPAM_LIBS}"; then
670         AC_CHECK_LIB(
671                 [pam],
672                 [pam_start],
673                 [LIBPAM_LIBS="-lpam"]
674         )
677 case "${with_mem_check}" in
678         valgrind)
679                 AC_CHECK_HEADER(
680                         [valgrind/memcheck.h],
681                         [
682                                 CFLAGS="${CFLAGS} -g -fno-inline"
683                                 AC_DEFINE(
684                                         [USE_VALGRIND],
685                                         [1],
686                                         [Use valgrind memory debugging library]
687                                 )
688                         ],
689                         [AC_MSG_ERROR([valgrind headers not found.])]
690                 )
691                 ;;
692         dmalloc)
693                 AC_CHECK_HEADER(
694                         [dmalloc.h],
695                         [AC_CHECK_LIB(
696                                 [dmalloc],
697                                 [malloc],
698                                 [
699                                         LIBS="${LIBS} -ldmalloc"
700                                         AC_DEFINE(
701                                                 [DMALLOC],
702                                                 [1],
703                                                 [Use dmalloc memory debugging library]
704                                         )
705                                 ],
706                                 [AC_MSG_ERROR([dmalloc library not found.])]
707                         )],
708                         [AC_MSG_ERROR([dmalloc headers not found.])]
709                 )
710                 ;;
711         ssl)
712                 AC_CHECK_LIB(
713                         [ssl],
714                         [CRYPTO_mem_ctrl],
715                         [
716                                 AC_DEFINE(
717                                         [CRYPTO_MDEBUG],
718                                         [1],
719                                         [Use memory debugging function in OpenSSL]
720                                 )
721                                 AC_MSG_NOTICE([NOTE: OpenSSL library must be compiled with CRYPTO_MDEBUG])
722                         ],
723                         [AC_MSG_ERROR([Memory Debugging function in OpenSSL library not found.])]
724                 )
725                 ;;
726 esac
728 PKG_CHECK_MODULES(
729         [OPENSSL_CRYPTO],
730         [libcrypto >= 0.9.6],
731         [have_openssl_crypto="yes"],
732         [AC_CHECK_LIB(
733                 [crypto],
734                 [RSA_new],
735                 [
736                         have_openssl_crypto="yes"
737                         OPENSSL_CRYPTO_LIBS="-lcrypto"
738                 ]
739         )]
742 PKG_CHECK_MODULES(
743         [OPENSSL_SSL],
744         [libssl >= 0.9.6],
745         [have_openssl_ssl="yes"],
746         [AC_CHECK_LIB(
747                 [ssl],
748                 [SSL_CTX_new],
749                 [
750                         have_openssl_ssl="yes"
751                         OPENSSL_SSL_LIBS="-lssl"
752                 ]
753         )]
756 if test "${have_openssl_crypto}" = "yes"; then
757         saved_CFLAGS="${CFLAGS}"
758         saved_LIBS="${LIBS}"
759         CFLAGS="${CFLAGS} ${OPENSSL_CRYPTO_CFLAGS}"
760         LIBS="${LIBS} ${OPENSSL_CRYPTO_LIBS}"
761         AC_CHECK_FUNCS([EVP_CIPHER_CTX_set_key_length])
762         have_openssl_engine="yes"
763         AC_CHECK_FUNCS(
764                 [ \
765                         ENGINE_load_builtin_engines \
766                         ENGINE_register_all_complete \
767                         ENGINE_cleanup \
768                 ],
769                 ,
770                 [have_openssl_engine="no"; break]
771         )
773         CFLAGS="${saved_CFLAGS}"
774         LIBS="${saved_LIBS}"
777 AC_ARG_VAR([POLARSSL_CFLAGS], [C compiler flags for polarssl])
778 AC_ARG_VAR([POLARSSL_LIBS], [linker flags for polarssl])
779 have_polarssl_ssl="yes"
780 have_polarssl_crypto="yes"
781 if test -z "${POLARSSL_LIBS}"; then
782         AC_CHECK_LIB(
783                 [polarssl],
784                 [ssl_init],
785                 [POLARSSL_LIBS="-lpolarssl"],
786                 [
787                         have_polarssl_ssl="no"
788                         AC_CHECK_LIB(
789                                 [polarssl],
790                                 [aes_crypt_cbc],
791                                 ,
792                                 [have_polarssl_crypto="no"]
793                         )
794                 ]
795         )
798 if test "${with_crypto_library}" = "polarssl" ; then
799         AC_MSG_CHECKING([polarssl version])
800         old_CFLAGS="${CFLAGS}"
801         CFLAGS="${POLARSSL_CFLAGS} ${CFLAGS}"
802         AC_COMPILE_IFELSE(
803                 [AC_LANG_PROGRAM(
804                         [[
805 #include <polarssl/version.h>
806                         ]],
807                         [[
808 #if POLARSSL_VERSION_NUMBER < 0x01010000
809 #error invalid version
810 #endif
811                         ]]
812                 )],
813                 [AC_MSG_RESULT([ok])],
814                 [AC_MSG_ERROR([invalid polarssl version])]
815         )
816         CFLAGS="${old_CFLAGS}"
819 AC_ARG_VAR([LZO_CFLAGS], [C compiler flags for lzo])
820 AC_ARG_VAR([LZO_LIBS], [linker flags for lzo])
821 have_lzo="yes"
822 if test -z "${LZO_LIBS}"; then
823         AC_CHECK_LIB(
824                 [lzo2],
825                 [lzo1x_1_15_compress],
826                 [LZO_LIBS="-llzo2"],
827                 [AC_CHECK_LIB(
828                         [lzo],
829                         [lzo1x_1_15_compress],
830                         [LZO_LIBS="-llzo"],
831                         [have_lzo="no"]
832                 )]
833         )
835 if test "${have_lzo}" = "yes"; then
836         saved_CFLAGS="${CFLAGS}"
837         CFLAGS="${CFLAGS} ${LZO_CFLAGS}"
838         AC_CHECK_HEADERS(
839                 [lzo/lzoutil.h],
840                 ,
841                 [AC_CHECK_HEADERS(
842                         [lzoutil.h],
843                         ,
844                         [AC_MSG_ERROR([lzoutil.h is missing])]
845                 )]
846         )
847         AC_CHECK_HEADERS(
848                 [lzo/lzo1x.h],
849                 ,
850                 [AC_CHECK_HEADERS(
851                         [lzo1x.h],
852                         ,
853                         [AC_MSG_ERROR([lzo1x.h is missing])]
854                 )]
855         )
856         CFLAGS="${saved_CFLAGS}"
859 PKG_CHECK_MODULES(
860         [PKCS11_HELPER],
861         [libpkcs11-helper-1 >= 1.02],
862         [have_pkcs11_helper="yes"],
863         []
866 AC_MSG_CHECKING([git checkout])
867 GIT_CHECKOUT="no"
868 if test -n "${GIT}" -a -d "${srcdir}/.git"; then
869         AC_DEFINE([HAVE_CONFIG_VERSION_H], [1], [extra version available in config-version.h])
870         GIT_CHECKOUT="yes"
872 AC_MSG_RESULT([${GIT_CHECKOUT}])
874 if test -n "${SP_PLATFORM_WINDOWS}"; then
875         AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['\\\\'], [Path separator]) #"
876         AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["\\\\"], [Path separator]) #"
877 else
878         AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['/'], [Path separator])
879         AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["/"], [Path separator])
882 dnl enable --x509-username-field feature if requested
883 if test "${enable_x509_alt_username}" = "yes"; then
884         if test "${with_crypto_library}" = "polarssl" ; then
885                 AC_MSG_ERROR([PolarSSL does not support the --x509-username-field feature])
886         fi
888         AC_DEFINE([ENABLE_X509ALTUSERNAME], [1], [Enable --x509-username-field feature])
891 test "${ac_cv_header_sys_uio_h}" = "yes" && AC_DEFINE([HAVE_IOVEC], [1], [struct iovec needed for IPv6 support])
892 test "${enable_multi}" = "yes" && AC_DEFINE([ENABLE_CLIENT_SERVER], [1], [Enable client/server capability])
893 test "${enable_server}" = "no" && AC_DEFINE([ENABLE_CLIENT_ONLY], [1], [Enable client capability only])
894 test "${enable_management}" = "yes" && AC_DEFINE([ENABLE_MANAGEMENT], [1], [Enable management server capability])
895 test "${enable_socks}" = "yes" && AC_DEFINE([ENABLE_SOCKS], [1], [Enable Socks proxy support])
896 test "${enable_http_proxy}" = "yes" && AC_DEFINE([ENABLE_HTTP_PROXY], [1], [Enable HTTP proxy support])
897 test "${enable_multihome}" = "yes" && AC_DEFINE([ENABLE_MULTIHOME], [1], [Enable multi-homed UDP server capability])
898 test "${enable_debug}" = "yes" && AC_DEFINE([ENABLE_DEBUG], [1], [Enable debugging support])
899 test "${enable_small}" = "yes" && AC_DEFINE([ENABLE_SMALL], [1], [Enable smaller executable size])
900 test "${enable_fragment}" = "yes" && AC_DEFINE([ENABLE_FRAGMENT], [1], [Enable internal fragmentation support])
901 test "${enable_port_share}" = "yes" && AC_DEFINE([ENABLE_PORT_SHARE], [1], [Enable TCP Server port sharing])
902 test "${enable_def_auth}" = "yes" && AC_DEFINE([ENABLE_DEF_AUTH], [1], [Enable deferred authentication])
903 test "${enable_pf}" = "yes" && AC_DEFINE([ENABLE_PF], [1], [Enable internal packet filter])
904 test "${enable_strict_options}" = "yes" && AC_DEFINE([ENABLE_STRICT_OPTIONS_CHECK], [1], [Enable strict options check between peers])
905 test "${enable_password_save}" = "yes" && AC_DEFINE([ENABLE_PASSWORD_SAVE], [1], [Allow --askpass and --auth-user-pass passwords to be read from a file])
906 test "${enable_systemd}" = "yes" && AC_DEFINE([ENABLE_SYSTEMD], [1], [Enable systemd support])
908 case "${with_crypto_library}" in
909         openssl)
910                 have_crypto_crypto="${have_openssl_crypto}"
911                 have_crypto_ssl="${have_openssl_ssl}"
912                 CRYPTO_CRYPTO_CFLAGS="${OPENSSL_CRYPTO_CFLAGS}"
913                 CRYPTO_CRYPTO_LIBS="${OPENSSL_CRYPTO_LIBS}"
914                 CRYPTO_SSL_CFLAGS="${OPENSSL_SSL_CFLAGS}"
915                 CRYPTO_SSL_LIBS="${OPENSSL_SSL_LIBS}"
916                 AC_DEFINE([ENABLE_CRYPTO_OPENSSL], [1], [Use OpenSSL library])
917                 test "${have_openssl_engine}" = "yes" && AC_DEFINE([HAVE_OPENSSL_ENGINE], [1], [Use crypto library])
918                 ;;
919         polarssl)
920                 have_crypto_crypto="${have_polarssl_crypto}"
921                 have_crypto_ssl="${have_polarssl_ssl}"
922                 CRYPTO_CRYPTO_CFLAGS="${POLARSSL_CFLAGS}"
923                 CRYPTO_CRYPTO_LIBS="${POLARSSL_LIBS}"
924                 AC_DEFINE([ENABLE_CRYPTO_POLARSSL], [1], [Use PolarSSL library])
925                 ;;
926 esac
928 if test "${enable_ssl}" = "yes"; then
929         test "${enable_crypto}" != "yes" && AC_MSG_ERROR([crypto must be enabled for ssl])
930         test "${have_crypto_ssl}" != "yes" && AC_MSG_ERROR([${with_ssl_library} ssl is required but missing])
931         OPTIONAL_CRYPTO_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${CRYPTO_SSL_CFLAGS}"
932         OPTIONAL_CRYPTO_LIBS="${OPTIONAL_CRYPTO_LIBS} ${CRYPTO_SSL_LIBS}"
933         AC_DEFINE([ENABLE_SSL], [1], [Enable ssl library])
936 if test "${enable_crypto}" = "yes"; then
937         test "${have_crypto_crypto}" != "yes" && AC_MSG_ERROR([${with_crypto_library} crypto is required but missing])
938         OPTIONAL_CRYPTO_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${CRYPTO_CRYPTO_CFLAGS}"
939         OPTIONAL_CRYPTO_LIBS="${OPTIONAL_CRYPTO_LIBS} ${CRYPTO_CRYPTO_LIBS}"
940         AC_DEFINE([ENABLE_CRYPTO], [1], [Enable crypto library])
943 if test "${enable_plugins}" = "yes"; then
944         OPTIONAL_DL_LIBS="${DL_LIBS}"
945         AC_DEFINE([ENABLE_PLUGIN], [1], [Enable systemd support])
946         test "${enable_eurephia}" = "yes" && AC_DEFINE([ENABLE_EUREPHIA], [1], [Enable support for the eurephia plug-in])
947 else
948         enable_plugin_auth_pam="no"
949         enable_plugin_down_root="no"
952 if test "${enable_iproute2}" = "yes"; then
953         test -z "${IPROUTE}" && AC_MSG_ERROR([ip utility is required but missing])
954         AC_DEFINE([ENABLE_IPROUTE], [1], [enable iproute2 support])
955 else
956         if test "${WIN32}" != "yes"; then
957                 test -z "${ROUTE}" && AC_MSG_ERROR([route utility is required but missing])
958                 test -z "${IFCONFIG}" && AC_MSG_ERROR([ifconfig utility is required but missing])
959         fi
962 if test "${enable_selinux}" = "yes"; then
963         test -z "${SELINUX_LIBS}" && AC_MSG_ERROR([libselinux required but missing])
964         OPTIONAL_SELINUX_LIBS="${SELINUX_LIBS}"
965         AC_DEFINE([ENABLE_SELINUX], [1], [SELinux support])
968 if test "${enable_lzo}" = "yes"; then
969         test "${have_lzo}" != "yes" && AC_MSG_ERROR([lzo enabled but missing])
970         OPTIONAL_LZO_CFLAGS="${LZO_CFLAGS}"
971         OPTIONAL_LZO_LIBS="${LZO_LIBS}"
972         AC_DEFINE([ENABLE_LZO], [1], [Enable LZO compression library])
974 if test "${enable_lzo_stub}" = "yes"; then
975         test "${enable_lzo}" = "yes" && AC_MSG_ERROR([Cannot have both lzo stub and lzo enabled])
976         AC_DEFINE([ENABLE_LZO_STUB], [1], [Enable LZO stub capability])
977         AC_DEFINE([ENABLE_LZO], [1], [Enable LZO compression library])
980 if test "${enable_pkcs11}" = "yes"; then
981         test "${have_pkcs11_helper}" != "yes" && AC_MSG_ERROR([PKCS11 enabled but libpkcs11-helper is missing])
982         test "${enable_ssl}" != "yes" && AC_MSG_ERROR([PKCS11 can be enabled only if SSL is enabled])
983         OPTIONAL_PKCS11_HELPER_CFLAGS="${PKCS11_HELPER_CFLAGS}"
984         OPTIONAL_PKCS11_HELPER_LIBS="${PKCS11_HELPER_LIBS}"
985         AC_DEFINE([ENABLE_PKCS11], [1], [Enable PKCS11])
988 if test "${enable_pedantic}" = "yes"; then
989         enable_strict="yes"
990         CFLAGS="${CFLAGS} -pedantic"
991         test "${WIN32}" != "yes" && CFLAGS="${CFLAGS} -ansi"
993 if test "${enable_strict}" = "yes"; then
994         CFLAGS="${CFLAGS} -Wall -Wno-unused-parameter -Wno-unused-function"
997 if test "${WIN32}" = "yes"; then
998         test -z "${MAN2HTML}" && AC_MSG_ERROR([man2html is required for win32])
1001 if test "${enable_plugin_auth_pam}" = "yes"; then
1002         PLUGIN_AUTH_PAM_CFLAGS="${LIBPAM_CFLAGS}"
1003         if test "${enable_pam_dlopen}" = "yes"; then
1004                 AC_DEFINE([USE_PAM_DLOPEN], [1], [dlopen libpam])
1005                 PLUGIN_AUTH_PAM_LIBS="${DL_LIBS}"
1006         else
1007                 test -z "${LIBPAM_LIBS}" && AC_MSG_ERROR([libpam required but missing])
1008                 PLUGIN_AUTH_PAM_LIBS="${LIBPAM_LIBS}"
1009         fi
1012 CONFIGURE_DEFINES="`set | grep '^enable_.*=' ; set | grep '^with_.*='`"
1013 AC_DEFINE_UNQUOTED([CONFIGURE_DEFINES], ["`echo ${CONFIGURE_DEFINES}`"], [Configuration settings])
1015 TAP_WIN_COMPONENT_ID="PRODUCT_TAP_WIN_COMPONENT_ID"
1016 TAP_WIN_MIN_MAJOR="PRODUCT_TAP_WIN_MIN_MAJOR"
1017 TAP_WIN_MIN_MINOR="PRODUCT_TAP_WIN_MIN_MINOR"
1018 AC_DEFINE_UNQUOTED([TAP_WIN_COMPONENT_ID], ["${TAP_WIN_COMPONENT_ID}"], [The tap-windows id])
1019 AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MAJOR], [${TAP_WIN_MIN_MAJOR}], [The tap-windows version number is required for OpenVPN])
1020 AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MINOR], [${TAP_WIN_MIN_MINOR}], [The tap-windows version number is required for OpenVPN])
1021 AC_SUBST([TAP_WIN_COMPONENT_ID])
1022 AC_SUBST([TAP_WIN_MIN_MAJOR])
1023 AC_SUBST([TAP_WIN_MIN_MINOR])
1025 AC_SUBST([OPTIONAL_DL_LIBS])
1026 AC_SUBST([OPTIONAL_SELINUX_LIBS])
1027 AC_SUBST([OPTIONAL_CRYPTO_CFLAGS])
1028 AC_SUBST([OPTIONAL_CRYPTO_LIBS])
1029 AC_SUBST([OPTIONAL_LZO_CFLAGS])
1030 AC_SUBST([OPTIONAL_LZO_LIBS])
1031 AC_SUBST([OPTIONAL_PKCS11_HELPER_CFLAGS])
1032 AC_SUBST([OPTIONAL_PKCS11_HELPER_LIBS])
1034 AC_SUBST([PLUGIN_AUTH_PAM_CFLAGS])
1035 AC_SUBST([PLUGIN_AUTH_PAM_LIBS])
1037 AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
1038 AM_CONDITIONAL([GIT_CHECKOUT], [test "${GIT_CHECKOUT}" = "yes"])
1039 AM_CONDITIONAL([ENABLE_PLUGIN_AUTH_PAM], [test "${enable_plugin_auth_pam}" = "yes"])
1040 AM_CONDITIONAL([ENABLE_PLUGIN_DOWN_ROOT], [test "${enable_plugin_down_root}" = "yes"])
1042 plugindir="${with_plugindir}"
1043 sampledir="\$(docdir)/sample"
1044 AC_SUBST([plugindir])
1045 AC_SUBST([sampledir])
1047 AC_CONFIG_FILES([
1048         version.sh
1049         Makefile
1050         build/Makefile
1051         build/msvc/Makefile
1052         build/msvc/msvc-generate/Makefile
1053         distro/Makefile
1054         distro/rpm/Makefile
1055         distro/rpm/openvpn.spec
1056         include/Makefile
1057         src/Makefile
1058         src/compat/Makefile
1059         src/openvpn/Makefile
1060         src/openvpnserv/Makefile
1061         src/plugins/Makefile
1062         src/plugins/auth-pam/Makefile
1063         src/plugins/down-root/Makefile
1064         tests/Makefile
1065         sample/Makefile
1066         doc/Makefile
1068 AC_CONFIG_FILES([tests/t_client.sh], [chmod +x tests/t_client.sh])
1069 AC_OUTPUT