diff options
| author | Motoyuki Konno <motoyuki@FreeBSD.org> | 1998-10-05 15:33:28 +0000 |
|---|---|---|
| committer | Motoyuki Konno <motoyuki@FreeBSD.org> | 1998-10-05 15:33:28 +0000 |
| commit | add582d2955e8e8d725a9fb0a143ca4bc2e0868e (patch) | |
| tree | ae881199aef06654b4f33bae06cfafc5c48bda92 | |
| parent | a65ddc1a9c23adb8f9f85dde7f28a9ea13baac14 (diff) | |
Notes
| -rw-r--r-- | ja/handbook/porting.sgml | 132 |
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> -> + <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>' -> `<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/' というコマンドが含まれており, |
