]> git.proxmox.com Git - mirror_kronosnet.git/blame - configure.ac
[testing] add knet_send with all crypto modules test
[mirror_kronosnet.git] / configure.ac
CommitLineData
ab4c538f 1#
5a59367f 2# Copyright (C) 2010-2015 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
762c0098 19AM_INIT_AUTOMAKE([1.11.1 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
54# Checks for programs.
55if ! ${MAKE-make} --version /cannot/make/this >/dev/null 2>&1; then
ae9ebb47 56 AC_MSG_ERROR(["you don't seem to have GNU make; it is required"])
99afbd6e 57fi
ae9ebb47 58
5842a2f9 59AC_PROG_AWK
e3683ec7
FDN
60AC_PROG_GREP
61AC_PROG_SED
5842a2f9 62AC_PROG_CPP
99afbd6e 63AC_PROG_CC
dd8bbbde
FDN
64AC_PROG_CC_C99
65if test "x$ac_cv_prog_cc_c99" = "xno"; then
66 AC_MSG_ERROR(["C99 support is required"])
67fi
99afbd6e
FDN
68AC_PROG_LN_S
69AC_PROG_INSTALL
70AC_PROG_MAKE_SET
71AC_PROG_CXX
72AC_PROG_RANLIB
b8bf8c7f 73AC_CHECK_PROGS([PUBLICAN], [publican], [:])
99afbd6e
FDN
74AC_CHECK_PROGS([PKGCONFIG], [pkg-config])
75
1c75eb10 76AC_ARG_ENABLE([poc],
136ef4c1 77 [ --disable-poc : avoid building poc code ],,
1c75eb10 78 [ enable_poc="yes" ])
5449d795 79AM_CONDITIONAL([BUILD_POC], [test x$enable_poc = xyes])
1c75eb10 80
ace7cd0e
CC
81AC_ARG_ENABLE([kronosnetd],
82 [ --enable-kronosnetd : Kronosnetd support ],,
83 [ enable_kronosnetd="no" ])
5449d795 84AM_CONDITIONAL([BUILD_KRONOSNETD], [test x$enable_kronosnetd = xyes])
ace7cd0e
CC
85
86AC_ARG_ENABLE([libtap],
87 [ --enable-libtap : libtap support ],,
88 [ enable_libtap="no" ])
58b997ce
CC
89
90if test "x$enable_kronosnetd" = xyes; then
91 enable_libtap=yes
92fi
5449d795 93AM_CONDITIONAL([BUILD_LIBTAP], [test x$enable_libtap = xyes])
ace7cd0e 94
d75f2295 95AC_ARG_ENABLE([libknet-sctp],
136ef4c1 96 [ --disable-libknet-sctp : avoid libknet SCTP support ],,
d75f2295 97 [ enable_libknet_sctp="yes" ])
d75f2295 98
99afbd6e
FDN
99## local helper functions
100# this function checks if CC support options passed as
101# args. Global CFLAGS are ignored during this test.
102cc_supports_flag() {
ae9ebb47
FDN
103 saveCPPFLAGS="$CPPFLAGS"
104 CPPFLAGS="$@"
30f44d00
FDN
105 if echo $CC | grep -q clang; then
106 CPPFLAGS="-Werror $CPPFLAGS"
107 fi
99afbd6e 108 AC_MSG_CHECKING([whether $CC supports "$@"])
ae9ebb47 109 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])],
99afbd6e
FDN
110 [RC=0; AC_MSG_RESULT([yes])],
111 [RC=1; AC_MSG_RESULT([no])])
ae9ebb47 112 CPPFLAGS="$saveCPPFLAGS"
99afbd6e
FDN
113 return $RC
114}
115
116# helper macro to check libs without adding them to LIBS
117check_lib_no_libs() {
118 lib_no_libs_arg1=$1
119 shift
120 lib_no_libs_arg2=$1
121 shift
122 lib_no_libs_args=$@
123 AC_CHECK_LIB([$lib_no_libs_arg1],
124 [$lib_no_libs_arg2],,,
125 [$lib_no_libs_args])
126 LIBS=$ac_check_lib_save_LIBS
127}
128
c3776828
FDN
129# Checks for C features
130AC_C_INLINE
131
99afbd6e 132# Checks for libraries.
a5d43036 133AC_CHECK_LIB([pthread], [pthread_create])
e9d8f3c2 134AC_CHECK_LIB([m], [ceil])
df5fcdba 135AC_CHECK_LIB([rt], [clock_gettime])
99afbd6e 136
2052faab 137# crypto libraries checks
56407f26 138PKG_CHECK_MODULES([nss],[nss])
56407f26 139
2052faab
FDN
140# compress libraries checks
141# zlib is cheap because it's pulled in by nss
142PKG_CHECK_MODULES([zlib], [zlib])
b9bc9d38 143PKG_CHECK_MODULES([liblz4], [liblz4])
2052faab 144
99afbd6e 145# Checks for header files.
bba2a8d7
FDN
146AC_CHECK_HEADERS([fcntl.h])
147AC_CHECK_HEADERS([stdlib.h])
148AC_CHECK_HEADERS([string.h])
5842a2f9 149AC_CHECK_HEADERS([strings.h])
bba2a8d7
FDN
150AC_CHECK_HEADERS([sys/ioctl.h])
151AC_CHECK_HEADERS([syslog.h])
152AC_CHECK_HEADERS([unistd.h])
6d727d3c
FDN
153AC_CHECK_HEADERS([netinet/in.h])
154AC_CHECK_HEADERS([sys/socket.h])
c3776828 155AC_CHECK_HEADERS([arpa/inet.h])
521b047e 156AC_CHECK_HEADERS([netdb.h])
ba6bc349 157AC_CHECK_HEADERS([limits.h])
5842a2f9 158AC_CHECK_HEADERS([stdint.h])
3a50d466 159AC_CHECK_HEADERS([sys/epoll.h])
d75f2295
FDN
160
161if test "x$enable_libknet_sctp" = xyes; then
5449d795 162 AC_CHECK_HEADERS([netinet/sctp.h],, AC_MSG_ERROR(["missing required SCTP headers"]))
d75f2295 163fi
99afbd6e
FDN
164
165# Checks for typedefs, structures, and compiler characteristics.
5842a2f9 166AC_C_INLINE
bba2a8d7 167AC_TYPE_SIZE_T
6d727d3c 168AC_TYPE_PID_T
c3776828 169AC_TYPE_SSIZE_T
31f37826 170AC_TYPE_UINT8_T
c3776828
FDN
171AC_TYPE_UINT16_T
172AC_TYPE_UINT32_T
efc95595
FDN
173AC_TYPE_UINT64_T
174AC_TYPE_INT32_T
99afbd6e
FDN
175
176# Checks for library functions.
6d727d3c
FDN
177AC_FUNC_ALLOCA
178AC_FUNC_FORK
179AC_FUNC_MALLOC
180AC_FUNC_REALLOC
bba2a8d7
FDN
181AC_CHECK_FUNCS([memset])
182AC_CHECK_FUNCS([strdup])
183AC_CHECK_FUNCS([strerror])
6d727d3c
FDN
184AC_CHECK_FUNCS([dup2])
185AC_CHECK_FUNCS([select])
186AC_CHECK_FUNCS([socket])
31f37826
FDN
187AC_CHECK_FUNCS([inet_ntoa])
188AC_CHECK_FUNCS([memmove])
189AC_CHECK_FUNCS([strchr])
bc5fdb83
FDN
190AC_CHECK_FUNCS([atexit])
191AC_CHECK_FUNCS([ftruncate])
7a00930f
FDN
192AC_CHECK_FUNCS([strrchr])
193AC_CHECK_FUNCS([strstr])
ba6bc349 194AC_CHECK_FUNCS([clock_gettime])
efc95595 195AC_CHECK_FUNCS([strcasecmp])
f762bb6e 196AC_CHECK_FUNCS([kevent])
3a50d466
FDN
197# if neither sys/epoll.h nor kevent are present, we should fail.
198
199if test "x$ac_cv_header_sys_epoll_h" = xno && test "x$ac_cv_func_kevent" = xno; then
200 AC_MSG_ERROR([Both epoll and kevent unavailable on this OS])
201fi
202
203if test "x$ac_cv_header_sys_epoll_h" = xyes && test "x$ac_cv_func_kevent" = xyes; then
204 AC_MSG_ERROR([Both epoll and kevent available on this OS, please contact the maintainers to fix the code])
205fi
71fd62d6 206
fa8c7f32 207# checks (for kronosnetd)
ace7cd0e 208if test "x$enable_kronosnetd" = xyes; then
e311acaa 209
38cb1bb7
FDN
210AC_CHECK_HEADERS([security/pam_appl.h],
211 [AC_CHECK_LIB([pam], [pam_start])],
212 [AC_MSG_ERROR([Unable to find LinuxPAM devel files])])
213
214AC_CHECK_HEADERS([security/pam_misc.h],
ace7cd0e
CC
215 [AC_CHECK_LIB([pam_misc], [misc_conv])],
216 [AC_MSG_ERROR([Unable to find LinuxPAM MISC devel files])])
217
fa8c7f32
FDN
218PKG_CHECK_MODULES([libqb], [libqb])
219
220AC_CHECK_LIB([qb], [qb_log_thread_priority_set],
221 [have_qb_log_thread_priority_set="yes"],
222 [have_qb_log_thread_priority_set="no"])
223
224if test "x${have_qb_log_thread_priority_set}" = xyes; then
5449d795 225 AC_DEFINE_UNQUOTED([HAVE_QB_LOG_THREAD_PRIORITY_SET], [1], [have qb_log_thread_priority_set])
fa8c7f32
FDN
226fi
227
ace7cd0e 228fi
38cb1bb7 229
99afbd6e
FDN
230# local options
231AC_ARG_ENABLE([debug],
232 [ --enable-debug enable debug build. ],
233 [ default="no" ])
234
c8ed20e0
FDN
235AC_ARG_ENABLE([publicandocs],
236 [ --enable-publicandocs enable docs build. ],
237 [ default="no" ])
238
2e687dd8
FDN
239AC_ARG_WITH([initdefaultdir],
240 [ --with-initdefaultdir : path to /etc/sysconfig/.. or /etc/default dir. ],
241 [ INITDEFAULTDIR="$withval" ],
242 [ INITDEFAULTDIR="$sysconfdir/default" ])
243
0472de45
FDN
244AC_ARG_WITH([initddir],
245 [ --with-initddir=DIR : path to init script directory. ],
246 [ INITDDIR="$withval" ],
247 [ INITDDIR="$sysconfdir/init.d" ])
248
249AC_ARG_WITH([systemddir],
250 [ --with-systemddir=DIR : path to systemd unit files directory. ],
251 [ SYSTEMDDIR="$withval" ],
905cb809 252 [ SYSTEMDDIR="$systemddir" ])
0472de45 253
99afbd6e 254AC_ARG_WITH([syslogfacility],
e3aa8728 255 [ --with-syslogfacility=FACILITY
99afbd6e
FDN
256 default syslog facility. ],
257 [ SYSLOGFACILITY="$withval" ],
2d022f7f 258 [ SYSLOGFACILITY="LOG_DAEMON" ])
99afbd6e
FDN
259
260AC_ARG_WITH([sysloglevel],
e3aa8728 261 [ --with-sysloglevel=LEVEL
99afbd6e
FDN
262 default syslog level. ],
263 [ SYSLOGLEVEL="$withval" ],
264 [ SYSLOGLEVEL="LOG_INFO" ])
265
e3aa8728
FDN
266AC_ARG_WITH([defaultadmgroup],
267 [ --with-defaultadmgroup=GROUP
268 define PAM group. Users part of this group will be
269 allowed to configure kronosnet. Others will only
270 receive read-only rights. ],
271 [ DEFAULTADMGROUP="$withval" ],
272 [ DEFAULTADMGROUP="kronosnetadm" ])
273
99afbd6e
FDN
274## random vars
275LOGDIR=${localstatedir}/log/
276RUNDIR=${localstatedir}/run/
afce19e1 277DEFAULT_CONFIG_DIR=${sysconfdir}/kronosnet
99afbd6e
FDN
278
279## do subst
280
4fc6106b 281AM_CONDITIONAL([BUILD_DOCS], [test "x${enable_publicandocs}" = xyes])
fa8c7f32 282AM_CONDITIONAL([DEBUG], [test "x${enable_debug}" = xyes])
c8ed20e0 283
afce19e1 284AC_SUBST([DEFAULT_CONFIG_DIR])
2e687dd8 285AC_SUBST([INITDEFAULTDIR])
0472de45
FDN
286AC_SUBST([INITDDIR])
287AC_SUBST([SYSTEMDDIR])
b386f39b 288AC_SUBST([LOGDIR])
2e687dd8 289AC_SUBST([DEFAULTADMGROUP])
0472de45 290
4fc6106b
FDN
291AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_DIR],
292 ["$(eval echo ${DEFAULT_CONFIG_DIR})"],
afce19e1
FDN
293 [Default config directory])
294
295AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_FILE],
4fc6106b 296 ["$(eval echo ${DEFAULT_CONFIG_DIR}/kronosnetd.conf)"],
99afbd6e
FDN
297 [Default config file])
298
4fc6106b
FDN
299AC_DEFINE_UNQUOTED([LOGDIR],
300 ["$(eval echo ${LOGDIR})"],
99afbd6e
FDN
301 [Default logging directory])
302
2d022f7f 303AC_DEFINE_UNQUOTED([DEFAULT_LOG_FILE],
4fc6106b 304 ["$(eval echo ${LOGDIR}/kronosnetd.log)"],
2d022f7f
FDN
305 [Default log file])
306
4fc6106b
FDN
307AC_DEFINE_UNQUOTED([RUNDIR],
308 ["$(eval echo ${RUNDIR})"],
99afbd6e
FDN
309 [Default run directory])
310
4fc6106b
FDN
311AC_DEFINE_UNQUOTED([SYSLOGFACILITY],
312 [$(eval echo ${SYSLOGFACILITY})],
99afbd6e
FDN
313 [Default syslog facility])
314
4fc6106b
FDN
315AC_DEFINE_UNQUOTED([SYSLOGLEVEL],
316 [$(eval echo ${SYSLOGLEVEL})],
99afbd6e
FDN
317 [Default syslog level])
318
4fc6106b
FDN
319AC_DEFINE_UNQUOTED([DEFAULTADMGROUP],
320 ["$(eval echo ${DEFAULTADMGROUP})"],
e3aa8728
FDN
321 [Default admin group])
322
99afbd6e
FDN
323## *FLAGS handling
324ENV_CFLAGS="$CFLAGS"
325ENV_CPPFLAGS="$CPPFLAGS"
326ENV_LDFLAGS="$LDFLAGS"
327
328# debug build stuff
329if test "x${enable_debug}" = xyes; then
330 AC_DEFINE_UNQUOTED([DEBUG], [1], [Compiling Debugging code])
331 OPT_CFLAGS="-O0"
332else
333 OPT_CFLAGS="-O3"
334fi
335
336# gdb flags
337if test "x${GCC}" = xyes; then
338 GDB_FLAGS="-ggdb3"
339else
340 GDB_FLAGS="-g"
341fi
342
343# extra warnings
344EXTRA_WARNINGS=""
345
346WARNLIST="
347 all
0dbd680b
MJ
348 extra
349 unused
99afbd6e
FDN
350 shadow
351 missing-prototypes
352 missing-declarations
0dbd680b
MJ
353 suggest-attribute=noreturn
354 suggest-attribute=format
99afbd6e
FDN
355 strict-prototypes
356 declaration-after-statement
357 pointer-arith
358 write-strings
359 cast-align
360 bad-function-cast
361 missing-format-attribute
0dbd680b 362 float-equal
99afbd6e 363 format=2
fb2cc79f 364 format-signedness
99afbd6e
FDN
365 format-security
366 format-nonliteral
367 no-long-long
368 unsigned-char
369 gnu89-inline
370 no-strict-aliasing
371 error
ade3159b
FDN
372 address
373 cpp
ade3159b
FDN
374 overflow
375 parentheses
376 sequence-point
377 switch
0dbd680b
MJ
378 shift-overflow=2
379 overlength-strings
380 retundent-decls
381 init-self
ade3159b
FDN
382 uninitialized
383 unused-but-set-variable
384 unused-function
385 unused-result
386 unused-value
387 unused-variable
0dbd680b
MJ
388 unknown-pragmas
389 no-unused-parameter
99afbd6e
FDN
390 "
391
392for j in $WARNLIST; do
393 if cc_supports_flag -W$j; then
394 EXTRA_WARNINGS="$EXTRA_WARNINGS -W$j";
395 fi
396done
397
ae9ebb47 398CFLAGS="$ENV_CFLAGS $lt_prog_compiler_pic $OPT_CFLAGS $GDB_FLAGS \
99afbd6e
FDN
399 $EXTRA_WARNINGS $WERROR_CFLAGS"
400CPPFLAGS="$ENV_CPPFLAGS"
e3c019fd 401LDFLAGS="$ENV_LDFLAGS $lt_prog_compiler_pic -Wl,--as-needed"
99afbd6e 402
19ceca42
FDN
403AC_CONFIG_FILES([
404 Makefile
0472de45 405 init/Makefile
5d4a4eec
FDN
406 libtap/Makefile
407 libtap/libtap.pc
4aa63ad7 408 kronosnetd/Makefile
b386f39b 409 kronosnetd/kronosnetd.logrotate
10244a3f
FS
410 libknet/Makefile
411 libknet/libknet.pc
a86247e6 412 libknet/tests/Makefile
19ceca42 413 docs/Makefile
7368d54c 414 poc-code/Makefile
77213908 415 poc-code/iov-hash/Makefile
712dee58 416 poc-code/access-list/Makefile
19ceca42 417 ])
99afbd6e
FDN
418
419AC_OUTPUT