]> git.proxmox.com Git - mirror_kronosnet.git/blob - configure.ac
Merge pull request #78 from kronosnet/docs
[mirror_kronosnet.git] / configure.ac
1 #
2 # Copyright (C) 2010-2017 Red Hat, Inc. All rights reserved.
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
10 # -*- Autoconf -*-
11 # Process this file with autoconf to produce a configure script.
12 #
13
14 AC_PREREQ([2.63])
15 AC_INIT([kronosnet],
16 m4_esyscmd([build-aux/git-version-gen .tarball-version]),
17 [devel@lists.kronosnet.org])
18 AC_USE_SYSTEM_EXTENSIONS
19 AM_INIT_AUTOMAKE([1.13 dist-bzip2 dist-xz color-tests -Wno-portability subdir-objects])
20 LT_PREREQ([2.2.6])
21 LT_INIT
22
23 AC_CONFIG_MACRO_DIR([m4])
24 AC_CONFIG_SRCDIR([kronosnetd/main.c])
25 AC_CONFIG_HEADERS([config.h])
26
27 AC_CANONICAL_HOST
28 AC_PROG_LIBTOOL
29
30 AC_LANG([C])
31
32 systemddir=${prefix}/lib/systemd/system
33
34 if 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
42 if test "$systemddir" = "NONE/lib/systemd/system"; then
43 systemddir=/lib/systemd/system
44 fi
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
52 fi
53
54 AC_PROG_AWK
55 AC_PROG_GREP
56 AC_PROG_SED
57 AC_PROG_CPP
58 AC_PROG_CC
59 AC_PROG_CC_C99
60 if test "x$ac_cv_prog_cc_c99" = "xno"; then
61 AC_MSG_ERROR(["C99 support is required"])
62 fi
63 AC_PROG_LN_S
64 AC_PROG_INSTALL
65 AC_PROG_MAKE_SET
66 PKG_PROG_PKG_CONFIG
67 AC_CHECK_PROGS([DOXYGEN], [doxygen])
68 AC_CHECK_PROGS([DOXY2MAN], [doxy2man])
69
70 manpageupdates=1
71 if test "x$DOXYGEN" = "x" || test "x$DOXY2MAN" = "x"; then
72 manpageupdates=0;
73 fi
74
75 AM_CONDITIONAL([MANPAGEUPDATES], [test $manpageupdates -gt 0])
76
77 AC_CHECK_PROGS([VALGRIND_EXEC], [valgrind])
78 AM_CONDITIONAL([HAS_VALGRIND], [test x$VALGRIND_EXEC != "x"])
79
80 AC_ARG_ENABLE([libknet-sctp],
81 [ --disable-libknet-sctp : disable libknet SCTP support ],,
82 [ enable_libknet_sctp="yes" ])
83 AM_CONDITIONAL([BUILDSCTP], [test x$enable_libknet_sctp = xyes])
84
85 AC_ARG_ENABLE([crypto-all],
86 [ --disable-crypto-all : disable libknet all crypto modules support ],,
87 [ enable_crypto_all="yes" ])
88
89 AC_ARG_ENABLE([crypto-nss],
90 [ --disable-crypto-nss : disable libknet nss support ],,
91 [ enable_crypto_nss="$enable_crypto_all" ])
92 AM_CONDITIONAL([BUILDCRYPTONSS], [test x$enable_crypto_nss = xyes])
93
94 AC_ARG_ENABLE([crypto-openssl],
95 [ --disable-crypto-openssl : disable libknet openssl support ],,
96 [ enable_crypto_openssl="$enable_crypto_all" ])
97 AM_CONDITIONAL([BUILDCRYPTOOPENSSL], [test x$enable_crypto_openssl = xyes])
98
99 AC_ARG_ENABLE([compress-all],
100 [ --disable-compress-all : disable libknet all compress modules support ],,
101 [ enable_compress_all="yes" ])
102
103 AC_ARG_ENABLE([compress-zlib],
104 [ --disable-compress-zlib : disable libknet zlib support ],,
105 [ enable_compress_zlib="$enable_compress_all" ])
106 AM_CONDITIONAL([BUILDCOMPZLIB], [test x$enable_compress_zlib = xyes])
107
108 AC_ARG_ENABLE([compress-lz4],
109 [ --disable-compress-lz4 : disable libknet lz4 support ],,
110 [ enable_compress_lz4="$enable_compress_all" ])
111 AM_CONDITIONAL([BUILDCOMPLZ4], [test x$enable_compress_lz4 = xyes])
112
113 AC_ARG_ENABLE([compress-lzo2],
114 [ --disable-compress-lzo2 : disable libknet lzo2 support ],,
115 [ enable_compress_lzo2="$enable_compress_all" ])
116 AM_CONDITIONAL([BUILDCOMPLZO2], [test x$enable_compress_lzo2 = xyes])
117
118 AC_ARG_ENABLE([compress-lzma],
119 [ --disable-compress-lzma : disable libknet lzma support ],,
120 [ enable_compress_lzma="$enable_compress_all" ])
121 AM_CONDITIONAL([BUILDCOMPLZMA], [test x$enable_compress_lzma = xyes])
122
123 AC_ARG_ENABLE([compress-bzip2],
124 [ --disable-compress-bzip2 : disable libknet bzip2 support ],,
125 [ enable_compress_bzip2="$enable_compress_all" ])
126 AM_CONDITIONAL([BUILDCOMPBZIP2], [test x$enable_compress_bzip2 = xyes])
127
128 AC_ARG_ENABLE([poc],
129 [ --enable-poc : enable building poc code ],,
130 [ enable_poc="no" ])
131 AM_CONDITIONAL([BUILD_POC], [test x$enable_poc = xyes])
132
133 AC_ARG_ENABLE([kronosnetd],
134 [ --enable-kronosnetd : Kronosnetd support ],,
135 [ enable_kronosnetd="no" ])
136 AM_CONDITIONAL([BUILD_KRONOSNETD], [test x$enable_kronosnetd = xyes])
137
138 AC_ARG_ENABLE([runautogen],
139 [ --enable-runautogen : run autogen.sh ],,
140 [ enable_runautogen="no" ])
141 AM_CONDITIONAL([BUILD_RUNAUTOGEN], [test x$enable_runautogen = xyes])
142
143 AC_ARG_ENABLE([libtap],
144 [ --enable-libtap : libtap support ],,
145 [ enable_libtap="no" ])
146
147 if test "x$enable_kronosnetd" = xyes; then
148 enable_libtap=yes
149 fi
150 AM_CONDITIONAL([BUILD_LIBTAP], [test x$enable_libtap = xyes])
151
152 ## local helper functions
153 # this function checks if CC support options passed as
154 # args. Global CFLAGS are ignored during this test.
155 cc_supports_flag() {
156 saveCPPFLAGS="$CPPFLAGS"
157 CPPFLAGS="$@"
158 if echo $CC | grep -q clang; then
159 CPPFLAGS="-Werror $CPPFLAGS"
160 fi
161 AC_MSG_CHECKING([whether $CC supports "$@"])
162 AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])],
163 [RC=0; AC_MSG_RESULT([yes])],
164 [RC=1; AC_MSG_RESULT([no])])
165 CPPFLAGS="$saveCPPFLAGS"
166 return $RC
167 }
168
169 # helper macro to check libs without adding them to LIBS
170 check_lib_no_libs() {
171 lib_no_libs_arg1=$1
172 shift
173 lib_no_libs_arg2=$1
174 shift
175 lib_no_libs_args=$@
176 AC_CHECK_LIB([$lib_no_libs_arg1],
177 [$lib_no_libs_arg2],,,
178 [$lib_no_libs_args])
179 LIBS=$ac_check_lib_save_LIBS
180 }
181
182 # Checks for C features
183 AC_C_INLINE
184
185 # Checks for libraries.
186 AC_CHECK_LIB([pthread], [pthread_create], [AC_SUBST([pthread_LIBS], [-lpthread])], [AC_MSG_ERROR([kronosnet requires pthread library])])
187 AC_CHECK_LIB([m], [ceil], [AC_SUBST([m_LIBS], [-lm])], [AC_MSG_ERROR([kronosnet requires m library])])
188 AC_CHECK_LIB([rt], [clock_gettime], [AC_SUBST([rt_LIBS], [-lrt])], [AC_MSG_ERROR([kronosnet requires rt library])])
189
190 AC_SEARCH_LIBS([dlopen], [dl dld], [dllibs=$ac_res], [AC_MSG_ERROR([kronosnet requires dl library])])
191
192 if test "x$dllibs" != "xnone required"; then
193 AC_SUBST([dl_LIBS], [$dllibs])
194 fi
195
196 # OS detection
197
198 AC_MSG_CHECKING([for os in ${host_os}])
199 case "$host_os" in
200 *linux*)
201 AC_DEFINE_UNQUOTED([KNET_LINUX], [1], [Compiling for Linux platform])
202 AC_MSG_RESULT([Linux])
203 ;;
204 *bsd*)
205 AC_DEFINE_UNQUOTED([KNET_BSD], [1], [Compiling for BSD platform])
206 AC_MSG_RESULT([BSD])
207 if test "x$enable_libtap" = xyes; then
208 AC_MSG_ERROR([libtap is not currently supported on BSD platforms])
209 fi
210 ;;
211 *)
212 AC_MSG_ERROR([Unsupported OS? hmmmm])
213 ;;
214 esac
215
216 # crypto libraries checks
217 if test "x$enable_crypto_nss" = xyes; then
218 PKG_CHECK_MODULES([nss],[nss])
219 AC_DEFINE_UNQUOTED([BUILDCRYPTONSS], [1], [Enable nss crypto])
220 fi
221
222 if test "x$enable_crypto_openssl" = xyes; then
223 PKG_CHECK_MODULES([openssl],[openssl < 1.1],
224 [AC_DEFINE_UNQUOTED([BUILDCRYPTOOPENSSL10], [1], [openssl 1.0 crypto])],
225 [PKG_CHECK_MODULES([openssl],[openssl >= 1.1],
226 [AC_DEFINE_UNQUOTED([BUILDCRYPTOOPENSSL11], [1], [openssl 1.1 crypto])])])
227 AC_DEFINE_UNQUOTED([BUILDCRYPTOOPENSSL], [1], [Enable openssl crypto])
228 fi
229
230 # compress libraries checks
231 if test "x$enable_compress_zlib" = xyes; then
232 PKG_CHECK_MODULES([zlib], [zlib])
233 AC_DEFINE_UNQUOTED([BUILDCOMPZLIB], [1], [Enable zlib compression])
234 fi
235 if test "x$enable_compress_lz4" = xyes; then
236 PKG_CHECK_MODULES([liblz4], [liblz4])
237 AC_DEFINE_UNQUOTED([BUILDCOMPLZ4], [1], [Enable lz4 compress])
238 fi
239 if test "x$enable_compress_lzo2" = xyes; then
240 PKG_CHECK_MODULES([lzo2], [lzo2],,
241 [AC_CHECK_HEADERS([lzo/lzo1x.h],
242 [AC_CHECK_LIB([lzo2], [lzo1x_decompress_safe],
243 [AC_SUBST([lzo2_LIBS], [-llzo2])])],
244 [AC_MSG_ERROR(["missing required lzo/lzo1x.h header"])])])
245 AC_DEFINE_UNQUOTED([BUILDCOMPLZO2], [1], [Enable lzo2 compress])
246 fi
247 if test "x$enable_compress_lzma" = xyes; then
248 PKG_CHECK_MODULES([liblzma], [liblzma])
249 AC_DEFINE_UNQUOTED([BUILDCOMPLZMA], [1], [Enable lzma compress])
250 fi
251 if test "x$enable_compress_bzip2" = xyes; then
252 PKG_CHECK_MODULES([bzip2], [bzip2],,
253 [AC_CHECK_HEADERS([bzlib.h],
254 [AC_CHECK_LIB([bz2], [BZ2_bzBuffToBuffCompress],
255 [AC_SUBST([bzip2_LIBS], [-lbz2])])],
256 [AC_MSG_ERROR(["missing required bzlib.h"])])])
257 AC_DEFINE_UNQUOTED([BUILDCOMPBZIP2], [1], [Enable bzip2 compress])
258 fi
259
260 # Checks for header files.
261 AC_CHECK_HEADERS([fcntl.h])
262 AC_CHECK_HEADERS([stdlib.h])
263 AC_CHECK_HEADERS([string.h])
264 AC_CHECK_HEADERS([strings.h])
265 AC_CHECK_HEADERS([sys/ioctl.h])
266 AC_CHECK_HEADERS([syslog.h])
267 AC_CHECK_HEADERS([unistd.h])
268 AC_CHECK_HEADERS([netinet/in.h])
269 AC_CHECK_HEADERS([sys/socket.h])
270 AC_CHECK_HEADERS([arpa/inet.h])
271 AC_CHECK_HEADERS([netdb.h])
272 AC_CHECK_HEADERS([limits.h])
273 AC_CHECK_HEADERS([stdint.h])
274 AC_CHECK_HEADERS([sys/epoll.h])
275
276 if test "x$enable_libknet_sctp" = xyes; then
277 AC_CHECK_HEADERS([netinet/sctp.h],, [AC_MSG_ERROR(["missing required SCTP headers"])])
278 fi
279
280 # Checks for typedefs, structures, and compiler characteristics.
281 AC_C_INLINE
282 AC_TYPE_SIZE_T
283 AC_TYPE_PID_T
284 AC_TYPE_SSIZE_T
285 AC_TYPE_UINT8_T
286 AC_TYPE_UINT16_T
287 AC_TYPE_UINT32_T
288 AC_TYPE_UINT64_T
289 AC_TYPE_INT32_T
290
291 # Checks for library functions.
292 AC_FUNC_ALLOCA
293 AC_FUNC_FORK
294 AC_FUNC_MALLOC
295 AC_FUNC_REALLOC
296 AC_CHECK_FUNCS([memset])
297 AC_CHECK_FUNCS([strdup])
298 AC_CHECK_FUNCS([strerror])
299 AC_CHECK_FUNCS([dup2])
300 AC_CHECK_FUNCS([select])
301 AC_CHECK_FUNCS([socket])
302 AC_CHECK_FUNCS([inet_ntoa])
303 AC_CHECK_FUNCS([memmove])
304 AC_CHECK_FUNCS([strchr])
305 AC_CHECK_FUNCS([atexit])
306 AC_CHECK_FUNCS([ftruncate])
307 AC_CHECK_FUNCS([strrchr])
308 AC_CHECK_FUNCS([strstr])
309 AC_CHECK_FUNCS([clock_gettime])
310 AC_CHECK_FUNCS([strcasecmp])
311 AC_CHECK_FUNCS([kevent])
312 # if neither sys/epoll.h nor kevent are present, we should fail.
313
314 if test "x$ac_cv_header_sys_epoll_h" = xno && test "x$ac_cv_func_kevent" = xno; then
315 AC_MSG_ERROR([Both epoll and kevent unavailable on this OS])
316 fi
317
318 if test "x$ac_cv_header_sys_epoll_h" = xyes && test "x$ac_cv_func_kevent" = xyes; then
319 AC_MSG_ERROR([Both epoll and kevent available on this OS, please contact the maintainers to fix the code])
320 fi
321
322 # checks (for kronosnetd)
323 if test "x$enable_kronosnetd" = xyes; then
324 AC_CHECK_HEADERS([security/pam_appl.h],
325 [AC_CHECK_LIB([pam], [pam_start])],
326 [AC_MSG_ERROR([Unable to find LinuxPAM devel files])])
327
328 AC_CHECK_HEADERS([security/pam_misc.h],
329 [AC_CHECK_LIB([pam_misc], [misc_conv])],
330 [AC_MSG_ERROR([Unable to find LinuxPAM MISC devel files])])
331
332 PKG_CHECK_MODULES([libqb], [libqb])
333
334 AC_CHECK_LIB([qb], [qb_log_thread_priority_set],
335 [have_qb_log_thread_priority_set="yes"],
336 [have_qb_log_thread_priority_set="no"])
337 if test "x${have_qb_log_thread_priority_set}" = xyes; then
338 AC_DEFINE_UNQUOTED([HAVE_QB_LOG_THREAD_PRIORITY_SET], [1], [have qb_log_thread_priority_set])
339 fi
340 fi
341
342 # local options
343 AC_ARG_ENABLE([debug],
344 [ --enable-debug enable debug build. ],
345 [ default="no" ])
346
347 AC_ARG_WITH([initdefaultdir],
348 [ --with-initdefaultdir : path to /etc/sysconfig/.. or /etc/default dir. ],
349 [ INITDEFAULTDIR="$withval" ],
350 [ INITDEFAULTDIR="$sysconfdir/default" ])
351
352 AC_ARG_WITH([initddir],
353 [ --with-initddir=DIR : path to init script directory. ],
354 [ INITDDIR="$withval" ],
355 [ INITDDIR="$sysconfdir/init.d" ])
356
357 AC_ARG_WITH([systemddir],
358 [ --with-systemddir=DIR : path to systemd unit files directory. ],
359 [ SYSTEMDDIR="$withval" ],
360 [ SYSTEMDDIR="$systemddir" ])
361
362 AC_ARG_WITH([syslogfacility],
363 [ --with-syslogfacility=FACILITY
364 default syslog facility. ],
365 [ SYSLOGFACILITY="$withval" ],
366 [ SYSLOGFACILITY="LOG_DAEMON" ])
367
368 AC_ARG_WITH([sysloglevel],
369 [ --with-sysloglevel=LEVEL
370 default syslog level. ],
371 [ SYSLOGLEVEL="$withval" ],
372 [ SYSLOGLEVEL="LOG_INFO" ])
373
374 AC_ARG_WITH([defaultadmgroup],
375 [ --with-defaultadmgroup=GROUP
376 define PAM group. Users part of this group will be
377 allowed to configure kronosnet. Others will only
378 receive read-only rights. ],
379 [ DEFAULTADMGROUP="$withval" ],
380 [ DEFAULTADMGROUP="kronosnetadm" ])
381
382 ## random vars
383 LOGDIR=${localstatedir}/log/
384 RUNDIR=${localstatedir}/run/
385 DEFAULT_CONFIG_DIR=${sysconfdir}/kronosnet
386
387 ## do subst
388
389 AM_CONDITIONAL([DEBUG], [test "x${enable_debug}" = xyes])
390
391 AC_SUBST([DEFAULT_CONFIG_DIR])
392 AC_SUBST([INITDEFAULTDIR])
393 AC_SUBST([INITDDIR])
394 AC_SUBST([SYSTEMDDIR])
395 AC_SUBST([LOGDIR])
396 AC_SUBST([DEFAULTADMGROUP])
397
398 AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_DIR],
399 ["$(eval echo ${DEFAULT_CONFIG_DIR})"],
400 [Default config directory])
401
402 AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_FILE],
403 ["$(eval echo ${DEFAULT_CONFIG_DIR}/kronosnetd.conf)"],
404 [Default config file])
405
406 AC_DEFINE_UNQUOTED([LOGDIR],
407 ["$(eval echo ${LOGDIR})"],
408 [Default logging directory])
409
410 AC_DEFINE_UNQUOTED([DEFAULT_LOG_FILE],
411 ["$(eval echo ${LOGDIR}/kronosnetd.log)"],
412 [Default log file])
413
414 AC_DEFINE_UNQUOTED([RUNDIR],
415 ["$(eval echo ${RUNDIR})"],
416 [Default run directory])
417
418 AC_DEFINE_UNQUOTED([SYSLOGFACILITY],
419 [$(eval echo ${SYSLOGFACILITY})],
420 [Default syslog facility])
421
422 AC_DEFINE_UNQUOTED([SYSLOGLEVEL],
423 [$(eval echo ${SYSLOGLEVEL})],
424 [Default syslog level])
425
426 AC_DEFINE_UNQUOTED([DEFAULTADMGROUP],
427 ["$(eval echo ${DEFAULTADMGROUP})"],
428 [Default admin group])
429
430 ## *FLAGS handling
431 ENV_CFLAGS="$CFLAGS"
432 ENV_CPPFLAGS="$CPPFLAGS"
433 ENV_LDFLAGS="$LDFLAGS"
434
435 # debug build stuff
436 if test "x${enable_debug}" = xyes; then
437 AC_DEFINE_UNQUOTED([DEBUG], [1], [Compiling Debugging code])
438 OPT_CFLAGS="-O0"
439 else
440 OPT_CFLAGS="-O3"
441 fi
442
443 # gdb flags
444 if test "x${GCC}" = xyes; then
445 GDB_FLAGS="-ggdb3"
446 else
447 GDB_FLAGS="-g"
448 fi
449
450 # extra warnings
451 EXTRA_WARNINGS=""
452
453 WARNLIST="
454 all
455 extra
456 unused
457 shadow
458 missing-prototypes
459 missing-declarations
460 suggest-attribute=noreturn
461 suggest-attribute=format
462 strict-prototypes
463 declaration-after-statement
464 pointer-arith
465 write-strings
466 cast-align
467 bad-function-cast
468 missing-format-attribute
469 float-equal
470 format=2
471 format-signedness
472 format-security
473 format-nonliteral
474 no-long-long
475 unsigned-char
476 gnu89-inline
477 no-strict-aliasing
478 error
479 address
480 cpp
481 overflow
482 parentheses
483 sequence-point
484 switch
485 shift-overflow=2
486 overlength-strings
487 retundent-decls
488 init-self
489 uninitialized
490 unused-but-set-variable
491 unused-function
492 unused-result
493 unused-value
494 unused-variable
495 unknown-pragmas
496 no-unused-parameter
497 "
498
499 for j in $WARNLIST; do
500 if cc_supports_flag -W$j; then
501 EXTRA_WARNINGS="$EXTRA_WARNINGS -W$j";
502 fi
503 done
504
505 CFLAGS="$ENV_CFLAGS $lt_prog_compiler_pic $OPT_CFLAGS $GDB_FLAGS \
506 $EXTRA_WARNINGS $WERROR_CFLAGS"
507 CPPFLAGS="$ENV_CPPFLAGS"
508 LDFLAGS="$ENV_LDFLAGS $lt_prog_compiler_pic -Wl,--as-needed"
509
510 AC_CONFIG_FILES([
511 Makefile
512 init/Makefile
513 libtap/Makefile
514 libtap/libtap.pc
515 kronosnetd/Makefile
516 kronosnetd/kronosnetd.logrotate
517 libknet/Makefile
518 libknet/libknet.pc
519 libknet/tests/Makefile
520 libknet/man/Doxyfile
521 libknet/man/Makefile
522 poc-code/Makefile
523 poc-code/iov-hash/Makefile
524 poc-code/access-list/Makefile
525 ])
526
527 AC_OUTPUT