--- libptytty/ptytty.m4 2010/01/31 09:50:16 1.18 +++ libptytty/ptytty.m4 2011/11/20 14:38:44 1.29 @@ -1,6 +1,37 @@ dnl this file is part of libptytty, do not make local modifications dnl http://software.schmorp.de/pkg/libptytty +AC_DEFUN([PT_FIND_FILE], +[AC_CACHE_CHECK(where $1 is located, pt_cv_path_$1, +[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include +#include +#include +$5 +int main() +{ + const char **path, *list[] = { $4, NULL }; + FILE *f = fopen("conftestval", "w"); + if (!f) return 1; +#ifdef $2 + fprintf(f, "%s\n", $2); +#elif defined($3) + fprintf(f, "%s\n", $3); +#else + for (path = list; *path; path++) { + struct stat st; + if (stat(*path, &st) == 0) { + fprintf(f, "%s\n", *path); + break; + } + } +#endif + return fclose(f) != 0; +}]])],[pt_cv_path_$1=`cat conftestval`],[pt_cv_path_$1=], +[AC_MSG_WARN(Define $2 in config.h manually)])]) +if test x$pt_cv_path_$1 != x; then + AC_DEFINE_UNQUOTED($2, "$pt_cv_path_$1", Define location of $1) +fi]) + AC_DEFUN([PTY_CHECK], [ AC_CHECK_HEADERS( \ @@ -24,58 +55,18 @@ setresuid \ ) -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_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[grantpt(0);unlockpt(0);ptsname(0);]])], - [unix98_pty=yes - AC_DEFINE(UNIX98_PTY, 1, "") - AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no)]) -fi +AC_MSG_CHECKING(for UNIX98 ptys) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[grantpt(0);unlockpt(0);ptsname(0);]])], + [unix98_pty=yes + AC_DEFINE(UNIX98_PTY, 1, "") + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) if test -z "$unix98_pty"; then - AC_CHECK_FUNCS(openpty, [], [AC_CHECK_LIB(util, openpty, [AC_DEFINE(HAVE_OPENPTY) LIBS="$LIBS -lutil"])]) + AC_SEARCH_LIBS(openpty, util, AC_DEFINE(HAVE_OPENPTY, 1, "")) fi ]) @@ -128,314 +119,116 @@ dnl# -------------------------------------------- AC_CHECK_HEADERS(utmp.h, -[AC_CACHE_CHECK([for struct utmp], pt_cv_struct_utmp, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#include ]], [[struct utmp ut;]])],[pt_cv_struct_utmp=yes],[pt_cv_struct_utmp=no])]) -if test x$pt_cv_struct_utmp = xyes; then - AC_DEFINE(HAVE_STRUCT_UTMP, 1, Define if utmp.h has struct utmp) -fi -] +AC_CHECK_TYPES([struct utmp], [], [], [ +#include +#include +]) -AC_CACHE_CHECK(for ut_host in utmp struct, pt_cv_struct_utmp_host, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#include ]], [[struct utmp ut; ut.ut_host;]])],[pt_cv_struct_utmp_host=yes],[pt_cv_struct_utmp_host=no])]) -if test x$pt_cv_struct_utmp_host = xyes; then - AC_DEFINE(HAVE_UTMP_HOST, 1, Define if struct utmp contains ut_host) -fi +AC_CHECK_MEMBER([struct utmp.ut_host], +[AC_DEFINE(HAVE_UTMP_HOST, 1, Define if struct utmp contains ut_host)], [], [ +#include +#include +]) -AC_CACHE_CHECK(for ut_pid in utmp struct, pt_cv_struct_utmp_pid, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#include ]], [[struct utmp ut; ut.ut_pid;]])],[pt_cv_struct_utmp_pid=yes],[pt_cv_struct_utmp_pid=no])]) -if test x$pt_cv_struct_utmp_pid = xyes; then - AC_DEFINE(HAVE_UTMP_PID, 1, Define if struct utmp contains ut_pid) -fi +AC_CHECK_MEMBER([struct utmp.ut_pid], +[AC_DEFINE(HAVE_UTMP_PID, 1, Define if struct utmp contains ut_pid)], [], [ +#include +#include +]) ) dnl# AC_CHECK_HEADERS(utmp.h dnl# -------------------------------------------- AC_CHECK_HEADERS(utmpx.h, -[AC_CACHE_CHECK([for struct utmpx], pt_cv_struct_utmpx, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#include ]], [[struct utmpx ut;]])],[pt_cv_struct_utmpx=yes],[pt_cv_struct_utmpx=no])]) -if test x$pt_cv_struct_utmpx = xyes; then - AC_DEFINE(HAVE_STRUCT_UTMPX, 1, Define if utmpx.h has struct utmpx) -fi -] +AC_CHECK_TYPES([struct utmpx], [], [], [ +#include +#include +]) -AC_CACHE_CHECK(for host in utmpx struct, pt_cv_struct_utmpx_host, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#include ]], [[struct utmpx utx; utx.ut_host;]])],[pt_cv_struct_utmpx_host=yes],[pt_cv_struct_utmpx_host=no])]) -if test x$pt_cv_struct_utmpx_host = xyes; then - AC_DEFINE(HAVE_UTMPX_HOST, 1, Define if struct utmpx contains ut_host) -fi +AC_CHECK_MEMBER([struct utmpx.ut_host], +[AC_DEFINE(HAVE_UTMPX_HOST, 1, Define if struct utmpx contains ut_host)], [], [ +#include +#include +]) -AC_CACHE_CHECK(for session in utmpx struct, pt_cv_struct_utmpx_session, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#include ]], [[struct utmpx utx; utx.ut_session;]])],[pt_cv_struct_utmpx_session=yes],[pt_cv_struct_utmpx_session=no])]) -if test x$pt_cv_struct_utmpx_session = xyes; then - AC_DEFINE(HAVE_UTMPX_SESSION, 1, Define if struct utmpx contains ut_session) -fi +AC_CHECK_MEMBER([struct utmpx.ut_session], +[AC_DEFINE(HAVE_UTMPX_SESSION, 1, Define if struct utmpx contains ut_session)], [], [ +#include +#include +]) ) dnl# AC_CHECK_HEADERS(utmpx.h dnl# -------------------------------------------------------------------------- dnl# check for struct lastlog -AC_CACHE_CHECK(for struct lastlog, pt_cv_struct_lastlog, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +AC_CHECK_TYPES([struct lastlog], [], [], [ +#include #include #ifdef HAVE_LASTLOG_H #include #endif -]], [[struct lastlog ll;]])],[pt_cv_struct_lastlog=yes],[pt_cv_struct_lastlog=no])]) -if test x$pt_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, pt_cv_struct_lastlogx, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +AC_CHECK_TYPES([struct lastlogx], [], [], [ +#include #include #ifdef HAVE_LASTLOG_H #include #endif -]], [[struct lastlogx ll;]])],[pt_cv_struct_lastlogx=yes],[pt_cv_struct_lastlogx=no])]) -if test x$pt_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, pt_cv_path_utmp, -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#include +PT_FIND_FILE([utmp], [UTMP_FILE], [_PATH_UTMP], +["/var/run/utmp", "/var/adm/utmp", "/etc/utmp", "/usr/etc/utmp", "/usr/adm/utmp"],[ #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); -}]])],[pt_cv_path_utmp=`cat conftestval`],[pt_cv_path_utmp=],[dnl - AC_MSG_WARN(Define UTMP_FILE in config.h manually)])]) -if test x$pt_cv_path_utmp != x; then - AC_DEFINE_UNQUOTED(UTMP_FILE, "$pt_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, pt_cv_path_utmpx, -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#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); -}]])],[pt_cv_path_utmpx=`cat conftestval`],[pt_cv_path_utmpx=],[dnl - AC_MSG_WARN(Define UTMPX_FILE in config.h manually)])]) -if test x$pt_cv_path_utmpx != x; then - AC_DEFINE_UNQUOTED(UTMPX_FILE, "$pt_cv_path_utmpx", Define location of utmpx) -fi +]) dnl# -------------------------------------------------------------------------- dnl# find wtmp -AC_CACHE_CHECK(where wtmp is located, pt_cv_path_wtmp, -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#include +PT_FIND_FILE([wtmp], [WTMP_FILE], [_PATH_WTMP], +["/var/log/wtmp", "/var/adm/wtmp", "/etc/wtmp", "/usr/etc/wtmp", "/usr/adm/wtmp"],[ #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); -}]])],[pt_cv_path_wtmp=`cat conftestval`],[pt_cv_path_wtmp=],[dnl - AC_MSG_WARN(Define WTMP_FILE in config.h manually)])]) -if test x$pt_cv_path_wtmp != x; then - AC_DEFINE_UNQUOTED(WTMP_FILE, "$pt_cv_path_wtmp", Define location of wtmp) -fi +]) dnl# -------------------------------------------------------------------------- dnl# find wtmpx -AC_CACHE_CHECK(where wtmpx is located, pt_cv_path_wtmpx, -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#include +PT_FIND_FILE([wtmpx], [WTMPX_FILE], [_PATH_WTMPX], +["/var/log/wtmpx", "/var/adm/wtmpx"],[ #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); -}]])],[pt_cv_path_wtmpx=`cat conftestval`],[pt_cv_path_wtmpx=],[dnl - AC_MSG_WARN(Define WTMPX_FILE in config.h manually)])]) -if test x$pt_cv_path_wtmpx != x; then - AC_DEFINE_UNQUOTED(WTMPX_FILE, "$pt_cv_path_wtmpx", Define location of wtmpx) -fi +]) dnl# -------------------------------------------------------------------------- dnl# find lastlog -AC_CACHE_CHECK(where lastlog is located, pt_cv_path_lastlog, -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#include +PT_FIND_FILE([lastlog], [LASTLOG_FILE], [_PATH_LASTLOG], +["/var/log/lastlog"],[ #include -#ifdef HAVE_UTMPX_H -#include -#elif defined(HAVE_UTMP_H) +#ifdef 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); -}]])],[pt_cv_path_lastlog=`cat conftestval`],[pt_cv_path_lastlog=],[dnl - AC_MSG_WARN(Define LASTLOG_FILE in config.h manually)])]) -if test x$pt_cv_path_lastlog != x; then - AC_DEFINE_UNQUOTED(LASTLOG_FILE, "$pt_cv_path_lastlog", Define location of lastlog) -fi +]) dnl# -------------------------------------------------------------------------- dnl# find lastlogx -AC_CACHE_CHECK(where lastlogx is located, pt_cv_path_lastlogx, -[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#include +PT_FIND_FILE([lastlogx], [LASTLOGX_FILE], [_PATH_LASTLOGX], +["/var/log/lastlogx", "/var/adm/lastlogx"],[ #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); -}]])],[pt_cv_path_lastlogx=`cat conftestval`],[pt_cv_path_lastlogx=],[dnl - AC_MSG_WARN(Define LASTLOGX_FILE in config.h manually)])]) -if test x$pt_cv_path_lastlogx != x; then - AC_DEFINE_UNQUOTED(LASTLOGX_FILE, "$pt_cv_path_lastlogx", Define location of lastlogx) -fi +]) ]) AC_DEFUN([SCM_RIGHTS_CHECK], @@ -487,7 +280,7 @@ #include #include -main() +int main() { struct stat st; struct group *gr;