--- rxvt-unicode/aclocal.m4 2006/01/20 23:52:55 1.2 +++ rxvt-unicode/aclocal.m4 2006/01/21 18:14:57 1.3 @@ -229,3 +229,407 @@ done]) fi ]) + +AC_DEFUN([PTY_CHECK], +[ +AC_CHECK_HEADERS( \ + pty.h \ + util.h \ + libutil.h \ + sys/ioctl.h \ + sys/stropts.h \ +) + +AC_CHECK_FUNCS( \ + revoke \ + _getpty \ + getpt \ + posix_openpt \ + isastream \ +) + +have_clone=no + +AC_MSG_CHECKING(for /dev/ptym/clone) +if test -e /dev/ptym/clone; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DEV_CLONE, 1, [Define to 1 if you have /dev/ptym/clone]) + AC_DEFINE(CLONE_DEVICE, "/dev/ptym/clone", [clone device filename]) + have_clone=yes +else + AC_MSG_RESULT(no) +fi + +AC_MSG_CHECKING(for /dev/ptc) +if test -e /dev/ptc; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DEV_PTC, 1, [Define to 1 if you have /dev/ptc]) + AC_DEFINE(CLONE_DEVICE, "/dev/ptc", [clone device filename]) + have_clone=yes +else + AC_MSG_RESULT(no) +fi + +case $host in + *-*-cygwin*) + have_clone=yes + AC_DEFINE(CLONE_DEVICE, "/dev/ptmx", [clone device filename]) + ;; + *) + AC_MSG_CHECKING(for /dev/ptmx) + if test -e /dev/ptmx; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DEV_PTMX, 1, [Define to 1 if you have /dev/ptmx]) + AC_DEFINE(CLONE_DEVICE, "/dev/ptmx", [clone device filename]) + have_clone=yes + else + AC_MSG_RESULT(no) + fi + ;; +esac + +if test x$ac_cv_func_getpt = xyes -o x$ac_cv_func_posix_openpt = xyes -o x$have_clone = xyes; then + AC_MSG_CHECKING(for UNIX98 ptys) + AC_TRY_LINK([#include ], + [grantpt(0);unlockpt(0);ptsname(0);], + [unix98_pty=yes + AC_DEFINE(UNIX98_PTY, 1, "") + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) +fi + +if test -z "$unix98_pty"; then + AC_CHECK_FUNCS(openpty, [], [AC_CHECK_LIB(util, openpty, [AC_DEFINE(HAVE_OPENPTY) LIBS="$LIBS -lutil"])]) +fi +]) + +AC_DEFUN([UTMP_CHECK], +[ +AC_CHECK_FUNCS( \ + ttyslot \ + updwtmp \ + updwtmpx \ +) + +AC_CHECK_HEADERS( \ + utmp.h \ + utmpx.h \ + lastlog.h \ +) + +dnl# -------------------------------------------------------------------------- +dnl# DO ALL UTMP AND WTMP CHECKING +dnl# -------------------------------------------------------------------------- +dnl# check for host field in utmp structure + +dnl# -------------------------------------------- +AC_CHECK_HEADER(utmp.h, +[AC_CACHE_CHECK([for struct utmp], rxvt_cv_struct_utmp, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include ]], [[struct utmp ut;]])],[rxvt_cv_struct_utmp=yes],[rxvt_cv_struct_utmp=no])]) +if test x$rxvt_cv_struct_utmp = xyes; then + AC_DEFINE(HAVE_STRUCT_UTMP, 1, Define if utmp.h has struct utmp) +fi +] + +AC_CACHE_CHECK(for ut_host in utmp struct, rxvt_cv_struct_utmp_host, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include ]], [[struct utmp ut; ut.ut_host;]])],[rxvt_cv_struct_utmp_host=yes],[rxvt_cv_struct_utmp_host=no])]) +if test x$rxvt_cv_struct_utmp_host = xyes; then + AC_DEFINE(HAVE_UTMP_HOST, 1, Define if struct utmp contains ut_host) +fi + +AC_CACHE_CHECK(for ut_pid in utmp struct, rxvt_cv_struct_utmp_pid, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include ]], [[struct utmp ut; ut.ut_pid;]])],[rxvt_cv_struct_utmp_pid=yes],[rxvt_cv_struct_utmp_pid=no])]) +if test x$rxvt_cv_struct_utmp_pid = xyes; then + AC_DEFINE(HAVE_UTMP_PID, 1, Define if struct utmp contains ut_pid) +fi +) dnl# AC_CHECK_HEADER(utmp.h + +dnl# -------------------------------------------- + +AC_CHECK_HEADER(utmpx.h, +[AC_CACHE_CHECK([for struct utmpx], rxvt_cv_struct_utmpx, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include ]], [[struct utmpx ut;]])],[rxvt_cv_struct_utmpx=yes],[rxvt_cv_struct_utmpx=no])]) +if test x$rxvt_cv_struct_utmpx = xyes; then + AC_DEFINE(HAVE_STRUCT_UTMPX, 1, Define if utmpx.h has struct utmpx) +fi +] + +AC_CACHE_CHECK(for host in utmpx struct, rxvt_cv_struct_utmpx_host, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include ]], [[struct utmpx utx; utx.ut_host;]])],[rxvt_cv_struct_utmpx_host=yes],[rxvt_cv_struct_utmpx_host=no])]) +if test x$rxvt_cv_struct_utmpx_host = xyes; then + AC_DEFINE(HAVE_UTMPX_HOST, 1, Define if struct utmpx contains ut_host) +fi + +AC_CACHE_CHECK(for session in utmpx struct, rxvt_cv_struct_utmpx_session, +[AC_TRY_COMPILE([#include +#include ], +[struct utmpx utx; utx.ut_session;], +rxvt_cv_struct_utmpx_session=yes, rxvt_cv_struct_utmpx_session=no)]) +if test x$rxvt_cv_struct_utmpx_session = xyes; then + AC_DEFINE(HAVE_UTMPX_SESSION, 1, Define if struct utmpx contains ut_session) +fi +) dnl# AC_CHECK_HEADER(utmpx.h + +dnl# -------------------------------------------------------------------------- +dnl# check for struct lastlog +AC_CACHE_CHECK(for struct lastlog, rxvt_cv_struct_lastlog, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include +#ifdef HAVE_LASTLOG_H +#include +#endif +]], [[struct lastlog ll;]])],[rxvt_cv_struct_lastlog=yes],[rxvt_cv_struct_lastlog=no])]) +if test x$rxvt_cv_struct_lastlog = xyes; then + AC_DEFINE(HAVE_STRUCT_LASTLOG, 1, Define if utmp.h or lastlog.h has struct lastlog) +fi + +dnl# check for struct lastlogx +AC_CACHE_CHECK(for struct lastlogx, rxvt_cv_struct_lastlogx, +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include +#ifdef HAVE_LASTLOG_H +#include +#endif +]], [[struct lastlogx ll;]])],[rxvt_cv_struct_lastlogx=yes],[rxvt_cv_struct_lastlogx=no])]) +if test x$rxvt_cv_struct_lastlogx = xyes; then + AC_DEFINE(HAVE_STRUCT_LASTLOGX, 1, Define if utmpx.h or lastlog.h has struct lastlogx) +fi + +dnl# -------------------------------------------------------------------------- +dnl# FIND FILES +dnl# -------------------------------------------------------------------------- + +dnl# find utmp +AC_CACHE_CHECK(where utmp is located, rxvt_cv_path_utmp, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#include +#include +#include +main() +{ + char **u, *utmplist[] = { + "/var/run/utmp", "/var/adm/utmp", "/etc/utmp", "/usr/etc/utmp", "/usr/adm/utmp", NULL }; + FILE *a, *f=fopen("conftestval", "w"); + if (!f) exit(1); +#ifdef UTMP_FILE + fprintf(f, "%s\n", UTMP_FILE); + exit(0); +#endif +#ifdef _PATH_UTMP + fprintf(f, "%s\n", _PATH_UTMP); + exit(0); +#endif + for (u = utmplist; *u; u++) { + if ((a = fopen(*u, "r")) != NULL || errno == EACCES) { + fprintf(f, "%s\n", *u); + exit(0); + } + } + exit(0); +}]])],[rxvt_cv_path_utmp=`cat conftestval`],[rxvt_cv_path_utmp=],[dnl + AC_MSG_WARN(Define RXVT_UTMP_FILE in config.h manually)])]) +if test x$rxvt_cv_path_utmp != x; then + AC_DEFINE_UNQUOTED(RXVT_UTMP_FILE, "$rxvt_cv_path_utmp", Define location of utmp) +fi + +dnl# -------------------------------------------------------------------------- + +dnl# find utmpx - if a utmp file exists at the same location and is more than +dnl# a day newer, then dump the utmpx. People leave lots of junk around. +AC_CACHE_CHECK(where utmpx is located, rxvt_cv_path_utmpx, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#include +#include +#include +#include +#ifdef HAVE_STRING_H +#include +#endif +main() +{ + char **u, *p, *utmplist[] = { +#ifdef UTMPX_FILE + UTMPX_FILE, +#endif +#ifdef _PATH_UTMPX + _PATH_UTMPX, +#endif + "/var/adm/utmpx", "/etc/utmpx", NULL }; + FILE *a, *f=fopen("conftestval", "w"); + struct stat statu, statux; + if (!f) exit(1); + for (u = utmplist; *u; u++) { + if ((a = fopen(*u, "r")) != NULL || errno == EACCES) { + if (stat(*u, &statux) < 0) + continue; + p = strdup(*u); + p[strlen(p) - 1] = '\0'; + if (stat(p, &statu) >= 0 + && (statu.st_mtime - statux.st_mtime > 86400)) + continue; + fprintf(f, "%s\n", *u); + exit(0); + } + } + exit(0); +}]])],[rxvt_cv_path_utmpx=`cat conftestval`],[rxvt_cv_path_utmpx=],[dnl + AC_MSG_WARN(Define RXVT_UTMPX_FILE in config.h manually)])]) +if test x$rxvt_cv_path_utmpx != x; then + AC_DEFINE_UNQUOTED(RXVT_UTMPX_FILE, "$rxvt_cv_path_utmpx", Define location of utmpx) +fi + +dnl# -------------------------------------------------------------------------- + +dnl# find wtmp +AC_CACHE_CHECK(where wtmp is located, rxvt_cv_path_wtmp, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#include +#ifdef HAVE_UTMP_H +#include +#endif +#include +main() +{ + char **w, *wtmplist[] = { + "/var/log/wtmp", "/var/adm/wtmp", "/etc/wtmp", "/usr/etc/wtmp", "/usr/adm/wtmp", NULL }; + FILE *a, *f=fopen("conftestval", "w"); + if (!f) exit(1); +#ifdef WTMP_FILE + fprintf(f, "%s\n", WTMP_FILE); + exit(0); +#endif +#ifdef _PATH_WTMP + fprintf(f, "%s\n", _PATH_WTMP); + exit(0); +#endif + for (w = wtmplist; *w; w++) { + if ((a = fopen(*w, "r")) != NULL || errno == EACCES) { + fprintf(f, "%s\n", *w); + exit(0); + } + } + exit(0); +}]])],[rxvt_cv_path_wtmp=`cat conftestval`],[rxvt_cv_path_wtmp=],[dnl + AC_MSG_WARN(Define RXVT_WTMP_FILE in config.h manually)])]) +if test x$rxvt_cv_path_wtmp != x; then + AC_DEFINE_UNQUOTED(RXVT_WTMP_FILE, "$rxvt_cv_path_wtmp", Define location of wtmp) +fi +dnl# -------------------------------------------------------------------------- + +dnl# find wtmpx +AC_CACHE_CHECK(where wtmpx is located, rxvt_cv_path_wtmpx, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#ifdef HAVE_UTMPX_H +#include +#endif +#include +main() +{ + char **w, *wtmplist[] = { + "/var/log/wtmpx", "/var/adm/wtmpx", NULL }; + FILE *a, *f=fopen("conftestval", "w"); + if (!f) exit(1); +#ifdef WTMPX_FILE + fprintf(f, "%s\n", WTMPX_FILE); + exit(0); +#endif +#ifdef _PATH_WTMPX + fprintf(f, "%s\n", _PATH_WTMPX); + exit(0); +#endif + for (w = wtmplist; *w; w++) { + if ((a = fopen(*w, "r")) != NULL || errno == EACCES) { + fprintf(f, "%s\n", *w); + exit(0); + } + } + exit(0); +}]])],[rxvt_cv_path_wtmpx=`cat conftestval`],[rxvt_cv_path_wtmpx=],[dnl + AC_MSG_WARN(Define RXVT_WTMPX_FILE in config.h manually)])]) +if test x$rxvt_cv_path_wtmpx != x; then + AC_DEFINE_UNQUOTED(RXVT_WTMPX_FILE, "$rxvt_cv_path_wtmpx", Define location of wtmpx) +fi +dnl# -------------------------------------------------------------------------- + +dnl# find lastlog +AC_CACHE_CHECK(where lastlog is located, rxvt_cv_path_lastlog, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#include +#ifdef HAVE_UTMPX_H +#include +#elif defined(HAVE_UTMP_H) +#include +#endif +#ifdef HAVE_LASTLOG_H +#include +#endif +#include +main() +{ + char **w, *lastloglist[] = { "/var/log/lastlog", NULL }; + FILE *a, *f=fopen("conftestval", "w"); + if (!f) exit(1); +#ifdef LASTLOG_FILE + fprintf(f, "%s\n", LASTLOG_FILE); + exit(0); +#endif +#ifdef _PATH_LASTLOG + fprintf(f, "%s\n", _PATH_LASTLOG); + exit(0); +#endif + for (w = lastloglist; *w; w++) { + if ((a = fopen(*w, "r")) != NULL || errno == EACCES) { + fprintf(f, "%s\n", *w); + exit(0); + } + } + exit(0); +}]])],[rxvt_cv_path_lastlog=`cat conftestval`],[rxvt_cv_path_lastlog=],[dnl + AC_MSG_WARN(Define RXVT_LASTLOG_FILE in config.h manually)])]) +if test x$rxvt_cv_path_lastlog != x; then + AC_DEFINE_UNQUOTED(RXVT_LASTLOG_FILE, "$rxvt_cv_path_lastlog", Define location of lastlog) + if test -d "$rxvt_cv_path_lastlog"; then + AC_DEFINE(LASTLOG_IS_DIR, 1, Define if lastlog is provided via a directory) + fi +fi +dnl# -------------------------------------------------------------------------- + +dnl# find lastlogx +AC_CACHE_CHECK(where lastlogx is located, rxvt_cv_path_lastlogx, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#ifdef HAVE_UTMPX_H +#include +#endif +#include +main() +{ + char **w, *wtmplist[] = { "/var/log/lastlogx", "/var/adm/lastlogx", NULL }; + FILE *a, *f=fopen("conftestval", "w"); + if (!f) exit(1); +#ifdef LASTLOGX_FILE + fprintf(f, "%s\n", LASTLOGX_FILE); + exit(0); +#endif +#ifdef _PATH_LASTLOGX + fprintf(f, "%s\n", _PATH_LASTLOGX); + exit(0); +#endif + for (w = wtmplist; *w; w++) { + if ((a = fopen(*w, "r")) != NULL || errno == EACCES) { + fprintf(f, "%s\n", *w); + exit(0); + } + } + exit(0); +}]])],[rxvt_cv_path_lastlogx=`cat conftestval`],[rxvt_cv_path_lastlogx=],[dnl + AC_MSG_WARN(Define RXVT_LASTLOGX_FILE in config.h manually)])]) +if test x$rxvt_cv_path_lastlogx != x; then + AC_DEFINE_UNQUOTED(RXVT_LASTLOGX_FILE, "$rxvt_cv_path_lastlogx", Define location of lastlogx) +fi +]) +