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