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