]> git.proxmox.com Git - mirror_kronosnet.git/blame - configure.ac
build: we preserve CPPFLAGS, just remove the tempting hooks
[mirror_kronosnet.git] / configure.ac
CommitLineData
ab4c538f 1#
a3d5822a 2# Copyright (C) 2010-2018 Red Hat, Inc. All rights reserved.
ab4c538f
FDN
3#
4# Authors: Fabio M. Di Nitto <fabbione@kronosnet.org>
5# Federico Simoncelli <fsimon@kronosnet.org>
6#
7# This software licensed under GPL-2.0+, LGPL-2.0+
8#
9
99afbd6e
FDN
10# -*- Autoconf -*-
11# Process this file with autoconf to produce a configure script.
ab4c538f 12#
99afbd6e
FDN
13
14AC_PREREQ([2.63])
07072a06
FDN
15AC_INIT([kronosnet],
16 m4_esyscmd([build-aux/git-version-gen .tarball-version]),
17 [devel@lists.kronosnet.org])
4359cb72 18AC_USE_SYSTEM_EXTENSIONS
9f9883b1 19AM_INIT_AUTOMAKE([1.13 dist-bzip2 dist-xz color-tests -Wno-portability subdir-objects])
dba12205 20
99afbd6e 21LT_PREREQ([2.2.6])
cc5199a6
FW
22# --enable-new-dtags: Use RUNPATH instead of RPATH.
23# It is necessary to have this done before libtool does linker detection.
24# See also: https://github.com/kronosnet/kronosnet/issues/107
25AC_SUBST([AM_LDFLAGS],["-Wl,--enable-new-dtags"])
26saved_LDFLAGS="$LDFLAGS"
27LDFLAGS="$AM_LDFLAGS $LDFLAGS"
99afbd6e 28LT_INIT
cc5199a6 29LDFLAGS="$saved_LDFLAGS"
99afbd6e
FDN
30
31AC_CONFIG_MACRO_DIR([m4])
4aa63ad7 32AC_CONFIG_SRCDIR([kronosnetd/main.c])
99afbd6e
FDN
33AC_CONFIG_HEADERS([config.h])
34
35AC_CANONICAL_HOST
36AC_PROG_LIBTOOL
37
38AC_LANG([C])
39
905cb809
FDN
40systemddir=${prefix}/lib/systemd/system
41
99afbd6e
FDN
42if test "$prefix" = "NONE"; then
43 prefix="/usr"
44 if test "$localstatedir" = "\${prefix}/var"; then
45 localstatedir="/var"
46 fi
47 if test "$sysconfdir" = "\${prefix}/etc"; then
48 sysconfdir="/etc"
49 fi
905cb809
FDN
50 if test "$systemddir" = "NONE/lib/systemd/system"; then
51 systemddir=/lib/systemd/system
52 fi
e8b52625
JF
53 if test "$libdir" = "\${exec_prefix}/lib"; then
54 if test -e /usr/lib64; then
55 libdir="/usr/lib64"
56 else
57 libdir="/usr/lib"
58 fi
59 fi
99afbd6e
FDN
60fi
61
5842a2f9 62AC_PROG_AWK
e3683ec7
FDN
63AC_PROG_GREP
64AC_PROG_SED
5842a2f9 65AC_PROG_CPP
99afbd6e 66AC_PROG_CC
dd8bbbde
FDN
67AC_PROG_CC_C99
68if test "x$ac_cv_prog_cc_c99" = "xno"; then
69 AC_MSG_ERROR(["C99 support is required"])
70fi
99afbd6e
FDN
71AC_PROG_LN_S
72AC_PROG_INSTALL
73AC_PROG_MAKE_SET
9e569a13 74PKG_PROG_PKG_CONFIG
a60241ba 75AC_CHECK_PROGS([DOXYGEN], [doxygen])
8f114254 76
3e776e82
FDN
77AC_CHECK_PROGS([VALGRIND_EXEC], [valgrind])
78AM_CONDITIONAL([HAS_VALGRIND], [test x$VALGRIND_EXEC != "x"])
99afbd6e 79
f3396d98
FW
80# KNET_OPTION_DEFINES(stem,type,detection code)
81# stem: enters name of option, Automake conditional and preprocessor define
82# type: compress or crypto, determines where the default comes from
83AC_DEFUN([KNET_OPTION_DEFINES],[
84AC_ARG_ENABLE([$2-$1],[AS_HELP_STRING([--disable-$2-$1],[disable libknet $1 support])],,
85 [enable_$2_$1="$enable_$2_all"])
86AM_CONDITIONAL([BUILD_]m4_toupper([$2_$1]),[test "x$enable_$2_$1" = xyes])
87if test "x$enable_$2_$1" = xyes; then
88 $3
89fi
90AC_DEFINE_UNQUOTED([WITH_]m4_toupper([$2_$1]), [`test "x$enable_$2_$1" != xyes; echo $?`], $1 $2 [built in])
91])
92
43bd160d 93AC_ARG_ENABLE([libknet-sctp],
f58d6934 94 [AS_HELP_STRING([--disable-libknet-sctp],[disable libknet SCTP support])],,
43bd160d 95 [ enable_libknet_sctp="yes" ])
20f9cc1e 96AM_CONDITIONAL([BUILDSCTP], [test x$enable_libknet_sctp = xyes])
43bd160d 97
c59268f2 98AC_ARG_ENABLE([crypto-all],
f58d6934 99 [AS_HELP_STRING([--disable-crypto-all],[disable libknet all crypto modules support])],,
c59268f2
FDN
100 [ enable_crypto_all="yes" ])
101
f3396d98
FW
102KNET_OPTION_DEFINES([nss],[crypto],[PKG_CHECK_MODULES([nss], [nss])])
103KNET_OPTION_DEFINES([openssl],[crypto],[
104 PKG_CHECK_MODULES([openssl],[libcrypto < 1.1],
105 [AC_DEFINE_UNQUOTED([BUILDCRYPTOOPENSSL10], [1], [openssl 1.0 crypto])],
106 [PKG_CHECK_MODULES([openssl],[libcrypto >= 1.1],
107 [AC_DEFINE_UNQUOTED([BUILDCRYPTOOPENSSL11], [1], [openssl 1.1 crypto])])])
108])
109
7322344c 110AC_ARG_ENABLE([compress-all],
f58d6934 111 [AS_HELP_STRING([--disable-compress-all],[disable libknet all compress modules support])],,
7322344c
FDN
112 [ enable_compress_all="yes" ])
113
f3396d98
FW
114KNET_OPTION_DEFINES([zlib],[compress],[PKG_CHECK_MODULES([zlib], [zlib])])
115KNET_OPTION_DEFINES([lz4],[compress],[PKG_CHECK_MODULES([liblz4], [liblz4])])
116KNET_OPTION_DEFINES([lzo2],[compress],[
718c0ae7
FW
117 PKG_CHECK_MODULES([lzo2], [lzo2],
118 [# work around broken pkg-config file in v2.10
119 AC_SUBST([lzo2_CFLAGS],[`echo $lzo2_CFLAGS | sed 's,/lzo *, ,'`])],
f3396d98
FW
120 [AC_CHECK_HEADERS([lzo/lzo1x.h],
121 [AC_CHECK_LIB([lzo2], [lzo1x_decompress_safe],
122 [AC_SUBST([lzo2_LIBS], [-llzo2])])],
123 [AC_MSG_ERROR(["missing required lzo/lzo1x.h header"])])])
124])
125KNET_OPTION_DEFINES([lzma],[compress],[PKG_CHECK_MODULES([liblzma], [liblzma])])
126KNET_OPTION_DEFINES([bzip2],[compress],[
127 PKG_CHECK_MODULES([bzip2], [bzip2],,
128 [AC_CHECK_HEADERS([bzlib.h],
129 [AC_CHECK_LIB([bz2], [BZ2_bzBuffToBuffCompress],
130 [AC_SUBST([bzip2_LIBS], [-lbz2])])],
131 [AC_MSG_ERROR(["missing required bzlib.h"])])])
132])
133
1c75eb10 134AC_ARG_ENABLE([poc],
f58d6934 135 [AS_HELP_STRING([--enable-poc],[enable building poc code])],,
89c58e91 136 [ enable_poc="no" ])
5449d795 137AM_CONDITIONAL([BUILD_POC], [test x$enable_poc = xyes])
1c75eb10 138
ace7cd0e 139AC_ARG_ENABLE([kronosnetd],
f58d6934 140 [AS_HELP_STRING([--enable-kronosnetd],[Kronosnetd support])],,
226e5109 141 [ enable_kronosnetd="no" ])
5449d795 142AM_CONDITIONAL([BUILD_KRONOSNETD], [test x$enable_kronosnetd = xyes])
ace7cd0e 143
8f8384a0 144AC_ARG_ENABLE([runautogen],
f58d6934 145 [AS_HELP_STRING([--enable-runautogen],[run autogen.sh])],,
8f8384a0
BL
146 [ enable_runautogen="no" ])
147AM_CONDITIONAL([BUILD_RUNAUTOGEN], [test x$enable_runautogen = xyes])
148
73677ca3
BL
149override_rpm_debuginfo_option="yes"
150AC_ARG_ENABLE([rpm-debuginfo],
151 [AS_HELP_STRING([--enable-rpm-debuginfo],[build debuginfo packages])],,
152 [ enable_rpm_debuginfo="no", override_rpm_debuginfo_option="no" ])
153AM_CONDITIONAL([BUILD_RPM_DEBUGINFO], [test x$enable_rpm_debuginfo = xyes])
154AM_CONDITIONAL([OVERRIDE_RPM_DEBUGINFO], [test x$override_rpm_debuginfo_option = xyes])
155
ace7cd0e 156AC_ARG_ENABLE([libtap],
f58d6934 157 [AS_HELP_STRING([--enable-libtap],[libtap support])],,
226e5109 158 [ enable_libtap="no" ])
58b997ce
CC
159
160if test "x$enable_kronosnetd" = xyes; then
226e5109 161 enable_libtap=yes
58b997ce 162fi
5449d795 163AM_CONDITIONAL([BUILD_LIBTAP], [test x$enable_libtap = xyes])
ace7cd0e 164
99afbd6e
FDN
165## local helper functions
166# this function checks if CC support options passed as
6754dbab 167# args. Global CPPFLAGS are ignored during this test.
99afbd6e 168cc_supports_flag() {
ae9ebb47
FDN
169 saveCPPFLAGS="$CPPFLAGS"
170 CPPFLAGS="$@"
30f44d00
FDN
171 if echo $CC | grep -q clang; then
172 CPPFLAGS="-Werror $CPPFLAGS"
173 fi
99afbd6e 174 AC_MSG_CHECKING([whether $CC supports "$@"])
ae9ebb47 175 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])],
99afbd6e
FDN
176 [RC=0; AC_MSG_RESULT([yes])],
177 [RC=1; AC_MSG_RESULT([no])])
ae9ebb47 178 CPPFLAGS="$saveCPPFLAGS"
99afbd6e
FDN
179 return $RC
180}
181
c3776828
FDN
182# Checks for C features
183AC_C_INLINE
184
99afbd6e 185# Checks for libraries.
2b1072db 186AX_PTHREAD(,[AC_MSG_ERROR([POSIX threads support is required])])
4d137be1 187AC_CHECK_LIB([m], [ceil], [AC_SUBST([m_LIBS], [-lm])], [AC_MSG_ERROR([kronosnet requires m library])])
c1effb8a
FW
188saved_LIBS="$LIBS"
189LIBS=
190AC_SEARCH_LIBS([clock_gettime], [rt], , [AC_MSG_ERROR([clock_gettime not found])])
191AC_SUBST([rt_LIBS], [$LIBS])
3cc6b180
FW
192LIBS=
193AC_SEARCH_LIBS([dlopen], [dl dld], , [AC_MSG_ERROR([dlopen not found])])
194AC_SUBST([dl_LIBS], [$LIBS])
c1effb8a 195LIBS="$saved_LIBS"
99afbd6e 196
c296433f
FDN
197# OS detection
198
199AC_MSG_CHECKING([for os in ${host_os}])
200case "$host_os" in
201 *linux*)
202 AC_DEFINE_UNQUOTED([KNET_LINUX], [1], [Compiling for Linux platform])
203 AC_MSG_RESULT([Linux])
204 ;;
205 *bsd*)
206 AC_DEFINE_UNQUOTED([KNET_BSD], [1], [Compiling for BSD platform])
207 AC_MSG_RESULT([BSD])
208 if test "x$enable_libtap" = xyes; then
209 AC_MSG_ERROR([libtap is not currently supported on BSD platforms])
210 fi
211 ;;
212 *)
213 AC_MSG_ERROR([Unsupported OS? hmmmm])
214 ;;
215esac
216
99afbd6e 217# Checks for header files.
bba2a8d7
FDN
218AC_CHECK_HEADERS([fcntl.h])
219AC_CHECK_HEADERS([stdlib.h])
220AC_CHECK_HEADERS([string.h])
5842a2f9 221AC_CHECK_HEADERS([strings.h])
bba2a8d7
FDN
222AC_CHECK_HEADERS([sys/ioctl.h])
223AC_CHECK_HEADERS([syslog.h])
224AC_CHECK_HEADERS([unistd.h])
6d727d3c
FDN
225AC_CHECK_HEADERS([netinet/in.h])
226AC_CHECK_HEADERS([sys/socket.h])
c3776828 227AC_CHECK_HEADERS([arpa/inet.h])
521b047e 228AC_CHECK_HEADERS([netdb.h])
ba6bc349 229AC_CHECK_HEADERS([limits.h])
5842a2f9 230AC_CHECK_HEADERS([stdint.h])
3a50d466 231AC_CHECK_HEADERS([sys/epoll.h])
d75f2295
FDN
232
233if test "x$enable_libknet_sctp" = xyes; then
fd28a29f 234 AC_CHECK_HEADERS([netinet/sctp.h],, [AC_MSG_ERROR(["missing required SCTP headers"])])
d75f2295 235fi
99afbd6e
FDN
236
237# Checks for typedefs, structures, and compiler characteristics.
5842a2f9 238AC_C_INLINE
bba2a8d7 239AC_TYPE_SIZE_T
6d727d3c 240AC_TYPE_PID_T
c3776828 241AC_TYPE_SSIZE_T
31f37826 242AC_TYPE_UINT8_T
c3776828
FDN
243AC_TYPE_UINT16_T
244AC_TYPE_UINT32_T
efc95595
FDN
245AC_TYPE_UINT64_T
246AC_TYPE_INT32_T
99afbd6e
FDN
247
248# Checks for library functions.
6d727d3c
FDN
249AC_FUNC_ALLOCA
250AC_FUNC_FORK
251AC_FUNC_MALLOC
252AC_FUNC_REALLOC
f762bb6e 253AC_CHECK_FUNCS([kevent])
3a50d466
FDN
254# if neither sys/epoll.h nor kevent are present, we should fail.
255
256if test "x$ac_cv_header_sys_epoll_h" = xno && test "x$ac_cv_func_kevent" = xno; then
257 AC_MSG_ERROR([Both epoll and kevent unavailable on this OS])
258fi
259
260if test "x$ac_cv_header_sys_epoll_h" = xyes && test "x$ac_cv_func_kevent" = xyes; then
261 AC_MSG_ERROR([Both epoll and kevent available on this OS, please contact the maintainers to fix the code])
262fi
71fd62d6 263
ad333231
FDN
264# required by doxyman to build man pages dynamically
265PKG_CHECK_MODULES([libqb], [libqb])
266PKG_CHECK_MODULES([libxml], [libxml-2.0])
267
fa8c7f32 268# checks (for kronosnetd)
ace7cd0e 269if test "x$enable_kronosnetd" = xyes; then
226e5109 270 AC_CHECK_HEADERS([security/pam_appl.h],
26fe18aa
FW
271 [AC_CHECK_LIB([pam], [pam_start],
272 [AC_SUBST([pam_LIBS], [-lpam])],
273 [AC_MSG_ERROR([Unable to find LinuxPAM devel files])])])
e311acaa 274
226e5109 275 AC_CHECK_HEADERS([security/pam_misc.h],
26fe18aa
FW
276 [AC_CHECK_LIB([pam_misc], [misc_conv],
277 [AC_SUBST([pam_misc_LIBS], [-lpam_misc])],
278 [AC_MSG_ERROR([Unable to find LinuxPAM MISC devel files])])])
38cb1bb7 279
226e5109
FDN
280 AC_CHECK_LIB([qb], [qb_log_thread_priority_set],
281 [have_qb_log_thread_priority_set="yes"],
282 [have_qb_log_thread_priority_set="no"])
283 if test "x${have_qb_log_thread_priority_set}" = xyes; then
284 AC_DEFINE_UNQUOTED([HAVE_QB_LOG_THREAD_PRIORITY_SET], [1], [have qb_log_thread_priority_set])
285 fi
ace7cd0e 286fi
38cb1bb7 287
99afbd6e
FDN
288# local options
289AC_ARG_ENABLE([debug],
967ee0b3 290 [AS_HELP_STRING([--enable-debug],[enable debug build])])
99afbd6e 291
2e687dd8 292AC_ARG_WITH([initdefaultdir],
f58d6934 293 [AS_HELP_STRING([--with-initdefaultdir=DIR],[path to /etc/sysconfig or /etc/default dir])],
2e687dd8
FDN
294 [ INITDEFAULTDIR="$withval" ],
295 [ INITDEFAULTDIR="$sysconfdir/default" ])
296
0472de45 297AC_ARG_WITH([initddir],
f58d6934 298 [AS_HELP_STRING([--with-initddir=DIR],[path to init script directory])],
0472de45
FDN
299 [ INITDDIR="$withval" ],
300 [ INITDDIR="$sysconfdir/init.d" ])
301
302AC_ARG_WITH([systemddir],
f58d6934 303 [AS_HELP_STRING([--with-systemddir=DIR],[path to systemd unit files directory])],
0472de45 304 [ SYSTEMDDIR="$withval" ],
905cb809 305 [ SYSTEMDDIR="$systemddir" ])
0472de45 306
99afbd6e 307AC_ARG_WITH([syslogfacility],
f58d6934 308 [AS_HELP_STRING([--with-syslogfacility=FACILITY],[default syslog facility])],
99afbd6e 309 [ SYSLOGFACILITY="$withval" ],
2d022f7f 310 [ SYSLOGFACILITY="LOG_DAEMON" ])
99afbd6e
FDN
311
312AC_ARG_WITH([sysloglevel],
f58d6934 313 [AS_HELP_STRING([--with-sysloglevel=LEVEL],[default syslog level])],
99afbd6e
FDN
314 [ SYSLOGLEVEL="$withval" ],
315 [ SYSLOGLEVEL="LOG_INFO" ])
316
e3aa8728 317AC_ARG_WITH([defaultadmgroup],
f58d6934
FW
318 [AS_HELP_STRING([--with-defaultadmgroup=GROUP],
319 [define PAM group. Users part of this group will be allowed to configure
320 kronosnet. Others will only receive read-only rights.])],
e3aa8728
FDN
321 [ DEFAULTADMGROUP="$withval" ],
322 [ DEFAULTADMGROUP="kronosnetadm" ])
323
99afbd6e
FDN
324## random vars
325LOGDIR=${localstatedir}/log/
326RUNDIR=${localstatedir}/run/
afce19e1 327DEFAULT_CONFIG_DIR=${sysconfdir}/kronosnet
99afbd6e
FDN
328
329## do subst
330
afce19e1 331AC_SUBST([DEFAULT_CONFIG_DIR])
2e687dd8 332AC_SUBST([INITDEFAULTDIR])
0472de45
FDN
333AC_SUBST([INITDDIR])
334AC_SUBST([SYSTEMDDIR])
b386f39b 335AC_SUBST([LOGDIR])
2e687dd8 336AC_SUBST([DEFAULTADMGROUP])
0472de45 337
4fc6106b
FDN
338AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_DIR],
339 ["$(eval echo ${DEFAULT_CONFIG_DIR})"],
afce19e1
FDN
340 [Default config directory])
341
342AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_FILE],
4fc6106b 343 ["$(eval echo ${DEFAULT_CONFIG_DIR}/kronosnetd.conf)"],
99afbd6e
FDN
344 [Default config file])
345
4fc6106b
FDN
346AC_DEFINE_UNQUOTED([LOGDIR],
347 ["$(eval echo ${LOGDIR})"],
99afbd6e
FDN
348 [Default logging directory])
349
2d022f7f 350AC_DEFINE_UNQUOTED([DEFAULT_LOG_FILE],
4fc6106b 351 ["$(eval echo ${LOGDIR}/kronosnetd.log)"],
2d022f7f
FDN
352 [Default log file])
353
4fc6106b
FDN
354AC_DEFINE_UNQUOTED([RUNDIR],
355 ["$(eval echo ${RUNDIR})"],
99afbd6e
FDN
356 [Default run directory])
357
4fc6106b
FDN
358AC_DEFINE_UNQUOTED([SYSLOGFACILITY],
359 [$(eval echo ${SYSLOGFACILITY})],
99afbd6e
FDN
360 [Default syslog facility])
361
4fc6106b
FDN
362AC_DEFINE_UNQUOTED([SYSLOGLEVEL],
363 [$(eval echo ${SYSLOGLEVEL})],
99afbd6e
FDN
364 [Default syslog level])
365
4fc6106b
FDN
366AC_DEFINE_UNQUOTED([DEFAULTADMGROUP],
367 ["$(eval echo ${DEFAULTADMGROUP})"],
e3aa8728
FDN
368 [Default admin group])
369
99afbd6e
FDN
370## *FLAGS handling
371ENV_CFLAGS="$CFLAGS"
99afbd6e
FDN
372
373# debug build stuff
374if test "x${enable_debug}" = xyes; then
375 AC_DEFINE_UNQUOTED([DEBUG], [1], [Compiling Debugging code])
376 OPT_CFLAGS="-O0"
377else
378 OPT_CFLAGS="-O3"
379fi
380
381# gdb flags
382if test "x${GCC}" = xyes; then
383 GDB_FLAGS="-ggdb3"
384else
385 GDB_FLAGS="-g"
386fi
387
388# extra warnings
389EXTRA_WARNINGS=""
390
391WARNLIST="
392 all
0dbd680b
MJ
393 extra
394 unused
99afbd6e
FDN
395 shadow
396 missing-prototypes
397 missing-declarations
0dbd680b
MJ
398 suggest-attribute=noreturn
399 suggest-attribute=format
99afbd6e
FDN
400 strict-prototypes
401 declaration-after-statement
402 pointer-arith
403 write-strings
404 cast-align
405 bad-function-cast
406 missing-format-attribute
0dbd680b 407 float-equal
99afbd6e 408 format=2
fb2cc79f 409 format-signedness
99afbd6e
FDN
410 format-security
411 format-nonliteral
412 no-long-long
413 unsigned-char
414 gnu89-inline
415 no-strict-aliasing
416 error
ade3159b
FDN
417 address
418 cpp
ade3159b
FDN
419 overflow
420 parentheses
421 sequence-point
422 switch
0dbd680b
MJ
423 shift-overflow=2
424 overlength-strings
425 retundent-decls
426 init-self
ade3159b
FDN
427 uninitialized
428 unused-but-set-variable
429 unused-function
430 unused-result
431 unused-value
432 unused-variable
0dbd680b
MJ
433 unknown-pragmas
434 no-unused-parameter
99afbd6e
FDN
435 "
436
437for j in $WARNLIST; do
438 if cc_supports_flag -W$j; then
439 EXTRA_WARNINGS="$EXTRA_WARNINGS -W$j";
440 fi
441done
442
ae9ebb47 443CFLAGS="$ENV_CFLAGS $lt_prog_compiler_pic $OPT_CFLAGS $GDB_FLAGS \
99afbd6e 444 $EXTRA_WARNINGS $WERROR_CFLAGS"
99afbd6e 445
19ceca42
FDN
446AC_CONFIG_FILES([
447 Makefile
0472de45 448 init/Makefile
5d4a4eec
FDN
449 libtap/Makefile
450 libtap/libtap.pc
4aa63ad7 451 kronosnetd/Makefile
b386f39b 452 kronosnetd/kronosnetd.logrotate
10244a3f
FS
453 libknet/Makefile
454 libknet/libknet.pc
a86247e6 455 libknet/tests/Makefile
8f114254
FDN
456 libknet/man/Doxyfile
457 libknet/man/Makefile
ad333231 458 build-aux/Makefile
7368d54c 459 poc-code/Makefile
77213908 460 poc-code/iov-hash/Makefile
712dee58 461 poc-code/access-list/Makefile
19ceca42 462 ])
99afbd6e
FDN
463
464AC_OUTPUT