#
# 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