From 2073eca9f32a13df802e1dddf8fc23c5b99ff921 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 20 Feb 2004 15:27:35 +0000 Subject: 19456: Fix ptmx tests, again. --- ChangeLog | 5 +++++ Src/Modules/zpty.c | 5 ++--- Src/Zle/iwidgets.list | 2 +- Src/Zle/zle_hist.c | 3 ++- Src/system.h | 8 ++++++++ configure.ac | 34 ++++++++++++++++++++++++++++++---- 6 files changed, 48 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 88271576c..816f40f15 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-02-20 Peter Stephenson + + * 19456: configure.ac, Src/system.h, Src/Modules/zpty.c, + Src/Zle/iwidgets.list, Src/Zle/zle_hist.c: Fix 19428. + 2004-02-20 Oliver Kiddle * 19455: Completion/Unix/Command/_mount: complete hostnames diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c index e1f75c30a..a3e6f2770 100644 --- a/Src/Modules/zpty.c +++ b/Src/Modules/zpty.c @@ -154,8 +154,7 @@ getptycmd(char *name) return NULL; } -#if defined(HAVE_DEV_PTMX) && defined(HAVE_GRANTPT) && \ - defined(HAVE_PTSNAME) && defined(HAVE_UNLOCKPT) +#ifdef USE_DEV_PTMX #ifdef HAVE_SYS_STROPTS_H #include @@ -190,7 +189,7 @@ get_pty(int master, int *retfd) close(mfd); return 1; } -#if defined(I_FIND) && defined(I_PUSH) +#if defined(I_FIND) && defined(I_PUSH) && defined(__SVR4) /* * Use if STREAMS is available. The test is probably OK, * but we could use e.g. the sys/stropts.h test. diff --git a/Src/Zle/iwidgets.list b/Src/Zle/iwidgets.list index fbd45dacc..36d0cf396 100644 --- a/Src/Zle/iwidgets.list +++ b/Src/Zle/iwidgets.list @@ -56,7 +56,7 @@ "expand-word", expandword, 0 "forward-char", forwardchar, 0 "forward-word", forwardword, 0 -"get-line", getline, 0 +"get-line", zgetline, 0 "gosmacs-transpose-chars", gosmacstransposechars, 0 "history-beginning-search-backward", historybeginningsearchbackward, 0 "history-beginning-search-forward", historybeginningsearchforward, 0 diff --git a/Src/Zle/zle_hist.c b/Src/Zle/zle_hist.c index 1c17defc7..b24db660c 100644 --- a/Src/Zle/zle_hist.c +++ b/Src/Zle/zle_hist.c @@ -660,9 +660,10 @@ pushinput(char **args) return ret; } +/* Renamed to avoid clash with library function */ /**/ int -getline(char **args) +zgetline(char **args) { char *s = (char *)getlinknode(bufstack); diff --git a/Src/system.h b/Src/system.h index d7372924b..558508d2d 100644 --- a/Src/system.h +++ b/Src/system.h @@ -37,6 +37,14 @@ #endif #endif +#ifdef __linux +/* + * Turn on numerous extensions. + * This is in order to get the functions for manipulating /dev/ptmx. + */ +#define _GNU_SOURCE 1 +#endif + /* NeXT has half-implemented POSIX support * * which currently fools configure */ #ifdef __NeXT__ diff --git a/configure.ac b/configure.ac index cce7b3920..0a85f5bc8 100644 --- a/configure.ac +++ b/configure.ac @@ -1802,8 +1802,6 @@ dnl Check for pty multiplexer for use in pty module. dnl We need to open it read/write, so make sure it is writeable. dnl Yet another test which won't work when cross-compiling. dnl --------------- -AH_TEMPLATE([HAVE_DEV_PTMX], -[Define to 1 if your system can use /dev/ptmx for creating ptys.]) AC_CACHE_CHECK(if your system has /dev/ptmx, ac_cv_have_dev_ptmx, [if test -w /dev/ptmx; then @@ -1811,10 +1809,38 @@ ac_cv_have_dev_ptmx, else ac_cv_have_dev_ptmx=no fi]) -if test $ac_cv_have_dev_ptmx = yes; then - AC_DEFINE(HAVE_DEV_PTMX) + +dnl -------- +dnl Check if the ptmx functions are usable. +dnl We need to be able to find the prototypes, which may +dnl require non-POSIX source definitions. So test to see +dnl if ptsname is correctly recognised as returning a char *. +dnl We do this by making sure a program where ptsname() is declared +dnl as returning int does *not* compile. +dnl On Linux we need the XOPEN extensions. The easiest way to get +dnl these is by defining _GNU_SOURCE. +dnl ------- +AH_TEMPLATE([USE_DEV_PTMX], +[Define to 1 if all the kit for using /dev/ptmx for ptys is available.]) +if test $ac_cv_have_dev_ptmx = yes && \ + test $ac_cv_func_grantpt = yes && \ + test $ac_cv_func_unlockpt = yes && \ + test $ac_cv_func_ptsname = yes; then + AC_CACHE_CHECK([if /dev/ptmx is usable], + ac_cv_use_dev_ptmx, + [AC_TRY_COMPILE([#ifdef __linux +#define _GNU_SOURCE 1 +#endif +#include +int ptsname();], , + ac_cv_use_dev_ptmx=no, + ac_cv_use_dev_ptmx=yes)]) + if test $ac_cv_use_dev_ptmx = yes; then + AC_DEFINE(USE_DEV_PTMX) + fi fi + dnl --------------- dnl dynamic loading dnl --------------- -- cgit 1.4.1