Blob


1 AC_INIT([kamid], [0.1], [kamid@omarpolo.com], [kamid], [gemini://kamid.omarpolo.com])
2 AC_CONFIG_LIBOBJ_DIR(compat)
3 AC_CANONICAL_HOST
4 AM_INIT_AUTOMAKE([-Wall foreign subdir-objects])
5 AC_PROG_CC
6 AC_USE_SYSTEM_EXTENSIONS
7 AC_PROG_YACC
9 PKG_PROG_PKG_CONFIG
11 # Some functions can be in libbsd. Thanks to lldpb for the inspiration :)
12 AC_ARG_WITH([libbsd],
13 AS_HELP_STRING([--with-libbsd], [Use libbsd @<:@default=auto@:>@]),
14 [],
15 [with_libbsd=auto])
16 if test x"$with_libbsd" != x"no"; then
17 PKG_CHECK_MODULES([libbsd], [libbsd-overlay libbsd-ctor], [
18 _save_AM_CFLAGS="$AM_CFLAGS"
19 _save_LIBS="$LIBS"
20 AM_CFLAGS="$AM_CFLAGS $libbsd_CFLAGS"
21 LIBS="$LIBS $libbsd_LIBS"
22 AC_MSG_CHECKING([if libbsd can be linked correctly])
23 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
24 @%:@include <sys/time.h>
25 @%:@include <sys/types.h>
26 ]], [[]])],[
27 AC_MSG_RESULT(yes)
28 AM_CFLAGS="$AM_CFLAGS $libbsd_CFLAGS"
29 AM_LDFLAGS="$AM_LDFLAGS $libbsd_LIBS"
30 with_libbsd=yes
31 ],[
32 AC_MSG_RESULT(no)
33 AM_CFLAGS="$_save_AM_CFLAGS"
34 LIBS="$_save_LIBS"
35 if test x"$with_libbsd" = x"yes"; then
36 AC_MSG_FAILURE([*** no libbsd support found])
37 fi
38 with_libbsd=no
39 ])
40 ], [
41 if test x"$with_libbsd" = x"yes"; then
42 AC_MSG_FAILURE([*** no libbsd support found])
43 fi
44 with_libbsd=no
45 ])
46 fi
48 AC_SEARCH_LIBS([arc4random], [],
49 [AC_DEFINE([HAVE_ARC4RANDOM], 1, [arc4random])],
50 [AC_DEFINE([HAVE_ARC4RANDOM], 0, [arc4random])])
52 AC_REPLACE_FUNCS([
53 asprintf \
54 err \
55 freezero \
56 getdtablecount \
57 getdtablesize \
58 getprogname \
59 memmem \
60 recallocarray \
61 setproctitle \
62 setprogname \
63 strlcat \
64 strlcpy \
65 strsep \
66 strtonum \
67 vis \
68 ])
70 AC_MSG_CHECKING([for sys/queue.h with TAILQ_FOREACH_SAFE and STAILQ_ENTRY])
71 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
72 #include <sys/queue.h>
73 #include <stddef.h>
74 ], [
75 TAILQ_HEAD(tailhead, entry) head;
76 struct entry {
77 TAILQ_ENTRY(entry) entries;
78 } *np, *nt;
79 TAILQ_INIT(&head);
80 TAILQ_FOREACH_SAFE(np, &head, entries, nt) {
81 /* nop */ ;
82 }
84 STAILQ_HEAD(listhead, qentry) qhead = STAILQ_HEAD_INITIALIZER(qhead);
85 struct qentry {
86 STAILQ_ENTRY(qentry) entries;
87 } foo;
89 return 0;
90 ])], [
91 AC_MSG_RESULT(yes)
92 AC_DEFINE([HAVE_QUEUE_H], 1, [QUEUE_H])
93 ], AC_MSG_RESULT(no))
95 AC_CHECK_HEADERS([sys/tree.h])
97 AC_CHECK_DECL(PR_SET_NAME, AC_DEFINE([HAVE_PR_SET_NAME], 1, [pr_set_name]), [],
98 [[#include <sys/prctl.h>]])
100 AC_CHECK_LIB([crypto], [RAND_add], [], [
101 AC_MSG_ERROR([requires openssl])
102 ])
104 AC_CHECK_LIB(tls, tls_init, [], [
105 AC_MSG_ERROR([requires libtls])
106 ])
108 # small hack to avoid linking *everything* to readline.
109 libs_orig="${LIBS}"
110 AC_CHECK_LIB(readline, readline, [], [
111 AC_DEFINE([HAVE_READLINE], 0, [1 if readline is found])
112 ])
113 KAMIFTP_LIBS="${LIBS}"
114 LIBS="${libs_orig}"
115 AC_SUBST([KAMIFTP_LIBS])
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(imsg)
129 AC_LIBOBJ(imsg-buffer)
130 AC_LIBOBJ(ohash)
131 ])
133 # check compiler flags
134 AC_DEFUN([CC_ADD_CHECK_FLAGS], [
135 AC_MSG_CHECKING([if $CC supports $1 flag])
136 old_AM_CFLAGS="$AM_CFLAGS"
137 AM_CFLAGS="$AM_CFLAGS $1"
138 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], [
139 AC_MSG_RESULT(yes)
140 ], [
141 AC_MSG_RESULT(no)
142 AM_CFLAGS="$old_AM_CFLAGS"
143 ])
144 ])
145 CC_ADD_CHECK_FLAGS([-Wall])
146 CC_ADD_CHECK_FLAGS([-Wextra])
147 CC_ADD_CHECK_FLAGS([-Wmissing-prototypes])
148 CC_ADD_CHECK_FLAGS([-Wstrict-prototypes])
149 CC_ADD_CHECK_FLAGS([-Wwrite-strings])
150 CC_ADD_CHECK_FLAGS([-Wno-unused-parameter])
152 AC_SUBST([AM_CFLAGS])
154 AC_CONFIG_HEADERS([config.h])
155 AC_CONFIG_FILES([
156 Makefile
157 ])
159 AC_OUTPUT