OCaml パッケージガイドライン
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
OCaml で書かれたソフトウェアの PKGBUILD を作成する方法。
パッケージの命名
ライブラリの場合、ocaml-modulename
を使ってください。アプリケーションの場合、プログラムの名前を使ってください。どちらの場合にしても、名前は全て小文字にしてください。
ファイルの場所
ライブラリ
OCaml のライブラリは /usr/lib/ocaml
にインストールしてください。/usr/lib/ocaml/site-lib
を使うのは非推奨です。
OCaml のライブラリは ocaml-findlib を使ってインストールします。ocaml-findlib
にはライブラリを管理しやすくするライブラリメタデータが含まれています。Ocaml ソフトウェアのデファクトスタンダードとして多くのソフトウェアが ocaml-findlib
を必要とします。
ocaml-findlib
はソースアーカイブに含まれている META
という名前のファイルから必要なデータを抽出します。ファイルが含まれていない場合 Debian, Ubuntu, Fedora などのパッケージからもらってくるか、あるいはメンテナ自身が作成する必要があります。また、ファイルを含めるようにソフトウェアの開発元にリクエストを送って下さい。
ocaml-findlib
でパッケージをインストールするときは OCAMLFIND_DESTDIR
変数が使われます。詳しくは下の PKGBUILD を参照。
OASIS
OCaml のパッケージは DESTDIR
を無視して OASIS を使って実行ファイルをインストールします。OASIS で DESTDIR
が使われないのは仕様です (issue #852)。--destdir
引数を使って configure
スクリプトを実行することで DESTDIR
のような機能を有効にできます:
build() { cd "${srcdir}/${srcname}-${pkgver}" ./configure --prefix /usr --destdir "$pkgdir" # build commands }
OCaml バイトコードとレベル
OCaml は複数の"レベル"でコードを実行することができます。トップコードレベルではコンパイルを行わずに OCaml のコードを解釈し、バイトコードレベルではマシンに依存しないバイトコードが作成され、ネイティブレベルでは (C/C++ と同じように) 機械語のバイナリが作成されます。
OCaml のパッケージをビルドするときは、ネイティブのマシンコードがコンパイルされるのかバイトコードがコンパイルされるのか、あるいはその両方か確認する必要があります。レベルが違うと様々な状況が生まれ、あるいはパッケージのオプションや依存関係に問題を起こすこともあります。
バイトコードが生成される場合は PKGBUILD に以下を記述してバイトコードを保護してください:
options=('!strip')
パッケージにバイトコードを含まず、バイナリだけを配布する場合、ocaml
を依存パッケージに指定する必要はありません。ただし、OCaml コンパイラは ocaml
パッケージに入っているため makedepends には指定する必要があります。パッケージにネイティブコードとバイトコードの両方を含める場合は ocaml
は依存パッケージでありながら makedepends にも指定する必要があります。
稀に OCaml のコードがバイトコードとしてのみ配布されていることがあります: コンパイルされていないソースコードしか配布されていない場合に arch に any を使うことが推奨されます。ただし多くのライブラリはネイティブコードを配布しています。
パッケージで何が配布されるのか、パッケージにネイティブのマシンコードとバイトコードが含まれるのかどうか確認するのが肝要です。
サンプル PKGBUILD
# 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=('ocaml') makedepends=('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() { cd "${srcdir}/${pkgname}-${pkgver}" env DESTDIR="${pkgdir}" \ OCAMLFIND_DESTDIR="$OCAMLFIND_DESTDIR" \ make install }
大抵の OCaml パッケージでは make や make install にパラメータを追加で指定する必要があることを覚えてください。また、パッケージがバイトコードを生成しない場合は '!strip' オプションを外してアーキテクチャを変更してください。