# # Patch by Hannes Reich (hannes@skynet.ie) 22-Jul-2005 # Resolves _some_ of the cross-compilation issues in screen's configure.in # --- screen-4.0.1/configure.in~configure +++ screen-4.0.1/configure.in @@ -37,6 +37,323 @@ VERSION="$rev.$vers.$pat" AC_NOTE(this is screen version $VERSION) AC_SUBST(VERSION) + +AH_TOP([ +/* Copyright (c) 1993-2000 + * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) + * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) + * Copyright (c) 1987 Oliver Laumann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program (see the file COPYING); if not, write to the + * Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + */ + + +/********************************************************************** + * + * User Configuration Section + */ + +/* + * Maximum of simultaneously allowed windows per screen session. + */ +#ifndef MAXWIN +# define MAXWIN 40 +#endif + +/* + * Define SOCKDIR to be the directory to contain the named sockets + * screen creates. This should be in a common subdirectory, such as + * /usr/local or /tmp. It makes things a little more secure if you + * choose a directory which is not writable by everyone or where the + * "sticky" bit is on, but this isn't required. + * If SOCKDIR is not defined screen will put the named sockets in + * the user's home directory. Notice that this can cause you problems + * if some user's HOME directories are AFS- or NFS-mounted. Especially + * AFS is unlikely to support named sockets. + * + * Screen will name the subdirectories "S-$USER" (e.g /tmp/S-davison). + */ +#undef SOCKDIR + +/* + * Define this if the SOCKDIR is not shared between hosts. + */ +#define SOCKDIR_IS_LOCAL_TO_HOST + +/* + * Screen sources two startup files. First a global file with a path + * specified here, second your local $HOME/.screenrc + * Don't define this, if you don't want it. + */ +#ifndef ETCSCREENRC +# define ETCSCREENRC "/usr/local/etc/screenrc" +#endif + +/* + * Screen can look for the environment variable $SYSSCREENRC and -if it + * exists- load the file specified in that variable as global screenrc. + * If you want to enable this feature, define ALLOW_SYSSCREENRC to one (1). + * Otherwise ETCSCREENRC is always loaded. + */ +#define ALLOW_SYSSCREENRC 1 + +/* + * Screen needs encoding files for the translation of utf8 + * into some encodings, e.g. JIS, BIG5. + * Only needed if FONT, ENCODINGS and UTF8 are defined. + */ +#ifndef SCREENENCODINGS +# define SCREENENCODINGS "/usr/local/lib/screen/encodings" +#endif +/* + * Define CHECKLOGIN to force Screen users to enter their Unix password + * in addition to the screen password. + * + * Define NOSYSLOG if yo do not have logging facilities. Currently + * syslog() will be used to trace ``su'' commands only. + */ +#define CHECKLOGIN 1 +#undef NOSYSLOG + + +/* + * define PTYMODE if you do not like the default of 0622, which allows + * public write to your pty. + * define PTYGROUP to some numerical group-id if you do not want the + * tty to be in "your" group. + * Note, screen is unable to change mode or group of the pty if it + * is not installed with sufficient privilege. (e.g. set-uid-root) + * define PTYROFS if the /dev/pty devices are mounted on a read-only + * filesystem so screen should not even attempt to set mode or group + * even if running as root (e.g. on TiVo). + */ +#undef PTYMODE +#undef PTYGROUP +#undef PTYROFS + +/* + * If screen is NOT installed set-uid root, screen can provide tty + * security by exclusively locking the ptys. While this keeps other + * users from opening your ptys, it also keeps your own subprocesses + * from being able to open /dev/tty. Define LOCKPTY to add this + * exclusive locking. + */ +#undef LOCKPTY + +/* + * If you'd rather see the status line on the first line of your + * terminal rather than the last, define TOPSTAT. + */ +#undef TOPSTAT + +/* + * define DETACH can detach a session. An absolute 'must'. + */ +#define DETACH + +/* + * here come the erlangen extensions to screen: + * define LOCK if you want to use a lock program for a screenlock. + * define PASSWORD for secure reattach of your screen. + * define COPY_PASTE to use the famous hacker's treasure zoo. + * define POW_DETACH to have a detach_and_logout key (requires DETACH). + * define REMOTE_DETACH (-d option) to move screen between terminals. + * define AUTO_NUKE to enable Tim MacKenzies clear screen nuking + * define PSEUDOS to allow window input/output filtering + * define MULTI to allow multiple attaches. + * define MULTIUSER to allow other users attach to your session + * (if they are in the acl, of course) + * define MAPKEYS to include input keyboard translation. + * define FONT to support ISO2022/alternet charset support + * define COLOR to include ansi color support. This may expose + * a bug in x11r6-color-xterm. + * define DW_CHARS to include support for double-width character + * sets. + * define ENCODINGS to include support for encodings like euc or big5. + * Needs FONT to work. + * define UTF8 if you want support for UTF-8 encoding. + * Needs FONT and ENCODINGS to work. + * define COLORS16 if you want 16 colors. + * Needs COLOR to work. + * define BUILTIN_TELNET to add telnet support to screen. + * Syntax: screen //telnet host [port] + * define RXVT_OSC if you want support for rxvts special + * change fgcolor/bgcolor/bgpicture sequences + */ +#undef SIMPLESCREEN +#ifndef SIMPLESCREEN +# define LOCK +# define PASSWORD +# define COPY_PASTE +# define REMOTE_DETACH +# define POW_DETACH +# define AUTO_NUKE +# define PSEUDOS +# define MULTI +# define MULTIUSER +# define MAPKEYS +# define COLOR +# define FONT +# define DW_CHARS +# define ENCODINGS +# define UTF8 +# define COLORS16 +# define ZMODEM +# define BLANKER_PRG +#endif /* SIMPLESCREEN */ + +#undef BUILTIN_TELNET +#undef RXVT_OSC +#undef COLORS256 + + +/* + * If you have a braille display you should define HAVE_BRAILLE. + * The code inside #ifdef HAVE_BRAILLE was contributed by Hadi Bargi + * Rangin (bargi@dots.physics.orst.edu). + * WARNING: this is more or less unsupported code, it may be full of + * bugs leading to security holes, enable at your own risk! + */ +#undef HAVE_BRAILLE + + +/* + * As error messages are mostly meaningless to the user, we + * try to throw out phrases that are somewhat more familiar + * to ...well, at least familiar to us NetHack players. + */ +#ifndef NONETHACK +# define NETHACK +#endif /* NONETHACK */ + +/* + * If screen is installed with permissions to update /etc/utmp (such + * as if it is installed set-uid root), define UTMPOK. + */ +#define UTMPOK + +/* Set LOGINDEFAULT to one (1) + * if you want entries added to /etc/utmp by default, else set it to + * zero (0). + * LOGINDEFAULT will be one (1) whenever LOGOUTOK is undefined! + */ +#define LOGINDEFAULT 1 + +/* Set LOGOUTOK to one (1) + * if you want the user to be able to log her/his windows out. + * (Meaning: They are there, but not visible in /etc/utmp). + * Disabling this feature only makes sense if you have a secure /etc/utmp + * database. + * Negative examples: suns usually have a world writable utmp file, + * xterm will run perfectly without s-bit. + * + * If LOGOUTOK is undefined and UTMPOK is defined, all windows are + * initially and permanently logged in. + * + * Set CAREFULUTMP to one (1) if you want that users have at least one + * window per screen session logged in. + */ +#define LOGOUTOK 1 +#undef CAREFULUTMP + + +/* + * If UTMPOK is defined and your system (incorrectly) counts logins by + * counting non-null entries in /etc/utmp (instead of counting non-null + * entries with no hostname that are not on a pseudo tty), define USRLIMIT + * to have screen put an upper-limit on the number of entries to write + * into /etc/utmp. This helps to keep you from exceeding a limited-user + * license. + */ +#undef USRLIMIT + +/* + * both must be defined if you want to favor tcsendbreak over + * other calls to generate a break condition on serial lines. + * (Do not bother, if you are not using plain tty windows.) + */ +#define POSIX_HAS_A_GOOD_TCSENDBREAK +#define SUNOS4_AND_WE_TRUST_TCSENDBREAK + +/* + * to lower the interrupt load on the host machine, you may want to + * adjust the VMIN and VTIME settings used for plain tty windows. + * See the termio(4) manual page (Non-Canonical Mode Input Processing) + * for details. + * if undefined, VMIN=1, VTIME=0 is used as a default - this gives you + * best user responsiveness, but highest interrupt frequency. + * (Do not bother, if you are not using plain tty windows.) + */ +#define TTYVMIN 100 +#define TTYVTIME 2 + +/* + * looks like the above values are ignored by setting FNDELAY. + * This is default for all pty/ttys, you may disable it for + * ttys here. After playing with it for a while, one may find out + * that this feature may cause screen to lock up. + */ +#ifdef bsdi +# define TTY_DISABLE_FNBLOCK /* select barfs without it ... */ +#endif + + +/* + * Some terminals, e.g. Wyse 120, use a bitfield to select attributes. + * This doesn't work with the standard so/ul/m? terminal entries, + * because they will cancel each other out. + * On TERMINFO machines, "sa" (sgr) may work. If you want screen + * to switch attributes only with sgr, define USE_SGR. + * This is *not* recomended, do this only if you must. + */ +#undef USE_SGR + + +/* + * Define USE_LOCALE if you want screen to use the locale names + * for the name of the month and day of the week. + */ +#define USE_LOCALE + +/* + * Define USE_PAM if your system supports PAM (Pluggable Authentication + * Modules) and you want screen to use it instead of calling crypt(). + * (You may also need to add -lpam to LIBS in the Makefile.) + */ +#undef USE_PAM + +/* + * Define CHECK_SCREEN_W if you want screen to set TERM to screen-w + * if the terminal width is greater than 131 columns. No longer needed + * on modern systems which use $COLUMNS or the tty settings instead. + */ +#undef CHECK_SCREEN_W + +/********************************************************************** + * + * End of User Configuration Section + * + * Rest of this file is modified by 'configure' + * Change at your own risk! + * + */ +]) +# end of AH_TOP + AC_PREFIX_PROGRAM(screen) AC_PREFIX_PROGRAM(gzip) @@ -46,6 +363,7 @@ AC_PROG_GCC_TRADITIONAL AC_ISC_POSIX +AC_MSG_CHECKING([for compiler sanity]) AC_TRY_RUN(main(){exit(0);},,[ if test $CC != cc ; then AC_NOTE(Your $CC failed - restarting with CC=cc) @@ -54,22 +372,17 @@ export CC exec $0 $configure_args fi -]) - -AC_TRY_RUN(main(){exit(0);},, -exec 5>&2 -eval $ac_link -AC_NOTE(CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;) -AC_NOTE($ac_compile) -AC_MSG_ERROR(Can't run the compiler - sorry)) +],AC_MSG_WARN([skipping test due to crosscompilation])) +AC_MSG_CHECKING([if compiler sets exit status]) AC_TRY_RUN([ main() { int __something_strange_(); __something_strange_(0); } -],AC_MSG_ERROR(Your compiler does not set the exit status - sorry)) +],AC_MSG_ERROR(Your compiler does not set the exit status - sorry),, +AC_MSG_WARN(skipping test due to crosscompilation)) AC_PROG_AWK @@ -103,6 +416,7 @@ dnl dnl **** special unix variants **** dnl +AH_TEMPLATE(ISC,[]) if test -n "$ISC"; then AC_DEFINE(ISC) LIBS="$LIBS -linet" fi @@ -114,11 +428,13 @@ dnl fi dnl fi +AH_TEMPLATE([sysV68],[]) if test -f /sysV68 ; then AC_DEFINE(sysV68) fi AC_CHECKING(for MIPS) +AH_TEMPLATE([MIPS],[]) if test -f /lib/libmld.a || test -f /usr/lib/libmld.a || test -f /usr/lib/cmplrs/cc/libmld.a; then oldlibs="$LIBS" test -f /bin/mx || LIBS="$LIBS -lmld" # for nlist. But not on alpha. @@ -132,6 +448,8 @@ AC_CHECKING(wait3) AC_TRY_LINK(,[wait3();], , AC_CHECKING(wait2) +AH_TEMPLATE([USE_WAIT2],[On RISCOS we prefer wait2() over wait3(). rouilj@sni-usa.com]) +dnl TODO(Hannes) shipped config.h.in wraps the define in #ifdef BSDWAIT AC_TRY_LINK(,[wait2();], dnl John Rouillard (rouilj@sni-usa.com): dnl need -I/usr/include/bsd in RISCOS otherwise sockets are broken, no @@ -154,9 +472,11 @@ oldlibs="$LIBS" LIBS="$LIBS -lpyr" AC_CHECKING(Pyramid OSX) +AH_TEMPLATE([OSX], [Pyramid OSX]) AC_TRY_LINK(,[open_controlling_pty("")], AC_DEFINE(OSX), LIBS="$oldlibs") fi +AH_TEMPLATE([POSIX],[Define POSIX if your system supports IEEE Std 1003.1-1988 (POSIX).]) dnl ghazi@caip.rutgers.edu (Kaveh R. Ghazi): dnl BBN butterfly is not POSIX, but a MACH BSD system. dnl Do not define POSIX and TERMIO. @@ -183,6 +503,7 @@ fi AC_CHECKING(for System V) +AH_TEMPLATE([SYSV], [Define SYSV if your machine is SYSV complient (Sys V, HPUX, A/UX)]) AC_TRY_COMPILE( [#include <sys/types.h> #include <signal.h> @@ -198,6 +519,11 @@ oldlibs="$LIBS" LIBS="$LIBS -lelf" AC_CHECKING(SVR4) +AH_TEMPLATE([SVR4],[]) +AH_TEMPLATE([BUGGYGETLOGIN], +[If ttyslot() breaks getlogin() by returning indexes to utmp entries + of type DEAD_PROCESS, then our getlogin() replacement should be + selected by defining BUGGYGETLOGIN.]) AC_TRY_LINK([#include <utmpx.h> ],, [AC_CHECK_HEADER(dwarf.h, AC_DEFINE(SVR4) AC_DEFINE(BUGGYGETLOGIN), @@ -235,6 +561,9 @@ dnl AC_CHECKING(BSD job jontrol) +AH_TEMPLATE([BSDJOBS], +[Define BSDJOBS if you have BSD-style job control (both process + groups and a tty that deals correctly with them)]) AC_TRY_LINK( [#include <sys/types.h> #include <sys/ioctl.h> @@ -255,6 +584,10 @@ dnl **** setreuid(), seteuid() **** dnl AC_CHECKING(setreuid) +AH_TEMPLATE([HAVE_SETREUID], +[If your system has the calls setreuid() and setregid(), + define HAVE_SETREUID. Otherwise screen will use a forked process to + safely create output files without retaining any special privileges.]) AC_TRY_LINK(,[ #ifdef __hpux setresuid(0, 0, 0); @@ -269,6 +602,9 @@ dnl Solaris seteuid doesn't change the saved uid, bad for dnl multiuser screen sessions AC_CHECKING(seteuid) +AH_TEMPLATE([HAVE_SETEUID], +[If your system supports BSD4.4's seteuid() and setegid(), define + HAVE_SETEUID.]) AC_TRY_LINK(,[ #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news) seteuid_is_broken(0); @@ -292,7 +628,8 @@ dnl **** FIFO tests **** dnl -AC_CHECKING(fifos) +AC_CACHE_CHECK([usable fifos], + [screen_cv_sys_fifo_usable], AC_TRY_RUN([ #include <sys/types.h> #include <sys/stat.h> @@ -357,12 +694,14 @@ exit(1); exit(0); } -], AC_NOTE(- your fifos are usable) fifo=1, -AC_NOTE(- your fifos are not usable)) -rm -f /tmp/conftest* +], screen_cv_sys_fifo_usable=yes, screen_cv_sys_fifo_usable=no)) -if test -n "$fifo"; then -AC_CHECKING(for broken fifo implementation) +if test X"$screen_cv_sys_fifo_usable" = Xyes; then +AH_TEMPLATE([BROKEN_PIPE], +[Define this if your system exits select() immediatly if a pipe is + opened read-only and no writer has opened it.]) +AC_CACHE_CHECK([broken fifo implementation], + [screen_cv_sys_fifo_broken_impl], AC_TRY_RUN([ #include <sys/types.h> #include <fcntl.h> @@ -407,9 +746,11 @@ exit(1); exit(0); } -], AC_NOTE(- your implementation is ok), -AC_NOTE(- you have a broken implementation) AC_DEFINE(BROKEN_PIPE) fifobr=1) -rm -f /tmp/conftest* +], screen_cv_sys_fifo_broken_impl=no, +screen_cv_sys_fifo_broken_impl=yes)) +if test X"$screen_cv_sys_fifo_broken_impl" = Xyes; then + AC_DEFINE(BROKEN_PIPE) +fi fi dnl @@ -418,7 +759,8 @@ dnl may need LIBS="$LIBS -lsocket" here dnl -AC_CHECKING(sockets) +AC_CACHE_CHECK([sockets are usable], + [screen_cv_sys_sockets_usable], AC_TRY_RUN([ #include <sys/types.h> #include <sys/socket.h> @@ -469,12 +811,16 @@ exit(1); exit(0); } -], AC_NOTE(- your sockets are usable) sock=1, -AC_NOTE(- your sockets are not usable)) -rm -f /tmp/conftest* +], screen_cv_sys_sockets_usable=yes, +screen_cv_sys_sockets_usable=no)) -if test -n "$sock"; then +if test X"$screen_cv_sys_sockets_usable" = Xyes; then AC_CHECKING(socket implementation) +AH_TEMPLATE([SOCK_NOT_IN_FS], +[Define this if the unix-domain socket implementation doesn't + create a socket in the filesystem.]) +AC_CACHE_CHECK([if sockets are not stored in the filesystem], + [screen_cv_sys_sockets_nofs], AC_TRY_RUN([ #include <sys/types.h> #include <sys/stat.h> @@ -500,22 +846,25 @@ close(s); exit(0); } -],AC_NOTE(- you are normal), -AC_NOTE(- unix domain sockets are not kept in the filesystem) -AC_DEFINE(SOCK_NOT_IN_FS) socknofs=1) -rm -f /tmp/conftest* +], screen_cv_sys_sockets_nofs=no, +screen_cv_sys_sockets_nofs=yes)) + +if test X"$screen_cv_sys_sockets_nofs" = Xyes; then + AC_DEFINE(SOCK_NOT_IN_FS) +fi fi dnl dnl **** choose sockets or fifos **** dnl -if test -n "$fifo"; then - if test -n "$sock"; then - if test -n "$nore"; then +AH_TEMPLATE([NAMEDPIPE], [Define this if your system supports named pipes.]) +if test X"$screen_cv_sys_fifo_usable" = Xyes; then + if test X"$screen_cv_sys_sockets_usable" = Xyes; then + if test X"$screen_cv_sys_sockets_nofs" = Xyes; then AC_NOTE(- hmmm... better take the fifos) AC_DEFINE(NAMEDPIPE) - elif test -n "$fifobr"; then + elif test X"$screen_cv_sys_fifo_broken_impl" = Xyes; then AC_NOTE(- as your fifos are broken lets use the sockets.) else AC_NOTE(- both sockets and fifos usable. let's take fifos.) @@ -525,7 +874,7 @@ AC_NOTE(- using named pipes, of course) AC_DEFINE(NAMEDPIPE) fi -elif test -n "$sock"; then +elif test X"$screen_cv_sys_sockets_usable" = Xyes; then AC_NOTE(- using unix-domain sockets, of course) else AC_MSG_ERROR(you have neither usable sockets nor usable pipes -> no screen) @@ -535,7 +884,11 @@ dnl **** check the select implementation **** dnl -AC_CHECKING(select return value) +AH_TEMPLATE([SELECT_BROKEN], +[If the select return value doesn't treat a descriptor that is + usable for reading and writing as two hits, define SELECT_BROKEN.]) +AC_CACHE_CHECK([for broken select return value], + [screen_cv_sys_select_broken_retval], AC_TRY_RUN([ #include <sys/types.h> #include <sys/stat.h> @@ -634,19 +987,26 @@ exit(1); exit(0); } -],AC_NOTE(- select is ok), -AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN)) +], screen_cv_sys_select_broken_retval=no, +screen_cv_sys_select_broken_retval=yes)) +if test X"$screen_cv_sys_select_broken_retval" = Xyes; then + AC_DEFINE(SELECT_BROKEN) +fi dnl dnl **** termcap or terminfo **** dnl +AH_TEMPLATE([TERMINFO], +[Define TERMINFO if your machine emulates the termcap routines + with the terminfo database. + Thus the .screenrc file is parsed for + the command 'terminfo' and not 'termcap']) + AC_CHECKING(for tgetent) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, olibs="$LIBS" -if test -f /usr/lib/libncursesw.so ; then - LIBS="-lncursesw $olibs" -fi AC_CHECKING(libncursesw) +AC_CHECK_LIB(ncursesw,tgetent) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, LIBS="-lcurses $olibs" AC_CHECKING(libcurses) @@ -668,24 +1028,39 @@ AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, AC_MSG_ERROR(!!! no tgetent - no screen))))))) -AC_TRY_RUN([ +AC_CACHE_CHECK([using terminfo database],[screen_cv_sys_terminfo_used], + AC_TRY_RUN([ main() { exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); -}], AC_NOTE(- you use the termcap database), -AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO)) +} + ], screen_cv_sys_terminfo_used=no, + screen_cv_sys_terminfo_used=yes) +) + +if test X"$screen_cv_sys_terminfo_used" = Xyes; then + AC_DEFINE(TERMINFO) +fi + AC_CHECKING(ospeed) +AH_TEMPLATE([NEED_OSPEED],[If your library does not define ospeed, define this.]) AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED)) dnl dnl **** PTY specific things **** dnl +AH_TEMPLATE([HAVE_DEV_PTC], +[define HAVE_DEV_PTC if you have a /dev/ptc character special + device.]) AC_CHECKING(for /dev/ptc) if test -r /dev/ptc; then AC_DEFINE(HAVE_DEV_PTC) fi AC_CHECKING(for SVR4 ptys) +AH_TEMPLATE([HAVE_SVR4_PTYS], +[define HAVE_SVR4_PTYS if you have a /dev/ptmx character special + device and support the ptsname(), grantpt(), unlockpt() functions.]) sysvr4ptys= if test -c /dev/ptmx ; then AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS) @@ -701,6 +1076,13 @@ fi AC_CHECKING(for ptyranges) +AH_TEMPLATE([PTYRANGE0], +[define PTYRANGE0 and or PTYRANGE1 if you want to adapt screen + to unusual environments. E.g. For SunOs the defaults are "qpr" and + "0123456789abcdef". For SunOs 4.1.2 + #define PTYRANGE0 "pqrstuvwxyzPQRST" + is recommended by Dan Jacobson.]) +AH_TEMPLATE([PTYRANGE1],[]) if test -d /dev/ptym ; then pdir='/dev/ptym' else @@ -817,6 +1199,9 @@ dnl **** utmp handling **** dnl AC_CHECKING(getutent) +AH_TEMPLATE([GETUTENT], +[If your system has getutent(), pututline(), etc. to write to the + utmp file, define GETUTENT.]) AC_TRY_LINK([ #include <time.h> /* to get time_t on SCO */ #include <sys/types.h> @@ -850,6 +1235,7 @@ [int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent();], AC_DEFINE(GETUTENT), LIBS="$olibs") ) AC_CHECKING(ut_host) +AH_TEMPLATE([UTHOST],[Define UTHOST if the utmp file has a host field.]) AC_TRY_COMPILE([ #include <time.h> #include <sys/types.h> @@ -860,8 +1246,9 @@ #include <utmp.h> #endif ],[struct utmp u; u.ut_host[0] = 0;], AC_DEFINE(UTHOST)) +AH_TEMPLATE([HAVE_UTEMPTER],[Define if you have the utempter utmp helper program]) AC_CHECK_HEADER(utempter.h, have_utempter=yes, have_utempter=no) -if test "$have_utempter" = yes; then +if test X"$have_utempter" = Xyes; then AC_DEFINE(HAVE_UTEMPTER) LIBS="$LIBS -lutempter" fi @@ -869,20 +1256,39 @@ dnl dnl **** loadav **** dnl + +AH_TEMPLATE([LOADAV], +[If you want the "time" command to display the current load average + define LOADAV. Maybe you must install screen with the needed + privileges to read /dev/kmem. + Note that NLIST_ stuff is only checked, when getloadavg() is not available. +]) +AH_TEMPLATE([LOADAV_NUM]) +AH_TEMPLATE([LOADAV_TYPE]) +AH_TEMPLATE([LOADAV_SCALE]) +AH_TEMPLATE([LOADAV_GETLOADAVG]) +AH_TEMPLATE([LOADAV_UNIX]) +AH_TEMPLATE([LOADAV_AVENRUN]) +AH_TEMPLATE([LOADAV_USE_NLIST64]) + +AH_TEMPLATE([NLIST_DECLARED]) +AH_TEMPLATE([NLIST_STRUCT]) +AH_TEMPLATE([NLIST_NAME_UNION]) + AC_CHECKING(for libutil(s)) -test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils" -test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil" +dnl I have no idea whether "login" is an appropriate symbol to check for here - Hannes +AC_CHECK_LIB(utils,login) +AC_CHECK_LIB(util,login) AC_CHECKING(getloadavg) AC_TRY_LINK(,[getloadavg((double *)0, 0);], AC_DEFINE(LOADAV_GETLOADAVG) load=1, -if test -f /usr/lib/libkvm.a ; then olibs="$LIBS" -LIBS="$LIBS -lkvm" +AC_CHECK_LIB(kvm,kvm_open, AC_CHECKING(getloadavg with -lkvm) AC_TRY_LINK(,[getloadavg((double *)0, 0);], AC_DEFINE(LOADAV_GETLOADAVG) load=1, LIBS="$olibs") -fi +) ) if test -z "$load" ; then @@ -1024,6 +1430,11 @@ dnl dnl **** signal handling **** dnl + +AH_TEMPLATE([SIGVOID], +[Define SIGVOID if your signal handlers return void. On older + systems, signal returns int, but on newer ones, it returns void.]) + if test -n "$posix" ; then dnl POSIX has reliable signals with void return type. @@ -1041,6 +1452,7 @@ #endif extern void (*signal ()) ();], [int i;], AC_DEFINE(SIGVOID)) AC_CHECKING(sigset) +AH_TEMPLATE([USESIGSET], [Define USESIGSET if you have sigset for BSD 4.1 reliable signals.]) AC_TRY_LINK([ #include <sys/types.h> #include <signal.h> @@ -1052,6 +1464,9 @@ #endif ], AC_DEFINE(USESIGSET)) AC_CHECKING(signal implementation) +AH_TEMPLATE([SYSVSIGS], +[Define SYSVSIGS if signal handlers must be reinstalled after + they have been called.]) AC_TRY_RUN([ #include <sys/types.h> #include <signal.h> @@ -1094,13 +1509,14 @@ dnl AC_CHECKING(for crypt and sec libraries) -test -f /lib/libcrypt_d.a || test -f /usr/lib/libcrypt_d.a && LIBS="$LIBS -lcrypt_d" +dnl I have no idea whether "crypt" is an appropriate symbol to check for here - Hannes +AC_CHECK_LIB(crypt_d,crypt) oldlibs="$LIBS" -LIBS="$LIBS -lcrypt" AC_CHECKING(crypt) AC_TRY_LINK(,,,LIBS="$oldlibs") -test -f /lib/libsec.a || test -f /usr/lib/libsec.a && LIBS="$LIBS -lsec" -test -f /lib/libshadow.a || test -f /usr/lib/libshadow.a && LIBS="$LIBS -lshadow" +AC_CHECK_LIB(crypt,crypt) +AC_CHECK_LIB(sec,crypt) +AC_CHECK_LIB(shadow,getspnam) oldlibs="$LIBS" LIBS="$LIBS -lsun" AC_CHECKING(IRIX sun library) @@ -1123,6 +1539,13 @@ dnl **** misc things **** dnl AC_CHECKING(wait union) +AH_TEMPLATE([BSDWAIT], +[Define BSDWAIT if your system defines a 'union wait' in <sys/wait.h> + + Only allow BSDWAIT i.e. wait3 on nonposix systems, since + posix implies wait(3) and waitpid(3). vdlinden@fwi.uva.nl + TODO(Hannes) shipped config.h.in does that with a #ifdef +]) AC_TRY_COMPILE([#include <sys/types.h> #include <sys/wait.h> ],[ @@ -1133,6 +1556,12 @@ #endif ],AC_DEFINE(BSDWAIT)) +AH_TEMPLATE([TERMIO], +[Define TERMIO if you have struct termio instead of struct sgttyb. + This is usually the case for SVID systems, where BSD uses sgttyb. + POSIX systems should define this anyway, even though they use + struct termios.]) + if test -z "$butterfly"; then AC_CHECKING(for termio or termios) AC_TRY_CPP([#include <termio.h>], AC_DEFINE(TERMIO), @@ -1142,17 +1571,35 @@ ) fi +AH_TEMPLATE([CYTERMIO], [Define CYTERMIO if you have cyrillic termio modes.]) + dnl AC_CHECK_HEADER(shadow.h, AC_DEFINE(SHADOWPW)) AC_CHECKING(getspnam) +AH_TEMPLATE([SHADOWPW], +[If the passwords are stored in a shadow file and you want the + builtin lock to work properly, define SHADOWPW.]) AC_TRY_LINK([#include <shadow.h>], [getspnam("x");],AC_DEFINE(SHADOWPW)) AC_CHECKING(getttyent) +AH_TEMPLATE([GETTTYENT], +[If your system has the new format /etc/ttys (like 4.3 BSD) and the + getttyent(3) library functions, define GETTTYENT.]) AC_TRY_LINK(,[getttyent();], AC_DEFINE(GETTTYENT)) AC_CHECKING(fdwalk) +AH_TEMPLATE([HAVE_FDWALK], +[Newer versions of Solaris include fdwalk, which can greatly improve + the startup time of screen; otherwise screen spends a lot of time + closing file descriptors.]) AC_TRY_LINK([#include <stdlib.h>], [fdwalk(NULL, NULL);],AC_DEFINE(HAVE_FDWALK)) -AC_CHECKING(whether memcpy/memmove/bcopy handles overlapping arguments) +AH_TEMPLATE([USEBCOPY], +[Define USEBCOPY if the bcopy/memcpy from your system's C library + supports the overlapping of source and destination blocks. When + undefined, screen uses its own (probably slower) version of bcopy().]) + +AC_CACHE_CHECK([if bcopy handles overlap], + [screen_cv_sys_bcopy_overlap], AC_TRY_RUN([ main() { char buf[10]; @@ -1165,8 +1612,21 @@ if (strncmp(buf, "cdedef", 6)) exit(1); exit(0); /* libc version works properly. */ -}], AC_DEFINE(USEBCOPY)) +}], screen_cv_sys_bcopy_overlap=yes, +screen_cv_sys_bcopy_overlap=no)) +if test X"$screen_cv_sys_bcopy_overlap" = Xyes; then + AC_DEFINE(USEBCOPY) +fi +AH_TEMPLATE([USEMEMMOVE], +[SYSV machines may have a working memcpy() -- Oh, this is + quite unlikely. Tell me if you see one. + "But then, memmove() should work, if at all available" he thought... + Boing, never say "works everywhere" unless you checked SCO UNIX. + Their memove fails the test in the configure script. Sigh. (Juergen) +]) +AC_CACHE_CHECK([if memmove handles overlap], + [screen_cv_sys_memmove_overlap], AC_TRY_RUN([ #define bcopy(s,d,l) memmove(d,s,l) main() { @@ -1180,9 +1640,15 @@ if (strncmp(buf, "cdedef", 6)) exit(1); exit(0); /* libc version works properly. */ -}], AC_DEFINE(USEMEMMOVE)) - +}], screen_cv_sys_memmove_overlap=yes, +screen_cv_sys_memmove_overlap=no)) +if test X"$screen_cv_sys_memmove_overlap" = Xyes; then + AC_DEFINE(USEMEMMOVE) +fi +AH_TEMPLATE([USEMEMCPY],[]) +AC_CACHE_CHECK([if memcpy handles overlap], + [screen_cv_sys_memcpy_overlap], AC_TRY_RUN([ #define bcopy(s,d,l) memcpy(d,s,l) main() { @@ -1196,9 +1662,19 @@ if (strncmp(buf, "cdedef", 6)) exit(1); exit(0); /* libc version works properly. */ -}], AC_DEFINE(USEMEMCPY)) +}], screen_cv_sys_memcpy_overlap=yes, +screen_cv_sys_memcpy_overlap=no)) +if test X"$screen_cv_sys_memcpy_overlap" = Xyes; then + AC_DEFINE(USEMEMCPY) +fi AC_MSG_CHECKING(long file names) +AH_TEMPLATE([NAME_MAX], +[If you are on a SYS V machine that restricts filename length to 14 + characters, you may need to enforce that by setting NAME_MAX to 14]) +dnl TODO(Hannes) shipped config.h.in has +dnl #undef NAME_MAX /* KEEP_UNDEF_HERE override system value */ +dnl ahead of this (echo 1 > /tmp/conftest9012345) 2>/dev/null (echo 2 > /tmp/conftest9012346) 2>/dev/null val=`cat /tmp/conftest9012345 2>/dev/null` @@ -1211,17 +1687,28 @@ rm -f /tmp/conftest* AC_MSG_CHECKING(for vsprintf) +AH_TEMPLATE([USEVARARGS], +[If your system has vsprintf() and requires the use of the macros in + "varargs.h" to use functions with variable arguments, + define USEVARARGS.]) AC_TRY_LINK([#include <stdarg.h>],[va_list valist; vsprintf(0,0,valist);], AC_MSG_RESULT(yes);AC_DEFINE(USEVARARGS), AC_MSG_RESULT(no)) AC_HEADER_DIRENT AC_MSG_CHECKING(for setenv) +AH_TEMPLATE([USESETENV], [If your system has setenv() and unsetenv() define USESETENV]) AC_TRY_LINK(,[setenv((char *)0,(char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes);AC_DEFINE(USESETENV), AC_MSG_RESULT(no) AC_MSG_CHECKING(for putenv) +AH_TEMPLATE([NEEDPUTENV], +[If your system does not come with a setenv()/putenv()/getenv() + functions, you may bring in our own code by defining NEEDPUTENV.]) AC_TRY_LINK(,[putenv((char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes) , AC_MSG_RESULT(no);AC_DEFINE(NEEDPUTENV) )) AC_MSG_CHECKING([for nl_langinfo(CODESET)]) +AH_TEMPLATE([HAVE_NL_LANGINFO], +[define HAVE_NL_LANGINFO if your system has the nl_langinfo() call + and <langinfo.h> defines CODESET.]) AC_TRY_LINK([ #include <langinfo.h> ],[nl_langinfo(CODESET);], AC_MSG_RESULT(yes);AC_DEFINE(HAVE_NL_LANGINFO), AC_MSG_RESULT(no)) @@ -1271,7 +1758,8 @@ dnl Ptx bug workaround -- insert -lc after -ltermcap test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq" -AC_TRY_RUN(main(){exit(0);},,AC_MSG_ERROR(Can't run the compiler - internal error. Sorry.)) +AC_MSG_CHECKING(compiler sanity) +AC_TRY_RUN(main(){exit(0);},,AC_MSG_ERROR(Can't run the compiler - internal error. Sorry.), AC_MSG_WARN(Skipping test due to crosscompilation)) ETCSCREENRC="\"/usr/local/etc/screenrc\"" if test -n "$prefix"; then