summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac187
1 files changed, 135 insertions, 52 deletions
diff --git a/configure.ac b/configure.ac
index 21123315..08671c71 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
# configure.ac
-AC_INIT([tmux], 3.2-rc3)
+AC_INIT([tmux], 3.2-rc4)
AC_PREREQ([2.60])
AC_CONFIG_AUX_DIR(etc)
@@ -21,6 +21,26 @@ SAVED_CFLAGS="$CFLAGS"
SAVED_CPPFLAGS="$CPPFLAGS"
SAVED_LDFLAGS="$LDFLAGS"
+# Is this oss-fuzz build?
+AC_ARG_ENABLE(
+ fuzzing,
+ AC_HELP_STRING(--enable-fuzzing, build fuzzers)
+)
+AC_ARG_VAR(
+ FUZZING_LIBS,
+ AC_HELP_STRING(libraries to link fuzzing targets with)
+)
+
+# Set up convenient fuzzing defaults before initializing compiler.
+if test "x$enable_fuzzing" = xyes; then
+ AC_DEFINE(NEED_FUZZING)
+ test "x$CC" == x && CC=clang
+ test "x$FUZZING_LIBS" == x && \
+ FUZZING_LIBS="-fsanitize=fuzzer"
+ test "x$SAVED_CFLAGS" == x && \
+ AM_CFLAGS="-g -fsanitize=fuzzer-no-link,address"
+fi
+
# Set up the compiler in two different ways and say yes we may want to install.
AC_PROG_CC
AM_PROG_CC_C_O
@@ -54,8 +74,11 @@ if test "x$enable_static" = xyes; then
LDFLAGS="$AM_LDFLAGS $SAVED_LDFLAGS"
fi
+# Do we need fuzzers?
+AM_CONDITIONAL(NEED_FUZZING, test "x$enable_fuzzing" = xyes)
+
# Is this gcc?
-AM_CONDITIONAL(IS_GCC, test "x$GCC" = xyes)
+AM_CONDITIONAL(IS_GCC, test "x$GCC" = xyes -a "x$enable_fuzzing" != xyes)
# Is this Sun CC?
AC_EGREP_CPP(
@@ -110,6 +133,7 @@ AC_CHECK_FUNCS([ \
AC_REPLACE_FUNCS([ \
asprintf \
cfmakeraw \
+ clock_gettime \
closefrom \
explicit_bzero \
fgetln \
@@ -119,8 +143,6 @@ AC_REPLACE_FUNCS([ \
getline \
getprogname \
memmem \
- recallocarray \
- reallocarray \
setenv \
setproctitle \
strcasestr \
@@ -132,6 +154,26 @@ AC_REPLACE_FUNCS([ \
])
AC_FUNC_STRNLEN
+# Clang sanitizers wrap reallocarray even if it isn't available on the target
+# system. When compiled it always returns NULL and crashes the program. To
+# detect this we need a more complicated test.
+AC_MSG_CHECKING([for working reallocarray])
+AC_RUN_IFELSE([AC_LANG_PROGRAM(
+ [#include <stdlib.h>],
+ [return (reallocarray(NULL, 1, 1) == NULL);]
+ )],
+ AC_MSG_RESULT(yes),
+ [AC_LIBOBJ(reallocarray) AC_MSG_RESULT([no])]
+)
+AC_MSG_CHECKING([for working recallocarray])
+AC_RUN_IFELSE([AC_LANG_PROGRAM(
+ [#include <stdlib.h>],
+ [return (recallocarray(NULL, 1, 1, 1) == NULL);]
+ )],
+ AC_MSG_RESULT(yes),
+ [AC_LIBOBJ(recallocarray) AC_MSG_RESULT([no])]
+)
+
# Look for clock_gettime. Must come before event_init.
AC_SEARCH_LIBS(clock_gettime, rt)
@@ -141,88 +183,112 @@ AC_SEARCH_LIBS(clock_gettime, rt)
# implementations.
AC_LIBOBJ(getopt)
-# Look for libevent.
+# Look for libevent. Try libevent_core or libevent with pkg-config first then
+# look for the library.
PKG_CHECK_MODULES(
- LIBEVENT,
- libevent,
+ LIBEVENT_CORE,
+ [libevent_core >= 2],
[
- AM_CFLAGS="$LIBEVENT_CFLAGS $AM_CFLAGS"
- CFLAGS="$AM_CFLAGS $SAVED_CFLAGS"
- LIBS="$LIBEVENT_LIBS $LIBS"
+ AM_CPPFLAGS="$LIBEVENT_CORE_CFLAGS $AM_CPPFLAGS"
+ CPPFLAGS="$AM_CPPFLAGS $SAVED_CPPFLAGS"
+ LIBS="$LIBEVENT_CORE_LIBS $LIBS"
found_libevent=yes
],
+ found_libevent=no
+)
+if test x$found_libevent = xno; then
+ PKG_CHECK_MODULES(
+ LIBEVENT,
+ [libevent >= 2],
+ [
+ AM_CPPFLAGS="$LIBEVENT_CFLAGS $AM_CPPFLAGS"
+ CPPFLAGS="$AM_CPPFLAGS $SAVED_CPPFLAGS"
+ LIBS="$LIBEVENT_LIBS $LIBS"
+ found_libevent=yes
+ ],
+ found_libevent=no
+ )
+fi
+if test x$found_libevent = xno; then
+ AC_SEARCH_LIBS(
+ event_init,
+ [event_core event event-1.4],
+ found_libevent=yes,
+ found_libevent=no
+ )
+fi
+AC_CHECK_HEADER(
+ event2/event.h,
+ AC_DEFINE(HAVE_EVENT2_EVENT_H),
[
- AC_SEARCH_LIBS(
- event_init,
- [event event-1.4 event2],
- found_libevent=yes,
+ AC_CHECK_HEADER(
+ event.h,
+ AC_DEFINE(HAVE_EVENT_H),
found_libevent=no
)
]
)
-AC_CHECK_HEADER(
- event.h,
- ,
- found_libevent=no
-)
if test "x$found_libevent" = xno; then
AC_MSG_ERROR("libevent not found")
fi
-# Look for ncurses.
+# Look for ncurses or curses. Try pkg-config first then directly for the
+# library.
PKG_CHECK_MODULES(
LIBTINFO,
tinfo,
- found_ncurses=yes,
+ [
+ AM_CPPFLAGS="$LIBTINFO_CFLAGS $AM_CPPFLAGS"
+ CPPFLAGS="$LIBTINFO_CFLAGS $SAVED_CPPFLAGS"
+ LIBS="$LIBTINFO_LIBS $LIBS"
+ found_ncurses=yes
+ ],
found_ncurses=no
)
if test "x$found_ncurses" = xno; then
PKG_CHECK_MODULES(
LIBNCURSES,
ncurses,
- found_ncurses=yes,
+ [
+ AM_CPPFLAGS="$LIBNCURSES_CFLAGS $AM_CPPFLAGS"
+ CPPFLAGS="$LIBNCURSES_CFLAGS $SAVED_CPPFLAGS"
+ LIBS="$LIBNCURSES_LIBS $LIBS"
+ found_ncurses=yes
+ ],
found_ncurses=no
)
fi
if test "x$found_ncurses" = xno; then
PKG_CHECK_MODULES(
- LIBNCURSES,
+ LIBNCURSESW,
ncursesw,
- found_ncurses=yes,
+ [
+ AM_CPPFLAGS="$LIBNCURSESW_CFLAGS $AM_CPPFLAGS"
+ CPPFLAGS="$LIBNCURSESW_CFLAGS $SAVED_CPPFLAGS"
+ LIBS="$LIBNCURSESW_LIBS $LIBS"
+ found_ncurses=yes
+ ],
found_ncurses=no
)
fi
-if test "x$found_ncurses" = xyes; then
- AM_CFLAGS="$LIBNCURSES_CFLAGS $LIBTINFO_CFLAGS $AM_CFLAGS"
- CFLAGS="$LIBNCURSES_CFLAGS $LIBTINFO_CFLAGS $CFLAGS"
- LIBS="$LIBNCURSES_LIBS $LIBTINFO_LIBS $LIBS"
-else
- # pkg-config didn't work, try ncurses.
- AC_CHECK_LIB(
- tinfo,
+if test "x$found_ncurses" = xno; then
+ AC_SEARCH_LIBS(
setupterm,
+ [tinfo ncurses ncursesw],
found_ncurses=yes,
found_ncurses=no
)
- if test "x$found_ncurses" = xno; then
- AC_CHECK_LIB(
- ncurses,
- setupterm,
- found_ncurses=yes,
- found_ncurses=no
- )
- fi
if test "x$found_ncurses" = xyes; then
AC_CHECK_HEADER(
ncurses.h,
LIBS="$LIBS -lncurses",
- found_ncurses=no)
+ found_ncurses=no
+ )
fi
fi
if test "x$found_ncurses" = xyes; then
AC_DEFINE(HAVE_NCURSES_H)
else
- # No ncurses, try curses.
AC_CHECK_LIB(
curses,
setupterm,
@@ -232,7 +298,8 @@ else
AC_CHECK_HEADER(
curses.h,
,
- found_curses=no)
+ found_curses=no
+ )
if test "x$found_curses" = xyes; then
LIBS="$LIBS -lcurses"
AC_DEFINE(HAVE_CURSES_H)
@@ -298,12 +365,11 @@ AC_TRY_LINK(
found_b64_ntop=yes,
found_b64_ntop=no
)
+AC_MSG_RESULT($found_b64_ntop)
+OLD_LIBS="$LIBS"
if test "x$found_b64_ntop" = xno; then
- AC_MSG_RESULT(no)
-
AC_MSG_CHECKING(for b64_ntop with -lresolv)
- OLD_LIBS="$LIBS"
- LIBS="$LIBS -lresolv"
+ LIBS="$OLD_LIBS -lresolv"
AC_TRY_LINK(
[
#include <sys/types.h>
@@ -314,15 +380,27 @@ if test "x$found_b64_ntop" = xno; then
found_b64_ntop=yes,
found_b64_ntop=no
)
- if test "x$found_b64_ntop" = xno; then
- LIBS="$OLD_LIBS"
- AC_MSG_RESULT(no)
- fi
+ AC_MSG_RESULT($found_b64_ntop)
+fi
+if test "x$found_b64_ntop" = xno; then
+ AC_MSG_CHECKING(for b64_ntop with -lnetwork)
+ LIBS="$OLD_LIBS -lnetwork"
+ AC_TRY_LINK(
+ [
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ #include <resolv.h>
+ ],
+ [b64_ntop(NULL, 0, NULL, 0);],
+ found_b64_ntop=yes,
+ found_b64_ntop=no
+ )
+ AC_MSG_RESULT($found_b64_ntop)
fi
if test "x$found_b64_ntop" = xyes; then
AC_DEFINE(HAVE_B64_NTOP)
- AC_MSG_RESULT(yes)
else
+ LIBS="$OLD_LIBS"
AC_LIBOBJ(base64)
fi
@@ -658,6 +736,10 @@ case "$host_os" in
AC_MSG_RESULT(cygwin)
PLATFORM=cygwin
;;
+ *haiku*)
+ AC_MSG_RESULT(haiku)
+ PLATFORM=haiku
+ ;;
*)
AC_MSG_RESULT(unknown)
PLATFORM=unknown
@@ -673,6 +755,7 @@ AM_CONDITIONAL(IS_NETBSD, test "x$PLATFORM" = xnetbsd)
AM_CONDITIONAL(IS_OPENBSD, test "x$PLATFORM" = xopenbsd)
AM_CONDITIONAL(IS_SUNOS, test "x$PLATFORM" = xsunos)
AM_CONDITIONAL(IS_HPUX, test "x$PLATFORM" = xhpux)
+AM_CONDITIONAL(IS_HAIKU, test "x$PLATFORM" = xhaiku)
AM_CONDITIONAL(IS_UNKNOWN, test "x$PLATFORM" = xunknown)
# Save our CFLAGS/CPPFLAGS/LDFLAGS for the Makefile and restore the old user