「OCaml パッケージガイドライン」の版間の差分
(en:OCaml package guidelinesへの転送ページ) |
|||
| 1行目: | 1行目: | ||
| + | [[Category:パッケージ開発]] |
||
| − | #redirect[[en:OCaml package guidelines]] |
||
| + | [[en:OCaml package guidelines]] |
||
| + | [[it:OCaml package guidelines]] |
||
| + | {{Package Guidelines}} |
||
| + | |||
| + | [[Wikipedia:OCaml|OCaml]] で書かれたソフトウェアの [[PKGBUILD]] を作成する方法。 |
||
| + | |||
| + | ==パッケージの命名== |
||
| + | ライブラリの場合、{{ic|ocaml-''modulename''}} を使ってください。アプリケーションの場合、プログラムの名前を使ってください。どちらの場合にしても、名前は全て小文字にしてください。 |
||
| + | |||
| + | ==ファイルの場所== |
||
| + | === ライブラリ === |
||
| + | OCaml のライブラリは {{ic|/usr/lib/ocaml}} にインストールしてください。{{ic|/usr/lib/ocaml/site-lib}} を使うのは非推奨です。 |
||
| + | |||
| + | OCaml のライブラリは {{Pkg|ocaml-findlib}} を使ってインストールします。{{ic|ocaml-findlib}} にはライブラリを管理しやすくするライブラリメタデータが含まれています。Ocaml ソフトウェアのデファクトスタンダードとして多くのソフトウェアが {{ic|ocaml-findlib}} を必要とします。 |
||
| + | |||
| + | {{ic|ocaml-findlib}} はソースアーカイブに含まれている {{ic|META}} という名前のファイルから必要なデータを抽出します。ファイルが含まれていない場合 Debian, Ubuntu, Fedora などのパッケージからもらってくるか、あるいはメンテナ自身が作成する必要があります。また、ファイルを含めるようにソフトウェアの開発元にリクエストを送って下さい。 |
||
| + | |||
| + | {{ic|ocaml-findlib}} でパッケージをインストールするときは {{ic|OCAMLFIND_DESTDIR}} 変数が使われます。詳しくは下の PKGBUILD を参照。 |
||
| + | |||
| + | === OASIS === |
||
| + | OCaml のパッケージは {{ic|DESTDIR}} を無視して OASIS を使って実行ファイルをインストールします。OASIS で {{ic|DESTDIR}} が使われないのは仕様です ([https://forge.ocamlcore.org/tracker/?func=detail&atid=294&aid=852&group_id=54 issue #852])。{{ic|--destdir}} 引数を使って {{ic|configure}} スクリプトを実行することで {{ic|DESTDIR}} のような機能を有効にできます: |
||
| + | |||
| + | {{bc|<nowiki>build() { |
||
| + | cd "${srcdir}/${srcname}-${pkgver}" |
||
| + | ./configure --prefix /usr --destdir "$pkgdir" |
||
| + | |||
| + | # build commands |
||
| + | }</nowiki>}} |
||
| + | |||
| + | == OCaml バイトコードとレベル == |
||
| + | |||
| + | OCaml は複数の"レベル"でコードを実行することができます。トップコードレベルではコンパイルを行わずに OCaml のコードを解釈し、バイトコードレベルではマシンに依存しないバイトコードが作成され、ネイティブレベルでは (C/C++ と同じように) 機械語のバイナリが作成されます。 |
||
| + | |||
| + | OCaml のパッケージをビルドするときは、ネイティブのマシンコードがコンパイルされるのかバイトコードがコンパイルされるのか、あるいはその両方か確認する必要があります。レベルが違うと様々な状況が生まれ、あるいはパッケージのオプションや依存関係に問題を起こすこともあります。 |
||
| + | |||
| + | バイトコードが生成される場合は PKGBUILD に以下を記述してバイトコードを保護してください: |
||
| + | |||
| + | options=('!strip') |
||
| + | |||
| + | パッケージにバイトコードを含まず、バイナリだけを配布する場合、{{ic|ocaml}} を依存パッケージに指定する必要はありません。ただし、OCaml コンパイラは {{ic|ocaml}} パッケージに入っているため makedepends には指定する必要があります。パッケージにネイティブコードとバイトコードの両方を含める場合は {{ic|ocaml}} は依存パッケージでありながら makedepends にも指定する必要があります。 |
||
| + | |||
| + | 稀に OCaml のコードがバイトコードとしてのみ配布されていることがあります: コンパイルされていないソースコードしか配布されていない場合に ''arch'' に ''any'' を使うことが推奨されます。ただし多くのライブラリはネイティブコードを配布しています。 |
||
| + | |||
| + | パッケージで何が配布されるのか、パッケージにネイティブのマシンコードとバイトコードが含まれるのかどうか確認するのが肝要です。 |
||
| + | |||
| + | == サンプル PKGBUILD == |
||
| + | |||
| + | {{bc|1= |
||
| + | # 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' ''オプションを外してアーキテクチャを変更してください。 |
||
2016年1月12日 (火) 16:56時点における版
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' オプションを外してアーキテクチャを変更してください。