HaikuPorts のレシピを書くときの注意点
HaikuPorts のレシピを書いて haikuports に取り込んでもらいましょう。
レシピのガイドラインに従っていないレシピは容赦なく修正指示がくるので、最初からガイドラインに沿ってレシピを書きましょう。 レシピの各項目の説明も参照してください。レシピ中で利用できる環境変数は便利なので確認しておいてください。 レシピファイルの表記定義ファイルもあります。
以下はレシピのガイドラインにしたがって説明していますが、分かりにくい所は独自に説明を追加してあります。
環境変数
ビルド時によく使用される環境変数とインストール時によく使用される環境変数があります。また、インストール時によく使用される環境変数でも、インストール場所の指定に使われることがあります。
よく使われる一部を紹介します。
- $portDir: レシピの配置されているディレクトリ
- $sourceDir: 展開されたソースコードディレクトリ
$portVersion: バージョン番号、ソースコードファイルの指定で多用される
- $targetArchitecture: ビルドする環境名、x86_gcc2 など。ターゲットではないため、普通は primary アーキテクチャ
- $effectiveTargetArchitecture: ビルドされるターゲットアーキテクチャ
- $jobArgs: make $jobArgs などでジョブ数を指定。並列ビルドでエラーが出る場合、-j1 などを検討する
以下はインストール先の指定でよく使われるもの。
- $appsDir: アプリケーションのリンク先
- $binDir: コマンドを入れる場所
- $dataDir: データファイル配置場所
- $includeDir:
- $fontsDir: フォントのインストール先。$fontsDir/otfonts や $fontsDir/ttfonts 以下に
- $prefix: $binDir などすべてのディレクトリのトップ、secondary ビルドの時に $binDir と $prefix/bin では結果が異なるので注意
レシピの配置
haikuports でのレシピは Gentoo Linux のパッケージと同じ場所に配置しましょう。見つからなければそれらしいサブディレクトリに入れます。
レシピ名
レシピ名は以下のようにバージョン名などを含みます。
package_name-major.minor.bugfix.recipe
- (ダッシュ) はパッケージ名とバージョンの区切りに使用されるため、名前に使ってはいけません。_ (アンダースコア) を使用できます。 バージョンは . (ドット) で区切ってください。よくみられるメジャー、マイナー、バグフィックスの三つの番号以外も利用できます。
インデントと改行、行の長さ
インデント一段はタブ一つです。コマンド行などを複数行に分けるときに \ 記号で終端した次の行はインデントを一つ深くします。
改行は LF です。また、レシピの最後は空の行(LF 一つだけの行)で終わります。
行末のスペース記号は削除しておいてください。テキストエディタなどに機能があります。
一行は 70 文字以内にしてください。DESCRIPTION などの項目は長くなりがちですので、行末の \ で改行を無効にして次の行に進めましょう。
項目の順番
レシピ中の項目の順番はレシピのガイドラインの Orderingにしたがってください。
また、項目間の空行もガイドライン中の空行から変更してはいけません。空行位置が違うと修正させられます。
SUMMARY
SUMMARY は . で終わってはいけません。
DESCRIPTION
DESCRIPTION の一行は 70 文字以内とし、改行を \ で無効にして次の行に続けられます。ダブルクォートは \" としてエスケープしてください。
HOMEPAGE
HOMEPAGE に指定する URL はドメインのみの場合、最後に / を付けます。
ドメインより下位のディレクトリ名で終わっている場合、最後に / は不要です。
URL がプロジェクトの管理サイトなどの場合、プロジェクトトップをホームページとみなし、最後に / を付けます。
以上の説明を参考にしてガイドラインのHOMEPAGEの例を参照してください。
COPYRIGHT
年号と名前の間に , (コンマ) は不要です。
LICENSE
改行を入れて複数のライセンスを指定できます。ライセンス名は /boot/system/data/licenses ディレクトリにあるファイルの名前とします。
LICENSE="BSD (2-clause)"
LICENSE="BSD (3-clause)
GNU GPL v2
"
REVISION
ソースのバージョンが同じで生成されるパッケージの内容が変化したときに番号を増やします。ちょっとしたレシピの変更でパッケージ内のファイルに変化がなければ番号はそのまま。
ソースのバージョンが変わったときに番号を 1 に戻します。
SOURCE_URI
ソースが一つしかないときは SOURCE_URI を使います。二つ以上のときは SOURCE_URI、SOURCE_URI_1 などと数字を追加します。対応する CHECKSUM_SHA256 などにも同じように数字を追加してください。
$portVersion などを活用してバージョンごとに変更せずに済むようにしましょう。
80 文字を超えても問題ありません。
CHECKSUM_SHA256
ソースファイルに対して sha256sum を実行して表示されるチェックサムだけを記載します。
sha256sum foo.tar.gz
SOURCE_FILENAME
ソースファイル名が分かりにくい場合に指定します。
SOURCE_DIR
ソースアーカイブを解凍したときにディレクトリ名が変化する場合に指定します。
レシピをビルドしてみたときにディレクトリが見つからないエラーが出た時、ダウンロードされたファイルを解凍して作成されるディレクトリ名をココに指定すると解決します。
PATCHES
パッチファイルを patches ディレクトリに入れておき、レシピファイル名と同じような名前を付けておきます。ファイルの拡張子は .patch または .patchset とします。
最近は patchset が好まれるようです。git format-patch などのコマンドで patchset ファイルを作成できます。コミットが複数に分かれている場合、git rebase などでコミットをまとめる必要があるかもしれません。git の説明を参照してください。
haikuporter でレシピをビルドするときに -G (--no-git-repo) を指定しない場合、ソースファイルを git レポジトリとして初期化します。 ビルド時に変更が必要であれば、git にコミットしてパッチファイルを作成できます。
詳細は git の説明を参照してください。
ADDITIONAL_FILES
ディレクトリ additional-files 以下に入れたファイル名を指定します。 $portDir/additional-files/file_name などとして利用できます。
ARCHITECTURES と SECONDARY_ARCHITECTURES
ARCHITECTURES は最低でも x86_gcc2 x86 x86_64 の三つを入れておきます。
ARCHITECTURES="!x86_gcc2 ?x86 x86_64"
ビルドできないものの前に ! をつけます。未確認のものの前に ? を付けましょう。
x86_gcc2 でビルドできない場合、!x86_gcc2 としておき、SECONDARY_ARCHITECTURES の x86 でビルドできるようにがんばりましょう。
if [ "$targetArchitecture" = x86_gcc2 ]; then
SECONDARY_ARCHITECTURES="x86"
fi
SECONDARY_ARCHITECTURES では GCC7 などの比較的新しいコンパイラが提供されているため、大抵のソースコードはビルドできます。 未確認の場合は ? を付けておくこともできます。
ARCHITECTURES の一つ前の行は空行です。ガイドラインにしたがってください。
PROVIDES
最初の行はパッケージ名です。
二行目以降はパッケージが提供する項目を指定します。lib、cmd、app、addon の一つを指定します。
パッケージ名以外はアルファベット順に記載してください。
BUILD_REQUIRES と BUILD_PREREQUIRES
BUILD_REQUIRES にビルド時にリンクされるライブラリなどを記載します。
BUILD_PREREQUIRES にビルド時に利用されるツールなどを記載します。大抵は cmd: で始まるコマンドラインツールです。
ビルドは隔離された環境で実行されるため、ここに記載されていないコマンドやライブラリは利用できないと考えてください。 レシピをテストビルドしたときにエラーが出た場合、これらの項目を見直してください。
依存ライブラリなどの正確な名前が分からない場合、そのパッケージを提供しているレシピを参照してください。PROVIDES で指定されている名前が使用できます。
lua に依存性のある場合、lua から始まっている名称は旧式のようです。liblua の方を使用してください。
PATCH
PATCHES とは違い、コマンドを実行して変更を適用します。この項目はオプションです。 sed などのコマンドでちょっとだけソースコードをいじるようなときに使用します。
BUILD
ビルドに必要なコマンドライン指定を羅列します。make などを呼ぶことが多いでしょう。
ディレクトリの作成は mkdir -p として -p オプションを指定すると、すでにディレクトリが存在したときにエラーになりません。
INSTALL
インストールに必要なコマンドライン指定を羅列します。
TEST
パッケージのテストに必要なコマンドライン指定を羅列します。
初めてレシピを書いたときに指摘されやすい項目のみについて説明しました。あとはレシピのガイドライン読んでみてください。
haikuports にあるレシピにはガイドラインに沿っていないものが結構あります。レシピの参考にするときはコミット日の新しいものを参照してください。