123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- dnl Process this file with autoconf to produce a configure script.
- m4_include([../../../config/override.m4])
- AC_INIT(rlfe.c)
- AC_CONFIG_HEADER(config.h)
- VERSION=0.4
- AC_SUBST(VERSION)
- dnl
- dnl Define some useful macros
- dnl
- AC_DEFUN([AC_PROGRAM_SOURCE],
- [AC_REQUIRE([AC_PROG_CPP])AC_PROVIDE([$0])cat > conftest.c <<EOF
- #include "confdefs.h"
- [$1]
- _CUT_HERE_
- [$2]
- EOF
- eval "$ac_cpp conftest.c 2>&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out"
- . ./conftest.out
- rm -f conftest*
- ])dnl
- dnl
- define(AC_NOTE,
- [echo "$1" 1>&AC_FD_MSG
- ])dnl
- old_CFLAGS="$CFLAGS"
- AC_PROG_CC
- AC_PROG_CPP
- AC_PROG_GCC_TRADITIONAL
- AC_ISC_POSIX
- AC_TRY_RUN(main(){exit(0);},,[
- if test $CC != cc ; then
- AC_NOTE(Your $CC failed - restarting with CC=cc)
- AC_NOTE()
- CC=cc
- 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_TRY_RUN([
- main()
- {
- int __something_strange_();
- __something_strange_(0);
- }
- ],AC_MSG_ERROR(Your compiler does not set the exit status - sorry))
- AC_PROG_AWK
- if test -f etc/toolcheck; then
- AC_CHECKING(for buggy tools)
- sh etc/toolcheck 1>&AC_FD_MSG
- fi
- dnl
- dnl **** special unix variants ****
- dnl
- AC_CHECKING(for System V)
- AC_TRY_COMPILE(
- [#include <sys/types.h>
- #include <signal.h>
- #include <fcntl.h>], [int x = SIGCHLD | FNDELAY;], , AC_DEFINE(SYSV))
- AC_CHECKING(for Solaris 2.x)
- AC_EGREP_CPP(yes,
- [#if defined(SVR4) && defined(sun)
- yes
- #endif
- ], LIBS="$LIBS -lsocket -lnsl -lkstat")
- dnl
- dnl **** select() ****
- dnl
- AC_CHECKING(select)
- AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],,
- LIBS="$LIBS -lnet -lnsl"
- AC_CHECKING(select with $LIBS)
- AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],,
- AC_MSG_ERROR(!!! no select - no screen))
- )
- dnl
- dnl **** check the select implementation ****
- dnl
- AC_CHECKING(select return value)
- AC_TRY_RUN([
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- char *nam = "/tmp/conftest$$";
- #ifdef NAMEDPIPE
- #ifndef O_NONBLOCK
- #define O_NONBLOCK O_NDELAY
- #endif
- #ifndef S_IFIFO
- #define S_IFIFO 0010000
- #endif
- main()
- {
- #ifdef FD_SET
- fd_set f;
- #else
- int f;
- #endif
- #ifdef __FreeBSD__
- /* From Andrew A. Chernov (ache@astral.msk.su):
- * opening RDWR fifo fails in BSD 4.4, but select return values are
- * right.
- */
- exit(0);
- #endif
- (void)alarm(5);
- #ifdef POSIX
- if (mkfifo(nam, 0777))
- #else
- if (mknod(nam, S_IFIFO|0777, 0))
- #endif
- exit(1);
- close(0);
- if (open(nam, O_RDWR | O_NONBLOCK))
- exit(1);
- if (write(0, "TEST", 4) == -1)
- exit(1);
- #else
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- main()
- {
- int s1, s2, l;
- struct sockaddr_un a;
- #ifdef FD_SET
- fd_set f;
- #else
- int f;
- #endif
- (void)alarm(5);
- if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
- exit(1);
- a.sun_family = AF_UNIX;
- strcpy(a.sun_path, nam);
- (void) unlink(nam);
- if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1)
- exit(1);
- if (listen(s1, 2))
- exit(1);
- if (fork() == 0)
- {
- if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
- kill(getppid(), 3);
- (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2);
- if (write(s2, "HELLO", 5) == -1)
- kill(getppid(), 3);
- exit(0);
- }
- l = sizeof(a);
- close(0);
- if (accept(s1, (struct sockaddr *)&a, &l))
- exit(1);
- #endif
- #ifdef FD_SET
- FD_SET(0, &f);
- #else
- f = 1;
- #endif
- if (select(1, &f, 0, 0, 0) == -1)
- exit(1);
- if (select(1, &f, &f, 0, 0) != 2)
- exit(1);
- exit(0);
- }
- ],AC_NOTE(- select is ok),
- AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN))
- dnl
- dnl **** termcap or terminfo ****
- dnl
- AC_CHECKING(for tgetent)
- AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
- olibs="$LIBS"
- LIBS="-lcurses $olibs"
- AC_CHECKING(libcurses)
- AC_TRY_LINK(,[
- #ifdef __hpux
- __sorry_hpux_libcurses_is_totally_broken_in_10_10();
- #else
- tgetent((char *)0, (char *)0);
- #endif
- ],,
- LIBS="-ltermcap $olibs"
- AC_CHECKING(libtermcap)
- AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
- LIBS="-ltermlib $olibs"
- AC_CHECKING(libtermlib)
- AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
- LIBS="-lncurses $olibs"
- AC_CHECKING(libncurses)
- AC_TRY_LINK(,tgetent((char *)0, (char *)0);,,
- AC_MSG_ERROR(!!! no tgetent - no screen))))))
- 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))
- AC_CHECKING(ospeed)
- AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED))
- dnl
- dnl **** PTY specific things ****
- dnl
- AC_CHECKING(for /dev/ptc)
- if test -r /dev/ptc; then
- AC_DEFINE(HAVE_DEV_PTC)
- fi
- AC_CHECKING(for SVR4 ptys)
- sysvr4ptys=
- if test -c /dev/ptmx ; then
- AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS)
- sysvr4ptys=1])
- fi
- AC_CHECK_FUNCS(getpt)
- dnl check for openpty()
- if test -z "$sysvr4ptys"; then
- AC_CHECK_FUNCS(openpty,,
- [AC_CHECK_LIB(util,openpty, [AC_DEFINE(HAVE_OPENPTY)] [LIBS="$LIBS -lutil"])])
- fi
- AC_CHECKING(for ptyranges)
- if test -d /dev/ptym ; then
- pdir='/dev/ptym'
- else
- pdir='/dev'
- fi
- dnl SCO uses ptyp%d
- AC_EGREP_CPP(yes,
- [#ifdef M_UNIX
- yes;
- #endif
- ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`)
- dnl if test -c /dev/ptyp19; then
- dnl ptys=`echo /dev/ptyp??`
- dnl else
- dnl ptys=`echo $pdir/pty??`
- dnl fi
- if test "$ptys" != "$pdir/pty??" ; then
- p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'`
- p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'`
- AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0")
- AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1")
- fi
- dnl **** pty mode/group handling ****
- dnl
- dnl support provided by Luke Mewburn <lm@rmit.edu.au>, 931222
- AC_ARG_WITH(pty-mode, [ --with-pty-mode=mode default mode for ptys], [ ptymode="${withval}" ])
- AC_ARG_WITH(pty-group, [ --with-pty-group=group default group for ptys], [ ptygrp="${withval}" ])
- test -n "$ptymode" || ptymode=0620
- if test -n "$ptygrp" ; then
- AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
- AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
- else
- AC_CHECKING(default tty permissions/group)
- rm -f conftest_grp
- AC_TRY_RUN([
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <stdio.h>
- main()
- {
- struct stat sb;
- char *x,*ttyname();
- int om, m;
- FILE *fp;
- if (!(x = ttyname(0))) exit(1);
- if (stat(x, &sb)) exit(1);
- om = sb.st_mode;
- if (om & 002) exit(0);
- m = system("mesg y");
- if (m == -1 || m == 127) exit(1);
- if (stat(x, &sb)) exit(1);
- m = sb.st_mode;
- if (chmod(x, om)) exit(1);
- if (m & 002) exit(0);
- if (sb.st_gid == getgid()) exit(1);
- if (!(fp=fopen("conftest_grp", "w")))
- exit(1);
- fprintf(fp, "%d\n", sb.st_gid);
- fclose(fp);
- exit(0);
- }
- ],[
- if test -f conftest_grp; then
- ptygrp=`cat conftest_grp`
- AC_NOTE([- pty mode: $ptymode, group: $ptygrp])
- AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
- AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
- else
- AC_NOTE(- ptys are world accessable)
- fi
- ],[
- WRITEPATH=''
- XTERMPATH=''
- AC_PATH_PROG(WRITEPATH, write)
- AC_PATH_PROG(XTERMPATH, xterm)
- found=
- if test -n "$WRITEPATH$XTERMPATH"; then
- findfollow=
- lsfollow=
- found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null`
- if test -n "$found"; then
- findfollow=-follow
- lsfollow=L
- fi
- if test -n "$XTERMPATH"; then
- ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'`
- if test tty != "$ptygrpn"; then
- XTERMPATH=
- fi
- fi
- fi
- if test -n "$WRITEPATH$XTERMPATH"; then
- found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print`
- if test -n "$found"; then
- ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'`
- AC_NOTE([- pty mode: $ptymode, group: $ptygrp])
- AC_DEFINE_UNQUOTED(PTYMODE, $ptymode)
- AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp)
- else
- AC_NOTE(- ptys are world accessable)
- fi
- else
- AC_NOTE(- can't determine - assume ptys are world accessable)
- fi
- ]
- )
- rm -f conftest_grp
- fi
- dnl
- dnl **** signal handling ****
- dnl
- if test -n "$posix" ; then
- dnl POSIX has reliable signals with void return type.
- AC_NOTE(assuming posix signal definition)
- AC_DEFINE(SIGVOID)
- else
- AC_CHECKING(return type of signal handlers)
- AC_TRY_COMPILE(
- [#include <sys/types.h>
- #include <signal.h>
- #ifdef signal
- #undef signal
- #endif
- extern void (*signal ()) ();], [int i;], AC_DEFINE(SIGVOID))
- AC_CHECKING(sigset)
- AC_TRY_LINK([
- #include <sys/types.h>
- #include <signal.h>
- ],[
- #ifdef SIGVOID
- sigset(0, (void (*)())0);
- #else
- sigset(0, (int (*)())0);
- #endif
- ], AC_DEFINE(USESIGSET))
- AC_CHECKING(signal implementation)
- AC_TRY_RUN([
- #include <sys/types.h>
- #include <signal.h>
- #ifndef SIGCLD
- #define SIGCLD SIGCHLD
- #endif
- #ifdef USESIGSET
- #define signal sigset
- #endif
- int got;
- #ifdef SIGVOID
- void
- #endif
- hand()
- {
- got++;
- }
- main()
- {
- /* on hpux we use sigvec to get bsd signals */
- #ifdef __hpux
- (void)signal(SIGCLD, hand);
- kill(getpid(), SIGCLD);
- kill(getpid(), SIGCLD);
- if (got < 2)
- exit(1);
- #endif
- exit(0);
- }
- ],,AC_DEFINE(SYSVSIGS))
- fi
- AC_CHECK_HEADERS(sys/stropts.h sys/wait.h)
- AC_OUTPUT(Makefile)
|