Re: [Godi-list] How-to make packages for 2.16
William <[email protected]> Wed, 12 Sep 2012 21:45:26 +0200
| Newsgroups | gmane.comp.lang.ocaml.lib.gtk |
|---|---|
| Message-ID | <[email protected]> |
ok, thanks for your answers. Regards, William On 09/12/2012 07:17 AM, Jacques Garrigue wrote: > > Unfortunately, this approach does not support the case where only some > libraries are built and installed. > Generally, I don't think it's a good idea to depend only on lablgtk if > you are also using some extension libraries. > The lablgtk2 script loads all available libraries, but I see this as a > special case. > > Jacques > > 2012/09/11 23:04 "William" <[email protected] > <mailto:[email protected]>>: > > Hello, > > To conclude on this, would it be possible to make this META file > instead of the one proposed in 2.16.0 : > > > > ** META file ** > > description = "Bindings for gtk2" > requires = "" > version = "2.16.0" > * > requires = "lablgtk2.base lablgtk2.gl <http://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 <http://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 <http://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<[email protected]> <mailto:[email protected]> 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 <http://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 >> > > > > _______________________________________________ > Godi-list mailing list > [email protected] <mailto:[email protected]> > https://godirepo.camlcity.org/mailman/listinfo/godi-list > _______________________________________________ Lablgtk-list mailing list [email protected] https://lists.ocamlcore.org/cgi-bin/listinfo/lablgtk-list