第4章 本格的な port
戻る |  | 次へ

## 第4章 本格的な port

残念ながら移植がそう簡単ではなく、それを動かすために 多少の変更が必要になる場合もあるでしょう。 このセクションでは、模範的な 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.mk` の `do-`何とか``という ターゲットで実行されます。 たとえば port を展開するコマンドは `do-extract` ターゲットに書かれています。 もしデフォルトのターゲットに不満があれば、 `Makefile` 中で `do-`何とか``という ターゲットを再定義することにより、 好きなように変更することができます。

### 注記:

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

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

戻る |  | 次へ
3.6. port の提出 | ホーム | 4.2. オリジナルのソースの入手

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。