多くの port は他の port に依存しています。 必要なものすべてがユーザのマシン上に存在することを 保証するために使用可能な、7 つの変数が用意されています。 よくあるケースのためにあらかじめ設定された依存変数に加え、 いくつかの依存関係の制御のための変数があります。
その port が必要とする共有ライブラリを、この変数で指定します。
(訳注: libc 等、標準のライブラリは指定する必要がありません。)
これは lib
:dir
[:target] という
組のリストです。
lib
が共有ライブラリの名前、
dir
が
そのライブラリが見つからない場合に
インストールされる port のディレクトリ、
target
が
そのディレクトリで呼ばれるターゲットです。
たとえば、
LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install
と指定されていた場合、まずメジャーバージョンが 9 の jpeg
共有ライブラリがインストールされているかどうかを確認します。
インストールされていない場合には、ports ツリーの
graphics/jpeg
サブディレクトリに移動し、
target
のコンパイルとインストールを行ないます。
target
の部分は、
それが DEPENDS_TARGET
(デフォルトでは install
) と
等しいときには省略することができます。
先頭の lib
の部分は
ldconfig -r | grep -wF
への引数になります。
この変数には正規表現を入れないようにしてください。
この依存関係のチェックは、
extract
ターゲットと
install
ターゲットの中で、2 回行なわれます。
(訳注: これは、その port
をビルドするマシンとインストールされるマシンが違う場合、
どちらのマシンでもそのライブラリが利用できることを確認するためです)。
同様に、依存するライブラリの名前は package 中にも書き込まれていて、
pkg_add(1)
実行時にそのライブラリがユーザのシステムに存在していなければ、
自動的にインストールされます。
この port の実行時に必要となるプログラム、
またはファイルがあるときにはこの変数で指定します。これは
path
:dir
[:target]
という組のリストです。
path
がファイルまたはプログラムの名前、
dir
が それが見つからない場合にインストールされる port のディレクトリ、
target
が そのディレクトリで呼ばれるターゲットです。
path
の最初の文字がスラッシュ
(/
) の場合にはファイルかディレクトリとみなし、
存在するかどうか
test -e
を使ってチェックします。
そうでない場合には実行可能ファイルであると考えて、
そのプログラムがユーザのサーチパス上にあるかどうか
which -s
を使って確認します。
たとえば Makefile に以下のように書いてあるとします。
RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \ wish8.0:${PORTSDIR}/x11-toolkits/tk80
まず、/usr/local/etc/innd
というファイルかディレクトリが存在するか確認します。
存在しない場合には、ports ツリーの
news/inn
というサブディレクトリで
ビルドとインストールを行ないます。
さらに、wish8.0
というプログラムがユーザのサーチパス中にあるかどうか探します。
ない場合には同じく ports ツリーの
x11-toolkits/tk80
というサブディレクトリでコンパイルとインストールを行ないます。
この例で、innd
は実際にはプログラムです。
このように、プログラムであっても一般ユーザのサーチパスに
含まれているとは考えにくいところに置かれているものの場合には、
絶対パスで指定してください。
この依存関係は install
ターゲット中でチェックされます。
また、pkg_add(1) によるインストールの際に、その package
が依存するものがユーザのシステムに存在しない場合には自動的に追加インストールできるように、
依存するものの名前も package 中に記録されます。
target
の部分が
DEPENDS_TARGET
と同じ場合には、
target
の部分を省略することができます。
この port のビルド時に必要となるプログラム、
またはファイルがあるときにはこの変数で指定します。
RUN_DEPENDS
と同様に、これは
path
:dir
[:target]
という組のリストです。たとえば、
BUILD_DEPENDS=unzip:${PORTSDIR}/archivers/unzip
と指定されていた場合、まず unzip
という名前のプログラムがインストールされているかどうかを確認します。
インストールされていない場合には ports ツリーの
archivers/unzip
サブディレクトリに移動し、
ビルドとインストールを行ないます。
ここで言う「ビルド」とは、
ファイルの展開からコンパイルまでのすべての処理を意味します。
この依存関係は、extract
ターゲットの中でチェックされます。
target
の部分は、
DEPENDS_TARGET
と同じ場合には省略することができます。
この port を取ってくるのに必要となるプログラム、
またはファイルがあるときにはこの変数で指定します。
上の二つと同様に、これは
path
:dir
[:target]
という組のリストです。たとえば、
FETCH_DEPENDS=ncftp2:${PORTSDIR}/net/ncftp2
と指定されていれば、ncftp2
という名前のプログラムを探します。
見つからない場合には、ports ツリーの
net/ncftp2
サブディレクトリでビルドとインストールを行ないます。
この依存関係は fetch
ターゲット中でチェックされます。
target
の部分は、
DEPENDS_TARGET
と同じ場合には省略することができます。
この変数には、この port
の展開に必要な実行ファイルや、他のファイルを指定します。
前の変数と同じく、これは
path
:dir
[:target]
のタプルの一覧です。たとえば、
EXTRACT_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
は、unzip
という実行形式のファイルがあるかどうか確認し、
見つからなければ、ports ツリーの
archivers/unzip
サブディレクトリに降りてビルドおよびインストールを行います。
依存関係は extract
ターゲットにおいて確認されます。
target
部分が
DEPENDS_TARGET
と同じなら、省いて構いません。
この変数は、展開が働いておらず
(デフォルトでは gzip
を仮定しています)、
「USE_
」 で説明されている
*
USE_ZIP
や USE_BZIP2
を使っても動かない場合にだけ使ってください。
この変数は、この port
がパッチを当てる際に必要とする実行ファイルや他のファイルを指定します。
前の変数と同じく、これは
path
:dir
[:target]
のタプルの一覧です。たとえば、
PATCH_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/java/jfc:extract
は、ports ツリーの
java/jfc
サブディレクトリに移動して、
ビルドおよびインストールを行います。
依存関係は、patch
ターゲットにおいて確認されます。target
部分が DEPENDS_TARGET
と同じなら省略して構いません。
上記のいずれにもあてはまらないような依存関係がある場合、
または他の port がインストールされているだけではなく
ソースが展開されている必要がある場合には、この変数を使います。
これは上記の四つと違い、特に「確認」するものが
ありませんので、
dir
[:target]
という形式のリストになります。
target
の部分は
DEPENDS_TARGET
と同じ場合には省略することができます。
多くの ports に共通の依存関係をカプセル化するために、 いくつもの変数が存在しています。
USE_*
変数変数 | 意味 |
---|---|
USE_BZIP2 | その port の tarball は bzip2
で圧縮されています。 |
USE_ZIP | その port の tarball は zip
で圧縮されています。 |
USE_GMAKE | その port をビルドするのに gmake
が必要です。 |
USE_PERL5 | その port をビルドしてインストールするのに
perl 5 が必要です。
perl
に関連して設定可能な他の変数については
「perl の利用」 をご覧ください。 |
USE_X_PREFIX | その port は PREFIX ではなく
X11BASE にインストールされます。
X11 に関連して設定可能な他の変数については、
「X11 の利用」 をご覧ください。 |
USE_AUTOMAKE | その port のビルドに GNU automake
が使われます。automake
に関わる他に設定可能な変数については、
「automake , autoconf
および libtool の利用」 をご覧ください。 |
USE_AUTOCONF | その port のビルドに GNU autoconf
が使われます。autoconf
に関わる他に設定可能な変数については、
「automake , autoconf
および libtool の利用」 をご覧ください。 |
USE_LIBTOOL | その port のビルドに GNU libtool
が使われます。libtool
に関わる他に設定可能な変数については、
「automake , autoconf
および libtool の利用」 をご覧ください。 |
GMAKE | gmake が
PATH に入っていない場合のフルパス |
USE_BISON | その port のビルドに bison
が使われます。 |
USE_SDL | その port のビルドや実行に
SDL が使われます。
USE_SDL の使い方について、詳しくは
「SDL の利用」 をご覧ください。 |
NO_INSTALL_MANPAGES | install.man
ターゲットを使いません。 |
その ports が X Window System を必要とするのであれば、
USE_XLIB=yes
を定義してください
(これは USE_IMAKE
が定義されていれば自動的に定義されます)。
BSD make
ではなく
GNU make
を必要とする場合には
USE_GMAKE=yes
を、
GNU autoconf を実行する必要がある場合には
USE_AUTOCONF=yes
を、
最新の qt toolkit を使用する場合には
USE_QT=yes
を、
perl
言語のバージョン 5 を必要とする場合には
USE_PERL5=yes
を定義してください
(特に最後のものは重要です。
FreeBSD のバージョンにより、基本システムに
perl5
が含まれていたり、いなかったりします)。
上で述べたように、依存する ports
が必要になったときに呼ばれるデフォルトのターゲットは
DEPENDS_TARGET
で、そのデフォルトは install
です。
これはユーザが使用する変数であり、
port の Makefile
で定義するものではありません。
もし、その port が特別な方法で依存関係を扱う必要がある場合には、
DEPENDS_TARGET
を再定義するのではなく
*_DEPENDS
変数の
:target
部分を使用してください。
make clean
と入力したときには、
その port が依存する port も自動的に clean されます。
そうならないようにしたい場合には、
環境変数 NOCLEANDEPENDS
を設定してください。KDE, GNOME や Mozilla
のように、再ビルドするのに時間がかかる port
に依存している場合は特に望ましいかもしれません。
無条件に他の port に依存させるには、
BUILD_DEPENDS
や
RUN_DEPENDS
の最初のフィールドに
${NONEXISTENT}
という変数を指定してください。
これは、他の port のソースが必要なときのみ使用してください。
ターゲットも指定することで、
コンパイルの時間を節約できる場合もあります。
たとえば
BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
とすると、常に jpeg
port
のディレクトリに行ってソースの展開を行ないます。
あなたがやりたいことが他の方法ではできない場合以外には
DEPENDS
を使わないでください。
これは常に他の port の作成を行ない (さらにデフォルトでは
インストールも行ない)、package まで作成します。
この動作が本当に所望のものでしたら、
それを BUILD_DEPENDS
と
RUN_DEPENDS
に書くべきでしょう
― 少なくとも意図を明確にすることができます。
巨大なアプリケーションの中には、 複数のコンフィギュレーションでビルドすることができるものがあります。 つまり、いくつもの外部ライブラリやアプリケーションの中の、 あるものが利用可能な場合に、 それを拡張機能として使用するように設定することができるということです。 それらのライブラリやアプリケーションを、 必ずしも すべてのユーザが必要としているわけではありませんので、ports システムではどのコンフィギュレーションがビルドされるべきかを port 作者が決めるために使えるフックを用意しています。 これらを適切にサポートすることにより、ユーザをハッピーにしたり、 port 1 つ分のコストで 2 つまたはそれ以上の port を提供するのと同様の効率化を行なうことが可能です。
これらのフックのうちで最も簡単に使えるものは
WITHOUT_X11
でしょう。
その port が X Window System のサポートありと、
サポートなしの設定でビルドできるのであれば、
通常は X Window System サポートありでビルドするべきでしょう。
ビルド時に WITHOUT_X11
が定義されていれば、
その時は X Window System サポートなしのバージョンが
ビルドされるべきです。
GNOME 環境の様々なパーツも、そのようなノブ (フック)
を持っていますが、それらは幾分使いにくいものです。
Makefile
中で その目的に使用される変数は
WANT_*
と HAVE_*
になります。
そのアプリケーションが、
以下に示されている依存ライブラリの一つについて、
サポートあり、なしの両方でビルドできる場合、
Makefile
には WANT_PKG
をセットする必要があります。
そして、ビルド時に HAVE_PKG
が定義されていれば
PKG
を使うバージョンがビルドされることになります。
現在、このような形でサポートされている
WANT_*
変数は、
WANT_GLIB
, WANT_GTK
,
WANT_ESOUND
, WANT_IMLIB
,
そして WANT_GNOME
です。
Ports ツリーに循環する依存性を持ち込まないでください!
Ports の構築技術は循環依存性を許容していません。
循環依存させてしまうと、たちまちどこかの誰かがインストールしている
FreeBSD を駄目にしてしまい、その数はまたたく間に増えて行きます。
この問題は見付けるのが非常に難しいです。
問題がありそうな場合は、その変更を行う前に
cd /usr/ports; make index
を実行するようにしてください。
この処理は古いマシンではかなり遅いかもしれませんが、
(あなたも含めて)
多くの人がその処理を行って嘆くことにならずに済ませられるでしょう。
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。