Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] use /dev/fd on Cygwin for process substitution
Tests C04 and D03 fail on Cygwin:
./C04funcdef.ztst:
@@ -1,2 +1 @@
-process expanded
expanded to file
Test ./C04funcdef.ztst failed: output differs from expected as shown above for:
() (cat $1 $2) <(print process expanded) =(print expanded to file)
Was testing: Process substitution with anonymous functions
./D03procsubst.ztst:
@@ -1,2 +0,0 @@
-First
-Zweite
Test ./D03procsubst.ztst failed: output differs from expected as shown above for:
copycat <(print First) <(print Zweite)
Was testing: FDs remain open for external commands called from functions
As can be seen, both are related with the process substitution.
On Cygwin, FIFO (not /dev/fd) is used for the process substitution
because PATH_DEV_FD is unset in configure.ac, line 2062:
[if test "$host_os" = cygwin; then
dnl In current (2008/12/01) versions of Cygwin these are present but don't
dnl seem to work smoothly for process substitution; no great surprise
dnl since getting processes to work at all on Cygwin is a big challenge.
dnl We'll rely on FIFOs, since they do what we need.
zsh_cv_sys_path_dev_fd=no
If I remove this part (as in the patch below) the two tests succeed.
So I *guess* /dev/fd is now working as expected on Cygwin.
(maybe there are some race conditions for FIFO)
In the patch I also removed the cygwin-specific section for FIFO
since on recent Cygwin configure can correctly detect FIFO without it
(although FIFO is not used if PATH_DEV_FD is set).
diff --git a/configure.ac b/configure.ac
index 8fd4d452f..c8885cac5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2059,17 +2059,9 @@ dnl be good enough.
AH_TEMPLATE([PATH_DEV_FD],
[Define to the path of the /dev/fd filesystem.])
AC_CACHE_CHECK(for /dev/fd filesystem, zsh_cv_sys_path_dev_fd,
-[if test "$host_os" = cygwin; then
-dnl In current (2008/12/01) versions of Cygwin these are present but don't
-dnl seem to work smoothly for process substitution; no great surprise
-dnl since getting processes to work at all on Cygwin is a big challenge.
-dnl We'll rely on FIFOs, since they do what we need.
-zsh_cv_sys_path_dev_fd=no
-else
[for zsh_cv_sys_path_dev_fd in /proc/self/fd /dev/fd no; do
test x`echo ok|(exec 3<&0; cat $zsh_cv_sys_path_dev_fd/3 2>/dev/null;)` = xok && break
- done]
-fi])
+ done])
if test x$zsh_cv_sys_path_dev_fd != xno; then
AC_DEFINE_UNQUOTED(PATH_DEV_FD, "$zsh_cv_sys_path_dev_fd")
fi
@@ -2260,14 +2252,9 @@ dnl -----------
dnl named FIFOs
dnl -----------
dnl
-dnl Named FIFOs work well enough on recent versions of Cygwin
-dnl to provide what we want. Simply enable them.
AC_CACHE_CHECK(if named FIFOs work,
zsh_cv_sys_fifo,
-[if test "$host_os" = cygwin; then
-zsh_cv_sys_fifo=yes
-else
-AC_RUN_IFELSE([AC_LANG_SOURCE([[
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <fcntl.h>
#include <signal.h>
main()
@@ -2295,7 +2282,7 @@ main()
exit(ret);
}
]])],[zsh_cv_sys_fifo=yes],[zsh_cv_sys_fifo=no],[zsh_cv_sys_fifo=yes])
-fi])
+])
AH_TEMPLATE([HAVE_FIFOS],
[Define to 1 if system has working FIFOs.])
if test x$zsh_cv_sys_fifo = xyes; then
Messages sorted by:
Reverse Date,
Date,
Thread,
Author