]>
Commit | Line | Data |
---|---|---|
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 | |
14 | AC_PREREQ([2.63]) | |
07072a06 FDN |
15 | AC_INIT([kronosnet], |
16 | m4_esyscmd([build-aux/git-version-gen .tarball-version]), | |
17 | [devel@lists.kronosnet.org]) | |
4359cb72 | 18 | AC_USE_SYSTEM_EXTENSIONS |
762c0098 | 19 | AM_INIT_AUTOMAKE([1.11.1 dist-bzip2 dist-xz color-tests -Wno-portability subdir-objects]) |
99afbd6e FDN |
20 | LT_PREREQ([2.2.6]) |
21 | LT_INIT | |
22 | ||
23 | AC_CONFIG_MACRO_DIR([m4]) | |
4aa63ad7 | 24 | AC_CONFIG_SRCDIR([kronosnetd/main.c]) |
99afbd6e FDN |
25 | AC_CONFIG_HEADERS([config.h]) |
26 | ||
27 | AC_CANONICAL_HOST | |
28 | AC_PROG_LIBTOOL | |
29 | ||
30 | AC_LANG([C]) | |
31 | ||
905cb809 FDN |
32 | systemddir=${prefix}/lib/systemd/system |
33 | ||
99afbd6e FDN |
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 | |
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 |
52 | fi |
53 | ||
54 | # Checks for programs. | |
55 | if ! ${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 | 57 | fi |
ae9ebb47 | 58 | |
5842a2f9 | 59 | AC_PROG_AWK |
e3683ec7 FDN |
60 | AC_PROG_GREP |
61 | AC_PROG_SED | |
5842a2f9 | 62 | AC_PROG_CPP |
99afbd6e | 63 | AC_PROG_CC |
dd8bbbde FDN |
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 | |
99afbd6e FDN |
68 | AC_PROG_LN_S |
69 | AC_PROG_INSTALL | |
70 | AC_PROG_MAKE_SET | |
71 | AC_PROG_CXX | |
72 | AC_PROG_RANLIB | |
b8bf8c7f | 73 | AC_CHECK_PROGS([PUBLICAN], [publican], [:]) |
99afbd6e FDN |
74 | AC_CHECK_PROGS([PKGCONFIG], [pkg-config]) |
75 | ||
1c75eb10 | 76 | AC_ARG_ENABLE([poc], |
136ef4c1 | 77 | [ --disable-poc : avoid building poc code ],, |
1c75eb10 | 78 | [ enable_poc="yes" ]) |
5449d795 | 79 | AM_CONDITIONAL([BUILD_POC], [test x$enable_poc = xyes]) |
1c75eb10 | 80 | |
ace7cd0e CC |
81 | AC_ARG_ENABLE([kronosnetd], |
82 | [ --enable-kronosnetd : Kronosnetd support ],, | |
83 | [ enable_kronosnetd="no" ]) | |
5449d795 | 84 | AM_CONDITIONAL([BUILD_KRONOSNETD], [test x$enable_kronosnetd = xyes]) |
ace7cd0e CC |
85 | |
86 | AC_ARG_ENABLE([libtap], | |
87 | [ --enable-libtap : libtap support ],, | |
88 | [ enable_libtap="no" ]) | |
58b997ce CC |
89 | |
90 | if test "x$enable_kronosnetd" = xyes; then | |
91 | enable_libtap=yes | |
92 | fi | |
5449d795 | 93 | AM_CONDITIONAL([BUILD_LIBTAP], [test x$enable_libtap = xyes]) |
ace7cd0e | 94 | |
d75f2295 | 95 | AC_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. | |
102 | cc_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 | |
117 | check_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 |
130 | AC_C_INLINE | |
131 | ||
99afbd6e | 132 | # Checks for libraries. |
a5d43036 | 133 | AC_CHECK_LIB([pthread], [pthread_create]) |
e9d8f3c2 | 134 | AC_CHECK_LIB([m], [ceil]) |
df5fcdba | 135 | AC_CHECK_LIB([rt], [clock_gettime]) |
99afbd6e | 136 | |
2052faab | 137 | # crypto libraries checks |
56407f26 | 138 | PKG_CHECK_MODULES([nss],[nss]) |
56407f26 | 139 | |
2052faab FDN |
140 | # compress libraries checks |
141 | # zlib is cheap because it's pulled in by nss | |
142 | PKG_CHECK_MODULES([zlib], [zlib]) | |
b9bc9d38 | 143 | PKG_CHECK_MODULES([liblz4], [liblz4]) |
2052faab | 144 | |
99afbd6e | 145 | # Checks for header files. |
bba2a8d7 FDN |
146 | AC_CHECK_HEADERS([fcntl.h]) |
147 | AC_CHECK_HEADERS([stdlib.h]) | |
148 | AC_CHECK_HEADERS([string.h]) | |
5842a2f9 | 149 | AC_CHECK_HEADERS([strings.h]) |
bba2a8d7 FDN |
150 | AC_CHECK_HEADERS([sys/ioctl.h]) |
151 | AC_CHECK_HEADERS([syslog.h]) | |
152 | AC_CHECK_HEADERS([unistd.h]) | |
6d727d3c FDN |
153 | AC_CHECK_HEADERS([netinet/in.h]) |
154 | AC_CHECK_HEADERS([sys/socket.h]) | |
c3776828 | 155 | AC_CHECK_HEADERS([arpa/inet.h]) |
521b047e | 156 | AC_CHECK_HEADERS([netdb.h]) |
ba6bc349 | 157 | AC_CHECK_HEADERS([limits.h]) |
5842a2f9 | 158 | AC_CHECK_HEADERS([stdint.h]) |
3a50d466 | 159 | AC_CHECK_HEADERS([sys/epoll.h]) |
d75f2295 FDN |
160 | |
161 | if test "x$enable_libknet_sctp" = xyes; then | |
5449d795 | 162 | AC_CHECK_HEADERS([netinet/sctp.h],, AC_MSG_ERROR(["missing required SCTP headers"])) |
d75f2295 | 163 | fi |
99afbd6e FDN |
164 | |
165 | # Checks for typedefs, structures, and compiler characteristics. | |
5842a2f9 | 166 | AC_C_INLINE |
bba2a8d7 | 167 | AC_TYPE_SIZE_T |
6d727d3c | 168 | AC_TYPE_PID_T |
c3776828 | 169 | AC_TYPE_SSIZE_T |
31f37826 | 170 | AC_TYPE_UINT8_T |
c3776828 FDN |
171 | AC_TYPE_UINT16_T |
172 | AC_TYPE_UINT32_T | |
efc95595 FDN |
173 | AC_TYPE_UINT64_T |
174 | AC_TYPE_INT32_T | |
99afbd6e FDN |
175 | |
176 | # Checks for library functions. | |
6d727d3c FDN |
177 | AC_FUNC_ALLOCA |
178 | AC_FUNC_FORK | |
179 | AC_FUNC_MALLOC | |
180 | AC_FUNC_REALLOC | |
bba2a8d7 FDN |
181 | AC_CHECK_FUNCS([memset]) |
182 | AC_CHECK_FUNCS([strdup]) | |
183 | AC_CHECK_FUNCS([strerror]) | |
6d727d3c FDN |
184 | AC_CHECK_FUNCS([dup2]) |
185 | AC_CHECK_FUNCS([select]) | |
186 | AC_CHECK_FUNCS([socket]) | |
31f37826 FDN |
187 | AC_CHECK_FUNCS([inet_ntoa]) |
188 | AC_CHECK_FUNCS([memmove]) | |
189 | AC_CHECK_FUNCS([strchr]) | |
bc5fdb83 FDN |
190 | AC_CHECK_FUNCS([atexit]) |
191 | AC_CHECK_FUNCS([ftruncate]) | |
7a00930f FDN |
192 | AC_CHECK_FUNCS([strrchr]) |
193 | AC_CHECK_FUNCS([strstr]) | |
ba6bc349 | 194 | AC_CHECK_FUNCS([clock_gettime]) |
efc95595 | 195 | AC_CHECK_FUNCS([strcasecmp]) |
f762bb6e | 196 | AC_CHECK_FUNCS([kevent]) |
3a50d466 FDN |
197 | # if neither sys/epoll.h nor kevent are present, we should fail. |
198 | ||
199 | if 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]) | |
201 | fi | |
202 | ||
203 | if 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]) | |
205 | fi | |
71fd62d6 | 206 | |
fa8c7f32 | 207 | # checks (for kronosnetd) |
ace7cd0e | 208 | if test "x$enable_kronosnetd" = xyes; then |
e311acaa | 209 | |
38cb1bb7 FDN |
210 | AC_CHECK_HEADERS([security/pam_appl.h], |
211 | [AC_CHECK_LIB([pam], [pam_start])], | |
212 | [AC_MSG_ERROR([Unable to find LinuxPAM devel files])]) | |
213 | ||
214 | AC_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 |
218 | PKG_CHECK_MODULES([libqb], [libqb]) |
219 | ||
220 | AC_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 | ||
224 | if 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 |
226 | fi |
227 | ||
ace7cd0e | 228 | fi |
38cb1bb7 | 229 | |
99afbd6e FDN |
230 | # local options |
231 | AC_ARG_ENABLE([debug], | |
232 | [ --enable-debug enable debug build. ], | |
233 | [ default="no" ]) | |
234 | ||
c8ed20e0 FDN |
235 | AC_ARG_ENABLE([publicandocs], |
236 | [ --enable-publicandocs enable docs build. ], | |
237 | [ default="no" ]) | |
238 | ||
2e687dd8 FDN |
239 | AC_ARG_WITH([initdefaultdir], |
240 | [ --with-initdefaultdir : path to /etc/sysconfig/.. or /etc/default dir. ], | |
241 | [ INITDEFAULTDIR="$withval" ], | |
242 | [ INITDEFAULTDIR="$sysconfdir/default" ]) | |
243 | ||
0472de45 FDN |
244 | AC_ARG_WITH([initddir], |
245 | [ --with-initddir=DIR : path to init script directory. ], | |
246 | [ INITDDIR="$withval" ], | |
247 | [ INITDDIR="$sysconfdir/init.d" ]) | |
248 | ||
249 | AC_ARG_WITH([systemddir], | |
250 | [ --with-systemddir=DIR : path to systemd unit files directory. ], | |
251 | [ SYSTEMDDIR="$withval" ], | |
905cb809 | 252 | [ SYSTEMDDIR="$systemddir" ]) |
0472de45 | 253 | |
99afbd6e | 254 | AC_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 | |
260 | AC_ARG_WITH([sysloglevel], | |
e3aa8728 | 261 | [ --with-sysloglevel=LEVEL |
99afbd6e FDN |
262 | default syslog level. ], |
263 | [ SYSLOGLEVEL="$withval" ], | |
264 | [ SYSLOGLEVEL="LOG_INFO" ]) | |
265 | ||
e3aa8728 FDN |
266 | AC_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 |
275 | LOGDIR=${localstatedir}/log/ | |
276 | RUNDIR=${localstatedir}/run/ | |
afce19e1 | 277 | DEFAULT_CONFIG_DIR=${sysconfdir}/kronosnet |
99afbd6e FDN |
278 | |
279 | ## do subst | |
280 | ||
4fc6106b | 281 | AM_CONDITIONAL([BUILD_DOCS], [test "x${enable_publicandocs}" = xyes]) |
fa8c7f32 | 282 | AM_CONDITIONAL([DEBUG], [test "x${enable_debug}" = xyes]) |
c8ed20e0 | 283 | |
afce19e1 | 284 | AC_SUBST([DEFAULT_CONFIG_DIR]) |
2e687dd8 | 285 | AC_SUBST([INITDEFAULTDIR]) |
0472de45 FDN |
286 | AC_SUBST([INITDDIR]) |
287 | AC_SUBST([SYSTEMDDIR]) | |
b386f39b | 288 | AC_SUBST([LOGDIR]) |
2e687dd8 | 289 | AC_SUBST([DEFAULTADMGROUP]) |
0472de45 | 290 | |
4fc6106b FDN |
291 | AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_DIR], |
292 | ["$(eval echo ${DEFAULT_CONFIG_DIR})"], | |
afce19e1 FDN |
293 | [Default config directory]) |
294 | ||
295 | AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_FILE], | |
4fc6106b | 296 | ["$(eval echo ${DEFAULT_CONFIG_DIR}/kronosnetd.conf)"], |
99afbd6e FDN |
297 | [Default config file]) |
298 | ||
4fc6106b FDN |
299 | AC_DEFINE_UNQUOTED([LOGDIR], |
300 | ["$(eval echo ${LOGDIR})"], | |
99afbd6e FDN |
301 | [Default logging directory]) |
302 | ||
2d022f7f | 303 | AC_DEFINE_UNQUOTED([DEFAULT_LOG_FILE], |
4fc6106b | 304 | ["$(eval echo ${LOGDIR}/kronosnetd.log)"], |
2d022f7f FDN |
305 | [Default log file]) |
306 | ||
4fc6106b FDN |
307 | AC_DEFINE_UNQUOTED([RUNDIR], |
308 | ["$(eval echo ${RUNDIR})"], | |
99afbd6e FDN |
309 | [Default run directory]) |
310 | ||
4fc6106b FDN |
311 | AC_DEFINE_UNQUOTED([SYSLOGFACILITY], |
312 | [$(eval echo ${SYSLOGFACILITY})], | |
99afbd6e FDN |
313 | [Default syslog facility]) |
314 | ||
4fc6106b FDN |
315 | AC_DEFINE_UNQUOTED([SYSLOGLEVEL], |
316 | [$(eval echo ${SYSLOGLEVEL})], | |
99afbd6e FDN |
317 | [Default syslog level]) |
318 | ||
4fc6106b FDN |
319 | AC_DEFINE_UNQUOTED([DEFAULTADMGROUP], |
320 | ["$(eval echo ${DEFAULTADMGROUP})"], | |
e3aa8728 FDN |
321 | [Default admin group]) |
322 | ||
99afbd6e FDN |
323 | ## *FLAGS handling |
324 | ENV_CFLAGS="$CFLAGS" | |
325 | ENV_CPPFLAGS="$CPPFLAGS" | |
326 | ENV_LDFLAGS="$LDFLAGS" | |
327 | ||
328 | # debug build stuff | |
329 | if test "x${enable_debug}" = xyes; then | |
330 | AC_DEFINE_UNQUOTED([DEBUG], [1], [Compiling Debugging code]) | |
331 | OPT_CFLAGS="-O0" | |
332 | else | |
333 | OPT_CFLAGS="-O3" | |
334 | fi | |
335 | ||
336 | # gdb flags | |
337 | if test "x${GCC}" = xyes; then | |
338 | GDB_FLAGS="-ggdb3" | |
339 | else | |
340 | GDB_FLAGS="-g" | |
341 | fi | |
342 | ||
343 | # extra warnings | |
344 | EXTRA_WARNINGS="" | |
345 | ||
346 | WARNLIST=" | |
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 | ||
392 | for j in $WARNLIST; do | |
393 | if cc_supports_flag -W$j; then | |
394 | EXTRA_WARNINGS="$EXTRA_WARNINGS -W$j"; | |
395 | fi | |
396 | done | |
397 | ||
ae9ebb47 | 398 | CFLAGS="$ENV_CFLAGS $lt_prog_compiler_pic $OPT_CFLAGS $GDB_FLAGS \ |
99afbd6e FDN |
399 | $EXTRA_WARNINGS $WERROR_CFLAGS" |
400 | CPPFLAGS="$ENV_CPPFLAGS" | |
e3c019fd | 401 | LDFLAGS="$ENV_LDFLAGS $lt_prog_compiler_pic -Wl,--as-needed" |
99afbd6e | 402 | |
19ceca42 FDN |
403 | AC_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 | |
419 | AC_OUTPUT |