summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSatoshi Asami <asami@FreeBSD.org>1998-11-24 02:47:06 +0000
committerSatoshi Asami <asami@FreeBSD.org>1998-11-24 02:47:06 +0000
commit8792629acc6d4496b043d7fd56f92d26dbdefcbf (patch)
treefc99d151262af3f7e9243994150f98430cb57a99
parent079e7165261510990f06b5a44211a5ddf8e67c70 (diff)
Notes
-rw-r--r--ja/handbook/porting.sgml556
1 files changed, 278 insertions, 278 deletions
diff --git a/ja/handbook/porting.sgml b/ja/handbook/porting.sgml
index 7f59d10243..19b3a14e51 100644
--- a/ja/handbook/porting.sgml
+++ b/ja/handbook/porting.sgml
@@ -1,6 +1,6 @@
-<!-- $Id: porting.sgml,v 1.49 1998-10-15 22:47:01 motoyuki Exp $ -->
+<!-- $Id: porting.sgml,v 1.50 1998-11-24 02:47:06 asami Exp $ -->
<!-- The FreeBSD Japanese Documentation Project -->
-<!-- Original revision: 1.112 -->
+<!-- Original revision: 1.113 -->
<sect1><heading>フリーソフトウェアの移植<label id="porting"></heading>
@@ -29,9 +29,6 @@ Portsコレクションについてのさらに細かい内部の働きについては, そちらの
Makefile を読むのにあまり慣れていない人でも, 得るものはとても大きいで
しょう.
- <sect2>
- <heading>移植を始める前に<label id="porting:starting"></heading>
-
<p>注意: ここでは, 変更可能な変数の一部についてのみ記述してい
ます. ほとんどの変数は<tt>bsd.port.mk</tt>の始めに記述があり
ます. また, このファイルは非標準のタブの設定になっていま
@@ -40,146 +37,6 @@ Makefile を読むのにあまり慣れていない人でも, 得るものはとても大きいで
したら `<tt>:set tabstop=4</tt>'のようにして正しい値を設定する
ことができます.
- <p>Portの過程で, 修正や, どのバージョンのUNIXで動くかによる条件
- つきコンパイルなどが必要なコードに出会うかもしれません. その
- ような条件つきコンパイルなどのための変更をおこなうときには,
- FreeBSD 1.x システムへの移植や, CSRGの4.4BSD, BSD/386,
- 386BSD, NetBSD, OpenBSD などの他のBSDシステムへの移植が可能な
- ように, できるだけ普遍的な変更をおこなうことを心がけてください.
-
- <p>4.3BSD/Reno (1990) およびそれより新しいBSD版を古いバージョン
- と区別するには `<tt>BSD</tt>' マクロを利用するのがよいでしょう.
- これは <tt>&lt;sys/param.h&gt;</tt> で定義されています. このファ
- イルがすでにインクルードされていればよいのですが, もしそうでな
- い場合には以下のコードを, その<tt>.c</tt> ファイルの適当な場所
- に加えてください.
-
-<tscreen><verb>
-#if (defined(__unix__) || defined(unix)) && !defined(USG)
-#include <sys/param.h>
-#endif
-</verb></tscreen>
-
- <p>これらのシンボルが定義されているすべてのシステムには
- sys/param.h があるはずです. もし, そうでないシステムを発見した
- ら我々にも教えてください. &a.ports; までメールを送ってください.
-
- <p>あるいは, GNU の Autoconf のスタイルを使用することもできます,
-
-<tscreen><verb>
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-</verb></tscreen>
-
- この方法を使用するときには, Makefile 中の<tt>CFLAGS</tt>に
- <tt>-DHAVE_SYS_PARAM_H</tt> を加えることを忘れないようにしてく
- ださい.
-
- いったん<tt>&lt;sys/param.h&gt;</tt>がインクルードされると,
-
-<tscreen><verb>
-#if (defined(BSD) && (BSD >= 199103))
-</verb></tscreen>
-
- このようにしてそのコードが4.3 Net2コードベース, または
- それより新しいもの (例: FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD,
- BSD/386 1.1とそれ以前) の上でコンパイルされているかを検出できます.
-
-<tscreen><verb>
-#if (defined(BSD) && (BSD >= 199306))
-</verb></tscreen>
-
- これは, 4.4コードベース, またはそれより新しいもの (例: FreeBSD
- 2.x, 4.4, NetBSD 1.0, BSD/386 2.0とそれ以後) の上でコンパイルさ
- れているかどうかを検出するために使用します.
-
- 4.4BSD-Lite2 コードベースでは, BSD マクロの値は 199506 になっ
- ています. これは参考程度の意味合いしかありません.
- 4.4-Lite ベースの FreeBSD と 4.4-Lite2 での変更がマージされた
- バージョンとを区別するのに使用するべきものではありません.
- この目的のためには, __FreeBSD__ マクロをかわりに使用してくださ
- い.
-
- <p>以下は控え目に使ってください.
-
- <itemize>
- <item><tt>__FreeBSD__</tt> はFreeBSDのすべての版で定義されてい
- ます. 変更がFreeBSDだけに適用されるとき以外は使用しないでく
- ださい. Portでよくある, <tt>strerror()</tt> ではなく
- <tt>sys_errlist[]</tt> を使うなどは, FreeBSDでの変更ではなく,
- BSDの流儀です.
-
- <item>FreeBSD 2.xでは<tt>__FreeBSD__</tt>が2と定義されていま
- す. それ以前の版では1になっています. その後の版では,
- そのメジャー番号に合うように上がっていきます.
-
- <item>もし, FreeBSD 1.x システムと FreeBSD 2.x あるいは
- FreeBSD 3.x システムを区別する必要があれば, 上で述べた
- <tt>BSD</tt>マクロを使用するのが,
- 大抵の場合において正しい答です. もし, FreeBSD特有の変更であ
- れば (`<tt>ld</tt>' を使うときのシェアードライブラリ用のな
- オプションなど), <tt>__FreeBSD__</tt>を使い
- `<tt>#if __FreeBSD__ &gt; 1</tt>' のようにFreeBSD 2.x
- および, それ以降のシステムを検出するのはかまいません.
-
- もし, 2.0-RELEASE以降のFreeBSDシステムを細かく検出したけれ
- ば, 以下を使用することができます.
-
-<tscreen><verb>
-#if __FreeBSD__ >= 2
-#include <osreldate.h>
-# if __FreeBSD_version >= 199504
- /* 2.0.5+ release specific code here */
-# endif
-#endif
-</verb></tscreen>
-<tt>__FreeBSD_version</tt> の値は以下の通りです:
-<tscreen><verb>
-2.0-RELEASE: 199411
-2.1-current's: 199501, 199503
-2.0.5-RELEASE: 199504
-2.2-current (2.1以前): 199508
-2.1.0-RELEASE: 199511
-2.2-current (2.1.5以前): 199512
-2.1.5-RELEASE: 199607
-2.2-current (2.1.6以前): 199608
-2.1.6-RELEASE: 199612
-2.1.7-RELEASE: 199612
-2.2-RELEASE: 220000
-2.2.1-RELEASE: 220000 (2.2-RELEASE と同じです)
-2.2-STABLE (2.2.1-RELEASE 以後): 220000 (これも同じです)
-2.2-STABLE (texinfo-3.9 以後): 221001
-2.2-STABLE (top 導入以後): 221002
-2.2.2-RELEASE: 222000
-2.2-STABLE (2.2.2-RELEASE 以後): 222001
-2.2.5-RELEASE: 225000
-2.2-STABLE (2.2.5-RELEASE 以後): 225001
-2.2-STABLE (ldconfig -R 以後): 225002
-2.2.6-RELEASE: 226000
-2.2.7-RELEASE: 227000
-2.2-STABLE (2.2.7-RELEASE 以降): 227001
-3.0-current (mount(2) 変更以前): 300000
-3.0-current (1997年11月現在): 300001
-</verb></tscreen>
- (2.2-STABLEは, 2.2.5-RELESE 以後, "2.2.5-STABLE" と呼ばれ
- ることがあります.)
- 見ての通り, これは年・月というフォーマットになっていましたが,
- バージョン 2.2 から, より直接的にメジャー/マイナー番号を使う
- ように変更になりました. 並行していくつかのブランチ(枝分かれし
- たバージョン)を開発する場合には, リリースされた日付でそれらの
- リリースを分類することが不可能だからです.
- (あなたが今 port を作成するときに, 古い -current 達について心配
- する必要はありません. これは参考のために挙げられているにすぎま
- せん.)
-
- </itemize>
-
- <p>これまで, 何百ものportが作られてきましたが,
- <tt>__FreeBSD__</tt>が正しく使われたのは, 1つか2つの場合だけで
- しょう. 以前のportが誤った場所でそのマクロを使っているからと
- いって, それをまねする理由はありません.
-
<sect2>
<heading>3分porting</heading>
@@ -865,47 +722,31 @@ FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
でに, 作者を探し出して八つ裂きにするといいでしょ
う. <tt>(-_-#)</tt>
- <sect2>
- <heading>Motifを必要とするport</heading>
-
- <p>最近はコンパイルにMotifを必要とするアプリケーションが増えて
- きました. (Motif自体は有料のものがいくつかの会社から手に入りま
- すし, 無料の互換ライブラリを作ろうとしているグループが少なくと
- も一つあります.) Motifはかなり広く使われていますし, 製品のライ
- センスではライブラリを静的にリンクした実行形式は再配布が認めら
- れている場合が多いので, Motifを必要とするソフトウェアを簡単に
- 動的/静的にリンクできるようなしくみが用意されています.
-
<sect3>
- <heading>REQUIRES_MOTIF</heading>
-
- <p>MotifがないとコンパイルできないportのMakefileではこの変
- 数を指定してください. これによって, Motifを持っていない人が
- このportをコンパイルしようとするのを未然に防ぎます.
-
- <sect3>
- <heading>&dollar;{MOTIFLIB}</heading>
-
- <p>この変数は<tt>bsd.port.mk</tt>によってMotifライブラリの指
- 定に置き換えられます. ソース内のMakefileやImakefileで
- Motifライブラリを指定しているところをこの変数に置き換えるよ
- うにパッチをあててください.
+ <heading>ldconfig</heading>
- <p>代表的な例としては以下の二つがあげられます:
- <enum>
- <item>MakefileかImakefileの中でMotifライブラリが
- `<tt>-lXm</tt>' として使われている場合には, かわりに
- `<tt>&dollar;{MOTIFLIB}</tt>' と書いてください.
+ <p>共有ライブラリをインストールするときには, 共有ライブラリのキャッ
+ シュを更新するためにportのMakefileの<tt>post-install</tt>
+ target から`<tt>/sbin/ldconfig -m</tt>' を走らせてください.
+ このコマンドの引数は共有ライブラリのインストールしてあるディ
+ レクトリ (通常 <tt>&dollar;{PREFIX}/lib</tt>) です.
- <item>Imakefileの中で `<tt>XmClientLibs</tt>' が使われている
- 場合には, それを `<tt>&dollar;{MOTIFLIB}
- &dollar;{XTOOLLIB} &dollar;{XLIB}</tt>' と書きかえてください.
- </enum>
+ <p>また, <tt>pkg/PLIST</tt>に<tt>@exec</tt>行を入れ, package
+ をインストールした場合にも共有ライブラリがすぐ使えるように
+ してください. この行は共有ライブラリを指定する行のすぐ後に書
+ くのがいいでしょう:
+<tscreen><verb>
+lib/libtcl80.so.1.0
+@exec /sbin/ldconfig -m %D/lib
+</verb></tscreen>
- <p><tt>&dollar;{MOTIFLIB}</tt> は通常 `<tt>-L/usr/X11R6/lib
- -lXm</tt>' か `<tt>/usr/X11R6/lib/libXm.a</tt>' に置き換えら
- れます. したがって前に `<tt>-L</tt>' や `<tt>-l</tt>' をつけ
- る必要はありません.
+ <p><em>絶対に</em>引数なしでただ `<tt>ldconfig</tt>'とだけ書い
+ てある行をMakefileやpkg/PLISTファイルに入れないでください.
+ このコマンドを実行すると, 共有ライブラリのキャッシュが
+ <tt>/usr/lib</tt>の内容のみとなり, ユーザのマシンにさまざま
+ な問題をもたらします (「ぎゃぁ! このportをインストールした
+ らxinitが使えなくなっちゃった!」). この掟を破った者は, 永久
+ に地獄の底で苦しみ続けるように, 閻魔様に頼んでおきます.
<sect2>
<heading>ELF 対応</heading>
@@ -1047,6 +888,77 @@ ${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....
パッケージのフォーマットに応じて, 正しい
<tt/ldconfig/ が呼ばれることを保証するためのものです.
+ <sect3>
+ <heading>マニュアルの正しいインストール</heading>
+
+ <p>MAN[1-9LN] 変数を使用してください. この変数を使用すると,
+ 自動的にすべてのマニュアルを <tt>pkg/PLIST</tt> に加え,
+ (つまり, マニュアルを <tt/PLIST/ に加えては<em/いけません/)
+ またマニュアルの圧縮を自動的に(<tt>/etc/make.conf</tt> 中で
+ <tt>NOMANCOMPRESS</tt>が設定されていなければ)行うこと
+ ができます. あなたの port が既に圧縮されたマニュアルを
+ インストールするのであれば, <tt/MANCOMPRESSED/ 変数を
+ 設定してください.
+
+<tscreen><verb>
+MAN1= foo.1 bar.1
+MAN5= foo.conf.5
+MAN8= baz.8
+</verb></tscreen>
+
+ <p>なお, 普通 Imake を使ってコンパイルされる X アプリケーショ
+ ンの場合はこの指定は必要ありません.
+
+ <p><tt>PREFIX</tt>以外のディレクトリの下にマニュアルを置く
+ ようなportでは<tt>MANPREFIX</tt>を指定することが
+ できます. さらに, 特定のセクションのマニュアルだけ, 標準では
+ ない場所にインストールする場合(例えば多くの Perl のモ
+ ジュールの ports の場合)には, 個々のマニュアルのパスを
+ <tt>MAN<em>sect</em>PREFIX</tt> (<em>sect</em>は, 1 から 9
+ または, L か N を表わします) によって指定できます.
+
+ <sect2>
+ <heading>Motifを必要とするport</heading>
+
+ <p>最近はコンパイルにMotifを必要とするアプリケーションが増えて
+ きました. (Motif自体は有料のものがいくつかの会社から手に入りま
+ すし, 無料の互換ライブラリを作ろうとしているグループが少なくと
+ も一つあります.) Motifはかなり広く使われていますし, 製品のライ
+ センスではライブラリを静的にリンクした実行形式は再配布が認めら
+ れている場合が多いので, Motifを必要とするソフトウェアを簡単に
+ 動的/静的にリンクできるようなしくみが用意されています.
+
+ <sect3>
+ <heading>REQUIRES_MOTIF</heading>
+
+ <p>MotifがないとコンパイルできないportのMakefileではこの変
+ 数を指定してください. これによって, Motifを持っていない人が
+ このportをコンパイルしようとするのを未然に防ぎます.
+
+ <sect3>
+ <heading>&dollar;{MOTIFLIB}</heading>
+
+ <p>この変数は<tt>bsd.port.mk</tt>によってMotifライブラリの指
+ 定に置き換えられます. ソース内のMakefileやImakefileで
+ Motifライブラリを指定しているところをこの変数に置き換えるよ
+ うにパッチをあててください.
+
+ <p>代表的な例としては以下の二つがあげられます:
+ <enum>
+ <item>MakefileかImakefileの中でMotifライブラリが
+ `<tt>-lXm</tt>' として使われている場合には, かわりに
+ `<tt>&dollar;{MOTIFLIB}</tt>' と書いてください.
+
+ <item>Imakefileの中で `<tt>XmClientLibs</tt>' が使われている
+ 場合には, それを `<tt>&dollar;{MOTIFLIB}
+ &dollar;{XTOOLLIB} &dollar;{XLIB}</tt>' と書きかえてください.
+ </enum>
+
+ <p><tt>&dollar;{MOTIFLIB}</tt> は通常 `<tt>-L/usr/X11R6/lib
+ -lXm</tt>' か `<tt>/usr/X11R6/lib/libXm.a</tt>' に置き換えら
+ れます. したがって前に `<tt>-L</tt>' や `<tt>-l</tt>' をつけ
+ る必要はありません.
+
<sect2>
<heading>Info ファイル</heading>
<p>新しい版の texinfo(2.2.2-RELEASE およびそれ以降に入っています)
@@ -1311,6 +1223,34 @@ diff -u -r1.15 PLIST
</enum>
+ <sect3>
+ <heading>INSTALL package スクリプト</heading>
+ <p>バイナリパッケージが pkg_add でインストールされるときに, 実行
+ される必要があるコマンドがあれば, pkg/INSTALL スクリプトを使っ
+ て実行することができます. このスクリプトは自動的に package
+ に加えられ, pkg_add によって2度実行されます. はじめは
+ `<tt>INSTALL ${PKGNAME} PRE-INSTALL</tt>' と実行され, 2度目
+ には, '`<tt>INSTALL ${PKGNAME} POST-INSTALL</tt>' と実行され
+ ます. どちらのモードで実行されているかは, `<tt>&dollar;2</tt>'
+ を調べることによってわかります.
+ 環境変数 `<tt>PKG_PREFIX</tt>' には package がインストールさ
+ れるディレクトリが設定されます. 詳細は man
+ <tt>pkg_add(1)</tt> を見てください.
+ 注意すべきことは, port を `<tt>make install</tt>' で
+ インストールするときには, このスクリプトは自動的に実行されな
+ いということです. もし, 実行される必要があるならば, port の
+ Makefile で明示的に呼ぶ必要があります.
+
+ <sect3>
+ <heading>REQ package スクリプト</heading>
+ <p>port が(インストールされるシステムの状態によって)
+ インストールされるべきか, されないべきか区別する必要があると
+ きには, 「要件(requirements)」スクリプト pkg/REQ を作ること
+ ができます. これは, インストール及びデインストール
+ (package の削除)の時に自動的に実行され, それらが処理されるべ
+ きかを決定します. 詳細は, man <tt>pkg_create(1)</tt> と man
+ <tt>pkg_add(1)</tt> を見てください.
+
<sect2>
<heading>makeの変数にあわせた PLIST の変更</heading>
@@ -1429,14 +1369,6 @@ diff -u -r1.15 PLIST
リにコピーするようにしてください.
<sect3>
- <heading>Portlint でチェック</heading>
-
- <p>必ず<tt>portlint</tt>を使いましょう!
- <tt><htmlurl url="http://www.freebsd.org/cgi/ports.cgi?portlint"
- name="portlint"></tt> プログラムは ports コレクション
- に含まれています.
-
- <sect3>
<heading>バイナリのstrip</heading>
<p>バイナリはstripしてください. オリジナルのソースがバイナリを
@@ -1454,35 +1386,6 @@ diff -u -r1.15 PLIST
と言わなければ, stripされているということです.
<sect3>
- <heading>マニュアルの正しいインストール</heading>
-
- <p>MAN[1-9LN] 変数を使用してください. この変数を使用すると,
- 自動的にすべてのマニュアルを <tt>pkg/PLIST</tt> に加え,
- (つまり, マニュアルを <tt/PLIST/ に加えては<em/いけません/)
- またマニュアルの圧縮を自動的に(<tt>/etc/make.conf</tt> 中で
- <tt>NOMANCOMPRESS</tt>が設定されていなければ)行うこと
- ができます. あなたの port が既に圧縮されたマニュアルを
- インストールするのであれば, <tt/MANCOMPRESSED/ 変数を
- 設定してください.
-
-<tscreen><verb>
-MAN1= foo.1 bar.1
-MAN5= foo.conf.5
-MAN8= baz.8
-</verb></tscreen>
-
- <p>なお, 普通 Imake を使ってコンパイルされる X アプリケーショ
- ンの場合はこの指定は必要ありません.
-
- <p><tt>PREFIX</tt>以外のディレクトリの下にマニュアルを置く
- ようなportでは<tt>MANPREFIX</tt>を指定することが
- できます. さらに, 特定のセクションのマニュアルだけ, 標準では
- ない場所にインストールする場合(例えば多くの Perl のモ
- ジュールの ports の場合)には, 個々のマニュアルのパスを
- <tt>MAN<em>sect</em>PREFIX</tt> (<em>sect</em>は, 1 から 9
- または, L か N を表わします) によって指定できます.
-
- <sect3>
<heading>INSTALL_* マクロ</heading>
<p> あなた自身の *-install ターゲットでファイルの正しいモードと
オーナを保証するために, 必ず<tt>bsd.port.mk</tt>で提供されて
@@ -1502,34 +1405,149 @@ MAN8= baz.8
<p>これらは基本的に<tt>install</tt>コマンドに適当なフラグを与え
たものです. どのようにこれらを使用するかは以下の例を見てください.
- <sect3>
- <heading>INSTALL package スクリプト</heading>
- <p>バイナリパッケージが pkg_add でインストールされるときに, 実行
- される必要があるコマンドがあれば, pkg/INSTALL スクリプトを使っ
- て実行することができます. このスクリプトは自動的に package
- に加えられ, pkg_add によって2度実行されます. はじめは
- `<tt>INSTALL ${PKGNAME} PRE-INSTALL</tt>' と実行され, 2度目
- には, '`<tt>INSTALL ${PKGNAME} POST-INSTALL</tt>' と実行され
- ます. どちらのモードで実行されているかは, `<tt>&dollar;2</tt>'
- を調べることによってわかります.
- 環境変数 `<tt>PKG_PREFIX</tt>' には package がインストールさ
- れるディレクトリが設定されます. 詳細は man
- <tt>pkg_add(1)</tt> を見てください.
- 注意すべきことは, port を `<tt>make install</tt>' で
- インストールするときには, このスクリプトは自動的に実行されな
- いということです. もし, 実行される必要があるならば, port の
- Makefile で明示的に呼ぶ必要があります.
+ <sect2>
+ <heading>移植を始める前に<label id="porting:starting"></heading>
- <sect3>
- <heading>REQ package スクリプト</heading>
- <p>port が(インストールされるシステムの状態によって)
- インストールされるべきか, されないべきか区別する必要があると
- きには, 「要件(requirements)」スクリプト pkg/REQ を作ること
- ができます. これは, インストール及びデインストール
- (package の削除)の時に自動的に実行され, それらが処理されるべ
- きかを決定します. 詳細は, man <tt>pkg_create(1)</tt> と man
- <tt>pkg_add(1)</tt> を見てください.
+ <p>Portの過程で, 修正や, どのバージョンのUNIXで動くかによる条件
+ つきコンパイルなどが必要なコードに出会うかもしれません. その
+ ような条件つきコンパイルなどのための変更をおこなうときには,
+ FreeBSD 1.x システムへの移植や, CSRGの4.4BSD, BSD/386,
+ 386BSD, NetBSD, OpenBSD などの他のBSDシステムへの移植が可能な
+ ように, できるだけ普遍的な変更をおこなうことを心がけてください.
+
+ <p>4.3BSD/Reno (1990) およびそれより新しいBSD版を古いバージョン
+ と区別するには `<tt>BSD</tt>' マクロを利用するのがよいでしょう.
+ これは <tt>&lt;sys/param.h&gt;</tt> で定義されています. このファ
+ イルがすでにインクルードされていればよいのですが, もしそうでな
+ い場合には以下のコードを, その<tt>.c</tt> ファイルの適当な場所
+ に加えてください.
+
+<tscreen><verb>
+#if (defined(__unix__) || defined(unix)) && !defined(USG)
+#include <sys/param.h>
+#endif
+</verb></tscreen>
+
+ <p>これらのシンボルが定義されているすべてのシステムには
+ sys/param.h があるはずです. もし, そうでないシステムを発見した
+ ら我々にも教えてください. &a.ports; までメールを送ってください.
+
+ <p>あるいは, GNU の Autoconf のスタイルを使用することもできます,
+
+<tscreen><verb>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+</verb></tscreen>
+
+ この方法を使用するときには, Makefile 中の<tt>CFLAGS</tt>に
+ <tt>-DHAVE_SYS_PARAM_H</tt> を加えることを忘れないようにしてく
+ ださい.
+
+ いったん<tt>&lt;sys/param.h&gt;</tt>がインクルードされると,
+
+<tscreen><verb>
+#if (defined(BSD) && (BSD >= 199103))
+</verb></tscreen>
+
+ このようにしてそのコードが4.3 Net2コードベース, または
+ それより新しいもの (例: FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD,
+ BSD/386 1.1とそれ以前) の上でコンパイルされているかを検出できます.
+
+<tscreen><verb>
+#if (defined(BSD) && (BSD >= 199306))
+</verb></tscreen>
+
+ これは, 4.4コードベース, またはそれより新しいもの (例: FreeBSD
+ 2.x, 4.4, NetBSD 1.0, BSD/386 2.0とそれ以後) の上でコンパイルさ
+ れているかどうかを検出するために使用します.
+
+ 4.4BSD-Lite2 コードベースでは, BSD マクロの値は 199506 になっ
+ ています. これは参考程度の意味合いしかありません.
+ 4.4-Lite ベースの FreeBSD と 4.4-Lite2 での変更がマージされた
+ バージョンとを区別するのに使用するべきものではありません.
+ この目的のためには, __FreeBSD__ マクロをかわりに使用してくださ
+ い.
+
+ <p>以下は控え目に使ってください.
+
+ <itemize>
+ <item><tt>__FreeBSD__</tt> はFreeBSDのすべての版で定義されてい
+ ます. 変更がFreeBSDだけに適用されるとき以外は使用しないでく
+ ださい. Portでよくある, <tt>strerror()</tt> ではなく
+ <tt>sys_errlist[]</tt> を使うなどは, FreeBSDでの変更ではなく,
+ BSDの流儀です.
+
+ <item>FreeBSD 2.xでは<tt>__FreeBSD__</tt>が2と定義されていま
+ す. それ以前の版では1になっています. その後の版では,
+ そのメジャー番号に合うように上がっていきます.
+
+ <item>もし, FreeBSD 1.x システムと FreeBSD 2.x あるいは
+ FreeBSD 3.x システムを区別する必要があれば, 上で述べた
+ <tt>BSD</tt>マクロを使用するのが,
+ 大抵の場合において正しい答です. もし, FreeBSD特有の変更であ
+ れば (`<tt>ld</tt>' を使うときのシェアードライブラリ用のな
+ オプションなど), <tt>__FreeBSD__</tt>を使い
+ `<tt>#if __FreeBSD__ &gt; 1</tt>' のようにFreeBSD 2.x
+ および, それ以降のシステムを検出するのはかまいません.
+
+ もし, 2.0-RELEASE以降のFreeBSDシステムを細かく検出したけれ
+ ば, 以下を使用することができます.
+
+<tscreen><verb>
+#if __FreeBSD__ >= 2
+#include <osreldate.h>
+# if __FreeBSD_version >= 199504
+ /* 2.0.5+ release specific code here */
+# endif
+#endif
+</verb></tscreen>
+<tt>__FreeBSD_version</tt> の値は以下の通りです:
+<tscreen><verb>
+2.0-RELEASE: 199411
+2.1-current's: 199501, 199503
+2.0.5-RELEASE: 199504
+2.2-current (2.1以前): 199508
+2.1.0-RELEASE: 199511
+2.2-current (2.1.5以前): 199512
+2.1.5-RELEASE: 199607
+2.2-current (2.1.6以前): 199608
+2.1.6-RELEASE: 199612
+2.1.7-RELEASE: 199612
+2.2-RELEASE: 220000
+2.2.1-RELEASE: 220000 (2.2-RELEASE と同じです)
+2.2-STABLE (2.2.1-RELEASE 以後): 220000 (これも同じです)
+2.2-STABLE (texinfo-3.9 以後): 221001
+2.2-STABLE (top 導入以後): 221002
+2.2.2-RELEASE: 222000
+2.2-STABLE (2.2.2-RELEASE 以後): 222001
+2.2.5-RELEASE: 225000
+2.2-STABLE (2.2.5-RELEASE 以後): 225001
+2.2-STABLE (ldconfig -R 以後): 225002
+2.2.6-RELEASE: 226000
+2.2.7-RELEASE: 227000
+2.2-STABLE (2.2.7-RELEASE 以降): 227001
+3.0-current (mount(2) 変更以前): 300000
+3.0-current (1997年11月現在): 300001
+</verb></tscreen>
+ (2.2-STABLEは, 2.2.5-RELESE 以後, "2.2.5-STABLE" と呼ばれ
+ ることがあります.)
+ 見ての通り, これは年・月というフォーマットになっていましたが,
+ バージョン 2.2 から, より直接的にメジャー/マイナー番号を使う
+ ように変更になりました. 並行していくつかのブランチ(枝分かれし
+ たバージョン)を開発する場合には, リリースされた日付でそれらの
+ リリースを分類することが不可能だからです.
+ (あなたが今 port を作成するときに, 古い -current 達について心配
+ する必要はありません. これは参考のために挙げられているにすぎま
+ せん.)
+ </itemize>
+
+ <p>これまで, 何百ものportが作られてきましたが,
+ <tt>__FreeBSD__</tt>が正しく使われたのは, 1つか2つの場合だけで
+ しょう. 以前のportが誤った場所でそのマクロを使っているからと
+ いって, それをまねする理由はありません.
+
<sect3>
<heading>付加的ドキュメント</heading>
@@ -1598,13 +1616,6 @@ MAN8= baz.8
ください.
<sect3>
- <heading>フィードバック</heading>
-
- <p>Portを作るためにソフトウェアに変更を加えたら, なるべく原
- 作者にその旨を伝えてパッチ等を送ってください. これらが次のリ
- リースに取り入れられれば, アップグレードが楽になります.
-
- <sect3>
<heading>RCS文字列</heading>
<p>RCSが特別な意味を与えている文字列をパッチ内に入れないように
@@ -1695,32 +1706,6 @@ MAN8= baz.8
<tt>&dollar;{PREFIX}/news</tt> を使用します.
<sect3>
- <heading>ldconfig</heading>
-
- <p>共有ライブラリをインストールするときには, 共有ライブラリのキャッ
- シュを更新するためにportのMakefileの<tt>post-install</tt>
- target から`<tt>/sbin/ldconfig -m</tt>' を走らせてください.
- このコマンドの引数は共有ライブラリのインストールしてあるディ
- レクトリ (通常 <tt>&dollar;{PREFIX}/lib</tt>) です.
-
- <p>また, <tt>pkg/PLIST</tt>に<tt>@exec</tt>行を入れ, package
- をインストールした場合にも共有ライブラリがすぐ使えるように
- してください. この行は共有ライブラリを指定する行のすぐ後に書
- くのがいいでしょう:
-<tscreen><verb>
-lib/libtcl80.so.1.0
-@exec /sbin/ldconfig -m %D/lib
-</verb></tscreen>
-
- <p><em>絶対に</em>引数なしでただ `<tt>ldconfig</tt>'とだけ書い
- てある行をMakefileやpkg/PLISTファイルに入れないでください.
- このコマンドを実行すると, 共有ライブラリのキャッシュが
- <tt>/usr/lib</tt>の内容のみとなり, ユーザのマシンにさまざま
- な問題をもたらします (「ぎゃぁ! このportをインストールした
- らxinitが使えなくなっちゃった!」). この掟を破った者は, 永久
- に地獄の底で苦しみ続けるように, 閻魔様に頼んでおきます.
-
- <sect3>
<heading>UID</heading>
<p>もしあなたの portがインストールされるシステム上に特定のユー
@@ -1784,6 +1769,21 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
cflags</tt>' を Makefile に加えてください.
<sect3>
+ <heading>Portlint でチェック</heading>
+
+ <p>必ず<tt>portlint</tt>を使いましょう!
+ <tt><htmlurl url="http://www.freebsd.org/cgi/ports.cgi?portlint"
+ name="portlint"></tt> プログラムは ports コレクション
+ に含まれています.
+
+ <sect3>
+ <heading>フィードバック</heading>
+
+ <p>Portを作るためにソフトウェアに変更を加えたら, なるべく原
+ 作者にその旨を伝えてパッチ等を送ってください. これらが次のリ
+ リースに取り入れられれば, アップグレードが楽になります.
+
+ <sect3>
<heading>その他諸々</heading>
<p><tt>pkg/DESCR</tt>, <tt>pkg/COMMENT</tt>,