]> git.proxmox.com Git - mirror_kronosnet.git/blob - configure.ac
[tests] mark array as static
[mirror_kronosnet.git] / configure.ac
1 #
2 # Copyright (C) 2010-2019 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+
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 .gitarchivever]),
17 [devel@lists.kronosnet.org])
18 # Don't let AC_PROC_CC (invoked by AC_USE_SYSTEM_EXTENSIONS) replace
19 # undefined CFLAGS with -g -O2, overriding our special OPT_CFLAGS.
20 : ${CFLAGS=""}
21 AC_USE_SYSTEM_EXTENSIONS
22 AM_INIT_AUTOMAKE([1.13 dist-bzip2 dist-xz color-tests -Wno-portability subdir-objects])
23
24 LT_PREREQ([2.2.6])
25 # --enable-new-dtags: Use RUNPATH instead of RPATH.
26 # It is necessary to have this done before libtool does linker detection.
27 # See also: https://github.com/kronosnet/kronosnet/issues/107
28 # --as-needed: Modern systems have builtin ceil() making -lm superfluous but
29 # AC_SEARCH_LIBS can't detect this because it tests with a false prototype
30 AX_CHECK_LINK_FLAG([-Wl,--enable-new-dtags],
31 [AM_LDFLAGS=-Wl,--enable-new-dtags],
32 [AC_MSG_ERROR(["Linker support for --enable-new-dtags is required"])])
33 AX_CHECK_LINK_FLAG([-Wl,--as-needed], [AM_LDFLAGS="$AM_LDFLAGS -Wl,--as-needed"])
34
35 AC_SUBST([AM_LDFLAGS])
36 saved_LDFLAGS="$LDFLAGS"
37 LDFLAGS="$AM_LDFLAGS $LDFLAGS"
38 LT_INIT
39 LDFLAGS="$saved_LDFLAGS"
40
41 AC_CONFIG_MACRO_DIR([m4])
42 AC_CONFIG_SRCDIR([kronosnetd/main.c])
43 AC_CONFIG_HEADERS([config.h])
44
45 AC_CANONICAL_HOST
46
47 AC_LANG([C])
48
49 systemddir=${prefix}/lib/systemd/system
50
51 if test "$prefix" = "NONE"; then
52 prefix="/usr"
53 if test "$localstatedir" = "\${prefix}/var"; then
54 localstatedir="/var"
55 fi
56 if test "$sysconfdir" = "\${prefix}/etc"; then
57 sysconfdir="/etc"
58 fi
59 if test "$systemddir" = "NONE/lib/systemd/system"; then
60 systemddir=/lib/systemd/system
61 fi
62 if test "$libdir" = "\${exec_prefix}/lib"; then
63 if test -e /usr/lib64; then
64 libdir="/usr/lib64"
65 else
66 libdir="/usr/lib"
67 fi
68 fi
69 fi
70
71 AC_PROG_AWK
72 AC_PROG_GREP
73 AC_PROG_SED
74 AC_PROG_CPP
75 AC_PROG_CC
76 AC_PROG_CC_C99
77 if test "x$ac_cv_prog_cc_c99" = "xno"; then
78 AC_MSG_ERROR(["C99 support is required"])
79 fi
80 AC_PROG_LN_S
81 AC_PROG_INSTALL
82 AC_PROG_MAKE_SET
83 PKG_PROG_PKG_CONFIG
84
85 AC_CHECK_PROGS([VALGRIND_EXEC], [valgrind])
86 AM_CONDITIONAL([HAS_VALGRIND], [test x$VALGRIND_EXEC != "x"])
87
88 AC_CHECK_PROGS([COVBUILD_EXEC], [cov-build])
89 AM_CONDITIONAL([HAS_COVBUILD], [test x$COVBUILD_EXEC != "x"])
90
91 AC_CHECK_PROGS([COVANALYZE_EXEC], [cov-analyze])
92 AM_CONDITIONAL([HAS_COVANALYZE], [test x$COVANALYZE_EXEC != "x"])
93
94 AC_CHECK_PROGS([COVFORMATERRORS_EXEC], [cov-format-errors])
95 AM_CONDITIONAL([HAS_COVFORMATERRORS], [test x$COVFORMATERRORS_EXEC != "x"])
96
97 # KNET_OPTION_DEFINES(stem,type,detection code)
98 # stem: enters name of option, Automake conditional and preprocessor define
99 # type: compress or crypto, determines where the default comes from
100 AC_DEFUN([KNET_OPTION_DEFINES],[
101 AC_ARG_ENABLE([$2-$1],[AS_HELP_STRING([--disable-$2-$1],[disable libknet $1 support])],,
102 [enable_$2_$1="$enable_$2_all"])
103 AM_CONDITIONAL([BUILD_]m4_toupper([$2_$1]),[test "x$enable_$2_$1" = xyes])
104 if test "x$enable_$2_$1" = xyes; then
105 $3
106 fi
107 AC_DEFINE_UNQUOTED([WITH_]m4_toupper([$2_$1]), [`test "x$enable_$2_$1" != xyes; echo $?`], $1 $2 [built in])
108 ])
109
110 AC_ARG_ENABLE([man],
111 [AS_HELP_STRING([--disable-man],[disable man page creation])],,
112 [ enable_man="yes" ])
113 AM_CONDITIONAL([BUILD_MAN], [test x$enable_man = xyes])
114
115 AC_ARG_ENABLE([libknet-sctp],
116 [AS_HELP_STRING([--disable-libknet-sctp],[disable libknet SCTP support])],,
117 [ enable_libknet_sctp="yes" ])
118 AM_CONDITIONAL([BUILD_SCTP], [test x$enable_libknet_sctp = xyes])
119
120 AC_ARG_ENABLE([crypto-all],
121 [AS_HELP_STRING([--disable-crypto-all],[disable libknet all crypto modules support])],,
122 [ enable_crypto_all="yes" ])
123
124 KNET_OPTION_DEFINES([nss],[crypto],[PKG_CHECK_MODULES([nss], [nss])])
125 KNET_OPTION_DEFINES([openssl],[crypto],[PKG_CHECK_MODULES([openssl],[libcrypto])])
126
127 AC_ARG_ENABLE([compress-all],
128 [AS_HELP_STRING([--disable-compress-all],[disable libknet all compress modules support])],,
129 [ enable_compress_all="yes" ])
130
131 KNET_OPTION_DEFINES([zstd],[compress],[PKG_CHECK_MODULES([libzstd], [libzstd])])
132 KNET_OPTION_DEFINES([zlib],[compress],[PKG_CHECK_MODULES([zlib], [zlib])])
133 KNET_OPTION_DEFINES([lz4],[compress],[PKG_CHECK_MODULES([liblz4], [liblz4])])
134 KNET_OPTION_DEFINES([lzo2],[compress],[
135 PKG_CHECK_MODULES([lzo2], [lzo2],
136 [# work around broken pkg-config file in v2.10
137 AC_SUBST([lzo2_CFLAGS],[`echo $lzo2_CFLAGS | sed 's,/lzo *, ,'`])],
138 [AC_CHECK_HEADERS([lzo/lzo1x.h],
139 [AC_CHECK_LIB([lzo2], [lzo1x_decompress_safe],
140 [AC_SUBST([lzo2_LIBS], [-llzo2])])],
141 [AC_MSG_ERROR(["missing required lzo/lzo1x.h header"])])])
142 ])
143 KNET_OPTION_DEFINES([lzma],[compress],[PKG_CHECK_MODULES([liblzma], [liblzma])])
144 KNET_OPTION_DEFINES([bzip2],[compress],[
145 PKG_CHECK_MODULES([bzip2], [bzip2],,
146 [AC_CHECK_HEADERS([bzlib.h],
147 [AC_CHECK_LIB([bz2], [BZ2_bzBuffToBuffCompress],
148 [AC_SUBST([bzip2_LIBS], [-lbz2])])],
149 [AC_MSG_ERROR(["missing required bzlib.h"])])])
150 ])
151
152 AC_ARG_ENABLE([install-tests],
153 [AS_HELP_STRING([--enable-install-tests],[install tests])],,
154 [ enable_install_tests="no" ])
155 AM_CONDITIONAL([INSTALL_TESTS], [test x$enable_install_tests = xyes])
156
157 AC_ARG_ENABLE([poc],
158 [AS_HELP_STRING([--enable-poc],[enable building poc code])],,
159 [ enable_poc="no" ])
160 AM_CONDITIONAL([BUILD_POC], [test x$enable_poc = xyes])
161
162 AC_ARG_ENABLE([kronosnetd],
163 [AS_HELP_STRING([--enable-kronosnetd],[Kronosnetd support])],,
164 [ enable_kronosnetd="no" ])
165 AM_CONDITIONAL([BUILD_KRONOSNETD], [test x$enable_kronosnetd = xyes])
166
167 AC_ARG_ENABLE([runautogen],
168 [AS_HELP_STRING([--enable-runautogen],[run autogen.sh])],,
169 [ enable_runautogen="no" ])
170 AM_CONDITIONAL([BUILD_RUNAUTOGEN], [test x$enable_runautogen = xyes])
171
172 override_rpm_debuginfo_option="yes"
173 AC_ARG_ENABLE([rpm-debuginfo],
174 [AS_HELP_STRING([--enable-rpm-debuginfo],[build debuginfo packages])],,
175 [ enable_rpm_debuginfo="no", override_rpm_debuginfo_option="no" ])
176 AM_CONDITIONAL([BUILD_RPM_DEBUGINFO], [test x$enable_rpm_debuginfo = xyes])
177 AM_CONDITIONAL([OVERRIDE_RPM_DEBUGINFO], [test x$override_rpm_debuginfo_option = xyes])
178
179 AC_ARG_ENABLE([libnozzle],
180 [AS_HELP_STRING([--enable-libnozzle],[libnozzle support])],,
181 [ enable_libnozzle="yes" ])
182
183 if test "x$enable_kronosnetd" = xyes; then
184 enable_libnozzle=yes
185 fi
186 AM_CONDITIONAL([BUILD_LIBNOZZLE], [test x$enable_libnozzle = xyes])
187
188 # Checks for libraries.
189 AX_PTHREAD(,[AC_MSG_ERROR([POSIX threads support is required])])
190 saved_LIBS="$LIBS"
191 LIBS=
192 AC_SEARCH_LIBS([ceil], [m], , [AC_MSG_ERROR([ceil not found])])
193 AC_SUBST([m_LIBS], [$LIBS])
194 LIBS=
195 AC_SEARCH_LIBS([clock_gettime], [rt], , [AC_MSG_ERROR([clock_gettime not found])])
196 AC_SUBST([rt_LIBS], [$LIBS])
197 LIBS=
198 AC_SEARCH_LIBS([dlopen], [dl dld], , [AC_MSG_ERROR([dlopen not found])])
199 AC_SUBST([dl_LIBS], [$LIBS])
200 LIBS="$saved_LIBS"
201
202 # Check RTLD_DI_ORIGIN (not decalred by musl. glibc has it as an enum so cannot use ifdef)
203 AC_CHECK_DECL([RTLD_DI_ORIGIN], [AC_DEFINE([HAVE_RTLD_DI_ORIGIN], 1,
204 [define when RTLD_DI_ORIGIN is declared])], ,[[#include <dlfcn.h>]])
205
206 # OS detection
207
208 AC_MSG_CHECKING([for os in ${host_os}])
209 case "$host_os" in
210 *linux*)
211 AC_DEFINE_UNQUOTED([KNET_LINUX], [1], [Compiling for Linux platform])
212 AC_MSG_RESULT([Linux])
213 ;;
214 *bsd*)
215 AC_DEFINE_UNQUOTED([KNET_BSD], [1], [Compiling for BSD platform])
216 AC_MSG_RESULT([BSD])
217 ;;
218 *)
219 AC_MSG_ERROR([Unsupported OS? hmmmm])
220 ;;
221 esac
222
223 # Checks for header files.
224 AC_CHECK_HEADERS([sys/epoll.h])
225 AC_CHECK_FUNCS([kevent])
226 # if neither sys/epoll.h nor kevent are present, we should fail.
227
228 if test "x$ac_cv_header_sys_epoll_h" = xno && test "x$ac_cv_func_kevent" = xno; then
229 AC_MSG_ERROR([Both epoll and kevent unavailable on this OS])
230 fi
231
232 if test "x$ac_cv_header_sys_epoll_h" = xyes && test "x$ac_cv_func_kevent" = xyes; then
233 AC_MSG_ERROR([Both epoll and kevent available on this OS, please contact the maintainers to fix the code])
234 fi
235
236 if test "x$enable_libknet_sctp" = xyes; then
237 AC_CHECK_HEADERS([netinet/sctp.h],, [AC_MSG_ERROR(["missing required SCTP headers"])])
238 fi
239
240 # Checks for typedefs, structures, and compiler characteristics.
241 AC_C_INLINE
242 AC_TYPE_PID_T
243 AC_TYPE_SIZE_T
244 AC_TYPE_SSIZE_T
245 AC_TYPE_UINT8_T
246 AC_TYPE_UINT16_T
247 AC_TYPE_UINT32_T
248 AC_TYPE_UINT64_T
249 AC_TYPE_INT8_T
250 AC_TYPE_INT16_T
251 AC_TYPE_INT32_T
252 AC_TYPE_INT64_T
253
254 if test "x$enable_man" = "xyes"; then
255 AC_ARG_VAR([DOXYGEN], [override doxygen executable])
256 AC_CHECK_PROGS([DOXYGEN], [doxygen], [no])
257 if test "x$DOXYGEN" = xno; then
258 AC_MSG_ERROR(["Doxygen command not found"])
259 fi
260 # required by doxyxml to build man pages dynamically
261 # Don't let AC_PROC_CC (invoked by AX_PROG_CC_FOR_BUILD) replace
262 # undefined CFLAGS_FOR_BUILD with -g -O2, overriding our special OPT_CFLAGS.
263 : ${CFLAGS_FOR_BUILD=""}
264 AX_PROG_CC_FOR_BUILD
265 saved_PKG_CONFIG="$PKG_CONFIG"
266 saved_ac_cv_path_PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
267 unset PKG_CONFIG ac_cv_path_PKG_CONFIG
268 AC_PATH_PROG([PKG_CONFIG], [pkg-config])
269 PKG_CHECK_MODULES([libqb_BUILD], [libqb])
270 PKG_CHECK_MODULES([libxml_BUILD], [libxml-2.0])
271 PKG_CONFIG="$saved_PKG_CONFIG"
272 ac_cv_path_PKG_CONFIG="$saved_ac_cv_path_PKG_CONFIG"
273 fi
274
275 # checks for libnozzle
276 if test "x$enable_libnozzle" = xyes; then
277 if `echo $host_os | grep -q linux`; then
278 PKG_CHECK_MODULES([libnl], [libnl-3.0])
279 PKG_CHECK_MODULES([libnlroute], [libnl-route-3.0 >= 3.3], [],
280 [PKG_CHECK_MODULES([libnlroute], [libnl-route-3.0 < 3.3],
281 [AC_DEFINE_UNQUOTED([LIBNL3_WORKAROUND], [1], [Enable libnl < 3.3 build workaround])], [])])
282 fi
283 fi
284
285 # checks for kronosnetd
286 if test "x$enable_kronosnetd" = xyes; then
287 AC_CHECK_HEADERS([security/pam_appl.h],
288 [AC_CHECK_LIB([pam], [pam_start],
289 [AC_SUBST([pam_LIBS], [-lpam])],
290 [AC_MSG_ERROR([Unable to find LinuxPAM devel files])])])
291
292 AC_CHECK_HEADERS([security/pam_misc.h],
293 [AC_CHECK_LIB([pam_misc], [misc_conv],
294 [AC_SUBST([pam_misc_LIBS], [-lpam_misc])],
295 [AC_MSG_ERROR([Unable to find LinuxPAM MISC devel files])])])
296
297 PKG_CHECK_MODULES([libqb], [libqb])
298
299 AC_CHECK_LIB([qb], [qb_log_thread_priority_set],
300 [have_qb_log_thread_priority_set="yes"],
301 [have_qb_log_thread_priority_set="no"])
302 if test "x${have_qb_log_thread_priority_set}" = xyes; then
303 AC_DEFINE_UNQUOTED([HAVE_QB_LOG_THREAD_PRIORITY_SET], [1], [have qb_log_thread_priority_set])
304 fi
305 fi
306
307 # local options
308 AC_ARG_ENABLE([debug],
309 [AS_HELP_STRING([--enable-debug],[enable debug build])])
310
311 AC_ARG_WITH([sanitizers],
312 [AS_HELP_STRING([--with-sanitizers=...,...],
313 [enable SANitizer build, do *NOT* use for production. Only ASAN/UBSAN/TSAN are currently supported])],
314 [ SANITIZERS="$withval" ],
315 [ SANITIZERS="" ])
316
317 AC_ARG_WITH([testdir],
318 [AS_HELP_STRING([--with-testdir=DIR],[path to /usr/lib../kronosnet/tests/ dir where to install the test suite])],
319 [ TESTDIR="$withval" ],
320 [ TESTDIR="$libdir/kronosnet/tests" ])
321
322 AC_ARG_WITH([initdefaultdir],
323 [AS_HELP_STRING([--with-initdefaultdir=DIR],[path to /etc/sysconfig or /etc/default dir])],
324 [ INITDEFAULTDIR="$withval" ],
325 [ INITDEFAULTDIR="$sysconfdir/default" ])
326
327 AC_ARG_WITH([initddir],
328 [AS_HELP_STRING([--with-initddir=DIR],[path to init script directory])],
329 [ INITDDIR="$withval" ],
330 [ INITDDIR="$sysconfdir/init.d" ])
331
332 AC_ARG_WITH([systemddir],
333 [AS_HELP_STRING([--with-systemddir=DIR],[path to systemd unit files directory])],
334 [ SYSTEMDDIR="$withval" ],
335 [ SYSTEMDDIR="$systemddir" ])
336
337 AC_ARG_WITH([syslogfacility],
338 [AS_HELP_STRING([--with-syslogfacility=FACILITY],[default syslog facility])],
339 [ SYSLOGFACILITY="$withval" ],
340 [ SYSLOGFACILITY="LOG_DAEMON" ])
341
342 AC_ARG_WITH([sysloglevel],
343 [AS_HELP_STRING([--with-sysloglevel=LEVEL],[default syslog level])],
344 [ SYSLOGLEVEL="$withval" ],
345 [ SYSLOGLEVEL="LOG_INFO" ])
346
347 AC_ARG_WITH([defaultadmgroup],
348 [AS_HELP_STRING([--with-defaultadmgroup=GROUP],
349 [define PAM group. Users part of this group will be allowed to configure
350 kronosnet. Others will only receive read-only rights.])],
351 [ DEFAULTADMGROUP="$withval" ],
352 [ DEFAULTADMGROUP="kronosnetadm" ])
353
354 ## random vars
355 LOGDIR=${localstatedir}/log/
356 RUNDIR=${localstatedir}/run/
357 DEFAULT_CONFIG_DIR=${sysconfdir}/kronosnet
358
359 ## do subst
360
361 AC_SUBST([TESTDIR])
362 AC_SUBST([DEFAULT_CONFIG_DIR])
363 AC_SUBST([INITDEFAULTDIR])
364 AC_SUBST([INITDDIR])
365 AC_SUBST([SYSTEMDDIR])
366 AC_SUBST([LOGDIR])
367 AC_SUBST([DEFAULTADMGROUP])
368
369 AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_DIR],
370 ["$(eval echo ${DEFAULT_CONFIG_DIR})"],
371 [Default config directory])
372
373 AC_DEFINE_UNQUOTED([DEFAULT_CONFIG_FILE],
374 ["$(eval echo ${DEFAULT_CONFIG_DIR}/kronosnetd.conf)"],
375 [Default config file])
376
377 AC_DEFINE_UNQUOTED([LOGDIR],
378 ["$(eval echo ${LOGDIR})"],
379 [Default logging directory])
380
381 AC_DEFINE_UNQUOTED([DEFAULT_LOG_FILE],
382 ["$(eval echo ${LOGDIR}/kronosnetd.log)"],
383 [Default log file])
384
385 AC_DEFINE_UNQUOTED([RUNDIR],
386 ["$(eval echo ${RUNDIR})"],
387 [Default run directory])
388
389 AC_DEFINE_UNQUOTED([SYSLOGFACILITY],
390 [$(eval echo ${SYSLOGFACILITY})],
391 [Default syslog facility])
392
393 AC_DEFINE_UNQUOTED([SYSLOGLEVEL],
394 [$(eval echo ${SYSLOGLEVEL})],
395 [Default syslog level])
396
397 AC_DEFINE_UNQUOTED([DEFAULTADMGROUP],
398 ["$(eval echo ${DEFAULTADMGROUP})"],
399 [Default admin group])
400
401 # debug build stuff
402 if test "x${enable_debug}" = xyes; then
403 AC_DEFINE_UNQUOTED([DEBUG], [1], [Compiling Debugging code])
404 OPT_CFLAGS="-O0"
405 else
406 OPT_CFLAGS="-O3"
407 fi
408
409 # gdb flags
410 if test "x${GCC}" = xyes; then
411 GDB_FLAGS="-ggdb3"
412 else
413 GDB_FLAGS="-g"
414 fi
415
416 # --- ASAN/UBSAN/TSAN (see man gcc) ---
417 # when using SANitizers, we need to pass the -fsanitize..
418 # to both CFLAGS and LDFLAGS. The CFLAGS/LDFLAGS must be
419 # specified as first in the list or there will be runtime
420 # issues (for example user has to LD_PRELOAD asan for it to work
421 # properly).
422
423 if test -n "${SANITIZERS}"; then
424 SANITIZERS=$(echo $SANITIZERS | sed -e 's/,/ /g')
425 for SANITIZER in $SANITIZERS; do
426 case $SANITIZER in
427 asan|ASAN)
428 SANITIZERS_CFLAGS="$SANITIZERS_CFLAGS -fsanitize=address"
429 SANITIZERS_LDFLAGS="$SANITIZERS_LDFLAGS -fsanitize=address -lasan"
430 AC_CHECK_LIB([asan],[main],,AC_MSG_ERROR([Unable to find libasan]))
431 ;;
432 ubsan|UBSAN)
433 SANITIZERS_CFLAGS="$SANITIZERS_CFLAGS -fsanitize=undefined"
434 SANITIZERS_LDFLAGS="$SANITIZERS_LDFLAGS -fsanitize=undefined -lubsan"
435 AC_CHECK_LIB([ubsan],[main],,AC_MSG_ERROR([Unable to find libubsan]))
436 ;;
437 tsan|TSAN)
438 SANITIZERS_CFLAGS="$SANITIZERS_CFLAGS -fsanitize=thread"
439 SANITIZERS_LDFLAGS="$SANITIZERS_LDFLAGS -fsanitize=thread -ltsan"
440 AC_CHECK_LIB([tsan],[main],,AC_MSG_ERROR([Unable to find libtsan]))
441 ;;
442 esac
443 done
444 fi
445
446 DEFAULT_CFLAGS="-Werror -Wall -Wextra"
447
448 # manual overrides
449 # generates too much noise for stub APIs
450 UNWANTED_CFLAGS="-Wno-unused-parameter"
451
452 AC_SUBST([AM_CFLAGS],["$SANITIZERS_CFLAGS $OPT_CFLAGS $GDB_FLAGS $DEFAULT_CFLAGS $UNWANTED_CFLAGS"])
453 LDFLAGS="$SANITIZERS_LDFLAGS $LDFLAGS"
454
455 AX_PROG_DATE
456 AS_IF([test "$ax_cv_prog_date_gnu_date:$ax_cv_prog_date_gnu_utc" = yes:yes],
457 [UTC_DATE_AT="date -u -d@"],
458 [AS_IF([test "x$ax_cv_prog_date_bsd_date" = xyes],
459 [UTC_DATE_AT="date -u -r"],
460 [AC_MSG_ERROR([date utility unable to convert epoch to UTC])])])
461 AC_SUBST([UTC_DATE_AT])
462
463 AC_ARG_VAR([SOURCE_EPOCH],[last modification date of the source])
464 AC_MSG_NOTICE([trying to determine source epoch])
465 AC_MSG_CHECKING([for source epoch in \$SOURCE_EPOCH])
466 AS_IF([test -n "$SOURCE_EPOCH"],
467 [AC_MSG_RESULT([yes])],
468 [AC_MSG_RESULT([no])
469 AC_MSG_CHECKING([for source epoch in source_epoch file])
470 AS_IF([test -e "$srcdir/source_epoch"],
471 [read SOURCE_EPOCH <"$srcdir/source_epoch"
472 AC_MSG_RESULT([yes])],
473 [AC_MSG_RESULT([no])
474 AC_MSG_CHECKING([for source epoch baked in by gitattributes export-subst])
475 SOURCE_EPOCH='$Format:%at$' # template for rewriting by git-archive
476 AS_CASE([$SOURCE_EPOCH],
477 [?Format:*], # was not rewritten
478 [AC_MSG_RESULT([no])
479 AC_MSG_CHECKING([for source epoch in \$SOURCE_DATE_EPOCH])
480 AS_IF([test "x$SOURCE_DATE_EPOCH" != x],
481 [SOURCE_EPOCH="$SOURCE_DATE_EPOCH"
482 AC_MSG_RESULT([yes])],
483 [AC_MSG_RESULT([no])
484 AC_MSG_CHECKING([whether git log can provide a source epoch])
485 SOURCE_EPOCH=f${SOURCE_EPOCH#\$F} # convert into git log --pretty format
486 SOURCE_EPOCH=$(cd "$srcdir" && git log -1 --pretty=${SOURCE_EPOCH%$} 2>/dev/null)
487 AS_IF([test -n "$SOURCE_EPOCH"],
488 [AC_MSG_RESULT([yes])],
489 [AC_MSG_RESULT([no, using current time and breaking reproducibility])
490 SOURCE_EPOCH=$(date +%s)])])],
491 [AC_MSG_RESULT([yes])]
492 )])
493 ])
494 AC_MSG_NOTICE([using source epoch $($UTC_DATE_AT$SOURCE_EPOCH +'%F %T %Z')])
495
496 AC_CONFIG_FILES([
497 Makefile
498 init/Makefile
499 libnozzle/Makefile
500 libnozzle/libnozzle.pc
501 libnozzle/tests/Makefile
502 kronosnetd/Makefile
503 kronosnetd/kronosnetd.logrotate
504 libknet/Makefile
505 libknet/libknet.pc
506 libknet/tests/Makefile
507 man/Makefile
508 man/Doxyfile-knet
509 man/Doxyfile-nozzle
510 poc-code/Makefile
511 poc-code/iov-hash/Makefile
512 ])
513
514 if test "x$VERSION" = "xUNKNOWN"; then
515 AC_MSG_ERROR([m4_text_wrap([
516 configure was unable to determine the source tree's current version. This
517 generally happens when using git archive (or the github download button)
518 generated tarball/zip file. In order to workaround this issue, either use git
519 clone https://github.com/kronosnet/kronosnet.git or use an official release
520 tarball, available at https://kronosnet.org/releases/. Alternatively you
521 can add a compatible version in a .tarball-version file at the top of the
522 source tree, wipe your autom4te.cache dir and generated configure, and rerun
523 autogen.sh.
524 ], [ ], [ ], [76])])
525 fi
526
527 AC_OUTPUT