Merge the following changes in the English version:
porting.sgml : 1.109 -> 1.111 Submitted by: Hidetoshi Shimokawa <simokawa@sat.t.u-tokyo.ac.jp> Yoshiaki Uchikawa <yoshiaki@kt.rim.or.jp>
This commit is contained in:
parent
a65ddc1a9c
commit
add582d295
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=3573
1 changed files with 130 additions and 2 deletions
|
|
@ -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>
|
||||
|
||||
|
|
@ -907,6 +907,134 @@ FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
|
|||
れます. したがって前に `<tt>-L</tt>' や `<tt>-l</tt>' をつけ
|
||||
る必要はありません.
|
||||
|
||||
<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 およびそれ以降に入っています)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue