Difference between revisions of "OCaml package guidelines"

From ArchWiki
Jump to: navigation, search
(OCaml PKGBUILD Example: regain var scope for package function)
(OCaml PKGBUILD Example)
Line 37: Line 37:
 
build() {
 
build() {
 
   cd "${srcdir}/${pkgname}-${pkgver}"
 
   cd "${srcdir}/${pkgname}-${pkgver}"
   mkdir -p $OCAMLFIND_DESTDIR
+
   mkdir -p "$OCAMLFIND_DESTDIR"
 
   ./configure --prefix=/usr
 
   ./configure --prefix=/usr
 
   make
 
   make
Line 43: Line 43:
  
 
package() {
 
package() {
   env DESTDIR=${pkgdir} \
+
   env DESTDIR="${pkgdir}" \
     OCAMLFIND_DESTDIR=$OCAMLFIND_DESTDIR \
+
     OCAMLFIND_DESTDIR="$OCAMLFIND_DESTDIR" \
 
     make install
 
     make install
 
 
}
 
}
  

Revision as of 08:40, 2 January 2011


Package Naming

For libraries, use ocaml-modulename. For applications, use the program name. In either case, the pkgname should be entirely lowercase.

OCaml Library Locations

All OCaml libraries should be installed via ocaml-findlib, ocaml-findlib maintains a means whereby ocaml packages are more clearly tracked. The only distinction for ocaml-findlib is that it requires that a META file be created. Most OCaml packages already have a META file, for those which do not provide an upstream META file chances are the file can be obtained from the Debian/Ubuntu or Fedora package.

The OCaml libraries should all be installed under /usr/lib/ocaml, there has been some confusion about where to install OCaml libraries, and many OCaml libraries have been installed under /usr/lib/ocaml/site-lib, this practice can break a number of OCaml program builds and has resulted in a schism in OCaml package development. Maintaining a central location for all OCaml packages will aleviate a number of problems with the continued development of ArchLinux OCaml support.

In most packages the OCaml findlib directory will need to be specified, this should never be specified statically, but should use the ocaml-findlib destdir variable. Generally this is set in this manner: OCAMLFIND_DESTDIR=${pkgdir}/$(ocamlfind printconf destdir)

Bytecode

If bytecode is produced make sure to include "options=('!strip')". Otherwise the packaging process will damage the OCaml bytecode.

OCaml PKGBUILD Example

# Contributor: Your Name <youremail@domain.com>

pkgname=ocaml-<package name>
pkgver=4.2
pkgrel=1
license=('')
arch=('i686' 'x86_64')
pkgdesc="An OCaml Package"
url=""
depends=()
makedepends=('ocaml' 'ocaml-findlib')
source=()
options=('!strip')
md5sums=()

OCAMLFIND_DESTDIR="${pkgdir}$(ocamlfind printconf destdir)"

build() {
  cd "${srcdir}/${pkgname}-${pkgver}"
  mkdir -p "$OCAMLFIND_DESTDIR"
  ./configure --prefix=/usr
  make
}

package() {
  env DESTDIR="${pkgdir}" \
    OCAMLFIND_DESTDIR="$OCAMLFIND_DESTDIR" \
    make install
}

Keep in mind that many OCaml Packages will often need extra parameters passed to make and make install.