Le jeu. 1 oct. 2015 à 09:23, Magnus Therning <magnus@therning.org> a écrit :
On Thu, Oct 01, 2015 at 06:46:55AM +0000, Sylvain Le Gall wrote:
> Hello,
>
> Le mer. 30 sept. 2015 à 13:49, Magnus Therning <magnus@therning.org> a
> écrit :
>
> > On Tue, Sep 29, 2015 at 10:59:49PM +0000, Sylvain Le Gall wrote:
> > > Please consider adding more comments to the following bug, which seems
> > > close to what you are discussing:
> > >
> > >
> > https://forge.ocamlcore.org/tracker/index.php?func=detail&aid=1473&group_id=54&atid=291
> > >
> > > I must admit that I totally miss the whole point of the discussion,
> > > probably if you can make a summary of what you precisely need in the
> > > BTS, I will be able to understand the problem better.
> >
> > Unfortunately I don't know enough about `oasis` to understand that bug
> > report :(
> >
> > I'll try to explain how I'd like to use oasis/buildtool by looking how
> > Haskell's Cabal lets me do it:
> >
> > - Configure without generating anything in the current dir:
> >
> >     % runhaskell Setup.hs --builddir /tmp/my_build_dir
> >
> > - Build using the just generated configuration, again without putting
> >   anything in the current dir:
> >
> >     % runhaskell Setup.hs --builddir /tmp/my_build_dir
> >
> > Comparing this to oasis/buildtool (assuming I've a pre-existing
> > `setup.ml` generated with `oasis setup -setup-update dynamic` to
> > minimize the amount of build-related stuff in the project):
> >
> > - Configure
> >
> >     % ocaml setup.ml -configure
> >
> >   This generates a file, `setup.data` in the current dir.  I've found no
> >   way to have it generated in a dedicated build dir.
> >
> > - Build
> >
> >     % ocaml setup.ml -build -build-dir /tmp/my_build_dir -no-links
> >
> >   This builds in the mentioned dir, but it also generates a `setup.log`
> >   in the current dir!
> >
> > I thought that `-C` could offer a way to achieve this, but it doesn't:
> >
> >     % mkdir /tmp/my_build_dir; cd /tmp/my_build_dir
> >     % ocaml /path/to/setup.ml -h
> >     Exception: Sys_error "_oasis: No such file or directory".
> >     File "/path/to/setup.ml", line 1:
> >     Error: Reference to undefined global `OASISDynRun'
> >
> > I'm not convinced `-C` *should* be the way to achieve what I want.
> >
> > Hopefully this makes it clearer what I mean.
> >
> >
> First, why not just copy everything in the new directory:
> % cp -R . /tmp/my_build_dir; cd /tmp/my_build_dir
> % ocaml setup.ml -configure
> % ocaml setup.ml -build
>
> Maybe I miss some context to understand why this simple solution is not
> enough.
>
> Going back at the other points. There are 3 categories of files:
> - the ones that are really generated at build time: setup.log, setup.data
>   -> they probably need to follow the indication provided -C. This is a bug
> - the ones that are generated by the underlying build system: _build
> (ocamlbuild)
>   -> as you wrote "-build -build-dir /tmp/my_build_dir -no-links" should be
> enough
> - the ones that are generated by the dynamic mode, which is a hack to
> prevent adding the files that other tools need:
>   -> these ones are tricky because they should have been in the source
> directory right from the beginning and being able to apply -C to them is
> equivalent to make sure that "ocamlfind"/"ocamlbuild"/other build tools
> will use -C and the source directory... This is clearly not trivial to
> assume that all tools will do.
>
> My initial proposal to "cp" the files and build from the copy would
> probably solve your problem without assuming that all tools comply
> with -C. Tell me if it solves your problem.

Sure, that is a solution.

Maybe I was unclear to begin with.  I wanted a way to use *only*
oasis/buildtool to achieve my goal.  That is, I didn't want to involve
system-specific tools to copy the source from the project source dir
into the build dir before building. I couldn't find a way to use
oasis/buildtool to achieve that, so I sent an email to the list. *I*
consider the lack of a way to do that a deficiency in oasis/buildtool.

(Do note that it's completely acceptable to just say that this use case
isn't one that you see any value in and that the hack of copying the
source is the way to achieve a build that doesn't leave *anything*
behind in the source dir.)


OASIS is mostly a glue system that mixes various systems, including system tools. Under the hood, the setup.ml generated by OASIS will anyway use "cp" or any ther system tools:
https://github.com/ocaml/oasis/blob/master/src/oasis/OASISFileUtil.ml#L124

I acknowledge that there is a value in your use case, but right now it is a corner case for my personal usage. The hack should be enough to unblock you. If you have an idea how to solve it without the hack, I will be glad to merge a pull request:
https://github.com/ocaml/oasis

Regards
Sylvain
 
/M

--
Magnus Therning                      OpenPGP: 0xAB4DFBA4
email: magnus@therning.org   jabber: magnus@therning.org
twitter: magthe               http://therning.org/magnus

Failure is not an option. It comes bundled with the software.