Am Montag, den 13.04.2015, 15:27 -0400 schrieb Ivan Gotovchits: > Are there any movement in this direction, or this patches will die? Don't think so. Slowness on my side. Gerd > > 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 > > > > -- ------------------------------------------------------------ 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 ------------------------------------------------------------