caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jeremie Dimino <jdimino@janestreet.com>
To: "Soegtrop, Michael" <michael.soegtrop@intel.com>
Cc: "caml-list@inria.fr" <caml-list@inria.fr>
Subject: Re: [Caml-list] ocamlbuild on Windows and bash vs. cmd
Date: Thu, 6 Oct 2016 18:45:41 +0100	[thread overview]
Message-ID: <CANhEzE5EbczB5EigMtj7E1Gr6H2svSVMwqbdVvZZ6G1vY02_tg@mail.gmail.com> (raw)
In-Reply-To: <0F7D3B1B3C4B894D824F5B822E3E5A172CF8E1BA@IRSMSX102.ger.corp.intel.com>

I don't have an opinion on using cmd in ocamlbuild, but I have been
looking at similar things for jenga recently. With jenga the actions
generated by the rules are of the form (prog, args) and when one wants
to to do something more complicated, they have to manually build a
shell command. In the Jane Street rules we are using bash.

Going through bash is often frustrating, even on Unix. Moreover for
the public release of Jane Street packages I'd like to avoid relying
too much on bash as it has often been a source of problems in the
past.

The solution I'm aimed at is to have the jenga rules produce actions
using a small DSL allowing pipes and other things and interpret this
DSL without the use of a third-party shell, i.e. just using system
calls and threads.

It's still a work in progress but I already have the backend part
working [1]. It's aimed at being portable on Windows. The code for
Windows is written but not yet tested, I plan to do it at some point.

I imagine that it shouldn't be too use this in ocamlbuild if the [Sh]
constructor was removed and replaced by a few other constructors to
express pipes, redirections, etc...

  [1] https://github.com/janestreet/shexp

On Thu, Oct 6, 2016 at 2:38 PM, Soegtrop, Michael
<michael.soegtrop@intel.com> wrote:
> Dear OCaml users and developers,
>
>
>
> I looked into the fact that ocamlbuild requires bash/cygwin to run. Actually
> it does very little use of bash and I think cmd + ln + rm would work quite
> well.
>
>
>
> From comments in various list I understood that people had issues with
> escaping for cmd. I agree that this is a bit nasty, but not rocket science
> either. I guess the main issue is that for cmd not only space and tab are
> command argument separators, but also equal (=), comma (,) and semicolon
> (;). So for cmd a=b,c;d is the same as a b c d which is the same as a , = ,
> b =;= c==d. Essentially cmd treats unquoted pieces as sed ‘s/[\t =,;]+/ /g’.
> If a name contains any of these characters, one has to quote it for cmd, but
> not for bash. Since = and , are not that uncommon in file names, I guess
> this resulted in issues.
>
>
>
> BUT cmd splits the command line only into command names, complete argument
> lists and file names for redirection. That is if you call e.g. ocamlc, cmd
> just replaces shell variables and extracts the executable name, but does not
> split up the argument list into individual pieces. bash on Windows does this
> neither, because (afaik) Windows has at the lowest level no mechanism to
> pass individual arguments to an executable. The command gets a string and
> splitting this string and even globing is the business of the executable. So
> it is rather odd that this behaves substantially different for bash and for
> cmd. The only thing which needs to be quoted properly are command names and
> file names of redirections.
>
>
>
> There might be issue with shell special characters. There are those which
> are not allowed in file names “\/:*?<>| and those allowed in filenames &().
> I guess those not allowed in filenames don’t need any special treatment,
> since one can’t do that much with them except their special shell use. The
> other 3 one should be escape with ^. There is no way to quote shell special
> characters with cmd – they must be escaped with ^.
>
>
>
> The only real issue is that some people seem to use build rules with “real”
> bash stuff in it – well if you do this I guess you anyway have a cygwin
> around.
>
>
>
> So I wonder if it would be appreciated by the community to have an
> ocamlbuild (e.g. as a configure option) which uses cmd instead of bash. I
> think if one does the escaping properly, this should be good for the large
> majority of projects out there.
>
>
>
> Ocamlc seems to run fine without cygwin, but I didn’t test other tools like
> ocamllex or menhir as yet. Are there known issues?
>
>
>
> Best regards,
>
>
>
> Michael
>
>
>
>
>
> Intel Deutschland GmbH
> Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
> Tel: +49 89 99 8853-0, www.intel.de
> Managing Directors: Christin Eisenschmid, Christian Lamprechter
> Chairperson of the Supervisory Board: Nicole Lau
> Registered Office: Munich
> Commercial Register: Amtsgericht Muenchen HRB 186928



-- 
Jeremie

  parent reply	other threads:[~2016-10-06 17:45 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-06 13:38 Soegtrop, Michael
2016-10-06 13:45 ` Kakadu
2016-10-06 14:01   ` Soegtrop, Michael
2016-10-06 13:55 ` Daniel Bünzli
2016-10-06 14:15   ` Soegtrop, Michael
2016-10-06 14:45     ` Gabriel Scherer
2016-10-06 16:16       ` Soegtrop, Michael
2016-10-06 17:45 ` Jeremie Dimino [this message]
2016-10-06 18:56   ` Gerd Stolpmann
2016-10-07  6:58     ` Soegtrop, Michael
2016-10-07 16:19       ` Yaron Minsky
2016-10-11 11:49         ` Soegtrop, Michael
2016-10-11 12:36           ` Yaron Minsky
2016-10-11 13:00             ` Ivan Gotovchits
2016-10-11 13:06               ` Anil Madhavapeddy
2016-10-11 13:13                 ` Yaron Minsky
2016-10-11 13:27                   ` Hendrik Boom
2016-10-11 13:53                     ` Soegtrop, Michael
2016-10-11 15:48                       ` Adrien Nader
2016-10-11 13:46             ` Soegtrop, Michael
2016-10-14 12:19               ` Manfred Lotz
2016-10-17  8:08                 ` Soegtrop, Michael
2016-10-17  9:22                   ` Manfred Lotz

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=CANhEzE5EbczB5EigMtj7E1Gr6H2svSVMwqbdVvZZ6G1vY02_tg@mail.gmail.com \
    --to=jdimino@janestreet.com \
    --cc=caml-list@inria.fr \
    --cc=michael.soegtrop@intel.com \
    /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 NNTP newsgroup(s).