第 4章本格的な port

目次
4.1. port 構築の詳細
4.2. オリジナルのソースの入手
4.3. port の修正
4.4. パッチの適用
4.5. コンフィグレーション
4.6. ユーザからの入力の扱い

残念ながら移植がそう簡単ではなく、それを動かすために 多少の変更が必要になる場合もあるでしょう。 このセクションでは、模範的な ports の作法に従い、 どのように変更を行なって動くようにするのかを 順を追って説明します。

4.1. port 構築の詳細

まず、あなたが port のディレクトリで make と 入力してから起こる一連の出来事について、 順を追って説明します。 ここを読むときには、別のウィンドウに bsd.port.mk を表示しておくと 理解の助けになるかもしれません。

しかし、bsd.port.mk が何をしているのか 完全に理解できなくても 心配する必要はありません。 それほど多くの人が理解している というわけでは ありませんから…。 f(^_^;)

  1. まず、fetch という ターゲットが実行されます。 この fetch ターゲットは、 配布ファイルがローカルの DISTDIR に 存在することを保証する役目を持っています。 もし必要なファイルが DISTDIR に 存在しなければ、fetch ターゲットは Makefile で指定された MASTER_SITES 中の URL や、 FreeBSD のメイン FTP サイト ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ (ここにはバックアップとして、われわれ ports 管理者が確認した 配布ファイルを置いてあります) を探しにいきます。 make を実行するマシンがインターネットに 接続されていて、目的のファイルを FETCH で 取ってこれた場合には、それを DISTDIR に 保存します。

  2. 次に extract ターゲットが実行されます。 このターゲットは DISTDIR から 配布ファイル (普通は gzip された tar ファイル) を読み込み、 その内容を作業ディレクトリ WRKDIR (デフォルトでは work) に展開します。

  3. 次に patch ターゲットが実行されます。 まず、PATCHFILES にパッチファイルが 指定されていれば、そのパッチを適用します。 次に、PATCHDIR ディレクトリ (デフォルトでは files サブディレクトリ) に patch-* という 名前のパッチファイルが存在すれば、 これらをアルファベット順に適用します。

  4. 次に configure ターゲットが 実行されます。 これには、いろいろな場合があります。

    1. scripts/configure が 存在する場合には、そのスクリプトが実行されます。

    2. HAS_CONFIGURE または GNU_CONFIGURE がセットされていれば、 WRKSRC/configure が 実行されます。

    3. USE_IMAKE がセットされていれば、 XMKMF (デフォルトでは xmkmf -a) が 実行されます。

  5. 最後に build ターゲットが実行されます。 これは作業ディレクトリ (WRKSRC) に降りていき、 ビルド (コンパイル) を実行するのが役目です。 USE_GMAKE がセットされていれば GNU make が使用され、 セットされていなければ FreeBSD の make が 使用されます。

上記はデフォルトの動作です。これに加えて pre-何とかpost-何とかという ターゲットを定義したり、そのような名前のスクリプトを scripts サブディレクトリに置くことも可能で、 それぞれデフォルトの動作の前や後に実行されます。

たとえば、post-extract ターゲットが Makefile に定義されていて、 scripts サブディレクトリに pre-build というファイルが置かれている場合、 post-extract ターゲットは 通常の展開動作の後に呼び出され、 pre-build スクリプトは デフォルトのコンパイル動作の前に実行されます。 実行する動作が簡単であれば、スクリプトよりも Makefile のターゲットを使用することが 推奨されています。 なぜなら、その port では どのような非標準の動作が必要とされるのか、 一箇所にまとめて書いてあった方が他の人に理解しやすいからです。

デフォルトの動作は bsd.port.mkdo-何とかという ターゲットで実行されます。 たとえば port を展開するコマンドは do-extract ターゲットに書かれています。 もしデフォルトのターゲットに不満があれば、 Makefile 中で do-何とかという ターゲットを再定義することにより、 好きなように変更することができます。

注意: ``メイン''のターゲット (たとえば extract, configure、その他) は、 すべての前段階が実行されていることを確認してから、 実際のターゲットやスクリプトを呼び出す以外のことは 行ないませんし、これらが変更されることも想定されていません。 もし展開の方法を変更したいときには do-extract の変更によって実現し、 extract の動作は絶対に変更しないでください。

これで、ユーザが make と 入力したときに何が起こるのかが理解できたと思います。 では、完璧な port を作成するための推奨手順を 順に見ていきましょう。

FreeBSD ports システムに関する質問は、(英語で) <ports@FreeBSD.org> へ、
この文書の原文に関するお問い合わせは、(英語で) <doc@FreeBSD.org> までお願いします。