1# configure.ac 2 3AC_INIT([tmux], 3.3a) 4AC_PREREQ([2.60]) 5 6AC_CONFIG_AUX_DIR(etc) 7AC_CONFIG_LIBOBJ_DIR(compat) 8AM_INIT_AUTOMAKE([foreign subdir-objects]) 9 10AC_CANONICAL_HOST 11 12# When CFLAGS isn't set at this stage and gcc is detected by the macro below, 13# autoconf will automatically use CFLAGS="-O2 -g". Prevent that by using an 14# empty default. 15: ${CFLAGS=""} 16 17# Save user CPPFLAGS, CFLAGS and LDFLAGS. We need to change them because 18# AC_CHECK_HEADER doesn't give us any other way to update the include 19# paths. But for Makefile.am we want to use AM_CPPFLAGS and friends. 20SAVED_CFLAGS="$CFLAGS" 21SAVED_CPPFLAGS="$CPPFLAGS" 22SAVED_LDFLAGS="$LDFLAGS" 23 24# Is this oss-fuzz build? 25AC_ARG_ENABLE( 26 fuzzing, 27 AS_HELP_STRING(--enable-fuzzing, build fuzzers) 28) 29AC_ARG_VAR( 30 FUZZING_LIBS, 31 AS_HELP_STRING(libraries to link fuzzing targets with) 32) 33 34# Set up convenient fuzzing defaults before initializing compiler. 35if test "x$enable_fuzzing" = xyes; then 36 AC_DEFINE(NEED_FUZZING) 37 test "x$CC" = x && CC=clang 38 test "x$FUZZING_LIBS" = x && \ 39 FUZZING_LIBS="-fsanitize=fuzzer" 40 test "x$SAVED_CFLAGS" = x && \ 41 AM_CFLAGS="-g -fsanitize=fuzzer-no-link,address" 42fi 43 44# Set up the compiler in two different ways and say yes we may want to install. 45AC_PROG_CC 46AM_PROG_CC_C_O 47AC_PROG_CC_C99 48AC_PROG_CPP 49AC_PROG_EGREP 50AC_PROG_INSTALL 51AC_PROG_YACC 52PKG_PROG_PKG_CONFIG 53AC_USE_SYSTEM_EXTENSIONS 54 55# Default tmux.conf goes in /etc not ${prefix}/etc. 56test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc 57 58# Is this --enable-debug? 59case "x$VERSION" in xnext*) enable_debug=yes;; esac 60AC_ARG_ENABLE( 61 debug, 62 AS_HELP_STRING(--enable-debug, enable debug build flags), 63) 64AM_CONDITIONAL(IS_DEBUG, test "x$enable_debug" = xyes) 65 66# Is this a static build? 67AC_ARG_ENABLE( 68 static, 69 AS_HELP_STRING(--enable-static, create a static build) 70) 71if test "x$enable_static" = xyes; then 72 case "$host_os" in 73 *darwin*) 74 AC_MSG_ERROR([static linking is not supported on macOS]) 75 ;; 76 esac 77 test "x$PKG_CONFIG" != x && PKG_CONFIG="$PKG_CONFIG --static" 78 AM_LDFLAGS="-static $AM_LDFLAGS" 79 LDFLAGS="$AM_LDFLAGS $SAVED_LDFLAGS" 80fi 81 82# Allow default TERM to be set. 83AC_ARG_WITH( 84 TERM, 85 AS_HELP_STRING(--with-TERM, set default TERM), 86 [DEFAULT_TERM=$withval], 87 [DEFAULT_TERM=] 88) 89case "x$DEFAULT_TERM" in 90 xscreen*|xtmux*|x) 91 ;; 92 *) 93 AC_MSG_ERROR("unsuitable TERM (must be screen* or tmux*)") 94 ;; 95esac 96 97# Do we need fuzzers? 98AM_CONDITIONAL(NEED_FUZZING, test "x$enable_fuzzing" = xyes) 99 100# Is this gcc? 101AM_CONDITIONAL(IS_GCC, test "x$GCC" = xyes -a "x$enable_fuzzing" != xyes) 102 103# Is this Sun CC? 104AC_EGREP_CPP( 105 yes, 106 [ 107 #ifdef __SUNPRO_C 108 yes 109 #endif 110 ], 111 found_suncc=yes, 112 found_suncc=no 113) 114AM_CONDITIONAL(IS_SUNCC, test "x$found_suncc" = xyes) 115 116# Check for various headers. Alternatives included from compat.h. 117AC_CHECK_HEADERS([ \ 118 bitstring.h \ 119 dirent.h \ 120 fcntl.h \ 121 inttypes.h \ 122 libproc.h \ 123 libutil.h \ 124 ndir.h \ 125 paths.h \ 126 pty.h \ 127 stdint.h \ 128 sys/dir.h \ 129 sys/ndir.h \ 130 sys/tree.h \ 131 ucred.h \ 132 util.h \ 133]) 134 135# Look for sys_signame. 136AC_SEARCH_LIBS(sys_signame, , AC_DEFINE(HAVE_SYS_SIGNAME)) 137 138# Look for fmod. 139AC_CHECK_LIB(m, fmod) 140 141# Look for library needed for flock. 142AC_SEARCH_LIBS(flock, bsd) 143 144# Check for functions that are replaced or omitted. 145AC_CHECK_FUNCS([ \ 146 dirfd \ 147 flock \ 148 prctl \ 149 proc_pidinfo \ 150 getpeerucred \ 151 sysconf \ 152]) 153 154# Check for functions with a compatibility implementation. 155AC_REPLACE_FUNCS([ \ 156 asprintf \ 157 cfmakeraw \ 158 clock_gettime \ 159 closefrom \ 160 explicit_bzero \ 161 fgetln \ 162 freezero \ 163 getdtablecount \ 164 getdtablesize \ 165 getpeereid \ 166 getline \ 167 getprogname \ 168 memmem \ 169 setenv \ 170 setproctitle \ 171 strcasestr \ 172 strlcat \ 173 strlcpy \ 174 strndup \ 175 strsep \ 176]) 177AC_FUNC_STRNLEN 178 179# Check if strtonum works. 180AC_MSG_CHECKING([for working strtonum]) 181AC_RUN_IFELSE([AC_LANG_PROGRAM( 182 [#include <stdlib.h>], 183 [return (strtonum("0", 0, 1, NULL) == 0 ? 0 : 1);] 184 )], 185 [AC_DEFINE(HAVE_STRTONUM) AC_MSG_RESULT(yes)], 186 [AC_LIBOBJ(strtonum) AC_MSG_RESULT(no)], 187 [AC_LIBOBJ(strtonum) AC_MSG_RESULT(no)] 188) 189 190# Clang sanitizers wrap reallocarray even if it isn't available on the target 191# system. When compiled it always returns NULL and crashes the program. To 192# detect this we need a more complicated test. 193AC_MSG_CHECKING([for working reallocarray]) 194AC_RUN_IFELSE([AC_LANG_PROGRAM( 195 [#include <stdlib.h>], 196 [return (reallocarray(NULL, 1, 1) == NULL);] 197 )], 198 AC_MSG_RESULT(yes), 199 [AC_LIBOBJ(reallocarray) AC_MSG_RESULT([no])], 200 [AC_LIBOBJ(reallocarray) AC_MSG_RESULT([no])] 201) 202AC_MSG_CHECKING([for working recallocarray]) 203AC_RUN_IFELSE([AC_LANG_PROGRAM( 204 [#include <stdlib.h>], 205 [return (recallocarray(NULL, 1, 1, 1) == NULL);] 206 )], 207 AC_MSG_RESULT(yes), 208 [AC_LIBOBJ(recallocarray) AC_MSG_RESULT([no])], 209 [AC_LIBOBJ(recallocarray) AC_MSG_RESULT([no])] 210) 211 212# Look for clock_gettime. Must come before event_init. 213AC_SEARCH_LIBS(clock_gettime, rt) 214 215# Always use our getopt because 1) glibc's doesn't enforce argument order 2) 216# musl does not set optarg to NULL for flags without arguments (although it is 217# not required to, but it is helpful) 3) there are probably other weird 218# implementations. 219AC_LIBOBJ(getopt) 220 221# Look for libevent. Try libevent_core or libevent with pkg-config first then 222# look for the library. 223PKG_CHECK_MODULES( 224 LIBEVENT_CORE, 225 [libevent_core >= 2], 226 [ 227 AM_CPPFLAGS="$LIBEVENT_CORE_CFLAGS $AM_CPPFLAGS" 228 CPPFLAGS="$AM_CPPFLAGS $SAVED_CPPFLAGS" 229 LIBS="$LIBEVENT_CORE_LIBS $LIBS" 230 found_libevent=yes 231 ], 232 found_libevent=no 233) 234if test x$found_libevent = xno; then 235 PKG_CHECK_MODULES( 236 LIBEVENT, 237 [libevent >= 2], 238 [ 239 AM_CPPFLAGS="$LIBEVENT_CFLAGS $AM_CPPFLAGS" 240 CPPFLAGS="$AM_CPPFLAGS $SAVED_CPPFLAGS" 241 LIBS="$LIBEVENT_LIBS $LIBS" 242 found_libevent=yes 243 ], 244 found_libevent=no 245 ) 246fi 247if test x$found_libevent = xno; then 248 AC_SEARCH_LIBS( 249 event_init, 250 [event_core event event-1.4], 251 found_libevent=yes, 252 found_libevent=no 253 ) 254fi 255AC_CHECK_HEADER( 256 event2/event.h, 257 AC_DEFINE(HAVE_EVENT2_EVENT_H), 258 [ 259 AC_CHECK_HEADER( 260 event.h, 261 AC_DEFINE(HAVE_EVENT_H), 262 found_libevent=no 263 ) 264 ] 265) 266if test "x$found_libevent" = xno; then 267 AC_MSG_ERROR("libevent not found") 268fi 269 270# Look for ncurses or curses. Try pkg-config first then directly for the 271# library. 272PKG_CHECK_MODULES( 273 LIBTINFO, 274 tinfo, 275 [ 276 AM_CPPFLAGS="$LIBTINFO_CFLAGS $AM_CPPFLAGS" 277 CPPFLAGS="$LIBTINFO_CFLAGS $SAVED_CPPFLAGS" 278 LIBS="$LIBTINFO_LIBS $LIBS" 279 found_ncurses=yes 280 ], 281 found_ncurses=no 282) 283if test "x$found_ncurses" = xno; then 284 PKG_CHECK_MODULES( 285 LIBNCURSES, 286 ncurses, 287 [ 288 AM_CPPFLAGS="$LIBNCURSES_CFLAGS $AM_CPPFLAGS" 289 CPPFLAGS="$LIBNCURSES_CFLAGS $SAVED_CPPFLAGS" 290 LIBS="$LIBNCURSES_LIBS $LIBS" 291 found_ncurses=yes 292 ], 293 found_ncurses=no 294 ) 295fi 296if test "x$found_ncurses" = xno; then 297 PKG_CHECK_MODULES( 298 LIBNCURSESW, 299 ncursesw, 300 [ 301 AM_CPPFLAGS="$LIBNCURSESW_CFLAGS $AM_CPPFLAGS" 302 CPPFLAGS="$LIBNCURSESW_CFLAGS $SAVED_CPPFLAGS" 303 LIBS="$LIBNCURSESW_LIBS $LIBS" 304 found_ncurses=yes 305 ], 306 found_ncurses=no 307 ) 308fi 309if test "x$found_ncurses" = xno; then 310 AC_SEARCH_LIBS( 311 setupterm, 312 [tinfo ncurses ncursesw], 313 found_ncurses=yes, 314 found_ncurses=no 315 ) 316 if test "x$found_ncurses" = xyes; then 317 AC_CHECK_HEADER( 318 ncurses.h, 319 LIBS="$LIBS -lncurses", 320 found_ncurses=no 321 ) 322 fi 323fi 324if test "x$found_ncurses" = xyes; then 325 CPPFLAGS="$CPPFLAGS -DHAVE_NCURSES_H" 326 AC_DEFINE(HAVE_NCURSES_H) 327else 328 AC_CHECK_LIB( 329 curses, 330 setupterm, 331 found_curses=yes, 332 found_curses=no 333 ) 334 AC_CHECK_HEADER( 335 curses.h, 336 , 337 found_curses=no 338 ) 339 if test "x$found_curses" = xyes; then 340 LIBS="$LIBS -lcurses" 341 CPPFLAGS="$CPPFLAGS -DHAVE_CURSES_H" 342 AC_DEFINE(HAVE_CURSES_H) 343 else 344 AC_MSG_ERROR("curses not found") 345 fi 346fi 347 348# Look for utempter. 349AC_ARG_ENABLE( 350 utempter, 351 AS_HELP_STRING(--enable-utempter, use utempter if it is installed) 352) 353if test "x$enable_utempter" = xyes; then 354 AC_CHECK_HEADER(utempter.h, enable_utempter=yes, enable_utempter=no) 355 if test "x$enable_utempter" = xyes; then 356 AC_SEARCH_LIBS( 357 utempter_add_record, 358 utempter, 359 enable_utempter=yes, 360 enable_utempter=no 361 ) 362 fi 363 if test "x$enable_utempter" = xyes; then 364 AC_DEFINE(HAVE_UTEMPTER) 365 else 366 AC_MSG_ERROR("utempter not found") 367 fi 368fi 369 370# Look for utf8proc. 371AC_ARG_ENABLE( 372 utf8proc, 373 AS_HELP_STRING(--enable-utf8proc, use utf8proc if it is installed) 374) 375if test "x$enable_utf8proc" = xyes; then 376 AC_CHECK_HEADER(utf8proc.h, enable_utf8proc=yes, enable_utf8proc=no) 377 if test "x$enable_utf8proc" = xyes; then 378 AC_SEARCH_LIBS( 379 utf8proc_charwidth, 380 utf8proc, 381 enable_utf8proc=yes, 382 enable_utf8proc=no 383 ) 384 fi 385 if test "x$enable_utf8proc" = xyes; then 386 AC_DEFINE(HAVE_UTF8PROC) 387 else 388 AC_MSG_ERROR("utf8proc not found") 389 fi 390fi 391AM_CONDITIONAL(HAVE_UTF8PROC, [test "x$enable_utf8proc" = xyes]) 392 393# Check for systemd support. 394AC_ARG_ENABLE( 395 systemd, 396 AS_HELP_STRING(--enable-systemd, enable systemd integration) 397) 398if test x"$enable_systemd" = xyes; then 399 PKG_CHECK_MODULES( 400 SYSTEMD, 401 libsystemd, 402 [ 403 AM_CPPFLAGS="$SYSTEMD_CFLAGS $AM_CPPFLAGS" 404 CPPFLAGS="$AM_CPPFLAGS $SAVED_CPPFLAGS" 405 LIBS="$SYSTEMD_LIBS $LIBS" 406 found_systemd=yes 407 ], 408 found_systemd=no 409 ) 410 if test "x$found_systemd" = xyes; then 411 AC_DEFINE(HAVE_SYSTEMD) 412 else 413 AC_MSG_ERROR("systemd not found") 414 fi 415fi 416AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$found_systemd" = xyes]) 417 418# Check for b64_ntop. If we have b64_ntop, we assume b64_pton as well. 419AC_MSG_CHECKING(for b64_ntop) 420 AC_LINK_IFELSE([AC_LANG_PROGRAM( 421 [ 422 #include <sys/types.h> 423 #include <netinet/in.h> 424 #include <resolv.h> 425 ], 426 [ 427 b64_ntop(NULL, 0, NULL, 0); 428 ])], 429 found_b64_ntop=yes, 430 found_b64_ntop=no 431) 432AC_MSG_RESULT($found_b64_ntop) 433OLD_LIBS="$LIBS" 434if test "x$found_b64_ntop" = xno; then 435 AC_MSG_CHECKING(for b64_ntop with -lresolv) 436 LIBS="$OLD_LIBS -lresolv" 437 AC_LINK_IFELSE([AC_LANG_PROGRAM( 438 [ 439 #include <sys/types.h> 440 #include <netinet/in.h> 441 #include <resolv.h> 442 ], 443 [ 444 b64_ntop(NULL, 0, NULL, 0); 445 ])], 446 found_b64_ntop=yes, 447 found_b64_ntop=no 448 ) 449 AC_MSG_RESULT($found_b64_ntop) 450fi 451if test "x$found_b64_ntop" = xno; then 452 AC_MSG_CHECKING(for b64_ntop with -lnetwork) 453 LIBS="$OLD_LIBS -lnetwork" 454 AC_LINK_IFELSE([AC_LANG_PROGRAM( 455 [ 456 #include <sys/types.h> 457 #include <netinet/in.h> 458 #include <resolv.h> 459 ], 460 [ 461 b64_ntop(NULL, 0, NULL, 0); 462 ])], 463 found_b64_ntop=yes, 464 found_b64_ntop=no 465 ) 466 AC_MSG_RESULT($found_b64_ntop) 467fi 468if test "x$found_b64_ntop" = xyes; then 469 AC_DEFINE(HAVE_B64_NTOP) 470else 471 LIBS="$OLD_LIBS" 472 AC_LIBOBJ(base64) 473fi 474 475# Look for networking libraries. 476AC_SEARCH_LIBS(inet_ntoa, nsl) 477AC_SEARCH_LIBS(socket, socket) 478AC_CHECK_LIB(xnet, socket) 479 480# Check if using glibc and have malloc_trim(3). The glibc free(3) is pretty bad 481# about returning memory to the kernel unless the application tells it when to 482# with malloc_trim(3). 483AC_MSG_CHECKING(if free doesn't work very well) 484AC_LINK_IFELSE([AC_LANG_SOURCE( 485 [ 486 #include <stdlib.h> 487 #ifdef __GLIBC__ 488 #include <malloc.h> 489 int main(void) { 490 malloc_trim (0); 491 exit(0); 492 } 493 #else 494 no 495 #endif 496 ])], 497 found_malloc_trim=yes, 498 found_malloc_trim=no 499) 500AC_MSG_RESULT($found_malloc_trim) 501if test "x$found_malloc_trim" = xyes; then 502 AC_DEFINE(HAVE_MALLOC_TRIM) 503fi 504 505# Check for CMSG_DATA. On some platforms like HP-UX this requires UNIX 95 506# (_XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED) (see xopen_networking(7)). On 507# others, UNIX 03 (_XOPEN_SOURCE 600, see standards(7) on Solaris). 508XOPEN_DEFINES= 509AC_MSG_CHECKING(for CMSG_DATA) 510AC_EGREP_CPP( 511 yes, 512 [ 513 #include <sys/socket.h> 514 #ifdef CMSG_DATA 515 yes 516 #endif 517 ], 518 found_cmsg_data=yes, 519 found_cmsg_data=no 520) 521AC_MSG_RESULT($found_cmsg_data) 522if test "x$found_cmsg_data" = xno; then 523 AC_MSG_CHECKING(if CMSG_DATA needs _XOPEN_SOURCE_EXTENDED) 524 AC_EGREP_CPP( 525 yes, 526 [ 527 #define _XOPEN_SOURCE 1 528 #define _XOPEN_SOURCE_EXTENDED 1 529 #include <sys/socket.h> 530 #ifdef CMSG_DATA 531 yes 532 #endif 533 ], 534 found_cmsg_data=yes, 535 found_cmsg_data=no 536 ) 537 AC_MSG_RESULT($found_cmsg_data) 538 if test "x$found_cmsg_data" = xyes; then 539 XOPEN_DEFINES="-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED" 540 fi 541fi 542if test "x$found_cmsg_data" = xno; then 543 AC_MSG_CHECKING(if CMSG_DATA needs _XOPEN_SOURCE 600) 544 AC_EGREP_CPP( 545 yes, 546 [ 547 #define _XOPEN_SOURCE 600 548 #include <sys/socket.h> 549 #ifdef CMSG_DATA 550 yes 551 #endif 552 ], 553 found_cmsg_data=yes, 554 found_cmsg_data=no 555 ) 556 AC_MSG_RESULT($found_cmsg_data) 557 if test "x$found_cmsg_data" = xyes; then 558 XOPEN_DEFINES="-D_XOPEN_SOURCE=600" 559 else 560 AC_MSG_ERROR("CMSG_DATA not found") 561 fi 562fi 563AC_SUBST(XOPEN_DEFINES) 564 565# Look for err and friends in err.h. 566AC_CHECK_FUNC(err, found_err_h=yes, found_err_h=no) 567AC_CHECK_FUNC(errx, , found_err_h=no) 568AC_CHECK_FUNC(warn, , found_err_h=no) 569AC_CHECK_FUNC(warnx, , found_err_h=no) 570if test "x$found_err_h" = xyes; then 571 AC_CHECK_HEADER(err.h, , found_err_h=no) 572else 573 AC_LIBOBJ(err) 574fi 575 576# Look for imsg_init in libutil. 577AC_SEARCH_LIBS(imsg_init, util, found_imsg_init=yes, found_imsg_init=no) 578if test "x$found_imsg_init" = xyes; then 579 AC_DEFINE(HAVE_IMSG) 580else 581 AC_LIBOBJ(imsg) 582 AC_LIBOBJ(imsg-buffer) 583fi 584 585# Look for daemon, compat/daemon.c used if missing. Solaris 10 has it in 586# libresolv, but no declaration anywhere, so check for declaration as well as 587# function. 588AC_CHECK_FUNC(daemon, found_daemon=yes, found_daemon=no) 589AC_CHECK_DECL( 590 daemon, 591 , 592 found_daemon=no, 593 [ 594 #include <stdlib.h> 595 #include <unistd.h> 596 ] 597) 598if test "x$found_daemon" = xyes; then 599 AC_DEFINE(HAVE_DAEMON) 600else 601 AC_LIBOBJ(daemon) 602fi 603 604# Look for stravis, compat/{vis,unvis}.c used if missing. 605AC_CHECK_FUNC(stravis, found_stravis=yes, found_stravis=no) 606if test "x$found_stravis" = xyes; then 607 AC_MSG_CHECKING(if strnvis is broken) 608 AC_EGREP_HEADER([strnvis\(char \*, const char \*, size_t, int\)], 609 vis.h, 610 AC_MSG_RESULT(no), 611 [found_stravis=no]) 612 if test "x$found_stravis" = xno; then 613 AC_MSG_RESULT(yes) 614 fi 615fi 616if test "x$found_stravis" = xyes; then 617 AC_CHECK_DECL( 618 VIS_DQ, 619 , 620 found_stravis=no, 621 [ 622 #include <stdlib.h> 623 #include <vis.h> 624 ] 625) 626fi 627if test "x$found_stravis" = xyes; then 628 AC_DEFINE(HAVE_VIS) 629else 630 AC_LIBOBJ(vis) 631 AC_LIBOBJ(unvis) 632fi 633 634# Look for fdforkpty and forkpty in libutil. 635AC_SEARCH_LIBS(fdforkpty, util, found_fdforkpty=yes, found_fdforkpty=no) 636if test "x$found_fdforkpty" = xyes; then 637 AC_DEFINE(HAVE_FDFORKPTY) 638else 639 AC_LIBOBJ(fdforkpty) 640fi 641AC_SEARCH_LIBS(forkpty, util, found_forkpty=yes, found_forkpty=no) 642if test "x$found_forkpty" = xyes; then 643 AC_DEFINE(HAVE_FORKPTY) 644fi 645AM_CONDITIONAL(NEED_FORKPTY, test "x$found_forkpty" = xno) 646 647# Look for kinfo_getfile in libutil. 648AC_SEARCH_LIBS(kinfo_getfile, [util util-freebsd]) 649 650# Look for a suitable queue.h. 651AC_CHECK_DECL( 652 TAILQ_CONCAT, 653 found_queue_h=yes, 654 found_queue_h=no, 655 [#include <sys/queue.h>] 656) 657AC_CHECK_DECL( 658 TAILQ_PREV, 659 , 660 found_queue_h=no, 661 [#include <sys/queue.h>] 662) 663AC_CHECK_DECL( 664 TAILQ_REPLACE, 665 , 666 found_queue_h=no, 667 [#include <sys/queue.h>] 668) 669if test "x$found_queue_h" = xyes; then 670 AC_DEFINE(HAVE_QUEUE_H) 671fi 672 673# Look for __progname. 674AC_MSG_CHECKING(for __progname) 675AC_LINK_IFELSE([AC_LANG_SOURCE( 676 [ 677 #include <stdio.h> 678 #include <stdlib.h> 679 extern char *__progname; 680 int main(void) { 681 const char *cp = __progname; 682 printf("%s\n", cp); 683 exit(0); 684 } 685 ])], 686 [AC_DEFINE(HAVE___PROGNAME) AC_MSG_RESULT(yes)], 687 AC_MSG_RESULT(no) 688) 689 690# Look for program_invocation_short_name. 691AC_MSG_CHECKING(for program_invocation_short_name) 692AC_LINK_IFELSE([AC_LANG_SOURCE( 693 [ 694 #include <errno.h> 695 #include <stdio.h> 696 #include <stdlib.h> 697 int main(void) { 698 const char *cp = program_invocation_short_name; 699 printf("%s\n", cp); 700 exit(0); 701 } 702 ])], 703 [AC_DEFINE(HAVE_PROGRAM_INVOCATION_SHORT_NAME) AC_MSG_RESULT(yes)], 704 AC_MSG_RESULT(no) 705) 706 707# Look for prctl(PR_SET_NAME). 708AC_CHECK_DECL( 709 PR_SET_NAME, 710 AC_DEFINE(HAVE_PR_SET_NAME), 711 , 712 [#include <sys/prctl.h>] 713) 714 715# Look for setsockopt(SO_PEERCRED). 716AC_CHECK_DECL( 717 SO_PEERCRED, 718 AC_DEFINE(HAVE_SO_PEERCRED), 719 , 720 [#include <sys/socket.h>] 721) 722 723# Look for fcntl(F_CLOSEM). 724AC_CHECK_DECL( 725 F_CLOSEM, 726 AC_DEFINE(HAVE_FCNTL_CLOSEM), 727 , 728 [#include <fcntl.h>] 729) 730 731# Look for /proc/$$. 732AC_MSG_CHECKING(for /proc/\$\$) 733if test -d /proc/$$; then 734 AC_DEFINE(HAVE_PROC_PID) 735 AC_MSG_RESULT(yes) 736else 737 AC_MSG_RESULT(no) 738fi 739 740# Try to figure out what the best value for TERM might be. 741if test "x$DEFAULT_TERM" = x; then 742 DEFAULT_TERM=screen 743 AC_MSG_CHECKING(TERM) 744 AC_RUN_IFELSE([AC_LANG_SOURCE( 745 [ 746 #include <stdio.h> 747 #include <stdlib.h> 748 #if defined(HAVE_CURSES_H) 749 #include <curses.h> 750 #elif defined(HAVE_NCURSES_H) 751 #include <ncurses.h> 752 #endif 753 #include <term.h> 754 int main(void) { 755 if (setupterm("screen-256color", -1, NULL) != OK) 756 exit(1); 757 exit(0); 758 } 759 ])], 760 [DEFAULT_TERM=screen-256color], 761 , 762 [DEFAULT_TERM=screen] 763 ) 764 AC_RUN_IFELSE([AC_LANG_SOURCE( 765 [ 766 #include <stdio.h> 767 #include <stdlib.h> 768 #if defined(HAVE_CURSES_H) 769 #include <curses.h> 770 #elif defined(HAVE_NCURSES_H) 771 #include <ncurses.h> 772 #endif 773 #include <term.h> 774 int main(void) { 775 if (setupterm("tmux", -1, NULL) != OK) 776 exit(1); 777 exit(0); 778 } 779 ])], 780 [DEFAULT_TERM=tmux], 781 , 782 [DEFAULT_TERM=screen] 783 ) 784 AC_RUN_IFELSE([AC_LANG_SOURCE( 785 [ 786 #include <stdio.h> 787 #include <stdlib.h> 788 #if defined(HAVE_CURSES_H) 789 #include <curses.h> 790 #elif defined(HAVE_NCURSES_H) 791 #include <ncurses.h> 792 #endif 793 #include <term.h> 794 int main(void) { 795 if (setupterm("tmux-256color", -1, NULL) != OK) 796 exit(1); 797 exit(0); 798 } 799 ])], 800 [DEFAULT_TERM=tmux-256color], 801 , 802 [DEFAULT_TERM=screen] 803 ) 804 AC_MSG_RESULT($DEFAULT_TERM) 805fi 806AC_SUBST(DEFAULT_TERM) 807 808# Man page defaults to mdoc. 809MANFORMAT=mdoc 810AC_SUBST(MANFORMAT) 811 812# Figure out the platform. 813AC_MSG_CHECKING(platform) 814case "$host_os" in 815 *aix*) 816 AC_MSG_RESULT(aix) 817 PLATFORM=aix 818 ;; 819 *darwin*) 820 AC_MSG_RESULT(darwin) 821 PLATFORM=darwin 822 # 823 # macOS uses __dead2 instead of __dead, like FreeBSD. But it defines 824 # __dead away so it needs to be removed before we can replace it. 825 # 826 AC_DEFINE(BROKEN___DEAD) 827 # 828 # macOS CMSG_FIRSTHDR is broken, so redefine it with a working one. 829 # daemon works but has some stupid side effects, so use our internal 830 # version which has a workaround. 831 # 832 AC_DEFINE(BROKEN_CMSG_FIRSTHDR) 833 AC_LIBOBJ(daemon) 834 AC_LIBOBJ(daemon-darwin) 835 # 836 # macOS wcwidth(3) is bad, so complain and suggest using utf8proc 837 # instead. 838 # 839 if test "x$enable_utf8proc" = x; then 840 AC_MSG_NOTICE([]) 841 AC_MSG_NOTICE([ macOS library support for Unicode is very poor,]) 842 AC_MSG_NOTICE([ particularly for complex codepoints like emojis;]) 843 AC_MSG_NOTICE([ to use these correctly, configuring with]) 844 AC_MSG_NOTICE([ --enable-utf8proc is recommended. To build]) 845 AC_MSG_NOTICE([ without anyway, use --disable-utf8proc]) 846 AC_MSG_NOTICE([]) 847 AC_MSG_ERROR([must give --enable-utf8proc or --disable-utf8proc]) 848 fi 849 ;; 850 *dragonfly*) 851 AC_MSG_RESULT(dragonfly) 852 PLATFORM=dragonfly 853 ;; 854 *linux*) 855 AC_MSG_RESULT(linux) 856 PLATFORM=linux 857 ;; 858 *freebsd*) 859 AC_MSG_RESULT(freebsd) 860 PLATFORM=freebsd 861 ;; 862 *netbsd*) 863 AC_MSG_RESULT(netbsd) 864 PLATFORM=netbsd 865 ;; 866 *openbsd*) 867 AC_MSG_RESULT(openbsd) 868 PLATFORM=openbsd 869 ;; 870 *sunos*) 871 AC_MSG_RESULT(sunos) 872 PLATFORM=sunos 873 ;; 874 *solaris*) 875 AC_MSG_RESULT(sunos) 876 PLATFORM=sunos 877 case `/usr/bin/nroff --version 2>&1` in 878 *GNU*) 879 # Solaris 11.4 and later use GNU groff. 880 MANFORMAT=mdoc 881 ;; 882 *) 883 # Solaris 2.0 to 11.3 use AT&T nroff. 884 MANFORMAT=man 885 ;; 886 esac 887 ;; 888 *hpux*) 889 AC_MSG_RESULT(hpux) 890 PLATFORM=hpux 891 ;; 892 *cygwin*|*msys*) 893 AC_MSG_RESULT(cygwin) 894 PLATFORM=cygwin 895 ;; 896 *haiku*) 897 AC_MSG_RESULT(haiku) 898 PLATFORM=haiku 899 ;; 900 *) 901 AC_MSG_RESULT(unknown) 902 PLATFORM=unknown 903 ;; 904esac 905AC_SUBST(PLATFORM) 906AM_CONDITIONAL(IS_AIX, test "x$PLATFORM" = xaix) 907AM_CONDITIONAL(IS_DARWIN, test "x$PLATFORM" = xdarwin) 908AM_CONDITIONAL(IS_DRAGONFLY, test "x$PLATFORM" = xdragonfly) 909AM_CONDITIONAL(IS_LINUX, test "x$PLATFORM" = xlinux) 910AM_CONDITIONAL(IS_FREEBSD, test "x$PLATFORM" = xfreebsd) 911AM_CONDITIONAL(IS_NETBSD, test "x$PLATFORM" = xnetbsd) 912AM_CONDITIONAL(IS_OPENBSD, test "x$PLATFORM" = xopenbsd) 913AM_CONDITIONAL(IS_SUNOS, test "x$PLATFORM" = xsunos) 914AM_CONDITIONAL(IS_HPUX, test "x$PLATFORM" = xhpux) 915AM_CONDITIONAL(IS_HAIKU, test "x$PLATFORM" = xhaiku) 916AM_CONDITIONAL(IS_UNKNOWN, test "x$PLATFORM" = xunknown) 917 918# Save our CFLAGS/CPPFLAGS/LDFLAGS for the Makefile and restore the old user 919# variables. 920AC_SUBST(AM_CPPFLAGS) 921CPPFLAGS="$SAVED_CPPFLAGS" 922AC_SUBST(AM_CFLAGS) 923CFLAGS="$SAVED_CFLAGS" 924AC_SUBST(AM_LDFLAGS) 925LDFLAGS="$SAVED_LDFLAGS" 926 927# autoconf should create a Makefile. 928AC_CONFIG_FILES(Makefile) 929AC_OUTPUT 930