どのバージョンの Unix で動かすかによって、 変更や条件つきコンパイルが必要なコードに出くわすこともあるでしょう。 そのような変更を行なう場合には、 古い FreeBSD システムへのバックポートや、 CSRG の 4.4BSD, BSD/386, 386BSD, NetBSD, OpenBSD 等、 他の BSD システムへの移植が可能なように、 できるだけ汎用的な変更を行なうことを心がけてください。
4.3BSD/Reno (1990) と、それより新しいバージョンの
BSD コードを区別するには、
<sys/param.h>
で定義されている
BSD
マクロを利用するのがよいでしょう。
このファイルがすでにインクルードされていれば良いのですが、
そうでない場合には、その .c
ファイルの
適当な場所に以下のコードを追加してください。
#if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif
これらの二つのシンボルが定義されているシステムには必ず
sys/param.h
があるはずです。
もしそうでないシステムを発見したら、
FreeBSD ports メーリングリスト までメールを送ってわたしたちに伝えてください。
あるいは、GNU Autoconf のスタイルを使用することもできます。
#ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif
この方法を使用するときには、
Makefile
中の
CFLAGS
に
-DHAVE_SYS_PARAM_H
を加えることを忘れないようにしてください。
いったん sys/param.h
がインクルードされると、
#if (defined(BSD) && (BSD >= 199103))
このようにしてそのコードが 4.3 Net2 コードベース、 またはそれより新しいもの (例: FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 とそれ以前) の上でコンパイルされているかを検出できます。
#if (defined(BSD) && (BSD >= 199306))
これは、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__
マクロを使用してください。
以下は控え目に使ってください。
__FreeBSD__
はFreeBSDのすべての版で定義されています。
変更が FreeBSD だけに適用されるとき以外は使用しないでください。
port でよくある
strerror()
ではなく
sys_errlist[]
を使うなどは
FreeBSDでの変更ではなく BSD の流儀です。
FreeBSD 2.xでは __FreeBSD__
が
2
と定義されています。
それ以前の版では 1
になっています。
その後の版でもメジャー番号に合うように上げています。
もし FreeBSD 1.x システムと FreeBSD 2.x
以降のシステムを区別する必要があれば、
上で述べた BSD
マクロを使用するのが大抵の場合において正しい答です。
もし FreeBSD 特有の変更であれば
(ld
を使うときの共有ライブラリ用のオプションなど)、
__FreeBSD__
を使い
#if __FreeBSD__ > 1
のようにFreeBSD 2.x および、
それ以降のシステムを検出するのはかまいません。
もし 2.0-RELEASE 以降の FreeBSD システムを細かく検出したければ、
以下を使用することができます。
#if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif
これまで、何百もの port が作られてきましたが、
__FreeBSD__
が正しく使われたのは一つか二つの場合だけでしょう。
以前の port が間違ってふさわしくない場所で
そのマクロを使っているからといって、
それをまねする理由はありません。
本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。