This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

本格的な port

Chapter 3. 本格的な port

Table of Contents
3.1. port 構築の詳細
3.2. オリジナルのソースの入手
3.3. port の修正
3.4. パッチの適用
3.5. コンフィグレーション
3.6. ユーザからの入力の扱い

残念ながら移植がそう簡単ではなく, 動かすために多少の変更が必要な場合も多いでしょう. この節では, Ports Collection の方法論にのっとって, そのような場合にどのように変更を施し, 動くようにしたら良いかを順を追って説明します.

3.1. port 構築の詳細

まず, あなたが port のディレクトリで make と入力してから起こる一連の出来事について, 順を追って説明します. ここを読むときには, 他のウィンドウで同時に bsd.port.mk も開いておくと良いかも知れません.

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

  1. まず, fetch というターゲットが実行されます. この fetch ターゲットはローカルディスクの DISTDIR に配布ファイルがあるようにするのが役目です. もし, fetch が必要なファイルを DISTDIR に見つけることができなければ, Makefile に指定されている URL MASTER_SITES, そして FreeBSD の FTP サイトである ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ (ここには, わたしたちが取ってきたファイルをバックアップとして置いてあります) へ探しにいきます. そして, ユーザのサイトがインターネットに直接接続されている場合には, FETCH を使いその名前のファイルを取ってきて, DISTDIR に保存します.

  2. 次に実行されるのは extract ターゲットです. これは DISTDIR にある配布ファイル (普通は gzip された tar ファイル) を読み, ソースを一時的な作業ディレクトリ WRKDIR (デフォルトは work) に展開します.

  3. 次に, patch というターゲットが実行されます. まず, PATCHFILES に定義されている, すべてのパッチを適用します. 次にもし PATCHDIR (デフォルトは patches サブディレクトリ) にパッチが存在すれば, これらをアルファベット順に適用します.

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

    1. scripts/configure が存在すれ場合, それが実行されます.

    2. HAS_CONFIGURE あるいは GNU_CONFIGURE がセットされていれば, WRKSRC/configure が実行されます.

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

  5. 最後に build というターゲットが実行されます. これはその port の専用の作業ディレクトリ (WRKSRC) に移動し, コンパイルするのが役目です. USE_GMAKE がセットされていれば GNU make が使用されます. そうでなければ FreeBSD の make が使用されます.

上記はデフォルトのルールです. さらに, pre-何とかpost-何とか というターゲットが定義してあったり, そのような名前のスクリプトが scripts サブディレクトリに置いてある場合には, それらはデフォルトの動作の前後に実行されます.

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

デフォルトの動作は bsd.port.mkdo-何とか というターゲットで行なわれます. たとえば port を展開するコマンドは do-extract というターゲットにあります. もしデフォルトのターゲットに不満があれば, do-何とか というターゲットを再定義することによってどのようにでも直すことができます.

Note: ``メイン''のターゲット (たとえば extractconfigure 等) は, すべての前段階が実行されていることを確認してから, 実際のターゲットやスクリプトを呼び出す以外のことは行ないません. bsd.port.mk はこれらが変更されることは仮定していませんので, たとえば展開の仕方を変更したいときには do-extract を変更し, 絶対に extract には手を触れないでください.

これで, ユーザが make と入力したときに何が起こるのかが理解できたと思います. では, 完璧な port を手順を追って作ってみましょう.

FreeBSD ports システムに関する質問は <ports@freebsd.org> へ(英語で),
FreeBSD ports に関する日本語での議論は <ports-jp@jp.FreeBSD.org> へお願いします.
この文書の原文に関するお問い合わせは <doc@freebsd.org> へ(英語で),
日本語訳に関するお問い合わせは <doc-jp@jp.FreeBSD.org> へお願いします.