5836a818ec
This reverts commitb558ff043d
. This reverts commit4a11f20659
. The initial import commit failed to retain local changes made to readline's configure.in (and the commit message erroneously stated that there were no local changes that needed to be reapplied). Also the import caused a couple of build errors and a scattering of testsuite regressions throughout many arches. It's probably better to start over with this import, hopefully more carefully next time.
442 lines
8.8 KiB
Text
442 lines
8.8 KiB
Text
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)
|