Sync with original rev. 1.113.

This commit is contained in:
Satoshi Asami 1998-11-24 02:47:06 +00:00
parent 079e716526
commit 8792629acc
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=3829

View file

@ -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>
<heading>ldconfig</heading>
<p>MotifがないとコンパイルできないportのMakefileではこの変
数を指定してください. これによって, Motifを持っていない人が
このportをコンパイルしようとするのを未然に防ぎます.
<p>共有ライブラリをインストールするときには, 共有ライブラリのキャッ
シュを更新するためにportのMakefileの<tt>post-install</tt>
target から`<tt>/sbin/ldconfig -m</tt>' を走らせてください.
このコマンドの引数は共有ライブラリのインストールしてあるディ
レクトリ (通常 <tt>&dollar;{PREFIX}/lib</tt>) です.
<sect3>
<heading>&dollar;{MOTIFLIB}</heading>
<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>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>' をつけ
る必要はありません.
<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>
@ -1428,14 +1368,6 @@ diff -u -r1.15 PLIST
<tt>post-extract</tt>ターゲットで<tt>work</tt>サブディレクト
リにコピーするようにしてください.
<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>
@ -1453,35 +1385,6 @@ diff -u -r1.15 PLIST
は<tt>file</tt>コマンドで確認できます. これが`not stripped'
と言わなければ, 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 ターゲットでファイルの正しいモードと
@ -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>
@ -1597,13 +1615,6 @@ MAN8= baz.8
<tt>&dollar;{MASTER_SITES}</tt>には影響しないことに注意して
ください.
<sect3>
<heading>フィードバック</heading>
<p>Portを作るためにソフトウェアに変更を加えたら, なるべく原
作者にその旨を伝えてパッチ等を送ってください. これらが次のリ
リースに取り入れられれば, アップグレードが楽になります.
<sect3>
<heading>RCS文字列</heading>
@ -1694,32 +1705,6 @@ MAN8= baz.8
扱う ports は例外です. これらは, ファイルのインストール先として
<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>
@ -1783,6 +1768,21 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
がこれを無視するのであれば, `<tt>NO_PACKAGE=ignores
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>