HaikuPorts のレシピを読む

HaikuPorts ではプログラムやフォントなどをパッケージ化するためのプロジェクトです。 Haiku OS 用にソフトを移植したり、フォントをまとめてインストールできるようにしたければ、レシピを書きましょう。

HaikuPorts ではソフトなどをレシピとして管理しており、レシピにはパッケージの情報やビルド情報が記載されています。

自分でレシピを書けるように既存のレシピを見ていきます。

aobook のレシピを題材にレシピの大まかな内容を説明します。aobook は青空文庫のデータのためのビューアーです。

最初の部分にパッケージの説明やビルドに使われるソースコードやファイルの取得方法を記載します。

SUMMARY="Aozora Bunko text viewer"
DESCRIPTION="Aobook is a viewer for Aozora Bunko which is a digital library \
of Japanese-language literature."
HOMEPAGE="https://osdn.net/projects/aobook/"
COPYRIGHT="2014-2018 Azel"
LICENSE="BSD (3-clause)"
REVISION="1"
SOURCE_URI="https://github.com/hanya/aobook-haiku/archive/v${portVersion/_/-}.tar.gz"
CHECKSUM_SHA256="f840a98b0f0c1f3fa31ae19498bc9051106e068b9af95eb4065643693f7f1e07"
SOURCE_FILENAME="aobook-haiku-${portVersion/_/-}.tar.gz"
SOURCE_DIR="aobook-haiku-${portVersion/_/-}"

次に互換性のある環境を指定します。

ARCHITECTURES="!x86_gcc2 x86 x86_64"
SECONDARY_ARCHITECTURES="x86"

x86_gcc2 でビルドできないため、前に ! 記号がついています。 haikuports.conf で二番目のアーキテクチャが有効なら SECONDARY_ARCHITECTURES に指定されているアーキテクチャが利用できるかもしれません。

PROVIDES ではパッケージ名とインストール後に提供される実行ファイルなどを記載します。app 指定は実行ファイルが /boot/system/apps に入ることを示します。

PROVIDES="
    aobook$secondaryArchSuffix = $portVersion
    app:Aobook = $portVersion
"
REQUIRES="
    haiku$secondaryArchSuffix
    lib:libfontconfig$secondaryArchSuffix
    lib:libfreetype$secondaryArchSuffix
    lib:libiconv$secondaryArchSuffix
    lib:libjpeg$secondaryArchSuffix
    lib:libpng16$secondaryArchSuffix
    lib:libz$secondaryArchSuffix
    "

REQUIRES は実行時に必要なファイルを指定します。$secondaryArchSuffix は SECONDARY_ARCHITECTURES 用にビルドしたときに _x86 などが追加されることを示します。

BUILD_REQUIRES はビルド時にリンクされるライブラリです。

BUILD_REQUIRES="
    haiku${secondaryArchSuffix}_devel
    devel:libfontconfig$secondaryArchSuffix
    devel:libfreetype$secondaryArchSuffix
    devel:libiconv$secondaryArchSuffix
    devel:libjpeg$secondaryArchSuffix
    devel:libpng16$secondaryArchSuffix
    devel:libz$secondaryArchSuffix
    "
BUILD_PREREQUIRES="
    makefile_engine
    cmd:g++$secondaryArchSuffix
    cmd:gcc$secondaryArchSuffix
    cmd:make
    cmd:sed
    "

BUILD_PREREQUIRES はビルド時に必要な make やコンパイラなどのツールを指定します。ビルドは隔離された環境で行われるため、ここで指定していないツールは利用できずにエラーになることがあります。リンクするライブラリなども同様です。自作のレシピをビルドするときにエラーが出た場合、必要なファイルを見直して追加してみてください。

BUILD ではビルドするコマンドなどを記載します。

BUILD()
{
    make -C mlib -f Makefile.haiku $jobArgs OBJ_DIR=objects
    make -C src -f Makefile.haiku $jobArgs OBJ_DIR=objects \
        default catalogs bindcatalogs
}

INSTALL ではインストール時に実行するコマンドを指定します。特殊なコマンドもあり、ここでは実行ファイルをデスクバーのメニューから実行できるように addAppDeskbarSymlink で登録しています。

INSTALL()
{
    mkdir -p $appsDir
    cp -af src/objects/aobook $appsDir/Aobook

    mkdir -p $dataDir/aobook/doc
    cp -af doc/manual.html $dataDir/aobook/doc

    addAppDeskbarSymlink $appsDir/Aobook

    mkdir -p $dataDir/locale/catalogs/x-vnd.azsky.aobook
    cp src/objects/x-vnd.azsky.aobook/* \
        $dataDir/locale/catalogs/x-vnd.azsky.aobook
}

このレシピを haikuporter でビルドするとインストール可能なパッケージができます。レシピを haikuports に取り込んでもらえば、いつのまにか HaikuDepot からインストールできるようになります。