--- configure.in~	2008-11-23 17:43:48.000000000 +0000
+++ configure.in	2008-11-23 17:43:48.000000000 +0000
@@ -46,6 +46,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 +55,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 +99,7 @@
 dnl
 dnl    ****  special unix variants  ****
 dnl
+AH_TEMPLATE(ISC,[])
 if test -n "$ISC"; then
   AC_DEFINE(ISC) LIBS="$LIBS -linet"
 fi
@@ -114,11 +111,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 +131,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 +155,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 +186,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>
@@ -226,6 +230,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>
@@ -246,6 +253,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);
@@ -260,6 +271,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);
@@ -284,6 +298,8 @@
 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>
@@ -348,12 +364,15 @@
     exit(1);
   exit(0);
 }
-], AC_NOTE(- your fifos are usable) fifo=1,
-AC_NOTE(- your fifos are not usable))
+], screen_cv_sys_fifo_usable=yes, screen_cv_sys_fifo_usable=no))
 rm -f /tmp/conftest*
 
-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>
@@ -398,9 +416,12 @@
     exit(1);
   exit(0);
 }
-], AC_NOTE(- your implementation is ok), 
-AC_NOTE(- you have a broken implementation) AC_DEFINE(BROKEN_PIPE) fifobr=1)
+], 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
 rm -f /tmp/conftest*
 fi
 
 dnl
@@ -410,6 +430,8 @@
 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>
@@ -460,12 +482,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>
@@ -491,22 +517,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.)
@@ -516,7 +545,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)
@@ -526,7 +555,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>
@@ -625,17 +658,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"
-LIBS="-lcurses $olibs"
 AC_CHECKING(libcurses)
+AC_CHECK_LIB(ncursesw,tgetent)
 AC_TRY_LINK(,[
 #ifdef __hpux
 __sorry_hpux_libcurses_is_totally_broken_in_10_10();
@@ -654,24 +696,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)
@@ -687,6 +744,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
@@ -850,20 +914,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
@@ -1005,6 +1088,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.
@@ -1014,6 +1102,7 @@
 else
 
 AC_CHECKING(return type of signal handlers)
+AH_TEMPLATE([USESIGSET], [Define USESIGSET if you have sigset for BSD 4.1 reliable signals.])
 AC_TRY_COMPILE(
 [#include <sys/types.h>
 #include <signal.h>
@@ -1033,6 +1122,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>
@@ -1075,13 +1167,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)
@@ -1104,6 +1197,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>
 ],[
@@ -1114,6 +1214,13 @@
 #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),
@@ -1123,17 +1230,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];
@@ -1146,7 +1271,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)
@@ -1161,9 +1300,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() {
@@ -1177,9 +1322,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`
@@ -1192,6 +1347,10 @@
 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)])
@@ -1199,12 +1358,19 @@
 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))
@@ -1254,7 +1420,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
