On Tue, 11 Sep 2012 23:03:44 +0200 William <r...@libertysurf.fr> wrote:
> Hello, Hello, > To conclude on this, would it be possible to make this META file instead > of the one proposed in 2.16.0 : I still don't understand the original problem. Here you make the main package require all optional packages. Wouldn't it be a problem when they are not available ? Moreover, counting on the compiler to link only the modules really used, to prevent having big executables, doesn't work any more when the -linkall option is passed, which is quite common for executables handling plugins and still not willing to give access to all gtk modules. I think the current META is good enough. Regards, Maxence > > > ** META file ** > > description = "Bindings for gtk2" > requires = "" > version = "2.16.0" > * > requires = "lablgtk2.base lablgtk2.gl lablgtk2.glade > lablgtk2.gnomecanvas lablgtk2.gnomehtml lablgtk2.gnomeui > lablgtk2.gtkspell lablgtk2.panel lablgtk2.rsvg lablgtk2.sourceview > lablgtk2.sourceview2"* > * > package "base" (* > archive(byte) = "lablgtk.cma" > archive(native) = "lablgtk.cmxa" > archive(byte,mt) += "gtkThread.cmo" > archive(native,mt) += "gtkThread.cmx" > *)* > package "auto-init" ( > exists_if = "gtkInit.cmo,gtkInit.cmx" > description = "Auto-initialization of GTK" > requires = "lablgtk2.base" > archive(byte) = "gtkInit.cmo" > archive(native) = "gtkInit.cmx" > ) > package "gl" ( > exists_if = "lablgtkgl.cma,lablgtkgl.cmxa,lablgtkgl.cmxs" > description = "Bindings for gtkGL" > requires = "lablgtk2.base" > archive(byte) = "lablgtkgl.cma" > archive(native) = "lablgtkgl.cmxa" > ) > package "glade" ( > exists_if = "lablglade.cma,lablglade.cmxa,lablglade.cmxs" > description = "Bindings for glade" > requires = "lablgtk2.base" > archive(byte) = "lablglade.cma" > archive(native) = "lablglade.cmxa" > ) > package "gnomecanvas" ( > exists_if = > "lablgnomecanvas.cma,lablgnomecanvas.cmxa,lablgnomecanvas.cmxs" > description = "Bindings for gnomecanvas" > requires = "lablgtk2.base" > archive(byte) = "lablgnomecanvas.cma" > archive(native) = "lablgnomecanvas.cmxa" > ) > package "gnomehtml" ( > exists_if = "lablgnome.cma,lablgnome.cmxa,lablgnome.cmxs" > description = "Bindings for gnome html" > requires = "lablgtk2.base" > archive(byte) = "lablgnome.cma" > archive(native) = "lablgnome.cmxa" > ) > package "gnomeui" ( > exists_if = "lablgnomeui.cma,lablgnomeui.cmxa,lablgnomeui.cmxs" > description = "Bindings for gnomeui" > requires = "lablgtk2.base" > archive(byte) = "lablgnomeui.cma" > archive(native) = "lablgnomeui.cmxa" > ) > package "gtkspell" ( > exists_if = "lablgtkspell.cma,lablgtkspell.cmxa,lablgtkspell.cmxs" > description = "Bindings for gtkspell" > requires = "lablgtk2.base" > archive(byte) = "lablgtkspell.cma" > archive(native) = "lablgtkspell.cmxa" > ) > package "panel" ( > exists_if = "lablpanel.cma,lablpanel.cmxa,lablpanel.cmxs" > description = "Bindings for panelapplet" > requires = "lablgtk2.base" > archive(byte) = "lablpanel.cma" > archive(native) = "lablpanel.cmxa" > ) > package "rsvg" ( > exists_if = "lablrsvg.cma,lablrsvg.cmxa,lablrsvg.cmxs" > description = "Bindings for rsvg" > requires = "lablgtk2.base" > archive(byte) = "lablrsvg.cma" > archive(native) = "lablrsvg.cmxa" > ) > package "sourceview" ( > exists_if = > "lablgtksourceview.cma,lablgtksourceview.cmxa,lablgtksourceview.cmxs" > description = "Bindings for gtksourceview" > requires = "lablgtk2.base" > archive(byte) = "lablgtksourceview.cma" > archive(native) = "lablgtksourceview.cmxa" > ) > package "sourceview2" ( > exists_if = > "lablgtksourceview2.cma,lablgtksourceview2.cmxa,lablgtksourceview2.cmxs" > description = "Bindings for gtksourceview2" > requires = "lablgtk2.base" > archive(byte) = "lablgtksourceview2.cma" > archive(native) = "lablgtksourceview2.cmxa" > ) > > ** end of META file ** > > > with those modifications : > > - it is possible to compile "easily" any software that uses lablgtk2 code: > ocamlfind opt -package lablgtk2 -linkpkg test.ml > > - it is possible to optimise the build process, by choosing exactly what > we need (with a little more knowledge of lablgtk2) : > ocamlfind opt -package lablgtk2.gtkgl lablgtk2.gnomeui -linkpkg test.ml > > > This method is usable both for the novice and for the expert. It is > similar to the one used by camlimages, but here the "default" is to > include as much as possible. > > > Best regards, > William > > On 08/28/2012 08:39 AM, Adrien wrote: > > Hi, > > > > I don't have much time to answer so I'll make my best and not forget > > anything. > > > > On 28/08/2012, Syndic Copropriété 4 rue Pasteur<sdc4past...@yahoo.fr> > > wrote: > >> Hello, > >> > >> As I saw the new META file for lablgtk2, many questions and issues rose. > >> It concerns both lablgtk2 and the way ocamlfind is implemented. It may > >> be also interesting for packagers (in godi for example) who design META > >> files. > >> > >> - lablgtk2 defines 10 sub packages plus package "auto-init" (for which > >> one must be able to chose to include it or not). When users add a > >> dependency to a project, it is far easier at first to only add the name > >> of the package (here "lablgtk2") without trying to understand what is > >> exactly behing. It would be easier for users to have : > >> * package "lablgtk2" that includes everything but gtkInit.cmo > >> and gtkInit.cmx, > >> * package "lablgtk2.auto-init" that includes "gtkInit.cmo and > >> gtkInit.cmx" and package "lablgtk2" (gtkInit is special because it > >> includes code that sometime you want to use, and sometime not). > > First, a small note about the "auto-init" subpackage: the > > functionality was first made for the toplevel, and it can be nice and > > handy for compiled programs too (which is why it is exposed in this > > META) but don't abuse it. > > For instance, the META in godi used to always pull GtkInit. In turn, > > that tried to init, well, GTK+. That required running under X. Having > > to start an X server simply to build lablgtk2 was a bit annoying. > > > > Also, this META file was made for another reason: avoiding that > > everything always gets linked in. The issue is not that it pulls more > > OCaml modules: the _big_ issue is that it pulls C libraries too. For > > the packages I have on this machine, that would mean you'd need gl, > > glade, gnomecanvas, gnomeui (so many more gnome components most of the > > time), gtkspell, rsvg, sourceview2. That also makes binary > > distribution harder. > > > > There has also been issues with GL support (not because of lablgtk2, > > but because of the underlying C libs which aren't always available) so > > it's better to make it possible to chose. > > > > I considered also making a big meta-package with all the subpackages > > but then, people would have been unhappy because it would have had one > > more dep than they wanted and I would have had to make meta-packages > > with n-1 subpackages. And so on. :-) I thought there would be no > > solution that pleased everyone. > > > >> - Is that a problem to include in an ocamlfind package (through variable > >> "require") an archive (cma, cmx, cmxs) that is not used after ? > > It's not an issue. Most of the time, the module should even be > > unlinked in the final executable (watch out if you're using dynlink). > > > >> - does including all available packages through variable "require" make > >> an executable that takes more space ? If yes, could ocamlfind handle > >> this so that it does not include unused packages? > > Yes and no. And it's ocaml which already handles that. It also depends > > on how things are done in the library and its META file. I haven't > > checked how it behaved in lablgtk2 but if there are reports, I'd be > > interested in them. > > > >> - if the purpose of making many packages is only to see what is > >> available through ocamlfind query, maybe it would be interesting that > >> ocamlfind query lists all available files associated to a package? > > Which files do you mean? .cmxa files for instance? If so, ocamlfind > > query can already do that; the syntax is a bit hard to get right > > however (proof: I'm not even going to try to give it right now). > > > >> - If find this line rather strange : exists_if = > >> "lablgtkgl.cma,lablgtkgl.cmxa,lablgtkgl.cmxs" > >> * lablgtkgl.cma and lablgtkgl.cmxa are part of the variable > >> "archive", so what is the point in having it there too ? > >> * lablgtkgl.cmxs enables package "gl", but is not used in any > >> variable "require" > > The documentation for exists_if states that the subpackage will exist > > if any of the files given exists so the goal look correct to me. > > However, I don't know if "exists_if" implicitely includes "archive" (I > > don't think so). > > > >> - It seems ocamlfind lacks two clear variables that are actually > >> undertaken by exists_if and requires : > >> * variable "depends" (actually, "exists_if" and "requires") that > >> tells that this package can only work if the specified sub packages are > >> here. If not, package would be disabled. (e.g "lablgtk2.auto-init" that > >> depends on "lablgtk2"). > > With "lablgtk2" being the main-package, "lablgtk2.auto-init" already > > requires "lablgtk2". You can try using "ocamlfind ocamlopt -package > > lablgtk2.auto-init ...", it should just work(tm). > > > >> * variable "includes" (actually "requires", roughly) that includes > >> other packages, if available, so that the user do not need to also > >> specify them (e.g : "lablgtk2" would include "lablgtk2.glade", > >> "lablgtk2.gl" if they are here) > > As I've stated earlier, that's something I quite opposed to because it > > would require far too many things or it would change from one > > configuration to another (through the exists_if mechanism). > > > >> - it would be nice that ocamlfind gives examples such as the lablgtk2 > >> one, to show how to design a good META file. > > The META(5) documentation is pretty good but I have to agreee that it > > lacks an example. This lablgtk2 META file has been made after reading > > several other META files, most notably Debian's for lablgtk2, and > > lwt's. Having pointers to existing good files in the documentation > > would be nice. > > > > Btw, this META file tries to provide a pretty good compatibility with > > the one in Debian, the on in godi and the old upstream one (which > > includes Fedora). It is going to require some updating but it should > > be trivial and there shouldn't be anything to fear in migrating. :-) > > > > Regards, > > Adrien Nader > > > > -- Maxence Guesdon _______________________________________________ Godi-list mailing list Godi-list@ocaml-programming.de https://godirepo.camlcity.org/mailman/listinfo/godi-list