Are there any movement in this direction, or this patches will die? On Wed, Mar 4, 2015 at 4:58 AM, François Bobot wrote: > On 03/03/2015 15:55, Gerd Stolpmann wrote: > >> Am Dienstag, den 03.03.2015, 14:15 +0100 schrieb François Bobot: >> >>> Gerd, do you think that something that does that could be added to >>> ocamlfind? One tricky thing is to >>> know the library statically linked (ie. `Ocsigen_config.builtin_packages`), >>> perhaps ocamlfind can >>> during linking add this information. >>> >> >> I think so. For toploops, there is already code that tracks libraries >> already linked into the executable (i.e. if you ocamlmktop your >> toploop). >> > > All was already in place indeed! It was easy to add. I kept caml-list in > CC for discussing the big picture in order to get comments from people. Is > mail still your preferred way of receiving patch? > > I kept it simple, no hack (no automatic: cmxa -> cmxs) because I prefer > problems in library META to be found than to be paper over. > > The first patch adds: > - A library `findlib.dynlink` that depends on `findlib` and `dynlink` > - During linking (using `ocamlfind ocaml*`) if `-package findlib.dynlink` > and `-linkpkg` are used then a module `Findlib_initl...` is linked after > all packages and it stores the names of packages linked in > `Findlib.linked_packages`. > - In the main program `Fl_dynlink.load_packages ["yojson"]` can be used to > dynlink packages > > The second patch forbids to run `Fl_dynlink.load_packages` during the > initialization of packages (statically or dynamically linked), because > `Findlib_initl...` is not yet run and because if you want to load a package > that depend on a statically linked package not yet initialized, there is no > sane semantic. > > Problems: > - The package is named `findlib.dynlink`, the archive `findlib_dynlink.cm*` > and the module `Fl_dynlink` ... > - If you don't use `-linkall` static packages could only be partially > linked, and you can't link the remaining part later. So perhaps `-linkall` > must be automatically added if `findlib.dynlink` is used. > - If you define `archive(native)` and not `archive(native,plugin)` the > error is not nice (in Dynlink.Error). Perhaps I should add a > `Package_not_dynamically_loadable of string` error, that should catch the > loading of something else than `*.cmxs`. > - Often you link your binary with your own library without using > `-package` (the library is not yet installed), and plugins for your tools > depend on your library. Currently you should do before any > `Fl_dynlink.load_packages`: `Findlib.linked_packages := > "mylib"::Findlib.linked_packages`. For simplicity, I don't know if I > should add a function `Fl_dynlink.add_linked_packages`, or an option to > ocamlfind `-additional-package-statically-linked `. > - During the initialization of your own library (linked without -package) > you should not use `Fl_dynlink.load_packages`, but the library doesn't > protect you against this error. > > Choices: > - If you don't link with `findlib.dynlink` or use `create_toploop`, the > variables `Findlib.linked_packages` and `Findlib.linked_predicates` are > empty because I don't wanted to add backward change by adding > `Findlib_initl...` when `findlib` is linked. > > > Remains to do: > - Fix problems > - Documentations (add `plugin` in the list of standard predicates, ...) > > > Gerg, what do you think of this first version of the patch? Of the way to > fix the problems? > > Thanks, > > > Regards, > > -- > François > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs >