summaryrefslogtreecommitdiff
path: root/ja
diff options
context:
space:
mode:
authorSatoshi Asami <asami@FreeBSD.org>1998-11-26 07:01:53 +0000
committerSatoshi Asami <asami@FreeBSD.org>1998-11-26 07:01:53 +0000
commit92171f520aa7c2c03b2594a53d7fc5c24cb716db (patch)
tree05403f30d8610e5001c7e135047d858419485876 /ja
parenta89b461a502e72b9b75430067684ef40249334b6 (diff)
Notes
Diffstat (limited to 'ja')
-rw-r--r--ja/handbook/porting.sgml1109
1 files changed, 845 insertions, 264 deletions
diff --git a/ja/handbook/porting.sgml b/ja/handbook/porting.sgml
index 19b3a14e51..e198886291 100644
--- a/ja/handbook/porting.sgml
+++ b/ja/handbook/porting.sgml
@@ -1,25 +1,17 @@
-<!-- $Id: porting.sgml,v 1.50 1998-11-24 02:47:06 asami Exp $ -->
+<!-- $Id: porting.sgml,v 1.51 1998-11-26 07:01:53 asami Exp $ -->
<!-- The FreeBSD Japanese Documentation Project -->
-<!-- Original revision: 1.113 -->
+<!-- Original revision: 1.117 -->
-<sect1><heading>フリーソフトウェアの移植<label id="porting"></heading>
+<sect><heading>自分で port を作る<label id="porting"></heading>
-<p><em>原作: &a.jkh;, &a.gpalmer;, &a.asami;, &a.obrien;.
-<newline>28 August 1996.</em>
+<p><em>原作: &a.jkh;, &a.gpalmer;, &a.asami;, &a.obrien; and
+ &a.hoek;.
+<newline>28 August 1996.</em>.
<p><em>訳: &a.simokawa;, &a.asami;.
<newline>10 November 1996.</em>
-<p>フリーで手に入るソフトウェアを移植することは, 何かをゼロから自分で
-作ることほどは人に感謝されないにしても, どこに手を入れれば動くのかわから
-ないような人でも使えるようにするという意味で, FreeBSDの発展のためにとて
-も重要なことです. 移植されたすべてのソフトウェアは「Portsコレク
-ション」(the Ports Collection) と呼ばれ, 階層的に分類されて集められ
-ています. これによって, 新しいユーザでも, 何がすぐに簡単にコンパイルで
-きる状態で手に入るのか, についての概要をつかむことができます. また, 移
-植されるソースコードについては, そのほとんどを実際には含まず, FreeBSD
-で動かすためのほんのちょっとの差分ファイルといくつかの定義ファイルだけ
-をソースツリーに入れることで, かなりのディスクスペースが節約できます.
+<p>自分で port を作ることに興味がありますか, すばらしい! <tt/:)/
<p>これから, FreeBSD用のportを作る際の, いくつかのガイドラインを
説明します. 実際にportをコンパイルするときのほとんどの仕事は
@@ -29,15 +21,16 @@ Portsコレクションについてのさらに細かい内部の働きについては, そちらの
Makefile を読むのにあまり慣れていない人でも, 得るものはとても大きいで
しょう.
- <p>注意: ここでは, 変更可能な変数の一部についてのみ記述してい
- ます. ほとんどの変数は<tt>bsd.port.mk</tt>の始めに記述があり
- ます. また, このファイルは非標準のタブの設定になっていま
- す. <tt>Emacs</tt> や <tt>Vim</tt> はファイルのロード時にこれ
- を認識しますが, <tt>vi</tt>や<tt>ex</tt>では, ファイルをロード
- したら `<tt>:set tabstop=4</tt>'のようにして正しい値を設定する
- ことができます.
+<p>注意: ここでは, 変更可能な変数の一部についてのみ記述してい
+ます. ほとんどの変数は<tt>bsd.port.mk</tt>の始めに記述があり
+ます. また, このファイルは非標準のタブの設定になっていま
+す. <tt>Emacs</tt> や <tt>Vim</tt> はファイルのロード時にこれ
+を認識しますが, <tt>vi</tt>や<tt>ex</tt>では, ファイルをロード
+したら `<tt>:set tabstop=4</tt>'のようにして正しい値を設定する
+ことができます.
- <sect2>
+
+ <sect1>
<heading>3分porting</heading>
<p>この節では, 簡単なportの方法について説明します. 多くの場合これ
@@ -52,7 +45,7 @@ Makefile を読むのにあまり慣れていない人でも, 得るものはとても大きいで
とします. もしなにか変更が必要な場合には次の節も参照する必要
があります.
- <sect3>
+ <sect2>
<heading>Makefileの作成</heading>
<p>最小限の<tt>Makefile</tt>は次のようなものです:
@@ -85,14 +78,14 @@ Makefile を読むのにあまり慣れていない人でも, 得るものはとても大きいで
き込まれます. もっと詳しい例が見たければ, <ref
id="porting:samplem" name="Makefileのお手本">の節をご覧ください.
- <sect3>
+ <sect2>
<heading>Package記述ファイルの作成</heading>
<p>どのようなportでも, packageにするしないに関わらず, 3つ
の記述ファイルが必要です. <tt>pkg</tt>サブディレクトリにある,
<tt>COMMENT</tt>, <tt>DESCR</tt>, それに<tt>PLIST</tt>です.
- <sect4>
+ <sect3>
<heading>COMMENT</heading>
<p>これには, そのportについての説明を1行で書きます. Package
@@ -103,7 +96,7 @@ Makefile を読むのにあまり慣れていない人でも, 得るものはとても大きいで
A cat chasing a mouse all over the screen
</verb></tscreen>
- <sect4>
+ <sect3>
<heading>DESCR</heading>
<p>これは, そのソフトウェアについての, すこし長い説明を記述
@@ -132,7 +125,7 @@ http://www.oneko.org/
asami@cs.berkeley.edu
</verb></tscreen>
- <sect4>
+ <sect3>
<heading>PLIST</heading>
<p>このファイルには, このportによってインストールされるファ
@@ -152,34 +145,71 @@ lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
+@dirrm lib/X11/oneko
</verb></tscreen>
<p> 'Packing list'の詳細については, <tt>pkg_create(1)</tt>の
- マニュアルを参照してください.
+ マニュアルを参照してください. すべてファイルを列挙しなければ
+ なりませんが, ディレクトリ名は必要ありません. また, ports が
+ インストール時にディレクトリを作成する場合には, <tt/@dirrm/
+ の行を加えて, その port が削除されるとき, そのディレクトリ
+ も削除されるようにしてください.
- <sect3>
+ <p>このファイルには, ファイル名をアルファベット順に並べるよう
+ にしてください. port のアップグレートのとき, 楽に確認ができ
+ るようになります.
+
+ <sect2>
<heading>チェックサムファイルの作成</heading>
<p>ただ, `<tt>make makesum</tt>' と入力するだけです.
<tt>bsd.port.mk</tt>にルールがあるので, 自動的に<tt>files/md5</tt>が
生成されます.
- <sect3>
- <heading>Portのテスト</heading>
+ <sect2>
+ <heading>Portのテスト<label id="porting:testing"></heading>
<p>そのportが正しく動くことを, package化を含めて確認してく
- ださい. まず, `<tt>make install</tt>', `<tt>make
- package</tt>' を試してください. また, `<tt>make
- deinstall</tt>' をして,すべてのファイルとディレクトリ
- が正しく消去されているかどうかを確認してください. それから,
- `<tt>pkg_add `make package-name`.tgz</tt>' をおこない, すべての
- ファイルが再び現れ, 正しく動作することを確認してください. そ
- して再度 `<tt>make deinstall</tt>' を実行してか
- ら, `<tt>make reinstall; make package</tt>' を実行して,
- packing list にあなたの作ったportがインストールする以外のファ
- イルが含まれていないことを確認してください.
+ ださい. 以下の重要なポイントを確認してください.
+ <itemize>
+ <item><tt/PLIST/ にその port がインストールしないものが含
+ まれていないこと.
+ <item><tt/PLIST/ にその port がインストールする全てのもの
+ が含まれていること.
+ <item><tt/reinstall/ ターゲットを使うことによって, 何度でも
+ インストールが可能こと.
+ <item>deintall の際に
+ <ref id="porting:cleaning" name="後片付け">をすること.
+ </itemize>
- <sect3>
+ <p>推奨されるテストの手順:
+ <enum>
+ <item><tt>make install</tt>
+ <item><tt>make package</tt>
+ <item><tt>make deinstall</tt>
+ <item><tt>pkg_add `make package-name`</tt>
+ <item><tt>make deinstall</tt>
+ <item><tt>make reinstall</tt>
+ <item><tt>make package</tt>
+ </enum>
+ <tt/package/ および <tt/deinstall/ の段階で, どんな警告
+ (warning)も出力されないことを確認してください. ステップ3の
+ 後, 新しいディレクトリが全て正しく消去されているかを確認し
+ てください. また, ステップ4の後にそのソフトウェアを使用して
+ みて, package からインストールされた場合に正しく動作するかを
+ 確認してください.
+
+ <sect2>
+ <heading>portlint でチェック<label id="porting:portlint"></heading>
+ <p><tt>portlint</tt>を使って, あなたの port が我々のガイドライン
+ そっているかを確認してください.
+ <tt><htmlurl url="http://www.freebsd.org/cgi/ports.cgi?portlint"
+ name="portlint"></tt> プログラムは ports コレクション
+ に含まれています. 特に, <ref id="porting:samplem" name="Makefile">
+ が正しい形式になっているか, <ref id="porting:pkgname" name="package">
+ の名前が正しいか, をチェックするのに良いでしょう.
+
+ <sect2>
<heading>Portの送付<label id="porting:submitting"></heading>
<p>まず, <ref id="porting:dads" name="やってよいことといけないこと">
@@ -191,20 +221,25 @@ lib/X11/oneko/mouse.xpm
パッケージは必要ありませんから, まず消去してください.
あとは, バグレポートの中に `<tt>shar `find port_dir`</tt>'
の出力を, <tt>send-pr(1)</tt> プログラムを使用して送ってくだ
- さい. もし, 圧縮していない状態で, 20KB以上あるようなポートで
+ さい. (<tt>send-pr</tt> についての詳細は, <ref id="contrib:general"
+ name="バグ報告と一般的な論評">を参照してください.)
+ もし, 圧縮していない状態で, 20KB以上あるようなポートで
あれば, 圧縮して tar ファイルにして, バグレポートに入れる前に
<tt>uuencode(1)</tt> を使用してください. (20KB以下のものでも,
tar ファイルにして送ってもよいですが, あまり歓迎されません).
バクレポートの category は `ports', class は `change-request'
- を必ず使用してください.
+ を必ず使用してください. (レポートを `confidential'(内密) に
+ しないようにしてください!)
<p>もう一度, <em>オリジナルのソースファイル, <tt>work/</tt>
ディレクトリ, `<tt>make package</tt>'で作成したパッケージが
含まれていないこと</em>を確認してください.
- <p>バグレポートについての詳しい説明は
- <ref id="contrib:general" name="バグ報告と一般的な論評">
- を見てください.
+ <p>注: 以前, 新しい port をわれわれの ftp サイト
+ (<tt/ftp.freebsd.org/)にアップロードするようにお願いした
+ ことがありますが, 現在このサイトの <tt/incoming/ ディレクトリ
+ は読み出し不可になっており, いまでは推奨されていません.
+ 沢山の海賊版ソフトウェアがそこに置かれたためです. <tt>:&lt;</tt>
<p>私たちは, 何か不明な点があったらあなたに確認したのち,
それをツリーへ置きます. あなたの名前は, FreeBSD
@@ -212,7 +247,7 @@ lib/X11/oneko/mouse.xpm
contributors' のリストにも載るでしょう. う〜ん, 素晴らし
い. <tt>:)</tt>
- <sect2>
+ <sect1>
<heading>本格的なport</heading>
<p>残念ながら, 移植がそう簡単ではなく, 動かすために多少の変更が
@@ -220,7 +255,7 @@ lib/X11/oneko/mouse.xpm
の方法論にのっとって, そのような場合にどのように変更を施し, 動
くようにしたらよいかを順を追って説明します.
- <sect3>
+ <sect2>
<heading>port構築の詳細</heading>
<p>まず, あなたがportのディレクトリで `<tt>make</tt>' とタイ
@@ -322,7 +357,7 @@ lib/X11/oneko/mouse.xpm
るのかが理解できたと思います. では, 完璧なportを手順を追っ
て作ってみましょう.
- <sect3>
+ <sect2>
<heading>オリジナルのソースの入手</heading>
<p>オリジナルのソースを, (普通は) 圧縮されたtarファイルの形
@@ -334,10 +369,13 @@ lib/X11/oneko/mouse.xpm
<p>もし, ネットワークへの接続のよい FTP/HTTP サイトを見つけるこ
とができなかったり, 頭にくるような非標準的な形式しか持ってい
ないサイトしか見つけられないときには, 自分で管理する確実な
- HTTP か FTP サイトに置くことができます.
- あるいは, あなたが FreeBSD の committer であれば,
- 自分の <tt>public_html</tt> ディレクトリ置くのが理想的です.
- もしも, そのような確実な場所が見つけられなけば, 私たちが
+ ftp か http サーバ (たとえば, あなたのホームページ)に置くこと
+ ができます. <tt>MASTER_SITES</tt> に正しく反映されていること
+ を確認してください.
+
+ <p>もしも, そのような都合の良く, 安心な置き場所が見つけられない
+ 場合(あなたが FreeBSD の committer であれば, 自分の
+ <tt>public_html</tt> ディレクトリに置けます), 私たちが,
<tscreen><verb>
ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
</verb></tscreen>
@@ -346,6 +384,15 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
い. これについての問い合わせのメールは &a.ports へお願いしま
す.
+ <p>その port の配布ファイルが特に理由もなく, しょっちゅう
+ 変る場合には, 配布ファイルをあなたのホームページに置いて
+ <tt>MASTER_SITES</tt>の最初に入れてください. こうすること
+ によって, ユーザ利用する場合に `checksum mismatch' エラー
+ が起るのを防ぎ, 我々の ftp サイトの保守の負担を
+ 減らすことができます. もし, master site がたった一つ
+ しかない場合には, あなたのサイトにバックアップを置いて
+ <tt>MASTER_SITES</tt> の2番目に加えてください.
+
<p>もし, あなたのportに必要ないくつかの追加パッチがインター
ネット上で手に入るのならば, それらも取ってきて,
<tt>&dollar;{DISTDIR}</tt> に置きます. もし, それらがメイン
@@ -354,7 +401,7 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
ています. (以下の<ref id="porting:patchfiles"
name="&dollar;{PATCHFILES}の記述">をご覧ください).
- <sect3>
+ <sect2>
<heading>Portの修正</heading>
<p>適当なディレクトリにtarファイルを展開して, FreeBSDの最新の
@@ -377,7 +424,7 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
を除いては, BSDの標準的な著作権条件によりカバーされていると見な
されます.
- <sect3>
+ <sect2>
<heading>パッチをあてる</heading>
<p>portの過程で追加されたり変更されたファイルは再帰的diffで変
@@ -395,7 +442,7 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
patch-aaとpatch-abが共に<tt>&dollar;{WRKSRC}</tt>/foobar.c
を修正する, など.)
- <sect3>
+ <sect2>
<heading>コンフィグレーション</heading>
<p>カスタマイズのために追加したいコマンドがあれば,
@@ -405,7 +452,7 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
というMakefileのターゲットおよび/あるいはスクリプトで処理す
ることもできます.
- <sect3>
+ <sect2>
<heading>ユーザからの入力の扱い</heading>
<p>もし, そのportがビルド, コンフィグレーション, インストー
@@ -418,7 +465,13 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
トすると入力を必要とするport<em>のみ</em>コンパイルされま
す).
- <sect2>
+ <p>もし, 適切なデフォルト設定があるのであれば,
+ <tt/PACKAGE_BUILDING/ 変数をチェックして, それが設定されて
+ いる場合には, ユーザ入力のスクリプトを起動しないように
+ してください. こうすることによって, CD-ROM や ftp に
+ 置く package を我々が作成することができます.
+
+ <sect1>
<heading>Makefileの作成</heading>
<p>Makefileの作成は非常に単純です. 繰り返しになりますが, 始める
@@ -431,7 +484,7 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
<p>では, Makefileをデザインするときに問題となるところを順に追っ
て見てみましょう.
- <sect3>
+ <sect2>
<heading>オリジナルのソース</heading>
<p>ソースは<tt>&dollar;{DISTDIR}</tt>に, 標準的なgzipされた
@@ -452,7 +505,7 @@ ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/LOCAL_PORTS/
成して, デフォルトを上書きすることもできます. しかし, そこま
でする必要があることはめったにないでしょう.
- <sect3>
+ <sect2>
<heading>DISTNAME</heading>
<p><tt>&dollar;{DISTNAME}</tt>にはportの名前の基幹部分を入れ
@@ -485,7 +538,15 @@ work/foozolix-1.0/
イルも<tt>&dollar;{DISTDIR}</tt>に取ってきますが, 展開時に
はなにもせずに後で使うためにそのまま置いておかれます.
- <sect3>
+ <sect2>
+ <heading>PKGNAME</heading>
+
+ <p>もし, <tt>&dollar;{DISTNAME}</tt> が我々の
+ <ref id="porting:pkgname" name="packageの名前についてのガイドライン">
+ に沿ったものでない場合には, <tt>&dollar;{PKGNAME}</tt> にもっと良い
+ 名前を設定してください. 詳細は上記のガイドラインを参照してください.
+
+ <sect2>
<heading>CATEGORIES (分類)</heading>
<p>完成したpackageの実体は<tt>/usr/ports/packages/All</tt>
@@ -494,21 +555,33 @@ work/foozolix-1.0/
クリンクが作られます. それらのサブディレクトリの名前が
<tt>&dollar;{CATEGORIES}</tt>という変数によって指定されます.
これは, ユーザがFTPサイトやCD-ROMのpackageの山を渡り歩
- くことを容易にするためです. 現在存在するカテゴリを見て, そ
- のportに適したもを選んでください. (<htmlurl
- url="../ports/" name="Ports Collection
- のページ">などが参考になるでしょう). もしそのportが本当
- に現在存在するすべてのものとは異なっている場合には, 新しいカテ
- ゴリ名を作ることもできます.
+ くことを容易にするためです. 現在存在する
+ <ref id="porting:categories" name="カテゴリ">を見て, そ
+ のportに適したもを選んでください.
- <sect3>
+ <p>このリストは, この port が port tree のどこに import
+ されるかも決定します. 2つ以上のカテゴリを指定した場合には
+ 最初のカテゴリで指定されるサブディレクトリに置かれること
+ になります. 適切なカテゴリを選ぶ方法については,
+ <ref id="porting:categories" name="カテゴリ">の節を
+ 参照してください.
+
+ <p>もしそのportが本当に現在存在するすべてのものとは異なって
+ いる場合には, 新しいカテゴリ名を作ることもできます.
+ その際には, &a.ports 宛てに新しいカテゴリ名を提案する
+ メールを送ってください.
+
+ <p>カテゴリ名については, なんのエラーチェックも行なわれません.
+ ミスタイプがあっても`<tt>make package</tt>' はなにも考えずに
+ 新しいディレクトリを作ってしまいますので, 注意してください.
+
+ <sect2>
<heading>MASTER_SITES</heading>
<p>オリジナルの配布ファイルを指し示すFTPまたはHTTPのURLのディ
レクトリ部分までを<tt>&dollar;{MASTER_SITES}</tt>に記録しま
す. スラッシュ (<tt>/</tt>) を最後につけることをお忘れなく.
-
- <p>配布ファイルがシステム上に存在しないときに, makeマクロは
+ 配布ファイルがシステム上に存在しないときに, makeマクロは
<tt>&dollar;{FETCH}</tt>でこの変数に指定されたサイトから取っ
てきます.
@@ -534,7 +607,7 @@ MASTER_SITE_SUBDIR= applications
有名なアーカイブのミラーの中で好みのものを使用することが可能
です.
- <sect3>
+ <sect2>
<heading>PATCHFILES<label id="porting:patchfiles"></heading>
<p>もし, オリジナルの配布ファイル以外にもFTPかHTTPで手に入る
@@ -571,7 +644,7 @@ MASTER_SITE_SUBDIR= applications
さらに, <tt>pre-clean</tt> ターゲットにコピーしたパッチファイル
を削除するコマンドを追加するのを忘れないでください.
- <sect3>
+ <sect2>
<heading>MAINTAINER</heading>
<p>あなたのメールアドレスをここに入れてください. お願いします.
@@ -581,79 +654,89 @@ MASTER_SITE_SUBDIR= applications
<ref id="policies:maintainer" name="Makefile 中の MAINTAINER">
の節をご覧ください.
- <sect3>
+ <sect2>
<heading>依存関係</heading>
<p>このプログラムが他のportに依存する場合には, 必要なものが
自動的に作られるようにすることができます. そのために, 以下の
- 5つの変数が用意されています.
+ 5つの変数が用意されています. よくあるケースのために
+ あらかじめ設定された依存変数や, いくつかの依存関係の制御のため
+ の変数があります.
- <sect4>
+ <sect3>
<heading>LIB_DEPENDS</heading>
<p>Portが必要とする非標準の共有ライブラリをこの変数で指定
- します. これは `<tt>lib:dir</tt>' という組のリストで, うち
+ します. これは `<tt>lib:dir[:target]</tt>' という組のリストで,
<tt>lib</tt> が共有ライブラリの名前, そして<tt>dir</tt>
がそのライブラリが見つからない場合にインストールするport
- のあるディレクトリです. 例えば,
+ のあるディレクトリで, <tt/target/ はそのディレクトリで
+ 呼ばれるターゲットです. 例えば,
<tscreen><verb>
-LIB_DEPENDS= jpeg\\.6\\.:${PORTSDIR}/graphics/jpeg
+LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install
</verb></tscreen>
- と指定してあれば, まずメジャーバージョンが6のjpegライブ
+ と指定してあれば, まずメジャーバージョンが9のjpegライブ
ラリがあるかどうか確認し, ない場合にはportsツリーの中の
<tt>graphics/jpeg</tt> というサブディレクトリに移動し, そこ
- からインストールしようとします.
+ で作成と package 作成を行ないます. `<tt/:target/' の
+ 部分は, <tt>&dollar;{DEPENDS_TARGET}</tt> (デフォルトは
+ `<tt/install/') と等しいときには省略できます.
- 前半の<tt>lib</tt> 部分はそのまま `<tt>ldconfig -r |
- grep</tt>' へ引数として渡されることに注意してください. 特
- に, ピリオド (.) の前には上記の例のようにバックスラッシュ
- を連続してつける必要があります.
+ 前半の<tt>lib</tt> 部分は `<tt>ldconfig -r | grep -wF</tt>'
+ への引数になります. この変数には正規表現を入れられません.
- この依存関係は<tt>extract</tt> ステージのはじめでチェック
- されます. また, packageを作るときに必要となるportのpackage名
- が記録され, <tt>pkg_add</tt>を使用すると自動的にそちら
- のpackageもインストールされるようになります.
+ この依存関係は2度チェックされます. まず <tt/extract/
+ ターゲットで, 次に <tt/install/ でチェックされます.
+ (これは, その port を作成するマシンとインストールする
+ マシンが違う場合でも, きちんとそのライブラリが利用できる
+ ことを確認するためです.) また, 依存するもの名前は package
+ の中にも含まれますので, ユーザのシステムに存在しなければ,
+ <tt>pkg_add</tt> が自動的にインストールします.
- <sect4>
+ <sect3>
<heading>RUN_DEPENDS</heading>
<p>Portを使用する際に必要となるファイルまたはプログラムがある
- ときにはこの変数で指定します. これは`<tt>path:dir</tt>' とい
- う組のリストで, <tt>path</tt> がファイルまたはプログラムの
+ ときにはこの変数で指定します. これは`<tt>path:dir[:target]</tt>'
+ という組のリストで, <tt>path</tt> がファイルまたはプログラムの
名前, そして<tt>dir</tt> がそれが見つからない場合に作成する
- ためのディレクトリ名です. <tt>Path</tt> の最初の文字がスラッ
- シュ (<tt>/</tt>) の場合にはファイルとみなし, その存在を
- `<tt>test -e</tt>' でチェックします; そうでない場合にはプ
- ログラムであると仮定し, `<tt>which -s</tt>' を使ってそのプ
- ログラムがユーザのサーチパス上にあるかどうか確認します.
+ ためのディレクトリ名で, '<tt/target/' はそのディレクトリで
+ 呼ばれるターゲットです. <tt>Path</tt> の最初の文字がスラッ
+ シュ (<tt>/</tt>) の場合にはファイルかディレクトリとみなし,
+ その存在を `<tt>test -e</tt>' でチェックします; そうでない
+ 場合には実行可能であると仮定し, `<tt>which -s</tt>' を使って
+ そのプログラムがユーザのサーチパス上にあるかどうか確認します.
<p>例えばMakefileに以下のように書いてあるとします.
<tscreen><verb>
RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
- wish:${PORTSDIR}/x11/tk
+ wish8.0:${PORTSDIR}/x11-toolkits/tk80
</verb></tscreen>
- まず, `<tt>/usr/local/etc/innd</tt>' というファイルが存在
- するか確認し, ない場合にはportsツリーの中の
+ まず, `<tt>/usr/local/etc/innd</tt>' というファイルか
+ ディレクトリが存在するか確認し, ない場合にはportsツリーの中の
<tt>news/inn</tt> というサブディレクトリから作られます. ま
- た, `<tt>wish</tt>' というプログラムがユーザのサーチパス中
+ た, `<tt>wish8.0</tt>' というプログラムがユーザのサーチパス中
にあるかどうか探し, ない場合には同じくportsツリーの
- <tt>x11/tk</tt> というサブディレクトリから作られます.
+ <tt>x11-toolkit/tk80</tt> というサブディレクトリから作られます.
(この例で, `<tt>innd</tt>' は実際にはプログラムです; この
ように, プログラムであっても標準のサーチパス以外のところに
あるようなものの場合には, 絶対パスで指定してください.)
この依存関係は<tt>install</tt> ステージのはじめでチェック
されます. また, packageを作る際に必要となるportのpackage名
- が記録され, <tt>pkg_add</tt>を使用すると自動的にそちら
- のpackageもインストールされるようになります.
+ が記録され, <tt>pkg_add</tt>を使用するとユーザのシステム
+ に存在しない場合には自動的にそちらのpackageもインストール
+ されるようになります. `<tt/:target/' の部分は,
+ <tt>&dollar;{DEPENDS_TARGET}</tt> と同じ場合には省略可能
+ です.
- <sect4>
+ <sect3>
<heading>BUILD_DEPENDS</heading>
<p>Portのコンパイルに必要なファイルまたはプログラムがある
ときは, この変数で指定してください. <tt>RUN_DEPENDS</tt>と同
- 様に, これは `<tt>path:dir</tt>' という組のリストです. 例
- えば,
+ 様に, これは `<tt>path:dir[:target]</tt>' という組のリストです.
+ 例えば,
<tscreen><verb>
BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
</verb></tscreen>
@@ -664,14 +747,15 @@ BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
ここでは「コンパイル」と一口にいいましたが, この変数は実際
にはファイルの展開から実際のコンパイル・リンクまで全部をま
とめて面倒を見てくれます. この依存関係は<tt>extract</tt>
- ステージからチェックされます.
+ ステージからチェックされます. `<tt/:target/' の部分は
+ <tt>&dollar;{DEPENDS_TARGET}</tt> と同じ場合には省略可能です.
- <sect4>
+ <sect3>
<heading>FETCH_DEPENDS</heading>
<p>この変数は, portを取ってくるのに必要なファイルまたはプロ
グラムを指定するのに使います. 上の二つと同様に, これは
- `<tt>path:dir</tt>' という組のリストです. 例えば,
+ `<tt>path:dir[:target]</tt>' という組のリストです. 例えば,
<tscreen><verb>
FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
</verb></tscreen>
@@ -680,26 +764,85 @@ FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
トリにいってインストールします.
この依存関係は<tt>fetch</tt>ステージからチェックされます.
+ `<tt/:target/' の部分は <tt>&dollar;{DEPENDS_TARGET}</tt>
+ と同じ場合には省略可能です.
- <sect4>
+ <sect3>
<heading>DEPENDS</heading>
- <p>上の四つのいずれにもあてはまらないような依存関係がある場
- 合, または他のportのソースが展開されている必要がある場合
- (インストールされているだけでは不十分な場合) にはこの変数
- を使います. これはディレクトリ名のリストです (上の四つと違っ
- て特に「確認」するものがありませんので).
+ <p>上記の四つのいずれにもあてはまらないような依存関係がある場
+ 合, または他の port がインストールされれているだけではなく,
+ ソースが展開されている必要がある場合にはこの変数
+ を使います. これは `<tt>dir[:target]</tt>' という形式のリスト
+ になります. 上記の四つと違って特に「確認」するものがありませ
+ んので.
- <sect3>
+ <sect3>
+ <heading>よくある依存関係を表す変数</heading>
+
+ <p>もし ports が X Window System を必要とするのであれば,
+ `<tt>USE_XLIB=yes</tt>' を定義してください. (これは
+ <tt>USE_IMAKE</tt> も意味します) BSD <tt/make/ の代りに
+ GNU <tt/make/ を必要とする場合には, `<tt>USE_GMAKE=yes</tt>'
+ を定義. 動作するのに GNU autoconf を必要とする場合には,
+ `<tt>USE_AUTOCONF=yes</tt>' を定義. 最新の qt toolkit を使用
+ する場合には `<tt>USE_QT=yes</tt>' を定義. perl 言語の
+ バージョン5 を必要とする場合には, `<tt>USE_PERL5=yes</tt>'
+ を定義してください. (特に最後のは重要で, FreeBSD のいくつかの
+ バージョンでは基本システムに perl5 を含みますが, 他のものは
+ 含んでいません.)
+
+ <sect3>
+ <heading>依存関係に関する注意</heading>
+
+ <p>上で述べたように, 依存する ports が必要になったときに
+ 呼ばれるデフォルトのターゲットは
+ <tt>&dollar;{DEPENDS_TARGET}</tt> で, そのデフォルトは
+ `<tt/install/' です. これは, ユーザの使用する変数で,
+ port の Makefile で定義されるものではありません.
+ もし, あなたのportが特別な方法で, 依存関係を扱う必要が
+ ある場合には, <tt>&dollar;{DEPENDS_TARGET}</tt> を再定義
+ するのではなく, <tt>*_DEPENDS</tt> 変数の `<tt/:target/'
+ の部分を利用してください.
+
+ <p>`<tt>make clean</tt>' とタイプしたときには, 依存する
+ port も自動的に clean されます. もしそうしたくない場合
+ には, <tt/NOCLEANDEPENDS/ を環境変数として設定してください.
+
+ <p>無条件に他の port に依存させるには, 特別に `<tt/nonexistent/'
+ という文字列を <tt/BUILD_DEPENDS/ あるいは <tt/RUN_DEPENDS/
+ の最初のフィールドに使用してください. これは, 他の port の
+ ソースが必要なときのみ使用してください. target も指定すること
+ によって, コンパイルの時間を節約することができます. 例えば,
+<tscreen><verb>
+BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
+</verb></tscreen>
+ これは, 常に JPEG port の directory に行きソースの展開
+ を行ないます.
+
+ <p>あなたがやりたいことが他の方法ではできない場合以外は,
+ `<tt/DEPENDS/' を使わないでください. これは常に
+ 他の port の作成を行い(さらにデフォルトでインストール
+ を行い), package も作成します. もし本当にこれがあなたの
+ やりたいことでしたら, 代りにこれを <tt/BUILD_DEPENDS/ と
+ <tt/RUN_DEPENDS/ で書くことをお勧めします -- 少なくとも
+ 意図が明確になります.
+
+ <sect2>
<heading>コンパイル時の特別な指定</heading>
<p>GNUの<tt>make</tt>を使う場合には, `<tt>USE_GMAKE=yes</tt>'
- と指定してください. PortにGNUの<tt>configure</tt>が含まれ
- ている場合には, `<tt>GNU_CONFIGURE=yes</tt>' を使います. GNU
- <tt>configure</tt>にデフォルトの
- `<tt>--prefix=&dollar;{PREFIX}</tt>' 以外の引数を渡したい場
- 合には追加部分を<tt>&dollar;{CONFIGURE_ARGS}</tt>で指定して
- ください.
+ と指定してください. Portに GNU <tt>configure</tt>が含まれ
+ ている場合には, `<tt>GNU_CONFIGURE=yes</tt>' を使います
+ (これは, <tt/HAS_CONFIGURE/ も意味します).
+ <tt>configure</tt>に追加の引数 (デフォルトでは, GNU の
+ <tt/configure/ では `<tt>--prefix=&dollar;{PREFIX}</tt>',
+ GNUでない<tt/configure/ では空) を渡したい場合には追加部分
+ を<tt>&dollar;{CONFIGURE_ARGS}</tt>で指定してください.
+ そのパッケージが <tt/autoconf/ を使用する場合には,
+ `<tt>USE_AUTOCONF=yes</tt>' を使います. これは,
+ <tt/GNU_CONFIGURE/ も意味し, <tt/configure/ の前に
+ <tt/autoconf/ を実行します.
<p>X Window Systemのアプリケーションなど, <tt>imake</tt>を
使ってImakefileからMakefileを作成するportの場合には
@@ -707,37 +850,47 @@ FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
ションステージで自動的に<tt>xmkmf -a</tt> が実行されます. も
し `<tt>-a</tt>' フラグが問題をもたらすなら, さらに
`<tt>XMKMF=xmkmf</tt>'としてください.
+ もし, port が imake を使用するけれども, `<tt>install.man</tt>'
+ ターゲットがない場合には, `<tt>NO_INSTALL_MANPAGES=yes</tt>'
+ を指定してください. ついでに, その port のオリジナルの
+ 作者を探し出して八つ裂きにするといいでしょう. <tt>:&gt;</tt>
<p>PortのMakefileが `<tt>all</tt>' 以外のものをメインのター
ゲットとしている場合には, <tt>&dollar;{ALL_TARGET}</tt> でそ
れを指定してください. `<tt>install</tt>' と
<tt>&dollar;{INSTALL_TARGET}</tt> も同様です.
- <sect3>
- <heading>NO_INSTALL_MANPAGES</heading>
+ <p>もし, port の元の Makefile が `<tt>all</tt>' 以外のターゲット
+ をメインのターゲットとしている場合には,
+ <tt>&dollar;{ALL_TARGET}</tt> をそれに合わせて設定してください.
+ `<tt>install</tt>' と <tt>&dollar;{INSTALL_TARGET}</tt> に
+ ついても同様です.
+ <sect1>
+ <heading>特別な配慮</heading>
- <p>あなたのportがimakeは使うものの `<tt>install.man</tt>'
- ターゲットを持っていない場合,
- `<tt>NO_INSTALL_MANPAGES=yes</tt>' を指定してください. つい
- でに, 作者を探し出して八つ裂きにするといいでしょ
- う. <tt>(-_-#)</tt>
+ <p>Portを作成する場合, 考慮しなくてはいけないことがさらにいくつか
+ あります. この節では, それらのうちもっともありがちなものに
+ ついて説明します.
- <sect3>
+ <sect2>
<heading>ldconfig</heading>
<p>共有ライブラリをインストールするときには, 共有ライブラリのキャッ
シュを更新するためにportのMakefileの<tt>post-install</tt>
- target から`<tt>/sbin/ldconfig -m</tt>' を走らせてください.
+ target から`<tt>&dollar;{LDCONFIG} -m</tt>' を走らせてください.
このコマンドの引数は共有ライブラリのインストールしてあるディ
レクトリ (通常 <tt>&dollar;{PREFIX}/lib</tt>) です.
- <p>また, <tt>pkg/PLIST</tt>に<tt>@exec</tt>行を入れ, package
- をインストールした場合にも共有ライブラリがすぐ使えるように
- してください. この行は共有ライブラリを指定する行のすぐ後に書
- くのがいいでしょう:
+ <p>また, <tt>pkg/PLIST</tt>に<tt>@exec /sbin/ldconfig -m</tt>
+ '/`<tt>@unexec /sbin/ldconfig -R</tt>' の組を入れて, package
+ をインストールした場合にも共有ライブラリがすぐ使え, 削除の際
+ にも, システムがまだライブラリが存在すると誤認しないようにし
+ てください. この行は共有ライブラリを指定する行のすぐ後に書く
+ のがよいでしょう:
<tscreen><verb>
-lib/libtcl80.so.1.0
+lib/libtcl80.so.1
@exec /sbin/ldconfig -m %D/lib
+@unexec /sbin/ldconfig -R
</verb></tscreen>
<p><em>絶対に</em>引数なしでただ `<tt>ldconfig</tt>'とだけ書い
@@ -888,45 +1041,159 @@ ${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/ 変数を
- 設定してください.
+ <sect2>
+ <heading><tt/MASTERDIR/<label id="porting:masterdir"></heading>
+
+ <p>もし, あなたの port が 変数(例えば 解像度とか紙のサイズなど)
+ を変えたりした, ちょっと違うバージョンを作成する必要があるとき
+ には, ユーザが分りやすいように, package ごとに別々のサブ
+ ディレクトリを作成し, ただし, できるだけ port 間でファイル
+ を共有するようにしてください. 典型的な例では, うまく変数を
+ 使えば, とても短いMakefileだけ, 1つ以外のすべてのディレクトリ
+ に置くだけで済みます. その短い Makefile には
+ <tt>&dollar;{MASTERDIR}</tt> を使って, 残りのファイルがある
+ ディレクトリを指定できます. また<tt><ref id="porting:pkgname"
+ name="PKGNAME"></tt> の一部に変数に使って, package が別々の
+ 名前を持つようにしてください.
+
+ <p>以下が, とても良い例になるでしょう. これは
+ <tt>japanese/xdvi300/Makefile</tt>の一部です:
+<tscreen><verb>
+ :
+PKGNAME= ja-xdvi${RESOLUTION}-17
+ :
+# default
+RESOLUTION?= 300
+.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
+ ${RESOLUTION} != 300 && ${RESOLUTION} != 400
+ @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
+ @${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
+ @${FALSE}
+.endif
+</verb></tscreen>
+ <tt>japanese/xdvi300</tt> は通常のパッチ, package ファイルも
+ もっています. そこで, `<tt/make/' と入力すると, デフォルトの
+ 解像度(300)を使って, 普通に port の作成を行います.
+ <p>他の解像度に関してですが, これが, <tt>xdvi118/Makefile</tt>
+ の(コメントを除いた)<em/すべて/です.
<tscreen><verb>
-MAN1= foo.1 bar.1
-MAN5= foo.conf.5
-MAN8= baz.8
+RESOLUTION= 118
+MASTERDIR= ${.CURDIR}/../xdvi300
+
+.include "${MASTERDIR}/Makefile"
</verb></tscreen>
+ (<tt>xdvi240/Makefile</tt> と <tt>xdvi400/Makefile</tt> も
+ 同様です). <tt>&dollar;{MASTERDIR}</tt> が <tt/bsd.port.mk/
+ に <tt>&dollar;{PATCHDIR}</tt> や <tt>&dollar;{PKGDIR}</tt>
+ などの通常のサブディレクトリが <tt/xdvi300/ にあることを
+ 教えます. <tt/RESOLUTION=118/ の行が, <tt>xdvi300/Makefile</tt>
+ の <tt/RESOLUTION?=300/ の行を無効にし, port は解像度を
+ 118として作成されます.
+
+ <sect2>
+ <heading>共有ライブラリのバージョン</heading>
- <p>なお, 普通 Imake を使ってコンパイルされる X アプリケーショ
- ンの場合はこの指定は必要ありません.
+ <p>まず, <ref id="policies:shlib"
+ name="共有ライブラリのバージョンについての指針"> を読んで,
+ 共有ライブラリのバージョンを一般的にどうすれば良いかを
+ 理解してください. 盲目的に, ソフトウエアの作者がちゃんと理解
+ していると信じててはいけません, 多くの場合違います.
+ 細い点まで考慮することは大変重要なことです, なぜなら我々は
+ 互換性がないかもしれない大量のソフトウェアを共存させようと
+ する, 特殊な状況にあるからです. 不注意な port の導入が
+ 共有ライブラリに関して, 多大な問題を引き起したことが過去にあ
+ ります (今まで, <tt/jpeg-6b/ がなぜ `9.0' といバージョン番号
+ を持っているか不思議に思ったことはありませんか?).
+ もし, 疑問があれば, &a.ports; にメールを送ってください.
+ ほとんどの時間は, 正しいシェアードライブラリのバージョンを
+ 決めることと, それを実現するためのパッチを作成することに
+ 終始します.
- <p><tt>PREFIX</tt>以外のディレクトリの下にマニュアルを置く
- ようなportでは<tt>MANPREFIX</tt>を指定することが
- できます. さらに, 特定のセクションのマニュアルだけ, 標準では
- ない場所にインストールする場合(例えば多くの Perl のモ
- ジュールの ports の場合)には, 個々のマニュアルのパスを
- <tt>MAN<em>sect</em>PREFIX</tt> (<em>sect</em>は, 1 から 9
- または, L か N を表わします) によって指定できます.
+ <p>しかしながら, が同じソフトウェアの違ったバージョンのソフト
+ ウェアが既にツリーにあるばあいには, 状況は非常に複雑です.
+ つまり, FreeBSD では, ユーザがリンカにどのバージョンの
+ 共有ライブラリを使用するかを指定できないからです(リンカは
+ 常にもっとも高いバージョンを選びます). これは, もし,
+ <tt/libfoo.so.3.2/ と <tt/libfoo.so.4.0/ がシステムに存在
+ するときには, リンカに特別なアプリケーションだけ
+ <tt/libfoo.so.3.2/ をリンクするように指示する方法がない
+ ことを意味します. これは, コンパイル時のリンクという意味
+ では完全に見劣りします. この場合の唯一の解決方法は, 共有
+ ファイルの名前の'ベース'部分を変えることです. 例えば,
+ <tt/libfoo.so.4.0/ を <tt/libfoo4.so.1.0/ へ変えることに
+ よって, バージョン 3.2 とバージョン 4.0 共に他の port から
+ リンクされることができるようになります.
<sect2>
+ <heading>マニュアル<label id="porting:manpages"></heading>
+
+ <p>MAN[1-9LN] 変数を使用すると, 自動的にすべてのマニュアルを
+ <tt>pkg/PLIST</tt> に加えます (つまり, マニュアルを <tt/PLIST/
+ に加えては<em/いけません/ -- <ref id="porting:plist"
+ name="PLIST の生成"> を参照してください).
+ またマニュアルを <tt>/etc/make.conf</tt> 中の
+ <tt>NOMANCOMPRESS</tt>の設定に応じて, install時に自動的に
+ 圧縮したり伸長したりします.
+
+ <p>マニュアルをインストール時に圧縮するかどうかを指定するには,
+ <tt/MANCOMPRESSED/ 変数を使用します. この変数は, 3つの値をとる
+ ことができます, `<tt/yes/', `<tt/no/' そして `<tt/maybe/ です.
+ `<tt/yes/' はマニュアルが既に圧縮されてインストールされている,
+ `<tt/no/' はされていない, `<tt/maybe/' はそのソフトウェアが
+ すでに, <tt/NOMANCOMPRESS/ に合わせており <tt/bsd.port.mk/
+ が特別なにもする必要がないことを意味します.
+
+ <p><tt/USE_IMAKE/ がセットされていて, <tt/NO_INSTALL_MANPAGES/
+ がセットされていなければ, <tt/MANCOMPRESSED/ は自動的に
+ `<tt/yes/' に設定され, それ以外の場合には, `<tt/no/' になります.
+ デフォルトがあなたの port に合わない場合以外は明示的に設定
+ する必要がありません.
+
+ <p><tt>PREFIX</tt>以外のディレクトリの下にマニュアルを置く
+ ようなportでは<tt>MANPREFIX</tt>を指定することが
+ できます. さらに, 特定のセクションのマニュアルだけ, 標準では
+ ない場所にインストールする場合, 例えばいくつかの Perl のモ
+ ジュールの ports など, には個々のマニュアルのパスを
+ <tt>MAN<em>sect</em>PREFIX</tt> (<em>sect</em>は, 1 から 9
+ または, L か N を表わします) によって指定できます.
+ ができます.
+
+ <p>マニュアルが, 言語特有のサブディレクトリに置かれる場合には,
+ 言語名を <tt/MANLANG/ に設定してください. この変数のデフォルト
+ 値は, <tt>""</tt> になっています (つまり, 英語のみ).
+
+ <p>これは, 全部をまとめた例です.
+<tscreen><verb>
+MAN1= foo.1
+MAN3= bar.3
+MAN4= baz.4
+MANLANG= "" ja
+MAN3PREFIX= ${PREFIX}/share/foobar
+MAN8COMPRESSED= yes
+</verb></tscreen>
+ 以下の6個のファイルがこの port でインストールされます.
+<tscreen><verb>
+${PREFIX}/man/man1/foo.1.gz
+${PREFIX}/man/ja/man1/foo.1.gz
+${PREFIX}/share/foobar/man/man3/bar.3.gz
+${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
+${PREFIX}/man/man4/baz.4.gz
+${PREFIX}/man/ja/man4/baz.4.gz
+</verb></tscreen>
+
+ <sect2>
<heading>Motifを必要とするport</heading>
<p>最近はコンパイルにMotifを必要とするアプリケーションが増えて
きました. (Motif自体は有料のものがいくつかの会社から手に入りま
- すし, 無料の互換ライブラリを作ろうとしているグループが少なくと
- も一つあります.) Motifはかなり広く使われていますし, 製品のライ
+ すし, 多くのアプリケーションがコンパイル可能な無料の互換ライブラリ
+ が <tt>x11-toolkits/lesstif</tt>にあります)
+ Motifはかなり広く使われていますし, 製品のライ
センスではライブラリを静的にリンクした実行形式は再配布が認めら
れている場合が多いので, Motifを必要とするソフトウェアを簡単に
- 動的/静的にリンクできるようなしくみが用意されています.
+ 動的(port からコンパイルする人々のために)/静的(package を配布
+ する人々のために)にリンクできるようなしくみが用意されています.
<sect3>
<heading>REQUIRES_MOTIF</heading>
@@ -959,6 +1226,18 @@ MAN8= baz.8
れます. したがって前に `<tt>-L</tt>' や `<tt>-l</tt>' をつけ
る必要はありません.
+ <sect2>
+ <heading>X11 のフォント</heading>
+
+ <p>もし, あなたの port が X window system のフォントをインストール
+ するのであれば, それらを
+ <tt>&dollar;{X11BASE}/lib/X11/fonts/local</tt> に置くようにして
+ ください. このディレクトリは XFree86 release 3.3.3 で新設された
+ ものです. もし, それが存在しなければ作成し, ユーザに
+ XFree86 を 3.3.3 かそれより新しいものに更新か,
+ すくなくとも, このディレクトリを <tt>/etc/XF86Config</tt> の
+ font path に加えるように促すメッセージを出力するようにしてください.
+
<sect2>
<heading>Info ファイル</heading>
<p>新しい版の texinfo(2.2.2-RELEASE およびそれ以降に入っています)
@@ -1216,23 +1495,39 @@ diff -u -r1.15 PLIST
info ファイルおよび <tt/dir/ ファイルを作るコマンドより後に
おかなければなりません.
- <item>テストをして, 出来栄えに感服しましょう <tt/:)/
- 推奨される手順は, `<tt/make package/', `<tt/pkg_delete/'
- それから, `<tt/pkg_add/'. 各段階の前後に, <tt/dir/ ファイル
- をチェックしましょう.
-
+ <item><ref id="porting:testing" name="テスト"> をして
+ 出来栄えに感服しましょう <tt/:)/
+ 各段階の前後に, <tt/dir/ ファイルをチェックしましょう.
</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>'
- を調べることによってわかります.
+ <sect1>
+ <heading><tt/pkg/ サブディレクトリ</heading>
+
+ <p>まだ触れていない, いくつかのこつが <tt/pkg/ サブディレクトリ
+ にはあり, 時として便利でしょう.
+
+ <sect2>
+ <heading><tt/MESSAGE/</heading>
+
+ <p><label id="porting:message">もし, インストールする人に
+ メッセージを表示する必要がある場合には, そのメッセージを
+ <tt>pkg/MESSAGE</tt> に置けます. この機能は, <tt/pkg_add/
+ の後の追加のインストール手続きを表示するときなどに, 重宝
+ します. MESSAGE ファイルは pkg/PLIST に加える必要はありま
+ せん. また, もしユーザが package ではなく port を使用して
+ いる場合には自動的には表示されませんので, 明示的に
+ <tt/post-install/ で表示するようにするべきでしょう.
+
+ <sect2>
+ <heading><tt/INSTALL/</heading>
+ <p>バイナリパッケージが <tt/pkg_add/ でインストールされるとき
+ に, 実行される必要があるコマンドがあれば, pkg/INSTALL スクリプト
+ を使って実行することができます. このスクリプトは自動的に
+ package に加えられ, pkg_add によって2度実行されます. はじめは
+ `<tt>INSTALL &dollar;{PKGNAME} PRE-INSTALL</tt>' と実行され,
+ 2度目には, '`<tt>INSTALL &dollar;{PKGNAME} POST-INSTALL</tt>'
+ と実行されます. どちらのモードで実行されているかは,
+ `<tt>&dollar;2</tt>' を調べることによってわかります.
環境変数 `<tt>PKG_PREFIX</tt>' には package がインストールさ
れるディレクトリが設定されます. 詳細は man
<tt>pkg_add(1)</tt> を見てください.
@@ -1242,28 +1537,58 @@ diff -u -r1.15 PLIST
Makefile で明示的に呼ぶ必要があります.
<sect3>
- <heading>REQ package スクリプト</heading>
+ <heading><tt/REQ/</heading>
<p>port が(インストールされるシステムの状態によって)
インストールされるべきか, されないべきか区別する必要があると
きには, 「要件(requirements)」スクリプト pkg/REQ を作ること
ができます. これは, インストール及びデインストール
(package の削除)の時に自動的に実行され, それらが処理されるべ
- きかを決定します. 詳細は, man <tt>pkg_create(1)</tt> と man
- <tt>pkg_add(1)</tt> を見てください.
+ きかを決定します.
<sect2>
- <heading>makeの変数にあわせた PLIST の変更</heading>
+ <heading>makeの変数にあわせた <tt/PLIST/ の変更<label
+ id="porting:plist"></heading>
<p>いくつかの port, 特に p5- portsなど, は configure のオプション
- (あるいは, p5- ports の場合は perl のバージョン)によって, PLIST
- を変える必要があります. これを容易に実現するために, PLIST 中の
- <tt>%%OSREL%%</tt>, <tt>%%PERL_VER%%</tt>,
+ (あるいは, p5- ports の場合は perl のバージョン)によって,
+ <tt/PLIST/ を変える必要があります. これを容易に実現するために,
+ <tt/PLIST/ 中の <tt/%%OSREL%%/, <tt/%%PERL_VER%%/,
<tt>%%PERL_VERSION%%</tt> は, 適切に置き換えられるようになって
- います. 他の置き換えが必要であれば, <tt>PLIST_SUB</tt> 変数に
- <tt>VAR=VALUE</tt> のペアのリストを設定することによって,
- PLIST 中の "%%VAR%%" は "VALUE" に置き換えられます.
+ います. <tt/%%OSREL%%/ の値は, オペレーティングシステムの
+ 数字で表されたリビジョンです (例えば, `2.2.7').
+ <tt/%%PERL_VERSION%%/ は perl のバージョン番号全体(例えば,
+ `5.00502')で, <tt/%%PERL_VER%%/ はバージョン番号から,
+ パッチレベルを引いてものです(例えば, `5.005').
- <sect2>
+ <p>他の置き換えが必要であれば, <tt>PLIST_SUB</tt> 変数に
+ <tt>VAR=VALUE</tt> という形式のペアのリストを設定することに
+ よって, <tt/PLIST/ 中の `<tt>%%VAR%%</tt>' は `<tt/VALUE/'
+ に置き換えられます. 例えば, バージョンに固有の沢山のファイル
+ をインストールする場合には, <tt/Makefile/ に
+
+<tscreen><verb>
+OCTAVE_VERSION= 2.0.13
+PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
+</verb></tscreen>
+
+ と書いて, <tt/PLIST/ 中のバージョン番号が表われるすべての
+ ところに, <tt>%%OCTAVE_VERSION%%</tt> と書きます.
+ このようにしておけば, port をアップグレードするときに,
+ 何十行(ときとして, 何百行)も <tt/PLIST/ を書き替えないで
+ すみます.
+
+ <p>この書き換えは (<ref id="porting:manpages" name="マニュアル">
+ の追加も) <tt/do-install/ と <tt/post-install/ ターゲット
+ のあいだに, <tt>&dollar;{PLIST}</tt> を読み
+ <tt>&dollar;{TMPPLIST}</tt> (デフォルトは,
+ <tt>&dollar;{WRKDIR}/.PLIST.mktmp</tt>) に書き込むことによって
+ 行なわれます. もし, あなたの port が <tt>&dollar;{PLIST}</tt>
+ を実行時に生成するのであれば, <tt/do-install/ のあいだか,
+ その前に行うようにしてください. また, 書きかえられたあとの
+ ファイルを編集する必要がある場合には, <tt/post-install/
+ で, <tt/&dollar;{TMPPLIST}/ を書きかえてください.
+
+ <sect1>
<heading>ライセンス上の問題</heading>
<p>ソフトウェアによっては制限の厳しいライセンスがついてきたり,
@@ -1282,17 +1607,18 @@ diff -u -r1.15 PLIST
<enum>
<item>ソフトウェアに「有償再配布を禁ずる」という趣旨のライセン
- スがついてきた場合には<tt>NO_CDROM</tt>という変数をセットして
- ください. 私たちはこれがついているportはCD-ROMリリースに入
- れないようにしますが, オリジナルのソースファイルとpackage
- はFTPでは取れるようにしておきます.
+ スがついてきた場合には<tt>NO_CDROM</tt>という変数にその理由
+ を記述してください. 私たちはこれがついている port は CD-ROM
+ リリースに入れないようにしますが, オリジナルのソースファイル
+ とpackageはFTPでは取れるようにしておきます.
<item>もしも, 生成される package が個々のサイトで独自に構築さ
れる必要があったり, ライセンスによって生成されるバイナリが
- 配布できない場合には, <tt>NO_PACKAGE</tt> 変数を設定してくだ
- さい. そのような package が FTP サイトに置かれたり, リリース
- 時の CD-ROM へ入らないようにします. ただし, いずれの場合も
- distfile は(FTP や CD-ROM に)含まれるようになります.
+ 配布できない場合には, <tt>NO_PACKAGE</tt> 変数にその理由を
+ 記述してください. そのような package が FTP サイトに置かれ
+ たり, リリース時の CD-ROM へ入らないようにします. ただし,
+ いずれの場合も distfile は(FTP や CD-ROM に)含まれるように
+ なります.
<item>Portが, 使用者によっては法律上の問題が生じる時 (暗号化ソフ
トウェアなど), または「商用利用を禁ずる」とライセンスに書い
@@ -1309,7 +1635,7 @@ diff -u -r1.15 PLIST
<tt>ports/LEGAL</tt>ファイルを書き換えるのを忘れないようにし
てください.
- <sect2>
+ <sect1>
<heading>アップグレード</heading>
<p>Portのバージョンが原作者からのものに比べて古いことに気がつ
@@ -1342,7 +1668,7 @@ diff -u -r1.15 PLIST
超えるようであれば, 圧縮したものを uuencode して下さい.
そうでなければそのまま PR に入れるだけでいいです.
- <sect2>
+ <sect1>
<heading>やってよいことといけないこと
<label id="porting:dads"></heading>
@@ -1356,19 +1682,7 @@ diff -u -r1.15 PLIST
チェックすることによって, 私達がそれらを commit するのを早くし,
あなたが何をしているか理解していることも示します.
- <sect3>
- <heading>WRKDIR</heading>
-
- <p>大事なファイルを<tt>work</tt>サブディレクトリに置き忘れな
- いようにしてください. うっかり `<tt>make clean</tt>' とやっ
- たらこのディレクトリはその下のファイルとともに<em>あとかたも
- なく</em>消え去ってしまいます! スクリプトやパッチ以外に必要
- なファイルがある場合には, <tt>&dollar;{FILESDIR}</tt>という
- サブディレクトリ(デフォルトでは, <tt>files</tt>)に入れ,
- <tt>post-extract</tt>ターゲットで<tt>work</tt>サブディレクト
- リにコピーするようにしてください.
-
- <sect3>
+ <sect2>
<heading>バイナリのstrip</heading>
<p>バイナリはstripしてください. オリジナルのソースがバイナリを
@@ -1385,7 +1699,7 @@ diff -u -r1.15 PLIST
は<tt>file</tt>コマンドで確認できます. これが`not stripped'
と言わなければ, stripされているということです.
- <sect3>
+ <sect2>
<heading>INSTALL_* マクロ</heading>
<p> あなた自身の *-install ターゲットでファイルの正しいモードと
オーナを保証するために, 必ず<tt>bsd.port.mk</tt>で提供されて
@@ -1406,7 +1720,8 @@ diff -u -r1.15 PLIST
たものです. どのようにこれらを使用するかは以下の例を見てください.
<sect2>
- <heading>移植を始める前に<label id="porting:starting"></heading>
+ <heading>OS や OS のバージョンの区別
+ <label id="porting:versions"></heading>
<p>Portの過程で, 修正や, どのバージョンのUNIXで動くかによる条件
つきコンパイルなどが必要なコードに出会うかもしれません. その
@@ -1526,11 +1841,19 @@ diff -u -r1.15 PLIST
2.2-STABLE (ldconfig -R 以後): 225002
2.2.6-RELEASE: 226000
2.2.7-RELEASE: 227000
-2.2-STABLE (2.2.7-RELEASE 以降): 227001
+2.2-STABLE (2.2.7-RELEASE 以後): 227001
+2.2-STABLE (semctl(2) 変更後): 227002
+2.2.8-RELEASE: 228000
+2.2-STABLE (2.2.8-RELEASE 以後): 228001
3.0-current (mount(2) 変更以前): 300000
-3.0-current (1997年11月現在): 300001
+3.0-current (mount(2) 変更後): 300001
+3.0-current (semctl(2) 変更後): 300002
+3.0-current (ioctl 引数変更後): 300003
+3.0-current (ELF(2) 移行後): 300004
+3.0-RELEASE: 300005
+3.0-current (3.0-RELEASE 以後): 300005
</verb></tscreen>
- (2.2-STABLEは, 2.2.5-RELESE 以後, "2.2.5-STABLE" と呼ばれ
+ (2.2-STABLEは, 2.2.5-RELESE 以後, "2.2.[5678]-STABLE" と呼ばれ
ることがあります.)
見ての通り, これは年・月というフォーマットになっていましたが,
バージョン 2.2 から, より直接的にメジャー/マイナー番号を使う
@@ -1548,7 +1871,76 @@ diff -u -r1.15 PLIST
しょう. 以前のportが誤った場所でそのマクロを使っているからと
いって, それをまねする理由はありません.
- <sect3>
+ <sect2>
+ <heading><tt/bsd.port.mk/ の後に書くこと</heading>
+
+ <p>`<tt>.include &lt;bsd.port.mk&gt;</tt>' の行の後には
+ なにも書かないようにしてください. 大抵の場合は Makefile の
+ 中程のどこかで, <tt/bsd.port.pre.mk/ を include して,
+ 最後に <tt/bsd.port.post.mk/ を include することによって
+ 避けることができます. (<tt/pre.mk//<tt/post.mk/ のペアか
+ <tt/bsd.port.mk/ だけのどちらかだけを include してください.
+ 2つを混ぜないでください.) 前者は, いくつかの変数の定義だけ
+ をして, Makefile でのテストに使用し, 後者は残りを定義します.
+ 以下は <tt/bsd.port.pre.mk/ で定義される重要な変数です.
+ (これは, すべてではありません. 完全なリストは <tt/bsd.port.mk/
+ を参照してください.)
+
+ <descrip>
+ <tag>&dollar{ARCH}</tag> `<tt>uname -m</tt>' で返される
+ アーキテクチャ. (例, `i386').
+
+ <tag>&dollar{OPSYS}</tag>`<tt>uname -s</tt>' で返される
+ オペレーティングシステム (例, `FreeBSD').
+
+ <tag>&dollar{OSREL}</tag> オペレーティングシステムの
+ リリースバージョン (例., `2.1.5', `2.2.7').
+
+ <tag>&dollar{OSVERSION}</tag> 数字形式のオペレーティングシステム
+ のバージョン, 上記の <ref id="porting:versions"
+ name="__FreeBSD_version"> と同じです.
+
+ <tag>&dollar{PORTOBJFORMAT}</tag> システムのオブジェクト
+ フォーマット (`aout' あるいは `elf').
+
+ <tag>&dollar{LOCALBASE}</tag> 'local' ツリーのベース.
+ (例, `/usr/local/').
+
+ <tag>&dollar{X11BASE}</tag> `X11' ツリーのベース.
+ (例, `/usr/X11R6/').
+
+ <tag>&dollar{PREFIX}</tag> portsのインストール先
+ (<ref id="porting:prefix" name="PREFIX について">を参照).
+
+ </descrip>
+
+ <p><tt/USE_IMAKE/, <tt/USE_X_PREFIX/ あるいは <tt/MASTERDIR/
+ などの変数を定義する必要がある場合には, <tt/bsd.port.pre.mk/
+ を include する前に定義してください. 他のものは,
+ <tt/bsd.port.pre.mk/ の前でも後でもかまいません. 以下は
+ <tt/bsd.port.pre.mk/ の後に書けるものの例です:
+
+<tscreen><verb>
+# no need to compile lang/perl5 if perl5 is already in system
+.if ${OSVERSION} > 300003
+BROKEN= perl is in system
+.endif
+
+# only one shlib version number for ELF
+.if ${PORTOBJFORMAT} == "elf"
+TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}
+.else
+TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
+.endif
+
+# software already makes link for ELF, but not for a.out
+post-install:
+.if ${PORTOBJFORMAT} == "aout"
+ ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
+.endif
+</verb></tscreen>
+
+ <sect2>
<heading>付加的ドキュメント</heading>
<p>普通のマニュアルやinfoファイルのほかにユーザにとって有用だ
@@ -1581,14 +1973,11 @@ diff -u -r1.15 PLIST
変数を読む方法は今のところ存在しませんので,
<tt>NOPORTDOCS</tt>については気にしないでください.)
- <p>(Packageの)インストールを行っているユーザに対してメッセージ
- を表示したい場合には, そのメッセージを <tt>pkg/MESSAGE</tt>
- に置くこともできます. この機能は, pkg_add したあとの
- 追加のインストール手順や, ライセンス情報を表示するのに便利で
- す. (注意: MESSAGE ファイルは pkg/PLIST に加える必要はありま
- せん.
+ <p>インストール時に <tt>pkg/MESSAGE</tt> ファイルを利用して,
+ メッセージを表示することができます. 詳細は <ref id="porting:message"
+ name="pkg/MESSAGE を使う"> の節を参照してください.
- <sect3>
+ <sect2>
<heading>DIST_SUBDIR</heading>
<p><tt>/usr/ports/distfiles</tt>ディレクトリ内をあまり散らかさ
@@ -1615,7 +2004,7 @@ diff -u -r1.15 PLIST
<tt>&dollar;{MASTER_SITES}</tt>には影響しないことに注意して
ください.
- <sect3>
+ <sect2>
<heading>RCS文字列</heading>
<p>RCSが特別な意味を与えている文字列をパッチ内に入れないように
@@ -1626,21 +2015,27 @@ diff -u -r1.15 PLIST
`<tt>&dollar;Id</tt>' や `<tt>&dollar;RCS</tt>' などで始まり
ます.
- <sect3>
+ <sect2>
<heading>パッチ作成上の注意</heading>
<p><tt>diff</tt>の再帰 (`<tt>-r</tt>') フラグを使って再帰的なパッ
チを作るのは大変結構なのですが, でき上がったパッチは必ず目で
チェックして余計なゴミが入っていないことを確認してくださ
い. よくあるのはバックアップファイル同士の変更点, あるいは
- Imake や GNU configure を使うソフトウェアの Makefile の変更点が
- 入っている場合などです. また, ファイルをまるごと消す場合には
- パッチを使わずに<tt>post-extract</tt>ターゲットで消す方が簡
- 単です. できあがった差分に満足したら, それらをソースのファイル
- ごとに別々のパッチファイルに分割してください.
+ Imake や GNU <tt/configure/ を使うソフトウェアの Makefile
+ の変更点が入っている場合などです. また, <tt/configure.in/
+ を編集して, <tt/autoconf/ を使って <tt/configure/ を作り直す
+ ときには, <tt/configure/ の diff は含めずに(
+ それらは, 数千行になることもしばしばです), <tt/USE_AUTOCONF=yes/
+ を定義して, <tt/configure.in/ の diff をとってください.
- <sect3>
- <heading>PREFIX</heading>
+ <p>ファイルをまるごと消す場合にはパッチを使わずに
+ <tt>post-extract</tt>ターゲットで消す方が簡単です. できあがった
+ 差分に満足したら, それらをソースのファイルごとに別々の
+ パッチファイルに分割してください.
+
+ <sect2>
+ <heading>PREFIX<label id="porting:prefix"></heading>
<p>なるべくportは<tt>&dollar;{PREFIX}</tt>に対する相対パス
にインストールすることができるように心がけてください.
@@ -1683,7 +2078,7 @@ diff -u -r1.15 PLIST
の場所に移してあるサイトでも, あなたのportがそのまま使える
可能性が高くなります.
- <sect3>
+ <sect2>
<heading>ディレクトリ構成</heading>
<p>インストール時には<tt>&dollar;{PREFIX}</tt>の正しいサブディ
@@ -1705,7 +2100,40 @@ diff -u -r1.15 PLIST
扱う ports は例外です. これらは, ファイルのインストール先として
<tt>&dollar;{PREFIX}/news</tt> を使用します.
- <sect3>
+ <sect2>
+ <heading>空のディレクトリの除去<label id="porting:cleaning"></heading>
+
+ <p>ports は デインストール(削除) の際には, 自分自身を消去した
+ あとに, (ディレクトリの)除去をするようにしてください.
+ これは, 大抵の場合 <tt/@dirrm/ の行を ports が作成するすべての
+ ディレクトリについて加えることによって実現できます.
+ 親ディレクトリは, 子ディレクトリを先に消さないと消せないことに
+ 気をつけて下さい.
+<tscreen><verb>
+ :
+lib/X11/oneko/pixmaps/cat.xpm
+lib/X11/oneko/sounds/cat.au
+ :
+@dirrm lib/X11/oneko/pixmaps
+@dirrm lib/X11/oneko/sounds
+@dirrm lib/X11/oneko
+</verb></tscreen>
+ といった感じです.
+
+ <p>しかし, ときとして, 他の port をディレクトリを共有している
+ ために <tt/@dirrm/ がエラーを返すことがあります. <tt/rmdir/
+ を <tt/@unexec/ から呼びだすことによって, 警告(warning)なしで
+ 空のディレクトリのみを削除することができます:
+<tscreen><verb>
+ :
+@unexec rmdir %D/share/doc/gimp 2>/dev/null || true
+</verb></tscreen>
+ これを使えば, たとえ, 他の port がファイルをインストールして
+ いて, <tt>${PREFIX}/share/doc/gimp</tt> が空でない場合でも
+ エラーメッセージは表示されませんし, <tt/pkg_delete/ が異常終了
+ することもありません.
+
+ <sect2>
<heading>UID</heading>
<p>もしあなたの portがインストールされるシステム上に特定のユー
@@ -1750,7 +2178,7 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
既存の port にそのような改変を行って我々に送るときには,
UID の予約に関する注意書きをつけてください.
- <sect3>
+ <sect2>
<heading>合理的な port</heading>
<p>Makefile は単純かつ適切であるべきです. もし, Makefile を
@@ -1762,28 +2190,41 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
--prefix=&dollar;{PREFIX}</tt>' とするかわりに,
<tt>&dollar;GNU_CONFIGURE</tt> とする, などです.
- <sect3>
+ <sect2>
<heading>CFLAGS の尊重</heading>
<p><tt>&dollar;{CFLAGS}</tt> 変数は尊重すべきです. その port
がこれを無視するのであれば, `<tt>NO_PACKAGE=ignores
cflags</tt>' を Makefile に加えてください.
- <sect3>
- <heading>Portlint でチェック</heading>
+ <sect2>
+ <heading>コンフィグレーション(設定)ファイル</heading>
+ <p>もしあなたの port が設定ファイルを
+ <tt>&dollar;{PREFIX}/etc</tt> に置く必要がある場合には,
+ それを単純にインストールしたり, <tt>pkg/PLIST</tt> に加え
+ ては<em/いけません/. こうしてしまうと, <tt/pkg_delete/ が
+ ユーザが苦労して作ったファイルを消してしまったり, 新しく
+ インストールすると上書きされてしまったりします.
- <p>必ず<tt>portlint</tt>を使いましょう!
- <tt><htmlurl url="http://www.freebsd.org/cgi/ports.cgi?portlint"
- name="portlint"></tt> プログラムは ports コレクション
- に含まれています.
+ <p>代りに, 見本となるファイルを suffix (
+ `<tt>&lt;filename&gt;.sample</tt>' が良いでしょう) を付けて
+ インストールして, <ref id="porting:message" name="message">
+ を表示して, ソフトウエアを動かす前に, ユーザがそのファイル
+ をコピーして編集をしなければならないことを知らせましょう.
- <sect3>
+ <sect2>
+ <heading>Portlint</heading>
+ <p>送付や commit をする前に
+ <ref id="porting:portlint" name="portlint"> を使ってチェック
+ しましょう.
+
+ <sect2>
<heading>フィードバック</heading>
<p>Portを作るためにソフトウェアに変更を加えたら, なるべく原
作者にその旨を伝えてパッチ等を送ってください. これらが次のリ
リースに取り入れられれば, アップグレードが楽になります.
- <sect3>
+ <sect2>
<heading>その他諸々</heading>
<p><tt>pkg/DESCR</tt>, <tt>pkg/COMMENT</tt>,
@@ -1798,7 +2239,7 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
私達に法律に反するような形でソフトフェアの配布をさせない
でください!
- <sect3>
+ <sect2>
<heading>困ったら....</heading>
<p>私たちに質問を送る前に, 既存のportの例と<tt>bsd.port.mk</tt>を
@@ -1807,17 +2248,17 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
<p>それでもわからないことがあったら, 一人で悩まないでどんどん
質問してください! <tt>:)</tt>
- <sect2>
+ <sect1>
<heading>Makefileのお手本<label id="porting:samplem"></heading>
<p>これはportのMakefileを作る際のお手本です. かぎかっこ
([])内のコメントは忘れずに取ってください.
<p>変数の順番, 段落の間の空行など, Makefileを作るときはなるべくこ
- の形式にしたがってください. 既存のportのMakefileがすべてこの形
- 式にしたがっているわけではありませんが, 今後はなるべく統一していき
- たいと考えています. この形式は重要な情報が簡単に見つけられるよ
- うに設計されています.
+ の形式にしたがってください. この形式は重要な情報が簡単に見つけら
+ れるように設計されています. <ref id="porting:portlint"
+ name="portlint"> を使って Makefile をチェックすることが
+ 推奨されています.
<tscreen><verb>
[ヘッダ -- どのようなportのMakefileかすぐにわかるようになっています]
@@ -1862,7 +2303,7 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
[依存するport -- ない場合もあります]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
- LIB_DEPENDS= Xpm\\.4\\.:${PORTSDIR}/graphics/xpm
+ LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
[ここには標準のbsd.port.mkの変数で, 上のどれにもあてはまらないものを
書きます]
@@ -1899,8 +2340,8 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
.include <bsd.port.mk>
</verb></tscreen>
- <sect2>
- <heading>Packageの名前</heading>
+ <sect1>
+ <heading>Packageの名前<label id="porting:pkgname"></heading>
<p>Packageの名前は以下のルールにしたがってつけてください. こ
れはpackageのディレクトリを見やすくするためで, 無秩序な名前
@@ -1933,16 +2374,17 @@ msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
R とか V)には, あなたの裁量で大文字を使うのも良いでしょう.
Perl 5 のモジュールでは, 頭に `p5-' を付け, 2重コロン(::)
のセパレータをハイフン(-)に置きかえるしきたりになっています.
- 例えば, `<tt>Data::Dumper</tt>' は `p5-Data-Dumper'
+ 例えば, `Data::Dumper' は `p5-Data-Dumper'
になります. また, その
ソフトウェアの名前として通常使われるものに番号, ハイフン, あ
るいは下線が入っている場合には, それらを使うことも構いません
(`kinput2' など).
- <item>コンパイル時に環境変数や<tt>make</tt>の引数などでいくつ
- か別のオプションをつけてコンパイルできる場合,
- `&lt;compiled.specifics&gt;' にそのオプションを入れてくださ
- い (ハイフンはあってもなくてもかまいません). 用紙のサイズ,
+ <item>コンパイル時に環境変数や<tt>make</tt>の引数などで
+ <ref id="porting:masterdir" name="ハードコードされたデフォルト">
+ を変えてコンパイルできる場合, `&lt;compiled.specifics&gt;'
+ にそのコンパイル時のデフォルトを入れてください
+ (ハイフンはあってもなくてもかまいません). 用紙のサイズ,
あるいはフォントの解像度などがこれにあたります.
<item>バージョン番号は数字とアルファベットからなり, ピリオド
@@ -1979,18 +2421,157 @@ pkfonts pkfonts300-1.0 300dpiフォント用のpackage
れにあたります). そうでない場合には, 原作者に聞くか, 日付 (`年.
月.日') を使うなどしてください.
- <sect2>
+ <sect1>
+ <heading>カテゴリ<label id="porting:categories"></heading>
+
+ <p>すでに御存知のように, ports はいくつかのカテゴリに
+ 分類されています. これを有効に利用するためには, port を
+ 行う人々とユーザが, そろぞれのカテゴリーが何であるか,
+ どのようにしてカテゴリに分類するかを理解する必要があります.
+
+ <sect2>
+ <heading>現在のカテゴリのリスト</heading>
+
+ <p>まず, これが現在の port のカテゴリーのリストです.
+ アスタリスク(<tt/*/)が付いているものは, バーチャル(<em/virtual/)
+ カテゴリです -- これらには対応するサブディレクトリが port
+ ツリーにはありません. バーチャルカテゴリでないものは,
+ そのサブディレクトリ内の <tt>pkg/COMMENT</tt> に1行の記述
+ があります(例, <tt>archivers/pkg/COMMENT</tt>).
+
+ <descrip>
+ <tag><tt/archivers/</tag> Archiving tools.
+ <tag><tt/astro/</tag> Astronomical ports.
+ <tag><tt/audio/</tag> Sound support.
+ <tag><tt/benchmarks/</tag> Benchmarking utilities.
+ <tag><tt/biology/</tag> Biology-related software.
+ <tag><tt/cad/</tag> Computer aided design tools.
+ <tag><tt/chinese/</tag> Chinese language support.
+ <tag><tt/comms/</tag> Communication software. Mostly software
+ to talk to your serial port.
+ <tag><tt/converters/</tag> Character code converters.
+ <tag><tt/databases/</tag> Databases.
+ <tag><tt/deskutils/</tag> Things that used to be on the
+ desktop before computers were invented.
+ <tag><tt/devel/</tag> Development utilities. Do not put
+ libraries here just because they are libraries -- unless
+ they truly don't belong to anywhere else, they shouldn't be
+ in this category.
+ <tag><tt/editors/</tag> General editors. Specialized editors
+ go in the section for those tools (e.g., a
+ mathematical-formula editor will go in <tt/math/).
+ <tag><tt/elisp/</tag> Emacs-lisp ports.
+ <tag><tt/emulators/</tag> Emulators for other operating
+ systems. Terminal emulators do <em/not/ belong here --
+ X-based ones should go to <tt/x11/ and text-based ones to
+ either <tt/comms/ or <tt/misc/, depending on the exact
+ functionality.
+ <tag><tt/games/</tag> Games.
+ <tag><tt/german/</tag> German language support.
+ <tag><tt/graphics/</tag> Graphics utilities.
+ <tag><tt/japanese/</tag> Japanese language support.
+ <tag><tt/kde*/</tag> Ports that form the K Desktop Environment
+ (kde).
+ <tag><tt/korean/</tag> Korean language support.
+ <tag><tt/lang/</tag> Programming languages.
+ <tag><tt/mail/</tag> Mail software.
+ <tag><tt/math/</tag> Numerical computation software and other
+ utilities for mathematics.
+ <tag><tt/mbone/</tag> MBone applications.
+ <tag><tt/misc/</tag> Miscellaneous utilities -- basically
+ things that doesn't belong to anywhere else. This is the
+ only category that should not appear with any other
+ non-virtual category. If you have <tt/misc/ with something
+ else in your <tt/CATEGORIES/ line, that means you can safely
+ delete <tt/misc/ and just put the port in that other
+ subdirectory! <tt/:)/
+ <tag><tt/net/</tag> Miscellaneous networking software.
+ <tag><tt/news/</tag> USENET news software.
+ <tag><tt/offix*/</tag> Ports from the OffiX suite.
+ <tag><tt/perl5*/</tag> Ports that require perl version 5 to
+ run.
+ <tag><tt/pilot*/</tag> Software to use with the 3Com PalmPilot.
+ <tag><tt/plan9/</tag> Various programs from Plan9.
+ <tag><tt/print/</tag> Printing software. Desktop publishing
+ tools (previewers, etc.) belong here too.
+ <tag><tt/python*/</tag> Software written in python.
+ <tag><tt/russian/</tag> Russian language support.
+ <tag><tt/security/</tag> Security utilities.
+ <tag><tt/shells/</tag> Command line shells.
+ <tag><tt/sysutils/</tag> System utilities.
+ <tag><tt/tcl75*/</tag> Ports that use tcl version 7.5 to run.
+ <tag><tt/tcl76*/</tag> Ports that use tcl version 7.6 to run.
+ <tag><tt/tcl80*/</tag> Ports that use tcl version 8.0 to run.
+ <tag><tt/tcl81*/</tag> Ports that use tcl version 8.1 to run.
+ <tag><tt/textproc/</tag> Text processing utilities. It does
+ not include desktop publishing tools, which go to
+ <tt/print/.
+ <tag><tt/tk41*/</tag> Ports that use tk version 4.1 to run.
+ <tag><tt/tk42*/</tag> Ports that use tk version 4.2 to run.
+ <tag><tt/tk80*/</tag> Ports that use tk version 8.0 to run.
+ <tag><tt/tk81*/</tag> Ports that use tk version 8.1 to run.
+ <tag><tt/vietnamese/</tag> Vietnamese language support.
+ <tag><tt/www/</tag> Software related to the World Wide Web.
+ HTML language support belong here too.
+ <tag><tt/x11/</tag> The X window system and friends. This
+ category is only for software that directly support the
+ window system. Do not put regular X applications here. If
+ your port is an X application, define <tt/USE_XLIB/ (implied
+ by <tt/USE_IMAKE/) and put it in appropriate categories.
+ Also, many of them go into other <tt/x11-*/ categories (see
+ below).
+ <tag><tt/x11-clocks/</tag> X11 clocks.
+ <tag><tt/x11-fm/</tag> X11 file managers.
+ <tag><tt/x11-fonts/</tag> X11 fonts and font utilities.
+ <tag><tt/x11-toolkits/</tag> X11 toolkits.
+ <tag><tt/x11-wm/</tag> X11 window managers.
+ </descrip>
+
+ <sect2>
+ <heading>適切なカテゴリの選択</heading>
+
+ <p>多くのカテゴリーに重なるので, どれを '第一'カテゴリにするか
+ を決めなければならないことがたびたびあるでしょう. これを
+ うまく決めるルールがいくつかあります. 以下はその優先順の
+ リストで, 優先度の高いものから低いものの順に書いてあります.
+
+ <enum>
+ <item>言語特有のカテゴリがまず最初です. 例えば日本語の X11
+ のフォントをインストールする port の場合, <tt/CATEGORIES/
+ `<tt>japanese x11-fonts</tt>' となるでしょう.
+
+ <item>より特徴的なカテゴリーが, 一般的なカテゴリーより優先さ
+ れます. 例えば, HTML エディタの場合は `<tt>www editors</tt>'
+ となり, 逆順にはしないでください. また, port が
+ <tt/mail/, <tt/mbone/, <tt/news/, <tt/security/, <tt/www/
+ のいづれかに属するとには, <tt/net/ は必要ありません.
+
+ <item><tt/x11/ を第2カテゴリにするのは, 第1カテゴリが自然言語
+ の場合のみにしてください. 特に X のアプリケーションには
+ <tt/x11/ を指定<em/しない/でください.
+
+ <item>もし, あなたの port が他のどのカテゴリにも属しないばあい
+ には, <tt/misc/ にしてください.
+ </enum>
+ <p>もし, あなたがカテゴリについて自信が持てない場合には, そのこと
+ を <tt/send-pr/ するときに書き加えてください. そうすれば,
+ import するまえにそれについて議論できます. (もしあなたが
+ commiter であれば, そのことを &a.ports に送って, 先に議論
+ するようにしてください -- 新しい port が間違ったカテゴリ
+ に import されて, すぐ移動されることが多いので.)
+
+ <sect1>
<heading>このドキュメントと ports システムの変更</heading>
<p>もしあなたが, たくさんの ports の保守をしているのであれば,
- ports@FreeBSD.ORG メーリングリストの内容をフォロウすることを
+ &a.ports メーリングリストの内容をフォロウすることを
考えてください. Ports のしくみについての重要な変更点はここに
アナウンスされます. 最新の変更点については, いつでも, <htmlurl
url="http://www.FreeBSD.ORG/cgi/cvsweb.cgi/src/share/mk/bsd.port.mk"
name="the bsd.port.mk CVS log"> で詳細な情報を得ることができま
す.
- <sect2>
+ <sect1>
<heading>やっとおしまい!</heading>
<p>いやはや, 長い文章ですみません. ここまで読んでくださった方に