[Lablgtk-list] How-to make packages for 2.16

Syndic Copropriété 4 rue Pasteur sdc4pasteur at yahoo.fr
Tue Aug 28 02:07:38 CEST 2012


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).

- Is that a problem to include in an ocamlfind package (through variable 
"require") an archive (cma, cmx, cmxs) that is not used after ?

- 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?

- 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?

- 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"

- 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").
      * 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)

- it would be nice that ocamlfind gives examples such as the lablgtk2 
one, to show how to design a good META file.



Best regards,

William



lablgtk2/META:

description = "Bindings for gtk2"
requires = ""
version = "2.16.0"

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"
   archive(byte) = "gtkInit.cmo"
   archive(native) = "gtkInit.cmx"
)
package "gl" (
   exists_if = "lablgtkgl.cma,lablgtkgl.cmxa,lablgtkgl.cmxs"
   description = "Bindings for gtkGL"
   requires = "lablgtk2"
   archive(byte) = "lablgtkgl.cma"
   archive(native) = "lablgtkgl.cmxa"
)
package "glade" (
   exists_if = "lablglade.cma,lablglade.cmxa,lablglade.cmxs"
   description = "Bindings for glade"
   requires = "lablgtk2"
   archive(byte) = "lablglade.cma"
   archive(native) = "lablglade.cmxa"
)
package "gnomecanvas" (
   exists_if = 
"lablgnomecanvas.cma,lablgnomecanvas.cmxa,lablgnomecanvas.cmxs"
   description = "Bindings for gnomecanvas"
   requires = "lablgtk2"
   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"
   archive(byte) = "lablgnome.cma"
   archive(native) = "lablgnome.cmxa"
)
package "gnomeui" (
   exists_if = "lablgnomeui.cma,lablgnomeui.cmxa,lablgnomeui.cmxs"
   description = "Bindings for gnomeui"
   requires = "lablgtk2"
   archive(byte) = "lablgnomeui.cma"
   archive(native) = "lablgnomeui.cmxa"
)
package "gtkspell" (
   exists_if = "lablgtkspell.cma,lablgtkspell.cmxa,lablgtkspell.cmxs"
   description = "Bindings for gtkspell"
   requires = "lablgtk2"
   archive(byte) = "lablgtkspell.cma"
   archive(native) = "lablgtkspell.cmxa"
)
package "panel" (
   exists_if = "lablpanel.cma,lablpanel.cmxa,lablpanel.cmxs"
   description = "Bindings for panelapplet"
   requires = "lablgtk2"
   archive(byte) = "lablpanel.cma"
   archive(native) = "lablpanel.cmxa"
)
package "rsvg" (
   exists_if = "lablrsvg.cma,lablrsvg.cmxa,lablrsvg.cmxs"
   description = "Bindings for rsvg"
   requires = "lablgtk2"
   archive(byte) = "lablrsvg.cma"
   archive(native) = "lablrsvg.cmxa"
)
package "sourceview" (
   exists_if = 
"lablgtksourceview.cma,lablgtksourceview.cmxa,lablgtksourceview.cmxs"
   description = "Bindings for gtksourceview"
   requires = "lablgtk2"
   archive(byte) = "lablgtksourceview.cma"
   archive(native) = "lablgtksourceview.cmxa"
)
package "sourceview2" (
   exists_if = 
"lablgtksourceview2.cma,lablgtksourceview2.cmxa,lablgtksourceview2.cmxs"
   description = "Bindings for gtksourceview2"
   requires = "lablgtk2"
   archive(byte) = "lablgtksourceview2.cma"
   archive(native) = "lablgtksourceview2.cmxa"
)


More information about the Lablgtk-list mailing list