Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Alternative proposal: COAN
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Michal Moskal <malekith@p...>
Subject: Re: [Caml-list] Alternative proposal: COAN
On Tue, Feb 25, 2003 at 11:59:18PM +0100, Sven Luther wrote:
> > Look how much perl modules is debianized and how much ocaml modules is.
> 
> This is because there are much more debian maintainers who package perl
> stuff, than debian maintainers who package ocaml stuff. Also mostly we
> prefer to package stuff we use, as it is much easier to do high quality
> packages in these cases. And help is always welcome. I guess it is the
> same for PLD too.

But the perl packages are *much* easier to package. And that's because
they're standardized.

> > CPAN modules are standardized. That's the main advantage of them. We need
> > this kind of stuff for ocaml. 
> > 
> > What we should standardize? IMHO:
> > 
> > 1. Naming conventions. Maybe some guidelines for package names. Anyway
> >    for package foo, version 1.2.3:
> >      - source tarball should be foo-1.2.3.tar.gz
> >      - it should unpack all it's files into foo-1.2.3 directory
> >    (these are good GNU practices anyway)
> 
> Note that debian packaging tools can handle unstandard source tarballs
> without much problems, nice so we don't need to rebuild the tarball,
> which modifies its md5sum.

Yes, sure, rpm can also handle it. But it's still better to have
it in the same place in each package, isn't it?

> > 2. Build procedure. We can either use OCamlMakefile, ocamake, or
> >    some ocaml script. But make it standard for all COAN packages.
> >    Preferably makefiles should be generated or build process should be
> >    performed by a special tool, so it is possible for example to add
> >    DESTDIR support, or shared library support if it's added to ocaml,
> >    in one place instead of hundreds of COAN packages.
> > 
> >    In any event building COAN package should be matter of one command.
> >    And it should be the same command for all COAN packages.
> 
> Yes, DESTDIR support is a pain to add to each ocaml package. I don't
> feel much like forcing a standardized build process though, not everyone
> likes the same, as long as it supports changing the DESTDIR and has a
> fairly easy build process, along the lines of configure, make, make
> install. configure can be by editing a config file or preferably by a
> configure script or a configure makefile target.

Ok, forcing isn't exactly the best way to go. Maybe the best way would
be to prepare example/template package? Then people will probably copy
from it.

> > 3. Installation. IMHO packages should be installed to `ocamlc
> >    -where`/package-name. Installation tool, whatever it is,
> >    should support DESTDIR (i.e. specifying fake root directory).
> 
> Note, that i strongly advocate having two libdir directories, one,
> /usr/lib/ocaml/<version_number>, for packages from the distrib, and the
> second, /usr/local/lib/ocaml/<version_number>, for locally installed
> packages. The first libdir would be given by -distwhere, and the second
> by -where. findlib and such would default to the locale directory, but
> could be overriden by the package maintainer.

Hm... What if ocaml itself is installed in /usr/local? But I believe
you're right here.

> > 4. Documentation. But this should be easy -- just use ocamldoc, 
> >    and maybe some additional files (in pkg-version/doc/).
> > 
> > 5. Enforce META files for findlib?
> >
> > 6. Maybe some metafile describing package and dependencies? 
> >    From which .spec for rpm and makefile rules for debs could 
> >    be generated. Preferably in XML. Example:
> 
> Err, you are speaking about the debian/control files, we don't use
> makefiles for such kind of information, only for building the package.

Yes.

> > <pkg name="mysql" 
> >      version="1.2.3" 
> >      url="http://foobar.com/mysql-ocaml/">
> >   <short>MySQL bindings</short>
> >   <short lang="pl">Wiazania MySQL</short>
> >   <long>
> >     This package provides bindings to MySQL server, blah... blah...
> >     <!-- 10 lines or so -->
> >   </long>
> >   <long lang="de"> .... </long>
> >   <license>BSD-like</license>
> >   <!-- We need to standardize this as well. -->
> >   <category>Bindings/Database</category>
> >   <depends-on>
> >     <!-- packages from COAN: -->
> >     <coan-pkg name="foobar" version-not-less-then="1.23"/>
> >     <!-- maybe name="foobar >= 1.23" will be better? -->
> >     <coan-pkg name="foobar-baz" version-equal="1.23"/>
> >     <!-- system packages: -->
> >     <system-pkg name="ocaml" version-not-less-then="3.06"/>
> >     <!-- not mysql-devel or mysql-dev, just mainstream name -->
> >     <system-pkg name="MySQL" version-not-less-then="1.2.3"/>
> >   </depends-on>
> > </pkg>
> 
> Well, first, i personnally don't like CML, but seriously, don't you
> think that this format is a bit oververbose and incomprehensible for
> just plain dependencies ?

The nice thing about XML is that there are already tools to parse and
transform it. And that's why I don't believe it's an overkill.

> For debian, we just have dependencies and build dependencies. Each of
> those are listed in a field of the debian/control file, some of which
> are dynamically generated at build time. As an example, lablgtk has the
> following :
> 
> (* for the source package *)
> Build-Depends: debhelper (>> 3.0.0), ocaml-3.06-1, libncurses5-dev, xlibs|xlib6g, debhelper, libgtk2.0-dev, libgtkgl2.0-dev, libglade2-dev, liblablgl-ocaml-dev (>= 0.99-3), librsvg2-dev
> ...
> 
> (* for the runtime package *)
> Depends: ocaml-base-3.06-1,  ${shlibs:Depends}
> ...
> (* for the developpment package *)
> Depends: liblablgtk2-ocaml (= ${Source-Version}), ocaml-3.06-1, libgtk2.0-dev, libgtkgl2.0-dev, libglade2-dev, liblablgl-ocaml-dev (>= 0.99-3)

This is the same as in rpm. But this kind of stuff can be generated from
<depends-on /> I gave above (with little human intervention).

> This, with the Provides, Conflicts, Recomend and Suggest, is enough for
> handling dependencies, and much more easier to understand and work with
> than the XML horror you where suggesting.

> >     <coan-pkg name="foobar" version-not-less-then="1.23"/>

---> Depends: foobar (>= 1.23)

> >     <system-pkg name="MySQL" version-not-less-then="1.2.3"/>

---> Build-Depends: mysql-dev (>= 1.2.3)

This is simple, you just need to look at it for a moment.

-- 
: Michal Moskal ::::: malekith/at/pld-linux.org :  GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::: Wroclaw University, CS Dept :  {E-,w}-- {b++,e}>+++ h

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners