diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 929 |
1 files changed, 929 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..2b8b3b1 --- /dev/null +++ b/configure.ac @@ -0,0 +1,929 @@ +# configure.ac + +AC_INIT([tmux], 3.3a) +AC_PREREQ([2.60]) + +AC_CONFIG_AUX_DIR(etc) +AC_CONFIG_LIBOBJ_DIR(compat) +AM_INIT_AUTOMAKE([foreign subdir-objects]) + +AC_CANONICAL_HOST + +# When CFLAGS isn't set at this stage and gcc is detected by the macro below, +# autoconf will automatically use CFLAGS="-O2 -g". Prevent that by using an +# empty default. +: ${CFLAGS=""} + +# Save user CPPFLAGS, CFLAGS and LDFLAGS. We need to change them because +# AC_CHECK_HEADER doesn't give us any other way to update the include +# paths. But for Makefile.am we want to use AM_CPPFLAGS and friends. +SAVED_CFLAGS="$CFLAGS" +SAVED_CPPFLAGS="$CPPFLAGS" +SAVED_LDFLAGS="$LDFLAGS" + +# Is this oss-fuzz build? +AC_ARG_ENABLE( + fuzzing, + AS_HELP_STRING(--enable-fuzzing, build fuzzers) +) +AC_ARG_VAR( + FUZZING_LIBS, + AS_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 +AC_PROG_CC_C99 +AC_PROG_CPP +AC_PROG_EGREP +AC_PROG_INSTALL +AC_PROG_YACC +PKG_PROG_PKG_CONFIG +AC_USE_SYSTEM_EXTENSIONS + +# Default tmux.conf goes in /etc not ${prefix}/etc. +test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc + +# Is this --enable-debug? +case "x$VERSION" in xnext*) enable_debug=yes;; esac +AC_ARG_ENABLE( + debug, + AS_HELP_STRING(--enable-debug, enable debug build flags), +) +AM_CONDITIONAL(IS_DEBUG, test "x$enable_debug" = xyes) + +# Is this a static build? +AC_ARG_ENABLE( + static, + AS_HELP_STRING(--enable-static, create a static build) +) +if test "x$enable_static" = xyes; then + case "$host_os" in + *darwin*) + AC_MSG_ERROR([static linking is not supported on macOS]) + ;; + esac + test "x$PKG_CONFIG" != x && PKG_CONFIG="$PKG_CONFIG --static" + AM_LDFLAGS="-static $AM_LDFLAGS" + LDFLAGS="$AM_LDFLAGS $SAVED_LDFLAGS" +fi + +# Allow default TERM to be set. +AC_ARG_WITH( + TERM, + AS_HELP_STRING(--with-TERM, set default TERM), + [DEFAULT_TERM=$withval], + [DEFAULT_TERM=] +) +case "x$DEFAULT_TERM" in + xscreen*|xtmux*|x) + ;; + *) + AC_MSG_ERROR("unsuitable TERM (must be screen* or tmux*)") + ;; +esac + +# Do we need fuzzers? +AM_CONDITIONAL(NEED_FUZZING, test "x$enable_fuzzing" = xyes) + +# Is this gcc? +AM_CONDITIONAL(IS_GCC, test "x$GCC" = xyes -a "x$enable_fuzzing" != xyes) + +# Is this Sun CC? +AC_EGREP_CPP( + yes, + [ + #ifdef __SUNPRO_C + yes + #endif + ], + found_suncc=yes, + found_suncc=no +) +AM_CONDITIONAL(IS_SUNCC, test "x$found_suncc" = xyes) + +# Check for various headers. Alternatives included from compat.h. +AC_CHECK_HEADERS([ \ + bitstring.h \ + dirent.h \ + fcntl.h \ + inttypes.h \ + libproc.h \ + libutil.h \ + ndir.h \ + paths.h \ + pty.h \ + stdint.h \ + sys/dir.h \ + sys/ndir.h \ + sys/tree.h \ + ucred.h \ + util.h \ +]) + +# Look for sys_signame. +AC_SEARCH_LIBS(sys_signame, , AC_DEFINE(HAVE_SYS_SIGNAME)) + +# Look for fmod. +AC_CHECK_LIB(m, fmod) + +# Look for library needed for flock. +AC_SEARCH_LIBS(flock, bsd) + +# Check for functions that are replaced or omitted. +AC_CHECK_FUNCS([ \ + dirfd \ + flock \ + prctl \ + proc_pidinfo \ + getpeerucred \ + sysconf \ +]) + +# Check for functions with a compatibility implementation. +AC_REPLACE_FUNCS([ \ + asprintf \ + cfmakeraw \ + clock_gettime \ + closefrom \ + explicit_bzero \ + fgetln \ + freezero \ + getdtablecount \ + getdtablesize \ + getpeereid \ + getline \ + getprogname \ + memmem \ + setenv \ + setproctitle \ + strcasestr \ + strlcat \ + strlcpy \ + strndup \ + strsep \ +]) +AC_FUNC_STRNLEN + +# Check if strtonum works. +AC_MSG_CHECKING([for working strtonum]) +AC_RUN_IFELSE([AC_LANG_PROGRAM( + [#include <stdlib.h>], + [return (strtonum("0", 0, 1, NULL) == 0 ? 0 : 1);] + )], + [AC_DEFINE(HAVE_STRTONUM) AC_MSG_RESULT(yes)], + [AC_LIBOBJ(strtonum) AC_MSG_RESULT(no)], + [AC_LIBOBJ(strtonum) AC_MSG_RESULT(no)] +) + +# 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_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])], + [AC_LIBOBJ(recallocarray) AC_MSG_RESULT([no])] +) + +# Look for clock_gettime. Must come before event_init. +AC_SEARCH_LIBS(clock_gettime, rt) + +# Always use our getopt because 1) glibc's doesn't enforce argument order 2) +# musl does not set optarg to NULL for flags without arguments (although it is +# not required to, but it is helpful) 3) there are probably other weird +# implementations. +AC_LIBOBJ(getopt) + +# Look for libevent. Try libevent_core or libevent with pkg-config first then +# look for the library. +PKG_CHECK_MODULES( + LIBEVENT_CORE, + [libevent_core >= 2], + [ + 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_CHECK_HEADER( + event.h, + AC_DEFINE(HAVE_EVENT_H), + found_libevent=no + ) + ] +) +if test "x$found_libevent" = xno; then + AC_MSG_ERROR("libevent not found") +fi + +# Look for ncurses or curses. Try pkg-config first then directly for the +# library. +PKG_CHECK_MODULES( + LIBTINFO, + tinfo, + [ + 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, + [ + 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( + LIBNCURSESW, + ncursesw, + [ + 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" = xno; then + AC_SEARCH_LIBS( + setupterm, + [tinfo ncurses ncursesw], + found_ncurses=yes, + found_ncurses=no + ) + if test "x$found_ncurses" = xyes; then + AC_CHECK_HEADER( + ncurses.h, + LIBS="$LIBS -lncurses", + found_ncurses=no + ) + fi +fi +if test "x$found_ncurses" = xyes; then + CPPFLAGS="$CPPFLAGS -DHAVE_NCURSES_H" + AC_DEFINE(HAVE_NCURSES_H) +else + AC_CHECK_LIB( + curses, + setupterm, + found_curses=yes, + found_curses=no + ) + AC_CHECK_HEADER( + curses.h, + , + found_curses=no + ) + if test "x$found_curses" = xyes; then + LIBS="$LIBS -lcurses" + CPPFLAGS="$CPPFLAGS -DHAVE_CURSES_H" + AC_DEFINE(HAVE_CURSES_H) + else + AC_MSG_ERROR("curses not found") + fi +fi + +# Look for utempter. +AC_ARG_ENABLE( + utempter, + AS_HELP_STRING(--enable-utempter, use utempter if it is installed) +) +if test "x$enable_utempter" = xyes; then + AC_CHECK_HEADER(utempter.h, enable_utempter=yes, enable_utempter=no) + if test "x$enable_utempter" = xyes; then + AC_SEARCH_LIBS( + utempter_add_record, + utempter, + enable_utempter=yes, + enable_utempter=no + ) + fi + if test "x$enable_utempter" = xyes; then + AC_DEFINE(HAVE_UTEMPTER) + else + AC_MSG_ERROR("utempter not found") + fi +fi + +# Look for utf8proc. +AC_ARG_ENABLE( + utf8proc, + AS_HELP_STRING(--enable-utf8proc, use utf8proc if it is installed) +) +if test "x$enable_utf8proc" = xyes; then + AC_CHECK_HEADER(utf8proc.h, enable_utf8proc=yes, enable_utf8proc=no) + if test "x$enable_utf8proc" = xyes; then + AC_SEARCH_LIBS( + utf8proc_charwidth, + utf8proc, + enable_utf8proc=yes, + enable_utf8proc=no + ) + fi + if test "x$enable_utf8proc" = xyes; then + AC_DEFINE(HAVE_UTF8PROC) + else + AC_MSG_ERROR("utf8proc not found") + fi +fi +AM_CONDITIONAL(HAVE_UTF8PROC, [test "x$enable_utf8proc" = xyes]) + +# Check for systemd support. +AC_ARG_ENABLE( + systemd, + AS_HELP_STRING(--enable-systemd, enable systemd integration) +) +if test x"$enable_systemd" = xyes; then + PKG_CHECK_MODULES( + SYSTEMD, + libsystemd, + [ + AM_CPPFLAGS="$SYSTEMD_CFLAGS $AM_CPPFLAGS" + CPPFLAGS="$AM_CPPFLAGS $SAVED_CPPFLAGS" + LIBS="$SYSTEMD_LIBS $LIBS" + found_systemd=yes + ], + found_systemd=no + ) + if test "x$found_systemd" = xyes; then + AC_DEFINE(HAVE_SYSTEMD) + else + AC_MSG_ERROR("systemd not found") + fi +fi +AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$found_systemd" = xyes]) + +# Check for b64_ntop. If we have b64_ntop, we assume b64_pton as well. +AC_MSG_CHECKING(for b64_ntop) + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [ + #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) +OLD_LIBS="$LIBS" +if test "x$found_b64_ntop" = xno; then + AC_MSG_CHECKING(for b64_ntop with -lresolv) + LIBS="$OLD_LIBS -lresolv" + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [ + #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" = xno; then + AC_MSG_CHECKING(for b64_ntop with -lnetwork) + LIBS="$OLD_LIBS -lnetwork" + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [ + #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) +else + LIBS="$OLD_LIBS" + AC_LIBOBJ(base64) +fi + +# Look for networking libraries. +AC_SEARCH_LIBS(inet_ntoa, nsl) +AC_SEARCH_LIBS(socket, socket) +AC_CHECK_LIB(xnet, socket) + +# Check if using glibc and have malloc_trim(3). The glibc free(3) is pretty bad +# about returning memory to the kernel unless the application tells it when to +# with malloc_trim(3). +AC_MSG_CHECKING(if free doesn't work very well) +AC_LINK_IFELSE([AC_LANG_SOURCE( + [ + #include <stdlib.h> + #ifdef __GLIBC__ + #include <malloc.h> + int main(void) { + malloc_trim (0); + exit(0); + } + #else + no + #endif + ])], + found_malloc_trim=yes, + found_malloc_trim=no +) +AC_MSG_RESULT($found_malloc_trim) +if test "x$found_malloc_trim" = xyes; then + AC_DEFINE(HAVE_MALLOC_TRIM) +fi + +# Check for CMSG_DATA. On some platforms like HP-UX this requires UNIX 95 +# (_XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED) (see xopen_networking(7)). On +# others, UNIX 03 (_XOPEN_SOURCE 600, see standards(7) on Solaris). +XOPEN_DEFINES= +AC_MSG_CHECKING(for CMSG_DATA) +AC_EGREP_CPP( + yes, + [ + #include <sys/socket.h> + #ifdef CMSG_DATA + yes + #endif + ], + found_cmsg_data=yes, + found_cmsg_data=no +) +AC_MSG_RESULT($found_cmsg_data) +if test "x$found_cmsg_data" = xno; then + AC_MSG_CHECKING(if CMSG_DATA needs _XOPEN_SOURCE_EXTENDED) + AC_EGREP_CPP( + yes, + [ + #define _XOPEN_SOURCE 1 + #define _XOPEN_SOURCE_EXTENDED 1 + #include <sys/socket.h> + #ifdef CMSG_DATA + yes + #endif + ], + found_cmsg_data=yes, + found_cmsg_data=no + ) + AC_MSG_RESULT($found_cmsg_data) + if test "x$found_cmsg_data" = xyes; then + XOPEN_DEFINES="-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED" + fi +fi +if test "x$found_cmsg_data" = xno; then + AC_MSG_CHECKING(if CMSG_DATA needs _XOPEN_SOURCE 600) + AC_EGREP_CPP( + yes, + [ + #define _XOPEN_SOURCE 600 + #include <sys/socket.h> + #ifdef CMSG_DATA + yes + #endif + ], + found_cmsg_data=yes, + found_cmsg_data=no + ) + AC_MSG_RESULT($found_cmsg_data) + if test "x$found_cmsg_data" = xyes; then + XOPEN_DEFINES="-D_XOPEN_SOURCE=600" + else + AC_MSG_ERROR("CMSG_DATA not found") + fi +fi +AC_SUBST(XOPEN_DEFINES) + +# Look for err and friends in err.h. +AC_CHECK_FUNC(err, found_err_h=yes, found_err_h=no) +AC_CHECK_FUNC(errx, , found_err_h=no) +AC_CHECK_FUNC(warn, , found_err_h=no) +AC_CHECK_FUNC(warnx, , found_err_h=no) +if test "x$found_err_h" = xyes; then + AC_CHECK_HEADER(err.h, , found_err_h=no) +else + AC_LIBOBJ(err) +fi + +# Look for imsg_init in libutil. +AC_SEARCH_LIBS(imsg_init, util, found_imsg_init=yes, found_imsg_init=no) +if test "x$found_imsg_init" = xyes; then + AC_DEFINE(HAVE_IMSG) +else + AC_LIBOBJ(imsg) + AC_LIBOBJ(imsg-buffer) +fi + +# Look for daemon, compat/daemon.c used if missing. Solaris 10 has it in +# libresolv, but no declaration anywhere, so check for declaration as well as +# function. +AC_CHECK_FUNC(daemon, found_daemon=yes, found_daemon=no) +AC_CHECK_DECL( + daemon, + , + found_daemon=no, + [ + #include <stdlib.h> + #include <unistd.h> + ] +) +if test "x$found_daemon" = xyes; then + AC_DEFINE(HAVE_DAEMON) +else + AC_LIBOBJ(daemon) +fi + +# Look for stravis, compat/{vis,unvis}.c used if missing. +AC_CHECK_FUNC(stravis, found_stravis=yes, found_stravis=no) +if test "x$found_stravis" = xyes; then + AC_MSG_CHECKING(if strnvis is broken) + AC_EGREP_HEADER([strnvis\(char \*, const char \*, size_t, int\)], + vis.h, + AC_MSG_RESULT(no), + [found_stravis=no]) + if test "x$found_stravis" = xno; then + AC_MSG_RESULT(yes) + fi +fi +if test "x$found_stravis" = xyes; then + AC_CHECK_DECL( + VIS_DQ, + , + found_stravis=no, + [ + #include <stdlib.h> + #include <vis.h> + ] +) +fi +if test "x$found_stravis" = xyes; then + AC_DEFINE(HAVE_VIS) +else + AC_LIBOBJ(vis) + AC_LIBOBJ(unvis) +fi + +# Look for fdforkpty and forkpty in libutil. +AC_SEARCH_LIBS(fdforkpty, util, found_fdforkpty=yes, found_fdforkpty=no) +if test "x$found_fdforkpty" = xyes; then + AC_DEFINE(HAVE_FDFORKPTY) +else + AC_LIBOBJ(fdforkpty) +fi +AC_SEARCH_LIBS(forkpty, util, found_forkpty=yes, found_forkpty=no) +if test "x$found_forkpty" = xyes; then + AC_DEFINE(HAVE_FORKPTY) +fi +AM_CONDITIONAL(NEED_FORKPTY, test "x$found_forkpty" = xno) + +# Look for kinfo_getfile in libutil. +AC_SEARCH_LIBS(kinfo_getfile, [util util-freebsd]) + +# Look for a suitable queue.h. +AC_CHECK_DECL( + TAILQ_CONCAT, + found_queue_h=yes, + found_queue_h=no, + [#include <sys/queue.h>] +) +AC_CHECK_DECL( + TAILQ_PREV, + , + found_queue_h=no, + [#include <sys/queue.h>] +) +AC_CHECK_DECL( + TAILQ_REPLACE, + , + found_queue_h=no, + [#include <sys/queue.h>] +) +if test "x$found_queue_h" = xyes; then + AC_DEFINE(HAVE_QUEUE_H) +fi + +# Look for __progname. +AC_MSG_CHECKING(for __progname) +AC_LINK_IFELSE([AC_LANG_SOURCE( + [ + #include <stdio.h> + #include <stdlib.h> + extern char *__progname; + int main(void) { + const char *cp = __progname; + printf("%s\n", cp); + exit(0); + } + ])], + [AC_DEFINE(HAVE___PROGNAME) AC_MSG_RESULT(yes)], + AC_MSG_RESULT(no) +) + +# Look for program_invocation_short_name. +AC_MSG_CHECKING(for program_invocation_short_name) +AC_LINK_IFELSE([AC_LANG_SOURCE( + [ + #include <errno.h> + #include <stdio.h> + #include <stdlib.h> + int main(void) { + const char *cp = program_invocation_short_name; + printf("%s\n", cp); + exit(0); + } + ])], + [AC_DEFINE(HAVE_PROGRAM_INVOCATION_SHORT_NAME) AC_MSG_RESULT(yes)], + AC_MSG_RESULT(no) +) + +# Look for prctl(PR_SET_NAME). +AC_CHECK_DECL( + PR_SET_NAME, + AC_DEFINE(HAVE_PR_SET_NAME), + , + [#include <sys/prctl.h>] +) + +# Look for setsockopt(SO_PEERCRED). +AC_CHECK_DECL( + SO_PEERCRED, + AC_DEFINE(HAVE_SO_PEERCRED), + , + [#include <sys/socket.h>] +) + +# Look for fcntl(F_CLOSEM). +AC_CHECK_DECL( + F_CLOSEM, + AC_DEFINE(HAVE_FCNTL_CLOSEM), + , + [#include <fcntl.h>] +) + +# Look for /proc/$$. +AC_MSG_CHECKING(for /proc/\$\$) +if test -d /proc/$$; then + AC_DEFINE(HAVE_PROC_PID) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + +# Try to figure out what the best value for TERM might be. +if test "x$DEFAULT_TERM" = x; then + DEFAULT_TERM=screen + AC_MSG_CHECKING(TERM) + AC_RUN_IFELSE([AC_LANG_SOURCE( + [ + #include <stdio.h> + #include <stdlib.h> + #if defined(HAVE_CURSES_H) + #include <curses.h> + #elif defined(HAVE_NCURSES_H) + #include <ncurses.h> + #endif + #include <term.h> + int main(void) { + if (setupterm("screen-256color", -1, NULL) != OK) + exit(1); + exit(0); + } + ])], + [DEFAULT_TERM=screen-256color], + , + [DEFAULT_TERM=screen] + ) + AC_RUN_IFELSE([AC_LANG_SOURCE( + [ + #include <stdio.h> + #include <stdlib.h> + #if defined(HAVE_CURSES_H) + #include <curses.h> + #elif defined(HAVE_NCURSES_H) + #include <ncurses.h> + #endif + #include <term.h> + int main(void) { + if (setupterm("tmux", -1, NULL) != OK) + exit(1); + exit(0); + } + ])], + [DEFAULT_TERM=tmux], + , + [DEFAULT_TERM=screen] + ) + AC_RUN_IFELSE([AC_LANG_SOURCE( + [ + #include <stdio.h> + #include <stdlib.h> + #if defined(HAVE_CURSES_H) + #include <curses.h> + #elif defined(HAVE_NCURSES_H) + #include <ncurses.h> + #endif + #include <term.h> + int main(void) { + if (setupterm("tmux-256color", -1, NULL) != OK) + exit(1); + exit(0); + } + ])], + [DEFAULT_TERM=tmux-256color], + , + [DEFAULT_TERM=screen] + ) + AC_MSG_RESULT($DEFAULT_TERM) +fi +AC_SUBST(DEFAULT_TERM) + +# Man page defaults to mdoc. +MANFORMAT=mdoc +AC_SUBST(MANFORMAT) + +# Figure out the platform. +AC_MSG_CHECKING(platform) +case "$host_os" in + *aix*) + AC_MSG_RESULT(aix) + PLATFORM=aix + ;; + *darwin*) + AC_MSG_RESULT(darwin) + PLATFORM=darwin + # + # macOS uses __dead2 instead of __dead, like FreeBSD. But it defines + # __dead away so it needs to be removed before we can replace it. + # + AC_DEFINE(BROKEN___DEAD) + # + # macOS CMSG_FIRSTHDR is broken, so redefine it with a working one. + # daemon works but has some stupid side effects, so use our internal + # version which has a workaround. + # + AC_DEFINE(BROKEN_CMSG_FIRSTHDR) + AC_LIBOBJ(daemon) + AC_LIBOBJ(daemon-darwin) + # + # macOS wcwidth(3) is bad, so complain and suggest using utf8proc + # instead. + # + if test "x$enable_utf8proc" = x; then + AC_MSG_NOTICE([]) + AC_MSG_NOTICE([ macOS library support for Unicode is very poor,]) + AC_MSG_NOTICE([ particularly for complex codepoints like emojis;]) + AC_MSG_NOTICE([ to use these correctly, configuring with]) + AC_MSG_NOTICE([ --enable-utf8proc is recommended. To build]) + AC_MSG_NOTICE([ without anyway, use --disable-utf8proc]) + AC_MSG_NOTICE([]) + AC_MSG_ERROR([must give --enable-utf8proc or --disable-utf8proc]) + fi + ;; + *dragonfly*) + AC_MSG_RESULT(dragonfly) + PLATFORM=dragonfly + ;; + *linux*) + AC_MSG_RESULT(linux) + PLATFORM=linux + ;; + *freebsd*) + AC_MSG_RESULT(freebsd) + PLATFORM=freebsd + ;; + *netbsd*) + AC_MSG_RESULT(netbsd) + PLATFORM=netbsd + ;; + *openbsd*) + AC_MSG_RESULT(openbsd) + PLATFORM=openbsd + ;; + *sunos*) + AC_MSG_RESULT(sunos) + PLATFORM=sunos + ;; + *solaris*) + AC_MSG_RESULT(sunos) + PLATFORM=sunos + case `/usr/bin/nroff --version 2>&1` in + *GNU*) + # Solaris 11.4 and later use GNU groff. + MANFORMAT=mdoc + ;; + *) + # Solaris 2.0 to 11.3 use AT&T nroff. + MANFORMAT=man + ;; + esac + ;; + *hpux*) + AC_MSG_RESULT(hpux) + PLATFORM=hpux + ;; + *cygwin*|*msys*) + AC_MSG_RESULT(cygwin) + PLATFORM=cygwin + ;; + *haiku*) + AC_MSG_RESULT(haiku) + PLATFORM=haiku + ;; + *) + AC_MSG_RESULT(unknown) + PLATFORM=unknown + ;; +esac +AC_SUBST(PLATFORM) +AM_CONDITIONAL(IS_AIX, test "x$PLATFORM" = xaix) +AM_CONDITIONAL(IS_DARWIN, test "x$PLATFORM" = xdarwin) +AM_CONDITIONAL(IS_DRAGONFLY, test "x$PLATFORM" = xdragonfly) +AM_CONDITIONAL(IS_LINUX, test "x$PLATFORM" = xlinux) +AM_CONDITIONAL(IS_FREEBSD, test "x$PLATFORM" = xfreebsd) +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 +# variables. +AC_SUBST(AM_CPPFLAGS) +CPPFLAGS="$SAVED_CPPFLAGS" +AC_SUBST(AM_CFLAGS) +CFLAGS="$SAVED_CFLAGS" +AC_SUBST(AM_LDFLAGS) +LDFLAGS="$SAVED_LDFLAGS" + +# autoconf should create a Makefile. +AC_CONFIG_FILES(Makefile) +AC_OUTPUT |