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.

Regards
Sylvain

/M

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

Any sufficiently advanced technology is indistinguishable from a rigged
demo.
     -- Andy Finkel