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