Blob


1 AC_INIT([kamid-portable], [0.1], [kamid@omarpolo.com], [],
2 [https://kamid.omarpolo.com])
3 AC_CONFIG_AUX_DIR(etc)
4 AC_CONFIG_LIBOBJ_DIR(compat)
5 AM_INIT_AUTOMAKE([foreign subdir-objects])
7 KAMID_RELEASE=No
9 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
10 AC_SUBST(VERSION)
11 AC_SUBST(KAMID_RELEASE)
13 AC_CANONICAL_HOST
15 # When CFLAGS isn't set at this stage and gcc is detected by the macro below,
16 # autoconf will automatically use CFLAGS="-O2 -g". Prevent that by using an
17 # empty default.
18 : ${CFLAGS=""}
20 # Save user CPPFLAGS, CFLAGS and LDFLAGS. We need to change them because
21 # AC_CHECK_HEADER doesn't give us any other way to update the include
22 # paths. But for Makefile.am we want to use AM_CPPFLAGS and friends.
23 SAVED_CFLAGS="$CFLAGS"
24 SAVED_CPPFLAGS="$CPPFLAGS"
25 SAVED_LDFLAGS="$LDFLAGS"
27 # Checks for programs.
28 AC_PROG_CC
29 AC_PROG_CPP
30 AC_PROG_INSTALL
31 AC_PROG_LN_S
32 AC_PROG_MAKE_SET
33 AC_PROG_YACC
34 PKG_PROG_PKG_CONFIG
35 AC_USE_SYSTEM_EXTENSIONS
37 # Some functions can be in libbsd. Thanks to lldpb for the inspiration :)
38 AC_ARG_WITH([libbsd],
39 AS_HELP_STRING([--with-libbsd], [Use libbsd @<:@default=auto@:>@]),
40 [],
41 [with_libbsd=auto])
42 if test x"$with_libbsd" != x"no"; then
43 PKG_CHECK_MODULES([libbsd], [libbsd-overlay libbsd-ctor], [
44 _save_AM_CFLAGS="$AM_CFLAGS"
45 _save_LIBS="$LIBS"
46 AM_CFLAGS="$AM_CFLAGS $libbsd_CFLAGS"
47 LIBS="$LIBS $libbsd_LIBS"
48 ], [
49 if test x"$with_libbsd" = x"yes"; then
50 AC_MSG_FAILURE([*** no libbsd support found])
51 fi
52 with_libbsd=no
53 ])
54 fi
56 # Checks for library functions.
57 AC_SEARCH_LIBS([arc4random], [],
58 [AC_DEFINE([HAVE_ARC4RANDOM], 1, [arc4random])],
59 [AC_DEFINE([HAVE_ARC4RANDOM], 0, [arc4random])])
61 AC_REPLACE_FUNCS([
62 asprintf \
63 err \
64 freezero \
65 getdtablecount \
66 getdtablesize \
67 getprogname \
68 memmem \
69 recallocarray \
70 setproctitle \
71 setprogname \
72 strlcat \
73 strlcpy \
74 strsep \
75 strtonum \
76 vis \
77 ])
79 AC_MSG_CHECKING([for sys/queue.h with TAILQ_FOREACH_SAFE and STAILQ_ENTRY])
80 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
81 #include <sys/queue.h>
82 #include <stddef.h>
83 ], [
84 TAILQ_HEAD(tailhead, entry) head;
85 struct entry {
86 TAILQ_ENTRY(entry) entries;
87 } *np, *nt;
88 TAILQ_INIT(&head);
89 TAILQ_FOREACH_SAFE(np, &head, entries, nt) {
90 /* nop */ ;
91 }
93 STAILQ_HEAD(listhead, qentry) qhead = STAILQ_HEAD_INITIALIZER(qhead);
94 struct qentry {
95 STAILQ_ENTRY(qentry) entries;
96 } foo;
98 return 0;
99 ])], [
100 AC_MSG_RESULT(yes)
101 AC_DEFINE([HAVE_QUEUE_H], 1, [QUEUE_H])
102 ], AC_MSG_RESULT(no))
104 AC_CHECK_HEADERS([sys/tree.h])
106 AC_CHECK_DECL(PR_SET_NAME, AC_DEFINE([HAVE_PR_SET_NAME], 1, [pr_set_name]), [],
107 [[#include <sys/prctl.h>]])
109 AC_CHECK_LIB([crypto], [RAND_add], [], [
110 AC_MSG_ERROR([requires openssl])
111 ])
113 AC_CHECK_LIB(tls, tls_init, [], [
114 AC_MSG_ERROR([requires libtls])
115 ])
117 AS_CASE([$host_os],
118 [*openbsd*], [AC_CHECK_LIB([event], [event_init], [],
119 [AC_MSG_ERROR([requires libevent])])],
120 [PKG_CHECK_MODULES([libevent2], [libevent_core >= 2],
122 AC_DEFINE([HAVE_EVENT2], 1, [1 if using event2])
123 AM_CFLAGS="$libevent2_CFLAGS $AM_CFLAGS"
124 LIBS="$libevent2_LIBS $LIBS"
125 ], [AC_MSG_ERROR([requires libevent])])])
127 AC_CHECK_LIB(util, imsg_init, [], [
128 AC_LIBOBJ(fmt_scaled)
129 AC_LIBOBJ(imsg)
130 AC_LIBOBJ(imsg-buffer)
131 AC_LIBOBJ(ohash)
132 ])
134 # Save our CFLAGS/CPPFLAGS/LDFLAGS for the Makefile and restore the old user
135 # variables.
136 AC_SUBST(AM_CPPFLAGS)
137 CPPFLAGS="$SAVED_CPPFLAGS"
138 AC_SUBST(AM_CFLAGS)
139 CFLAGS="$SAVED_CFLAGS"
140 AC_SUBST(AM_LDFLAGS)
141 LDFLAGS="$SAVED_LDFLAGS"
143 AC_CONFIG_HEADERS([config.h])
144 AC_CONFIG_FILES([
145 Makefile
146 kamictl/Makefile
147 kamid/Makefile
148 kamiftp/Makefile
149 kamirepl/Makefile
150 ninepscript/Makefile
151 ])
153 AC_OUTPUT