[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Automatic dependencies for shared modules




Hi.

Sorry for not getting back to you sonner.

On 06/02/2011 04:41 AM, Romain Beauxis wrote:
Hi !

2011/5/28 Stéphane Glondu<glondu@debian.org>:
Le 28/05/2011 06:54, Romain Beauxis a écrit :
I meant building sdl.cmxs in ocaml-sdl package. It's quite easy
and can be done in debian/rules. Have a look at
postgresql-ocaml, for example. Then the META, *.cmxs and *.cma
should be moved to the runtime package. dh_ocaml should then
infer the right dependencies.

I think this highly impractical. We'd have to implement the
whole dependency resolving in order to load the modules in the
right order in the application.. Clearly not an option!

Findlib does most of the job. Have a look at
baselib/ocsigen_loader.ml in ocsigen for an example.

You said in your original e-mail that you didn't want any
ocaml dependencies. Did you try the --nodefined-map
command-line option of dh_ocaml, then?

That does not work for bytecode modules. For instance, the
vorbis module include Vorbis and I do want to therefore get a
dependency on the right libvorbis-ocaml-xxyyzz.. [...] Therefore,
I propose to include an option in dh_ocaml that would allow to
accept to reference modules that are present in a plugin and are
also provided by another package.

This is what --nodefined-map is supposed to do. But actually, this
option what thought for packages providing an alternative
implementation of one module, so it might explain the missing
dependency you are talking about. I would suggest you to look
around --nodefined-map code path to implement what you want.

Ok so I have found an easy way to make it work. I have added
*.onodefined files for each liquidsoap-plugin-xxx.

I found two bugs in the parsing of .onodefined files: * lines where
not chomped, leading to a trailing \n in each defined unit, which
made the call to ocaml-md5sums break: ocaml-md5sums (...) --nodefined
Foo --nodefined Bar (...)

* the array was not properly initialized, leading to merging
individual package's nodefined into one.


Indeed.

Additionally, the only change I did to make it work was to pass
--nodefined option during the computation of binary package
dependencies.

I have attached the patch corresponding to these changes. Let me
know if it is ok for you.

Finally, I wanted to have liquidsoap declare the ABI it provides and
make the plugins depend on liquidsoap-xxyyzz as well as making sure
that all the units imported in each plugins where properly resolved
in liquidsoap.

It turns out that ocamlobjinfo does not provide enough information
concerning the units exported by liquidsoap: units actually
implemented in the bytecode binary for liquidsoap are marked as
imported..

Therefore, I think this is the best that I can do for now.. Please,
let me know if the patch is ok for you..


Looks ok to me. Please feel free to push them in dh_ocaml's git repository.
Thanks for your work on this!

Regards,

--
Mehdi Dogguy مهدي الدڤي
http://dogguy.org/


Reply to: