Re: Automatic dependencies for shared modules
Hi!
Any feedback on this? Would you like to have two patches, one for the
bugfix and one for the actual changes?
Romain
2011/6/2 Romain Beauxis <toots@rastageeks.org>:
> 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.
>
> 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..
>
> Romain
>
Reply to: