1 AC_INIT([telescope], [0.10.1-current], [telescope@omarpolo.com],
2 [telescope], [gemini://telescope-browser.org])
4 AC_CONFIG_LIBOBJ_DIR(compat)
6 AM_INIT_AUTOMAKE([-Wall foreign subdir-objects])
8 AC_USE_SYSTEM_EXTENSIONS
11 # AC_PROC_YACC sets the environment variable $YACC for a suitable program to
12 # use, but doesn't check to see if it exists. Test for this -- if it's not
14 AC_CHECK_PROG(found_yacc, $YACC, yes, no)
15 AS_IF([test "x$found_yacc" = "xno"], [AC_MSG_ERROR("yacc/bison not found")])
19 AC_ARG_VAR(HOSTCC, [The C compiler on the host.])
20 AC_ARG_VAR(HOSTCFLAGS, [CFLAGS for the host compiler])
22 test -z "${HOSTCC}" && HOSTCC='$(CC)'
23 test -z "${HOSTCFLAGS}" && HOSTCFLAGS='$(CFLAGS)'
25 AC_MSG_CHECKING([platform])
43 AC_MSG_RESULT($PLATFORM)
47 AS_HELP_STRING([--with-Werror],
48 [Add the compiler flag -Werror]))
50 AC_ARG_WITH([libimsg],
51 AS_HELP_STRING([--with-libimsg],
52 [Build with imsg-compat library (default: disabled)]))
55 AS_HELP_STRING([--with-libbsd],
56 [Build with libbsd library (default: disabled)]))
58 AC_ARG_WITH([default-editor],
59 AS_HELP_STRING([--with-default-editor],
60 [Set the default editor to use (default: ed)]),
61 [DEFAULT_EDITOR=$withval],
63 AC_MSG_NOTICE([Using default-editor: $DEFAULT_EDITOR])
64 AC_DEFINE_UNQUOTED([DEFAULT_EDITOR], ["$DEFAULT_EDITOR"], [The default editor])
66 DEFAULT_OPENER=xdg-open
67 AS_IF([test "x$platform" = "xdarwin"], [
71 AC_ARG_WITH([default-opener],
72 AS_HELP_STRING([--with-default-opener],
73 [Set the default program to use (default: $DEFAULT_OPENER)]),
74 [DEFAULT_OPENER=$withval])
75 AC_MSG_NOTICE([Using default-opener: $DEFAULT_OPENER])
76 AC_DEFINE_UNQUOTED([DEFAULT_OPENER], ["$DEFAULT_OPENER"], [The default opener])
83 AS_IF([test "x$with_libbsd" = "xyes"], [
84 PKG_CHECK_MODULES([libbsd], [libbsd-overlay libbsd-ctor], [
85 CFLAGS="$libbsd_CFLAGS $CFLAGS"
86 LIBS="$libbsd_LIBS $LIBS"
90 if test "x$PLATFORM" = "xdarwin"; then
91 export LDFLAGS="-L/opt/homebrew/opt/libressl/lib $LDFLAGS"
92 export CPPFLAGS="-I/opt/homebrew/opt/libressl/include $CPPFLAGS"
93 export PKG_CONFIG_PATH="/opt/homebrew/opt/libressl/lib/pkgconfig $PKG_CONFIG_PATH"
117 AC_MSG_CHECKING([for sys/queue.h with TAILQ_FOREACH_SAFE])
118 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
119 #include <sys/queue.h>
122 TAILQ_HEAD(tailhead, entry) head;
124 TAILQ_ENTRY(entry) entries;
127 TAILQ_FOREACH_SAFE(np, &head, entries, nt) {
133 AC_DEFINE([HAVE_QUEUE_H], 1, [QUEUE_H])
134 ], AC_MSG_RESULT(no))
136 AC_CHECK_DECL(timespecsub,
137 [AC_DEFINE([HAVE_TIMESPECSUB], 1, [have timespecsub])], [],
138 [#include <sys/time.h>])
140 AC_CHECK_DECL(timercmp,
141 [AC_DEFINE([HAVE_TIMERCMP], 1, [have timercmp])], [],
142 [#include <sys/time.h>])
144 dnl can't be used as r-value.
145 AC_MSG_CHECKING([for TIMEVAL_TO_TIMESPEC])
146 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
147 #include <sys/time.h>
149 struct timeval a = {0, 0};
151 TIMEVAL_TO_TIMESPEC(&a, &b);
152 return (int)b.tv_sec;
155 AC_DEFINE([HAVE_TIMEVAL_TO_TIMESPEC], 1, [have TIMEVAL_TO_TIMESPEC])
156 ], AC_MSG_RESULT(no))
158 AC_CHECK_HEADER([endian.h], [AC_DEFINE(HAVE_ENDIAN_H, 1, [have endian.h])], [
159 AC_CHECK_HEADER([sys/endian.h],
160 [AC_DEFINE(HAVE_SYS_ENDIAN_H, 1, [have sys/endian.h])], [
161 AC_CHECK_HEADERS([libkern/OSByteOrder.h],
162 [AC_DEFINE(HAVE_LIBKERN_OSBYTEORDER_H, 1, [have OSByteOrder.h])],
163 [AC_MSG_ERROR([can't find compatible endian.h header])],
164 [#include <machine/endian.h>])
168 AC_CHECK_DECL(PR_SET_NAME, AC_DEFINE([HAVE_PR_SET_NAME], 1, [pr_set_name]), [],
169 [[#include <sys/prctl.h>]])
171 AC_SEARCH_LIBS([initscr], [ncursesw ncurses], [], [
172 AC_MSG_ERROR([requires either ncursesw or ncurses library])
175 AC_SEARCH_LIBS([keyname], [ncursesw ncurses tinfow tinfo], [], [
176 AC_MSG_ERROR([requires either ncursesw or ncurses library with terminfo support])
179 AC_SEARCH_LIBS([tls_init], [tls], [found_tls=yes], [found_tls=no])
181 AS_IF([test "x$found_tls" = "xno"], [
182 PKG_CHECK_MODULES([libtls], [libtls], [
183 CFLAGS="$libtls_CFLAGS $CFLAGS"
184 LIBS="$libtls_LIBS $LIBS"
185 ], [AC_MSG_ERROR([libtls not found.])])
188 PKG_CHECK_MODULES([libgrapheme], [libgrapheme], [
189 AC_SUBST([LIBGRAPHEME], [])
190 CFLAGS="$libgrapheme_CFLAGS $CFLAGS"
191 LIBS="$libgrapheme_LIBS $LIBS"
193 # build the bundled version.
194 AC_SUBST([LIBGRAPHEME], "$srcdir/libgrapheme/libgrapheme.a")
195 CFLAGS="-I$srcdir/libgrapheme $CFLAGS"
198 AS_IF([test "x$with_libimsg" = "xyes"], [
199 PKG_CHECK_MODULES([libimsg], [libimsg], [
200 CFLAGS="$libimsg_CFLAGS $CFLAGS"
201 LIBS="$libimsg_LIBS $LIBS"
205 AC_SEARCH_LIBS([imsgbuf_init], [util], [
206 AC_DEFINE([HAVE_IMSG], 1,
207 [Define to 1 if you have imsg functions (-lutil or -limsg).])
210 AC_LIBOBJ(imsg-buffer)
214 AC_SEARCH_LIBS([ohash_init], [util], [], [
216 AC_LIBOBJ(fmt_scaled)
219 AC_CHECK_FUNCS([asr_run])
221 AC_SEARCH_LIBS([RAND_add], [crypto], [:], [
222 AC_MSG_ERROR([can't find libcrypto])
225 AS_IF([test "x$PLATFORM" != "xdarwin"], [
226 AC_SEARCH_LIBS([SSL_CTX_new], [ssl], [:], [
227 AC_MSG_ERROR([can't find libssl])
231 # Sanity check for Libre/OpenSSL headers vs library mismatch
232 AC_MSG_CHECKING([whether libcrypto headers match the library])
233 AC_RUN_IFELSE([AC_LANG_PROGRAM([[
234 #include <openssl/opensslv.h>
235 #include <openssl/crypto.h>
237 return (OpenSSL_version_num() != OPENSSL_VERSION_NUMBER);
242 AC_MSG_ERROR([libcrypto headers do not match the library.])
244 AC_MSG_WARN([skip (due to cross-compiling)])
247 AC_CHECK_HEADERS([linux/landlock.h])
249 dnl after all the function checks, add optional support for -Werror
250 AS_IF([test "x$with_Werror" = "xyes"], [
251 CFLAGS="$CFLAGS -Werror"
254 # check compiler flags
255 AC_DEFUN([CC_ADD_CHECK_FLAGS], [
256 AC_MSG_CHECKING([if $CC supports $1 flag])
258 CFLAGS="$CFLAGS -Werror $1"
259 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], [
261 CFLAGS="$old_CFLAGS $1"
267 CC_ADD_CHECK_FLAGS([-Wall])
268 CC_ADD_CHECK_FLAGS([-Wextra])
269 CC_ADD_CHECK_FLAGS([-Wmissing-declarations])
270 CC_ADD_CHECK_FLAGS([-Wmissing-prototypes])
271 CC_ADD_CHECK_FLAGS([-Wstrict-prototypes])
272 CC_ADD_CHECK_FLAGS([-Wwrite-strings])
273 CC_ADD_CHECK_FLAGS([-Wno-unused-parameter])
274 CC_ADD_CHECK_FLAGS([-Wno-format-truncation])
275 CC_ADD_CHECK_FLAGS([-Wno-pointer-sign])
276 CC_ADD_CHECK_FLAGS([-Wno-unused-result])
277 CC_ADD_CHECK_FLAGS([-Wpointer-arith])
278 CC_ADD_CHECK_FLAGS([-Wsign-compare])
279 CC_ADD_CHECK_FLAGS([-Wcast-align])
281 AC_CONFIG_HEADERS([config.h])
285 pages/about_about.gmi
286 pages/about_blank.gmi
287 pages/about_crash.gmi
289 pages/about_license.gmi