configure.ac revision 128345
1# Process this file with autoconf to produce a configure script. 2 3# Copyright (C) 1984-2002 Mark Nudelman 4# 5# You may distribute under the terms of either the GNU General Public 6# License or the Less License, as specified in the README file. 7# 8# For more information about less, or for information on how to 9# contact the author, see the README file. 10 11# Autoconf initialization. 12AC_INIT(less, 1) 13AC_CONFIG_SRCDIR([forwback.c]) 14AC_CONFIG_HEADER([defines.h]) 15 16# Checks for programs. 17AC_PROG_CC 18AC_ISC_POSIX 19AC_PROG_GCC_TRADITIONAL 20AC_PROG_INSTALL 21 22# Checks for compilation model. 23AC_SYS_LARGEFILE 24 25# Checks for general libraries. 26AC_CHECK_LIB(xcurses, initscr, [have_xcurses=yes], [have_xcurses=no]) 27AC_CHECK_LIB(ncurses, initscr, [have_ncurses=yes], [have_ncurses=no]) 28AC_CHECK_LIB(curses, initscr, [have_curses=yes], [have_curses=no]) 29AC_CHECK_LIB(termcap, tgetent, [have_termcap=yes], [have_termcap=no]) 30AC_CHECK_LIB(termlib, tgetent, [have_termlib=yes], [have_termlib=no]) 31# Regular expressions (regcmp) are in -lgen on Solaris 2, 32# and in -lintl on SCO Unix. 33AC_CHECK_LIB(gen, regcmp) 34AC_CHECK_LIB(intl, regcmp) 35AC_CHECK_LIB(PW, regcmp) 36 37# Checks for terminal libraries 38AC_MSG_CHECKING([for working terminal libraries]) 39TERMLIBS= 40 41# Check for systems where curses is broken. 42curses_broken=0 43if test x`uname -s` = "xHP-UX" >/dev/null 2>&1; then 44if test x`uname -r` = "xB.11.00" >/dev/null 2>&1; then 45 curses_broken=1 46fi 47if test x`uname -r` = "xB.11.11" >/dev/null 2>&1; then 48 curses_broken=1 49fi 50fi 51 52if test $curses_broken = 0; then 53# -- Try xcurses. 54if test "x$TERMLIBS" = x; then 55 if test $have_xcurses = yes; then 56 TERMLIBS="-lxcurses" 57 SAVE_LIBS=$LIBS 58 LIBS="$LIBS $TERMLIBS" 59 AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);], 60 [termok=yes], [termok=no]) 61 LIBS=$SAVE_LIBS 62 if test $termok = no; then TERMLIBS=""; fi 63 fi 64fi 65 66# -- Try ncurses. 67if test "x$TERMLIBS" = x; then 68 if test $have_ncurses = yes; then 69 TERMLIBS="-lncurses" 70 SAVE_LIBS=$LIBS 71 LIBS="$LIBS $TERMLIBS" 72 AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);], 73 [termok=yes], [termok=no]) 74 LIBS=$SAVE_LIBS 75 if test $termok = no; then TERMLIBS=""; fi 76 fi 77fi 78 79# -- Try curses. 80if test "x$TERMLIBS" = x; then 81 if test $have_curses = yes; then 82 TERMLIBS="-lcurses" 83 SAVE_LIBS=$LIBS 84 LIBS="$LIBS $TERMLIBS" 85 AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);], 86 [termok=yes], [termok=no]) 87 LIBS=$SAVE_LIBS 88 if test $termok = no; then TERMLIBS=""; fi 89 fi 90fi 91 92# -- Try curses & termcap. 93if test "x$TERMLIBS" = x; then 94 if test $have_curses = yes; then 95 if test $have_termcap = yes; then 96 TERMLIBS="-lcurses -ltermcap" 97 SAVE_LIBS=$LIBS 98 LIBS="$LIBS $TERMLIBS" 99 AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);], 100 [termok=yes], [termok=no]) 101 LIBS=$SAVE_LIBS 102 if test $termok = no; then TERMLIBS=""; fi 103 fi 104 fi 105fi 106fi 107 108# -- Try termcap. 109if test "x$TERMLIBS" = x; then 110 if test $have_termcap = yes; then 111 TERMLIBS="-ltermcap" 112 SAVE_LIBS=$LIBS 113 LIBS="$LIBS $TERMLIBS" 114 AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);], 115 [termok=yes], [termok=no]) 116 LIBS=$SAVE_LIBS 117 if test $termok = no; then TERMLIBS=""; fi 118 fi 119fi 120 121# -- Try termlib. 122if test "x$TERMLIBS" = x; then 123 if test $have_termlib = yes; then 124 TERMLIBS="-lcurses -ltermlib" 125 SAVE_LIBS=$LIBS 126 LIBS="$LIBS $TERMLIBS" 127 AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);], 128 [termok=yes], [termok=no]) 129 LIBS=$SAVE_LIBS 130 if test $termok = no; then TERMLIBS=""; fi 131 fi 132fi 133 134if test "x$TERMLIBS" = x; then 135 AC_MSG_RESULT(Cannot find terminal libraries - configure failed) 136 exit 1 137fi 138AC_MSG_RESULT(using $TERMLIBS) 139LIBS="$LIBS $TERMLIBS" 140 141# Checks for header files. 142AC_HEADER_STDC 143AC_CHECK_HEADERS([ctype.h errno.h fcntl.h limits.h stdio.h stdlib.h string.h termcap.h termio.h termios.h time.h unistd.h values.h sys/ioctl.h sys/stream.h sys/ptem.h]) 144 145# Checks for typedefs, structures, and compiler characteristics. 146AC_HEADER_STAT 147AC_C_CONST 148AC_TYPE_OFF_T 149AC_TYPE_SIZE_T 150AC_HEADER_TIME 151 152# Autoheader templates for symbols defined later by AC_DEFINE. 153AH_TEMPLATE([HAVE_POSIX_REGCOMP], 154 [POSIX regcomp() and regex.h]) 155AH_TEMPLATE([HAVE_PCRE], 156 [PCRE (Perl-compatible regular expression) library]) 157AH_TEMPLATE([HAVE_RE_COMP], 158 [BSD re_comp()]) 159AH_TEMPLATE([HAVE_REGCMP], 160 [System V regcmp()]) 161AH_TEMPLATE([HAVE_V8_REGCOMP], 162 [Henry Spencer V8 regcomp() and regexp.h]) 163AH_TEMPLATE([NO_REGEX], 164 [pattern matching is supported, but without metacharacters.]) 165AH_TEMPLATE([HAVE_REGEXEC2], 166 []) 167AH_TEMPLATE([HAVE_VOID], 168 [Define HAVE_VOID if your compiler supports the "void" type.]) 169AH_TEMPLATE([HAVE_CONST], 170 [Define HAVE_CONST if your compiler supports the "const" modifier.]) 171AH_TEMPLATE([HAVE_TIME_T], 172 [Define HAVE_TIME_T if your system supports the "time_t" type.]) 173AH_TEMPLATE([HAVE_STRERROR], 174 [Define HAVE_STRERROR if you have the strerror() function.]) 175AH_TEMPLATE([HAVE_FILENO], 176 [Define HAVE_FILENO if you have the fileno() macro.]) 177AH_TEMPLATE([HAVE_ERRNO], 178 [Define HAVE_ERRNO if you have the errno variable.]) 179AH_TEMPLATE([MUST_DEFINE_ERRNO], 180 [Define MUST_DEFINE_ERRNO if you have errno but it is not define in errno.h.]) 181AH_TEMPLATE([HAVE_SYS_ERRLIST], 182 [Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable.]) 183AH_TEMPLATE([HAVE_OSPEED], 184 [Define HAVE_OSPEED if your termcap library has the ospeed variable.]) 185AH_TEMPLATE([MUST_DEFINE_OSPEED], 186 [Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined in termcap.h.]) 187AH_TEMPLATE([HAVE_LOCALE], 188 [Define HAVE_LOCALE if you have locale.h and setlocale.]) 189AH_TEMPLATE([HAVE_TERMIOS_FUNCS], 190 [Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr.]) 191AH_TEMPLATE([HAVE_UPPER_LOWER], 192 [Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower.]) 193AH_TEMPLATE([HAVE_SIGSET_T], 194 [Define HAVE_SIGSET_T you have the sigset_t type.]) 195AH_TEMPLATE([HAVE_SIGEMPTYSET], 196 [Define HAVE_SIGEMPTYSET if you have the sigemptyset macro.]) 197AH_TEMPLATE([EDIT_PGM], 198 [Define EDIT_PGM to your editor.]) 199 200# Checks for identifiers. 201AC_TYPE_OFF_T 202AC_MSG_CHECKING(for void) 203AC_TRY_COMPILE(, [void *foo = 0;], 204 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_VOID)], [AC_MSG_RESULT(no)]) 205AC_MSG_CHECKING(for const) 206AC_TRY_COMPILE(, [const int foo = 0;], 207 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CONST)], [AC_MSG_RESULT(no)]) 208AC_MSG_CHECKING(for time_t) 209AC_TRY_COMPILE([#include <time.h>], [time_t t = 0;], 210 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_TIME_T)], [AC_MSG_RESULT(no)]) 211 212# Checks for library functions. 213AC_TYPE_SIGNAL 214AC_CHECK_FUNCS([fsync memcpy popen _setjmp sigprocmask sigsetmask stat strchr strstr system]) 215 216# Some systems have termios.h but not the corresponding functions. 217AC_CHECK_FUNC(tcgetattr, AC_DEFINE(HAVE_TERMIOS_FUNCS)) 218 219AC_MSG_CHECKING(for fileno) 220AC_TRY_LINK([ 221#if HAVE_STDIO_H 222#include <stdio.h> 223#endif], [static int x; x = fileno(stdin);], 224 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FILENO)], [AC_MSG_RESULT(no)]) 225 226AC_MSG_CHECKING(for strerror) 227AC_TRY_LINK([ 228#if HAVE_STDIO_H 229#include <stdio.h> 230#endif 231#if HAVE_STRING_H 232#include <string.h> 233#endif 234#if HAVE_ERRNO_H 235#include <errno.h> 236#endif], [static char *x; x = strerror(0);], 237 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRERROR)], [AC_MSG_RESULT(no)]) 238 239AC_MSG_CHECKING(for sys_errlist) 240AC_TRY_LINK(, [extern char *sys_errlist[]; static char **x; x = sys_errlist;], 241 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_ERRLIST)], [AC_MSG_RESULT(no)]) 242 243AC_MSG_CHECKING(for sigset_t) 244AC_TRY_LINK([ 245#include <signal.h> 246], [sigset_t s; s = 0;], 247 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SIGSET_T)], [AC_MSG_RESULT(no)]) 248 249AC_MSG_CHECKING(for sigemptyset) 250AC_TRY_LINK([ 251#include <signal.h> 252], [sigset_t s; sigemptyset(&s);], 253 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SIGEMPTYSET)], [AC_MSG_RESULT(no)]) 254 255have_errno=no 256AC_MSG_CHECKING(for errno) 257AC_TRY_LINK([ 258#if HAVE_ERRNO_H 259#include <errno.h> 260#endif], [static int x; x = errno;], 261 [AC_MSG_RESULT(yes - in errno.h); AC_DEFINE(HAVE_ERRNO) have_errno=yes]) 262if test $have_errno = no; then 263AC_TRY_LINK([ 264#if HAVE_ERRNO_H 265#include <errno.h> 266#endif], [extern int errno; static int x; x = errno;], 267 [AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_ERRNO) AC_DEFINE(MUST_DEFINE_ERRNO)], 268 [AC_MSG_RESULT(no)]) 269fi 270 271AC_MSG_CHECKING(for locale) 272AC_TRY_LINK([#include <locale.h> 273#include <ctype.h>], [setlocale(LC_CTYPE,""); isprint(0); iscntrl(0);], 274 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_LOCALE)], [AC_MSG_RESULT(no)]) 275AC_MSG_CHECKING(for ctype functions) 276AC_TRY_LINK([ 277#if HAVE_CTYPE_H 278#include <ctype.h> 279#endif], [static int x; x = isupper(x); x = tolower(x); x = toupper(x);], 280 [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UPPER_LOWER)], [AC_MSG_RESULT(no)]) 281 282# Checks for external variable ospeed in the termcap library. 283have_ospeed=no 284AC_MSG_CHECKING(termcap for ospeed) 285AC_TRY_LINK([ 286#include <sys/types.h> 287#if HAVE_TERMIOS_H 288#include <termios.h> 289#endif 290#if HAVE_TERMCAP_H 291#include <termcap.h> 292#endif], [ospeed = 0;], 293[AC_MSG_RESULT(yes - in termcap.h); AC_DEFINE(HAVE_OSPEED) have_ospeed=yes]) 294if test $have_ospeed = no; then 295AC_TRY_LINK(, [extern short ospeed; ospeed = 0;], 296 [AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_OSPEED) AC_DEFINE(MUST_DEFINE_OSPEED)], 297 [AC_MSG_RESULT(no)]) 298fi 299 300# Checks for regular expression functions. 301have_regex=no 302have_posix_regex=unknown 303AC_MSG_CHECKING(for regcomp) 304 305WANT_REGEX=auto 306AC_ARG_WITH(regex, 307 [ --with-regex={auto,pcre,posix,regcmp,re_comp,regcomp,regcomp-local} Select a regular expression library [auto]], 308 WANT_REGEX="$withval") 309 310if test $have_regex = no; then 311if test $WANT_REGEX = auto -o $WANT_REGEX = posix; then 312# Some versions of Solaris have a regcomp() function, but it doesn't work! 313# So we run a test program. If we're cross-compiling, do it the old way. 314AC_TRY_RUN([ 315#include <sys/types.h> 316#include <regex.h> 317main() { regex_t r; regmatch_t rm; char *text = "xabcy"; 318if (regcomp(&r, "abc", 0)) exit(1); 319if (regexec(&r, text, 1, &rm, 0)) exit(1); 320#ifndef __WATCOMC__ 321if (rm.rm_so != 1) exit(1); /* check for correct offset */ 322#else 323if (rm.rm_sp != text + 1) exit(1); /* check for correct offset */ 324#endif 325exit(0); }], 326 have_posix_regex=yes, have_posix_regex=no, have_posix_regex=unknown) 327if test $have_posix_regex = yes; then 328 AC_MSG_RESULT(using POSIX regcomp) 329 AC_DEFINE(HAVE_POSIX_REGCOMP) 330 have_regex=yes 331elif test $have_posix_regex = unknown; then 332 AC_TRY_LINK([ 333#include <sys/types.h> 334#include <regex.h>], 335 [regex_t *r; regfree(r);], 336 AC_MSG_RESULT(using POSIX regcomp) 337 AC_DEFINE(HAVE_POSIX_REGCOMP) have_regex=yes) 338else 339 AC_MSG_RESULT(no) 340fi 341fi 342fi 343 344if test $have_regex = no; then 345if test $WANT_REGEX = auto -o $WANT_REGEX = pcre; then 346AC_CHECK_LIB(pcre, pcre_compile, 347[AC_MSG_RESULT(using pcre); AC_DEFINE(HAVE_PCRE) LIBS="$LIBS -lpcre" have_regex=yes], []) 348fi 349fi 350 351if test $have_regex = no; then 352if test $WANT_REGEX = auto -o $WANT_REGEX = regcmp; then 353AC_CHECK_FUNC(regcmp, 354AC_MSG_RESULT(using regcmp); AC_DEFINE(HAVE_REGCMP) have_regex=yes) 355fi 356fi 357 358if test $have_regex = no; then 359if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp; then 360AC_TRY_LINK([ 361#include "regexp.h"], [regcomp("");], 362AC_MSG_RESULT(using V8 regcomp); AC_DEFINE(HAVE_V8_REGCOMP) have_regex=yes) 363fi 364fi 365 366if test $have_regex = no && test -f ${srcdir}/regexp.c; then 367if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp-local; then 368AC_MSG_RESULT(using V8 regcomp -- local source); AC_DEFINE(HAVE_V8_REGCOMP) AC_DEFINE(HAVE_REGEXEC2) REGEX_O='regexp.$(O)' AC_SUBST(REGEX_O) have_regex=yes 369fi 370fi 371 372if test $have_regex = no; then 373if test $WANT_REGEX = auto -o $WANT_REGEX = re_comp; then 374AC_MSG_RESULT(using re_comp); AC_CHECK_FUNC(re_comp, AC_DEFINE(HAVE_RE_COMP) have_regex=yes) 375fi 376fi 377 378if test $have_regex = no; then 379AC_MSG_RESULT(cannot find regular expression library); AC_DEFINE(NO_REGEX) 380fi 381 382AC_ARG_WITH(editor, 383 [ --with-editor=PROGRAM use PROGRAM as the default editor [vi]], 384 AC_DEFINE_UNQUOTED(EDIT_PGM, "$withval"), AC_DEFINE(EDIT_PGM, "vi")) 385 386AH_TOP([ 387/* Unix definition file for less. -*- C -*- 388 * 389 * This file has 3 sections: 390 * User preferences. 391 * Settings always true on Unix. 392 * Settings automatically determined by configure. 393 * 394 * * * * * * WARNING * * * * * * 395 * If you edit defines.h by hand, do "touch stamp-h" before you run make 396 * so config.status doesn't overwrite your changes. 397 */ 398 399/* User preferences. */ 400 401/* 402 * SECURE is 1 if you wish to disable a bunch of features in order to 403 * be safe to run by unprivileged users. 404 */ 405#define SECURE 0 406 407/* 408 * SHELL_ESCAPE is 1 if you wish to allow shell escapes. 409 * (This is possible only if your system supplies the system() function.) 410 */ 411#define SHELL_ESCAPE (!SECURE) 412 413/* 414 * EXAMINE is 1 if you wish to allow examining files by name from within less. 415 */ 416#define EXAMINE (!SECURE) 417 418/* 419 * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key 420 * to complete filenames at prompts. 421 */ 422#define TAB_COMPLETE_FILENAME (!SECURE) 423 424/* 425 * CMD_HISTORY is 1 if you wish to allow keys to cycle through 426 * previous commands at prompts. 427 */ 428#define CMD_HISTORY 1 429 430/* 431 * HILITE_SEARCH is 1 if you wish to have search targets to be 432 * displayed in standout mode. 433 */ 434#define HILITE_SEARCH 1 435 436/* 437 * EDITOR is 1 if you wish to allow editor invocation (the "v" command). 438 * (This is possible only if your system supplies the system() function.) 439 * EDIT_PGM is the name of the (default) editor to be invoked. 440 */ 441#define EDITOR (!SECURE) 442 443/* 444 * TAGS is 1 if you wish to support tag files. 445 */ 446#define TAGS (!SECURE) 447 448/* 449 * USERFILE is 1 if you wish to allow a .less file to specify 450 * user-defined key bindings. 451 */ 452#define USERFILE (!SECURE) 453 454/* 455 * GLOB is 1 if you wish to have shell metacharacters expanded in filenames. 456 * This will generally work if your system provides the "popen" function 457 * and the "echo" shell command. 458 */ 459#define GLOB (!SECURE) 460 461/* 462 * PIPEC is 1 if you wish to have the "|" command 463 * which allows the user to pipe data into a shell command. 464 */ 465#define PIPEC (!SECURE) 466 467/* 468 * LOGFILE is 1 if you wish to allow the -l option (to create log files). 469 */ 470#define LOGFILE (!SECURE) 471 472/* 473 * GNU_OPTIONS is 1 if you wish to support the GNU-style command 474 * line options --help and --version. 475 */ 476#define GNU_OPTIONS 1 477 478/* 479 * ONLY_RETURN is 1 if you want RETURN to be the only input which 480 * will continue past an error message. 481 * Otherwise, any key will continue past an error message. 482 */ 483#define ONLY_RETURN 0 484 485/* 486 * LESSKEYFILE is the filename of the default lesskey output file 487 * (in the HOME directory). 488 * LESSKEYFILE_SYS is the filename of the system-wide lesskey output file. 489 * DEF_LESSKEYINFILE is the filename of the default lesskey input 490 * (in the HOME directory). 491 */ 492#define LESSKEYFILE ".less" 493#define LESSKEYFILE_SYS SYSDIR "/sysless" 494#define DEF_LESSKEYINFILE ".lesskey" 495 496 497/* Settings always true on Unix. */ 498 499/* 500 * Define MSDOS_COMPILER if compiling under Microsoft C. 501 */ 502#define MSDOS_COMPILER 0 503 504/* 505 * Pathname separator character. 506 */ 507#define PATHNAME_SEP "/" 508 509/* 510 * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>. 511 */ 512#define HAVE_SYS_TYPES_H 1 513 514/* 515 * Define if you have the <sgstat.h> header file. 516 */ 517#undef HAVE_SGSTAT_H 518 519/* 520 * HAVE_PERROR is 1 if your system has the perror() call. 521 * (Actually, if it has sys_errlist, sys_nerr and errno.) 522 */ 523#define HAVE_PERROR 1 524 525/* 526 * HAVE_TIME is 1 if your system has the time() call. 527 */ 528#define HAVE_TIME 1 529 530/* 531 * HAVE_SHELL is 1 if your system supports a SHELL command interpreter. 532 */ 533#define HAVE_SHELL 1 534 535/* 536 * Default shell metacharacters and meta-escape character. 537 */ 538#define DEF_METACHARS "; *?\t\n'\"()<>|&^`#\\" 539#define DEF_METAESCAPE "\\" 540 541/* 542 * HAVE_DUP is 1 if your system has the dup() call. 543 */ 544#define HAVE_DUP 1 545 546/* 547 * Sizes of various buffers. 548 */ 549#define CMDBUF_SIZE 512 /* Buffer for multichar commands */ 550#define UNGOT_SIZE 100 /* Max chars to unget() */ 551#define LINEBUF_SIZE 1024 /* Max size of line in input file */ 552#define OUTBUF_SIZE 1024 /* Output buffer */ 553#define PROMPT_SIZE 200 /* Max size of prompt string */ 554#define TERMBUF_SIZE 2048 /* Termcap buffer for tgetent */ 555#define TERMSBUF_SIZE 1024 /* Buffer to hold termcap strings */ 556#define TAGLINE_SIZE 512 /* Max size of line in tags file */ 557#define TABSTOP_MAX 32 /* Max number of custom tab stops */ 558 559/* Settings automatically determined by configure. */ 560]) 561 562AC_CONFIG_FILES([Makefile]) 563AC_OUTPUT 564