diff --git a/ja_JP.eucJP/books/porters-handbook/book.sgml b/ja_JP.eucJP/books/porters-handbook/book.sgml index b5ea8ca452..356351d597 100644 --- a/ja_JP.eucJP/books/porters-handbook/book.sgml +++ b/ja_JP.eucJP/books/porters-handbook/book.sgml @@ -1,4755 +1,5028 @@ - %man; %bookinfo; - %authors; - %jauthors; - + +%ja-authors; + +%authors; + %mailing-lists; ]> FreeBSD port 作成者のためのハンドブック FreeBSD ドキュメンテーションプロジェクト 2000 年 4 月 2000 The FreeBSD Documentation - Project + Project - このハンドブックは FreeBSD port 作成者 (porter) - 向けに, 具体的な port の作成方法や注意点などをまとめたものです. + このハンドブックは FreeBSD の port 作成者 (porter) 向けに, + 具体的な port の作成方法や注意点などをまとめたものです. - 日本語版の作成は FreeBSD - 日本語ドキュメンテーションプロジェクト (FreeBSD doc-jp) が行なっています. - 日本語訳および, 日本語版のみに関することは - FreeBSD &a.jp.doc-jp; において日本語で議論されています. + 日本語版の作成は FreeBSD 日本語ドキュメンテーション + プロジェクト (FreeBSD doc-jp) が行なっています. + 日本語訳および, 日本語版のみに関することは FreeBSD &a.jp.doc-jp; に + おいて日本語で議論されています. 文書の日本語訳に関するお問い合わせや, - 文書の原文に関する問い合わせをしたいが英語が得意でないという方は - FreeBSD &a.jp.doc-jp; まで, 日本語でコメントをお寄せください. + 文書の原文に関する問い合わせをしたいが英語が得意でないという方は, + FreeBSD &a.jp.doc-jp; まで日本語でコメントをお寄せください. - - &bookinfo.legalnotice; + &bookinfo.legalnotice; 自分で port を作成するには - 自分で port を作ることや既存の port - の更新作業に興味があるのですか, それはすばらしい! + 自分で port を作ることや, 既存の port の + 更新作業に興味があるのですか. それはすばらしい! - これから, FreeBSD 用の portを 作る際の, - いくつかのガイドラインを説明します. - もし, 既存の port を更新したいと考えているなら, - まずこの文書を読み, 次に - を読んでください. - - この文書では十分に詳細がわからない場合には, + ここでは FreeBSD 用の port を作る際の + ガイドラインをいくつか示します. + 既存の port を更新したいと考えている場合であっても, + まずこの章を読んでから, 次に + を読むようにしてください. + + この文書では充分に詳細がわからない場合には, /usr/ports/Mk/bsd.port.mk を参照してください. このファイルは, port の Makefile が例外なくインクルードしているものです. - これには細かくコメントが書かれていますので, Makefile - を読むのにあまり慣れていない人でも, - たくさんの情報を得ることができると思います. - また, port 特有の質問は &a.ports; へお願いします. - - + これには細かくコメントが書かれていますので, Makefile を読むのに + あまり慣れていない人でも, たくさんの情報を得ることができるでしょう. + それでも解決できないような質問は, &a.ports; にポストしてみるのも + 良いでしょう. + - ここでは, 変更可能な変数(VAR) - の一部についてのみ記述しています. - ほとんどの変数はbsd.port.mk - の始めに記述があります. - また, このファイルは非標準のタブ設定を使用しています. - EmacsVim - はファイルのロード時にこれを認識しますが, - viex は - ファイルをロードしてから :set tabstop=4 - とタイプすることで, 正しい値を設定する - ことができます. + この文書では, 上書き可能な + 変数 (VAR) のうち + 一部のものについてだけ述べています. + (すべてでは無いかもしれませんが,) ほとんどの変数は + bsd.port.mk の先頭部分に記述されています. + なお, このファイルは非標準のタブ設定を使用しています. + EmacsVim は, + この設定をファイルの読み込み時に認識するはずです. + viex では, + 一旦ファイルを読み込んでから :set tabstop=4 と + タイプすることで, 正しい値に設定することができます. - + 3 分間 porting - この節では, 簡単な port の方法について説明します. - 多くの場合これ では不十分ですが, - まあうまくいくかどうか試してみて損はないでしょ う. - + このセクションでは, 簡単な port の作り方について説明します. + 多くの場合, これだけでは不充分ですが, + まあ うまくいくかどうか試してみて損はないでしょう. + まず, 元の tar ファイルを - DISTDIR - に置きます. - デフォルトは - /usr/ports/distfiles - です. - + DISTDIR に置きます. この変数の + デフォルト値は /usr/ports/distfiles です. + - 以下では, - ソフトウェアがそのままコンパイル可能なことを仮定しています. - つまり FreeBSD マシンで動かすために, + 以下の例では, そのソフトウェアが + そのままコンパイル可能なものと仮定しています. + つまり, FreeBSD マシンで動かすために, 変更がまったく必要ないという意味です. - もし何か変更が必要な場合には, 次の節も参照する必要があります. + もし何か変更が必要な場合には, 次のセクションも + 参照する必要があるでしょう. - + <filename>Makefile</filename> の作成 - - 最小限のMakefile - は次のようなものです. - - -# New ports collection makefile for: oneko -# Date created: 5 December 1994 -# Whom: asami + + 最小限の Makefile は + 次のようなものになります. + + # New ports collection makefile for: oneko +# Date created: 5 December 1994 +# Whom: asami # -# $FreeBSD$ +# $FreeBSD$ # -PORTNAME= oneko -PORTVERSION= 1.1b -CATEGORIES= games -MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ +PORTNAME= oneko +PORTVERSION= 1.1b +CATEGORIES= games +MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ -MAINTAINER= asami@FreeBSD.org +MAINTAINER= asami@FreeBSD.org -MAN1= oneko.1 -MANCOMPRESSED= yes -USE_IMAKE= yes +MAN1= oneko.1 +MANCOMPRESSED= yes +USE_IMAKE= yes .include <bsd.port.mk> - おわかりでしょうか. - $FreeBSD$がある行の内容については, - 気にしないでください. - これはこのファイルが ports ツリーに書き込まれるときに - CVS によって自動的に書き込まれます. - もっと詳しい例が見たければ, - Makefile - のサンプルの節をご覧ください. + おわかりでしょうか. $FreeBSD$ を + 含む行の内容については, 気にする必要はありません. + この行は, このファイルが FreeBSD の ports ツリーに + 取り込まれる際に, CVS によって自動的に書き込まれます. + もっと詳しい例が見たい場合には, + Makefile のサンプルの + セクションをご覧ください. package 記述ファイルの作成 - - package にするしないに関わらず, - どのような port でも三つの記述ファイルが必要です. - それは pkg サブディレクトリにある, - COMMENT, - DESCR, - そして PLISTです. - + + package にするしないに関わらず, どのような port でも + 三つの記述ファイルが必要です. それは + pkg-comment, + pkg-descr, と + pkg-plist の3つで, ファイル名が + pkg- で始まっていることで + 他のファイルと区別できるようになっています. + - <filename>COMMENT</filename> - - これには, その port についての説明を一行で書きます. - package の名前, - バージョン番号等は含めないでください. - コメントは大文字で始め, 最後のピリオドは付けないでください. + <filename>pkg-comment</filename> + + このファイルには, その port についての説明を一行で書きます. + package の名前だとか, バージョン番号などを + 含めてはいけません. + 説明は大文字で始め, 最後にピリオドは付けないでください. たとえば, こんな具合です. - - -A cat chasing a mouse all over the screen + + A cat chasing a mouse all over the screen - <filename>DESCR</filename> - - これは, そのソフトウェアについての少し長い説明を記述します. - その port が何をするのかについて, - 数段落程度の簡潔な解説があれば十分です. - + <filename>pkg-descr</filename> + + このファイルには, その port についての少し長い説明を書きます. + その port が何をするのかについての, + 数段落程度の簡潔な解説があれば充分です. + - このファイルは, - マニュアルでも使用方法やコンパイル方法についての細かい説明書でもありません. - 特に README - ファイルやマニュアルページをコピーしようとしてしている場合には注意してください. + これはマニュアルでもなければ, 使用方法やコンパイル方法に + ついての細かい説明書でもありません. + README ファイルや + マニュアルを引用するつもりなら注意が必要です. これらは多くの場合, その port の簡潔な説明になっていなかったり, - 扱いにくい形式 - (マニュアルページの場合, 行を揃えるために空白が調整されます) - になっていたりします. - もしこのソフトウェアに公式のウェブサイトがあれば, - ここに書いてください. - 自動化ツールが正しく動作するように, - ウェブサイトのうちの一つには先頭に - WWW: を付け加えてください. + 扱いにくい形式になっていたりします. + (マニュアルの場合, 行を揃えるために空白が調整されていたりします.) + このソフトウェアに公式のウェブサイトがあるのなら, + ここに書いてください. その際自動化ツールが正しく動作するように, + ウェブサイトのうちの一つには, + 先頭に WWW: をつけておいてください. - - このファイルの最後にあなたの名前を書くことが推奨されています. + + このファイルの最後に, あなたの名前を書くことが推奨されています. たとえば, こんな具合です. - - -This is a port of oneko, in which a cat chases a poor mouse all over + + This is a port of oneko, in which a cat chases a poor mouse all over the screen. : (うんぬん.) WWW: http://www.oneko.org/ - Satoshi asami@cs.berkeley.edu - + - <filename>PLIST</filename> - - このファイルには, - この port によってインストールされるファイルが列挙されます. + <filename>pkg-plist</filename> + + このファイルには, その port によってインストールされる + すべてのファイルを列挙します. このファイルは package を作る際のリストとして使われるため, - パッキングリスト (packing list) - とも呼ばれます. - ここに書かれているファイル名は, - インストール時のプレフィックス - (普通は - /usr/local か - /usr/X11R6) - からの相対パスです. - MANn - 変数を使用する場合 - (使用することが推奨されています) - には, マニュアルはここに入れないでください. - + パッキングリスト (packing list) とも呼ばれます. + ここに書くパス名は, インストール時のプレフィックス + (通常 /usr/local または + /usr/X11R6) からの相対パスです. + MANn 変数を + 使用している場合 (使用することが推奨されています), このリストに + マニュアルは入れないようにしてください. + 簡単な例を載せておきましょう. - -bin/oneko + bin/oneko lib/X11/app-defaults/Oneko lib/X11/oneko/cat1.xpm lib/X11/oneko/cat2.xpm lib/X11/oneko/mouse.xpm @dirrm lib/X11/oneko パッキングリストの詳細については, - &man.pkg.create.1; のマニュアルページを参照してください. + &man.pkg.create.1; のマニュアルを参照してください. - すべてのファイルを列挙しなければなりませんが, - ディレクトリ名は必要ありません. - また, ports - がインストール時にディレクトリを作成する場合には - @dirrm の行を加えて, - その port - が削除されるときにそのディレクトリも削除されるようにしてください. - - このファイルにはファイル名をアルファベット順に並べるようにします. - そうすることで port のアップグレートの際, - 確認作業が楽に行なえるようになります. - - パッキングリストを手で作るのは, + このリストには, すべてのファイルを列挙しなければ + なりませんが, ディレクトリそのものは列挙する必要がありません. + また, この port がインストール時に独自のディレクトリを + 作成する場合には, この port が削除されるときに + そのディレクトリも削除されるよう, @dirrm の行を + 追加しておくのを忘れないでください. + + このファイルでは, すべてのファイル名を + アルファベット順にソートしておくことを推奨します. + そうすることで, port を更新する際の + 変更点の確認が楽になります. + + パッキングリストを手作業で作成するのは, 時にとても退屈な作業になります. - もし多数のファイルをインストールする port なら, - パッキングリストを自動生成すれば時間の節約になるかも知れません. + その port が非常に多数のファイルをインストールするとしたら, + パッキングリストの + 自動生成を行なえば, 時間の節約になるかもしれません. - + チェックサムファイルの作成 - - make makesum - と入力するだけです. - bsd.port.mk にルールがあるので, - 自動的に files/md5 が生成されます. + + make makesum と入力するだけで, + (訳注: bsd.port.mk に書かれている) + port 生成ルールに従い, + 自動的に distinfo ファイルが生成されます. port のテスト - package 化を含めてその port が正しく動くことを確認してください. - 以下の重要なポイントを確認してください. - + package 化も含め, その port が思った通りに + 動くことを確認してください. + 確認の必要な重要ポイントは以下の通りです. + - PLIST にその port - がインストールしないものが含まれていないこと. + その port がインストールしないものが + pkg-plist に含まれていないこと. - + - PLIST にその port - がインストールするすべてのものが含まれていること. + その port がインストールする, すべてのものが + pkg-plist に含まれていること. - + reinstall - ターゲットを使うことによって, - 何度でもインストールが可能なこと. + ターゲットを使うことで, その port が + 何度でもインストール可能なこと. - + - deintall - の際に後片付けをすること. + その port が deintall される際には + 後片付けをすること. 推奨されるテストの手順 - + make install - + make package - + make deinstall - + - pkg_add package 名 + pkg_add package 名 + - + make deinstall - + make reinstall - + make package - + package および - deinstall - の段階でどんな警告 - (warning) - も出力されないことを確認してください. - ステップ 3 の後, - 新しいディレクトリがすべて正しく消去されているかを確認してください. + deinstall の段階で, + どんな警告 (warning) も出力されないことを確認してください. + ステップ 3 の後, (訳注: その port が作成した) すべての新しい + ディレクトリが正しく消去されていることを確認してください. また, ステップ 4 の後にそのソフトウェアを使用してみて, - package からインストールされた場合に正しく動作するかを + package からインストールされた場合にも正しく動作することを 確認してください. - + <command>portlint</command> によるチェック - - portlintを使って, - あなたの port が FreeBSD のガイドラインに沿っているかを確認してください. - portlint プログラムは - Ports Collection に含まれています. - 特に Makefile - が正しい形式になっているか, - package - の名前が正しいかをチェックするのに良いでしょう. + + portlint を使い, その port が FreeBSD の + ガイドラインに沿っているかどうかを確認してください. + portlint プログラムは ports collection に + 含まれています. + 特に, Makefile が + 正しい形式になっているか, + package の + 名前が正しいかどうかをチェックするのに良いでしょう. - + port の提出 - まずやって良いことといけないことに関する節を読んでください. + まず, やって良いこと悪いことの + セクションを読んでください. - さあ, あなたの port に満足したら, - あとはそれを FreeBSD のメインの ports ツリーに置き, 皆に使ってもらうだけです. - 今ある + さて, 満足のいく port が完成したら, 残るは + それを FreeBSD のメインの ports ツリーに置いて, + 他の人にも使ってもらうだけです. work ディレクトリや - pkgname.tgz という package - は必要ありませんから, まずこれらを消去してください. - あとはバグレポートの中に - shar `find port_dir` - の出力を &man.send-pr.1; プログラムを使用して送ってください - (&man.send-pr.1; についての詳細はバグ報告と一般的な論評を参照してください). - もし, 圧縮していない状態で 20KB 以上あるような port あれば, - 圧縮して tar ファイルにして, + pkgname.tgz といった package は + 必要ありませんから, まずこれらを消去してください. + あとは shar `find port_dir` の出力を + バグレポートに入れ, &man.send-pr.1; プログラムを使用して + 送ってください (&man.send-pr.1; についての詳細はバグ報告と + 一般的な論評を参照してください). + もし, 圧縮していない状態で 20KB 以上あるような port であれば, + それを ひとつの tar ファイルにまとめて圧縮し, バグレポートに入れる前に &man.uuencode.1; を使用してください (20KB 以下のものを tar ファイルにして送っても良いのですが, あまり歓迎されません). - バクレポートの - category は ports, - class は change-request - を必ず使用してください - (レポートを confidential (秘密) - にしないようにしてください!). + バクレポートの category は必ず ports, + class は change-request としてください + (レポートを confidential (機密) 指定には + しないでください!). また, port 化したプログラムの短い説明文を バグレポートの Description フィールドに追加して, - shar もしくは uuencode した tar ファイルを - Fix フィールドに追加するようにしてください. - 後者は, ports - 管理の作業をスクリプトで行なっているコミッターの助けとなります. - - もう一度, - オリジナルのソースファイル, - work ディレクトリ, - make package - で作成した package が含まれていないことを確認してください. - + Fix フィールドには shar したファイル, + もしくは uuencode した tar ファイルを追加するようにしてください. + 後者は, ports 管理の作業をスクリプトで行なっている + コミッターの助けとなります. + + もう一度, オリジナルのソースファイルや + work ディレクトリ, + make package で作成した package が + 含まれていないことを確認してください. + - 以前, 新しい port を FreeBSD の ftp サイト - (ftp.FreeBSD.org) - にアップロードするようにお願いしたことがありますが, - 現在このサイトの incoming - ディレクトリは読み出し不可になっており, - いまでは推奨されていません. + 以前には, 新しい port を提出する際に FreeBSD の FTP サイト + (ftp.FreeBSD.org) に + アップロードするように お願いしていたことがあります. + 現在このサイトの incoming ディレクトリは + 読み出し不可になっており, アップロードは推奨されていません. たくさんの海賊版ソフトウェアがそこに置かれたためです. - - わたしたちは, 何か不明な点があったらあなたに確認した後, - それをツリーへ置きます. あなたの名前は - FreeBSD ハンドブックやその他のファイルの - Additional FreeBSD contributors - のリストにも載るでしょう. + + わたしたちはその port をチェックし, 必要なら + あなたに確認して, それをツリーへ置きます. + あなたの名前は FreeBSD ハンドブックやその他のファイルの + Additional FreeBSD contributors の + リストにも載るでしょう. う〜ん, 素晴らしい. :-) わたしたちが作業しやすいように, 障害報告の概要 (synopsis) は適切に記述してください. たとえば新しい port の提出なら New port: <port の簡単な説明>, port の更新なら Update port: <カテゴリ>/<port 名> <更新内容の簡単な説明> - というようなものが歓迎されます. - こういう方法で報告するように心がけていれば, - 誰かがその報告をすぐに見つけ, - 処理できる確率がぐっと大きくなるのです. - + といった形式が歓迎されます. + こういう方法で報告するように心がけていれば, あなたの報告 (PR) が + すぐに誰かの目にとまる確率が ぐっと高くなるのです. + 本格的な port - - 残念ながら移植がそう簡単ではなく, - 動かすために多少の変更が必要な場合も多いでしょう. - この節では, Ports Collection の方法論にのっとって, - そのような場合にどのように変更を施し, - 動くようにしたら良いかを順を追って説明します. - + + 残念ながら移植がそう簡単ではなく, それを動かすために + 多少の変更が必要になる場合もあるでしょう. + このセクションでは, 模範的な ports の作法に従い, + どのように変更を行なって動くようにするのかを + 順を追って説明します. + port 構築の詳細 - + まず, あなたが port のディレクトリで - make - と入力してから起こる一連の出来事について, + make と + 入力してから起こる一連の出来事について, 順を追って説明します. - ここを読むときには, 他のウィンドウで同時に - bsd.port.mk - も開いておくと良いかも知れません. - - しかし, - bsd.port.mk - が何をしているのか完全に理解 できなくても心配する必要はありません. - そう多くの人が理解して いるわけではないですから... + ここを読むときには, 別のウィンドウに + bsd.port.mk を表示しておくと + 理解の助けになるかもしれません. + + しかし, bsd.port.mk が何をしているのか + 完全に理解できなくても 心配する必要はありません. + それほど多くの人が理解している というわけでは ありませんから... f(^_^;) - + - まず, fetch - というターゲットが実行されます. - この fetch - ターゲットはローカルディスクの - DISTDIR - に配布ファイルがあるようにするのが役目です. - もし, fetch - が必要なファイルを - DISTDIR - に見つけることができなければ, - Makefile - に指定されている URL - MASTER_SITES, - そして FreeBSD の FTP サイトである - ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ - (ここには, わたしたちが取ってきたファイルをバックアップとして置いてあります) - へ探しにいきます. - そして, ユーザのサイトがインターネットに直接接続されている場合には, - FETCH - を使いその名前のファイルを取ってきて, - DISTDIR - に保存します. + まず, fetch という + ターゲットが実行されます. + この fetch ターゲットは, + 配布ファイルがローカルの DISTDIR に + 存在することを保証する役目を持っています. + もし必要なファイルが DISTDIR に + 存在しなければ, fetch ターゲットは + Makefile で指定された + MASTER_SITES 中の URL や, + FreeBSD のメイン FTP サイト + ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ + (ここにはバックアップとして, われわれ ports 管理者が確認した + 配布ファイルを置いてあります) を探しにいきます. + make を実行するマシンがインターネットに + 接続されていて, 目的のファイルを FETCH で + 取ってこれた場合には, それを DISTDIR に + 保存します. - + - 次に実行されるのは - extract ターゲットです. - これは DISTDIR - にある配布ファイル - (普通は gzip された tar ファイル) - を読み, ソースを一時的な作業ディレクトリ - WRKDIR - (デフォルトは work) - に展開します. + 次に extract ターゲットが実行されます. + このターゲットは DISTDIR から + 配布ファイル (普通は gzip された tar ファイル) を読み込み, + その内容を作業ディレクトリ WRKDIR + (デフォルトでは work) に展開します. - + - 次に, - patch - というターゲットが実行されます. - まず, PATCHFILES - に定義されている, すべてのパッチを適用します. - 次にもし - PATCHDIR - (デフォルトは patches サブディレクトリ) - にパッチが存在すれば, + 次に patch ターゲットが実行されます. + まず, PATCHFILES にパッチファイルが + 指定されていれば, そのパッチを適用します. + + 次に, PATCHDIR ディレクトリ + (デフォルトでは files サブディレクトリ) に + patch-* という + 名前のパッチファイルが存在すれば, これらをアルファベット順に適用します. - + - 次に実行されるターゲットは - configure - です. これには, いろいろな場合があります. - + 次に configure ターゲットが + 実行されます. + これには, いろいろな場合があります. + - scripts/configure - が存在すれ場合, それが実行されます. + scripts/configure が + 存在する場合には, そのスクリプトが実行されます. - + - HAS_CONFIGURE - あるいは GNU_CONFIGURE - がセットされていれば, - WRKSRC/configure - が実行されます. + HAS_CONFIGURE または + GNU_CONFIGURE がセットされていれば, + WRKSRC/configure が + 実行されます. - + - USE_IMAKE - がセットされていれば, XMKMF - (デフォルト: xmkmf -a) - が実行されます. + USE_IMAKE がセットされていれば, + XMKMF + (デフォルトでは xmkmf -a) が + 実行されます. - + - 最後に build - というターゲットが実行されます. - これはその port の専用の作業ディレクトリ - (WRKSRC) - に移動し, コンパイルするのが役目です. + 最後に build ターゲットが実行されます. + これは作業ディレクトリ (WRKSRC) に降りていき, + ビルド (コンパイル) を実行するのが役目です. USE_GMAKE がセットされていれば - GNU make が使用されます. - そうでなければ FreeBSD の - make - が使用されます. + GNU make が使用され, + セットされていなければ FreeBSD の make が + 使用されます. - - 上記はデフォルトのルールです. さらに, - pre-何とか - や - post-何とか - というターゲットが定義してあったり, - そのような名前のスクリプトが - scripts - サブディレクトリに置いてある場合には, - それらはデフォルトの動作の前後に実行されます. - - たとえば, - post-extract - というターゲットが - Makefile で定義されていて, - pre-build というファイルが - scripts サブディレクトリにあるとすると, - post-extract - ターゲットは通常の展開動作の後に呼び出され, - pre-build - スクリプトはデフォルトのコンパイルのルールが実行される前に実行されます. - もし動作が簡単であれば, Makefile - のターゲットを使用することが推奨されています. - なぜなら, その port - が何らかのデフォルトではない動作を必要とするのかどうかが一箇所にまとめて書いてあった方が, - 他の人に理解しやすいからです. - - デフォルトの動作は - bsd.port.mk の - do-何とか - というターゲットで行なわれます. + + 上記はデフォルトの動作です. これに加えて + pre- 何とかや + post- 何とかという + ターゲットを定義したり, そのような名前のスクリプトを + scripts サブディレクトリに置くことも可能で, + それぞれデフォルトの動作の前や後に実行されます. + + たとえば, post-extract ターゲットが + Makefile に定義されていて, + scripts サブディレクトリに + pre-build というファイルが置かれている場合, + post-extract ターゲットは + 通常の展開動作の後に呼び出され, + pre-build スクリプトは + デフォルトのコンパイル動作の前に実行されます. + 実行する動作が簡単であれば, スクリプトよりも + Makefile のターゲットを使用することが + 推奨されています. + なぜなら, その port では どのような非標準の動作が必要とされるのか, + 一箇所にまとめて書いてあった方が他の人に理解しやすいからです. + + デフォルトの動作は bsd.port.mk の + do- 何とかという + ターゲットで実行されます. たとえば port を展開するコマンドは - do-extract - というターゲットにあります. + do-extract ターゲットに書かれています. もしデフォルトのターゲットに不満があれば, - do-何とか - というターゲットを再定義することによってどのようにでも直すことができます. - + Makefile 中で + do- 何とかという + ターゲットを再定義することにより, + 好きなように変更することができます. + メインのターゲット - (たとえば - extract や - configure 等) - は, すべての前段階が実行されていることを確認してから, - 実際のターゲットやスクリプトを呼び出す以外のことは行ないません. - bsd.port.mk - はこれらが変更されることは仮定していませんので, - たとえば展開の仕方を変更したいときには - do-extract - を変更し, - 絶対に - extract - には手を触れないでください. + (たとえば extract, + configure, その他) は, + すべての前段階が実行されていることを確認してから, + 実際のターゲットやスクリプトを呼び出す以外のことは + 行ないませんし, これらが変更されることも想定されていません. + もし展開の方法を変更したいときには + do-extract の変更によって実現し, + 絶対に extract には + 手を触れないでください. - - これで, ユーザが - make - と入力したときに何が起こるのかが理解できたと思います. - では, 完璧な port を手順を追って作ってみましょう. + + これで, ユーザが make と + 入力したときに何が起こるのかが理解できたと思います. + では, 完璧な port を作成するための推奨手順を + 順に見ていきましょう. - + オリジナルのソースの入手 - - オリジナルのソースを, - (普通は) 圧縮された tar ファイルの形 - (foo.tar.gz - あるいは - foo.tar.Z) - で入手して, それを - DISTDIR - にコピーします. - 可能なかぎり, - 広く使われている主流のソースを使用するようにしてください. - - ネットワークへの接続の良好な FTP/HTTP - サイトを見つけることができなかったり, - 頭にくるような非標準的な形式しか持っていないサイトしか見つけられないときには, - 自分で管理する確実な ftp か http サーバ (たとえば, - あなたのホームページ) - に置くこと ができます. - MASTER_SITES - に正しく反映されていることを確認してください. - - そのような都合の良く安心な置き場所が見つけられない場合 - (あなたが FreeBSD のコミッターであれば - freefall の自分の public_html - ディレクトリに置けます), - - わたしたちが - ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/ - という場所を提供することもできます. - この場所は変数 MASTER_SITE_LOCAL - を使って参照してください. - これについての問い合わせのメールは &a.ports へお願いします. - - - その port の配布ファイルが特に理由もなくしょっちゅう変わる場合には, - 配布ファイルをあなたのホームページに置いて - MASTER_SITES - の最初に入れてください. - こうすることによって, ユーザ利用する場合に - checksum mismatch - エラーが起るのを防ぎ, FreeBSD の ftp - サイトの保守の負担を減らすことができます. - もし, マスターサイトがたった一つしかない場合には, - あなたのサイトにバックアップを置いて - MASTER_SITES - の 2 番目に加えてください. - - あなたの port に必要ないくつかの追加パッチがインターネット上で手に入るのならば, - それらも取ってきて - DISTDIR に置きます. - それらがメインのソースの tar - ファイルとは別のサイトにあっても心配する必要はありません. - そのような状況にはちゃんと対応できるようになっています - (以下の PATCHFILES - の記述をご覧ください). + + (通常の場合,) 圧縮された tar ファイルの形 + (foo.tar.gz あるいは + foo.tar.Z) で + オリジナルのソースを入手して, + それを DISTDIR にコピーします. + できる限り, 主流のソースを + 使用するようにしてください. + + ネットワークへの接続の良好な FTP/HTTP サイトを + 見つけることができなかったり, 頭にくるような非標準的な形式しか + 置いていないサイトしか見つけられないときには, + 自分の管理下にあり信頼できる FTP サーバや http サーバ + (たとえば, あなた自身のホームページ) に置くこともできます. + あなたが選んだサーバが MASTER_SITES に + 正しく反映されていることを確認してください. + + そのような便利かつ信頼のおける置き場所が見つからない場合, + 我々が ftp.FreeBSD.org に + 置き場所を提供することもできます. + 配布ファイルは, 誰かの freefall アカウントの + ~/public_distfiles/ に置かれることでしょう. + その port をコミットする人に, 置いてもらえるように頼んでください. + その人は配布ファイルを置いて, MASTER_SITES を + MASTER_SITE_LOCAL にセットし, + MASTER_SITE_SUBDIR には + 自分の freefall ユーザ名を + 入れておいてくれるでしょう. + + その port の配布ファイルが特に理由もなく + しょっちゅう変わる場合には, その配布ファイルを + あなたのホームページに置いて, MASTER_SITES の + 最初に指定することも考えてみてください. + そうすれば, ユーザが checksum mismatch エラーに + 悩まされることもなくなりますし, FreeBSD の FTP サイトの + 保守担当者の負担も減らすこともできます. + また, その port にマスターサイトが一つしか存在しない場合には, + あなたのサイトにバックアップを置き, + それを MASTER_SITES の 2 番目に + 指定すると良いでしょう. + + その port がインターネット上で入手できる追加パッチを + 必要とするのなら, それも取ってきて + DISTDIR に置いてください. + それらがメインのソースの tar ファイルとは別のサイトに + あったとしても, 心配する必要はありません. + そのような状況にも ちゃんと対応できるようになっています + (後述の PATCHFILES の記述を + ご覧ください). - + port の修正 - - 適当なディレクトリに tar ファイルを展開し, - FreeBSD の最新のバージョン上で正しくコンパイルできるために必要なあらゆる変更を施します. - 最終的に処理は自動化するわけですから, + + 作業用のディレクトリに tar ファイルを展開し, + 最新バージョンの FreeBSD 上で正しくコンパイルするために必要な, + あらゆる変更を行ないます. + この処理は最終的に自動化するわけですから, 何を行なったかを注意深く記録しておきましょう. - あなたの port が完成した暁には, ファイルの削除, 追加, - 修正を含むすべての処理が自動化されたスクリプトやパッチファイルで行なえるようになっていなければなりません. - - もし, あなたの port のコンパイルやインストールのために必要な手作業があまりに多いようならば, - Larry Wall の模範的な Configure - スクリプトでも参考にしたほうが良いかも知れません. - 新しい Ports Collection は最小のディスクスペースで, - 個々の port がエンドユーザにできるだけ - プラグ & プレイ - の状態で make できることを目指しています. - + この port が完成した暁には, ファイルの削除, 追加, + 修正を含むすべての処理が自動化されたスクリプトや + パッチファイルで行なえるようになっていなければなりません. + + その port のコンパイルやインストールのために必要な手作業が + あまりに多いようならば, Larry Wall の芸術的な + Configure スクリプトを + 参考にしたほうが良いかもしれません. + 新しい ports collection は, エンドユーザにとって個々の port が + 可能な限りプラグ & プレイかつ + 最小のディスク消費で make できることを目指しています. + - あなたが作成し FreeBSD の ports - に寄付されたパッチファイル, - スクリプトおよびその他のファイルは, - 明示的に記述されている場合を除いて - BSD の標準的な著作権条件によりカバーされていると見なされます. + 明示的に記述されている場合を除き, あなたが作成して + FreeBSD の ports collection に寄付したパッチファイル, + スクリプトおよびその他のファイルは, 標準的な BSD の + 著作権条件によりカバーされているものと見なされます. - + パッチの適用 - - port - の過程で追加されたり変更されたファイルは, - 再帰的 diff で変更点を取り出すことができます. + + port の準備段階で追加されたり変更されたりしたファイルは, + 再帰的 diff によりパッチファイル化することができます. パッチは適当にまとめて - patch-xx + patch-* という名前のファイルに入れてください. - xx - はパッチが適用される順番を示します - — これらはアルファベット順, - つまり - aa が最初, - 次に - ab などとなります. - これらのファイルは - PATCHDIR - に置いておくと自動的に適用さ れるようになっています. - すべてのパッチは - WRKSRC - (通常は, port の tar ファイルが展開されるところで, - make が実行されるところと同じです) - からの相対パスになります. - 修正やアップグレードを容易にするため, - 2 つ以上のパッチが同じファイルを修正するのは避けてください - (たとえば, - patch-aa と patch-ab が共に - WRKSRC/foobar.c を修正するなど). + * は + パッチが適用される順番を示します — これらは + アルファベット順, + つまり aa が最初, + ab が その次といった順番で処理されます. + お望みなら, patch-Imakefile とか + patch-src-config.h のように, + パッチ対象のファイルのパス名を示す名前を使うこともできます. + これらのファイルは PATCHDIR に置いてください. + そうすれば自動的に適用されるようになっています. + すべてのパッチは WRKSRC からの相対パスにする + べきです (通常, WRKSRC は port の tar ファイルが + 展開されるディレクトリで, make が実行されるところと同じです). + 修正やアップグレードを容易にするため, 複数のパッチで + 同じファイルを修正するのは避けてください + (たとえば, patch-aa と + patch-ab が共に + WRKSRC/foobar.c を + 修正するなど). - + コンフィグレーション - + カスタマイズのために追加したいコマンドがあれば, - configure - という名前のスクリプトに入れて - scripts サブディレクトリに置きます. + configure という名前のスクリプトに入れて + scripts サブディレクトリに置いてください. 上で述べたように, pre-configure あるいは post-configure という - Makefile - のターゲット, + Makefile ターゲットや, スクリプトで処理することもできます. - + ユーザからの入力の扱い - - もし, その port がビルド, - コンフィグレーション, + + もし, その port がビルド, コンフィグレーション, または インストールの際にユーザからの入力を必要とするならば, - Makefile で - IS_INTERACTIVE - をセットしてください. - これによって深夜, - 自動的にたくさんの port - をコンパイルすることが可能になります. - 環境変数BATCHがセットされていると - IS_INTERACTIVE - の定義されている port はスキップされます - (そして, - ユーザがINTERACTIVE - という変数をセットすると入力を必要とする - port のみコンパイルされます). - - もし, 適切なデフォルト設定があるのであれば, - PACKAGE_BUILDING - 変数をチェックして,それが設定されている場合には, + Makefile 中で + IS_INTERACTIVE をセットしてください. + これにより, ユーザが環境変数 BATCH を + セットしている場合には, この port の処理がスキップされるので + “夜間の無人ビルド“ が実行可能になります. + (逆に環境変数 INTERACTIVE がセットされていると, + ユーザからの入力を必要とする port だけが + コンパイルされます). + + もし, 適切なデフォルト設定が存在するのであれば, + PACKAGE_BUILDING 変数をチェックして, + それが設定されている場合には ユーザ入力のスクリプトを起動しないようにしてください. - こうすることによって, CDROM や ftp に 置く - package をわたしたちが作成することができます. + こうすることによって, 我々 ports 管理者が + CDROM や FTP に 置く package を作成することができます. - + <filename>Makefile</filename> の作成 - + Makefile の作成は非常に単純です. - 繰り返しになりますが, 始めるまえにすでにある例を見てみることをお奨めします. - またこのハンドブックには - Makefile - のサンプルがあります. - それを見て, Makefile - 内の変数の順番や空行を入れるところなどの参考にしてください. + 繰り返しますが, 始めるまえに既存の例を見ておくことを推奨します. + また, このハンドブックには Makefile のサンプルがあります. + それを見て, Makefile 内の変数の順番や + 空行を入れるところなどの参考にしてください. そうすると他の人々にも読みやすいものとなります. - - では, - Makefile - を設計するときに問題となるところを順に追って見てみましょう. - + + では, Makefile を設計するときに + 問題となるところを順に追って見てみましょう. + オリジナルのソース - - ソースは - DISTDIRに標準的な - gzip された tar ファイルとして置かれていますか? - そうであれば, 次のステップに進めます. - そうでなければ, 変数 + + ソースは foozolix-1.2.tar.gz といった名前の + 標準的な gzip された tar ファイルの形式で + DISTDIR に置かれていますか? + そうなっていれば, 次のステップに進めます. + 異なっている場合には, 変数 DISTNAME, EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX, - DISTFILES - を適当に書き換えないといけません. - どれだけ変更しないといけないかは, - あなたの port の配布ファイルがどの程度標準からかけはなれているかによります - (最もよくある場合は - gzip ではなく普通の compress コマンド - で tar ファイルが圧縮されている場合で - EXTRACT_SUFX=.tar.Z - とするだけです). - + DISTFILES のうち + いくつかを書き換える必要があります. + どれだけ変更しないといけないかは, その port の配布ファイルが + どの程度標準からかけはなれているかによります + (最もよくあるのは gzip ではなく普通の compress コマンドで + tar ファイルが圧縮されている場合で, そのときは + EXTRACT_SUFX=.tar.Z とするだけです). + 最悪の場合には, 自分で - do-extract - ターゲットを作成して, + do-extract ターゲットを作成して, デフォルトを上書きすることもできます. しかし, そこまでする必要があることはめったにないでしょう. - + <makevar>PORTNAME</makevar> および <makevar>PORTVERSION</makevar> - + DISTNAME には port の名前の基幹部分を入れ, PORTVERSION には port のバージョン番号を入れます. - + + + + <makevar>PORTREVISION</makevar> および + <makevar>PORTEPOCH</makevar> + + + <makevar>PORTREVISION</makevar> + + PORTREVISION 変数は単調増加する値です. + PORTVERSION が増加した時 (つまり, + 新しいオフィシャルベンダーリリースが行なわれた時) には + いつでも 0 にリセットされます. + また, その値が 0 でない場合には package 名に追加されます. + その port から作られる package の内容や構造に + 大きな影響を与える変更を行なった時には, + PORTREVISION を増やしてください. + + PORTREVISION を上げる必要がある変更の例: + + + + セキュリティ上の脆弱性やバグを修正するため, または + その port に新しい機能性を追加するためのパッチの追加. + + + + package のコンパイル時オプションの有効化や + 無効化のための Makefile の変更. + + + + パッキングリストの変更や, package のインストール時の + 挙動の変更 (たとえば, ssh のホストキーのような package の + 初期データを生成するスクリプトの変更など). + + + + その port が依存する共有ライブラリのバージョンを + 上げる場合 (新しいバージョンの共有ライブラリが + インストールされた後に, そのライブラリに依存していた + 古い package をインストールを試みる場合, + その package は新しい libfoo.(x+1) ではなく + 古い libfoo.x を探そうとするため, インストールに失敗します. + (訳注: そのため, PORTREVISION を上げた package を + 作成する必要があるわけです)). + + + + ひそかに port 配布ファイルの変更が行なわれ, + その機能に大きな変化があった場合. + つまり, distinfo の修正を + 必要とするような配布ファイルの変更が行なわれ, + 新旧のバージョンの diff -ru を取ると + 些細とは言えない変更が認められるにもかかわらず, + オリジナルのバージョン番号が変更されていないことから + PORTVERSION の変更は難しい場合. + + + + PORTREVISION を上げる必要の無い変更の例: + + + + 生成される package に機能の変化が起らないような + port スケルトンのスタイル変更. + + + + 生成される package に影響しないような + MASTER_SITES その他の + port に対する機能変更. + + + + 誤植の修正などの些細な変更で, その package のユーザが + アップグレードを必要とするほどには重要でないパッチ. + + + + 以前にはコンパイルが通らなかった package を + ビルド可能にするための修正 (その port が以前にビルド可能だった + プラットフォームにおいて, その変更により何らかの機能的な + 違いが発生しない場合に限ります). + PORTREVISION は package の内容を + 反映したものなので, その package が以前にビルド可能でなければ + 内容の変更も無いため, PORTREVISION を + 増やす必要はありません. + + + + 経験的な判断方法としては, ある port にコミットされた変更が + (それが強化や修正によるものであれ, 新しい package による + 実質的な効能であれ), アップデートすることにより誰かがどこかで + 利益を受けるような何か かどうか自問してみることです. + + もし答がイエスであれば, 新しい package が利用可能になった事実を + (例えば pkg_version 等の) 自動化ツールが + 強調することができるように, PORTREVISION を + 上げるべきでしょう. + + + + <makevar>PORTEPOCH</makevar> + + ソフトウェアのベンダや FreeBSD の port 作成者は, + 以前のものよりも小さい数字のバージョン番号をつけたソフトウェアを + リリースするといった, 何か馬鹿げたことをすることが時々あります. + 例をあげると, ある port が foo-20000801 から foo-1.0 になる + といった具合です (数字として見ると 20000801 は 1 よりも大きいため, + 間違って前者の方が新しいバージョンとして扱われてしまいます). + + このような場合には PORTEPOCH バージョンを + 増やしてください. + 上のセクション 0 で説明したように, + PORTEPOCH がゼロでない場合には, + それがパッケージ名の後ろにつけられます. + PORTEPOCH は減らされたり, ゼロに + リセットされることはありません. + さもないと, 以前に作成された package との比較に失敗する + (つまり, その package が古くなっていることがわからない) ためです: + 新しいバージョン番号 (上の例では1.0,1) は + 依然として前のバージョン番号 (20000801) よりも + 数字としては小さいのですが, 自動化ツールが + サフィックス ,1 を特別扱いすることで, + 以前の package には明示されていないサフィックス ",0" よりも + 新しいことがわかります. + + 大多数の ports では, PORTEPOCH が + 必要になることは まず無いものと考えられています. + また, 注意深く PORTVERSION を + 使用することで, そのソフトウェアの将来のリリースが + バージョン構造を変更する必要が出てきた場合にも, 多くの場合 + 前もって対応しておくことができるでしょう. + しかし, 「スナップショット」リリースのように, オフィシャルな + バージョン番号を持たないベンダーリリースが行なわれた時には, + FreeBSD 版の port 作者によるケアが必要になります. + そういったリリースに対し, リリース日付を使ったラベルを + 付けたいという誘惑にかられることがあるでしょうが, + そうすると新しい「オフィシャル」リリースが行なわれた時に, + 上の例で示したような問題が起きることでしょう. + + 例えば, あるソフトウェアのスナップショットリリースが + 20000917 に行なわれ, 以前のバージョン番号が 1.2 だったとすると, + そのスナップショットの PORTVERSION には + 20000917 ではなく 1.2.20000917 か何か, そのような番号を + 指定するのが良いでしょう. + そうしておけば, 例えばバージョン番号 1.3 として後続のリリースが + 行なわれた場合にも, 大小関係が崩されずにすむわけです. + + + + <makevar>PORTREVISION</makevar> と + <makevar>PORTEPOCH</makevar> の使い方の例 + + gtkmumble の port, バージョン 0.10 が + ports collection にコミットされます. + + PORTNAME= gtkmumble +PORTVERSION= 0.10 + + PKGNAME は + gtkmumble-0.10 になります. + + ローカルな FreeBSD パッチを必要とする + セキュリティホールが発見されました. + それに合わせて PORTREVISION を増やします. + + PORTNAME= gtkmumble +PORTVERSION= 0.10 +PORTREVISION= 1 + + PKGNAME は + gtkmumble-0.10_1 になります. + + ベンダから 0.2 という番号が振られた + 新バージョンがリリースされます (これにより, + 作者は 0.10 という番号を + 0.9 の次という意味ではなく, + 実際には 0.1.0 のつもりで + 使用していたことがわかります - あらら, 今さら遅すぎる). + 新しいマイナーバージョン 2 は数字として + 以前のバージョン番号 10 より小さいので, + 強制的に新しい package の方を「より新しい」と認識させるため + PORTEPOCH を増やす必要があります. + これは新しいベンダーリリースなので, + PORTREVISION は 0 にリセット + (または Makefile から削除) されます. + + PORTNAME= gtkmumble +PORTVERSION= 0.2 +PORTEPOCH= 1 + + PKGNAME は + gtkmumble-0.2,1 になります. + + 次のリリースは 0.3 です. + PORTEPOCH は減少することが無いため, + 今度のバージョン変数は次のようになります: + + PORTNAME= gtkmumble +PORTVERSION= 0.3 +PORTEPOCH= 1 + + PKGNAME は + gtkmumble-0.3,1 になります. + + + もし, このアップグレードによって + PORTEPOCH0 に + リセットされたとすると, 3 は数字として + 10 よりも小さいため, + gtkmumble-0.10_1 の package をインストールした誰かは + gtkmumble-0.3 の package の方が新しいことに + 気がつかないことになるでしょう. + + + + <makevar>PKGNAMEPREFIX</makevar> および <makevar>PKGNAMESUFFIX</makevar> - - 二つのオプション変数 - PKGNAMEPREFIX および + + 二つのオプション変数 PKGNAMEPREFIXPKGNAMESUFFIX は, PORTNAME および PORTVERSION と結合され, + PKGNAME${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} - として - PKGNAME を定義します. - この時, 適切な package - 名を選ぶためのガイドラインに沿っているか確認してください. - 特に, ハイフン (-) を - PORTVERSION - に含めることは禁止されています. + として定義します. + この時, 適切な package 名を選ぶための + ガイドラインに沿っているかどうかを確認してください. + 特に, PORTVERSION 中に + ハイフン (-) を使用することは禁止されています. また, package 名に language- もしくは - compiled.specifics - 部分が含まれる場合, それぞれ - PKGNAMEPREFIX と - PKGNAMESUFFIX を使用します. - これらを PORTNAME の一部として含めてはいけません. + compiled.specifics 部分が + 含まれる場合, それぞれ PKGNAMEPREFIX と + PKGNAMESUFFIX を使用してください. + これらを PORTNAME の一部としてはいけません. - + <makevar>DISTNAME</makevar> - + DISTNAME は製作者が決めたソフトウェアの名前です. - DISTNAME はデフォルトで - ${PORTNAME}-${PORTVERSION} となりますが, + デフォルトでは DISTNAME は + ${PORTNAME}-${PORTVERSION} になりますが, 必要に応じて書き換えることができます. DISTNAME は二つの場所でしか使われません. - 一つ目は配布ファイルリスト - (DISTFILES) - のデフォルト + 一つ目は配布ファイルリスト (DISTFILES) のデフォルト ${DISTNAME}${EXTRACT_SUFX} で, - 二つ目は配布ファイルが展開されるサブディレクトリ WRKSRC - のデフォルト work/${DISTNAME} です. - - PKGNAMEPREFIX と - PKGNAMESUFFIX は - DISTNAME に影響を与えないことに注意してください. + 二つ目は配布ファイルが展開される + サブディレクトリ WRKSRC のデフォルト + work/${DISTNAME} です. + + + PKGNAMEPREFIX や + PKGNAMESUFFIX は + DISTNAME に影響を与えません. + また, 元のソースアーカイブが + ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX} という + 名前ではないのに, WRKSRC を + work/${PORTNAME}-${PORTVERSION} と + 設定している場合, おそらく DISTNAME は + そのままにしておく必要があることに注意してください — + DISTNAMEWRKSRC の + 両方を (そして おそらく EXTRACT_SUFX も) + セットするよりは, DISTFILES を + 定義する方が楽でしょう. + - + <makevar>CATEGORIES</makevar> - + 完成した package の実体は - /usr/ports/packages/All に置かれます. - また, 一つかそれ以上の - /usr/ports/packages - のサブディレクトリからのシンボリックリンクが作られます. - それらのサブディレクトリの名前が - CATEGORIES - という変数によって指定されます. - これは, - ユーザが FTPサイトや CDROM の package - の山を渡り歩くことを容易にするためです. - 現在存在するカテゴリを見て, - その port に適したもを選んでください. - - このリストは, この port が port ツリーのどこに - import されるかも決定します. + /usr/ports/packages/All に置かれ, + 一つかそれ以上の /usr/ports/packages の + サブディレクトリからのシンボリックリンクが作られます. + これらのサブディレクトリの名前は CATEGORIES という + 変数によって指定されます. + これは, ユーザが FTP サイトや CDROM 上の package の山を + 渡り歩くことを容易にするためのものです. + 既存のカテゴリを見て, + その port に適したものを選んでください. + + このリストは, この port が port ツリーの + どこに取り込まれるかも決定します. 二つ以上のカテゴリを指定した場合には, 最初のカテゴリで指定されるサブディレクトリに置かれることになります. 適切なカテゴリを選ぶ方法については, - カテゴリの節を参照してください. - - もしその port - が本当に現存するすべてのものとは異なったものを必要としている場合には, - 新しいカテゴリ名を作ることもできます. - その際には, &a.ports; 宛てに新しいカテゴリ名を提案するメールを送ってください. - - - カテゴリ名については, - 何のエラーチェックも行なわれません. - ミスタイプがあっても - make package - は何も考えずに新しいディレクトリを作ってしまいますので注意してください. - + カテゴリのセクションを + 参照してください. + + 本当にその port が現存するカテゴリのいずれにも + 当てはまらない場合には, 新しいカテゴリ名を作ることもできます. + その場合, 新しいカテゴリ名を提案するメールを &a.ports; あてに + 送ってください. - + <makevar>MASTER_SITES</makevar> - - オリジナルの配布ファイルを指し示す - FTP または HTTP の URL のディレクトリ部分までを - MASTER_SITES に記録します. - スラッシュ - (/) - を最後につけることをお忘れなく. - - 配布ファイルがシステム上に存在しないときに, - make - マクロは - FETCH - でこの変数に指定されたサイトから取ってきます. - - 複数の, - できれば異なる大陸のサイトをこのリストに入れておくことが推奨されています. - これによって, - 広域ネットワークにトラブルがあった場合でも成功する可能性が高くなります. - わたしたちはさらに, - 自動的に最も近いマスタサイトを検出して, + + 元になる配布ファイルを指し示す, FTP/HTTP の URL のファイル名を + 除いた部分を MASTER_SITES に設定します. + 最後にスラッシュ (/) をつけることを + お忘れなく! + + このシステム上に配布ファイルが見つからなかった場合, + make マクロは FETCH を使って + この変数に指定されたサイトから配布ファイルを取得しようとします. + + このリストには, できれば異なる大陸に存在する + 複数のサイトを入れておくことが推奨されています. + これにより, 広域ネットワークのトラブルに対する + 耐性を高めることができます. + さらに私たちは, 自動的に最も近いマスタサイトを判断して, そこから取ってくるメカニズムの導入を計画しています. - - オリジナルの - tar ファイルが, X-contrib, GNU, Perl CPAN, TeX CTAN - または Linux Sunsite などの有名なアーカイブにある場合には, - MASTER_SITE_XCONTRIB, - MASTER_SITE_GNU, - MASTER_SITE_PERL_CPAN, - MASTER_SITE_TEX_CTAN および - MASTER_SITE_SUNSITE を利用することで, - 簡単にこれらのサイトを指定することができます. - あとは - MASTER_SITE_SUBDIR - にアーカイブ内でのパスを指定するだけです. + + 元になる tar ファイルが X-contrib や GNU, Perl CPAN 等の + 有名なアーカイブサイトに置かれている場合には, + MASTER_SITE_* を使って + これらのサイトを簡潔に + (例えば MASTER_SITE_XCONTRIB とか, + MASTER_SITE_PERL_CPAN のように) + 指定することができます. + MASTER_SITES を これらの変数の一つにセットし, + サイト内でのパスを MASTER_SITE_SUBDIR に + 指定するだけです. 以下に例を示します. - - -MASTER_SITES= ${MASTER_SITE_XCONTRIB} + + MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications - ユーザは/etc/make.conf中で - MASTER_SITE_* 変数を設定することによって, - デフォルトの FTP サイトではなくこれらの有名なアーカイブのミラーの中で, - 好みのものを使用することが可能です. + これらの変数は /usr/ports/Mk/bsd.sites.mk で + 定義されています. + いつでも新しいアーカイブサイトが追加されますので, + port を提出する前に このファイルの最新版を + チェックするように心掛けてください. + + ユーザは /etc/make.conf 中で + MASTER_SITE_* 変数を上書きすることもできます. + そうすることで, これらの有名なアーカイブそのものではなく, + 好みのミラーサイトを使用することができます. <makevar>PATCHFILES</makevar> - - もし, - オリジナルの配布ファイル以外にも FTP か HTTP - で手に入るパッチが必要な場合には, - PATCHFILES にファイル名を, - PATCH_SITES - にサイトとディレクトリの名前を - MASTER_SITES - と同様に設定してください. - - そのパッチ内のファイル名がソースツリーの一番上のディレクトリ - (WKRSRC) - からの相対パスになっていない場合には, - PATCH_DIST_STRIPを指定してください. - たとえば, パッチ内のファイル名にすべて余計な - foozolix-1.0/ - がついている場合には, - PATCH_DIST_STRIP=-p1 - としてください. - + + その port が配布ファイルの他に FTP や HTTP で手に入る + 追加パッチを必要とする場合には, PATCHFILES には + そのパッチのファイル名を, PATCH_SITES には + そのファイルが置かれているディレクトリの URL をセットしてください. + (書き方は MASTER_SITES と同じです.) + + そのパッチに記録されているファイル名に余計なパス名が + ついていて, ソースツリーのトップディレクトリ (つまり + WKRSRC) からの相対パスになっていない場合には, + それに応じた PATCH_DIST_STRIP を指定してください. + たとえば, パッチ内のすべてのファイル名の先頭に, + 余計な foozolix-1.0/ がついている場合には, + PATCH_DIST_STRIP=-p1 としてください. + これらのパッチは圧縮されていても大丈夫です. - ファイル名が - .gz.Z - で終わる場合には自動的に復元されるようになっています. - - もしパッチが, 文書などその他のファイルと一緒に - gzip された tarファイルで配布されている場合には, - 単純に - PATCHFILES - を使うことはできません. + ファイル名が .gz.Z で + 終わる場合には, 自動的に展開されるようになっています. + + もしパッチが, ドキュメント等その他のファイルと一緒に + gzip された tar ファイルで配布されている場合には, + 単に PATCHFILES を使うだけではうまくいきません. このような場合には, このパッチの tar ファイルの名前と場所を - DISTFILES と - MASTER_SITES に加えます. それから, - pre-patch - ターゲットでパッチコマンドを走らせるか, パッチファイルを - PATCHDIR ディレクトリに - patch-xx - という名前でコピーするかして, - パッチを適用するようにします. - + DISTFILESMASTER_SITES に + 追加しておきます. + それから, EXTRA_PATCHES 変数に + それらのパッチを指定すれば, bsd.port.mk が + 自動的にパッチを適用してくれます. + 特に注意が必要なのは, パッチファイルを PATCHDIR + ディレクトリにコピーしてはならないことです + — (訳注: port が CD-ROM 上に置かれている等の場合には,) + そのディレクトリには書き込みができないかもしれません. + - 普通の gzip か compress された tar ファイルであれば, - 通常のソースファイルと一緒にその時までに展開されていますので, - 明示的に展開する必要はありません. - もし, 後者の方法を使用する場合には, - すでにそのディレクトリにある何かを上書きしないように注意する必要があります. - さらに pre-clean - ターゲットにコピーしたパッチファイルを削除するコマンドを追加するのを忘れないでください. + それが普通の gzip か compress された tar ファイルであれば, + 通常のソースファイルと一緒にパッチ適用時までに展開されていますので, + 明示的に展開する必要はないことに注意してください. + もしパッチを DISTFILES に追加した場合には, + パッチを含むファイルが展開される際に, そのディレクトリにある + 何かを上書きしないように注意してください. + さらに, コピーされたパッチファイルを削除するコマンドを + pre-clean ターゲットに追加することを + 忘れないでください. - + <makevar>MAINTAINER</makevar> - + あなたのメールアドレスをここに入れてください. お願いします. :-) - - 保守担当者(maintainer)の役割についての詳細は, - Makefile 中の MAINTAINER - の節をご覧ください. + + 保守担当者 (maintainer) の責任に関する詳細説明は, + Makefile 中の MAINTAINER の + セクションを参照してください. - + 依存関係 - - プログラムが他の port に依存する場合には, - 必要なものが自動的に作られるようにすることができます. - そのために, 以下の - 5 つの変数が用意されています. - よくあるケースのためにあらかじめ設定された依存変数や, + + 多くの port は他の port に依存しています. + 必要なものすべてがユーザのマシン上に存在することを + 保証するために使用可能な, 5 つの変数が用意されています. + よくあるケースのためにあらかじめ設定された依存変数に加え, いくつかの依存関係の制御のための変数があります. - + <makevar>LIB_DEPENDS</makevar> - - port - が必要とする非標準の共有ライブラリをこの変数で指定します. - これは - lib:dir:target - という組のリストで, そのうち + + その port が必要とする共有ライブラリを, この変数で指定します. + (訳注: libc 等, 標準のライブラリは指定する必要がありません.) + これは lib:dir:target という + 組のリストです. lib が共有ライブラリの名前, - dir がそのライブラリが見つからない場合にインストールする - port のあるディレクトリ, - target がそのディレクトリで呼ばれるターゲットです. + dir が + そのライブラリが見つからない場合に + インストールされる port のディレクトリ, + targetが + そのディレクトリで呼ばれるターゲットです. たとえば, - - - LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install - - - と指定してあれば, まずメジャーバージョンが 9 の jpeg - ライブラリがあるかどうか確認し, - ない場合には ports ツリーの中の - graphics/jpeg - というサブディレクトリに移動し, - そこでコンパイルとインストールを行ないます. + LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install + + と指定されていた場合, まずメジャーバージョンが 9 の jpeg 共有 + ライブラリがインストールされているかどうかを確認します. + インストールされていない場合には, ports ツリーの + graphics/jpeg サブディレクトリに移動し, + target のコンパイルとインストールを + 行ないます. target の部分は, - DEPENDS_TARGET - (デフォルトは install) - と等しいときには省略できます. - + それが DEPENDS_TARGET + (デフォルトでは install) と + 等しいときには省略することができます. + - 前半の lib 部分は - ldconfig -r | grep -wF - への引数になります. - この変数には正規表現を入れられません. + 先頭の lib の部分は + ldconfig -r | grep -wF への + 引数になります. + この変数には正規表現を入れないようにしてください. - + - この依存関係は 2 度チェックされます. まず - extract ターゲットで, 次に - install でチェックされます - (これは, その port を作成するマシンとインストールする - マシンが違う場合でも, きちんとそのライブラリが利用できる - ことを確認するためです). また, 依存するもの名前は package - の中にも含まれますので, ユーザのシステムに存在しなければ, - pkg_add が自動的にインストールします. + この依存関係のチェックは, + extract ターゲットと + install ターゲットの中で, 2 回行なわれます. + (訳注: これは, その port をビルドするマシンと + インストールされるマシンが違う場合, どちらのマシンでも + そのライブラリが利用できることを確認するためです.) + 同様に, 依存するライブラリの名前は package 中にも書き込まれていて, + pkg_add 実行時に そのライブラリが + ユーザのシステムに存在していなければ, 自動的にインストールされます. - + <makevar>RUN_DEPENDS</makevar> - - port - を使用する際に必要となるファイル, - またはプログラムがあるときにはこの変数で指定します. - これは - path:dir:target - という組のリストで, - path - がファイルまたはプログラムの名前, そして - dir - がそれが見つからない場合に作成するためのディレクトリ名で - target - はそのディレクトリで呼ばれるターゲットです. - path の最初の文字がスラッシュ - (/) の場合にはファイルかディレクトリ - とみなし, その存在を test -e - でチェックします. - そうでない場合には実行可能であると仮定し, - which -s - を使ってそのプログラムがユーザのサーチパス上にあるかどうか確認します. - + + この port の実行時に必要となるプログラム, + またはファイルがあるときにはこの変数で指定します. + これは path:dir:target という + 組のリストです. + path がファイルまたはプログラムの名前, + dir が それが見つからない場合に + インストールされる port のディレクトリ, + target が そのディレクトリで呼ばれる + ターゲットです. + path の最初の文字が + スラッシュ (/) の場合には + ファイルかディレクトリとみなし, 存在するかどうか + test -e を使ってチェックします. + そうでない場合には実行可能ファイルであると考えて, + そのプログラムがユーザのサーチパス上にあるかどうか + which -s を使って確認します. + たとえば Makefile に以下のように書いてあるとします. - - -RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \ - wish8.0:${PORTSDIR}/x11-toolkits/tk80 - - まず, /usr/local/etc/innd - というファイルかディレクトリが存在するか確認し, - ない場合には ports ツリーの中の - news/inn - というサブディレクトリから作られます. - また, - wish8.0 - というプログラムがユーザのサーチパス中にあるかどうか探し, + + RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \ + wish8.0:${PORTSDIR}/x11-toolkits/tk80 + + まず, /usr/local/etc/innd という + ファイルかディレクトリが存在するか確認します. + 存在しない場合には, ports ツリーの + news/inn というサブディレクトリで + ビルドとインストールを行ないます. + さらに, wish8.0 というプログラムが + ユーザのサーチパス中にあるかどうか探します. ない場合には同じく ports ツリーの - x11-toolkits/tk80 - というサブディレクトリから作られます. - + x11-toolkits/tk80 というサブディレクトリで + コンパイルとインストールを行ないます. + - この例で, innd - は実際にはプログラムです. - このように, - プログラムであっても標準のサーチパス以外のところにあるようなものの場合には, + この例で, innd は実際にはプログラムです. + このように, プログラムであっても一般ユーザのサーチパスに + 含まれているとは考えにくいところに置かれているものの場合には, 絶対パスで指定してください. - - この依存関係は - install - ステージのはじめでチェックされます. - また, package を作る際に必要となる - port の package 名が記録され - pkg_add - を使用するとユーザのシステムに存在しない場合には自動的にそちらの - package もインストールされるようになります. - target の部分は, - DEPENdS_TARGET - と同じ場合には省略可能です. + + この依存関係は install ターゲット中で + チェックされます. + また, pkg_add によるインストールの際に, + その package が依存するものがユーザのシステムに存在しない場合には + 自動的に追加インストールできるように, + 依存するものの名前も package 中に記録されます. + target の部分が + DEPENDS_TARGET と同じ場合には, + target の部分を省略することができます. - + <makevar>BUILD_DEPENDS</makevar> - - この変数はビルドに必要なプログラムまたはファイル名を指定します. - RUN_DEPENDSと同様に, これは - path:dir:target - という組のリストです. たとえば, + + この port のビルド時に必要となるプログラム, + またはファイルがあるときにはこの変数で指定します. + RUN_DEPENDS と同様に, + これは path:dir:target という + 組のリストです. + たとえば, BUILD_DEPENDS=unzip:${PORTSDIR}/archivers/unzip - - は - unzip という名前のプログラムを探し, - 見つからない場合には - archivers/unzip - サブディレクトリで作れという意味になります. - + + と指定されていた場合, まず unzip という名前の + プログラムがインストールされているかどうかを確認します. + インストールされていない場合には ports ツリーの + archivers/unzip サブディレクトリに移動し, + ビルドとインストールを行ないます. + - ここで言うビルドは, - ファイルの展開からコンパイルまでのすべてを意味します. - この依存関係は - extract - ステージからチェックされます. - target の部分は - DEPENDS_TARGET - と同じ場合には省略可能です. + ここで言うビルドとは, ファイルの展開から + コンパイルまでのすべての処理を意味します. + この依存関係は, extract ターゲットの中で + チェックされます. + target の部分は, + DEPENDS_TARGET と同じ場合には + 省略することができます. - + <makevar>FETCH_DEPENDS</makevar> - - この変数は, - portを取ってくるのに必要なファイルまたはプロ - グラムを指定するのに使います. 上の二つと同様に, これは - path:dir:target - という組のリストです. たとえば, - - - -FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2 - - としておけば, ncftp2 - という名前のプログラムを探 し, - 見つからない場合には - net/ncftp2 - サブディレクトリにいってインストールします. - - この依存関係は - fetch - ステージからチェックされます. - target の部分は - DEPENDS_TARGET - と同じ場合には省略可能です. + + この port を取ってくるのに必要となるプログラム, + またはファイルがあるときにはこの変数で指定します. + 上の二つと同様に, これは path:dir:target という + 組のリストです. たとえば, + + FETCH_DEPENDS=ncftp2:${PORTSDIR}/net/ncftp2 + + と指定されていれば, ncftp2 という名前の + プログラムを探します. + 見つからない場合には, ports ツリーの + net/ncftp2 サブディレクトリで + ビルドとインストールを行ないます. + + この依存関係は fetch ターゲット中で + チェックされます. + target の部分は, + DEPENDS_TARGET と同じ場合には + 省略することができます. - + <makevar>DEPENDS</makevar> - + 上記の四つのいずれにもあてはまらないような依存関係がある場合, - または他の port - がインストールされれているだけではなくソースが展開されている必要がある場合には, - この変数を使います. - これは上記の四つと違って特に確認するものがありませんので, + または他の port がインストールされているだけではなく + ソースが展開されている必要がある場合には, この変数を使います. + これは上記の四つと違い, 特に確認するものが + ありませんので, dir:target という形式のリストになります. target の部分は - DEPENDS_TARGET - と同じ場合には省略可能です. + DEPENDS_TARGET と同じ場合には + 省略することができます. - + よくある依存関係を表す変数 - - もし ports が X Window System を必要とするのであれば, + + その ports が X Window System を必要とするのであれば, USE_XLIB=yes を定義してください (これは USE_IMAKE が定義されていれば 自動的に定義されます). - BSD make の代りに + BSD make ではなく GNU make を必要とする場合には USE_GMAKE=yes を, - 動作するのに GNU autoconf を必要とする場合には + GNU autoconf を実行する必要がある場合には USE_AUTOCONF=yes を, 最新の qt toolkit を使用する場合には USE_QT=yes を, perl 言語のバージョン 5 を必要とする場合には - USE_PERL5=yes を定義してください - (特に最後のは重要です. FreeBSD のいくつかの - バージョンでは基本システムに perl5 を含みますが, - 他のものは含んでいません). + USE_PERL5=yes を定義してください + (特に最後のものは重要です. + FreeBSD のバージョンにより, 基本システムに perl5 が + 含まれていたり, いなかったりします). - + 依存関係に関する注意 - - 上で述べたように, 依存する ports - が必要になったときに呼ばれるデフォルトのターゲットは + + 上で述べたように, 依存する ports が必要になったときに + 呼ばれるデフォルトのターゲットは DEPENDS_TARGET で, そのデフォルトは install です. - これはユーザの使用する変数で port の - Makefile - で定義されるものではありません. - もしあなたの port が特別な方法で依存関係を扱う必要がある場合には, + これはユーザが使用する変数であり, + port の Makefile で定義するものではありません. + もし, その port が特別な方法で依存関係を扱う必要がある場合には, DEPENDS_TARGET を再定義するのではなく *_DEPENDS 変数の - :target - の部分を利用してください. - - make clean - と入力したときには依存する port も自動的に clean されます. - もしそうしたくない場合には - NOCLEANDEPENDS - を環境変数として設定してください. - - 無条件に他の port に依存させるには, 特別に - nonexistent という文字列を - BUILD_DEPENDS あるいは - RUN_DEPENDS - の最初のフィールドに使用してください. + :target 部分を使用してください. + + make clean と入力したときには, + その port が依存する port も自動的に clean されます. + そうならないようにしたい場合には, + 環境変数 NOCLEANDEPENDS を設定してください. + + 無条件に他の port に依存させるには, + BUILD_DEPENDS や + RUN_DEPENDS の最初のフィールドに + ${NONEXISTENT} という変数を指定してください. これは, 他の port のソースが必要なときのみ使用してください. - ターゲットも指定することによって, - コンパイルの時間を節約することができます. - たとえば, + ターゲットも指定することで, + コンパイルの時間を節約できる場合もあります. + たとえば - - -BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract + BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract - これは, 常に JPEG port - のディレクトリに行きソースの展開を行ないます. + とすると, 常に JPEG port のディレクトリに行って + ソースの展開を行ないます. - あなたがやりたいことが他の方法ではできない場合以外は + あなたがやりたいことが他の方法ではできない場合以外には DEPENDS を使わないでください. - これは常に 他の port - の作成を行い(さらにデフォルトでインストールを行い), - package も作成します. - もし本当にこれがあなたのやりたいことでしたら, - 代りにこれを - BUILD_DEPENDS と - RUN_DEPENDS で書くことをお勧めします - — 少なくとも意図が明確になります. + これは常に他の port の作成を行ない (さらにデフォルトでは + インストールも行ない), package まで作成します. + この動作が本当に所望のものでしたら, + それを BUILD_DEPENDS と + RUN_DEPENDS に書くべきでしょう + — 少なくとも意図を明確にすることができます. + + オプション選択可能な依存ライブラリ + + 巨大なアプリケーションの中には, 複数のコンフィギュレーションで + ビルドすることができるものがあります. + つまり, いくつもの外部ライブラリやアプリケーションの中の, + あるものが利用可能な場合に, それを拡張機能として使用するように + 設定することができるということです. + それらのライブラリやアプリケーションを, 必ずしも すべてのユーザが + 必要としているわけではありませんので, ports システムでは + どのコンフィギュレーションがビルドされるべきかを port 作者が + 決めるために使えるフックを用意しています. + これらを適切にサポートすることにより, ユーザをハッピーにしたり, + port 1 つ分のコストで 2 つまたはそれ以上の port を提供するのと + 同様の効率化を行なうことが可能です. + + これらのフックのうちで最も簡単に使えるものは + WITHOUT_X11 でしょう. + その port が X Window System のサポートありと, + サポートなしの設定でビルドできるのであれば, + 通常は X Window System サポートありでビルドするべきでしょう. + ビルド時に WITHOUT_X11 が定義されていれば, + その時は X Window System サポートなしのバージョンが + ビルドされるべきです. + + GNOME 環境の様々なパーツも, そのようなノブ (フック) を + 持っていますが, それらは幾分使いにくいものです. + Makefile 中で その目的に使用される変数は + WANT_*HAVE_* になります. + そのアプリケーションが, 以下に示されている依存ライブラリの + 一つについて, サポートあり, なしの両方でビルドできる場合, + Makefile には WANT_PKG を + セットする必要があります. + そして, ビルド時に HAVE_PKG が定義されていれば + PKG を使うバージョンがビルドされることになります. + + 現在, このような形でサポートされている + WANT_* 変数は, + WANT_GLIB, WANT_GTK, + WANT_ESOUND, WANT_IMLIB, + そして WANT_GNOME です. + + ビルドのメカニズム - - GNU make を使う場合には, - USE_GMAKE=yes と指定してください. - port に GNU configure - が含まれている場合には, - GNU_CONFIGURE=yes を使います(これは, - HAS_CONFIGURE も意味します). - configure に追加の引数 (デフォルトでは, - GNU configure では - --prefix=${PREFIX}, - GNU でない configure では空) - を渡したい場合には追加部分を - CONFIGURE_ARGS で指定してください. - そのパッケージが autoconf - を使用する場合には - USE_AUTOCONF=yes - を使います. - これは GNU_CONFIGURE も意味し, - configure の前に - autoconf を実行します. - - - X Window Systemのアプリケーションなど, - imakeを 使って - Imakefile から - Makefile を作成する - port の場合には USE_IMAKE=yes を指定してください. - コンフィグレーションステージで自動的に + + そのソフトウェアがビルドの際に GNU make を + 使う場合には, USE_GMAKE=yes をセットしてください. + configure を使う場合には, + HAS_CONFIGURE=yes をセットしてください. + GNU configure を使う場合には, + GNU_CONFIGURE=yes をセットしてください (これにより + HAS_CONFIGURE もセットされます). + configure に追加の引数を渡したい場合には, + 追加部分を CONFIGURE_ARGS に指定してください. + (デフォルトの引数リストは, GNU configure では + --prefix=${PREFIX} に, + GNU でない configure では空リストになります.) + GNU autoconf を使う場合には, + USE_AUTOCONF=yes をセットしてください. + これにより GNU_CONFIGURE もセットされ, + configure を実行する前に + autoconf が実行されます. + + そのソフトウェアが X Window System のアプリケーションなどで, + imake を使って Imakefile から + Makefile を作成する場合には, + USE_IMAKE=yes を指定してください. + そうするとコンフィグレーションステージで自動的に xmkmf -a が実行されます. - もし フラグが問題をもたらすなら, - さらに - XMKMF=xmkmfとしてください. - もし, port が imake - を使用するけれども - install.man - ターゲットがない場合には, - NO_INSTALL_MANPAGES=yes - を指定してください. - ついでに, その port のオリジナルの作者を探し出して八つ裂きにすると + もし フラグが問題を引き起こすなら, + さらに XMKMF=xmkmf をセットしてください. + もし, その port が imake を使用するけれども + install.man ターゲットを持たない場合には, + NO_INSTALL_MANPAGES=yes をセットしてください. + ついでに, そのソフトウェアの作者を探し出して八つ裂きにすると いいでしょう. (-_-#) - - port の - Makefile が - all - 以外のものをメインのターゲットとしている場合には - ALL_TARGET でそれを指定してください. + + そのソフトウェアの元々の Makefile が + all 以外のものをメインのターゲットと + している場合には, それを ALL_TARGET に + 指定してください. installINSTALL_TARGET も同様です. 特別な配慮 - - port を作成する場合, - 考慮しなくてはいけないことがさらにいくつかあります. - この節では, - それらのうちもっともありがちなものについて説明します. - - - <command>ldconfig</command> - - 共有ライブラリをインストールするときには, - 共有ライブラリのキャッシュを更新するために port の - Makefile の - post-install - ターゲットから - ${LDCONFIG} -m - を実行してください. - このコマンドの引数は共有ライブラリのインストールしてあるディレクトリ - (通常 - PREFIX/lib) - です. - - また, pkg/PLIST に - @exec /sbin/ldconfig -m と - @unexec /sbin/ldconfig -R の組を入れて, - package をインストールした場合にも共有ライブラリがすぐ使え, - 削除の際にもシステムがまだライブラリが存在すると誤認しないようにしてください. - この行は共有ライブラリを指定する行のすぐ後に書くのがよいでしょう. - - -lib/libtvl80.so.1 -@exec /sbin/ldconfig -m %D/lib -@unexec /sbin/ldconfig -R - - 絶対に引数なしでただ - ldconfig とだけ書いてある行を - Makefile や - pkg/PLIST ファイルに入れないでください. - このコマンドを実行すると, 共有ライブラリのキャッシュが - /usr/lib の内容のみとなり, - ユーザのマシンにさまざまな問題をもたらします - (「ぎゃぁ! この port をインストールしたら xinit - が使えなくなっちゃった!」). - この掟を破った者は, 永久に地獄の底で苦しみ続けるように, - 閻魔様に頼んでおきます. + + port を作成する場合, 考慮しなくてはいけないことが + 他にもいくつかあります. + このセクションでは, それらのうちでも + 特によくあることについて説明します. + + + 共有ライブラリ + + その port が共有ライブラリのインストールを行なう場合, + make 変数 INSTALLS_SHLIB を定義してください. + これにより, bsd.port.mk が + post-install ターゲットの実行時に + 新しいライブラリがインストールされたディレクトリ (通常は + PREFIX/lib) に + ${LDCONFIG} -m を実行し, + 共有ライブラリキャッシュへの登録が行なわれるようになります. + また, この変数が定義されている場合, 共有ライブラリを + インストールしたユーザが それをすぐに使い始められるように, + また, 削除の際には そのライブラリが まだ存在していると + システムに誤認されないように, + 適切な @exec /sbin/ldconfig -m と + @unexec /sbin/ldconfig -R のペアが + pkg-plist ファイルに + 指定されているように扱われます. + + 必要であれば, 共有ライブラリがインストールされるディレクトリの + リストを格納する make 変数 LDCONFIG_DIRS を + 定義することにより, 新しいライブラリがインストールされる + デフォルトの位置を上書きすることも可能です. + 例えば, その port が共有ライブラリを + PREFIX/lib/foo と + PREFIX/lib/bar に + インストールする場合, Makefile で + 以下の記述を使用することができます: + + INSTALLS_SHLIB= yes +LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar + + pkg-plist の他の部分と同様に, + LDCONFIG_DIRS の内容も &man.sed.1; による + 処理が行なわれるため, ここでも PLIST_SUB に + 指定した置換が行なわれることに注意してください. + PREFIX には %%PREFIX%% を, + LOCALBASE には %%LOCALBASE%%, + X11BASE には %%X11BASE%% を + 使用することを推奨します. + <makevar>MASTERDIR</makevar> - - もし, あなたの port が変数 - (たとえば解像度とか紙のサイズなど) - を変えたりした, ちょっと違うバージョンを作成する必要があるときには, + + その port の変数 (たとえば解像度とか紙のサイズなど) を + 変えたりした, 少しだけ違うバージョンを作成する必要があるときには, ユーザが分りやすいように package ごとに別々のサブディレクトリを作成し, できるだけ port 間でファイルを共有するようにしてください. - 典型的な例では, - うまく変数を使えばとても短いMakefileだけを - 一つ以外のすべてのディレクトリに置くだけで済みます. - その短い - Makefile には + ほとんどの場合, うまく変数を使えば, 一つを除くすべてのディレクトリには + とても短い Makefile を置くだけで済みます. + その短い Makefile では, MASTERDIR を使って, 残りのファイルがあるディレクトリを指定できます. - また PKGNAMESUFFIX - の一部に変数に使って - package が別々の名前を持つようにしてください. - - 以下がとても良い例になるでしょう. - これは - japanese/xdvi300/Makefile - の一部です. - - -PORTNAME= xdvi + また, PKGNAMESUFFIX の + 一部に変数に使って, package が別々の名前を持つようにしてください. + + 具体的な例を示すのが一番わかりやすいでしょう. + これは japanese/xdvi300/Makefile の一部です. + + PORTNAME= xdvi PORTVERSION= 17 PKGNAMEPREFIX= ja- PKGNAMESUFFIX= ${RESOLUTION} : # 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 - japanese/xdvi300 は通常のパッチ, - package ファイルももっています. そこで, - make と入力すると, - デフォルトの解像度(300)を使って, 普通に port - の作成を行います. - - 他の解像度に関してですが, これが, - xdvi118/Makefile の(コメントを除いた) - すべてです. - - -RESOLUTION= 118 + japanese/xdvi300 には + Makefile の他に通常のパッチや, + package ファイル等が置かれています. + このディレクトリで make を実行すると, + デフォルトの解像度 (300) を使って, + 普通に port のビルドを行ないます. + + 他の解像度に関していうと, + xdvi118/Makefile に + 必要なのはこれだけです: + + RESOLUTION= 118 MASTERDIR= ${.CURDIR}/../xdvi300 .include ${MASTERDIR}/Makefile - (xdvi240/Makefile と - xdvi400/Makefile も同様です). - MASTERDIR が - bsd.port.mk に - PATCHDIRPKGDIR - などの通常のサブディレクトリが xdvi300 - にあることを教えます. RESOLUTION=118 - の行が, xdvi300/Makefile の - RESOLUTION=300 の行を無効にし, port - は解像度を118として作成されます. + (xdvi240/Makefile や + xdvi400/Makefile も同様のものになります). + bsd.port.mk は, + MASTERDIR の定義から + FILESDIRSCRIPTDIR 等の + 通常のサブディレクトリが xdvi300 以下に + 存在することを理解します. + RESOLUTION=118 の行が, + xdvi300/Makefile の + RESOLUTION=300 の行を上書きし, + port は解像度を 118 として作成されます. - + 共有ライブラリのバージョン - まず, - 共有ライブラリのバージョンについての指針を読んで, - 共有ライブラリのバージョンを一般的にどうすれば良いかを理解してください. - 盲目的にソフトウエアの作者がちゃんと理解していると信じていてはいけません. - 多くの場合, それは間違っていますし, 細い点まで考慮することは大変重要なことです. - なぜならわたしたちは, - 互換性がないかもしれない大量のソフトウェアを共存させようとする特殊な状況にあるからです. - 過去に不注意な port の導入が共有ライブラリに関して多大な問題を引き起したことがあります - (今まで jpeg-6b - がなぜ 9 というバージョン番号を持っているか不思議に思ったことはありませんか?). - もし, 疑問があれば, &a.ports; にメールを送ってください. + まず 共有ライブラリの + バージョンについての指針を読んで, 一般的に + 共有ライブラリのバージョンをどうすれば良いかを理解してください. + ソフトウェアの作者は自分がしていることを理解していると, + 盲目的に信じていてはいけません; 多くの場合は理解していないのです. + 細部にわたって注意深く考慮することは大変重要です. + なぜなら我々は, 互換性がないかもしれない大量のソフトウェアを + 共存させようとする特殊な状況にあるからです. + むかし, 不注意な port の導入が共有ライブラリに関する重大な問題を + 引き起してしまったことがあります (なぜ jpeg-6b の + 共有ライブラリのバージョン番号が 9 なのか, 今まで不思議に思ったことは + ありませんか?). + もし疑問があれば, &a.ports; にメールを送ってください. ほとんどの時間は正しい共有ライブラリのバージョンを決めることと, それを実現するためのパッチを作成することに終始します. マニュアルページ - MAN[1-9LN] 変数を使用すると, - 自動的にすべてのマニュアルを pkg/PLIST - に加えます (つまり, マニュアルを PLIST - に加えてはいけません - — PLIST の生成 - を参照してください). - またマニュアルを - /etc/make.conf 中の - NOMANCOMPRESS の設定に応じて, - インストール時に自動的に圧縮したり復元したりします. - - もしあなたの port で複数のファイル名を持つマニュアルページを, - シンボリックリンクやハードリンクを用いてインストールしようとしているなら, - それらを識別するために MLINKS - を使わなければなりません. - port によってインストールされたリンクは, - 意図するファイルをきちんと指しているかどうかを確実なものにするため - bsd.port.mk によって削除されたり, 再作成されたりします. - MLINKS に含まれているマニュアルページは, 一つとして - PLIST の中に存在していてはいけません. - - + MAN[1-9LN] 変数に指定したマニュアルは + 自動的に pkg-plist に追加されます (つまり, + マニュアルを pkg-plist に加えては + いけませんpkg-plist の生成を参照してください). + また, /etc/make.conf 中の + NOMANCOMPRESS の設定に従って, インストール時に + マニュアルを自動的に圧縮したり復元したりします. + + その port が, シンボリックリンクやハードリンクを用いて, + 複数のファイル名を持つマニュアルをインストールする場合には, + それらを識別するために MLINKS 変数を + 使用しなければなりません. + port によってインストールされたリンクは, 意図したファイルを + きちんと指しているかどうか確認するため, + bsd.port.mk によって + 削除されたり, 再作成されたりします. + MLINKS に指定されたマニュアルも, pkg-plist に + 含めてはいけません. + マニュアルをインストール時に圧縮するかどうかを - 指定するには, MANCOMPRESSED - 変数を使用します. この変数は三つの値をとることができます, - yes, - no そして - maybe です. - yes はマニュアルが既に圧縮されてインストールされている, - no はされていない, - maybe はそのソフトウェアがすでに - NOMANCOMPRESS に合わせており - bsd.port.mk - が特別なにもする必要がないことを意味します. - + 指定するには, MANCOMPRESSED 変数を使用します. + この変数は yes, no そして + maybe の三つの値をとることができます, + yes はマニュアルが既に圧縮されてインストール + されていること, no は圧縮されていないこと, + maybe は既にそのソフトウェアが + NOMANCOMPRESS の値に従っていて, + bsd.port.mk は + 特別なにもする必要がないことを意味します. + USE_IMAKE がセットされていて, - NO_INSTALL_MANPAGES - がセットされていなければ, MANCOMPRESSED - は自動的に yes に設定され, - それ以外の場合には, no になります. - デフォルトがあなたの port - に合わない場合以外は明示的に設定する必要がありません. - + NO_INSTALL_MANPAGES がセットされていなければ, + MANCOMPRESSED は自動的に yes に + 設定されます. + それ以外の場合には, MANCOMPRESSED は + no に設定されます. + その port にとって, デフォルトの設定が適切でない場合以外には, + 明示的に設定する必要はありません. + PREFIX 以外のディレクトリの下に - マニュアルを置くような port では MANPREFIX - を指定することができます. さらに, - 特定のセクションのマニュアルだけ, - 標準ではない場所にインストールする場合, - たとえばいくつかの Perl のモジュールの ports などには, - 個々のマニュアルのパスを + マニュアルを置くような port では, そのディレクトリを + MANPREFIX で指定することができます. + さらに, いくつかの Perl モジュールの ports のように, + 特定のセクションのマニュアルだけを非標準の場所に + インストールする場合, 個々のマニュアルのパスを MANsectPREFIX - (sect は, 1-9, - または, LN - を表わします) によって指定できます. - - + (ここで sect1-9, + L, または N のいずれか) により + 指定することができます. + マニュアルが言語特有のサブディレクトリに置かれる場合には, - 言語名を MANLANG に設定してください. - この変数のデフォルト値は, - "" になっています (つまり, 英語のみ). - - + その言語名を MANLANG に設定してください. + この変数のデフォルト値は "" に + なっています (つまり, 英語のみ). + これは, 全部をまとめた例です. - - -MAN1= foo.1 -MAN3= bar.3 -MAN4= baz.4 -MLINKS= foo.1 alt-name.8 -MANLANG= "" ja -MAN3PREFIX= ${PREFIX}/share/foobar -MANCOMPRESSED= yes - - 以下の 6 個のファイルがこの port でインストールされます. - - -${PREFIX}/man/man1/foo.1.gz + + MAN1= foo.1 +MAN3= bar.3 +MAN4= baz.4 +MLINKS= foo.1 alt-name.8 +MANLANG= "" ja +MAN3PREFIX= ${PREFIX}/share/foobar +MANCOMPRESSED= yes + + これは, この port により以下の 6 個のファイルが + インストールされることを表しています. + + ${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 さらに - ${PREFIX}/man/man8/alt-name.8.gz - がこの port によってインストールされるかどうかわかりませんが, - それとは無関係に foo(1) と alt-name(8) のマニュアルページを - 指すシンボリックリンクが作成されます. - + ${PREFIX}/man/man8/alt-name.8.gz が + この port によってインストールされるかどうかわかりませんが, + それとは無関係に foo(1) と alt-name(8) のマニュアルページを指す + シンボリックリンクが作成されます. Motif を必要とする port - - 最近はコンパイルに Motif - を必要とするアプリケーションが増えてきました - (Motif 自体は有料のものがいくつかの会社から手に入りますし, - 多くのアプリケーションがコンパイル可能な無料の互換ライブラリが - x11-toolkits/lesstifにあります). - Motif はかなり広く使われていますし, - 製品のライセンスではライブラリを静的にリンクした実行形式は再配布が認められている場合が多いので, - Motif を必要とするソフトウェアを簡単に動的 - (port からコンパイルする人々のために), - 静的 - (package を配布する人々のために) - にリンクできるようなしくみが用意されています. - + + コンパイルに Motif ライブラリを必要とするアプリケーションが + いくつかあります (Motif 自体は有料のものがいくつかの会社から + 手に入りますし, x11-toolkits/lesstif には + 多くのアプリケーションを動作させることが可能な + 無料の互換ライブラリもあります). + Motif は広く使われているツールキットですし, 有料のもののライセンスでも + ライブラリを静的にリンクした実行形式の再配布が認められている場合が + 多いので, Motif を必要とするソフトウェアを簡単に + (port からコンパイルする人々のために) 動的にでも, + (package を配布する人々のために) 静的にでも + リンクできるような仕組みが用意されています. + <makevar>REQUIRES_MOTIF</makevar> - - Motif - がないとコンパイルできない port の Makefile - ではこの変数を指定してください. これによって, - Motif を持っていない人が + + Motif が無いとコンパイルできない port の + Makefile では, この変数を指定してください. + これにより, Motif を持っていない人が この port をコンパイルしようとするのを未然に防ぎます. - + <makevar>MOTIFLIB</makevar> - + この変数は bsd.port.mk によって Motif ライブラリの指定に置き換えられます. - ソース内の Makefile や Imakefile で Motif ライブラリを指定しているところを, - この変数に置き換えるようにパッチを適用してください. - + ソース内の Makefile や Imakefile で Motif ライブラリを指定している + ところを, この変数に置き換えるようにパッチを適用してください. + 代表的な例としては以下の二つがあげられます: - + Makefile か Imakefile の中で Motif ライブラリが として使われている場合には, かわりに MOTIFLIB と書いてください. - + Imakefile の中で XmClientLibs が使われている場合には, それを - ${MOTIFLIB} ${XTOOLLIB} ${XLIB} + ${MOTIFLIB} ${XTOOLLIB} ${XLIB} と書きかえてください. - + なお MOTIFLIB は通常, -L/usr/X11R6/lib -lXm/usr/X11R6/lib/libXm.a に置き換えられます. したがって前に をつける必要はありません. X11 のフォント - + もし, あなたの port が X window system のフォントをインストールするのであれば, それらを X11BASE/lib/X11/fonts/local に置くようにしてください. このディレクトリは XFree86 release 3.3.3 で新設されたものです. もしそれが存在しなければ作成し, ユーザに XFree86 を 3.3.3 かそれより新しいものに更新か, 少なくともこのディレクトリを /etc/XF86Config のフォントパスに加えるように促すメッセージを出力するようにしてください. - + Info ファイル - + 新しい版の texinfo (2.2.2-RELEASE およびそれ以降に入っています) には install-info というコマンドが含まれており, dir ファイルに項目を追加したり削除したりすることができます. もし, あなたの port が info 文書をインストー ルするのであれば, 以下の指示に従ってその port および package が正しくユーザの - ${PREFIX}/info/dir + ${PREFIX}/info/dir ファイルを更新するようにしてください - (この節はとても長くてすいません. + (このセクションはとても長くてすいません. しかし info ファイルを作りあげるためにはこれらは不可欠です. 正しく行なえば美しいリストができますので, 辛抱してください! :-) - + まず, これを知っておかなければなりません. &prompt.user; install-info --help install-info [OPTION]... [INFO-FILE [DIR-FILE]] Install INFO-FILE in the Info directory file DIR-FILE. - (訳注: Info ディレクトリの INO-FILE を DIR-FILE にインストールする) + (訳注: Info ディレクトリの INFO-FILE を DIR-FILE にインストールする) Options: --delete Delete existing entries in INFO-FILE; don't insert any new entries. (訳注: INFO-FILE の中の項目を削除, 新しい項目は一切追加しない.) : --entry=TEXT Insert TEXT as an Info directory entry. (訳注: TEXT を Info ディレクトリの項目として追加する.) : --section=SEC Put this file's entries in section SEC of the directory. (訳注: このファイルの項目を Info ディレクトリの SEC というセクションに置く.) : このプログラムは, 実際には info ファイルをインストールしません. 単に dir ファイルにエントリを挿入したり削除したりするだけです. - + これから, install-info を使用するように, ports を変換する 7 段階の工程を示します. 例として editors/emacs を使用します. - + まず, texinfo のソースを見て, @dircategory@direntry 文がないファイルについて, それらを追加するパッチを作成します. 以下は, ここでの例での patchの一部です: - - ---- ./man/vip.texi.org Fri Jun 16 15:31:11 1995 -+++ ./man/vip.texi Tue May 20 01:28:33 1997 + + --- ./man/vip.texi.org Fri Jun 16 15:31:11 1995 ++++ ./man/vip.texi Tue May 20 01:28:33 1997 @@ -2,6 +2,10 @@ - + @setfilename ../info/vip @settitle VIP +@dircategory The Emacs editor and associated tools +@direntry -+* VIP: (vip). A VI-emulation for Emacs. ++* VIP: (vip). A VI-emulation for Emacs. +@end direntry - + @iftex @finalout : フォーマットについては見ればわかると思います. dir というファイルに必要な項目を書いておいてくれる作者も多いので, まず自分で書く前にさがしてみてください. また, 関係する ports も調べて, セクションの名前やインデントなどがきちんと合っているかどうかを確認してください (項目のテキスト は, すべて 4 つめのタブ・ストップ (tab stop) から始めることを推奨します). - + 一つファイルに対して一つの info の項目しか書けないことに注意してください. これは install-info --delete のバグにより @direntry セクションに複数の項目を書いても初めの一つの項目しか削除してくれないからです. - + texinfo のソースにパッチを適用する代わりに dir の項目を install-info の引数 - ((, - ) - として与えることもできますが, - これはあまり良い方法とは思えません. + (, ) + として与えることもできますが, あまり良い方法とは言えません. なぜなら同じ情報を三つの場所 (Makefile, - PLIST の + pkg-plist@exec/@unexec: 以下参照) に重複して書く必要があるからです. しかし, もし日本語 (あるいは, 他のマルチバイト文字)の info ファイルがある場合には install-info の特別な引数を使用する必要があるでしょう. なぜなら makeinfo がこのような texinfo ソースファイルを扱えないからです. (このようなものをどう扱うかの例としては japanese/skkMakefile と - PLIST を見てください). + pkg-plist を見てください). - + portのディレクトリに戻って make clean; make を実行し, info ファイルが texinfo ソースファイルから再び生成されることを確認してください. texinfo ソースファイルのほうが info ファイルよりも新しいので make と入力すれば info ファイルは再構築されるはずですが, 多くの Makefile には info ファイルの正しい依存関係が書かれていません. - emacs の場合, - info ファイルの再構築ため - man - サブディレクトリに降りていくようにするためにメインの - Makefile.in - にパッチを適用する必要がありました. - - ---- ./Makefile.in.org Mon Aug 19 21:12:19 1996 -+++ ./Makefile.in Tue Apr 15 00:15:28 1997 + emacs の場合, info ファイルの再構築の際には + man サブディレクトリに降りるように + メインの Makefile.in に + パッチを適用する必要がありました. + + --- ./Makefile.in.org Mon Aug 19 21:12:19 1996 ++++ ./Makefile.in Tue Apr 15 00:15:28 1997 @@ -184,7 +184,7 @@ # Subdirectories to make recursively. `lisp' is not included # because the compiled lisp files are part of the distribution # and you cannot remake them without installing Emacs first. -SUBDIR = lib-src src +SUBDIR = lib-src src man - + # The makefiles of the directories in $SUBDIR. SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile ---- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996 -+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997 +--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996 ++++ ./man/Makefile.in Tue Apr 15 00:29:52 1997 @@ -66,6 +66,7 @@ - ${srcdir}/gnu1.texi \ - ${srcdir}/glossary.texi - + ${srcdir}/gnu1.texi \ + ${srcdir}/glossary.texi + +all: info info: $(INFO_TARGETS) - + dvi: $(DVI_TARGETS) man - サブディレクトリでのデフォルトターゲットは, - info で呼ばれるのに対して, - メインの Makefile では, - all で呼びたいので, - 二つ目のpatchが必要でした. + メインの Makefile からは, + all として呼びたいのですが, + サブディレクトリでのデフォルトターゲットは + info になっています. + このため, 二つ目のパッチが必要になります. また, info info ファイルのインストールも削除しました. - なぜなら, 同じものが同じ名前ですでに + なぜなら, それは同じ名前ですでに /usr/share/info にあるからです - (このパッチはここにはありません). + (そのパッチはここでは示しません). - + もし, Makefiledir ファイルをインストールする個所があれば削除します. あなたの port がインストールしてはいけません. また, dir ファイルを壊してしまうようなコマンドの類も削除します. - ---- ./Makefile.in.org Mon Aug 19 21:12:19 1996 -+++ ./Makefile.in Mon Apr 14 23:38:07 1997 + --- ./Makefile.in.org Mon Aug 19 21:12:19 1996 ++++ ./Makefile.in Mon Apr 14 23:38:07 1997 @@ -368,14 +368,8 @@ - if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \ - then \ - (cd ${infodir}; \ -- if [ -f dir ]; then \ -- if [ ! -f dir.old ]; then mv -f dir dir.old; \ -- else mv -f dir dir.bak; fi; \ -- fi; \ - cd ${srcdir}/info ; \ -- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \ -- (cd $${thisdir}; chmod a+r ${infodir}/dir); \ - for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \ - (cd $${thisdir}; \ - ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \ - chmod a+r ${infodir}/$$f); \ + if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \ + then \ + (cd ${infodir}; \ +- if [ -f dir ]; then \ +- if [ ! -f dir.old ]; then mv -f dir dir.old; \ +- else mv -f dir dir.bak; fi; \ +- fi; \ + cd ${srcdir}/info ; \ +- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \ +- (cd $${thisdir}; chmod a+r ${infodir}/dir); \ + for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \ + (cd $${thisdir}; \ + ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \ + chmod a+r ${infodir}/$$f); \ (これは, 既存のportを修正するときのみ必要です.) - pkg/PLIST を見て, + pkg-plist を見て, info/dir にパッチをあてようとするものすべてを削除します. これらは - pkg/INSTALL + pkg-install やその他のファイルにもあるかもしれないので, いろいろさがしてみてください. - -Index: pkg/PLIST + Index: pkg-plist =================================================================== -RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v +RCS file: /usr/cvs/ports/editors/emacs/pkg/pkg-plist,v retrieving revision 1.15 -diff -u -r1.15 PLIST ---- PLIST 1997/03/04 08:04:00 1.15 -+++ PLIST 1997/04/15 06:32:12 +diff -u -r1.15 pkg-plist +--- pkg-plist 1997/03/04 08:04:00 1.15 ++++ pkg-plist 1997/04/15 06:32:12 @@ -15,9 +15,6 @@ man/man1/emacs.1.gz man/man1/etags.1.gz man/man1/ctags.1.gz -@unexec cp %D/info/dir %D/info/dir.bak -info/dir -@unexec cp %D/info/dir.bak %D/info/dir info/cl info/cl-1 info/cl-2 - + post-install ターゲットを Makefile に加えてインストールされた info ファイルについては, install-info を実行するようします (dir ファイルが存在しない場合にそれを作成するようにする必要はなくなりました. install-info はこのファイルが存在しなければ自動的に作成します). - - -Index: Makefile + + Index: Makefile =================================================================== RCS file: /usr/cvs/ports/editors/emacs/Makefile,v retrieving revision 1.26 diff -u -r1.26 Makefile ---- Makefile 1996/11/19 13:14:40 1.26 -+++ Makefile 1997/05/20 10:25:09 1.28 +--- Makefile 1996/11/19 13:14:40 1.26 ++++ Makefile 1997/05/20 10:25:09 1.28 @@ -20,5 +20,11 @@ post-install: .for file in emacs-19.34 emacsclient etags ctags b2m - strip ${PREFIX}/bin/${file} + strip ${PREFIX}/bin/${file} .endfor +.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode -+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir ++ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir +.endfor - + .include <bsd.port.mk> - PLIST を編集して, 同じ働きをする - @exec 文, + pkg-plist を編集して, 同じ働きをする + @exec 文, それに pkg_delete のために @unexec 文を加えてください. - -Index: pkg/PLIST + Index: pkg-plist =================================================================== -RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v +RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v retrieving revision 1.15 -diff -u -r1.15 PLIST ---- PLIST 1997/03/04 08:04:00 1.15 -+++ PLIST 1997/05/20 10:25:12 1.17 +diff -u -r1.15 pkg-plist +--- pkg-plist 1997/03/04 08:04:00 1.15 ++++ pkg-plist 1997/05/20 10:25:12 1.17 @@ -16,7 +14,14 @@ man/man1/etags.1.gz man/man1/ctags.1.gz +@unexec install-info --delete %D/info/emacs %D/info/dir : +@unexec install-info --delete %D/info/ccmode %D/info/dir info/cl info/cl-1 @@ -87,6 +94,18 @@ info/viper-3 info/viper-4 +@exec install-info %D/info/emacs %D/info/dir : +@exec install-info %D/info/ccmode %D/info/dir libexec/emacs/19.34/i386--freebsd/cvtmail libexec/emacs/19.34/i386--freebsd/digest-doc @unexec install-info --delete コマンドは info ファイル自身より先に置き, コマンドがファイルを読めるようにしておかなければならないことに注意してください. また @exec install-info コマンドは, info ファイルおよび dir ファイルを作る @exec コマンドより後におかなければなりません. - + テスト をして出来栄えに感服しましょう :) 各段階の前後に dir ファイルをチェックしましょう. - + - <filename>pkg/</filename> サブディレクトリ - - まだ触れていない, - いくつかのこつが pkg/ - サブディレクトリにはあり, 時として便利でしょう. - + <filename>pkg-<replaceable>*</replaceable></filename> ファイル + + pkg-* ファイルには, + まだ取り上げていない何かと重宝なトリックがいくつかあります. + - <filename>MESSAGE</filename> - + <filename>pkg-message</filename> + もしインストールする人にメッセージを表示する必要がある場合には, そのメッセージを - pkg/MESSAGE に置くことができます. + pkg-message に置くことができます. この機能は pkg_add の後の追加のインストール手続きを表示するときなどに重宝します. - + - pkg/MESSAGE ファイルは - pkg/PLIST に加える必要はありません. + pkg-message ファイルは + pkg-plist に加える必要はありません. また, もしユーザが package ではなく port を使用している場合には自動的には表示されませんので, 明示的に post-install で表示するようにするべきでしょう. - + - <filename>INSTALL</filename> - + <filename>pkg-install</filename> + バイナリパッケージが pkg_add - でインストールされるときに実行される必要があるコマンドがあれば, - pkg/INSTALL + でインストールされるときに実行する必要のあるコマンドがあれば, + pkg-install スクリプトを使って実行することができます. このスクリプトは自動的に package に加えられ, - pkg_add によって二回実行されます. - はじめは - INSTALL ${PKGNAME} PRE-INSTALL - と実行され, 二回目には - INSTALL ${PKGNAME} POST-INSTALL - と実行されます. + pkg_add によって 2 回実行されます. + 1 回目は + ${SH} pkg-install ${PKGNAME} PRE-INSTALL + として, 2 回目には + ${SH} pkg-install ${PKGNAME} POST-INSTALL + として実行されます. どちらのモードで実行されているかは $2 を調べることによってわかります. 環境変数 PKG_PREFIX には package がインストールされるディレクトリが設定されます. 詳細は &man.pkg.add.1; を見てください. - + port を make install でインストールするときにはこのスクリプトは自動的に実行されません. もし実行される必要があるならば port の Makefile から明示的に呼ぶ必要があります. - + - <filename>REQ</filename> - - port が - (インストールされるシステムの状態によって) - インストールされるべきか, - されないべきか区別する必要があるときには, - 要件(requirements) スクリプト - pkg/REQ を作ることができます. - これはインストールおよび削除 - (package の削除) - の時に自動的に実行され, - それらが処理されるべきかを決定します. + <filename>pkg-req</filename> + + (訳注: 実行されるマシンの状態に応じて) その port を + インストールするべきか, そうでないかを判断する必要があるときには, + 要件 (requirements) スクリプト + pkg-req を作ることができます. + インストールや削除を実行すべきかどうか判断するために, + このスクリプトがインストールや削除を実行する際に自動的に + 実行されます. + + このスクリプトはインストール時には pkg_add により + pkg-req ${PKGNAME} INSTALL として実行され, + 削除時には pkg_delete により + pkg-req ${PKGNAME} DEINSTALL として + 実行されます. - + make の変数にあわせた - <filename>PLIST</filename> の変更 - + pkg-plist の変更 + いくつかの port, 特に p5-ports などは configure のオプション (あるいは, p5-ports の場合は perl のバージョン) によって - PLIST を変える必要があります. + pkg-plist を変える必要があります. これを容易に実現するために - PLIST 中の + pkg-plist 中の %%OSREL%%, %%PERL_VER%%, %%PERL_VERSION%% は適切に置き換えられるようになっています. %%OSREL%% の値はオペレーティングシステムの数字で表されたリビジョンです (たとえば 2.2.7). %%PERL_VERSION%% は perl のバージョン番号全体 (たとえば 5.00502) で, %%PERL_VER%% はバージョン番号からパッチレベルを引いたものです (たとえば 5.005). - + 他の置き換えが必要であれば, PLIST_SUB 変数に VAR=VALUE という形式のペアのリストを設定することによって, - PLIST 中の + pkg-plist 中の %%VAR%%VALUE に置き換えられます. たとえばバージョンに固有のたくさんのファイルをインストールする場合には, Makefile - - -OCTAVE_VERSION= 2.0.13 + + OCTAVE_VERSION= 2.0.13 PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION} と書いて, PLIST 中のバージョン番号が表われるすべてのところに, %%OCTAVE_VERSION%% と書きます. このようにしておけば, port をアップグレードするときに, - 何十行 - (ときとして, 何百行) - も - PLIST + 何十行 (時として, 何百行) も + pkg-plist を書き替えないですみます. - + この書き換えは (マニュアルの追加も) do-installpost-install ターゲットの間に - PLIST を読み + pkg-plist を読み TMPPLIST (デフォルトは WRKDIR/.PLIST.mktmp) に書き込むことによって行なわれます. もし, あなたの port が PLIST を実行時に生成するのであれば, do-install - の間かその前に行うようにしてください. + の間かその前に行なうようにしてください. また, 書きかえられたあとのファイルを編集する必要がある場合には, post-installTMPPLIST を書きかえてください. - + - <filename>pkg</filename> - サブディレクトリにあるファイル名の変更 - - pkg - サブディレクトリにあるファイルはすべて変数を使用して定義されていますので, + <filename>pkg-<replaceable>*</replaceable></filename>ファイルの名前変更 + + pkg-*ファイルの + 名前はすべて変数を使用して定義されていますので, 必要であれば Makefile 中で変更可能です. いくつかの ports で一つの - pkg - サブディレクトリを共有する場合や, - 上記のファイルに書き込む必要があるときなど特に便利です - (pkg + pkg-* + ファイルを共有する場合や, + 上記のファイルに書き込みをしなければならないときなど特に便利です + (pkg-* サブディレクトリに直接書き込むのが良くない理由については WRKDIR 以外への書きこみ を参照してください). - - 以下が変数名とそのデフォルト値の表です. - + + 以下に変数名と そのデフォルト値のリストを示します. + (PKGDIR のデフォルト値は + ${MASTERDIR} になっています.) + 変数名 デフォルト値 - + COMMENT - ${PKGDIR}/DESCR + ${PKGDIR}/pkg-comment - + DESCR - ${PKGDIR}/DESCR + ${PKGDIR}/pkg-descr - + PLIST - ${PKGDIR}/PLIST + ${PKGDIR}/pkg-plist - + PKGINSTALL - ${PKGDIR}/INSTALL + ${PKGDIR}/pkg-install - + PKGDEINSTALL - ${PKGDIR}/DEINSTALL + ${PKGDIR}/pkg-deinstall - + PKGREQ - ${PKGDIR}/REQ + ${PKGDIR}/pkg-req - + PKGMESSAGE - ${PKGDIR}/MESSAGE + ${PKGDIR}/pkg-message - + PKG_ARGS を上書きせずにこれらの変数を変更するようにしてください. PKG_ARGS を変更すると, これらのファイルは port から正しく /var/db/pkg にインストールされなくなります. - + ライセンス上の問題 - - ソフトウェアによっては制限の厳しい - ライセンスがついてきたり, - 法律的に問題があるかも知れません - (PKP の公開鍵暗号の特許, - ITAR (暗号化ソフトウェアの輸出) - などが例としてあげられます). - それらをどう扱えばいいかは, - ライセンスの文面によってさまざまな場合があります. - + + ソフトウェアによっては, 制約の厳しいライセンス条件が + 定められている場合もありますし, + 国によっては (特許権の侵害などで) 法律的に問題がある可能性もあります. + それらをどう扱えばいいかは, それぞれのライセンスの文面によって + 大きく異なります. + ソフトウェア移植者として, あなたにはライセンスをよく読み FreeBSD プロジェクトが FTP または CD-ROM で配布してはいけないソフトウェアを配布してしまうことのないよう注意する義務があります. 何か疑問がある場合には &a.ports; に聞いてみてください. - + よく見られるケースに対処するために, Makefile に指定できる二つの変数が用意されています. - + ソフトウェアに有償再配布を禁ずるという趣旨のライセン スがついてきた場合には, NO_CDROM という変数にその理由を記述してください. わたしたちはこれがついている port を - CD-ROM リリースに入れないようにしますが, + CDROM リリースに入れないようにしますが, オリジナルのソースファイルと package を FTP で取れるようにしておきます. - + もし生成される package が個々のサイトで独自に構築される必要があったり, ライセンスによって生成されるバイナリが配布できない場合には NO_PACKAGE 変数にその理由を記述してください. そのような package は FTP サイトに置かれたり, - リリース 時の CD-ROM へ入らないようにします. + リリース 時の CDROM へ入らないようにします. ただし, いずれの場合も - distfile は (FTP や CD-ROM に) + 配布ファイルは (FTP や CD-ROM に) 含まれるようになります. - + - 使用者によっては法律上の問題が生じる port - (暗号化ソフトウェアなど) - の場合, - あるいは商用利用を禁ずるとライセンスに書いてある場合には, - RESTRICTEDという変数にその理由を入れてください. - この場合には, ソースファイルや package - が FreeBSD の FTP サイトにも置かれなくなります. + (特許などの関係で) 使用者によっては法律上の問題が生じたり, + 商用利用を禁ずるライセンスを持つ port の場合には, + その理由を RESTRICTED という変数に入れてください. + このような port の場合には, 配布ファイルや package も + FreeBSD の FTP サイトに置かれないようになります. - + GNU 一般公有使用許諾書 (GPL) は, バージョン 1, 2 とも port 作成上何ら問題にはなりません. - + もしあなたがソースツリー管理者 (committer) であれば, ソースツリーにこのような port を入れる際に ports/LEGAL ファイルを書き換えるのを忘れないようにしてください. - + アップグレード - + port のバージョンが原作者からのものに比べて古いことに気がついたら, まずはあなたの持っている port が私たちの最新のもの - (ミラーサイトの ports/ports-current + (FTP ミラーサイトの ports/ports-current というディレクトリにあります) であることを確認してください. また, Ports Collection 全体を最新の状態に保つために CVSup を利用することもできます. 詳しくは FreeBSD ハンドブックをご覧ください. - + 次に port の MakefileMAINTAINER (保守担当者) のアドレスが書いてある場合には, その人にメールを出してみましょう. 保守担当者の人がすでにアップグレードの準備をしているかも知れませんし, (新しいバージョンの安定度に問題があるなど) あえてアップグレードをしない理由があるのかも知れません. - + 保守担当者にアップグレードをしてくれと頼まれた場合, あるいは, そもそも port の Makefile に保守担当者が書いてない場合などは, あなたがアップグレードをしてくださると助かります. その場合にはアッ プグレードをした後, 変更前と変更後のディレクトリの再帰的 diff (unified diff と context diff のどちらでもいいのですが, port のコミッター達は unified diff の方を好むようです) をとって送ってください (たとえば変更前のディレクトリが superedit.bak という名前でとってあり, 変更後のものが superedit に入っているなら, diff -ruN superedit.bak superedit の結果を送ってください). diff の出力を見て, すべての変更が正しくなされているか確認してください. 変更箇所については, &man.send-pr.1; (カテゴリは ports) に diff の出力結果を添えて, わたしたちに送ってもらうのが一番良いです. commit する際に CVS に明確に記述しなければならないので, 付け加えたり削除したりしたファイルがあればそれについて書いておいてください. もし diff の大きさが 20 KB 程度を超えるようであれば, 圧縮したものを uuencode してください. そうでなければそのまま PR に入れるだけで構いません. 繰り返しになりますが, 既存の ports の変更を送るときには &man.shar.1; ではなく &man.diff.1; を使用してください! - + やっていいことといけないこと - - この節ではソフトウェアを port する上で, + + このセクションではソフトウェアを port する上で, 良くある落し穴などについて説明します. このリストを使ってあなた自身が作成した port のチェックはもとより, PR データベースにある, 他の人が作成した port のチェックもできます. あなたがチェックした port についてのコメントをバグ報告と一般的な論評にしたがって送ってください. PR データベースにある port をチェックすると, わたしたちがそれらを commit するのを早くし, あなたが何をしているか理解していることも示します. - + バイナリの strip - + バイナリは strip してください. オリジナルのソースがバイナリを strip してくれる場合は良いですが, そうでない場合には port の Makefileinstall ターゲットを持っているなら BSD_INSTALL_PROGRAM を, 持っていないなら strip するための post-install ルールを追加して strip するようにするとよいでしょう. たとえばこんな風になります: - - -post-install: + + post-install: strip ${PREFIX}/bin/xdl インストールされた実行形式がすでに strip されているかどうかは file コマンドで確認できます. not stripped と表示されなければ strip されていることを示しています. - + <makevar>INSTALL_*</makevar> マクロ - + あなた自身の *-install ターゲットでファイルの正しいモードとオーナを保証するために, 必ず bsd.port.mk で提供されているマクロを使用してください. - + ${INSTALL_PROGRAM} は実行可能なバイナリをインストール (し, その過程で strip 処理)するコマンドです. - + ${INSTALL_SCRIPT} は実行可能なスクリプトをインストールするコマンドです. - + ${INSTALL_DATA} は共有可能なデータをインストールするコマンドです. - + ${INSTALL_MAN} はマニュアルとその他の文書をインストールするコマンドです (圧縮はしません). - + これらは基本的に install コマンドに適切なフラグを与えたものです. それらは distfile の Makefile で, 頭に BSD_ が付けられた (つまり BSD_INSTALL_PROGRM というような) 形で使うことができます. どのようにこれらを使用するかは以下の例を見てください. <makevar>WRKDIR</makevar> - - WKRDIR - の外のファイルにはなにも書き込まないように - してください. - WRKDIR は - ports のビルド中に書き込こめることが保証されている唯一の場所です - (CDROM からの ports - のコンパイル を参照). - PKGDIR - にあるファイルを修正する必要があるときには変数の再定義によって行ない, - 上書きはしないでください. + + WRKDIR の外に存在するファイルには + 何も書き込んではいけません. + port のビルド中に書き込み可能なことが保証されているのは + WRKDIR の中だけです (書き込み不可のツリー上での + port ビルドの例については, + CDROM からの + ports のコンパイル を参照のこと). + pkg-* ファイルを + 変更する必要があるときには, ファイルを上書きするのではなく + 変数の再定義により + 行なうようにしてください. - + <makevar>WRKDIRPREFIX</makevar> - + WRKDIRPREFIX を尊重していることを確認してください. 特に, 別の port の WRKDIR を参照しているときには気を付けてください. 正しい場所は, WRKDIRPREFIXPORTSDIR/subdir/name/work です, PORTSDIR/subdir/name/work.CURDIR/../../subdir/name/work ではありません. - + また, 自分で WRKDIR 定義するときには先頭に ${WRKDIRPREFIX}${.CURDIR} が付いていることを確認してください. - + - OS や OS のバージョンの区別 - - port の過程で, - 修正やどのバージョンの UNIX - で動くかによる条件つきコンパイルなどが必要なコードに出会うかも知れません. - そのような条件つきコンパイルなどのための変更を行なうときには - FreeBSD 1.x システムへの移植や - CSRG の 4.4BSD, BSD/386, 386BSD, NetBSD, OpenBSD などの, + OS の種類やバージョンの識別 + + どのバージョンの Unix で動かすかによって, 変更や + 条件つきコンパイルが必要なコードに出くわすこともあるでしょう. + そのような変更を行なう場合には, + FreeBSD 1.x システムへのバックポートや, + CSRG の 4.4BSD, BSD/386, 386BSD, NetBSD, OpenBSD 等, 他の BSD システムへの移植が可能なように, できるだけ汎用的な変更を行なうことを心がけてください. - - 4.3BSD/Reno (1990) - およびそれより新しい BSD のバージョンを古いバージョンと区別するには + + 4.3BSD/Reno (1990) と, それより新しいバージョンの BSD コードを + 区別するには, <sys/param.h> で定義されている BSD マクロを利用するのがよいでしょう. - これは <sys/param.h> で定義されています. このファイルがすでにインクルードされていれば良いのですが, - もしそうでない場合には, - 以下のコードをその - .c - ファイルの適当な場所に加えてください. - - -#if (defined(__unix__) || defined(unix)) && !defined(USG) + そうでない場合には, その .c ファイルの + 適当な場所に以下のコードを追加してください. + + #if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif これらの二つのシンボルが定義されているシステムには必ず sys/param.h があるはずです. もしそうでないシステムを発見したら, &a.ports; までメールを送ってわたしたちに伝えてください. - + あるいは, GNU Autoconf のスタイルを使用することもできます, - - -#ifdef HAVE_SYS_PARAM_H + + #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif この方法を使用するときには, Makefile 中の CFLAGS-DHAVE_SYS_PARAM_H を加えることを忘れないようにしてください. - + いったん sys/param.h がインクルードされると, - -#if (defined(BSD) && (BSD >= 199103)) + #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)) + + #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, あるいは FreeBSD 3.x システムを区別する必要があれば, 上で述べた BSD マクロを使用するのが大抵の場合において正しい答です. もし FreeBSD 特有の変更であれば (ld を使うときの共有ライブラリ用のオプションなど), __FreeBSD__を使い #if __FreeBSD__ > 1 のようにFreeBSD 2.x および, それ以降のシステムを検出するのはかまいません. もし 2.0-RELEASE 以降の FreeBSD システムを細かく検出したければ, 以下を使用することができます. - - -#if __FreeBSD__ >= 2 + + #if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif Release __FreeBSD_version - + 2.0-RELEASE 119411 - + 2.1-CURRENT 199501, 199503 - + 2.0.5-RELEASE 199504 - + 2.1 以前の 2.2-CURRENT 199508 - + 2.1.0-RELEASE 199511 - + 2.1.5 以前の 2.2-CURRENT 199512 - + 2.1.5-RELEASE 199607 - + 2.1.6 以前の 2.2-CURRENT 199608 - + 2.1.6-RELEASE 199612 - + 2.1.7-RELEASE 199612 - + 2.2-RELEASE 220000 - + 2.2.1-RELEASE - 220000 (2.2-RELEASE と同じです) + 220000 (変更なし) - + - 2.2.1-RELEASE 以後の 2.2-STABLE - 220000 (これも同じです) + 2.2.1-RELEASE 以降の 2.2-STABLE + 220000 (変更なし) - + - texinfo-3.9 以後の 2.2-STABLE + texinfo-3.9 以降の 2.2-STABLE 221001 - + - top 導入以後の 2.2-STABLE + top 導入以降の 2.2-STABLE 221002 - + 2.2.2-RELEASE 222000 - + - 2.2.2-RELEASE 以後の 2.2-STABLE + 2.2.2-RELEASE 以降の 2.2-STABLE 222001 - + 2.2.5-RELEASE 225000 - + - 2.2.5-RELEASE 以後の 2.2-STABLE + 2.2.5-RELEASE 以降の 2.2-STABLE 225001 - + - ldconfig -R 以後の 2.2-STABLE + ldconfig -R マージ以降の 2.2-STABLE 225002 - + 2.2.6-RELEASE 226000 - + 2.2.7-RELEASE 227000 - + - 2.2.7-RELEASE 以後の 2.2-STABLE + 2.2.7-RELEASE 以降の 2.2-STABLE 227001 - + - semctl(2) 変更後の 2.2-STABLE + &man.semctl.2; 変更以降の 2.2-STABLE 227002 - + 2.2.8-RELEASE 228000 - + - 2.2.8-RELEASE 以後の 2.2-STABLE + 2.2.8-RELEASE 以降の 2.2-STABLE 228001 - + - mount(2) 変更以前の 3.0-CURRENT + &man.mount.2; 変更以前の 3.0-CURRENT 300000 - - + + - mount(2) 変更以後の 3.0-CURRENT + &man.mount.2; 変更以降の 3.0-CURRENT 300001 - + - semctl(2) 変更以後の 3.0-CURRENT + &man.semctl.2; 変更以降の 3.0-CURRENT 300002 - + - ioctl 引数変更後の 3.0-CURRENT + ioctl 引数変更以降の 3.0-CURRENT 300003 - ELF 移行後の 3.0-CURRENT + ELF 化以降の 3.0-CURRENT 300004 - + 3.0-RELEASE 300005 - + - 3.0-RELEASE 以後の 3.0-CURRENT + 3.0-RELEASE 以降の 3.0-CURRENT 300006 - + - 3/4 の分岐後の 3.0-STABLE + 3/4 の分岐以降の 3.0-STABLE 300007 - + 3.1-RELEASE 310000 - + - 3.1-RELEASE 以後の 3.1-STABLE + 3.1-RELEASE 以降の 3.1-STABLE 310001 - + - C++ コンストラクタ/デストラクタ順序変更後の + C++ コンストラクタ/デストラクタ順序変更の後の 3.1-STABLE 310002 - + 3.2-RELEASE 320000 - + 3.2-STABLE 320001 - + バイナリ互換性のない IPFW とソケットの変更後の 3.2-STABLE 320002 - + 3.3-RELEASE 330000 - + 3.3-STABLE 330001 - + - libc へ mkstemps() が追加された後の 3.3-STABLE + libc に &man.mkstemp.3; が追加された後の 3.3-STABLE 330002 - + 3.4-RELEASE 340000 - + 3.4-STABLE 340001 - + - 3.4 の分岐後の 4.0-CURRENT + 3.4 が分岐した後の 4.0-CURRENT 400000 - + dynamic linker の変更後の 4.0-CURRENT 400001 - + - C++ コンストラクタ/デストラクタ順序変更後の + C++ コンストラクタ/デストラクタ順序変更の後の 4.0-CURRENT 400002 - + - dladdr(3) 機能追加後の 4.0-CURRENT + &man.dladdr.3; 機能追加後の 4.0-CURRENT 400003 - + __deregister_frame_info dynamic linker のバグ修正, EGCS 1.1.2 導入後の 4.0-CURRENT 400004 - + - suser(9) の API 変更, newbus 後の 4.0-CURRENT - + &man.suser.9; の API 変更, newbus 化 + 以降の 4.0-CURRENT 400005 - + cdevsw 登録方法の変更後の 4.0-CURRENT 400006 - + - ソケットレベルの証明書 (credential) のための - so_cred への追加後の 4.0-CURRENT + ソケットレベルの証明書 (credential) のために + so_cred が追加された後の 4.0-CURRENT 400007 - + libc_r への poll syscall ラッパー追加後の 4.0-CURRENT 400008 - + kernel の dev_t 型から struct spacinfo ポインタへの - 変更後の 4.0-CURRENT - + 変更後の 4.0-CURRENT 400009 - jail(2) のセキュリティホール修正後の 4.0-CURRENT + &man.jail.2; のセキュリティホール + 修正後の 4.0-CURRENT 400010 - + - sigset_t - のデータ型変更後の 4.0-CURRENT - 400011 + sigset_t の + データ型変更後の 4.0-CURRENT + 400011 - + - システムコンパイラを gcc 2.95.2 にアップグレードした後の - 4.0-CURRENT + システムコンパイラを gcc 2.95.2 にアップグレードした + 後の 4.0-CURRENT 400012 - + - 追加可能な Linux モードの ioctl ハンドラが追加された後の - 4.0-CURRENT + 動的組み込み可能な Linux モードの ioctl ハンドラが + 追加された後の 4.0-CURRENT 400013 - + - OpenSSL が導入された後の 4.0-CURRENT + OpenSSL 導入後の 4.0-CURRENT 400014 - + GCC 2.95.2 の C++ ABI 変更で, - デフォルトが -fvtable-thunks から -fno-vtable-thunks に変更された後の - 4.0-CURRENT + デフォルトを -fvtable-thunks から -fno-vtable-thunks に + 変更した後の 4.0-CURRENT 400015 - + - OpenSSH が導入された後の 4.0-CURRENT + OpenSSH 導入後の 4.0-CURRENT 400016 - + 4.0-RELEASE - 400017 + 400017 - + - 4.0-RELEASE より後の 4.0-STABLE + 4.0-RELEASE 以降の 4.0-STABLE 400018 - + libxpg4 が libc にマージされた後の 4.0-STABLE 400020 - Binutils の 2.10.0 へのアップグレードと - ELF バイナリのマーク付け (branding) 方法の変更, - ベースシステムへの tcsh の導入後の - 4.0-STABLE - 400021 + Binutils を 2.10.0 にアップグレードし, + ELF バイナリのマーク付け (branding) 方法を変更し, + tcsh をベースシステムに導入した後の + 4.0-STABLE + 400021 + + + + 4.1-RELEASE + 410000 + + + + 4.1-RELEASE 以降の 4.1-STABLE + 410001 + + + + &man.setproctitle.3; が libutil から libc に + 移動した後の 4.1-STABLE + 410002 + + + + 4.1.1-RELEASE + 411000 + + + + 4.1.1-RELEASE 以降の 4.1.1-STABLE + 411001 + + + + 4.2-RELEASE + 420000 + + + + libgcc.a と libgcc_r.a の結合および, 関連する + GCC linkage 変更が行なわれた後の 4.2-STABLE + 420001 + + + + 4.3-RELEASE + 430000 + + + + wint_t 導入後の 4.3-STABLE + 430001 + + + + PCI パワーステート API マージ後の 4.3-STABLE + 430002 + + + + 5.0-CURRENT + 500000 + + + + ELF ヘッダフィールドの追加と ELF バイナリのマーク付け + (branding) 方法の変更後の 5.0-CURRENT + 500001 + + + + kld メタデータ変更後の 5.0-CURRENT + 500002 + + + + buf/bio 変更後の 5.0-CURRENT + 500003 + + + + binutils アップグレード後の 5.0-CURRENT + 500004 + + + + libxpg4 コードの libc へのマージと, + TASKQ インターフェイスの導入後の 5.0-CURRENT + 500005 + + + + AGP インターフェイス追加後の 5.0-CURRENT + 500006 + + + + Perl を 5.6.0 にアップグレードした後の + 5.0-CURRENT + 500007 + + + + KAME コードを 2000/07 版のソースに更新した後の + 5.0-CURRENT + 500008 + + + + ether_ifattach() および + ether_ifdetach() 変更後の 5.0-CURRENT + 500009 + + + + mtree のデフォルトをオリジナルの変種に戻し, + シンボリックリンクをたどる -L オプションを追加した後の + 5.0-CURRENT + 500010 + + + + kqueue API 変更後の 5.0-CURRENT + 500011 - + - 5.0-CURRENT - 500000 + &man.setproctitle.3; が libutil から libc + へ移動した後の 5.0-CURRENT + 500012 - ELF ヘッダフィールドの追加と ELF バイナリのマーク付け - (branding) 方法の変更後の 5.0-CURRENT - 500001 + 最初の SMPng がコミットされた後の + 5.0-CURRENT + 500013 - + - kld メタデータ変更後の 5.0-CURRENT - 500002 + <sys/select.h> が <sys/selinfo.h> に + 移動した後の 5.0-CURRENT + 500014 - + - buf/bio 変更後の 5.0-CURRENT - 500003 + libgcc.a と libgcc_r.a の結合および関連する + GCC linkage 変更が行なわれた後の 5.0-CURRENT + 500015 - + - binutils アップグレード後の 5.0-CURRENT - 500004 + libc と libc_r の混合リンクを許し, + -pthread オプションを deprecate する + 変更後の 5.0-CURRENT + 500016 - + - libxpg4 コードの libc へのマージと, - TASKQ インターフェイスの導入後の 5.0-CURRENT - 500005 + mountd 等が使用する kernel-exported API の + 安定化のため, ucred 構造体から xucred 構造体へ + 移行した後の 5.0-CURRENT + 500017 - AGP インターフェイスが追加された後の - 5.0-CURRENT - 500006 + CPU 依存の最適化を制御するための make 変数 + CPUTYPE が追加された後の 5.0-CURRENT + 500018 - + - Perl を 5.6.0 にアップグレードした後の - 5.0-CURRENT - 500007 + <machine/ioctl_fd.h> が + <sys/fdcio.h> に移動した後の 5.0-CURRENT + 500019 - + - KAME コードを 2000/07 版のソースに更新した後の - 5.0-CURRENT - 500008 + ロケール名変更の後の 5.0-CURRENT + 500020 - - ether_ifattach() および - ether_ifdetach() 変更後の 5.0-CURRENT - 500009 - - - mtree のデフォルトをオリジナルの変種に戻し, - シンボリックリンクをたどる -L オプションを追加した後の - 5.0-CURRENT - 500010 + Bzip2 導入後の 5.0-CURRENT + 500021 - - kqueue API 変更後の 5.0-CURRENT - 500011 - - - - setproctitle() が libutil から libc - へ移動した後の 5.0-CURRENT - 500012 - - - - 最初の SMPng がコミットされた後の - 5.0-CURRENT - 500013 - + + SSE サポート後の 5.0-CURRENT + 500022 + - + (2.2-STABLE は 2.2.5-RELESE 以後, 2.2.5-STABLE と呼ばれることがあります.) 見てのとおりこれは年・月というフォーマットになっていましたが, バージョン 2.2 からより直接的にメジャー/マイナー番号を使うように変更になりました. 並行していくつかのブランチ (枝分かれしたバージョン) を開発する場合には, リリースされた日付でそれらのリリースを分類することが不可能だからです (あなたが今 port を作成するときに, 古い -CURRENT 達について心配する必要はありません. これは参考のために挙げられているに過ぎないからです). - + これまで, 何百もの port が作られてきましたが, __FreeBSD__ が正しく使われたのは一つか二つの場合だけでしょう. 以前の port が誤った場所でそのマクロを使っているからといって, それをまねする理由はありません. <filename>bsd.port.mk</filename> の後に書くこと - + .include <bsd.port.mk> の行の後には何も書かないようにしてください. 大抵の場合は Makefile の中程のどこかで bsd.port.pre.mk をインクルードして, 最後に bsd.port.pre.mk をインクルードすることによって避けることができます. - + pre.mk/post.mk のペアか bsd.port.mk だけのどちらかだけをインクルードし, 二つを混ぜないでください. - + 前者はいくつかの変数の定義だけをして Makefile でのテストに使用し, 後者は残りを定義します. 以下は bsd.port.pre.mk で定義される重要な変数です (これは, すべてではありません. 完全なリストは bsd.port.mk を参照してください). - + 変数名 解説 - + ARCH uname -m で返される アーキテクチャ. (例, i386). - + OPSYS - uname -s で返される + uname -s で返される オペレーティングシステム (例, FreeBSD). - + OSREL オペレーティングシステムの リリースバージョン (例., 2.1.5, 2.2.7). - + OSVERSION 数字形式のオペレーティングシステム のバージョン, 上記の __FreeBSD_version と同じです. - + PORTOBJFORMAT システムのオブジェクト フォーマット (aout あるいは elf). - + LOCALBASE local ツリーのベース. (例, /usr/local/). - + X11BASE X11 ツリーのベース. (例, /usr/X11R6/). - + PREFIX ports のインストール先 ( PREFIXについてを参照). - + USE_IMAKE, USE_X_PREFIX あるいは MASTERDIR などの変数を定義する必要がある場合には, bsd.port.pre.mk をインクルード前に定義してください. 他のものは bsd.port.pre.mk の前でも後でもかまいません. - + 以下は bsd.port.pre.mk の後に書けるものの例です. - - -# no need to compile lang/perl5 if perl5 is already in system + + # 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 - + 付加的な文書のインストール - + 普通のマニュアルや info ファイルの他にユーザにとって有用だと思えるような文書がある場合には, PREFIX/share/doc の下にインストールしてください. これは前記と同様 post-install ターゲットの中から行なうと良いでしょう. - + まず, あなたの port のために新しいディレクトリを作ります. どの port の文書か簡単にわかるような名前にする必要がありますので, 普通は PORTNAME を使うと良いでしょう. もちろん, ユーザが異なるバージョンのものを同時に使うことが予想される port の場合には PKGNAME をそのまま使っても構いません. - + ユーザが /etc/make.conf でこの部分を禁止するために NOPORTDOCS という変数をセットしている場合には, これらの文書がインストールされないようにしてください. こんな具合です. - -post-install: + post-install: .if !defined(NOPORTDOCS) ${MKDIR} ${PREFIX}/share/doc/xv ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv .endif - これらのファイルを - pkg/PLIST - に入れるのを忘れないよ うにしてください - (package が - /etc/make.conf - 内の変数を読む方法は今のところ存在しませんので - NOPORTDOCS - については気にしないでください). - + 文書ファイルおよびディレクトリはすべて + pkg-plist の中に + %%PORTDOCS%% を頭につけて書く必要があります. + たとえば, 次のようにしてください. + + %%PORTDOCS%%share/doc/pure-ftpd/AUTHORS +%%PORTDOCS%%share/doc/pure-ftpd/CONTACT +%%PORTDOCS%%@dirrm share/doc/pure-ftpd + インストール時に - pkg/MESSAGE + pkg-message ファイルを利用してメッセージを表示することができます. 詳細は - pkg/MESSAGE を使うの節を参照してください. + pkg-message を使うのセクションを + 参照してください. - MESSAGE + pkg-message ファイルを - pkg/PLIST + pkg-plist に加える必要はありません. - + <makevar>DIST_SUBDIR</makevar> - + /usr/ports/distfiles ディレクトリ内をあまり散らかさないようにしてください. たくさんのファイルを取ってくる port や, 数は少なくても他の port のファイルと混同される恐れがあるファイル (Makefile など) がある場合には, DIST_SUBDIR に port の名前 (${PORTNAME}${PKGNAMEPREFIX}${PORTNAME} を使うといいでしょう) を入れてください. すると DISTDIR がデフォルトの /usr/ports/distfiles から /usr/ports/distfiles/DIST_SUBDIR に変更され, 取ってきたファイルはすべてそのサブディレクトリの中に置かれるようになります. - + また, ファイルを取ってくるときにバックアップサイトとして使われる ftp.FreeBSD.org のディレクトリ名にもこの変数の値が使われます (DISTDIR を明示的に指定した場合, ローカルのファイルを置くところは変わりますが, このサイトのディレクトリ名は変わりません. 必ず DIST_SUBDIR を使うようにしてください). - + この変数は Makefile 中で明示的に指定された MASTER_SITES には影響しないことに注意してください. - + package 情報 - - pkg ディレクトリには必ず, - COMMENT や - DESCR, PLIST - といった package 情報を入れてください. - + + pkg-commentpkg-descr, + pkg-plist といった + package 情報を必ず入れるようにしてください. + これらのファイルはもはや package の作成だけに使われるものではなくなっています. - たとえ NO_PACKAGE - が定義されていたとしても必須であることに注意してください. + たとえ NO_PACKAGEが定義されていたとしても + 必須であることに注意してください. - + RCS 文字列 - - RCS が特別な意味を与えている文字列をパッチ内に入れないようにしてください. + + RCS にとって特別な意味を持つ文字列をパッチ内に入れないようにしてください. ファイルを私たちのソースツリーに入れる時, これらの文字列は CVS によって書き換えられてしまい, 後でまたパッチを使おうとした時にうまくいかないことがあります. - RCS 文字列はドル記号 ($) + RCS 文字列はドル記号 ($) で囲まれており, - $FreeBSD や - $RCS + $FreeBSD や + $RCS などで始まります. - + 再帰的 diff - + diff の再帰 () フラグを使って再帰的なパッチを作るのは大変結構なのですが, でき上がったパッチは必ず目でチェックして余計なゴミが入っていないことを確認してください. よくあるのはバックアップファイル同士の変更点, あるいは Imake や GNU configure を使うソフトウェアの Makefile の変更点が入っている場合などです. また configure.in を編集して autoconf を使って configure を作り直すときには, configure の diff は含めずに (それらは良く数千行におよぶことがあります), USE_AUTOCONF=yes を定義して configure.in の diff をとってください. ファイルをまるごと消す場合には, パッチを使わずに post-extract ターゲットで消す方が簡単です. できあがった差分に満足したら, それらをソースのファイルごとに別々のパッチファイルに分割してください. - + <makevar>PREFIX</makevar> - + なるべく port は PREFIX に対する相対パスにインストールすることができるように心がけてください (この変数の値は USE_X_PREFIXUSE_IMAKE が指定してある時には X11BASE - (デフォルト/usr/X11R6), + (デフォルトは /usr/X11R6), そうでない場合にはLOCALBASE - (デフォルト/usr/local) + (デフォルトは /usr/local) にセットされます). - + サイトによってフリーソフトウェアがインストールされる場所が違いますので, ソース内で /usr/local/usr/X11R6 を明示的に書かないようにしてください. X のプログラムで imake を使うものについては, - + これは問題にはなりません. それ以外の場合にはソース中の Makefile やスクリプトで /usr/local (imake を使わない X のプログラムは /usr/X11R6) と書いてあるところを PREFIX に書き換えてください. この値は port のコンパイルおよび, インストール時に自動的に環境変数として下位 make に渡されます. - - USE_X_PREFIX - は本当に必要な時 - (つまり X のライブラリなどとリンクしたり, - X11BASE 以下にあるファイルを参照したりする必要がある時) - 以外には設定しないでください. - + + そのアプリケーションが PREFIX を + 使用しないで, 何かを直接 /usr/local に + インストールしないことを確認してください. + 以下のようにすると, 簡単なテストを行なうことができます: + + &prompt.root; make clean; make package PREFIX=/var/tmp/port-name + + この時, もし PREFIX の外に + 何かがインストールされていた場合, package 生成プロセスは + ファイルが見つからないと文句を言うはずです. + + + ただし, これは そのソフトウェアが内部で決め打ちの参照を + していないかどうか だとか, 他の port によってインストールされる + ファイルを参照する際に LOCALBASE を + 正しく使用しているかどうかをテストしているわけではありません. + その port を他の場所にインストールした状態で, + /var/tmp/port-name に + 対するインストールを試みることにより, + そのテストをすることができるでしょう. + + USE_X_PREFIX は本当に必要な時 (つまり + X のライブラリをリンクしたり, X11BASE 以下にある + ファイルを参照したりする必要がある時) 以外には + 設定しないでください. + 変数 PREFIX の値は port の Makefile やユーザの環境で変更することもできます. しかし, 個々の port が Makefile でこの変数の値を明示的に設定することはなるべくしないでください. - - また, 他の port からインストールされるプログラムやファイルを指定するときには, + + また, 他の port によりインストールされるプログラムや + ファイルを指定する場合には, 直接的なパス名を使用するのではなく 上で述べた変数を使用してください. たとえば less のフルパスを PAGER というマクロに入れたい場合は, - コンパイラに -DPAGER=\"/usr/local/bin/less\" - と渡すかわりに - -DPAGER=\"${PREFIX}/bin/less\" - (X を使う port の時は - -DPAGER=\"${LOCALBASE}/bin/less\") + というフラグをコンパイラに渡すかわりに + -DPAGER=\"${PREFIX}/bin/less\" + (X Window System を使う port の場合には + -DPAGER=\"${LOCALBASE}/bin/less\") を渡してください. - こうしておけば /usr/local - がまるごとどこか他の場所に移してあるサイトでもあなたの port - がそのまま使える可能性が高くなります. + こうしておけば, システム管理者が /usr/local を + まるごと どこか他の場所に移していたとしても, その port が + そのまま使える可能性が高くなります. - + ディレクトリ構成 - + インストール時には PREFIX の正しいサブディレクトリにファイルを置くように心がけてください. ソフトウェアによっては新しいディレクトリを一つ作って, ファイルを全部それに入れてしまうものがありますが, それは良くありません. また, バイナリ, ヘッダファイルとマニュアル以外のすべてを lib というディレクトリに入れてしまう port もありますが, これも BSD 的なファイルシステム構成からいうと正しくありません. これは以下のように分散すべきです. etc にセットアップ/コンフィグレーションファイル, libexec に内部で使用されるプログラム (コマンドラインから呼ばれることのないコマンド), sbin に管理者用のコマンド, info に GNU Info 用の文書, そして share にアーキテクチャに依存しないファイルが入ります. 詳細については &man.hier.7; のマニュアルページを参照してください. /usr の構成方針はほとんどそのまま /usr/local にもあてはまります. USENET ニュースを扱う ports は例外です. これらはファイルのインストール先として - PREFIX/news - を使用します. + PREFIX/news + を使用します. - + 空のディレクトリの削除 - + ports は削除の際に, 自分自身を消去したあとに (ディレクトリの) 削除をするようにしてください. これは大抵の場合 @dirrm の行を ports が作成するすべてのディレクトリについて加えることによって実現できます. 親ディレクトリは子ディレクトリを先に消さないと消せないことに注意してください. - - - : + + : 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 といった感じです. - + しかし時として, 他の port とディレクトリを共有しているために @dirrm がエラーを返すことがあります. rmdir@unexec から呼びだすことによって, 警告(warning)なしで空のディレクトリのみを削除することができます. - -@unexec rmdir %D/share/doc/gimp 2>/dev/null || true + @unexec rmdir %D/share/doc/gimp 2>/dev/null || true これを使えば, たとえ他の port がファイルをインストールしていて PREFIX/share/doc/gimp が空でない場合でもエラーメッセージは表示されませんし, pkg_delete が異常終了することもありません. - + UID - + あなたの port が, インストールされるシステム上に特定のユーザを必要とする場合は - pkg/INSTALL スクリプトから + pkg-install スクリプトから pw コマンドを実行して自動的にそのユーザを追加するようにしてください. net/cvsup-mirror の port が参考になるでしょう. - + あなたの port がバイナリの package としてインストールされる場合とコンパイルされる場合の両方で, 同じユーザー/グループ ID を使わなければならないのなら, 50 から 99 の間で空いている UID を選んで登録してください. japanese/Wnn の port が参考になるでしょう. - + 既にシステムや他の port で利用されている UIDを使わないように十分注意してください. 現在の 50 から 99 までの間の UID は以下のとおりです. - - -majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent + + majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent pop:*:68:6:Post Office Owner (popper):/nonexistent:/nonexistent wnn:*:69:7:Wnn:/nonexistent:/nonexistent ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent qmaill:*:83:81:QMail user:/var/qmail:/nonexistent qmaild:*:82:81:QMail user:/var/qmail:/nonexistent qmailq:*:85:82:QMail user:/var/qmail:/nonexistent qmails:*:87:82:QMail user:/var/qmail:/nonexistent qmailp:*:84:81:QMail user:/var/qmail:/nonexistent qmailr:*:86:82:QMail user:/var/qmail:/nonexistent msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh -mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin +mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin +vpopmail:*:89:89::0:0:User &:/usr/local/vpopmail:/nonexistent このリストを最新の状態に保つためにも, この範囲の UID や GID を予約するような port を作ったり, - 既存の port にそのような改変を行ってわたしたちに送るときには + 既存の port にそのような改変を行なってわたしたちに送るときには UID の予約に関する注意書きをつけてください. - + 合理的な port - + Makefile は単純かつ適切であるべきです. もし, Makefile を数行短かくできたり, もっと読みやすくできるのであればそうしてください. たとえば, シェルの if 構文を使うかわりに make の .if 構文を使う, EXTRACT* の再定義で代用できるのであれば do-extract を再定義しない, CONFIGURE_ARGS += --prefix=${PREFIX} とするかわりに GNU_CONFIGURE とする, などです. - + <makevar>CFLAGS</makevar> の尊重 - + CFLAGS 変数は尊重すべきです. port がこれを無視する場合は, NO_PACKAGE=ignores cflagsMakefile に加えてください. CFLAGS 変数をきちんと考慮した Makefile の例を以下に示します. += の部分に注目してください. - + CFLAGS += -Wall -Werror 次は CFLAGS 変数を考慮しない Makefile の例です. - + CFLAGS = -Wall -Werror CFLAGS 変数は, FreeBSD システムの /etc/make.conf で定義されています. 最初の例では既存の定義を保存しつつ CFLAGS 変数にオプションフラグを追加しているのに対し, 二番目の例では既存の定義をすべて無効にしてしまっています. - + コンフィグレーション (設定) ファイル - + もしあなたの port が設定ファイルを PREFIX/etc に置く必要がある場合には, それを単純にインストールしたり, - pkg/PLIST + pkg-plist に加えてはいけません. こうしてしまうと pkg_delete によってユーザが苦労して作ったファイルが消えてしまったり, 新しくインストールする時に上書きされてしまったりします. - + かわりに見本となるファイルを サフィックス (filename.sample が良いでしょう) を付けてインストールしてメッセージを表示し, ソフトウェアを動かす前にユーザがそのファイルをコピーして編集をしなければならないことを知らせましょう. portlint - + 送付や commit をする前に portlint を使ってチェックしましょう. - + フィードバック - + port を作るためにソフトウェアに変更を加えたら, なるべく原作者にその旨を伝えてパッチ等を送ってください. これらが次のリリースに取り入れられればアップグレードが楽になります. <filename>README.html</filename> - + README.html というファイルを含めてはいけません. このファイルは, cvs コレクションの一部ではなく, make readme コマンドで生成されるファイルです. - + その他諸々 - - pkg/DESCR, - pkg/COMMENT, - pkg/PLIST などのファイルはそれぞれ二重にチェックしてください. + + pkg-comment, + pkg-descr, + pkg-plist などのファイルはそれぞれ二重にチェックしてください. 再検討してもっと良い記述があればそれに置きかえてください. - + GNU General Public License (GNU一般公有使用許諾) のコピーは (すでにあるので) コピーしないでください. お願いします. - + 法律に関することには十分注意をはらってください. わたしたちに法律に反するような形でソフトウェアの配布をさせないでください! 困ったら.... - + わたしたちに質問を送る前に, 既存の port の例と bsd.port.mk をちゃんと読んでください! ;) - + それでもわからないことがあったら一人で悩まないでどんどん質問してください! :-) <filename>Makefile</filename> のサンプル - + これは port の Makefile を作る際のお手本です. かぎかっこ ([]) 内のコメントは忘れずに取ってください. - + 変数の順番, 段落の間の空行など, Makefile を作るときはなるべくこの形式に従ってください. この形式は重要な情報が簡単に見つけられるように設計されています. portlint を使って Makefile をチェックすることが推奨されています. - - -[ヘッダ ... どのような port の Makefile かすぐにわかるようになっています] -# New ports collection makefile for: xdvi + + [ヘッダ ... どのような port の Makefile かすぐにわかるようになっています] +# New ports collection makefile for: xdvi ["version required" 行は, PORTVERSION 変数では port のバージョンを 十分に表現できない場合にのみ必要です. ] -# Version required: pl18 + japanization patches 18.1 and 18.2 -[この Makefile の最初の版が作成された日付です. - この port をアップグレードするときには変えないでください.] -# Date created: 26 May 1995 +# Date created: 26 May 1995 [このソフトウェアを最初に FreeBSD に port した人の名前, つまり, この Makefile の最初の版を書いた人です. この port をアップグレー ドするとき, この行も変えないでください.] -# Whom: Satoshi Asami <asami@FreeBSD.org> +# Whom: Satoshi Asami <asami@FreeBSD.org> # -# $FreeBSD$ +# $FreeBSD$ [ ^^^^^^^^^ この部分は, CVS ツリーに入れる時に自動的に RCS の ID 文字列に 置き換えられます.] # [port 自体, およびオリジナルのソースを取ってくるところを記述する部分. 最初は必ず PORTNAME と PORTVERSION, そして必要なら PKGNAME, CATEGORIES, 続いて MASTER_SITES が置かれ, さらに MASTER_SITE_SUBDIR が 置かれることもあります. 必要なら PKGNAMEPREFIX と PKGNAMESUFFIX が それに続き, そして DISTNAME, EXTRACT_SUFX, DISTFILES が, また, その後に必要に応じて EXTRACT_ONLY が置かれます.] -PORTNAME= xdvi -PORTVERSION= 18.2 -CATEGORIES= print +PORTNAME= xdvi +PORTVERSION= 18.2 +CATEGORIES= print [MASTER_SITE_* マクロを使用しない場合は, 最後のスラッシュを忘れないように ("/")!] MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications -DISTNAME= xdvi-pl18 +DISTNAME= xdvi-pl18 [ソースファイルが標準の ".tar.gz" 形式でない時にこれを使いましょう] -EXTRACT_SUFX= .tar.Z +EXTRACT_SUFX= .tar.Z [配布パッチセクション -- ない場合もあります] -PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ -PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz +PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ +PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz [保守責任者 -- これは *必ず* 必要です. 担当者 (あなた) 自身, あるいは 担当者に素早く連絡をとれる人のアドレスを書いてください. どうしてもこ こに自分のアドレスを書くのがいやな人は "ports@FreeBSD.org" と書いて もいいです] -MAINTAINER= asami@FreeBSD.org +MAINTAINER= asami@FreeBSD.org [依存するport -- ない場合もあります] -RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript -LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm +RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript +LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm [ここには標準の bsd.port.mk の変数で, 上のどれにもあてはまらないものを 書きます] [コンフィグレーション, コンパイル, インストールなどの時に質問をする なら...] IS_INTERACTIVE=yes [${DISTNAME} 以外のディレクトリにソースが展開されるなら...] -WRKSRC= ${WRKDIR}/xdvi-new +WRKSRC= ${WRKDIR}/xdvi-new [配布されているパッチが ${WRKSRC} に対する相対パスで作られてい い場合にこの変数の指定が必要かも...] -PATCH_DIST_STRIP= -p1 +PATCH_DIST_STRIP= -p1 [GNU autoconf によって生成された "configure" スクリプトを走らせたいなら...] -GNU_CONFIGURE= yes +GNU_CONFIGURE= yes [/usr/bin/makeでなく, GNU make を使わないといけないなら...] -USE_GMAKE= yes -[これが X のアプリケーションで "xmkmf -a" を走らせたいなら...] -USE_IMAKE= yes +USE_GMAKE= yes +[これが X のアプリケーションで, "xmkmf -a" を走らせたいなら...] +USE_IMAKE= yes [などなど] [下の方のルールで使う非標準の変数] -MY_FAVORITE_RESPONSE= "yeah, right" +MY_FAVORITE_RESPONSE= "yeah, right" [そして, 特別なターゲット, 使用順に] pre-fetch: - i go fetch something, yeah + i go fetch something, yeah post-patch: - i need to do something after patch, great + i need to do something after patch, great pre-install: - and then some more stuff before installing, wow + and then some more stuff before installing, wow [最後には必ず] .include <bsd.port.mk> - + パッキングリストの自動生成 まず, あなたの port に - PLIST + pkg-plist がないことを除いて完全なことを確認して, - 空の PLIST を作ってください. - - &prompt.root; touch PLIST - + 空の pkg-plist を作ってください. + + &prompt.root; touch pkg-plist + 次に, あなたの port をインストールすることができるディレクトリ階層を新たに作成してください. また, 依存するものをインストールしてください. - + &prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name &prompt.root; make depends PREFIX=/var/tmp/port-name このディレクトリ構造を新しいファイルに保存してください. &prompt.root; (cd /var/tmp/port-name && find * \! -type d) > OLD-DIRS - もしあなたの port が PREFIX にちゃんと従うなら, + もしあなたの port が PREFIX にちゃんと従うなら, ここで port をインストールしてパッキングリストを作ることができます. &prompt.root; make install PREFIX=/var/tmp -&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg/PLIST +&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg-plist 新しく生成されたディレクトリはすべてパッキングリストに追加する必要があります. - &prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg/PLIST + &prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg-plist - 最後に, パッキングリストを手で整える必要があります. - 完全に自動化されていると言ったのはうそです. - マニュアルページファイルはパッキングリストにではなく, + 最後にパッキングリストを手で整える必要があります; + すべてが自動化されているわけではありません. + マニュアルはパッキングリストに記述するのではなく, port の Makefile 中の - MANn - に記述しなければなりません. + MANn に + 記述しなければなりません. ユーザ設定ファイルは削除するか filename.sample としてインストールされなければなりません. また info/dir ファイルはリストに含めず, info ファイルに記述されているように, 適切な install-info 行に追加しなければなりません. - port によってインストールされるライブラリは, - ldconfig - の節で示したように記載されるべきです. + port によってインストールされるライブラリは, + 共有ライブラリ + のセクションで示したように記載されるべきです. - + package の名前 - + package の名前は以下のルールにしたがってつけてください. これは package のディレクトリを見やすくするためで, 無秩序な名前がたくさん並んでいるとユーザが使いづらくなるのではという心配からです (FTP サイトなどにはたくさん package がありますからね). - + package の名前は以下のようにしてください. 言語-名前-オプションバージョン.番号 - + package 名は ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} というように定義されています. 変数がこの書式と適合していることを確認してください. - + FreeBSD はユーザの慣れ親しんだ言語のサポートに力を入れています. 特定の言語のための port の package 名には 言語- に ISO-639 で定義されている言語名の略称を入れてください. たとえば日本語なら ja, ロシア語なら ru, ベトナム語なら vi, 中国語なら zh, 韓国語ならば ko, ドイツ語なら de といった具合です. - + port がある言語地域に特化したものである場合には, さらに二文字の国名コードを付加してください. たとえば合衆国英語圏は en_US となり, スイスのフランス語圏は fr_CH となります. - + 言語- 部分は, - PKGNAMEPREFIX 変数に定義されなければなりません. + PKGNAMEPREFIX 変数に + 定義されなければなりません. - - - 名前の部分は原則的にはすべて英小文字を使います. - 例外はたくさんのプログラムが入っている巨大な port の場合で, - XFree86 (ほんとにあるんですよ) や - ImageMagick - などがこれにあたります. - そうでない場合には名前の大文字を小文字に - (少なくとも最初の一字だけは) - 変えてください. - もし大文字であることが重要な場合 - (たとえば一文字の名前, - R とか V) - には, - あなたの裁量で大文字を使うのも良いでしょう. + + + 名前の部分の最初の文字は + 小文字でなければなりません. + (名前の残りの部分は大文字を含んでいても構わないため, + 大文字を含んだソフトウェア名を変換する際の規則は, + あなた自身の裁量に任されています.) + Perl 5 のモジュールでは先頭に p5- を付け, 二重コロン (::) のセパレータをハイフン (-) に置きかえる習慣になっています. たとえば Data::Dumperp5-Data-Dumper になります. また, そのソフトウェアの名前として通常使われるものに番号, ハイフン, あるいは下線が入っている場合には, それらを使うことも構いません (kinput2など). - + コンパイル時に環境変数や make の引数などでハードコードされたデフォルトを変えてコンパイルできる場合, -compiled.specifics にそのコンパイル時のデフォルトを入れてください (ハイフンはあってもなくてもかまいません). 用紙のサイズ, あるいはフォントの解像度などがこれにあたります. - + compiled.specifics 部分は, PKGNAMESUFFIX 変数に定義されなければなりません. - + バージョン番号は数字とアルファベットからなり, ピリオド (.) で区切ります. アルファベットは二文字以上続けてはいけません. ただ一つの例外は「パッチレベル」を意味する pl で, それ以外にバージョン番号がまったくついていない場合にのみ使うことができます. もしソフトウェアのバージョンに - "alpha", "beta" や "pre" といった文字列が含まれる場合には, + "alpha", "beta", "rc" や "pre" といった文字列が含まれる場合には, ピリオドの後に最初の一文字をとってください. これらの後に, さらにバージョン文字列が続く場合には, 一文字のアルファベットの後にピリオドをつけずに番号を続けます. - + この考え方は, バージョン文字列を見て簡単に ports を並べられるようにするためのものです. 特に, バージョン番号の各部分が必ずピリオドで区切られていること, また日付の部分がバージョン文字列の一部となっている場合には - + yyyy.mm.dd - + という書式を使っていることを確認してください. - + dd.mm.yyyy - + や, 2000 年問題に対応していない - + yy.mm.dd - + という書式を使ってはいけません. - + では, DISTNAMEを正しい PKGNAME に直す例を見てみましょう: - + 以下は, ソフトウェアの作者が決めた名前から 適切な package 名に変換する方法を示した (実際の) 例です. - + 配布名 PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX PORTVERSION 理由 - + mule-2.2.2 (空) mule (空) 2.2.2 変更の必要はありません - + XFree86-3.3.6 (空) XFree86 (空) 3.3.6 変更の必要はありません - + EmiClock-1.0.2 (空) emiclock (空) 1.0.2 プログラム一つだけの時は小文字のみ - + rdist-1.3alpha (空) rdist (空) 1.3.a alpha のような文字列は使えない - + es-0.9-beta1 (空) es (空) 0.9.b1 alpha のような文字列は使えない - + + + mailman-2.0rc3 + (空) + mailman + (空) + 2.0.r3 + rc のような文字列は使えない + + v3.3beta021.src (空) tiff (空) 3.3 なんなんでしょう ;) - + tvtwm (空) tvtwm (空) pl11 バージョン番号は必ず必要 - + piewm (空) piewm (空) 1.0 同上 - + xvgr-2.10pl1 (空) xvgr (空) 2.10.1 pl が使えるのは, 他にメジャー/マイナーバージョン番号がない場合のみ - + gawk-2.15.6 ja- gawk (空) 2.15.6 日本語バージョン - + psutils-1.13 (空) psutils -letter 1.13 コンパイル時に用紙のサイズを指定 - + pkfonts (空) pkfonts 300 1.0 300dpiフォント用の package - + オリジナルのソースにまったくバージョン情報が見当たらず, また原作者が新しいバージョンをリリースする可能性が低いときには, バージョン番号として 1.0 を使えばいいでしょう (上記の piewm の例がこれにあたります). そうでない場合には原作者に聞くか, 日付 (yyyy.mm.dd) を使うなどしてください. - + カテゴリ - + すでにご存知のように, ports はいくつかのカテゴリに分類されています. これを有効に利用するためには, port を作成する人々とユーザが, それぞれのカテゴリが何であるか, どのようにしてカテゴリに分類するかを理解する必要があります. - + 現在のカテゴリのリスト - + まず, これが現在の port のカテゴリのリストです. アスタリスク(*) が付いているものは仮想 (virtual) カテゴリです — これらには対応するサブディレクトリが port ツリーにはありません. - + 仮想カテゴリでないものは, そのサブディレクトリ内の pkg/COMMENT に一行の記述があります (例: archivers/pkg/COMMENT). - + カテゴリ 説明 - + afterstep* AfterStep ウィンドウマネージャをサポートする ports - + archivers アーカイブ用ツール - + astro 天文学関連の ports - + audio サウンドをサポートする ports - + benchmarks ベンチマークユーティリティ - + biology 生物学関連のソフトウェア - + cad CAD ツール - + chinese 中国語サポート - + comms 通信ソフトウェア. ほとんどはシリアルポート用です. - + converters 文字コード変換 - + databases データベース - + deskutils コンピュータが発明される以前に机上で使われていた道具 (訳注: いわゆるデスクトップユーティリティのこと) - + devel 開発ユーティリティ. どうしてもここに置かなければならない理由があるのでない限り, ライブラリをここに含めないでください. - + editors 一般的なエディタ. 特殊なエディタはそれぞれふさわしいセクションに入れます (たとえば数式エディタは math です). - + elisp Emacs-lisp の ports - + emulators 他のオペレーティングシステムのエミュレータ. 端末エミュレータはここに含まれません — X ベースのものは x11 に, テキストベースのものは機能によって commsmisc に分類されます. - + + + french + フランス語サポート + + ftp FTP クライアントとサーバユーティリティ. port が FTP と HTTP の両方をサポートしていれば, ftp に入れ, 第二カテゴリを www とします. - + games ゲーム - + german ドイツ語サポート - + gnome* GNU Object Model Environment (GNOME) プロジェクトの ports - + graphics グラフィックユーティリティ hebrew ヘブライ語サポート - + irc インターネットリレーチャット (IRC) 用ユーティリティ - + ipv6* IPv6 関連のソフトウェア - + japanese 日本語サポート - + java Java 言語サポート - + kde* - K Desktop Environment (kde) の ports + K Desktop Environment (kde) の ports - + korean 韓国語サポート - + lang プログラミング言語 - + linux* Linux アプリケーションとサポートユーティリティ - + mail メールソフトウェア - + math 数値計算ソフトウェアやその他の数学ソフトウェア - + mbone MBone アプリケーション - + misc 種々のユーティリティ — 基本的に他のカテゴリに属さないものです. これは他の仮想でないカテゴリを伴わない, 唯一のカテゴリです. misc と他のカテゴリが CATEGORIES 行に書かれている場合, misc を削除して他のサブディレクトリにおいて良いという意味になります. - + net 種々のネットワークソフトウェア - + news USENET ニュースソフトウェア - + offix* OffiX suite の ports - + palm 3Com Palm(tm) シリーズをサポートするソフトウェア - + perl5* 実行に perl バージョン 5 を必要とする ports - + + + picobsd + PicoBSD をサポートするための ports + + plan9* Plan9 に由来するさまざまなソフトウェア - + print 印刷ソフトウェア. DTP 用ツール (プレビュアなど) もここに分類されます. - + python* python 言語で書かれたソフトウェア ruby* ruby 言語で書かれたソフトウェア - + russian ロシア語サポート + + science + astro や + biology, + math 等, 他のカテゴリには + あてはまらない科学関連の ports + + security セキュリティ関連のユーティリティ - + shells コマンドラインシェル - + sysutils システムユーティリティ - + tcl75* 実行に Tcl バージョン 7.5 を必要とする ports - + tcl76* 実行に Tcl バージョン 7.6 を必要とする ports tcl80* 実行に Tcl バージョン 8.0 を必要とする ports - + tcl81* 実行に Tcl バージョン 8.1 を必要とする ports - + textproc テキスト処理ユーティリティ. DTP ツールはここではなく, print/ に分類されます. - + tk41* 実行に Tk バージョン 4.1 を必要とする ports - + tk42* 実行に Tk バージョン 4.2 を必要とする ports - + tk80* 実行に Tk バージョン 8.0 を必要とする ports - + tk81* 実行に Tk バージョン 8.1 を必要とする ports - + tkstep80* 実行に TkSTEP バージョン 8.0 を必要とする ports - + + + ukrainian + ウクライナ語サポート + + vietnamese ベトナム語サポート - + windowmaker* WindowMaker ウィンドウマネージャをサポートする ports - + www World Wide Web 関連のソフトウェア. HTML 言語サポートもここに分類されます. - + x11 X ウィンドウシステムとその関連ソフトウェア. このカテゴリは, 直接ウィンドウシステムをサポートするソフトウェアのみを対象とするものです. 通常の X アプリケーションをここに分類しないでください. - あなたの port が X アプリケーションで, + あなたの port が X アプリケーションで, USE_XLIB が定義 (USE_IMAKE を定義すると自動的に定義されます) されている場合は, 適切なカテゴリに分類してください. また, それらのほとんどは他の x11-* カテゴリ (下記参照) に分類されます. - + x11-clocks X11 用時計 - + x11-fm X11 用ファイルマネージャ - + x11-fonts X11 フォントとフォントユーティリティ - + x11-servers X11 サーバ - + x11-toolkits X11 ツールキット - + x11-wm X11 ウィンドウマネージャ + + + zope* + Zope サポート + 適切なカテゴリの選択 - + 多くのカテゴリに重なるので, どれを第一カテゴリにするかを決めなければならないことがたびたびあるでしょう. これをうまく決めるルールがいくつかあります. 以下はその優先順のリストで, 優先度の高いものから低いものの順に書いてあります. - + 言語特有のカテゴリがまず最初です. たとえば日本語の X11 のフォントをインストールする port の場合, CATEGORIES 行は japanese x11-fonts となるでしょう. - + より特徴的なカテゴリが, 一般的なカテゴリより優先されます. たとえば, HTML エディタの場合は www editors となります. これを逆順にはしないでください. また, port が irc, mail, mbone, news, security, www のいずれかに属する場合には net は必要ありません. - + x11 を第二カテゴリにするのは第一カテゴリが自然言語の場合のみにしてください. 特に X のアプリケーションには x11 を指定しないでください. - + もし, あなたの port が他のどのカテゴリにも属しない場合には misc にしてください. もし, あなたがカテゴリについて自信が持てない場合には, そのことを send-pr する時に書き加えてください. そうすれば import する前にそれについて議論できます (もしあなたがコミッターであれば, そのことを &a.ports; に送って先に議論するようにしてください — 新しい port が間違ったカテゴリに import されて, すぐ移動されることが多いので). この文書と ports システムの変更 - + もしあなたが, たくさんの ports の保守をしているのであれば, &a.ports; メーリングリストの内容を読むことを考えてください. ports のしくみについての重要な変更点はここに アナウンスされます. 最新の変更点については, いつでも, bsd.port.mk の CVS ログで詳細な情報を得ることができます. やっとおしまい! - + いやはや, 長い文章ですみません. - ここまで読んでくださった方には感謝, 感謝でございます. + ここまで読んでくださった方には感謝, 感謝でございます. さあ, port の作り方がわかったところで世界中のソフトウェアを port 化しましょう. FreeBSD プロジェクトに貢献するには, それが最も簡単な方法です! :-)