This is also what omake does. Pipes, redirections, and even a number of commands like rm, cp, ls are completely implemented inside omake, so that everything works on Unix and Windows the same. I guess this is the only way to get to a uniform build system, at least if you don't want to depend on 3rd-party tools like Cygwin. Gerd Am Donnerstag, den 06.10.2016, 18:45 +0100 schrieb Jeremie Dimino: > 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 > 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 > -- ------------------------------------------------------------ Gerd Stolpmann, Darmstadt, Germany gerd@gerd-stolpmann.de My OCaml site: http://www.camlcity.org Contact details: http://www.camlcity.org/contact.html Company homepage: http://www.gerd-stolpmann.de ------------------------------------------------------------