From: Jun T <takimoto-j@kba.biglobe.ne.jp>
To: zsh-workers@zsh.org
Subject: [PATCH] use /dev/fd on Cygwin for process substitution
Date: Wed, 8 Jan 2020 17:33:48 +0900 [thread overview]
Message-ID: <8E2BA7B0-333E-47E6-B912-1D1F29FD3860@kba.biglobe.ne.jp> (raw)
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
reply other threads:[~2020-01-08 8:34 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8E2BA7B0-333E-47E6-B912-1D1F29FD3860@kba.biglobe.ne.jp \
--to=takimoto-j@kba.biglobe.ne.jp \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).