Now that the version of the ocaml package with ocaml-md5sums has been
uploaded is time to speak about dh_ocaml: a new debhelper able to
automatically compute ocaml dependencies.
Architecture:
The architecture is centered on the "md5sums registry", located in
/var/lib/ocaml/md5sums/MD5SUMS, its format is described below.
The overall idea is that each package shipping an ocaml library adds
entries to the registry. Each entry roughly state "I provide unit Foo
with md5sum ....".
When another package is built dh_ocaml looks for all ocaml bytecode
objects it ships and using ocaml-md5sums collects information about
referenced units and corresponding md5sums. Then, looking up in
md5sums registry, dh_ocaml is able to collect a list of dependencies
for the package being built and fills the substvar ${ocaml:Depends}
with that list.
In order to keep the registry up to date each package ships a .md5sums
entry which get installed in /var/lib/ocaml/md5sums/. ocaml-md5sums is
then used in postinst/prerm scripts to merge all .md5sums entries in
the md5sums registry. dh_ocaml is also in charge of automatically
creating .md5sums entries, install it in the proper place at package
build time and of creating postinst/prerm scripts.
dh_ocaml takes care also of adding "standard" dependencies like that
on ocaml-base..., and findlib.
Md5sums registry format:
Its structure is a list of records, one per row. Each record has 5
fields, field separator is a space. The first two fields are keys in
the registry: an md5sums and a unit name as those reported by
ocamlobjinfo. The remaining three fields denotes the dependencies
which a packages using a given unit name with a given md5sums should
have. Field 3 is the name of a development time ("-dev") dependency
while field 4 is the name of the corresponding runtime dependency (if
any, the string "-" if no runtime dependency exists). The last field
is the version information for the dependencies (if needed, the string
"-" if not needed).
Please test it ...
dh_ocaml is not yet part of debhelper, but joeyh is ready to include
it as soon as we will ask for. Before doing so I would like it to be
tested a bit more. I alreay rebuilt with it the following packages:
pcre, pxp, ulex, equeue, ocamlnet and all went fine. I also spotted a
missing dependency in the ocamlnet package :-) All of them are on svn
with locations trunk/packages/<pkgname>/branches/dh_ocaml/
I'm thus asking to people maintaining ocaml libraries and bytecode
applications to give dh_ocaml a try with their packages and report
bugs and other issues.
In order to have a copy of debhelper which include dh_ocaml you can go
in the svn repo in trunk/tools/dh_ocaml/ and type "make debhelper".
In order for dh_ocaml to be useful you will need a version of the
packages you depend on which has been built with dh_ocaml, I've put
.debs of mine on svn in trunk/packages/dh_ocaml_test/ so that other
people could add their packages there.
For more info have a look at the dh_ocaml manpage and at the example
packages I made, have a look at the one that best matches yours (see
below).
Summary of the example packages I rebuilt:
ocamlnet: uses debhelper, library with both -dev and runtime parts
equeue: uses debhelper, library with both -dev and runtime parts
pxp: uses debhelper, library with -dev part only
pcre-ocaml: uses cdbs, library with both -dev and runtime parts
ulex: uses cdbs, library with -dev part only, non standard
library name
Questions, bug reports, whatever ... are welcome.
Cheers.
PS Samuel, sorry for playing with the equeue package without asking, but
I needed to rebuild it before rebuilding ocamlnet
--
Stefano Zacchiroli -*- Computer Science PhD student @ Uny Bologna, Italy
zack@{cs.unibo.it,debian.org,bononia.it} -%- http://www.bononia.it/zack/
If there's any real truth it's that the entire multidimensional infinity
of the Universe is almost certainly being run by a bunch of maniacs. -!-
Attachment:
signature.asc
Description: Digital signature