]> git.ipfire.org Git - thirdparty/openvpn.git/blob - configure.ac
Fix ACL_CHECK_ADD_COMPILE_FLAGS to work with clang
[thirdparty/openvpn.git] / configure.ac
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-2018 OpenVPN 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 along
21 dnl with this program; if not, write to the Free Software Foundation, Inc.,
22 dnl 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23
24 dnl Process this file with autoconf to produce a configure script.
25
26 AC_PREREQ(2.59)
27
28 m4_include(version.m4)
29 AC_INIT([PRODUCT_NAME], [PRODUCT_VERSION], [PRODUCT_BUGREPORT], [PRODUCT_TARNAME])
30 m4_include(compat.m4)
31 AC_DEFINE([OPENVPN_VERSION_RESOURCE], [PRODUCT_VERSION_RESOURCE], [Version in windows resource format])
32 AC_SUBST([OPENVPN_VERSION_MAJOR], [PRODUCT_VERSION_MAJOR], [OpenVPN major version])
33 AC_SUBST([OPENVPN_VERSION_MINOR], [PRODUCT_VERSION_MINOR], [OpenVPN minor version])
34 AC_SUBST([OPENVPN_VERSION_PATCH], [PRODUCT_VERSION_PATCH], [OpenVPN patch level - may be a string or integer])
35 AC_DEFINE([OPENVPN_VERSION_MAJOR], [PRODUCT_VERSION_MAJOR], [OpenVPN major version - integer])
36 AC_DEFINE([OPENVPN_VERSION_MINOR], [PRODUCT_VERSION_MINOR], [OpenVPN minor version - integer])
37 AC_DEFINE([OPENVPN_VERSION_PATCH], ["PRODUCT_VERSION_PATCH"], [OpenVPN patch level - may be a string or integer])
38
39 AC_CONFIG_AUX_DIR([.])
40 AC_CONFIG_HEADERS([config.h include/openvpn-plugin.h])
41 AC_CONFIG_SRCDIR([src/openvpn/syshead.h])
42 AC_CONFIG_MACRO_DIR([m4])
43
44 dnl Initialize automake. automake < 1.12 didn't have serial-tests and
45 dnl gives an error if it sees this, but for automake >= 1.13
46 dnl serial-tests is required so we have to include it. Solution is to
47 dnl test for the version of automake (by running an external command)
48 dnl and provide it if necessary. Note we have to do this entirely using
49 dnl m4 macros since automake queries this macro by running
50 dnl 'autoconf --trace ...'.
51 m4_define([serial_tests], [
52 m4_esyscmd([automake --version |
53 head -1 |
54 awk '{split ($NF,a,"."); if (a[1] == 1 && a[2] >= 12) { print "serial-tests" }}'
55 ])
56 ])
57 AM_INIT_AUTOMAKE(foreign serial_tests) dnl NB: Do not [quote] this parameter.
58 AC_CANONICAL_HOST
59 AC_USE_SYSTEM_EXTENSIONS
60
61 AC_ARG_ENABLE(
62 [lzo],
63 [AS_HELP_STRING([--disable-lzo], [disable LZO compression support @<:@default=yes@:>@])],
64 ,
65 [enable_lzo="yes"]
66 )
67
68 AC_ARG_ENABLE(lz4,
69 [ --disable-lz4 Disable LZ4 compression support],
70 [enable_lz4="$enableval"],
71 [enable_lz4="yes"]
72 )
73
74 AC_ARG_ENABLE(comp-stub,
75 [ --enable-comp-stub Don't compile compression support but still allow limited interoperability with compression-enabled peers],
76 [enable_comp_stub="$enableval"],
77 [enable_comp_stub="no"]
78 )
79
80 AC_ARG_ENABLE(
81 [ofb-cfb],
82 [AS_HELP_STRING([--disable-ofb-cfb], [disable support for OFB and CFB cipher modes @<:@default=yes@:>@])],
83 ,
84 [enable_crypto_ofb_cfb="yes"]
85 )
86
87 AC_ARG_ENABLE(
88 [x509-alt-username],
89 [AS_HELP_STRING([--enable-x509-alt-username], [enable the --x509-username-field feature @<:@default=no@:>@])],
90 ,
91 [enable_x509_alt_username="no"]
92 )
93
94 AC_ARG_ENABLE(
95 [server],
96 [AS_HELP_STRING([--disable-server], [disable server support only (but retain client support) @<:@default=yes@:>@])],
97 ,
98 [enable_server="yes"]
99 )
100
101 AC_ARG_ENABLE(
102 [plugins],
103 [AS_HELP_STRING([--disable-plugins], [disable plug-in support @<:@default=yes@:>@])],
104 ,
105 [enable_plugins="yes"]
106 )
107
108 AC_ARG_ENABLE(
109 [management],
110 [AS_HELP_STRING([--disable-management], [disable management server support @<:@default=yes@:>@])],
111 ,
112 [enable_management="yes"]
113 )
114
115 AC_ARG_ENABLE(
116 [pkcs11],
117 [AS_HELP_STRING([--enable-pkcs11], [enable pkcs11 support @<:@default=no@:>@])],
118 ,
119 [enable_pkcs11="no"]
120 )
121
122 AC_ARG_ENABLE(
123 [fragment],
124 [AS_HELP_STRING([--disable-fragment], [disable internal fragmentation support (--fragment) @<:@default=yes@:>@])],
125 ,
126 [enable_fragment="yes"]
127 )
128
129 AC_ARG_ENABLE(
130 [multihome],
131 [AS_HELP_STRING([--disable-multihome], [disable multi-homed UDP server support (--multihome) @<:@default=yes@:>@])],
132 ,
133 [enable_multihome="yes"]
134 )
135
136 AC_ARG_ENABLE(
137 [port-share],
138 [AS_HELP_STRING([--disable-port-share], [disable TCP server port-share support (--port-share) @<:@default=yes@:>@])],
139 ,
140 [enable_port_share="yes"]
141 )
142
143 AC_ARG_ENABLE(
144 [debug],
145 [AS_HELP_STRING([--disable-debug], [disable debugging support (disable gremlin and verb 7+ messages) @<:@default=yes@:>@])],
146 ,
147 [enable_debug="yes"]
148 )
149
150 AC_ARG_ENABLE(
151 [small],
152 [AS_HELP_STRING([--enable-small], [enable smaller executable size (disable OCC, usage message, and verb 4 parm list) @<:@default=no@:>@])],
153 ,
154 [enable_small="no"]
155 )
156
157 AC_ARG_ENABLE(
158 [iproute2],
159 [AS_HELP_STRING([--enable-iproute2], [enable support for iproute2 @<:@default=no@:>@])],
160 ,
161 [enable_iproute2="no"]
162 )
163
164 AC_ARG_ENABLE(
165 [def-auth],
166 [AS_HELP_STRING([--disable-def-auth], [disable deferred authentication @<:@default=yes@:>@])],
167 ,
168 [enable_def_auth="yes"]
169 )
170
171 AC_ARG_ENABLE(
172 [pf],
173 [AS_HELP_STRING([--disable-pf], [disable internal packet filter @<:@default=yes@:>@])],
174 ,
175 [enable_pf="yes"]
176 )
177
178 AC_ARG_ENABLE(
179 [plugin-auth-pam],
180 [AS_HELP_STRING([--disable-plugin-auth-pam], [disable auth-pam plugin @<:@default=platform specific@:>@])],
181 ,
182 [
183 case "$host" in
184 *-*-openbsd*) enable_plugin_auth_pam="no";;
185 *-mingw*) enable_plugin_auth_pam="no";;
186 *) enable_plugin_auth_pam="yes";;
187 esac
188 ]
189 )
190
191 AC_ARG_ENABLE(
192 [plugin-down-root],
193 [AS_HELP_STRING([--disable-plugin-down-root], [disable down-root plugin @<:@default=platform specific@:>@])],
194 ,
195 [
196 case "$host" in
197 *-mingw*) enable_plugin_down_root="no";;
198 *) enable_plugin_down_root="yes";;
199 esac
200 ]
201 )
202
203 AC_ARG_ENABLE(
204 [pam-dlopen],
205 [AS_HELP_STRING([--enable-pam-dlopen], [dlopen libpam @<:@default=no@:>@])],
206 ,
207 [enable_pam_dlopen="no"]
208 )
209
210 AC_ARG_ENABLE(
211 [strict],
212 [AS_HELP_STRING([--enable-strict], [enable strict compiler warnings (debugging option) @<:@default=no@:>@])],
213 ,
214 [enable_strict="no"]
215 )
216
217 AC_ARG_ENABLE(
218 [pedantic],
219 [AS_HELP_STRING([--enable-pedantic], [enable pedantic compiler warnings, will not generate a working executable (debugging option) @<:@default=no@:>@])],
220 ,
221 [enable_pedantic="no"]
222 )
223
224 AC_ARG_ENABLE(
225 [werror],
226 [AS_HELP_STRING([--enable-werror], [promote compiler warnings to errors, will cause builds to fail if the compiler issues warnings (debugging option) @<:@default=no@:>@])],
227 ,
228 [enable_werror="no"]
229 )
230
231 AC_ARG_ENABLE(
232 [strict-options],
233 [AS_HELP_STRING([--enable-strict-options], [enable strict options check between peers (debugging option) @<:@default=no@:>@])],
234 ,
235 [enable_strict_options="no"]
236 )
237
238 AC_ARG_ENABLE(
239 [selinux],
240 [AS_HELP_STRING([--enable-selinux], [enable SELinux support @<:@default=no@:>@])],
241 ,
242 [enable_selinux="no"]
243 )
244
245 AC_ARG_ENABLE(
246 [systemd],
247 [AS_HELP_STRING([--enable-systemd], [enable systemd support @<:@default=no@:>@])],
248 ,
249 [enable_systemd="no"]
250 )
251
252 AC_ARG_ENABLE(
253 [async-push],
254 [AS_HELP_STRING([--enable-async-push], [enable async-push support for plugins providing deferred authentication @<:@default=no@:>@])],
255 ,
256 [enable_async_push="no"]
257 )
258
259 AC_ARG_WITH(
260 [special-build],
261 [AS_HELP_STRING([--with-special-build=STRING], [specify special build string])],
262 [test -n "${withval}" && AC_DEFINE_UNQUOTED([CONFIGURE_SPECIAL_BUILD], ["${withval}"], [special build string])]
263 )
264
265 AC_ARG_WITH(
266 [mem-check],
267 [AS_HELP_STRING([--with-mem-check=TYPE], [build with debug memory checking, TYPE=no|dmalloc|valgrind|ssl @<:@default=no@:>@])],
268 [
269 case "${withval}" in
270 dmalloc|valgrind|ssl|no) ;;
271 *) AC_MSG_ERROR([bad value ${withval} for --mem-check]) ;;
272 esac
273 ],
274 [with_mem_check="no"]
275 )
276
277 AC_ARG_WITH(
278 [crypto-library],
279 [AS_HELP_STRING([--with-crypto-library=library], [build with the given crypto library, TYPE=openssl|mbedtls @<:@default=openssl@:>@])],
280 [
281 case "${withval}" in
282 openssl|mbedtls) ;;
283 *) AC_MSG_ERROR([bad value ${withval} for --with-crypto-library]) ;;
284 esac
285 ],
286 [with_crypto_library="openssl"]
287 )
288
289 AC_ARG_VAR([PLUGINDIR], [Path of plug-in directory @<:@default=LIBDIR/openvpn/plugins@:>@])
290 if test -n "${PLUGINDIR}"; then
291 plugindir="${PLUGINDIR}"
292 else
293 plugindir="\${libdir}/openvpn/plugins"
294 fi
295
296 AC_DEFINE_UNQUOTED([TARGET_ALIAS], ["${host}"], [A string representing our host])
297 AM_CONDITIONAL([TARGET_LINUX], [false])
298 case "$host" in
299 *-*-linux*)
300 AC_DEFINE([TARGET_LINUX], [1], [Are we running on Linux?])
301 AM_CONDITIONAL([TARGET_LINUX], [true])
302 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["L"], [Target prefix])
303 have_sitnl="yes"
304 ;;
305 *-*-solaris*)
306 AC_DEFINE([TARGET_SOLARIS], [1], [Are we running on Solaris?])
307 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["S"], [Target prefix])
308 CPPFLAGS="$CPPFLAGS -D_XPG4_2"
309 test -x /bin/bash && SHELL="/bin/bash"
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 ac_cv_type_struct_in_pktinfo=no
328 ;;
329 *-mingw*)
330 AC_DEFINE([TARGET_WIN32], [1], [Are we running WIN32?])
331 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["W"], [Target prefix])
332 CPPFLAGS="${CPPFLAGS} -DWIN32_LEAN_AND_MEAN"
333 CPPFLAGS="${CPPFLAGS} -DNTDDI_VERSION=NTDDI_VISTA -D_WIN32_WINNT=_WIN32_WINNT_VISTA"
334 WIN32=yes
335 ;;
336 *-*-dragonfly*)
337 AC_DEFINE([TARGET_DRAGONFLY], [1], [Are we running on DragonFlyBSD?])
338 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["D"], [Target prefix])
339 ;;
340 *-aix*)
341 AC_DEFINE([TARGET_AIX], [1], [Are we running AIX?])
342 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["A"], [Target prefix])
343 ROUTE="/usr/sbin/route"
344 have_tap_header="yes"
345 ac_cv_header_net_if_h="no" # exists, but breaks things
346 ;;
347 *)
348 AC_DEFINE_UNQUOTED([TARGET_PREFIX], ["X"], [Target prefix])
349 have_tap_header="yes"
350 ;;
351 esac
352
353 PKG_PROG_PKG_CONFIG
354 AC_PROG_CPP
355 AC_PROG_INSTALL
356 AC_PROG_LN_S
357 AC_PROG_SED
358 AC_PROG_MAKE_SET
359
360 AC_ARG_VAR([IFCONFIG], [full path to ipconfig utility])
361 AC_ARG_VAR([ROUTE], [full path to route utility])
362 AC_ARG_VAR([IPROUTE], [full path to ip utility])
363 AC_ARG_VAR([NETSTAT], [path to netstat utility]) # tests
364 AC_ARG_VAR([MAN2HTML], [path to man2html utility])
365 AC_ARG_VAR([GIT], [path to git utility])
366 AC_ARG_VAR([SYSTEMD_ASK_PASSWORD], [path to systemd-ask-password utility])
367 AC_ARG_VAR([SYSTEMD_UNIT_DIR], [Path of systemd unit directory @<:@default=LIBDIR/systemd/system@:>@])
368 AC_ARG_VAR([TMPFILES_DIR], [Path of tmpfiles directory @<:@default=LIBDIR/tmpfiles.d@:>@])
369 AC_PATH_PROGS([IFCONFIG], [ifconfig],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
370 AC_PATH_PROGS([ROUTE], [route],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
371 AC_PATH_PROGS([IPROUTE], [ip],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
372 AC_PATH_PROGS([SYSTEMD_ASK_PASSWORD], [systemd-ask-password],, [$PATH:/usr/local/bin:/usr/bin:/bin])
373 AC_CHECK_PROGS([NETSTAT], [netstat], [netstat], [$PATH:/usr/local/sbin:/usr/sbin:/sbin:/etc]) # tests
374 AC_CHECK_PROGS([MAN2HTML], [man2html])
375 AC_CHECK_PROGS([GIT], [git]) # optional
376 AC_DEFINE_UNQUOTED([IFCONFIG_PATH], ["$IFCONFIG"], [Path to ifconfig tool])
377 AC_DEFINE_UNQUOTED([IPROUTE_PATH], ["$IPROUTE"], [Path to iproute tool])
378 AC_DEFINE_UNQUOTED([ROUTE_PATH], ["$ROUTE"], [Path to route tool])
379 AC_DEFINE_UNQUOTED([SYSTEMD_ASK_PASSWORD_PATH], ["$SYSTEMD_ASK_PASSWORD"], [Path to systemd-ask-password tool])
380
381 # Set -std=c99 unless user already specified a -std=
382 case "${CFLAGS}" in
383 *-std=*) ;;
384 *) CFLAGS="${CFLAGS} -std=c99" ;;
385 esac
386
387 #
388 # Libtool
389 #
390 ifdef(
391 [LT_INIT],
392 [
393 LT_INIT([win32-dll])
394 LT_LANG([Windows Resource])
395 ],
396 [
397 AC_LIBTOOL_WIN32_DLL
398 AC_LIBTOOL_RC
399 AC_PROG_LIBTOOL
400 ]
401 )
402
403 AC_C_CONST
404 AC_C_INLINE
405 AC_C_VOLATILE
406 AC_TYPE_OFF_T
407 AC_TYPE_PID_T
408 AC_TYPE_SIZE_T
409 AC_TYPE_UID_T
410 AC_TYPE_INT8_T
411 AC_TYPE_INT16_T
412 AC_TYPE_INT32_T
413 AC_TYPE_INT64_T
414 AC_TYPE_UINT8_T
415 AC_TYPE_UINT16_T
416 AC_TYPE_UINT32_T
417 AC_TYPE_UINT64_T
418 AC_TYPE_SIGNAL
419 AX_CPP_VARARG_MACRO_ISO
420 AX_CPP_VARARG_MACRO_GCC
421 AX_TYPE_SOCKLEN_T
422 AX_EMPTY_ARRAY
423 AC_CHECK_SIZEOF([unsigned int])
424 AC_CHECK_SIZEOF([unsigned long])
425 AC_CHECK_HEADERS([ \
426 stdio.h stdarg.h limits.h \
427 time.h errno.h fcntl.h io.h direct.h \
428 ctype.h sys/types.h sys/socket.h \
429 signal.h unistd.h dlfcn.h \
430 netinet/in.h netinet/in_systm.h \
431 netinet/tcp.h arpa/inet.h netdb.h \
432 windows.h winsock2.h ws2tcpip.h \
433 versionhelpers.h \
434 ])
435 AC_CHECK_HEADERS([ \
436 sys/time.h sys/ioctl.h sys/stat.h \
437 sys/mman.h sys/file.h sys/wait.h \
438 unistd.h signal.h libgen.h stropts.h \
439 syslog.h pwd.h grp.h \
440 sys/sockio.h sys/uio.h linux/sockios.h \
441 linux/types.h poll.h sys/epoll.h err.h \
442 ])
443
444 SOCKET_INCLUDES="
445 #ifdef HAVE_STDLIB_H
446 #include <stdlib.h>
447 #endif
448 #ifdef HAVE_SYS_TYPES_H
449 #include <sys/types.h>
450 #endif
451 #ifdef HAVE_SYS_SOCKET_H
452 #include <sys/socket.h>
453 #endif
454 #ifdef HAVE_NET_IF_H
455 #include <net/if.h>
456 #endif
457 #ifdef HAVE_NETINET_IN_H
458 #include <netinet/in.h>
459 #endif
460 #ifdef HAVE_WINDOWS_H
461 #include <windows.h>
462 #endif
463 #ifdef HAVE_WINSOCK2_H
464 #include <winsock2.h>
465 #endif
466 #ifdef HAVE_WS2TCPIP_H
467 #include <ws2tcpip.h>
468 #endif
469 #ifdef HAVE_NETINET_IN_SYSTM_H
470 #include <netinet/in_systm.h>
471 #endif
472 #ifdef HAVE_NETINET_IP_H
473 #include <netinet/ip.h>
474 #endif
475 "
476
477 AC_CHECK_HEADERS(
478 [net/if.h netinet/ip.h resolv.h sys/un.h net/if_utun.h sys/kern_control.h],
479 ,
480 ,
481 [[${SOCKET_INCLUDES}]]
482 )
483
484 AC_CHECK_TYPES(
485 [in_addr_t],
486 ,
487 [AC_DEFINE([in_addr_t], [uint32_t], [Workaround missing in_addr_t])],
488 [[${SOCKET_INCLUDES}]]
489 )
490 AC_CHECK_TYPES(
491 [in_port_t],
492 ,
493 [AC_DEFINE([in_port_t], [uint16_t], [Workaround missing in_port_t])],
494 [[${SOCKET_INCLUDES}]]
495 )
496 AC_CHECK_TYPE(
497 [struct iphdr],
498 [AC_DEFINE([HAVE_IPHDR], [1], [struct iphdr needed for IPv6 support])],
499 ,
500 [[${SOCKET_INCLUDES}]]
501 )
502 AC_CHECK_TYPE(
503 [struct sock_extended_err],
504 [AC_DEFINE([HAVE_SOCK_EXTENDED_ERR], [1], [struct sock_extended_err needed for extended socket error support])],
505 ,
506 [[${SOCKET_INCLUDES}]]
507 )
508 AC_CHECK_TYPE(
509 [struct msghdr],
510 [AC_DEFINE([HAVE_MSGHDR], [1], [struct msghdr needed for extended socket error support])],
511 ,
512 [[${SOCKET_INCLUDES}]]
513 )
514 AC_CHECK_TYPE(
515 [struct cmsghdr],
516 [AC_DEFINE([HAVE_CMSGHDR], [1], [struct cmsghdr needed for extended socket error support])],
517 ,
518 [[${SOCKET_INCLUDES}]]
519 )
520 AC_CHECK_TYPE(
521 [struct in_pktinfo],
522 [AC_DEFINE([HAVE_IN_PKTINFO], [1], [struct in_pktinfo needed for IP_PKTINFO support])],
523 ,
524 [[${SOCKET_INCLUDES}]]
525 )
526 AC_CHECK_TYPE(
527 [sa_family_t],
528 [AC_DEFINE([HAVE_SA_FAMILY_T], [1], [sa_family_t, needed to hold AF_* info])],
529 ,
530 [[${SOCKET_INCLUDES}]]
531 )
532 AC_CHECK_MEMBER(
533 [struct in_pktinfo.ipi_spec_dst],
534 [AC_DEFINE([HAVE_IPI_SPEC_DST], [1], [struct in_pktinfo.ipi_spec_dst needed for IP_PKTINFO support])],
535 ,
536 [[${SOCKET_INCLUDES}]]
537 )
538 AC_CHECK_TYPE(
539 [struct sockaddr_in6],
540 ,
541 [AC_MSG_ERROR([struct sockaddr_in6 not found, needed for ipv6 transport support.])],
542 [[${SOCKET_INCLUDES}]]
543 )
544 AC_CHECK_DECLS(
545 [SO_MARK],
546 ,
547 ,
548 [[${SOCKET_INCLUDES}]]
549 )
550 AC_CHECKING([anonymous union support])
551 AC_COMPILE_IFELSE(
552 [AC_LANG_PROGRAM(
553 [[
554 struct mystruct {
555 union {
556 int m1;
557 char m2;
558 };
559 };
560 ]],
561 [[
562 struct mystruct s;
563 s.m1 = 1; s.m2 = 2;
564 ]]
565 )],
566 [
567 AC_MSG_RESULT([yes])
568 AC_DEFINE([HAVE_ANONYMOUS_UNION_SUPPORT], [], [Compiler supports anonymous unions])
569 ],
570 [AC_MSG_RESULT([no])]
571 )
572
573 saved_LDFLAGS="$LDFLAGS"
574 LDFLAGS="$LDFLAGS -Wl,--wrap=exit"
575 AC_MSG_CHECKING([linker supports --wrap])
576 AC_LINK_IFELSE(
577 [AC_LANG_PROGRAM(
578 [[
579 void exit(int);
580 void __real_exit(int);
581 void __wrap_exit(int i) {
582 __real_exit(i);
583 }
584 ]],
585 [[
586 exit(0);
587 ]]
588 )],
589 [
590 AC_MSG_RESULT([yes])
591 have_ld_wrap_support=yes
592 ],
593 [AC_MSG_RESULT([no])],
594 )
595 LDFLAGS="$saved_LDFLAGS"
596
597 dnl We emulate signals in Windows
598 AC_CHECK_DECLS(
599 [SIGHUP],
600 ,
601 [AC_DEFINE([SIGHUP], [1], [SIGHUP replacement])],
602 [[
603 #ifdef HAVE_SIGNAL_H
604 #include <signal.h>
605 #endif
606 ]]
607 )
608 AC_CHECK_DECLS(
609 [SIGINT],
610 ,
611 [AC_DEFINE([SIGINT], [2], [SIGINT replacement])],
612 [[
613 #ifdef HAVE_SIGNAL_H
614 #include <signal.h>
615 #endif
616 ]]
617 )
618 AC_CHECK_DECLS(
619 [SIGUSR1],
620 ,
621 [AC_DEFINE([SIGUSR1], [10], [SIGUSR1 replacement])],
622 [[
623 #ifdef HAVE_SIGNAL_H
624 #include <signal.h>
625 #endif
626 ]]
627 )
628 AC_CHECK_DECLS(
629 [SIGUSR2],
630 ,
631 [AC_DEFINE([SIGUSR2], [12], [SIGUSR2 replacement])],
632 [[
633 #ifdef HAVE_SIGNAL_H
634 #include <signal.h>
635 #endif
636 ]]
637 )
638 AC_CHECK_DECLS(
639 [SIGTERM],
640 ,
641 [AC_DEFINE([SIGTERM], [15], [SIGTERM replacement])],
642 [[
643 #ifdef HAVE_SIGNAL_H
644 #include <signal.h>
645 #endif
646 ]]
647 )
648
649 AC_FUNC_FORK
650
651 AC_CHECK_FUNCS([ \
652 daemon chroot getpwnam setuid nice system getpid dup dup2 \
653 getpass syslog openlog mlockall getgrnam setgid \
654 setgroups stat flock readv writev time gettimeofday \
655 ctime memset vsnprintf strdup \
656 setsid chdir putenv getpeername unlink \
657 chsize ftruncate execve getpeereid umask basename dirname access \
658 epoll_create \
659 ])
660
661 AC_CHECK_LIB(
662 [dl],
663 [dlopen],
664 [DL_LIBS="-ldl"]
665 )
666 AC_SUBST([DL_LIBS])
667
668 AC_CHECK_LIB(
669 [nsl],
670 [inet_ntoa],
671 [SOCKETS_LIBS="${SOCKETS_LIBS} -lnsl"]
672 )
673 AC_CHECK_LIB(
674 [socket],
675 [socket],
676 [SOCKETS_LIBS="${SOCKETS_LIBS} -lsocket"]
677 )
678 AC_CHECK_LIB(
679 [resolv],
680 [gethostbyname],
681 [SOCKETS_LIBS="${SOCKETS_LIBS} -lresolv"]
682 )
683 AC_SUBST([SOCKETS_LIBS])
684
685 old_LIBS="${LIBS}"
686 LIBS="${LIBS} ${SOCKETS_LIBS}"
687 AC_CHECK_FUNCS([sendmsg recvmsg])
688 # Windows use stdcall for winsock so we cannot auto detect these
689 m4_define(
690 [SOCKET_FUNCS],
691 [socket recv recvfrom send sendto listen dnl
692 accept connect bind select gethostbyname inet_ntoa]dnl
693 )
694 m4_define(
695 [SOCKET_OPT_FUNCS],
696 [setsockopt getsockopt getsockname poll]dnl
697 )
698 if test "${WIN32}" = "yes"; then
699 # normal autoconf function checking does not find inet_ntop/inet_pton
700 # because they need to include the actual header file and link ws2_32.dll
701 LIBS="${LIBS} -lws2_32"
702 AC_MSG_CHECKING([for MinGW inet_ntop()/inet_pton()])
703 AC_LINK_IFELSE(
704 [AC_LANG_PROGRAM(
705 [[
706 #include <ws2tcpip.h>
707 ]],
708 [[
709 int r = (int) inet_ntop (0, NULL, NULL, 0);
710 r += inet_pton(AF_INET, NULL, NULL);
711 return r;
712 ]]
713 )],
714 [AC_MSG_RESULT([OK])
715 AC_DEFINE([HAVE_INET_NTOP],[1],[MinGW inet_ntop])
716 AC_DEFINE([HAVE_INET_PTON],[1],[MinGW inet_pton])
717 ],
718 [AC_MSG_RESULT([not found])]
719 )
720 m4_foreach(
721 [F],
722 m4_split(SOCKET_FUNCS SOCKET_OPT_FUNCS),
723 m4_define([UF], [[m4_join([_], [HAVE], m4_toupper(F))]])
724 AC_DEFINE([UF], [1], [Win32 builtin])
725 )
726 else
727 AC_CHECK_FUNCS([inet_ntop inet_pton])
728 AC_CHECK_FUNCS(
729 SOCKET_FUNCS,
730 ,
731 [AC_MSG_ERROR([Required library function not found])]
732 )
733 AC_CHECK_FUNCS(SOCKET_OPT_FUNCS)
734 fi
735 LIBS="${old_LIBS}"
736
737 # we assume res_init() always exist, but need to find out *where*...
738 AC_SEARCH_LIBS(__res_init, resolv bind, ,
739 AC_SEARCH_LIBS(res_9_init, resolv bind, ,
740 AC_SEARCH_LIBS(res_init, resolv bind, , )))
741
742 AC_ARG_VAR([TAP_CFLAGS], [C compiler flags for tap])
743 old_CFLAGS="${CFLAGS}"
744 CFLAGS="${CFLAGS} ${TAP_CFLAGS}"
745 AC_CHECK_HEADERS(
746 [ \
747 net/if_tun.h net/tun/if_tun.h \
748 linux/if_tun.h \
749 tap-windows.h \
750 ],
751 [have_tap_header="yes"]
752 )
753 AC_CHECK_DECLS(
754 [TUNSETPERSIST],
755 [AC_DEFINE([ENABLE_FEATURE_TUN_PERSIST], [1], [We have persist tun capability])],
756 ,
757 [[
758 #ifdef HAVE_LINUX_IF_TUN_H
759 #include <linux/if_tun.h>
760 #endif
761 ]]
762 )
763 CFLAGS="${old_CFLAGS}"
764 test "${have_tap_header}" = "yes" || AC_MSG_ERROR([no tap header could be found])
765
766 AC_CHECK_LIB(
767 [selinux],
768 [setcon],
769 [SELINUX_LIBS="-lselinux"]
770 )
771 AC_SUBST([SELINUX_LIBS])
772
773 AC_ARG_VAR([LIBPAM_CFLAGS], [C compiler flags for libpam])
774 AC_ARG_VAR([LIBPAM_LIBS], [linker flags for libpam])
775 if test -z "${LIBPAM_LIBS}"; then
776 AC_CHECK_LIB(
777 [pam],
778 [pam_start],
779 [LIBPAM_LIBS="-lpam"]
780 )
781 fi
782
783 case "${with_mem_check}" in
784 valgrind)
785 AC_CHECK_HEADERS(
786 [valgrind/memcheck.h],
787 [
788 CFLAGS="${CFLAGS} -g -fno-inline"
789 AC_DEFINE(
790 [USE_VALGRIND],
791 [1],
792 [Use valgrind memory debugging library]
793 )
794 ],
795 [AC_MSG_ERROR([valgrind headers not found.])]
796 )
797 ;;
798 dmalloc)
799 AC_CHECK_HEADERS(
800 [dmalloc.h],
801 [AC_CHECK_LIB(
802 [dmalloc],
803 [malloc],
804 [
805 LIBS="${LIBS} -ldmalloc"
806 AC_DEFINE(
807 [DMALLOC],
808 [1],
809 [Use dmalloc memory debugging library]
810 )
811 ],
812 [AC_MSG_ERROR([dmalloc library not found.])]
813 )],
814 [AC_MSG_ERROR([dmalloc headers not found.])]
815 )
816 ;;
817 ssl)
818 AC_CHECK_LIB(
819 [ssl],
820 [CRYPTO_mem_ctrl],
821 [
822 AC_DEFINE(
823 [CRYPTO_MDEBUG],
824 [1],
825 [Use memory debugging function in OpenSSL]
826 )
827 AC_MSG_NOTICE([NOTE: OpenSSL library must be compiled with CRYPTO_MDEBUG])
828 ],
829 [AC_MSG_ERROR([Memory Debugging function in OpenSSL library not found.])]
830 )
831 ;;
832 esac
833
834 PKG_CHECK_MODULES(
835 [PKCS11_HELPER],
836 [libpkcs11-helper-1 >= 1.11],
837 [have_pkcs11_helper="yes"],
838 []
839 )
840
841 if test "${with_crypto_library}" = "openssl"; then
842 AC_ARG_VAR([OPENSSL_CFLAGS], [C compiler flags for OpenSSL])
843 AC_ARG_VAR([OPENSSL_LIBS], [linker flags for OpenSSL])
844
845 if test -z "${OPENSSL_CFLAGS}" -a -z "${OPENSSL_LIBS}"; then
846 # if the user did not explicitly specify flags, try to autodetect
847 PKG_CHECK_MODULES(
848 [OPENSSL],
849 [openssl >= 1.0.1],
850 [have_openssl="yes"],
851 [] # If this fails, we will do another test next
852 )
853 OPENSSL_LIBS=${OPENSSL_LIBS:--lssl -lcrypto}
854 fi
855
856 saved_CFLAGS="${CFLAGS}"
857 saved_LIBS="${LIBS}"
858 CFLAGS="${CFLAGS} ${OPENSSL_CFLAGS}"
859 LIBS="${LIBS} ${OPENSSL_LIBS}"
860
861 # If pkgconfig check failed or OPENSSL_CFLAGS/OPENSSL_LIBS env vars
862 # are used, check the version directly in the OpenSSL include file
863 if test "${have_openssl}" != "yes"; then
864 AC_MSG_CHECKING([additionally if OpenSSL is available and version >= 1.0.1])
865 AC_COMPILE_IFELSE(
866 [AC_LANG_PROGRAM(
867 [[
868 #include <openssl/opensslv.h>
869 ]],
870 [[
871 /* Version encoding: MNNFFPPS - see opensslv.h for details */
872 #if OPENSSL_VERSION_NUMBER < 0x10001000L
873 #error OpenSSL too old
874 #endif
875 ]]
876 )],
877 [AC_MSG_RESULT([ok])],
878 [AC_MSG_ERROR([OpenSSL version too old])]
879 )
880 fi
881
882 AC_CHECK_FUNCS([SSL_CTX_new EVP_CIPHER_CTX_set_key_length],
883 ,
884 [AC_MSG_ERROR([openssl check failed])]
885 )
886
887 have_openssl_engine="yes"
888 AC_CHECK_FUNCS(
889 [ \
890 ENGINE_load_builtin_engines \
891 ENGINE_register_all_complete \
892 ENGINE_cleanup \
893 ],
894 ,
895 [have_openssl_engine="no"; break]
896 )
897 if test "${have_openssl_engine}" = "no"; then
898 AC_CHECK_DECL( [ENGINE_cleanup], [have_openssl_engine="yes"],,
899 [[
900 #include <openssl/engine.h>
901 ]]
902 )
903 fi
904 if test "${have_openssl_engine}" = "yes"; then
905 AC_DEFINE([HAVE_OPENSSL_ENGINE], [1], [OpenSSL engine support available])
906 fi
907
908 have_crypto_aead_modes="yes"
909 AC_CHECK_FUNCS(
910 [EVP_aes_256_gcm],
911 ,
912 [have_crypto_aead_modes="no"; break]
913 )
914
915 AC_CHECK_FUNCS(
916 [ \
917 HMAC_CTX_new \
918 HMAC_CTX_free \
919 HMAC_CTX_reset \
920 EVP_MD_CTX_new \
921 EVP_MD_CTX_free \
922 EVP_MD_CTX_reset \
923 EVP_CIPHER_CTX_reset \
924 OpenSSL_version \
925 SSL_CTX_get_default_passwd_cb \
926 SSL_CTX_get_default_passwd_cb_userdata \
927 SSL_CTX_set_security_level \
928 X509_get0_notBefore \
929 X509_get0_notAfter \
930 X509_get0_pubkey \
931 X509_STORE_get0_objects \
932 X509_OBJECT_free \
933 X509_OBJECT_get_type \
934 EVP_PKEY_id \
935 EVP_PKEY_get0_RSA \
936 EVP_PKEY_get0_DSA \
937 EVP_PKEY_get0_EC_KEY \
938 RSA_set_flags \
939 RSA_bits \
940 RSA_get0_key \
941 RSA_set0_key \
942 DSA_get0_pqg \
943 DSA_bits \
944 RSA_meth_new \
945 RSA_meth_free \
946 RSA_meth_set_pub_enc \
947 RSA_meth_set_pub_dec \
948 RSA_meth_set_priv_enc \
949 RSA_meth_set_priv_dec \
950 RSA_meth_set_init \
951 RSA_meth_set_sign \
952 RSA_meth_set_finish \
953 RSA_meth_set0_app_data \
954 RSA_meth_get0_app_data \
955 EC_GROUP_order_bits
956 ]
957 )
958
959 CFLAGS="${saved_CFLAGS}"
960 LIBS="${saved_LIBS}"
961
962 AC_DEFINE([ENABLE_CRYPTO_OPENSSL], [1], [Use OpenSSL library])
963 CRYPTO_CFLAGS="${OPENSSL_CFLAGS}"
964 CRYPTO_LIBS="${OPENSSL_LIBS}"
965 elif test "${with_crypto_library}" = "mbedtls"; then
966 AC_ARG_VAR([MBEDTLS_CFLAGS], [C compiler flags for mbedtls])
967 AC_ARG_VAR([MBEDTLS_LIBS], [linker flags for mbedtls])
968
969 saved_CFLAGS="${CFLAGS}"
970 saved_LIBS="${LIBS}"
971
972 if test -z "${MBEDTLS_CFLAGS}" -a -z "${MBEDTLS_LIBS}"; then
973 # if the user did not explicitly specify flags, try to autodetect
974 LIBS="${LIBS} -lmbedtls -lmbedx509 -lmbedcrypto"
975 AC_CHECK_LIB(
976 [mbedtls],
977 [mbedtls_ssl_init],
978 [MBEDTLS_LIBS="-lmbedtls -lmbedx509 -lmbedcrypto"],
979 [AC_MSG_ERROR([Could not find mbed TLS.])],
980 [${PKCS11_HELPER_LIBS}]
981 )
982 fi
983
984 CFLAGS="${MBEDTLS_CFLAGS} ${PKCS11_HELPER_CFLAGS} ${CFLAGS}"
985 LIBS="${MBEDTLS_LIBS} ${PKCS11_HELPER_LIBS} ${LIBS}"
986
987 AC_MSG_CHECKING([mbedtls version])
988 AC_COMPILE_IFELSE(
989 [AC_LANG_PROGRAM(
990 [[
991 #include <mbedtls/version.h>
992 ]],
993 [[
994 #if MBEDTLS_VERSION_NUMBER < 0x02000000 || MBEDTLS_VERSION_NUMBER >= 0x03000000
995 #error invalid version
996 #endif
997 ]]
998 )],
999 [AC_MSG_RESULT([ok])],
1000 [AC_MSG_ERROR([mbed TLS 2.y.z required])]
1001 )
1002
1003 have_crypto_aead_modes="yes"
1004 AC_CHECK_FUNCS(
1005 [ \
1006 mbedtls_cipher_write_tag \
1007 mbedtls_cipher_check_tag \
1008 ],
1009 ,
1010 [have_crypto_aead_modes="no"; break]
1011 )
1012
1013 CFLAGS="${saved_CFLAGS}"
1014 LIBS="${saved_LIBS}"
1015 AC_DEFINE([ENABLE_CRYPTO_MBEDTLS], [1], [Use mbed TLS library])
1016 CRYPTO_CFLAGS="${MBEDTLS_CFLAGS}"
1017 CRYPTO_LIBS="${MBEDTLS_LIBS}"
1018 else
1019 AC_MSG_ERROR([Invalid crypto library: ${with_crypto_library}])
1020 fi
1021
1022 AC_ARG_VAR([LZO_CFLAGS], [C compiler flags for lzo])
1023 AC_ARG_VAR([LZO_LIBS], [linker flags for lzo])
1024 have_lzo="yes"
1025 if test -z "${LZO_LIBS}"; then
1026 AC_CHECK_LIB(
1027 [lzo2],
1028 [lzo1x_1_15_compress],
1029 [LZO_LIBS="-llzo2"],
1030 [AC_CHECK_LIB(
1031 [lzo],
1032 [lzo1x_1_15_compress],
1033 [LZO_LIBS="-llzo"],
1034 [have_lzo="no"]
1035 )]
1036 )
1037 fi
1038 if test "${have_lzo}" = "yes"; then
1039 saved_CFLAGS="${CFLAGS}"
1040 CFLAGS="${CFLAGS} ${LZO_CFLAGS}"
1041 AC_CHECK_HEADERS(
1042 [lzo/lzoutil.h],
1043 ,
1044 [AC_CHECK_HEADERS(
1045 [lzoutil.h],
1046 ,
1047 [AC_MSG_ERROR([lzoutil.h is missing])]
1048 )]
1049 )
1050 AC_CHECK_HEADERS(
1051 [lzo/lzo1x.h],
1052 ,
1053 [AC_CHECK_HEADERS(
1054 [lzo1x.h],
1055 ,
1056 [AC_MSG_ERROR([lzo1x.h is missing])]
1057 )]
1058 )
1059 CFLAGS="${saved_CFLAGS}"
1060 fi
1061
1062 dnl
1063 dnl check for LZ4 library
1064 dnl
1065
1066 AC_ARG_VAR([LZ4_CFLAGS], [C compiler flags for lz4])
1067 AC_ARG_VAR([LZ4_LIBS], [linker flags for lz4])
1068 if test "$enable_lz4" = "yes" && test "$enable_comp_stub" = "no"; then
1069 if test -z "${LZ4_CFLAGS}" -a -z "${LZ4_LIBS}"; then
1070 # if the user did not explicitly specify flags, try to autodetect
1071 PKG_CHECK_MODULES([LZ4],
1072 [liblz4 >= 1.7.1 liblz4 < 100],
1073 [have_lz4="yes"],
1074 [LZ4_LIBS="-llz4"] # If this fails, we will do another test next.
1075 # We also add set LZ4_LIBS otherwise the
1076 # linker will not know about the lz4 library
1077 )
1078 fi
1079
1080 saved_CFLAGS="${CFLAGS}"
1081 saved_LIBS="${LIBS}"
1082 CFLAGS="${CFLAGS} ${LZ4_CFLAGS}"
1083 LIBS="${LIBS} ${LZ4_LIBS}"
1084
1085 # If pkgconfig check failed or LZ4_CFLAGS/LZ4_LIBS env vars
1086 # are used, check the version directly in the LZ4 include file
1087 if test "${have_lz4}" != "yes"; then
1088 AC_CHECK_HEADERS([lz4.h],
1089 [have_lz4h="yes"],
1090 [])
1091
1092 if test "${have_lz4h}" = "yes" ; then
1093 AC_MSG_CHECKING([additionally if system LZ4 version >= 1.7.1])
1094 AC_COMPILE_IFELSE(
1095 [AC_LANG_PROGRAM([[
1096 #include <lz4.h>
1097 ]],
1098 [[
1099 /* Version encoding: MMNNPP (Major miNor Patch) - see lz4.h for details */
1100 #if LZ4_VERSION_NUMBER < 10701L
1101 #error LZ4 is too old
1102 #endif
1103 ]]
1104 )],
1105 [
1106 AC_MSG_RESULT([ok])
1107 have_lz4="yes"
1108 ],
1109 [AC_MSG_RESULT([system LZ4 library is too old])]
1110 )
1111 fi
1112 fi
1113
1114 # Double check we have a few needed functions
1115 if test "${have_lz4}" = "yes" ; then
1116 AC_CHECK_LIB([lz4],
1117 [LZ4_compress_default],
1118 [],
1119 [have_lz4="no"])
1120 AC_CHECK_LIB([lz4],
1121 [LZ4_decompress_safe],
1122 [],
1123 [have_lz4="no"])
1124 fi
1125
1126 if test "${have_lz4}" != "yes" ; then
1127 AC_MSG_RESULT([ usable LZ4 library or header not found, using version in src/compat/compat-lz4.*])
1128 AC_DEFINE([NEED_COMPAT_LZ4], [1], [use copy of LZ4 source in compat/])
1129 LZ4_LIBS=""
1130 fi
1131 OPTIONAL_LZ4_CFLAGS="${LZ4_CFLAGS}"
1132 OPTIONAL_LZ4_LIBS="${LZ4_LIBS}"
1133 AC_DEFINE(ENABLE_LZ4, [1], [Enable LZ4 compression library])
1134 CFLAGS="${saved_CFLAGS}"
1135 LIBS="${saved_LIBS}"
1136 fi
1137
1138
1139 dnl
1140 dnl Check for systemd
1141 dnl
1142 AM_CONDITIONAL([ENABLE_SYSTEMD], [test "${enable_systemd}" = "yes"])
1143 if test "$enable_systemd" = "yes" ; then
1144 PKG_CHECK_MODULES([libsystemd], [systemd libsystemd],
1145 [],
1146 [PKG_CHECK_MODULES([libsystemd], [libsystemd-daemon])]
1147 )
1148
1149 PKG_CHECK_EXISTS( [libsystemd > 216],
1150 [AC_DEFINE([SYSTEMD_NEWER_THAN_216], [1],
1151 [systemd is newer than v216])]
1152 )
1153
1154 AC_CHECK_HEADERS(systemd/sd-daemon.h,
1155 ,
1156 [
1157 AC_MSG_ERROR([systemd development headers not found.])
1158 ])
1159
1160 saved_LIBS="${LIBS}"
1161 LIBS="${LIBS} ${libsystemd_LIBS}"
1162 AC_CHECK_FUNCS([sd_booted], [], [AC_MSG_ERROR([systemd library is missing sd_booted()])])
1163 OPTIONAL_SYSTEMD_LIBS="${libsystemd_LIBS}"
1164 AC_DEFINE(ENABLE_SYSTEMD, 1, [Enable systemd integration])
1165 LIBS="${saved_LIBS}"
1166
1167 if test -n "${SYSTEMD_UNIT_DIR}"; then
1168 systemdunitdir="${SYSTEMD_UNIT_DIR}"
1169 else
1170 systemdunitdir="\${libdir}/systemd/system"
1171 fi
1172
1173 if test -n "${TMPFILES_DIR}"; then
1174 tmpfilesdir="${TMPFILES_DIR}"
1175 else
1176 tmpfilesdir="\${libdir}/tmpfiles.d"
1177 fi
1178 fi
1179
1180
1181 AC_MSG_CHECKING([git checkout])
1182 GIT_CHECKOUT="no"
1183 if test -n "${GIT}" -a -d "${srcdir}/.git"; then
1184 AC_DEFINE([HAVE_CONFIG_VERSION_H], [1], [extra version available in config-version.h])
1185 GIT_CHECKOUT="yes"
1186 fi
1187 AC_MSG_RESULT([${GIT_CHECKOUT}])
1188
1189 if test -n "${SP_PLATFORM_WINDOWS}"; then
1190 AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['\\\\'], [Path separator]) #"
1191 AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["\\\\"], [Path separator]) #"
1192 else
1193 AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['/'], [Path separator])
1194 AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["/"], [Path separator])
1195 fi
1196
1197 dnl enable --x509-username-field feature if requested
1198 if test "${enable_x509_alt_username}" = "yes"; then
1199 if test "${with_crypto_library}" = "mbedtls" ; then
1200 AC_MSG_ERROR([mbed TLS does not support the --x509-username-field feature])
1201 fi
1202
1203 AC_DEFINE([ENABLE_X509ALTUSERNAME], [1], [Enable --x509-username-field feature])
1204 fi
1205
1206 test "${ac_cv_header_sys_uio_h}" = "yes" && AC_DEFINE([HAVE_IOVEC], [1], [struct iovec needed for IPv6 support])
1207 test "${enable_server}" = "no" && AC_DEFINE([ENABLE_CLIENT_ONLY], [1], [Enable client capability only])
1208 test "${enable_management}" = "yes" && AC_DEFINE([ENABLE_MANAGEMENT], [1], [Enable management server capability])
1209 test "${enable_multihome}" = "yes" && AC_DEFINE([ENABLE_MULTIHOME], [1], [Enable multi-homed UDP server capability])
1210 test "${enable_debug}" = "yes" && AC_DEFINE([ENABLE_DEBUG], [1], [Enable debugging support])
1211 test "${enable_small}" = "yes" && AC_DEFINE([ENABLE_SMALL], [1], [Enable smaller executable size])
1212 test "${enable_fragment}" = "yes" && AC_DEFINE([ENABLE_FRAGMENT], [1], [Enable internal fragmentation support])
1213 test "${enable_port_share}" = "yes" && AC_DEFINE([ENABLE_PORT_SHARE], [1], [Enable TCP Server port sharing])
1214 test "${enable_def_auth}" = "yes" && AC_DEFINE([ENABLE_DEF_AUTH], [1], [Enable deferred authentication])
1215 test "${enable_pf}" = "yes" && AC_DEFINE([ENABLE_PF], [1], [Enable internal packet filter])
1216 test "${enable_strict_options}" = "yes" && AC_DEFINE([ENABLE_STRICT_OPTIONS_CHECK], [1], [Enable strict options check between peers])
1217
1218 test "${enable_crypto_ofb_cfb}" = "yes" && AC_DEFINE([ENABLE_OFB_CFB_MODE], [1], [Enable OFB and CFB cipher modes])
1219 test "${have_crypto_aead_modes}" = "yes" && AC_DEFINE([HAVE_AEAD_CIPHER_MODES], [1], [Use crypto library])
1220 OPTIONAL_CRYPTO_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${CRYPTO_CFLAGS}"
1221 OPTIONAL_CRYPTO_LIBS="${OPTIONAL_CRYPTO_LIBS} ${CRYPTO_LIBS}"
1222
1223 if test "${enable_plugins}" = "yes"; then
1224 OPTIONAL_DL_LIBS="${DL_LIBS}"
1225 AC_DEFINE([ENABLE_PLUGIN], [1], [Enable plug-in support])
1226 else
1227 enable_plugin_auth_pam="no"
1228 enable_plugin_down_root="no"
1229 fi
1230
1231 AM_CONDITIONAL([HAVE_SITNL], [false])
1232
1233 if test "${enable_iproute2}" = "yes"; then
1234 test -z "${IPROUTE}" && AC_MSG_ERROR([ip utility is required but missing])
1235 AC_DEFINE([ENABLE_IPROUTE], [1], [enable iproute2 support])
1236 else if test "${have_sitnl}" = "yes"; then
1237 AC_DEFINE([ENABLE_SITNL], [1], [enable sitnl support])
1238 AM_CONDITIONAL([HAVE_SITNL], [true])
1239 else if test "${WIN32}" != "yes" -a "${have_sitnl}" != "yes"; then
1240 test -z "${ROUTE}" && AC_MSG_ERROR([route utility is required but missing])
1241 test -z "${IFCONFIG}" && AC_MSG_ERROR([ifconfig utility is required but missing])
1242 fi
1243 fi
1244 fi
1245
1246 if test "${enable_selinux}" = "yes"; then
1247 test -z "${SELINUX_LIBS}" && AC_MSG_ERROR([libselinux required but missing])
1248 OPTIONAL_SELINUX_LIBS="${SELINUX_LIBS}"
1249 AC_DEFINE([ENABLE_SELINUX], [1], [SELinux support])
1250 fi
1251
1252 if test "${enable_lzo}" = "yes"; then
1253 test "${have_lzo}" != "yes" && AC_MSG_ERROR([lzo enabled but missing])
1254 OPTIONAL_LZO_CFLAGS="${LZO_CFLAGS}"
1255 OPTIONAL_LZO_LIBS="${LZO_LIBS}"
1256 AC_DEFINE([ENABLE_LZO], [1], [Enable LZO compression library])
1257 fi
1258 if test "${enable_comp_stub}" = "yes"; then
1259 test "${enable_lzo}" = "yes" && AC_MSG_ERROR([Cannot have both comp stub and lzo enabled (use --disable-lzo)])
1260 test "${enable_lz4}" = "yes" && AC_MSG_ERROR([Cannot have both comp stub and LZ4 enabled (use --disable-lz4)])
1261 AC_DEFINE([ENABLE_COMP_STUB], [1], [Enable compression stub capability])
1262 fi
1263
1264 if test "${enable_pkcs11}" = "yes"; then
1265 test "${have_pkcs11_helper}" != "yes" && AC_MSG_ERROR([PKCS11 enabled but libpkcs11-helper is missing])
1266 OPTIONAL_PKCS11_HELPER_CFLAGS="${PKCS11_HELPER_CFLAGS}"
1267 OPTIONAL_PKCS11_HELPER_LIBS="${PKCS11_HELPER_LIBS}"
1268 AC_DEFINE([ENABLE_PKCS11], [1], [Enable PKCS11])
1269 PKG_CHECK_MODULES(
1270 [P11KIT],
1271 [p11-kit-1],
1272 [proxy_module="`$PKG_CONFIG --variable=proxy_module p11-kit-1`"
1273 AC_DEFINE_UNQUOTED([DEFAULT_PKCS11_MODULE], "${proxy_module}", [p11-kit proxy])],
1274 []
1275 )
1276 fi
1277
1278 # When testing a compiler option, we add -Werror to force
1279 # an error when the option is unsupported. This is not
1280 # required for gcc, but some compilers such as clang needs it.
1281 AC_DEFUN([ACL_CHECK_ADD_COMPILE_FLAGS], [
1282 old_cflags="$CFLAGS"
1283 CFLAGS="$1 -Werror $CFLAGS"
1284 AC_MSG_CHECKING([whether the compiler accepts $1])
1285 AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [AC_MSG_RESULT([yes])]; CFLAGS="$1 $old_cflags",
1286 [AC_MSG_RESULT([no]); CFLAGS="$old_cflags"])]
1287 )
1288
1289 ACL_CHECK_ADD_COMPILE_FLAGS([-Wno-stringop-truncation])
1290 ACL_CHECK_ADD_COMPILE_FLAGS([-Wno-unused-function])
1291 ACL_CHECK_ADD_COMPILE_FLAGS([-Wno-unused-parameter])
1292 ACL_CHECK_ADD_COMPILE_FLAGS([-Wall])
1293
1294 if test "${enable_pedantic}" = "yes"; then
1295 enable_strict="yes"
1296 CFLAGS="${CFLAGS} -pedantic"
1297 AC_DEFINE([PEDANTIC], [1], [Enable pedantic mode])
1298 fi
1299 if test "${enable_strict}" = "yes"; then
1300 CFLAGS="${CFLAGS} -Wsign-compare -Wuninitialized"
1301 fi
1302 if test "${enable_werror}" = "yes"; then
1303 CFLAGS="${CFLAGS} -Werror"
1304 fi
1305
1306 if test "${WIN32}" = "yes"; then
1307 test -z "${MAN2HTML}" && AC_MSG_ERROR([man2html is required for win32])
1308 fi
1309
1310 if test "${enable_plugin_auth_pam}" = "yes"; then
1311 PLUGIN_AUTH_PAM_CFLAGS="${LIBPAM_CFLAGS}"
1312 if test "${enable_pam_dlopen}" = "yes"; then
1313 AC_DEFINE([USE_PAM_DLOPEN], [1], [dlopen libpam])
1314 PLUGIN_AUTH_PAM_LIBS="${DL_LIBS}"
1315 else
1316 test -z "${LIBPAM_LIBS}" && AC_MSG_ERROR([libpam required but missing])
1317 PLUGIN_AUTH_PAM_LIBS="${LIBPAM_LIBS}"
1318 fi
1319 fi
1320
1321 if test "${enable_async_push}" = "yes"; then
1322 AC_CHECK_HEADERS(
1323 [sys/inotify.h],
1324 AC_DEFINE([ENABLE_ASYNC_PUSH], [1], [Enable async push]),
1325 AC_MSG_ERROR([inotify.h not found.])
1326 )
1327 fi
1328
1329 CONFIGURE_DEFINES="`set | grep '^enable_.*=' ; set | grep '^with_.*='`"
1330 AC_DEFINE_UNQUOTED([CONFIGURE_DEFINES], ["`echo ${CONFIGURE_DEFINES}`"], [Configuration settings])
1331
1332 TAP_WIN_COMPONENT_ID="PRODUCT_TAP_WIN_COMPONENT_ID"
1333 TAP_WIN_MIN_MAJOR="PRODUCT_TAP_WIN_MIN_MAJOR"
1334 TAP_WIN_MIN_MINOR="PRODUCT_TAP_WIN_MIN_MINOR"
1335 AC_DEFINE_UNQUOTED([TAP_WIN_COMPONENT_ID], ["${TAP_WIN_COMPONENT_ID}"], [The tap-windows id])
1336 AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MAJOR], [${TAP_WIN_MIN_MAJOR}], [The tap-windows version number is required for OpenVPN])
1337 AC_DEFINE_UNQUOTED([TAP_WIN_MIN_MINOR], [${TAP_WIN_MIN_MINOR}], [The tap-windows version number is required for OpenVPN])
1338 AC_SUBST([TAP_WIN_COMPONENT_ID])
1339 AC_SUBST([TAP_WIN_MIN_MAJOR])
1340 AC_SUBST([TAP_WIN_MIN_MINOR])
1341
1342 AC_SUBST([OPTIONAL_DL_LIBS])
1343 AC_SUBST([OPTIONAL_SELINUX_LIBS])
1344 AC_SUBST([OPTIONAL_CRYPTO_CFLAGS])
1345 AC_SUBST([OPTIONAL_CRYPTO_LIBS])
1346 AC_SUBST([OPTIONAL_LZO_CFLAGS])
1347 AC_SUBST([OPTIONAL_LZO_LIBS])
1348 AC_SUBST([OPTIONAL_LZ4_CFLAGS])
1349 AC_SUBST([OPTIONAL_LZ4_LIBS])
1350 AC_SUBST([OPTIONAL_SYSTEMD_LIBS])
1351 AC_SUBST([OPTIONAL_PKCS11_HELPER_CFLAGS])
1352 AC_SUBST([OPTIONAL_PKCS11_HELPER_LIBS])
1353
1354 AC_SUBST([PLUGIN_AUTH_PAM_CFLAGS])
1355 AC_SUBST([PLUGIN_AUTH_PAM_LIBS])
1356
1357 AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
1358 AM_CONDITIONAL([GIT_CHECKOUT], [test "${GIT_CHECKOUT}" = "yes"])
1359 AM_CONDITIONAL([ENABLE_PLUGIN_AUTH_PAM], [test "${enable_plugin_auth_pam}" = "yes"])
1360 AM_CONDITIONAL([ENABLE_PLUGIN_DOWN_ROOT], [test "${enable_plugin_down_root}" = "yes"])
1361 AM_CONDITIONAL([HAVE_LD_WRAP_SUPPORT], [test "${have_ld_wrap_support}" = "yes"])
1362
1363 sampledir="\$(docdir)/sample"
1364 AC_SUBST([plugindir])
1365 AC_SUBST([sampledir])
1366
1367 AC_SUBST([systemdunitdir])
1368 AC_SUBST([tmpfilesdir])
1369
1370 AC_ARG_ENABLE(
1371 [unit-tests],
1372 [AS_HELP_STRING([--disable-unit-tests],
1373 [Disables building and running the unit tests suite])],
1374 [],
1375 [enable_unit_tests="yes"]
1376 )
1377
1378 # Check if cmocka is available - needed for unit testing
1379 PKG_CHECK_MODULES(
1380 [CMOCKA], [cmocka],
1381 [have_cmocka="yes"],
1382 [AC_MSG_WARN([cmocka.pc not found on the system. Unit tests disabled])]
1383 )
1384 AM_CONDITIONAL([ENABLE_UNITTESTS], [test "${enable_unit_tests}" = "yes" -a "${have_cmocka}" = "yes" ])
1385 AC_SUBST([ENABLE_UNITTESTS])
1386
1387 TEST_LDFLAGS="${OPTIONAL_CRYPTO_LIBS} ${OPTIONAL_PKCS11_HELPER_LIBS}"
1388 TEST_LDFLAGS="${TEST_LDFLAGS} ${OPTIONAL_LZO_LIBS} ${CMOCKA_LIBS}"
1389 TEST_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${OPTIONAL_PKCS11_HELPER_CFLAGS}"
1390 TEST_CFLAGS="${TEST_CFLAGS} ${OPTIONAL_LZO_CFLAGS}"
1391 TEST_CFLAGS="${TEST_CFLAGS} -I\$(top_srcdir)/include ${CMOCKA_CFLAGS}"
1392
1393 AC_SUBST([TEST_LDFLAGS])
1394 AC_SUBST([TEST_CFLAGS])
1395
1396 AC_CONFIG_FILES([
1397 version.sh
1398 Makefile
1399 build/Makefile
1400 build/msvc/Makefile
1401 build/msvc/msvc-generate/Makefile
1402 distro/Makefile
1403 distro/systemd/Makefile
1404 doc/Makefile
1405 doc/doxygen/Makefile
1406 doc/doxygen/openvpn.doxyfile
1407 include/Makefile
1408 src/Makefile
1409 src/compat/Makefile
1410 src/openvpn/Makefile
1411 src/openvpnmsica/Makefile
1412 src/openvpnserv/Makefile
1413 src/plugins/Makefile
1414 src/plugins/auth-pam/Makefile
1415 src/plugins/down-root/Makefile
1416 src/tapctl/Makefile
1417 tests/Makefile
1418 tests/unit_tests/Makefile
1419 tests/unit_tests/example_test/Makefile
1420 tests/unit_tests/openvpn/Makefile
1421 tests/unit_tests/plugins/Makefile
1422 tests/unit_tests/plugins/auth-pam/Makefile
1423 sample/Makefile
1424 ])
1425 AC_CONFIG_FILES([tests/t_client.sh], [chmod +x tests/t_client.sh])
1426 AC_OUTPUT