Don't signal WINCH on EnterAltScreen (#23803).
[screen-lua.git] / src / configure.in
blob7a965652be2fc56665ae8e399f4c355221b29b6e
1 dnl Process this file with autoconf to produce a configure script.
2 dnl
3 dnl $Id$ FAU
4 dnl
5 dnl Many thanks to David MacKenzie for writing autoconf and
6 dnl providing a sample configure.in file for screen.
7 dnl
8 AC_REVISION($Revision$)dnl
9 AC_INIT(screen.c)
10 AC_CONFIG_HEADER(config.h)
12 dnl
13 dnl Define some useful macros
14 dnl
15 AC_DEFUN([AC_PROGRAM_SOURCE],
16 [AC_REQUIRE([AC_PROG_CPP])AC_PROVIDE([$0])cat > conftest.c <<EOF
17 #include "confdefs.h"
18 [$1]
19 _CUT_HERE_
20 [$2]
21 EOF
22 eval "$ac_cpp conftest.c 2>&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out"
23 . ./conftest.out
24 rm -f conftest*
25 ])dnl
26 dnl
27 define(AC_NOTE,
28 [echo "$1" 1>&AC_FD_MSG
29 ])dnl
31 dnl
32 dnl Extract version from patchlevel.h
33 dnl
34 rev=`sed < ${srcdir}/patchlevel.h -n -e '/#define REV/s/#define REV  *//p'`
35 vers=`sed < ${srcdir}/patchlevel.h -n -e '/#define VERS/s/#define VERS  *//p'`
36 pat=`sed < ${srcdir}/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL  *//p'`
37 VERSION="$rev.$vers.$pat"
38 AC_NOTE(this is screen version $VERSION)
39 AC_SUBST(VERSION)
40 AC_PREFIX_PROGRAM(screen)
41 AC_PREFIX_PROGRAM(gzip)
43 old_CFLAGS="$CFLAGS"
44 AC_PROG_CC
45 AC_PROG_CPP
46 AC_PROG_GCC_TRADITIONAL
47 AC_ISC_POSIX
49 AC_TRY_RUN(main(){exit(0);},,[
50 if test $CC != cc ; then
51 AC_NOTE(Your $CC failed - restarting with CC=cc)
52 AC_NOTE()
53 CC=cc
54 export CC
55 exec $0 $configure_args
59 AC_TRY_RUN(main(){exit(0);},,
60 exec 5>&2
61 eval $ac_link
62 AC_NOTE(CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;)
63 AC_NOTE($ac_compile)
64 AC_MSG_ERROR(Can't run the compiler - sorry))
66 AC_TRY_RUN([
67 main()
69   int __something_strange_();
70   __something_strange_(0);
72 ],AC_MSG_ERROR(Your compiler does not set the exit status - sorry))
74 AC_PROG_AWK
76 AC_PROG_INSTALL
78 if test -f etc/toolcheck; then
79 AC_CHECKING(for buggy tools)
80 sh etc/toolcheck 1>&AC_FD_MSG
85 dnl SOCKDIR
86 AC_MSG_CHECKING(if a system-wide socket dir should be used) 
87 AC_ARG_ENABLE(socket-dir,
88     [  --disable-socket-dir    disable system wide socket-dir and use ~/.screen instead],
89     [
90         AC_MSG_RESULT(no.  ~/.screen will be used instead.)
91     ],
92     [
93         AC_MSG_RESULT(yes)
94         AC_MSG_CHECKING(for the socket dir)
95         SOCKDIR="(eff_uid ? \"/tmp/uscreens\" : \"/tmp/screens\")"
96         AC_ARG_WITH(socket-dir, [  --with-socket-dir=path  where to put the per-user sockets], [ 
97           case "${withval}" in
98             *\"*) SOCKDIR="${withval}" ;;
99             *) SOCKDIR="\"${withval}\"" ;;
100           esac
101         ])
102         AC_MSG_RESULT(${SOCKDIR})
103         AC_DEFINE_UNQUOTED(SOCKDIR, $SOCKDIR)
104     ]
109 dnl    ****  special unix variants  ****
111 if test -n "$ISC"; then
112   AC_DEFINE(ISC) LIBS="$LIBS -linet"
115 dnl AC_CHECKING(for OSF1)
116 dnl if test -f /bin/uname ; then
117 dnl if test `/bin/uname` = OSF1 || test -f /osf_boot; then
118 dnl AC_DEFINE(OSF1)     # this disables MIPS again....
119 dnl fi
120 dnl fi
122 if test -f /sysV68 ; then
123 AC_DEFINE(sysV68)
126 AC_CHECKING(for MIPS)
127 if test -f /lib/libmld.a || test -f /usr/lib/libmld.a || test -f /usr/lib/cmplrs/cc/libmld.a; then
128 oldlibs="$LIBS"
129 test -f /bin/mx || LIBS="$LIBS -lmld" # for nlist. But not on alpha.
130 dnl djm@eng.umd.edu: "... for one thing, it doubles the size of the executable"
131 AC_CHECKING(mld library)
132 AC_TRY_LINK(,,,LIBS="$oldlibs")
135 if test -r /dev/ptc; then
136 AC_DEFINE(MIPS)
137 AC_CHECKING(wait3)
138 AC_TRY_LINK(,[wait3();], ,
139 AC_CHECKING(wait2)
140 AC_TRY_LINK(,[wait2();],
141 dnl John Rouillard (rouilj@sni-usa.com):
142 dnl need -I/usr/include/bsd in RISCOS otherwise sockets are broken, no
143 dnl job control etc.
144 dnl Detect RISCOS if wait2 is present, but not wait3.
145 AC_DEFINE(USE_WAIT2) LIBS="$LIBS -lbsd" ; CC="$CC -I/usr/include/bsd"
151 AC_CHECKING(for Ultrix)
152 AC_EGREP_CPP(yes,
153 [#if defined(ultrix) || defined(__ultrix)
154    yes;
155 #endif
156 ], ULTRIX=1)
158 if test -f /usr/lib/libpyr.a ; then
159 oldlibs="$LIBS"
160 LIBS="$LIBS -lpyr"
161 AC_CHECKING(Pyramid OSX)
162 AC_TRY_LINK(,[open_controlling_pty("")], AC_DEFINE(OSX), LIBS="$oldlibs")
165 dnl ghazi@caip.rutgers.edu (Kaveh R. Ghazi):
166 dnl BBN butterfly is not POSIX, but a MACH BSD system.
167 dnl Do not define POSIX and TERMIO.
168 AC_CHECKING(for butterfly)
169 AC_EGREP_CPP(yes,
170 [#if defined(butterfly)
171   yes;
172 #endif
173 ], butterfly=1)
175 if test -z "$butterfly"; then
176 if test -n "$ULTRIX"; then
177   test -z "$GCC" && CC="$CC -YBSD"
179 AC_CHECKING(for POSIX.1)
180 AC_EGREP_CPP(yes,
181 [#include <sys/types.h>
182 #include <unistd.h>
183 main () {
184 #ifdef _POSIX_VERSION
185   yes;
186 #endif
187 ], AC_NOTE(- you have a POSIX system) AC_DEFINE(POSIX) posix=1)
190 AC_CHECKING(for System V)
191 AC_TRY_COMPILE(
192 [#include <sys/types.h>
193 #include <signal.h>
194 #include <fcntl.h>], [int x = SIGCHLD | FNDELAY;], , AC_DEFINE(SYSV))
196 AC_CHECKING(for sequent/ptx)
197 AC_EGREP_CPP(yes,
198 [#ifdef _SEQUENT_
199   yes;
200 #endif
201 ], LIBS="$LIBS -lsocket -linet";seqptx=1)
203 oldlibs="$LIBS"
204 LIBS="$LIBS -lelf"
205 AC_CHECKING(SVR4)
206 AC_TRY_LINK([#include <utmpx.h>
208 [AC_CHECK_HEADER(dwarf.h, AC_DEFINE(SVR4) AC_DEFINE(BUGGYGETLOGIN),
209 [AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4) AC_DEFINE(BUGGYGETLOGIN))])]
210 ,LIBS="$oldlibs")
211 AC_CHECK_HEADERS([stropts.h])
213 AC_CHECKING(for Solaris 2.x)
214 AC_EGREP_CPP(yes,
215 [#if defined(SVR4) && defined(sun)
216   yes
217 #endif
218 ], LIBS="$LIBS -lsocket -lnsl -lkstat")
221 dnl    ****  typedefs ****
223 dnl (currently not used)
225 dnl AC_CHECKING(for pid_t)
226 dnl AC_EGREP_CPP(pid_t,[#include <sys/types.h>
227 dnl ],AC_DEFINE(PID_T_DEFINED))
229 dnl AC_CHECKING(for sig_t)
230 dnl AC_EGREP_CPP(sig_t,[#include <sys/types.h>
231 dnl #include <signal.h>
232 dnl ],AC_DEFINE(SIG_T_DEFINED))
234 dnl AC_CHECKING(for uid_t)
235 dnl AC_EGREP_CPP(uid_t,[#include <sys/types.h>
236 dnl ],AC_DEFINE(UID_T_DEFINED))
240 dnl   ****     Job control     ****
243 AC_CHECKING(BSD job jontrol)
244 AC_TRY_LINK(
245 [#include <sys/types.h>
246 #include <sys/ioctl.h>
247 ], [
248 #ifdef POSIX
249 tcsetpgrp(0, 0);
250 #else
251 int x = TIOCSPGRP;
252 #ifdef SYSV
253 setpgrp();
254 #else
255 int y = TIOCNOTTY;
256 #endif
257 #endif
258 ], AC_NOTE(- you have jobcontrol) AC_DEFINE(BSDJOBS), AC_NOTE(- you don't have jobcontrol))
261 dnl    ****  setresuid(), setreuid(), seteuid()  ****
263 AC_CHECKING(setresuid)
264 AC_TRY_LINK(,[
265 setresuid(0, 0, 0);
266 ], AC_DEFINE(HAVE_SETRESUID))
267 AC_CHECKING(setreuid)
268 AC_TRY_LINK(,[
269 setreuid(0, 0);
270 ], AC_DEFINE(HAVE_SETREUID))
272 dnl seteuid() check:
273 dnl   linux seteuid was broken before V1.1.11
274 dnl   NeXT, AUX, ISC, and ultrix are still broken (no saved uid support)
275 dnl   Solaris seteuid doesn't change the saved uid, bad for
276 dnl     multiuser screen sessions
277 AC_CHECKING(seteuid)
278 AC_TRY_LINK(,[
279 #if defined(linux) || defined(NeXT) || defined(_AUX_SOURCE) || defined(AUX) || defined(ultrix) || (defined(sun) && defined(SVR4)) || defined(ISC) || defined(sony_news)
280 seteuid_is_broken(0);
281 #else
282 seteuid(0);
283 #endif
284 ], AC_DEFINE(HAVE_SETEUID))
287 dnl    ****  select()  ****
290 AC_CHECKING(select)
291 AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, 
292 LIBS="$LIBS -lnet -lnsl"
293 AC_CHECKING(select with $LIBS)
294 AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, 
295 AC_MSG_ERROR(!!! no select - no screen))
298 dnl    ****  FIFO tests  ****
301 AC_CHECKING(fifos)
302 AC_TRY_RUN([
303 #include <sys/types.h>
304 #include <sys/stat.h>
305 #include <fcntl.h>
307 #ifndef O_NONBLOCK
308 #define O_NONBLOCK O_NDELAY
309 #endif
310 #ifndef S_IFIFO
311 #define S_IFIFO 0010000
312 #endif
314 char *fin = "/tmp/conftest$$";
316 main()
318   struct stat stb;
319 #ifdef FD_SET
320   fd_set f;
321 #else
322   int f;
323 #endif
325   (void)alarm(5);
326 #ifdef POSIX
327   if (mkfifo(fin, 0777))
328 #else
329   if (mknod(fin, S_IFIFO|0777, 0))
330 #endif
331     exit(1);
332   if (stat(fin, &stb) || (stb.st_mode & S_IFIFO) != S_IFIFO)
333     exit(1);
334   close(0);
335 #ifdef __386BSD__
336   /*
337    * The next test fails under 386BSD, but screen works using fifos.
338    * Fifos in O_RDWR mode are only used for the BROKEN_PIPE case and for
339    * the select() configuration test.
340    */
341   exit(0);
342 #endif
343   if (open(fin, O_RDONLY | O_NONBLOCK))
344     exit(1);
345   if (fork() == 0)
346     {
347       close(0);
348       if (open(fin, O_WRONLY | O_NONBLOCK))
349         exit(1);
350       close(0);
351       if (open(fin, O_WRONLY | O_NONBLOCK))
352         exit(1);
353       if (write(0, "TEST", 4) == -1)
354         exit(1);
355       exit(0);
356     }
357 #ifdef FD_SET
358   FD_SET(0, &f);
359 #else
360   f = 1;
361 #endif
362   if (select(1, &f, 0, 0, 0) == -1)
363     exit(1);
364   exit(0);
366 ], AC_NOTE(- your fifos are usable) fifo=1,
367 AC_NOTE(- your fifos are not usable))
368 rm -f /tmp/conftest*
370 if test -n "$fifo"; then
371 AC_CHECKING(for broken fifo implementation)
372 AC_TRY_RUN([
373 #include <sys/types.h>
374 #include <fcntl.h>
375 #include <sys/time.h>
376 #include <sys/stat.h>
378 #ifndef O_NONBLOCK
379 #define O_NONBLOCK O_NDELAY
380 #endif
381 #ifndef S_IFIFO
382 #define S_IFIFO 0010000
383 #endif
385 char *fin = "/tmp/conftest$$";
387 main()
389   struct timeval tv;
390 #ifdef FD_SET
391   fd_set f;
392 #else
393   int f;
394 #endif
396 #ifdef POSIX
397   if (mkfifo(fin, 0600))
398 #else
399   if (mknod(fin, S_IFIFO|0600, 0))
400 #endif
401     exit(1);
402   close(0);
403   if (open(fin, O_RDONLY|O_NONBLOCK))
404     exit(1);
405 #ifdef FD_SET
406   FD_SET(0, &f);
407 #else
408   f = 1;
409 #endif
410   tv.tv_sec = 1;
411   tv.tv_usec = 0;
412   if (select(1, &f, 0, 0, &tv))
413     exit(1);
414   exit(0);
416 ], AC_NOTE(- your implementation is ok), 
417 AC_NOTE(- you have a broken implementation) AC_DEFINE(BROKEN_PIPE) fifobr=1)
418 rm -f /tmp/conftest*
422 dnl    ****  SOCKET tests  ****
423 dnl 
424 dnl     may need        LIBS="$LIBS -lsocket"   here
427 AC_CHECKING(sockets)
428 AC_TRY_RUN([
429 #include <sys/types.h>
430 #include <sys/socket.h>
431 #include <sys/un.h>
432 #include <fcntl.h>
434 char *son = "/tmp/conftest$$";
436 main()
438   int s1, s2, l;
439   struct sockaddr_un a;
440 #ifdef FD_SET
441   fd_set f;
442 #else
443   int f;
444 #endif
446   (void)alarm(5);
447   if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
448     exit(1);
449   a.sun_family = AF_UNIX;
450   strcpy(a.sun_path, son);
451   (void) unlink(son);
452   if (bind(s1, (struct sockaddr *) &a, strlen(son)+2) == -1)
453     exit(1);
454   if (listen(s1, 2))
455     exit(1);
456   if (fork() == 0)
457     {
458       if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
459         kill(getppid(), 3);
460       (void)connect(s2, (struct sockaddr *)&a, strlen(son) + 2);
461       if (write(s2, "HELLO", 5) == -1)
462         kill(getppid(), 3);
463       exit(0);
464     }
465   l = sizeof(a);
466   close(0);
467   if (accept(s1, &a, &l))
468     exit(1);
469 #ifdef FD_SET
470   FD_SET(0, &f);
471 #else
472   f = 1;
473 #endif
474   if (select(1, &f, 0, 0, 0) == -1)
475     exit(1);
476   exit(0);
478 ], AC_NOTE(- your sockets are usable) sock=1,
479 AC_NOTE(- your sockets are not usable))
480 rm -f /tmp/conftest*
482 if test -n "$sock"; then
483 AC_CHECKING(socket implementation)
484 AC_TRY_RUN([
485 #include <sys/types.h>
486 #include <sys/stat.h>
487 #include <sys/socket.h>
488 #include <sys/un.h>
490 char *son = "/tmp/conftest$$";
492 main()
494   int s;
495   struct stat stb;
496   struct sockaddr_un a;
497   if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
498     exit(0);
499   a.sun_family = AF_UNIX;
500   strcpy(a.sun_path, son);
501   (void) unlink(son);
502   if (bind(s, (struct sockaddr *) &a, strlen(son)+2) == -1)
503     exit(0);
504   if (stat(son, &stb))
505     exit(1);
506   close(s);
507   exit(0);
509 ],AC_NOTE(- you are normal),
510 AC_NOTE(- unix domain sockets are not kept in the filesystem)
511 AC_DEFINE(SOCK_NOT_IN_FS) socknofs=1)
512 rm -f /tmp/conftest*
517 dnl    ****  choose sockets or fifos  ****
519 if test -n "$fifo"; then
520   if test -n "$sock"; then
521     if test -n "$nore"; then
522       AC_NOTE(- hmmm... better take the fifos)
523       AC_DEFINE(NAMEDPIPE)
524     elif test -n "$fifobr"; then
525       AC_NOTE(- as your fifos are broken lets use the sockets.)
526     else
527       AC_NOTE(- both sockets and fifos usable. let's take sockets.)
528     fi
529   else
530     AC_NOTE(- using named pipes, of course)
531     AC_DEFINE(NAMEDPIPE)
532   fi
533 elif test -n "$sock"; then
534   AC_NOTE(- using unix-domain sockets, of course)
535 else
536   AC_MSG_ERROR(you have neither usable sockets nor usable pipes -> no screen)
540 dnl    ****  check the select implementation ****
543 AC_CHECKING(select return value)
544 AC_TRY_RUN([
545 #include <sys/types.h>
546 #include <sys/stat.h>
547 #include <fcntl.h>
549 char *nam = "/tmp/conftest$$";
551 #ifdef NAMEDPIPE
553 #ifndef O_NONBLOCK
554 #define O_NONBLOCK O_NDELAY
555 #endif
556 #ifndef S_IFIFO
557 #define S_IFIFO 0010000
558 #endif
561 main()
563 #ifdef FD_SET
564   fd_set f;
565 #else
566   int f;
567 #endif
569 #ifdef __FreeBSD__
570 /* From Andrew A. Chernov (ache@astral.msk.su):
571  * opening RDWR fifo fails in BSD 4.4, but select return values are
572  * right.
573  */
574   exit(0);
575 #endif
576   (void)alarm(5);
577 #ifdef POSIX
578   if (mkfifo(nam, 0777))
579 #else
580   if (mknod(nam, S_IFIFO|0777, 0))
581 #endif
582     exit(1);
583   close(0);
584   if (open(nam, O_RDWR | O_NONBLOCK))
585     exit(1);
586   if (write(0, "TEST", 4) == -1)
587     exit(1);
589 #else
591 #include <sys/types.h>
592 #include <sys/socket.h>
593 #include <sys/un.h>
595 main()
597   int s1, s2, l;
598   struct sockaddr_un a;
599 #ifdef FD_SET
600   fd_set f;
601 #else
602   int f;
603 #endif
605   (void)alarm(5);
606   if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
607     exit(1);
608   a.sun_family = AF_UNIX;
609   strcpy(a.sun_path, nam);
610   (void) unlink(nam);
611   if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1)
612     exit(1);
613   if (listen(s1, 2))
614     exit(1);
615   if (fork() == 0)
616     {
617       if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
618         kill(getppid(), 3);
619       (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2);
620       if (write(s2, "HELLO", 5) == -1)
621         kill(getppid(), 3);
622       exit(0);
623     }
624   l = sizeof(a);
625   close(0);
626   if (accept(s1, (struct sockaddr *)&a, &l))
627     exit(1);
628 #endif
631 #ifdef FD_SET
632   FD_SET(0, &f);
633 #else
634   f = 1;
635 #endif
636   if (select(1, &f, 0, 0, 0) == -1)
637     exit(1);
638   if (select(1, &f, &f, 0, 0) != 2)
639     exit(1);
640   exit(0);
642 ],AC_NOTE(- select is ok),
643 AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN))
646 dnl    ****  termcap or terminfo  ****
648 AC_CHECKING(for tgetent)
649 AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
650 olibs="$LIBS"
651 LIBS="-lcurses $olibs"
652 AC_CHECKING(libcurses)
653 AC_TRY_LINK(,[
654 #ifdef __hpux
655 __sorry_hpux_libcurses_is_totally_broken_in_10_10();
656 #else
657 tgetent((char *)0, (char *)0);
658 #endif
660 LIBS="-ltermcap $olibs"
661 AC_CHECKING(libtermcap)
662 AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
663 LIBS="-ltermlib $olibs"
664 AC_CHECKING(libtermlib)
665 AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
666 LIBS="-lncurses $olibs"
667 AC_CHECKING(libncurses)
668 AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
669 AC_MSG_ERROR(!!! no tgetent - no screen))))))
671 AC_TRY_RUN([
672 main()
674  exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1);
675 }], AC_NOTE(- you use the termcap database),
676 AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO))
677 AC_CHECKING(ospeed)
678 AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED))
681 dnl    ****  PTY specific things  ****
683 AC_CHECKING(for /dev/ptc)
684 if test -r /dev/ptc; then
685 AC_DEFINE(HAVE_DEV_PTC)
688 AC_CHECKING(for SVR4 ptys)
689 sysvr4ptys=
690 if test -c /dev/ptmx ; then
691 AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS)
692 sysvr4ptys=1])
695 AC_CHECK_FUNCS(getpt)
697 dnl check for openpty()
698 if test -z "$sysvr4ptys"; then
699 AC_CHECK_FUNCS(openpty,,
700 [AC_CHECK_LIB(util,openpty, [AC_DEFINE(HAVE_OPENPTY)] [LIBS="$LIBS -lutil"])])
703 AC_CHECKING(for ptyranges)
704 if test -d /dev/ptym ; then
705 pdir='/dev/ptym'
706 else
707 pdir='/dev'
709 dnl SCO uses ptyp%d
710 AC_EGREP_CPP(yes,
711 [#ifdef M_UNIX
712    yes;
713 #endif
714 ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
715 dnl if test -c /dev/ptyp19; then
716 dnl ptys=`echo /dev/ptyp??`
717 dnl else
718 dnl ptys=`echo $pdir/pty??`
719 dnl fi
720 if test "$ptys" != "$pdir/pty??" ; then
721 p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
722 p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g'  | sort -u | tr -d '\012'`
723 AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
724 AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
727 dnl    ****  pty mode/group handling ****
729 dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
730 AC_ARG_WITH(pty-mode, [  --with-pty-mode=mode    default mode for ptys], [ ptymode="${withval}" ])
731 AC_ARG_WITH(pty-group, [  --with-pty-group=group  default group for ptys], [ ptygrp="${withval}" ])
732 test -n "$ptymode" || ptymode=0620
733 if test -n "$ptygrp" ; then
734 AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
735 AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
736 else
738 AC_CHECKING(default tty permissions/group)
739 rm -f conftest_grp
740 AC_TRY_RUN([
741 #include <sys/types.h>
742 #include <sys/stat.h>
743 #include <stdio.h>
744 main()
746   struct stat sb;
747   char *x,*ttyname();
748   int om, m;
749   FILE *fp;
751   if (!(x = ttyname(0))) exit(1);
752   if (stat(x, &sb)) exit(1);
753   om = sb.st_mode;
754   if (om & 002) exit(0);
755   m = system("mesg y");
756   if (m == -1 || m == 127) exit(1);
757   if (stat(x, &sb)) exit(1);
758   m = sb.st_mode;
759   if (chmod(x, om)) exit(1);
760   if (m & 002) exit(0);
761   if (sb.st_gid == getgid()) exit(1);
762   if (!(fp=fopen("conftest_grp", "w")))
763     exit(1);
764   fprintf(fp, "%d\n", sb.st_gid);
765   fclose(fp);
766   exit(0);
769     if test -f conftest_grp; then
770         ptygrp=`cat conftest_grp`
771         AC_NOTE([- pty mode: $ptymode, group: $ptygrp])
772         AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
773         AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
774     else
775         AC_NOTE(- ptys are world accessable)
776     fi
778     WRITEPATH=''
779     XTERMPATH=''
780     AC_PATH_PROG(WRITEPATH, write)
781     AC_PATH_PROG(XTERMPATH, xterm)
782     found=
783     if test -n "$WRITEPATH$XTERMPATH"; then
784       findfollow=
785       lsfollow=
786       found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null`
787       if test -n "$found"; then
788         findfollow=-follow
789         lsfollow=L
790       fi
791       if test -n "$XTERMPATH"; then
792         ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'`
793         if test tty != "$ptygrpn"; then
794           XTERMPATH=
795         fi
796       fi
797     fi
798     if test -n "$WRITEPATH$XTERMPATH"; then
799       found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` 
800       if test -n "$found"; then
801         ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'`
802         AC_NOTE([- pty mode: $ptymode, group: $ptygrp])
803         AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
804         AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
805       else
806         AC_NOTE(- ptys are world accessable)
807       fi
808     else
809       AC_NOTE(- can't determine - assume ptys are world accessable)
810     fi
811   ]
813 rm -f conftest_grp
817 dnl    ****  utmp handling  ****
819 AC_CHECKING(getutent)
820 AC_TRY_LINK([
821 #include <time.h> /* to get time_t on SCO */
822 #include <sys/types.h>
823 #if defined(SVR4) && !defined(DGUX)
824 #include <utmpx.h>
825 #define utmp utmpx
826 #else
827 #include <utmp.h>
828 #endif
829 #ifdef __hpux
830 #define pututline _pututline
831 #endif
833 [int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent();], AC_DEFINE(GETUTENT),
834 olibs="$LIBS"
835 LIBS="$LIBS -lgen"
836 AC_CHECKING(getutent with -lgen)
837 AC_TRY_LINK([
838 #include <time.h>
839 #include <sys/types.h>
840 #if defined(SVR4) && !defined(DGUX)
841 #include <utmpx.h>
842 #define utmp utmpx
843 #else
844 #include <utmp.h>
845 #endif
846 #ifdef __hpux
847 #define pututline _pututline
848 #endif
850 [int x = DEAD_PROCESS; pututline((struct utmp *)0); getutent();], AC_DEFINE(GETUTENT), LIBS="$olibs")
852 AC_CHECKING(ut_host)
853 AC_TRY_COMPILE([
854 #include <time.h>
855 #include <sys/types.h>
856 #if defined(SVR4) && !defined(DGUX)
857 #include <utmpx.h>
858 #define utmp utmpx
859 #else
860 #include <utmp.h>
861 #endif
862 ],[struct utmp u; u.ut_host[0] = 0;], AC_DEFINE(UTHOST))
863 AC_CHECK_HEADER(utempter.h, have_utempter=yes, have_utempter=no)
864 if test "$have_utempter" = yes; then
865   AC_DEFINE(HAVE_UTEMPTER)
866   LIBS="$LIBS -lutempter"
870 dnl    ****  loadav  ****
872 AC_CHECKING(for libutil(s))
873 test -f /usr/lib/libutils.a && LIBS="$LIBS -lutils"
874 test -f /usr/lib/libutil.a && LIBS="$LIBS -lutil"
876 AC_CHECKING(getloadavg)
877 AC_TRY_LINK(,[getloadavg((double *)0, 0);],
878 AC_DEFINE(LOADAV_GETLOADAVG) load=1,
879 if test -f /usr/lib/libkvm.a ; then
880 olibs="$LIBS"
881 LIBS="$LIBS -lkvm"
882 AC_CHECKING(getloadavg with -lkvm)
883 AC_TRY_LINK(,[getloadavg((double *)0, 0);],
884 AC_DEFINE(LOADAV_GETLOADAVG) load=1, LIBS="$olibs")
888 if test -z "$load" ; then
889 AC_EGREP_CPP(yes,
890 [#if defined(NeXT) || defined(apollo) || defined(linux)
891   yes;
892 #endif
893 ], load=1)
895 if test -z "$load" ; then
896 AC_CHECKING(for kernelfile)
897 for core in /unix /vmunix /dynix /hp-ux /xelos /dev/ksyms /kernel/unix /kernel/genunix /unicos /mach /netbsd /386bsd /dgux /bsd /stand/vmunix; do
898   if test -f $core || test -c $core; then
899     break
900   fi
901 done
902 if test ! -f $core && test ! -c $core ; then
903   AC_NOTE(- no kernelfile found)
904 else
905   AC_NOTE(- using kernelfile '$core')
906   if test -r $core ; then
907   AC_DEFINE_UNQUOTED(LOADAV_UNIX,"$core")
908   AC_CHECK_HEADER(nlist.h,
909     [AC_DEFINE(NLIST_STRUCT)
910      AC_CHECKING(n_un in struct nlist)
911      AC_TRY_COMPILE([#include <nlist.h>],
912        [struct nlist n; n.n_un.n_name = 0;],
913         AC_DEFINE(NLIST_NAME_UNION))])
915   AC_CHECKING(for nlist declaration)
916   AC_EGREP_CPP([nlist(( |       )( |    )*.*\(|\()],[
917 #ifdef NLIST_STRUCT
918 # include <nlist.h>
919 #else
920 # include <a.out.h>
921 #endif
922 ],AC_DEFINE(NLIST_DECLARED))
924   AC_CHECKING(for avenrun symbol)
925   nlist64=
926   for av in avenrun _avenrun _Loadavg avenrun _avenrun _Loadavg; do
927   AC_TRY_RUN([
928 #include <sys/types.h>
929 #ifdef NLIST_STRUCT
930 #include <nlist.h>
931 #else
932 #include <a.out.h>
933 #endif
935 $nlist64
937 struct nlist nl[2];
939 main()
941 #if !defined(_AUX_SOURCE) && !defined(AUX)
942 # ifdef NLIST_NAME_UNION
943   nl[0].n_un.n_name = "$av";
944 # else
945   nl[0].n_name = "$av";
946 # endif
947 #else
948   strncpy(nl[0].n_name, "$av", sizeof(nl[0].n_name));
949 #endif
950   nlist(LOADAV_UNIX, nl);
951   if (nl[0].n_value == 0)
952     exit(1);
953   exit(0);
955   ],avensym=$av;break)
956   if test "$av" = _Loadavg; then
957     nlist64='#define nlist nlist64'
958   fi
959   done
960   if test -z "$avensym" ; then
961     AC_NOTE(- no avenrun symbol found)
962   else
963     AC_NOTE(- using avenrun symbol '$avensym')
964     AC_DEFINE_UNQUOTED(LOADAV_AVENRUN,"$avensym")
965     if test -n "$nlist64"; then
966       AC_NOTE(- used nlist64 to find it)
967       AC_DEFINE(LOADAV_USE_NLIST64)
968     fi
969     load=1
970   fi
971   else
972     AC_NOTE(  Can't configure the load average display feature)
973     AC_NOTE(  because $core is not readable by you.)
974     AC_NOTE(  To configure the load average display feature,)
975     AC_NOTE(  re-run configure as root if possible.)
976     AC_NOTE(  If you are not the system administrator then disregard)
977     AC_NOTE(  this warning.  You can still use screen without)
978     AC_NOTE(  the load average display feature.)
979   fi
983 AC_PROGRAM_SOURCE([
984 #include <sys/types.h>
985 #include <sys/param.h>
987 #if !defined(LOADAV_GETLOADAVG) && ((defined(hp300) && !defined(__hpux)) || defined(sun) || (defined(ultrix) && defined(mips)) || defined(_SEQUENT_) || defined(sgi) || (defined(SVR4) && !defined(__hpux)) || defined(sony_news) || (!defined(__osf__) && defined(__alpha)) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX) || defined(m88k))
988 loadtype=long
989 # if defined(apollo) || defined(_IBMR2) || defined(_AUX_SOURCE) || defined(AUX)
990 loadscale=65536
991 # else
992 #  if defined(FSCALE) && !defined(__osf__)
993 #   undef FSCALE
994 loadscale=FSCALE
995 #  else
996 #   ifdef sgi
997 loadtype=int
998 loadscale=1024
999 #   else
1000 #    if defined(MIPS) || defined(SVR4) || defined(m88k)
1001 loadscale=256
1002 #    else /* not MIPS */
1003 loadscale=1000  /* our default value */
1004 #    endif /* MIPS */
1005 #   endif /* sgi */
1006 #  endif /* not FSCALE */
1007 # endif /* not apollo */
1008 #else
1009 loadtype=double
1010 loadscale=1
1011 #endif
1012 #ifdef alliant
1013 loadnum=4
1014 #else
1015 loadnum=3
1016 #endif
1019 if test -n "$load" ; then AC_DEFINE(LOADAV) fi
1020 if test -n "$loadtype" ; then AC_DEFINE_UNQUOTED(LOADAV_TYPE,$loadtype) fi
1021 if test -n "$loadnum" ; then AC_DEFINE_UNQUOTED(LOADAV_NUM,$loadnum) fi
1022 if test -n "$loadscale" ; then AC_DEFINE_UNQUOTED(LOADAV_SCALE,$loadscale) fi
1025 dnl    ****  signal handling  ****
1027 if test -n "$posix" ; then
1029 dnl POSIX has reliable signals with void return type.
1030 AC_NOTE(assuming posix signal definition)
1031 AC_DEFINE(SIGVOID)
1033 else
1035 AC_CHECKING(return type of signal handlers)
1036 AC_TRY_COMPILE(
1037 [#include <sys/types.h>
1038 #include <signal.h>
1039 #ifdef signal
1040 #undef signal
1041 #endif
1042 extern void (*signal ()) ();], [int i;], AC_DEFINE(SIGVOID))
1043 AC_CHECKING(sigset)
1044 AC_TRY_LINK([
1045 #include <sys/types.h>
1046 #include <signal.h>
1048 #ifdef SIGVOID
1049 sigset(0, (void (*)())0);
1050 #else
1051 sigset(0, (int (*)())0);
1052 #endif
1053 ], AC_DEFINE(USESIGSET))
1054 AC_CHECKING(signal implementation)
1055 AC_TRY_RUN([
1056 #include <sys/types.h>
1057 #include <signal.h>
1059 #ifndef SIGCLD
1060 #define SIGCLD SIGCHLD
1061 #endif
1062 #ifdef USESIGSET
1063 #define signal sigset
1064 #endif
1066 int got;
1068 #ifdef SIGVOID
1069 void
1070 #endif
1071 hand()
1073   got++;
1076 main()
1078   /* on hpux we use sigvec to get bsd signals */
1079 #ifdef __hpux
1080   (void)signal(SIGCLD, hand);
1081   kill(getpid(), SIGCLD);
1082   kill(getpid(), SIGCLD);
1083   if (got < 2)
1084     exit(1);
1085 #endif
1086   exit(0);
1088 ],,AC_DEFINE(SYSVSIGS))
1093 dnl    ****  libraries  ****
1096 AC_CHECKING(for crypt and sec libraries)
1097 test -f /lib/libcrypt_d.a || test -f /usr/lib/libcrypt_d.a && LIBS="$LIBS -lcrypt_d"
1098 oldlibs="$LIBS"
1099 LIBS="$LIBS -lcrypt"
1100 AC_CHECKING(crypt)
1101 AC_TRY_LINK(,,,LIBS="$oldlibs")
1102 test -f /lib/libsec.a || test -f /usr/lib/libsec.a && LIBS="$LIBS -lsec"
1103 test -f /lib/libshadow.a || test -f /usr/lib/libshadow.a && LIBS="$LIBS -lshadow"
1104 oldlibs="$LIBS"
1105 LIBS="$LIBS -lsun"
1106 AC_CHECKING(IRIX sun library)
1107 AC_TRY_LINK(,,,LIBS="$oldlibs")
1109 AC_CHECKING(syslog)
1110 AC_TRY_LINK(,[closelog();], , [oldlibs="$LIBS"
1111 LIBS="$LIBS -lbsd"
1112 AC_CHECKING(syslog in libbsd.a)
1113 AC_TRY_LINK(, [closelog();], AC_NOTE(- found.), [LIBS="$oldlibs"
1114 AC_NOTE(- bad news: syslog missing.) AC_DEFINE(NOSYSLOG)])])
1116 AC_EGREP_CPP(yes,
1117 [#ifdef M_UNIX
1118    yes;
1119 #endif
1120 ], LIBS="$LIBS -lsocket -lcrypt_i")
1123 dnl    ****  misc things  ****
1125 AC_CHECKING(wait union)
1126 AC_TRY_COMPILE([#include <sys/types.h>
1127 #include <sys/wait.h>
1129   union wait x;
1130   int y;
1131 #ifdef WEXITSTATUS
1132   y = WEXITSTATUS(x);
1133 #endif
1134 ],AC_DEFINE(BSDWAIT))
1136 if test -z "$butterfly"; then
1137 AC_CHECKING(for termio or termios)
1138 AC_TRY_CPP([#include <termio.h>], AC_DEFINE(TERMIO),
1139 if test -n "$posix"; then
1140 AC_TRY_CPP([#include <termios.h>], AC_DEFINE(TERMIO))
1145 dnl AC_CHECK_HEADER(shadow.h, AC_DEFINE(SHADOWPW))
1146 AC_CHECKING(getspnam)
1147 AC_TRY_LINK([#include <shadow.h>], [getspnam("x");],AC_DEFINE(SHADOWPW))
1149 AC_CHECKING(getttyent)
1150 AC_TRY_LINK(,[getttyent();], AC_DEFINE(GETTTYENT))
1152 AC_CHECKING(fdwalk)
1153 AC_TRY_LINK([#include <stdlib.h>], [fdwalk(NULL, NULL);],AC_DEFINE(HAVE_FDWALK))
1155 AC_CHECKING(whether memcpy/memmove/bcopy handles overlapping arguments)
1156 AC_TRY_RUN([
1157 main() {
1158   char buf[10];
1159   strcpy(buf, "abcdefghi");
1160   bcopy(buf, buf + 2, 3);
1161   if (strncmp(buf, "ababcf", 6))
1162     exit(1);
1163   strcpy(buf, "abcdefghi");
1164   bcopy(buf + 2, buf, 3);
1165   if (strncmp(buf, "cdedef", 6))
1166     exit(1);
1167   exit(0); /* libc version works properly.  */
1168 }], AC_DEFINE(USEBCOPY))
1170 AC_TRY_RUN([
1171 #define bcopy(s,d,l) memmove(d,s,l)
1172 main() {
1173   char buf[10];
1174   strcpy(buf, "abcdefghi");
1175   bcopy(buf, buf + 2, 3);
1176   if (strncmp(buf, "ababcf", 6))
1177     exit(1);
1178   strcpy(buf, "abcdefghi");
1179   bcopy(buf + 2, buf, 3);
1180   if (strncmp(buf, "cdedef", 6))
1181     exit(1);
1182   exit(0); /* libc version works properly.  */
1183 }], AC_DEFINE(USEMEMMOVE))
1186 AC_TRY_RUN([
1187 #define bcopy(s,d,l) memcpy(d,s,l)
1188 main() {
1189   char buf[10];
1190   strcpy(buf, "abcdefghi");
1191   bcopy(buf, buf + 2, 3);
1192   if (strncmp(buf, "ababcf", 6))
1193     exit(1);
1194   strcpy(buf, "abcdefghi");
1195   bcopy(buf + 2, buf, 3);
1196   if (strncmp(buf, "cdedef", 6))
1197     exit(1);
1198   exit(0); /* libc version works properly.  */
1199 }], AC_DEFINE(USEMEMCPY))
1201 AC_MSG_CHECKING(long file names)
1202 (echo 1 > /tmp/conftest9012345) 2>/dev/null
1203 (echo 2 > /tmp/conftest9012346) 2>/dev/null
1204 val=`cat /tmp/conftest9012345 2>/dev/null`
1205 if test -f /tmp/conftest9012345 && test "$val" = 1; then
1206 AC_MSG_RESULT(yes)
1207 else
1208 AC_MSG_RESULT(no)
1209 AC_DEFINE(NAME_MAX, 14)
1211 rm -f /tmp/conftest*
1213 AC_MSG_CHECKING(for vsprintf)
1214 AC_TRY_LINK(,[vsprintf(0,0,0);], AC_MSG_RESULT(yes);AC_DEFINE(USEVARARGS), AC_MSG_RESULT(no))
1216 AC_HEADER_DIRENT
1218 AC_MSG_CHECKING(for setenv)
1219 AC_TRY_LINK(,[setenv((char *)0,(char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes);AC_DEFINE(USESETENV),
1220 AC_MSG_RESULT(no)
1221 AC_MSG_CHECKING(for putenv)
1222 AC_TRY_LINK(,[putenv((char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes) ,  AC_MSG_RESULT(no);AC_DEFINE(NEEDPUTENV)
1224 AC_MSG_CHECKING([for nl_langinfo(CODESET)])
1225 AC_TRY_LINK([
1226 #include <langinfo.h>
1227 ],[nl_langinfo(CODESET);], AC_MSG_RESULT(yes);AC_DEFINE(HAVE_NL_LANGINFO), AC_MSG_RESULT(no))
1229 AC_SEARCH_LIBS(gethostname, nsl)
1231 AC_CHECK_FUNCS(rename fchmod fchown strerror lstat _exit utimes vsnprintf getcwd setlocale strftime)
1233 AC_ARG_ENABLE(pam, [  --enable-pam            enable PAM support])
1234 if test "$enable_pam" = "yes"; then
1235     AC_MSG_CHECKING(for PAM support)
1236     oldlibs="$LIBS"
1237     LIBS="$LIBS -lpam"
1238     AC_TRY_LINK([#include <security/pam_appl.h>], [
1239         pam_start(0, 0, 0, 0);
1240         pam_authenticate(0, 0);
1241         pam_end(0,0);
1242     ], AC_MSG_RESULT(yes);AC_DEFINE(USE_PAM),
1243        AC_MSG_RESULT(no);LIBS="$oldlibs")
1246 AC_ARG_ENABLE(use_locale, [  --enable-locale         use localized month/day names])
1247 if test "$enable_use_locale" = "yes"; then
1248   AC_DEFINE(USE_LOCALE)
1250 AC_ARG_ENABLE(telnet, [  --enable-telnet         enable builtin telnet])
1251 if test "$enable_telnet" = "yes"; then
1252   AC_DEFINE(BUILTIN_TELNET)
1254 AC_ARG_ENABLE(colors256, [  --enable-colors256      enable support for 256 colors])
1255 if test "$enable_colors256" = "yes"; then
1256   AC_DEFINE(COLORS256)
1258 AC_ARG_ENABLE(rxvt_osc, [  --enable-rxvt_osc       enable support for rxvt OSC codes])
1259 if test "$enable_rxvt_osc" = "yes"; then
1260   AC_DEFINE(RXVT_OSC)
1264 dnl    ****  the end  ****
1266 if test -z "$old_CFLAGS"; then
1267   if test "x$CFLAGS" = "x-g"; then
1268     CFLAGS="-O"
1269   fi
1271 dnl Ptx bug workaround -- insert -lc after -ltermcap
1272 test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq"
1274 AC_TRY_RUN(main(){exit(0);},,AC_MSG_ERROR(Can't run the compiler - internal error. Sorry.))
1276 ETCSCREENRC="\"/usr/local/etc/screenrc\""
1277 if test -n "$prefix"; then
1278 ETCSCREENRC="\"$prefix/etc/screenrc\""
1280 AC_MSG_CHECKING(for the global screenrc file)
1281 AC_ARG_WITH(sys-screenrc, [  --with-sys-screenrc=path  where to put the global screenrc file], [ ETCSCREENRC="\"${withval}\"" ])
1282 AC_DEFINE_UNQUOTED(ETCSCREENRC,$ETCSCREENRC)
1283 AC_MSG_RESULT($ETCSCREENRC)
1285 SCREENENCODINGS="\"/usr/local/lib/screen/utf8encodings\""
1286 if test -n "$datadir"; then
1287 eval SCREENENCODINGS="$datadir/screen/utf8encodings"
1288 SCREENENCODINGS="\"$SCREENENCODINGS\""
1290 AC_MSG_CHECKING(for the utf8-encodings location)
1291 AC_DEFINE_UNQUOTED(SCREENENCODINGS,$SCREENENCODINGS)
1292 AC_MSG_RESULT($SCREENENCODINGS)
1294 AC_OUTPUT(Makefile doc/Makefile, [[
1295 # a hook for preserving undef directive in config.h
1296 mv config.h conftest
1297 sed -e 's@^\(.*\)defin.\( .*\) .*/\*\(.*KEEP_UNDEF_HERE\)@\1undef\2     /\*\3@' < conftest > config.h
1298 rm -f conftest
1301 echo ""
1302 if test -z "$AWK"; then
1303 echo "!!! Since you have no awk you must copy the files 'comm.h.dist'"
1304 echo "!!! and 'term.h.dist' to 'comm.h' and 'term.h'."
1305 echo "!!! Do _not_ change the user configuration section in config.h!"
1306 echo "Please check the pathnames in the Makefile."
1307 else
1308 echo "Now please check the pathnames in the Makefile and in the user"
1309 echo "configuration section in config.h."
1311 echo "Then type 'make' to make screen. Good luck."
1312 echo ""