From: Eli Zaretskii <eliz@gnu.org>
To: ludo@gnu.org (Ludovic Courtès)
Cc: guile-user@gnu.org
Subject: Re: guile 2.0.9 build on mingw
Date: Sun, 16 Jun 2013 18:40:27 +0300 [thread overview]
Message-ID: <83y5aat66s.fsf@gnu.org> (raw)
In-Reply-To: <87y5aa15rx.fsf@gnu.org>
> From: ludo@gnu.org (Ludovic Courtès)
> Cc: mhw@netris.org, guile-user@gnu.org
> Date: Sun, 16 Jun 2013 16:36:50 +0200
>
> > The patch below, which should be applied on top of the one I sent
> > yesterday, is needed because open-pipe does this:
> >
> > (open-pipe* mode "/bin/sh" "-c" command))
> >
> > and obviously there's no /bin/sh on Windows.
> >
> > --- libguile/posix.c~1 2013-06-13 08:54:44.926293300 +0300
> > +++ libguile/posix.c 2013-06-13 08:57:44.262743700 +0300
> > @@ -1300,7 +1300,9 @@ scm_open_process (SCM mode, SCM prog, SC
> > int pid;
> > char *exec_file;
> > char **exec_argv;
> > +#ifdef HAVE_FORK
> > int max_fd = 1024;
> > +#endif
>
> The #ifdef appears unnecessary given that this is already in #ifdef HAVE_FORK.
As I wrote above, this was supposed to be applied on top of what I
sent here:
http://lists.gnu.org/archive/html/guile-user/2013-06/msg00033.html
which, among other things, inserted "#endif" before scm_open_process,
thus making it available when fork isn't.
> This last hunk doesn’t apply since the whole thing is already in
> #ifdef HAVE_FORK AFAICS.
See above. The intent was to make open-process available on Windows,
so ifdef'ing all of it conditioned on fork would be
counter-productive...
> What about this (hopefully simpler) patch instead?
>
> diff --git a/module/ice-9/popen.scm b/module/ice-9/popen.scm
> index 7d0549e..e431949 100644
> --- a/module/ice-9/popen.scm
> +++ b/module/ice-9/popen.scm
> @@ -61,13 +61,23 @@ port to the process is created: it should be the value of
> (hashq-set! port/pid-table port pid)
> port))))
>
> +(define %shell-command
> + (cond ((file-exists? "/bin/sh")
> + "/bin/sh")
> + ((getenv "SHELL")
> + ;; Hope that $SHELL points at a Bourne-compatible shell.
> + => identity)
> + (else
> + ;; Assume we're on Windows.
> + "cmd.exe")))
> +
> (define (open-pipe command mode)
> "Executes the shell command @var{command} (a string) in a subprocess.
> A port to the process (based on pipes) is created and returned.
> @var{mode} specifies whether an input, an output or an input-output
> port to the process is created: it should be the value of
> @code{OPEN_READ}, @code{OPEN_WRITE} or @code{OPEN_BOTH}."
> - (open-pipe* mode "/bin/sh" "-c" command))
> + (open-pipe* mode %shell-command "-c" command))
>
> (define (fetch-pid port)
> (let ((pid (hashq-ref port/pid-table port)))
The "-c" part needs to be replaced with "/c". And that would only
take care of open-pipe; there are more instances of using /bin/sh
etc. elsewhere in Guile. If we want to handle this on the Scheme
level, it will be necessary to consistently discourage people from
using explicit shell file names and instead use %shell-file-name and
%shell-command-switch, like Emacs does.
And the parts of scm_open_process that replace the Unix fork/exec
stuff will still be needed, just without rewriting exec_file and
exec_arg[].
Thanks.
next prev parent reply other threads:[~2013-06-16 15:40 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-20 19:46 guile 2.0.9 build on mingw Panicz Maciej Godek
2013-05-20 20:05 ` Eli Zaretskii
2013-05-20 20:46 ` Andy Wingo
2013-05-20 21:09 ` objc
2013-05-21 2:43 ` Eli Zaretskii
2013-05-22 15:26 ` Eli Zaretskii
2013-06-07 8:37 ` Eli Zaretskii
2013-06-07 12:44 ` Ludovic Courtès
2013-06-07 14:59 ` Eli Zaretskii
2013-06-09 17:10 ` Eli Zaretskii
2013-06-09 20:33 ` Ludovic Courtès
2013-06-09 21:16 ` Andy Wingo
2013-06-09 21:35 ` Ludovic Courtès
2013-06-10 16:18 ` Eli Zaretskii
2013-06-10 16:18 ` Eli Zaretskii
2013-06-10 16:23 ` Eli Zaretskii
2013-06-10 19:09 ` Mark H Weaver
2013-06-10 19:49 ` Eli Zaretskii
2013-06-10 20:54 ` Mark H Weaver
2013-06-11 16:53 ` Eli Zaretskii
2013-06-11 22:11 ` Ludovic Courtès
2013-06-12 17:46 ` Eli Zaretskii
2013-06-18 21:51 ` Why launch the Guile signal delivery thread on exit? (was Re: guile 2.0.9 build on mingw) Mark H Weaver
2013-06-19 15:51 ` Eli Zaretskii
2013-06-19 16:06 ` Julian Graham
2013-06-19 19:20 ` Ludovic Courtès
2013-06-12 17:57 ` guile 2.0.9 build on mingw Eli Zaretskii
2013-06-13 13:26 ` Eli Zaretskii
2013-06-16 14:19 ` Ludovic Courtès
2013-06-13 13:33 ` Eli Zaretskii
2013-06-16 14:36 ` Ludovic Courtès
2013-06-16 15:40 ` Eli Zaretskii [this message]
2013-06-16 14:55 ` Ludovic Courtès
2013-06-16 15:47 ` Eli Zaretskii
2013-06-16 18:59 ` Ludovic Courtès
2013-06-13 13:40 ` Eli Zaretskii
2013-06-16 14:59 ` Ludovic Courtès
2013-06-17 15:41 ` Eli Zaretskii
2013-06-18 20:45 ` Ludovic Courtès
2013-06-18 22:28 ` Mark H Weaver
2013-06-19 3:03 ` Eli Zaretskii
2013-06-19 19:26 ` Ludovic Courtès
2013-06-19 20:02 ` Eli Zaretskii
2013-06-19 2:59 ` Eli Zaretskii
2013-06-19 15:56 ` Eli Zaretskii
2013-06-19 19:38 ` Ludovic Courtès
2013-06-13 13:41 ` Eli Zaretskii
2013-06-16 15:04 ` Ludovic Courtès
2013-06-16 15:48 ` Eli Zaretskii
2013-06-16 14:44 ` Ludovic Courtès
2013-06-16 15:41 ` Eli Zaretskii
2013-06-12 17:59 ` Eli Zaretskii
2013-06-16 14:46 ` Ludovic Courtès
2013-06-12 18:02 ` Eli Zaretskii
2013-06-16 19:50 ` Ludovic Courtès
2013-06-16 20:22 ` Eli Zaretskii
2013-06-17 15:45 ` Mark H Weaver
2013-06-18 17:17 ` Eli Zaretskii
2013-06-18 19:31 ` Eli Zaretskii
2013-06-18 20:19 ` Ludovic Courtès
2013-06-19 2:53 ` Eli Zaretskii
2013-06-19 19:28 ` Ludovic Courtès
2013-06-19 19:56 ` Eli Zaretskii
2013-05-26 20:41 ` Panicz Maciej Godek
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
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83y5aat66s.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=guile-user@gnu.org \
--cc=ludo@gnu.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.
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 read-only IMAP folder(s) and NNTP newsgroup(s).