]> git.ipfire.org Git - thirdparty/openvpn.git/blame - configure.ac
build: add libtool + windows resources for executables
[thirdparty/openvpn.git] / configure.ac
CommitLineData
6fbf66fa
JY
1dnl OpenVPN -- An application to securely tunnel IP networks
2dnl over a single UDP port, with support for SSL/TLS-based
3dnl session authentication and key exchange,
4dnl packet encryption, packet authentication, and
5dnl packet compression.
6dnl
564a2109 7dnl Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
51bd56f4 8dnl Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com>
6fbf66fa
JY
9dnl
10dnl This program is free software; you can redistribute it and/or modify
11dnl it under the terms of the GNU General Public License as published by
12dnl the Free Software Foundation; either version 2 of the License, or
13dnl (at your option) any later version.
14dnl
15dnl This program is distributed in the hope that it will be useful,
16dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
17dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18dnl GNU General Public License for more details.
19dnl
20dnl You should have received a copy of the GNU General Public License
21dnl along with this program (see the file COPYING included with this
22dnl distribution); if not, write to the Free Software Foundation, Inc.,
23dnl 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24
25dnl Process this file with autoconf to produce a configure script.
26
51bd56f4 27AC_PREREQ(2.59)
6fbf66fa 28
ce351583 29m4_include(version.m4)
51bd56f4
ABL
30AC_INIT([PRODUCT_NAME], [PRODUCT_VERSION], [PRODUCT_BUGREPORT], [PRODUCT_TARNAME])
31m4_include(compat.m4)
98bc1a3e
ABL
32AC_DEFINE([OPENVPN_VERSION_RESOURCE], [PRODUCT_VERSION_RESOURCE], [Version in windows resource format])
33
51bd56f4
ABL
34AC_CONFIG_AUX_DIR([.])
35AM_CONFIG_HEADER([config.h])
34cb9132 36AC_CONFIG_SRCDIR([src/openvpn/syshead.h])
0fc5b8b3 37AC_CONFIG_MACRO_DIR([m4])
51bd56f4
ABL
38AM_INIT_AUTOMAKE
39AC_CANONICAL_HOST
40AC_USE_SYSTEM_EXTENSIONS
6fbf66fa 41
51bd56f4
ABL
42AC_ARG_ENABLE(
43 [lzo],
44 [AS_HELP_STRING([--disable-lzo], [disable LZO compression support])],
45 ,
46 [enable_lzo="yes"]
6c34e74f
JY
47)
48
51bd56f4
ABL
49AC_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])],
52 ,
53 [enable_lzo_stub="no"]
6fbf66fa
JY
54)
55
51bd56f4
ABL
56AC_ARG_ENABLE(
57 [crypto],
58 [AS_HELP_STRING([--disable-crypto], [disable crypto support])],
59 ,
60 [enable_crypto="yes"]
6fbf66fa
JY
61)
62
51bd56f4
ABL
63AC_ARG_ENABLE(
64 [ssl],
65 [AS_HELP_STRING([--disable-ssl], [disable SSL support for TLS-based key exchange])],
66 ,
67 [enable_ssl="yes"]
fbd18db6
DS
68)
69
51bd56f4
ABL
70AC_ARG_ENABLE(
71 [x509-alt-username],
72 [AS_HELP_STRING([--enable-x509-alt-username], [enable the --x509-username-field feature])],
73 ,
74 [enable_x509_alt_username="no"]
6fbf66fa
JY
75)
76
51bd56f4
ABL
77AC_ARG_ENABLE(
78 [multi],
79 [AS_HELP_STRING([--disable-multi], [disable client/server support (--mode server + client mode)])],
80 ,
81 [enable_multi="yes"]
6fbf66fa
JY
82)
83
51bd56f4
ABL
84AC_ARG_ENABLE(
85 [server],
86 [AS_HELP_STRING([--disable-server], [disable server support only (but retain client support)])],
87 ,
88 [enable_server="yes"]
6fbf66fa
JY
89)
90
51bd56f4
ABL
91AC_ARG_ENABLE(
92 [plugins],
93 [AS_HELP_STRING([--disable-plugins], [disable plug-in support])],
94 ,
95 [enable_plugins="yes"]
0c1f7ad5
DS
96)
97
51bd56f4
ABL
98AC_ARG_ENABLE(
99 [eurephia],
100 [AS_HELP_STRING([--disable-eurephia], [disable support for the eurephia plug-in])],
101 ,
102 [enable_eurephia="yes"]
6fbf66fa
JY
103)
104
51bd56f4
ABL
105AC_ARG_ENABLE(
106 [management],
107 [AS_HELP_STRING([--disable-management], [disable management server support])],
108 ,
109 [enable_management="yes"]
ce98fd24
JY
110)
111
51bd56f4
ABL
112AC_ARG_ENABLE(
113 [pkcs11],
114 [AS_HELP_STRING([--disable-pkcs11], [disable pkcs11 support])],
115 ,
116 [enable_pkcs11="yes"]
6fbf66fa
JY
117)
118
51bd56f4
ABL
119AC_ARG_ENABLE(
120 [socks],
121 [AS_HELP_STRING([--disable-socks], [disable Socks support])],
122 ,
123 [enable_socks="yes"]
6fbf66fa
JY
124)
125
51bd56f4
ABL
126AC_ARG_ENABLE(
127 [http-proxy],
128 [AS_HELP_STRING([--disable-http-proxy], [disable HTTP proxy support])],
129 ,
130 [enable_http_proxy="yes"]
6fbf66fa
JY
131)
132
51bd56f4
ABL
133AC_ARG_ENABLE(
134 [fragment],
135 [AS_HELP_STRING([--disable-fragment], [disable internal fragmentation support (--fragment)])],
136 ,
137 [enable_fragment="yes"]
8bc93d7f
JY
138)
139
51bd56f4
ABL
140AC_ARG_ENABLE(
141 [multihome],
142 [AS_HELP_STRING([--disable-multihome], [disable multi-homed UDP server support (--multihome)])],
143 ,
144 [enable_multihome="yes"]
6add6b2f
JY
145)
146
51bd56f4
ABL
147AC_ARG_ENABLE(
148 [port-share],
149 [AS_HELP_STRING([--disable-port-share], [disable TCP server port-share support (--port-share)])],
150 ,
151 [enable_port_share="yes"]
6fbf66fa
JY
152)
153
51bd56f4
ABL
154AC_ARG_ENABLE(
155 [debug],
156 [AS_HELP_STRING([--disable-debug], [disable debugging support (disable gremlin and verb 7+ messages)])],
157 ,
158 [enable_debug="yes"]
6fbf66fa
JY
159)
160
51bd56f4
ABL
161AC_ARG_ENABLE(
162 [small],
163 [AS_HELP_STRING([--enable-small], [enable smaller executable size (disable OCC, usage message, and verb 4 parm list)])],
164 ,
165 [enable_small="no"]
6fbf66fa
JY
166)
167
51bd56f4
ABL
168AC_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])],
171 [enable_password_save="no"]
6fbf66fa
JY
172)
173
51bd56f4
ABL
174AC_ARG_ENABLE(
175 [iproute2],
176 [AS_HELP_STRING([--enable-iproute2], [enable support for iproute2])],
177 ,
178 [enable_iproute2="no"]
fb7aa54a
JY
179)
180
51bd56f4
ABL
181AC_ARG_ENABLE(
182 [def-auth],
183 [AS_HELP_STRING([--disable-def-auth], [disable deferred authentication])],
184 ,
185 [enable_def_auth="yes"]
fb7aa54a
JY
186)
187
51bd56f4
ABL
188AC_ARG_ENABLE(
189 [pf],
190 [AS_HELP_STRING([--disable-pf], [disable internal packet filter])],
191 ,
192 [enable_pf="yes"]
6fbf66fa
JY
193)
194
51bd56f4
ABL
195AC_ARG_ENABLE(
196 [strict],
197 [AS_HELP_STRING([--enable-strict], [enable strict compiler warnings (debugging option)])],
198 ,
199 [enable_strict="no"]
6fbf66fa
JY
200)
201
51bd56f4
ABL
202AC_ARG_ENABLE(
203 [pedantic],
204 [AS_HELP_STRING([--enable-pedantic], [enable pedantic compiler warnings, will not generate a working executable (debugging option)])],
205 ,
206 [enable_pedantic="no"]
6fbf66fa
JY
207)
208
51bd56f4
ABL
209AC_ARG_ENABLE(
210 [strict-options],
211 [AS_HELP_STRING([--enable-strict-options], [enable strict options check between peers (debugging option)])],
212 ,
213 [enable_strict_options="no"]
6fbf66fa
JY
214)
215
51bd56f4
ABL
216AC_ARG_ENABLE(
217 [selinux],
218 [AS_HELP_STRING([--disable-selinux], [disable SELinux support])],
219 ,
220 [enable_selinux="no"]
99385447
JY
221)
222
51bd56f4
ABL
223AC_ARG_ENABLE(
224 [systemd],
225 [AS_HELP_STRING([--enable-systemd], [enable systemd suppport])],
226 ,
227 [enable_systemd="no"]
9449e6a9
FC
228)
229
51bd56f4
ABL
230AC_ARG_WITH(
231 [ssl-headers],
232 [AS_HELP_STRING([--with-ssl-headers=DIR], [Crypto/SSL Include files location])],
233 [CS_HDR_DIR="$withval"]
234 [CPPFLAGS="$CPPFLAGS -I$withval"]
6fbf66fa
JY
235)
236
51bd56f4
ABL
237AC_ARG_WITH(
238 [ssl-lib],
239 [AS_HELP_STRING([--with-ssl-lib=DIR], [Crypto/SSL Library location])],
240 [LDFLAGS="$LDFLAGS -L$withval"]
6fbf66fa
JY
241)
242
51bd56f4
ABL
243AC_ARG_WITH(
244 [lzo-headers],
245 [AS_HELP_STRING([--with-lzo-headers=DIR], [LZO Include files location])],
246 [LZO_HDR_DIR="$withval"]
247 [CPPFLAGS="$CPPFLAGS -I$withval"]
6fbf66fa
JY
248)
249
51bd56f4
ABL
250AC_ARG_WITH(
251 [lzo-lib],
252 [AS_HELP_STRING([--with-lzo-lib=DIR], [LZO Library location])],
253 [LDFLAGS="$LDFLAGS -L$withval"]
6fbf66fa
JY
254)
255
51bd56f4
ABL
256AC_ARG_WITH(
257 [pkcs11-helper-headers],
258 [AS_HELP_STRING([--with-pkcs11-helper-headers=DIR], [pkcs11-helper Include files location])],
259 [PKCS11_HELPER_HDR_DIR="$withval"]
260 [CPPFLAGS="$CPPFLAGS -I$withval"]
1bda73a7
JY
261)
262
51bd56f4
ABL
263AC_ARG_WITH(
264 [pkcs11-helper-lib],
265 [AS_HELP_STRING([--with-pkcs11-helper-lib=DIR], [pkcs11-helper Library location])],
266 [LDFLAGS="$LDFLAGS -L$withval"]
1bda73a7
JY
267)
268
51bd56f4
ABL
269AC_ARG_WITH(
270 [ifconfig-path],
271 [AS_HELP_STRING([--with-ifconfig-path=PATH], [Path to ifconfig tool])],
272 [IFCONFIG="$withval"],
273 [AC_PATH_PROG([IFCONFIG], [ifconfig], [ifconfig], [$PATH:/usr/local/sbin:/usr/sbin:/sbin])]
6fbf66fa 274)
51bd56f4 275AC_DEFINE_UNQUOTED([IFCONFIG_PATH], ["$IFCONFIG"], [Path to ifconfig tool])
6fbf66fa 276
51bd56f4
ABL
277AC_ARG_WITH(
278 [iproute-path],
279 [AS_HELP_STRING([--with-iproute-path=PATH], [Path to iproute tool])],
280 [IPROUTE="$withval"],
281 [AC_PATH_PROG([IPROUTE], [ip], [ip], [$PATH:/usr/local/sbin:/usr/sbin:/sbin])]
6fbf66fa 282)
51bd56f4 283AC_DEFINE_UNQUOTED([IPROUTE_PATH], ["$IPROUTE"], [Path to iproute tool])
6fbf66fa 284
51bd56f4
ABL
285AC_ARG_WITH([route-path],
286 [AS_HELP_STRING([--with-route-path=PATH], [Path to route tool])],
6fbf66fa
JY
287 [ROUTE="$withval"],
288 [AC_PATH_PROG([ROUTE], [route], [route], [$PATH:/usr/local/sbin:/usr/sbin:/sbin])]
289)
51bd56f4 290AC_DEFINE_UNQUOTED([ROUTE_PATH], ["$ROUTE"], [Path to route tool])
6fbf66fa 291
51bd56f4
ABL
292AC_ARG_WITH(
293 [netstat-path],
294 [AS_HELP_STRING([--with-netstat-path=PATH], [Path to netstat tool])],
295 [NETSTAT="$withval"],
296 [AC_PATH_PROG([NETSTAT], [netstat], [netstat], [$PATH:/usr/local/sbin:/usr/sbin:/sbin:/etc])]
5086d75d 297)
51bd56f4 298AC_DEFINE_UNQUOTED([NETSTAT_PATH], ["$NETSTAT"], [Path to netstat tool])
5086d75d 299
51bd56f4
ABL
300AC_ARG_WITH(
301 [mem-check],
302 [AS_HELP_STRING([--with-mem-check=TYPE], [build with debug memory checking, TYPE=dmalloc|valgrind|ssl])],
303 [
304 case "${withval}" in
305 dmalloc|valgrind|ssl|no) ;;
306 *) AC_MSG_ERROR([bad value ${withval} for --mem-check]) ;;
307 esac
308 ],
309 [with_mem_check="no"]
6fbf66fa
JY
310)
311
51bd56f4
ABL
312AC_ARG_WITH(
313 [ssl-type],
314 [AS_HELP_STRING([--with-ssl-type=TYPE], [build with the given SSL library, TYPE = openssl or polarssl])],
315 [
316 case "${withval}" in
317 openssl|polarssl) ;;
318 *) AC_MSG_ERROR([bad value ${withval} for --with-ssl-type]) ;;
319 esac
320 ],
321 [with_ssl_type="openssl"]
0a180174 322)
0a180174 323
51bd56f4 324AC_DEFINE_UNQUOTED(TARGET_ALIAS, "${host}", [A string representing our host])
86715242 325case "$host" in
51bd56f4
ABL
326 *-*-linux*)
327 AC_DEFINE([TARGET_LINUX], [1], [Are we running on Linux?])
328 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["L"], [Target prefix])
329 ;;
330 *-*-solaris*)
331 AC_DEFINE([TARGET_SOLARIS], [1], [Are we running on Solaris?])
332 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["S"], [Target prefix])
333 ;;
334 *-*-openbsd*)
335 AC_DEFINE([TARGET_OPENBSD], [1], [Are we running on OpenBSD?])
336 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["O"], [Target prefix])
337 ;;
338 *-*-freebsd*)
339 AC_DEFINE([TARGET_FREEBSD], [1], [Are we running on FreeBSD?])
340 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["F"], [Target prefix])
341 ;;
342 *-*-netbsd*)
343 AC_DEFINE([TARGET_NETBSD], [1], [Are we running NetBSD?])
344 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["N"], [Target prefix])
345 ;;
346 *-*-darwin*)
347 AC_DEFINE([TARGET_DARWIN], [1], [Are we running on Mac OS X?])
348 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["M"], [Target prefix])
349 dnl some Mac OS X tendering (we use vararg macros...)
350 CPPFLAGS="$CPPFLAGS -no-cpp-precomp"
351 ;;
352 *-mingw*)
353 AC_DEFINE([TARGET_WIN32], [1], [Are we running WIN32?])
354 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["W"], [Target prefix])
355 CPPFLAGS="${CPPFLAGS} -DWIN32_LEAN_AND_MEAN -DWINVER=0x0501"
356 WIN32=yes
51bd56f4
ABL
357 ;;
358 *-*-dragonfly*)
359 AC_DEFINE([TARGET_DRAGONFLY], [1], [Are we running on DragonFlyBSD?])
360 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["D"], [Target prefix])
361 ;;
362 *)
363 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["X"], [Target prefix])
364 ;;
6fbf66fa
JY
365esac
366
51bd56f4
ABL
367PKG_PROG_PKG_CONFIG
368AC_PROG_CPP
6fbf66fa 369AC_PROG_INSTALL
51bd56f4
ABL
370AC_PROG_LN_S
371AC_PROG_MAKE_SET
6fbf66fa 372
98bc1a3e
ABL
373#
374# Libtool
375#
376ifdef(
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 ]
387)
388
1bda73a7
JY
389if test "${WIN32}" = "yes"; then
390 AC_ARG_VAR([MAN2HTML], [man2html utility])
391 AC_CHECK_PROGS([MAN2HTML], [man2html])
392 test -z "${MAN2HTML}" && AC_MSG_ERROR([man2html is required for win32])
393fi
394
6fbf66fa
JY
395AC_C_CONST
396AC_C_INLINE
397AC_C_VOLATILE
398AC_TYPE_OFF_T
399AC_TYPE_PID_T
400AC_TYPE_SIZE_T
401AC_TYPE_UID_T
51bd56f4
ABL
402AC_TYPE_INT8_T
403AC_TYPE_INT16_T
404AC_TYPE_INT32_T
405AC_TYPE_INT64_T
406AC_TYPE_UINT8_T
407AC_TYPE_UINT16_T
408AC_TYPE_UINT32_T
409AC_TYPE_UINT64_T
410AC_TYPE_SIGNAL
6fbf66fa
JY
411AX_CPP_VARARG_MACRO_ISO
412AX_CPP_VARARG_MACRO_GCC
0dbd45db 413AX_TYPE_SOCKLEN_T
6fbf66fa 414AX_EMPTY_ARRAY
51bd56f4
ABL
415AC_CHECK_SIZEOF([unsigned int])
416AC_CHECK_SIZEOF([unsigned long])
417AC_CHECK_HEADERS([ \
418 stdio.h stdarg.h \
419 time.h errno.h fcntl.h io.h direct.h \
420 ctype.h sys/types.h sys/socket.h \
421 signal.h unistd.h \
422 netinet/in.h netinet/in_systm.h \
423 netinet/tcp.h arpa/inet.h netdb.h \
424 windows.h winsock2.h ws2tcpip.h \
425])
6fbf66fa 426
51bd56f4
ABL
427SOCKET_INCLUDES="
428#ifdef HAVE_STDLIB_H
429#include <stdlib.h>
430#endif
431#ifdef HAVE_SYS_TYPES_H
432#include <sys/types.h>
433#endif
434#ifdef HAVE_SYS_SOCKET_H
435#include <sys/socket.h>
436#endif
437#ifdef HAVE_NETINET_IN_H
438#include <netinet/in.h>
439#endif
440#ifdef HAVE_WINDOWS_H
441#include <windows.h>
442#endif
443#ifdef HAVE_WINSOCK2_H
444#include <winsock2.h>
445#endif
446#ifdef HAVE_WS2TCPIP_H
447#include <ws2tcpip.h>
448#endif
449"
1bda73a7
JY
450
451if test "${WIN32}" != "yes"; then
51bd56f4
ABL
452 AC_CHECK_HEADERS([ \
453 sys/time.h sys/un.h sys/ioctl.h sys/stat.h \
454 sys/mman.h sys/file.h \
455 syslog.h pwd.h grp.h \
456 net/if_tun.h net/tun/if_tun.h stropts.h \
457 sys/sockio.h \
458 sys/uio.h linux/if_tun.h linux/sockios.h \
459 linux/types.h sys/poll.h sys/epoll.h err.h \
6fbf66fa 460 ])
51bd56f4
ABL
461 AC_CHECK_HEADERS(
462 [net/if.h netinet/ip.h netinet/if_ether.h resolv.h],
463 ,
464 ,
465 [[${SOCKET_INCLUDES}]]
466 )
467
468 AC_CHECK_DECLS(
469 [SO_MARK],
470 ,
471 ,
472 [[${SOCKET_INCLUDES}]]
473 )
474
475 AC_SEARCH_LIBS([socket], [socket])
476 AC_SEARCH_LIBS([inet_ntoa], [nsl])
477 AC_SEARCH_LIBS([gethostbyname], [resolv nsl])
478 AC_FUNC_FORK
1bda73a7
JY
479fi
480
51bd56f4
ABL
481dnl We emulate signals in Windows
482AC_CHECK_DECLS(
483 [SIGHUP],
484 ,
485 [AC_DEFINE([SIGHUP], [1], [SIGHUP replacement])],
486 [[
487 #ifdef HAVE_SIGNAL_H
488 #include <signal.h>
489 #endif
490 ]]
491)
492AC_CHECK_DECLS(
493 [SIGINT],
494 ,
495 [AC_DEFINE([SIGINT], [2], [SIGINT replacement])],
496 [[
497 #ifdef HAVE_SIGNAL_H
498 #include <signal.h>
499 #endif
500 ]]
501)
502AC_CHECK_DECLS(
503 [SIGUSR1],
504 ,
505 [AC_DEFINE([SIGUSR1], [10], [SIGUSR1 replacement])],
506 [[
507 #ifdef HAVE_SIGNAL_H
508 #include <signal.h>
509 #endif
510 ]]
511)
512AC_CHECK_DECLS(
513 [SIGUSR2],
514 ,
515 [AC_DEFINE([SIGUSR2], [12], [SIGUSR2 replacement])],
516 [[
517 #ifdef HAVE_SIGNAL_H
518 #include <signal.h>
519 #endif
520 ]]
521)
522AC_CHECK_DECLS(
523 [SIGTERM],
524 ,
525 [AC_DEFINE([SIGTERM], [15], [SIGTERM replacement])],
526 [[
527 #ifdef HAVE_SIGNAL_H
528 #include <signal.h>
529 #endif
530 ]]
531)
532
533AC_CHECK_TYPES(
6fbf66fa 534 [in_addr_t],
51bd56f4
ABL
535 ,
536 [AC_DEFINE([in_addr_t], [uint32_t], [Workaround missing in_addr_t])],
537 [[${SOCKET_INCLUDES}]]
538)
6fbf66fa
JY
539
540dnl check for IPv6 types
541AC_CHECK_TYPE(
542 [struct tun_pi],
543 [AC_DEFINE(HAVE_TUN_PI, 1, [struct tun_pi needed for IPv6 support])],
51bd56f4
ABL
544 ,
545 [[${SOCKET_INCLUDES}]]
546)
6fbf66fa
JY
547AC_CHECK_TYPE(
548 [struct iphdr],
549 [AC_DEFINE(HAVE_IPHDR, 1, [struct iphdr needed for IPv6 support])],
51bd56f4
ABL
550 ,
551 [[${SOCKET_INCLUDES}]]
552)
6fbf66fa
JY
553AC_CHECK_TYPE(
554 [struct sock_extended_err],
555 [AC_DEFINE(HAVE_SOCK_EXTENDED_ERR, 1, [struct sock_extended_err needed for extended socket error support])],
51bd56f4
ABL
556 ,
557 [[${SOCKET_INCLUDES}]]
558)
6fbf66fa
JY
559AC_CHECK_TYPE(
560 [struct msghdr],
561 [AC_DEFINE(HAVE_MSGHDR, 1, [struct msghdr needed for extended socket error support])],
51bd56f4
ABL
562 ,
563 [[${SOCKET_INCLUDES}]]
564)
6fbf66fa
JY
565AC_CHECK_TYPE(
566 [struct cmsghdr],
567 [AC_DEFINE(HAVE_CMSGHDR, 1, [struct cmsghdr needed for extended socket error support])],
51bd56f4
ABL
568 ,
569 [[${SOCKET_INCLUDES}]]
570)
8bc93d7f
JY
571AC_CHECK_TYPE(
572 [struct in_pktinfo],
573 [AC_DEFINE(HAVE_IN_PKTINFO, 1, [struct in_pktinfo needed for IP_PKTINFO support])],
51bd56f4
ABL
574 ,
575 [[${SOCKET_INCLUDES}]]
576)
577AC_CHECK_TYPE(
578 [struct sockaddr_in6],
579 ,
580 [AC_MSG_ERROR([struct sockaddr_in6 not found, needed for ipv6 transport support.])],
581 [[${SOCKET_INCLUDES}]]
582)
583
584AC_CHECK_FUNCS(
585 [ctime memset vsnprintf strdup],
586 ,
587 [AC_MSG_ERROR([Required library function not found])]
588)
589AC_CHECK_FUNCS([ \
590 daemon chroot getpwnam setuid nice system getpid dup dup2 \
591 getpass strerror syslog openlog mlockall getgrnam setgid \
592 setgroups stat flock readv writev time gettimeofday \
593 setsid chdir putenv getpeername unlink \
594 chsize ftruncate execve getpeereid umask basename dirname access \
595 epoll_create \
596])
597AC_CHECK_FUNCS([sendmsg recvmsg])
598AC_CHECK_FUNCS(
599 [res_init],
600 ,
601 ,
602 [[#include <resolv.h>]]
603)
0eb2ee14
JY
604
605# Windows use stdcall for winsock so we cannot auto detect these
51bd56f4
ABL
606m4_define(
607 [SOCKET_FUNCS],
608[socket recv recvfrom send sendto listen dnl
609accept connect bind select gethostbyname inet_ntoa]dnl
610)
611m4_define(
612 [SOCKET_OPT_FUNCS],
613 [setsockopt getsockopt getsockname poll]dnl
614)
1bda73a7 615if test "${WIN32}" = "yes"; then
1bda73a7 616 AC_DEFINE([HAVE_GETTIMEOFDAY], [1], [We fake gettimeofday for win32 at otime.c])
51bd56f4
ABL
617 m4_foreach(
618 [F],
619 m4_split(SOCKET_FUNCS SOCKET_OPT_FUNCS),
620 m4_define([UF], [[m4_join([_], [HAVE], m4_toupper(F))]])
621 AC_DEFINE([UF], [1], [Win32 builtin])
622 )
1bda73a7 623else
51bd56f4
ABL
624 AC_CHECK_FUNCS(
625 SOCKET_FUNCS,
626 ,
627 [AC_MSG_ERROR([Required library function not found])]
628 )
629 AC_CHECK_FUNCS(SOCKET_OPT_FUNCS)
630fi
631
632case "${with_mem_check}" in
633 valgrind)
634 AC_CHECK_HEADER(
635 [valgrind/memcheck.h],
636 [
637 CFLAGS="${CFLAGS} -g -fno-inline"
638 AC_DEFINE(
639 [USE_VALGRIND],
640 [1],
641 [Use valgrind memory debugging library]
642 )
643 ],
644 [AC_MSG_ERROR([valgrind headers not found.])]
645 )
646 ;;
647 dmalloc)
648 AC_CHECK_HEADER(
649 [dmalloc.h],
650 [AC_CHECK_LIB(
651 [dmalloc],
652 [malloc],
653 [
e02570fd 654 LIBS="${LIBS} -ldmalloc"
51bd56f4
ABL
655 AC_DEFINE(
656 [DMALLOC],
657 [1],
658 [Use dmalloc memory debugging library]
659 )
660 ],
661 [AC_MSG_ERROR([dmalloc library not found.])]
662 )],
663 [AC_MSG_ERROR([dmalloc headers not found.])]
664 )
665 ;;
666 ssl)
667 AC_CHECK_LIB(
668 [ssl],
669 [CRYPTO_mem_ctrl],
670 [
671 AC_DEFINE(
672 [CRYPTO_MDEBUG],
673 [1],
674 [Use memory debugging function in OpenSSL]
675 )
676 AC_MSG_NOTICE([NOTE: OpenSSL library must be compiled with CRYPTO_MDEBUG])
677 ],
678 [AC_MSG_ERROR([Memory Debugging function in OpenSSL library not found.])]
679 )
680 ;;
681esac
6fbf66fa
JY
682
683dnl
684dnl Check for dlopen -- first try libc then libdl.
685dnl
51bd56f4
ABL
686if test "${WIN32}" != "yes" -a "${enable_plugins}" = "yes"; then
687 AC_CHECK_HEADER(
688 [dlfcn.h],
689 [AC_CHECK_FUNC(
690 [dlopen],
691 [AC_DEFINE(USE_LIBDL, 1, [Use libdl for dynamic library loading])],
692 [AC_CHECK_LIB(
693 [dl],
694 [dlopen],
695 [
e02570fd 696 LIBS="${LIBS} -ldl"
51bd56f4
ABL
697 AC_DEFINE(USE_LIBDL, 1, [Use libdl for dynamic library loading])
698 ],
699 [AC_MSG_RESULT([libdl library not found.])]
700 )],
701 )],
702 )
703 if test "${enable_eurephia}" = "yes"; then
704 AC_DEFINE([ENABLE_EUREPHIA], [1], [Enable support for the eurephia plug-in])
705 fi
6fbf66fa
JY
706fi
707
47ae8457
JY
708dnl
709dnl Check if LoadLibrary exists on Windows
710dnl
fc71b7c9 711if test "${WIN32}" = "yes"; then
51bd56f4 712 AC_DEFINE(USE_LOAD_LIBRARY, 1, [Use LoadLibrary to load DLLs on Windows])
47ae8457
JY
713fi
714
6fbf66fa
JY
715dnl
716dnl check for LZO library
717dnl
51bd56f4 718if test "${enable_lzo}" = "yes" && test "${enable_lzo_stub}" = "no"; then
6fbf66fa
JY
719 LZO_H=""
720 AC_CHECKING([for LZO Library and Header files])
721 AC_CHECK_HEADER(lzo/lzo1x.h,
722 [ LZO_H="2"
723 lzolibs="lzo2 lzo"
724 AC_DEFINE(LZO_HEADER_DIR, 1, [Use lzo/ directory prefix for LZO header files (for LZO 2.0)])
725 ],
726 [ AC_CHECK_HEADER(lzo1x.h, [ LZO_H="1" ; lzolibs=lzo ]) ]
727 )
728
729 if test -n "$LZO_H"; then
730 havelzolib=0
731 for i in $lzolibs ; do
732 if test $havelzolib = 1 ; then break ; fi
733 AC_CHECK_LIB($i, lzo1x_1_15_compress,
734 [
e02570fd 735 LIBS="${LIBS} -l$i"
6fbf66fa 736 AC_DEFINE(USE_LZO, 1, [Use LZO compression library])
3c7f2f55 737 AC_DEFINE_UNQUOTED(LZO_VERSION_NUM, "$LZO_H", [LZO version number])
6fbf66fa
JY
738 havelzolib=1
739 ]
740 )
741 done
742 if test $havelzolib = 0 ; then
743 AC_MSG_ERROR([LZO headers were found but LZO library was not found])
744 fi
745 else
746 AC_MSG_RESULT([LZO headers were not found])
747 AC_MSG_RESULT([LZO library available from http://www.oberhumer.com/opensource/lzo/])
6c34e74f 748 AC_MSG_ERROR([Or try ./configure --disable-lzo OR ./configure --enable-lzo-stub])
6fbf66fa
JY
749 fi
750fi
751
6c34e74f 752dnl enable multi-client mode
51bd56f4
ABL
753if test "${enable_lzo_stub}" = "yes"; then
754 AC_DEFINE([LZO_STUB], [1], [Enable LZO stub capability])
6c34e74f
JY
755fi
756
53f97e1e
AJ
757dnl
758dnl enable pkcs11 capability
759dnl
51bd56f4 760if test "${enable_pkcs11}" = "yes"; then
53f97e1e
AJ
761 AC_CHECKING([for pkcs11-helper Library and Header files])
762 AC_CHECK_HEADER(pkcs11-helper-1.0/pkcs11h-core.h,
763 [AC_CHECK_LIB(pkcs11-helper, pkcs11h_initialize,
764 [
765 AC_DEFINE(USE_PKCS11, 1, [Enable PKCS11 capability])
e02570fd 766 LIBS="${LIBS} -lpkcs11-helper"
53f97e1e
AJ
767 ],
768 [AC_MSG_RESULT([pkcs11-helper library not found.])]
769 )],
770 [AC_MSG_RESULT([pkcs11-helper headers not found.])]
771 )
772fi
773
6fbf66fa 774dnl
0a180174 775dnl check for SSL-crypto library
6fbf66fa 776dnl
51bd56f4
ABL
777if test "${enable_crypto}" = "yes"; then
778 if test "${with_ssl_type}" = "openssl"; then
0a180174
AJ
779 AC_CHECKING([for OpenSSL Crypto Library and Header files])
780 AC_CHECK_HEADER(openssl/evp.h,,
781 [AC_MSG_ERROR([OpenSSL Crypto headers not found.])])
782
783 for lib in crypto eay32; do
784 AC_CHECK_LIB($lib, EVP_CIPHER_CTX_init,
785 [
786 cryptofound=1
e02570fd 787 LIBS="${LIBS} -l$lib"
0a180174
AJ
788 ]
789 )
790 done
791 test -n "$cryptofound" || AC_MSG_ERROR([OpenSSL Crypto library not found.])
792
793 AC_MSG_CHECKING([that OpenSSL Library is at least version 0.9.6])
794 AC_EGREP_CPP(yes,
795 [
796 #include <openssl/evp.h>
797 #if SSLEAY_VERSION_NUMBER >= 0x00906000L
798 yes
799 #endif
800 ],
801 [
802 AC_MSG_RESULT([yes])
803 AC_DEFINE(USE_CRYPTO, 1, [Use crypto library])
804 AC_DEFINE(USE_OPENSSL, 1, [Use OpenSSL library])
805 AC_CHECK_FUNCS(EVP_CIPHER_CTX_set_key_length)
806
807 dnl check for OpenSSL crypto acceleration capability
808 AC_CHECK_HEADERS(openssl/engine.h)
809 AC_CHECK_FUNCS(ENGINE_load_builtin_engines)
810 AC_CHECK_FUNCS(ENGINE_register_all_complete)
811 AC_CHECK_FUNCS(ENGINE_cleanup)
812 ],
813 [AC_MSG_ERROR([OpenSSL crypto Library is too old.])]
814 )
815 fi
51bd56f4 816 if test "${with_ssl_type}" = "polarssl"; then
53f97e1e
AJ
817 AC_CHECKING([for PolarSSL Crypto Library and Header files])
818 AC_CHECK_HEADER(polarssl/aes.h,
819 [AC_CHECK_LIB(polarssl, aes_crypt_cbc,
820 [
e02570fd 821 LIBS="${LIBS} -lpolarssl"
53f97e1e
AJ
822 AC_DEFINE(USE_CRYPTO, 1, [Use crypto library])
823 AC_DEFINE(USE_POLARSSL, 1, [Use PolarSSL library])
824 ],
825 [AC_MSG_ERROR([PolarSSL Crypto library not found.])]
826 )],
827 [AC_MSG_ERROR([PolarSSL Crypto headers not found.])]
828 )
829 fi
0a180174
AJ
830 dnl
831 dnl check for OpenSSL-SSL library
832 dnl
6fbf66fa 833
51bd56f4
ABL
834 if test "${enable_ssl}" = "yes"; then
835 if test "${with_ssl_type}" = "openssl"; then
0a180174
AJ
836 AC_CHECKING([for OpenSSL SSL Library and Header files])
837 AC_CHECK_HEADER(openssl/ssl.h,,
838 [AC_MSG_ERROR([OpenSSL SSL headers not found.])]
839 )
840
841 for lib in ssl ssl32; do
842 AC_CHECK_LIB($lib, SSL_CTX_new,
843 [
844 sslfound=1
e02570fd 845 LIBS="${LIBS} -l$lib"
0a180174 846 ]
8d3ed25d 847 )
0a180174
AJ
848 done
849
850 test -n "${sslfound}" || AC_MSG_ERROR([OpenSSL SSL library not found.])
851
0a180174 852 AC_DEFINE(USE_SSL, 1, [Use OpenSSL SSL library])
fc71b7c9 853 fi
51bd56f4 854 if test "${with_ssl_type}" = "polarssl"; then
53f97e1e
AJ
855 AC_CHECKING([for PolarSSL SSL Library and Header files])
856 AC_CHECK_HEADER(polarssl/ssl.h,
857 [AC_CHECK_LIB(polarssl, ssl_init,
858 [
e02570fd 859 LIBS="${LIBS} -lpolarssl"
53f97e1e
AJ
860 AC_DEFINE(USE_SSL, 1, [Use SSL library])
861 AC_DEFINE(USE_POLARSSL, 1, [Use PolarSSL library])
862 ],
863 [AC_MSG_ERROR([PolarSSL SSL library not found.])]
864 )],
865 [AC_MSG_ERROR([PolarSSL SSL headers not found.])]
866 )
867 fi
6fbf66fa
JY
868 fi
869fi
870
99385447
JY
871dnl
872dnl check for SELinux library and headers
873dnl
51bd56f4
ABL
874if test "${enable_selinux}" = "yes"; then
875 AC_CHECK_HEADER(
876 [selinux/selinux.h],
877 [AC_CHECK_LIB(
878 [selinux],
879 [setcon],
880 [
e02570fd 881 LIBS="${LIBS} -lselinux"
51bd56f4
ABL
882 AC_DEFINE(HAVE_SETCON, 1, [SELinux support])
883 ],
884 [AC_MSG_RESULT([SELinux library not found.])]
885 )],
886 [AC_MSG_ERROR([SELinux headers not found.])]
887 )
888fi
889
890if test -n "${SP_PLATFORM_WINDOWS}"; then
891 AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['\\\\'], [Path separator]) #"
892 AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["\\\\"], [Path separator]) #"
893else
894 AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['/'], [Path separator])
895 AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["/"], [Path separator])
896fi
897
898dnl enable --x509-username-field feature if requested
899if test "${enable_x509_alt_username}" = "yes"; then
900 if test "${with_ssl_type}" = "polarssl" ; then
901 AC_MSG_ERROR([PolarSSL does not support the --x509-username-field feature])
902 fi
903
904 AC_DEFINE([ENABLE_X509ALTUSERNAME], [1], [Enable --x509-username-field feature])
905fi
906
907test "${ac_cv_header_sys_uio_h}" = "yes" && AC_DEFINE([HAVE_IOVEC], [1], [struct iovec needed for IPv6 support])
908test "${enable_multi}" = "yes" && AC_DEFINE([ENABLE_CLIENT_SERVER], [1], [Enable client/server capability])
909test "${enable_server}" = "no" && AC_DEFINE([ENABLE_CLIENT_ONLY], [1], [Enable client capability only])
910test "${enable_management}" = "yes" && AC_DEFINE([ENABLE_MANAGEMENT], [1], [Enable management server capability])
911test "${enable_socks}" = "yes" && AC_DEFINE([ENABLE_SOCKS], [1], [Enable Socks proxy support])
912test "${enable_http_proxy}" = "yes" && AC_DEFINE([ENABLE_HTTP_PROXY], [1], [Enable HTTP proxy support])
913test "${enable_multihome}" = "yes" && AC_DEFINE([ENABLE_MULTIHOME], [1], [Enable multi-homed UDP server capability])
914test "${enable_debug}" = "yes" && AC_DEFINE([ENABLE_DEBUG], [1], [Enable debugging support])
915test "${enable_small}" = "yes" && AC_DEFINE([ENABLE_SMALL], [1], [Enable smaller executable size])
916test "${enable_fragment}" = "yes" && AC_DEFINE([ENABLE_FRAGMENT], [1], [Enable internal fragmentation support])
917test "${enable_port_share}" = "yes" && AC_DEFINE([ENABLE_PORT_SHARE], [1], [Enable TCP Server port sharing])
918test "${enable_def_auth}" = "yes" && AC_DEFINE([ENABLE_DEF_AUTH], [1], [Enable deferred authentication])
919test "${enable_pf}" = "yes" && AC_DEFINE([ENABLE_PF], [1], [Enable internal packet filter])
920test "${enable_strict_options}" = "yes" && AC_DEFINE([ENABLE_STRICT_OPTIONS_CHECK], [1], [Enable strict options check between peers])
921test "${enable_password_save}" = "yes" && AC_DEFINE([ENABLE_PASSWORD_SAVE], [1], [Allow --askpass and --auth-user-pass passwords to be read from a file])
922test "${enable_systemd}" = "yes" && AC_DEFINE([ENABLE_SYSTEMD], [1], [Enable systemd support])
923test "${enable_iproute2}" = "yes" && AC_DEFINE([ENABLE_IPROUTE], [1], [enable iproute2 support])
924
925if test "${enable_pedantic}" = "yes"; then
926 enable_strict="yes"
927 CFLAGS="${CFLAGS} -ansi -pedantic"
928fi
929if test "${enable_strict}" = "yes"; then
930 CFLAGS="${CFLAGS} -Wall -Wno-unused-parameter -Wno-unused-function"
99385447
JY
931fi
932
fcff80aa
ABL
933CONFIGURE_DEFINES="`set | grep '^enable_.*=' ; set | grep '^with_.*='`"
934AC_DEFINE_UNQUOTED([CONFIGURE_DEFINES], ["`echo ${CONFIGURE_DEFINES}`"], [Configuration settings])
935
ac2447cd
ABL
936TAP_WIN_COMPONENT_ID="PRODUCT_TAP_WIN_COMPONENT_ID"
937TAP_WIN_MIN_MAJOR="PRODUCT_TAP_WIN_MIN_MAJOR"
938TAP_WIN_MIN_MINOR="PRODUCT_TAP_WIN_MIN_MINOR"
939AC_DEFINE_UNQUOTED([TAP_WIN_COMPONENT_ID], ["${TAP_WIN_COMPONENT_ID}"], [The tap-windows id])
940AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MAJOR], [${TAP_WIN_MIN_MAJOR}], [The tap-windows version number is required for OpenVPN])
941AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MINOR], [${TAP_WIN_MIN_MINOR}], [The tap-windows version number is required for OpenVPN])
942AC_SUBST([TAP_WIN_COMPONENT_ID])
943AC_SUBST([TAP_WIN_MIN_MAJOR])
944AC_SUBST([TAP_WIN_MIN_MINOR])
1bda73a7 945
51bd56f4 946AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
1bda73a7 947
51bd56f4 948AC_CONFIG_FILES([
1bda73a7 949 Makefile
98bc1a3e 950 build/Makefile
34cb9132
ABL
951 distro/Makefile
952 distro/rpm/Makefile
953 distro/rpm/openvpn.spec
954 include/Makefile
955 src/Makefile
956 src/openvpn/Makefile
957 src/openvpnserv/Makefile
958 tests/Makefile
959 sample/Makefile
960 doc/Makefile
1bda73a7 961])
34cb9132 962AC_CONFIG_FILES([tests/t_client.sh], [chmod +x tests/t_client.sh])
51bd56f4 963AC_OUTPUT