summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMotoyuki Konno <motoyuki@FreeBSD.org>1998-10-05 15:33:28 +0000
committerMotoyuki Konno <motoyuki@FreeBSD.org>1998-10-05 15:33:28 +0000
commitadd582d2955e8e8d725a9fb0a143ca4bc2e0868e (patch)
treeae881199aef06654b4f33bae06cfafc5c48bda92
parenta65ddc1a9c23adb8f9f85dde7f28a9ea13baac14 (diff)
Notes
-rw-r--r--ja/handbook/porting.sgml132
1 files changed, 130 insertions, 2 deletions
diff --git a/ja/handbook/porting.sgml b/ja/handbook/porting.sgml
index 144a870a76..6b45e8a1e1 100644
--- a/ja/handbook/porting.sgml
+++ b/ja/handbook/porting.sgml
@@ -1,6 +1,6 @@
-<!-- $Id: porting.sgml,v 1.46 1998-08-24 16:04:34 motoyuki Exp $ -->
+<!-- $Id: porting.sgml,v 1.47 1998-10-05 15:33:28 motoyuki Exp $ -->
<!-- The FreeBSD Japanese Documentation Project -->
-<!-- Original revision: 1.109 -->
+<!-- Original revision: 1.111 -->
<sect1><heading>フリーソフトウェアの移植<label id="porting"></heading>
@@ -908,6 +908,134 @@ FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
る必要はありません.
<sect2>
+ <heading>ELF 対応</heading>
+
+ <p>FreeBSD は 3.0-release 以後, ELF に移行しますので,
+ シェアードライブラリを作成するたくさんの port を ELF 対応
+ にする必要があります. 3.0 システムは ELF も a.out も
+ 実行できますし, 2.2 ブランチからのもう一つのリリース (2.2.8)
+ もあるので, 複雑な状況です. 以下は a.out のみに対応している
+ port をどのように a.out と ELF 両方に対応させるかのガイドライ
+ ンです.
+
+ <p>このリストの一部は, 移行時にしかあてはまらないものもあります
+ が, 古い port をアップグレードしたい場合に参考になるように,
+ しばらくのあいだは残しておきます.
+
+ <sect3>
+ <heading>a.out ライブラリの待避</heading>
+
+ <p>a.out ライブラリは, <tt>/usr/local/lib</tt> から,
+ `<tt/aout/' サブディレクトリ に移動しなくはなりません.
+ (もし移動しないと, ELF ports がそれらをあっさり上書きして
+ しまいます.) current の <tt>src/Makefile</tt> にある
+ `<tt/move-aout-libs/' ターゲット (`<tt/aout-to-elf'/ から呼ば
+ れます) がその移動をしてくれます. a.out ライブラリを
+ 移動するだけなので, ELF と a.out の両方のライブラリが標準的な
+ ディレクトリにあるシステムでは, このターゲットを実行しても安全
+ です.
+
+ <sect3>
+ <heading>フォーマット</heading>
+
+ <p>port ツリーは package をそのマシンのフォーマットで作成しま
+ す. つまり, 2.2 では a.out, また 3.0 では
+ <tt>`objformat`</tt> の結果によって, a.out か ELF になります.
+ また, いったん a.out ライブラリをサブディレクトリに移動すると
+ a.out ライブラリの作成はサポートされません. (つまり, あなたがな
+ にをすれば良いのかを理解しているのならば, うまく作成できるかもし
+ れませんが, 自力でやらなければならないということです)
+
+ <sect3>
+ <heading>PORTOBJFORMAT</heading>
+
+ <p><tt/bsd.port.mk/ において <tt/PORTOBJFORMAT/ は
+ `<tt/aout/' か `<tt/elf/' に設定され, 環境変数
+ <tt/CONFIGURE_ENV/, <tt/SCRIPTS_ENV/, <tt/MAKE_ENV/
+ の中で export されます. (-stableでは常に `<tt/aout/' になり
+ ます). また, `<tt>PORTOBJFORMAT=${PORTOBJFORMAT}</tt>' とし
+ て <tt/PLIST_SUB/ に渡されます. (以下にある <tt/ldconfig/ に
+ 関するコメントを参照して下さい.)
+
+ <p>この変数は, 以下のようにして <tt/bsd.port.mk/ 中で設定され
+ ます.
+<tscreen><verb>
+PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat ||
+echo aout
+</verb></tscreen>
+
+ <p>この変数を使って, port の make の過程で何をすべきかを決定す
+ べきですが, もし port の <tt/configure/ スクリプトが元々, ELF
+ システムを自動的に検出するのであれば, <tt/PORTOBJFORMAT/ を
+ 参照する必要はありません.
+
+ <sect3>
+ <heading>共有ライブラリの作成</heading>
+
+ <p>以下は, a.out と ELF での共有ライブラリの扱いの違いです.
+
+ <descrip>
+ <tag>共有ライブラリのバージョン</tag>ELF の共有ライブラリ
+ は, "<tt/libfoo.so.M/" という名前になっていなければなりませ
+ ん. ここで <tt/M/ は単一のバージョン番号を表します. 一方
+ a.out のライブラリは "<tt/libfoo.so.M.N/" という名前で,
+ <tt/M/ はメジャーバージョン番号, <tt/N/ はマイナーバージョン
+ 番号になっている必要があります. これらを混同しないでください.
+ "<tt/libfoo.so.N.M/" という名のELF 共有ライブラリや
+ "<tt/libfoo.so.N/" という名の a.out 共有ライブラリ(あるいは
+ シンボリックリンク) は <em/絶対にinstallしないでください/.
+
+ <tag>リンカコマンドライン</tag>直接 '<tt/ld/' を使用せずに,
+ '<tt>cc -shared</tt>' を使用してください. たった一つの違いは,
+ ELF には, `<tt>-Wl,-soname,libfoo.so.M</tt>' コマンドライ
+ ンにを加える必要があることです.
+ </descrip>
+
+ <p>ELF のリンカを満足させるためには, <tt>libfoo.so</tt> -&gt;
+ <tt>libfoo.so.N</tt> というシンボリックリンクを作る必要があり
+ ます. これは, <tt/PLIST/ にも加えなくてはいけませんし, a.out
+ の場合でも害にはならないので (一部の port ではダイナミックリ
+ ンクローディングのために必要でもあります),
+ <tt/PORTOBJFORMAT/ の設定を気にせずに, ただ単純にリンクを作
+ 成してください.
+
+ <sect3>
+ <heading><tt/LIB_DEPENDS/</heading>
+
+ <p>すべての port の Makefile を編集して, <tt/LIB_DEPENDS/
+ からマイナー番号を除去する必要があり, 正規表現のサポートも
+ 除去する必要があります. (例えば,
+ `<tt>foo\\.1\\.\\(33|40\\)</tt>' -&gt; `<tt>foo.2</tt>'.)
+ マッチングは `<tt>grep -wF</tt>' 使って行われます.
+
+ <sect3>
+ <heading><tt/PLIST/</heading>
+
+ <p><tt/PLIST/ は, a.out のマイナー番号が0であれば, 短い (ELFの)
+ 共有ライブラリの名前を含み, さもなくば長い (a.outの) 名前を
+ 含んでいる必要があります. <tt/bsd.port.mk/ は 自動的に,
+ <tt/PORTOBJFORMAT/ が <tt/aout/ であれば,
+ `<tt/.0/' を 短い共有ライブラリの名前の行に付け加え,
+ <tt/PORTOBJFORMAT/ が <tt/elf/ であれば, マイナー番号を
+ 長い共有ライブラリの名前から削除します.
+
+ <sect3>
+ <heading><tt/ldconfig/</heading>
+
+ <p>Makefile 中の <tt/ldconfig/ の行は以下のようになります.
+<tscreen><verb>
+${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....
+</verb></tscreen>
+ また <tt/PLIST/ 中では:
+<tscreen><verb>
+@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
+@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -R
+</verb></tscreen>
+ となります. これは, システムのデフォルトフォーマットではなく
+ パッケージのフォーマットに応じて, 正しい
+ <tt/ldconfig/ が呼ばれることを保証するためのものです.
+
+ <sect2>
<heading>Info ファイル</heading>
<p>新しい版の texinfo(2.2.2-RELEASE およびそれ以降に入っています)
には, `<tt/install-info/' というコマンドが含まれており,