Blob


1 AC_INIT([telescope], [0.8.1-current], [telescope@omarpolo.com], [telescope], [gemini://telescope.omarpolo.com])
2 AC_CONFIG_AUX_DIR(etc)
3 AC_CONFIG_LIBOBJ_DIR(compat)
4 AC_CANONICAL_HOST
5 AM_INIT_AUTOMAKE([-Wall foreign subdir-objects])
6 AC_PROG_CC
7 AC_USE_SYSTEM_EXTENSIONS
8 AC_PROG_YACC
10 PKG_PROG_PKG_CONFIG
12 AC_ARG_VAR(HOSTCC, [The C compiler on the host.])
13 AC_ARG_VAR(HOSTCFLAGS, [CFLAGS for the host compiler])
15 test -z "${HOSTCC}" && HOSTCC='$(CC)'
16 test -z "${HOSTCFLAGS}" && HOSTCFLAGS='$(CFLAGS)'
18 AC_ARG_WITH([Werror],
19 AS_HELP_STRING([--with-Werror],
20 [Add the compiler flag -Werror]))
22 AC_ARG_WITH([libimsg],
23 AS_HELP_STRING([--with-libimsg],
24 [Build with imsg-compat library (default: disabled)]))
26 AC_ARG_WITH([libbsd],
27 AS_HELP_STRING([--with-libbsd],
28 [Build with libbsd library (default: disabled)]))
30 AS_IF([test "x$with_libbsd" = "xyes"], [
31 PKG_CHECK_MODULES([libbsd], [libbsd-overlay libbsd-ctor], [
32 CFLAGS="$libbsd_CFLAGS $CFLAGS"
33 LIBS="$libbsd_LIBS $LIBS"
34 ])
35 ])
37 AC_REPLACE_FUNCS([
38 asprintf \
39 err \
40 explicit_bzero \
41 freezero \
42 getdtablecount \
43 getdtablesize \
44 getprogname \
45 memmem \
46 reallocarray \
47 recallocarray \
48 strcasestr \
49 strlcat \
50 strlcpy \
51 strsep \
52 strtonum \
53 setproctitle \
54 ])
56 AC_MSG_CHECKING([for sys/queue.h with TAILQ_FOREACH_SAFE])
57 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
58 #include <sys/queue.h>
59 #include <stddef.h>
60 ], [
61 TAILQ_HEAD(tailhead, entry) head;
62 struct entry {
63 TAILQ_ENTRY(entry) entries;
64 } *np, *nt;
65 TAILQ_INIT(&head);
66 TAILQ_FOREACH_SAFE(np, &head, entries, nt) {
67 /* nop */ ;
68 }
69 return 0;
70 ])], [
71 AC_MSG_RESULT(yes)
72 AC_DEFINE([HAVE_QUEUE_H], 1, [QUEUE_H])
73 ], AC_MSG_RESULT(no))
75 AC_CHECK_HEADER([endian.h], [AC_DEFINE(HAVE_ENDIAN_H, 1, [have endian.h])], [
76 AC_CHECK_HEADER([sys/endian.h],
77 [AC_DEFINE(HAVE_SYS_ENDIAN_H, 1, [have sys/endian.h])], [
78 AC_CHECK_HEADERS([libkern/OSByteOrder.h],
79 [AC_DEFINE(HAVE_LIBKERN_OSBYTEORDER_H, 1, [have OSByteOrder.h])],
80 [AC_MSG_ERROR([can't find compatible endian.h header])],
81 [#include <machine/endian.h>])
82 ])
83 ])
85 AC_CHECK_DECL(PR_SET_NAME, AC_DEFINE([HAVE_PR_SET_NAME], 1, [pr_set_name]), [],
86 [[#include <sys/prctl.h>]])
88 AC_SEARCH_LIBS([initscr], [ncursesw ncurses], [], [
89 AC_MSG_ERROR([requires either ncursesw or ncurses library])
90 ])
92 AC_SEARCH_LIBS([keyname], [ncursesw ncurses tinfow tinfo], [], [
93 AC_MSG_ERROR([requires either ncursesw or ncurses library with terminfo support])
94 ])
96 AC_SEARCH_LIBS([tls_init], [tls], [], [
97 AC_MSG_ERROR([requires libtls])
98 ])
100 PKG_CHECK_MODULES([libgrapheme], [libgrapheme], [
101 AC_SUBST([LIBGRAPHEME], [])
102 CFLAGS="$libgrapheme_CFLAGS $CFLAGS"
103 LIBS="$libgrapheme_LIBS $LIBS"
104 ], [
105 # build the bundled version.
106 AC_SUBST([LIBGRAPHEME], "$srcdir/libgrapheme/libgrapheme.a")
107 CFLAGS="-I$srcdir/libgrapheme $CFLAGS"
108 ])
110 case "$host_os" in
111 *openbsd*)
112 AC_SEARCH_LIBS([event_init], [event], [],
113 [AC_MSG_ERROR([requires libevent])])
114 ;;
115 *)
116 PKG_CHECK_MODULES([libevent2], [libevent_core >= 2], [
117 AC_DEFINE([HAVE_EVENT2], 1, [1 if using event2])
118 CFLAGS="$libevent2_CFLAGS $CFLAGS"
119 LIBS="$libevent2_LIBS $LIBS"
120 ], [AC_MSG_ERROR([requires libevent])])
121 ;;
122 esac
124 AS_IF([test "x$with_libimsg" = "xyes"], [
125 PKG_CHECK_MODULES([libimsg], [libimsg], [
126 CFLAGS="$libimsg_CFLAGS $CFLAGS"
127 LIBS="$libimsg_LIBS $LIBS"
128 ])
129 ])
131 AC_SEARCH_LIBS([imsg_init], [util], [
132 AC_DEFINE([HAVE_IMSG], 1,
133 [Define to 1 if you have imsg functions (-lutil or -limsg).])
134 ], [
135 AC_LIBOBJ(imsg)
136 AC_LIBOBJ(imsg-buffer)
140 AC_SEARCH_LIBS([ohash_init], [util], [], [
141 AC_LIBOBJ(ohash)
142 AC_LIBOBJ(fmt_scaled)
143 ])
145 AC_CHECK_FUNCS([asr_run])
147 AC_SEARCH_LIBS([RAND_add], [crypto], [:], [
148 AC_MSG_ERROR([can't find libcrypto])
149 ])
151 AC_SEARCH_LIBS([SSL_CTX_new], [ssl], [:], [
152 AC_MSG_ERROR([can't find libssl])
153 ])
155 # don't check for landlock: it currently unusable.
156 dnl AC_CHECK_HEADERS([linux/landlock.h])
158 dnl after all the function checks, add optional support for -Werror
159 AS_IF([test "x$with_Werror" = "xyes"], [
160 CFLAGS="$CFLAGS -Werror"
161 ])
163 # check compiler flags
164 AC_DEFUN([CC_ADD_CHECK_FLAGS], [
165 AC_MSG_CHECKING([if $CC supports $1 flag])
166 old_CFLAGS="$CFLAGS"
167 CFLAGS="$CFLAGS $1"
168 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
169 AC_MSG_RESULT(yes),
170 AC_MSG_RESULT(no)
171 CFLAGS="$old_CFLAGS")
172 ])
173 CC_ADD_CHECK_FLAGS([-Wall])
174 CC_ADD_CHECK_FLAGS([-Wextra])
175 CC_ADD_CHECK_FLAGS([-Wmissing-declarations])
176 CC_ADD_CHECK_FLAGS([-Wmissing-prototypes])
177 CC_ADD_CHECK_FLAGS([-Wstrict-prototypes])
178 CC_ADD_CHECK_FLAGS([-Wwrite-strings])
179 CC_ADD_CHECK_FLAGS([-Wno-unused-parameter])
180 CC_ADD_CHECK_FLAGS([-Wpointer-arith])
181 CC_ADD_CHECK_FLAGS([-Wsign-compare])
182 CC_ADD_CHECK_FLAGS([-Wcast-align])
184 AC_CONFIG_HEADERS([config.h])
185 AC_CONFIG_FILES([
186 Makefile
187 test/Makefile
188 pages/about_about.gmi
189 pages/about_blank.gmi
190 pages/about_crash.gmi
191 pages/about_help.gmi
192 pages/about_license.gmi
193 pages/about_new.gmi
194 pages/bookmarks.gmi
195 ])
197 AC_OUTPUT