diff --git a/ja_JP.eucJP/books/porters-handbook/book.sgml b/ja_JP.eucJP/books/porters-handbook/book.sgml
index 2f0fa9ffdb..8996ebfbb8 100644
--- a/ja_JP.eucJP/books/porters-handbook/book.sgml
+++ b/ja_JP.eucJP/books/porters-handbook/book.sgml
@@ -1,4706 +1,4716 @@
%man;
%bookinfo;
%authors;
%jauthors;
%mailing-lists;
]>
FreeBSD port 作成者のためのハンドブック
-
- The FreeBSD Documentation Project
-
-
- doc@FreeBSD.org
-
-
-
+ FreeBSD ドキュメンテーションプロジェクト
2000 年 4 月
2000
- The FreeBSD Documentation Project
+ The FreeBSD Documentation
+ Project
&bookinfo.legalnotice;
自分で port を作成するには
自分で port を作ることや既存の port
の更新作業に興味があるのですか, それはすばらしい!
これから, FreeBSD 用の portを 作る際の,
いくつかのガイドラインを説明します.
もし, 既存の port を更新したいと考えているなら,
まずこの文書を読み, 次に
を読んでください.
この文書では十分に詳細がわからない場合には,
/usr/ports/Mk/bsd.port.mk を参照してください.
このファイルは, port の Makefile が例外なくインクルードしているものです.
これには細かくコメントが書かれていますので, Makefile
を読むのにあまり慣れていない人でも,
たくさんの情報を得ることができると思います.
また, port 特有の質問は &a.ports; へお願いします.
ここでは, 変更可能な変数(VAR)
の一部についてのみ記述しています.
ほとんどの変数はbsd.port.mk
の始めに記述があります.
また, このファイルは非標準のタブ設定を使用しています.
Emacs や Vim
はファイルのロード時にこれを認識しますが,
vi と ex は
ファイルをロードしてから :set tabstop=4
とタイプすることで, 正しい値を設定する
ことができます.
3 分間 porting
この節では, 簡単な port の方法について説明します.
多くの場合これ では不十分ですが,
まあうまくいくかどうか試してみて損はないでしょ う.
まず, 元の tar ファイルを
DISTDIR
に置きます.
デフォルトは
/usr/ports/distfiles
です.
以下では,
ソフトウェアがそのままコンパイル可能なことを仮定しています.
つまり FreeBSD マシンで動かすために,
変更がまったく必要ないという意味です.
もし何か変更が必要な場合には, 次の節も参照する必要があります.
Makefile の作成
最小限のMakefile
は次のようなものです.
# New ports collection makefile for: oneko
# Date created: 5 December 1994
# Whom: asami
#
# $FreeBSD$
#
PORTNAME= oneko
PORTVERSION= 1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
MAINTAINER= asami@FreeBSD.org
MAN1= oneko.1
MANCOMPRESSED= yes
USE_IMAKE= yes
.include <bsd.port.mk>
おわかりでしょうか.
$FreeBSD$がある行の内容については,
気にしないでください.
これはこのファイルが ports ツリーに書き込まれるときに
CVS によって自動的に書き込まれます.
もっと詳しい例が見たければ,
Makefile
のサンプルの節をご覧ください.
package 記述ファイルの作成
package にするしないに関わらず,
どのような port でも三つの記述ファイルが必要です.
それは pkg サブディレクトリにある,
COMMENT,
DESCR,
そして PLISTです.
COMMENT
これには, その port についての説明を一行で書きます.
package の名前,
バージョン番号等は含めないでください.
コメントは大文字で始め, 最後のピリオドは付けないでください.
たとえば, こんな具合です.
A cat chasing a mouse all over the screen
DESCR
これは, そのソフトウェアについての少し長い説明を記述します.
その port が何をするのかについて,
数段落程度の簡潔な解説があれば十分です.
このファイルは,
マニュアルでも使用方法やコンパイル方法についての細かい説明書でもありません.
特に README
ファイルやマニュアルページをコピーしようとしてしている場合には注意してください.
これらは多くの場合, その port の簡潔な説明になっていなかったり,
扱いにくい形式
(マニュアルページの場合, 行を揃えるために空白が調整されます)
になっていたりします.
もしこのソフトウェアに公式のウェブサイトがあれば,
ここに書いてください.
自動化ツールが正しく動作するように,
ウェブサイトのうちの一つには先頭に
WWW: を付け加えてください.
このファイルの最後にあなたの名前を書くことが推奨されています.
たとえば, こんな具合です.
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
PLIST
このファイルには,
この port によってインストールされるファイルが列挙されます.
このファイルは package を作る際のリストとして使われるため,
パッキングリスト (packing list)
とも呼ばれます.
ここに書かれているファイル名は,
インストール時のプレフィックス
(普通は
/usr/local か
/usr/X11R6)
からの相対パスです.
MANn
変数を使用する場合
(使用することが推奨されています)
には, マニュアルはここに入れないでください.
簡単な例を載せておきましょう.
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; のマニュアルページを参照してください.
すべてのファイルを列挙しなければなりませんが,
ディレクトリ名は必要ありません.
また, ports
がインストール時にディレクトリを作成する場合には
@dirrm の行を加えて,
その port
が削除されるときにそのディレクトリも削除されるようにしてください.
このファイルにはファイル名をアルファベット順に並べるようにします.
そうすることで port のアップグレートの際,
確認作業が楽に行なえるようになります.
パッキングリストを手で作るのは,
時にとても退屈な作業になります.
もし多数のファイルをインストールする port なら,
パッキングリストを自動生成すれば時間の節約になるかも知れません.
チェックサムファイルの作成
make makesum
と入力するだけです.
bsd.port.mk にルールがあるので,
自動的に files/md5 が生成されます.
port のテスト
package 化を含めてその port が正しく動くことを確認してください.
以下の重要なポイントを確認してください.
PLIST にその port
がインストールしないものが含まれていないこと.
PLIST にその port
がインストールするすべてのものが含まれていること.
reinstall
ターゲットを使うことによって,
何度でもインストールが可能なこと.
deintall
の際に後片付けをすること.
推奨されるテストの手順
make install
make package
make deinstall
pkg_add package 名
make deinstall
make reinstall
make package
package および
deinstall
の段階でどんな警告
(warning)
も出力されないことを確認してください.
ステップ 3 の後,
新しいディレクトリがすべて正しく消去されているかを確認してください.
また, ステップ 4 の後にそのソフトウェアを使用してみて,
package からインストールされた場合に正しく動作するかを
確認してください.
portlint によるチェック
portlintを使って,
あなたの port が FreeBSD のガイドラインに沿っているかを確認してください.
portlint プログラムは
Ports Collection に含まれています.
特に Makefile
が正しい形式になっているか,
package
の名前が正しいかをチェックするのに良いでしょう.
port の提出
まずやって良いことといけないことに関する節を読んでください.
さあ, あなたの port に満足したら,
あとはそれを FreeBSD のメインの ports ツリーに置き, 皆に使ってもらうだけです.
今ある
work ディレクトリや
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 (秘密)
- にしないようにしてください!).
+ にしないようにしてください!).
+ また, port 化したプログラムの短い説明文を
+ バグレポートの Description
フィールドに追加して,
+ shar もしくは uuencode した tar ファイルを
+ Fix
フィールドに追加するようにしてください.
+ 後者は, ports
+ 管理の作業をスクリプトで行なっているコミッターの助けとなります.
もう一度,
オリジナルのソースファイル,
work ディレクトリ,
make package
で作成した package が含まれていないことを確認してください.
以前, 新しい port を FreeBSD の ftp サイト
(ftp.FreeBSD.org)
にアップロードするようにお願いしたことがありますが,
現在このサイトの incoming
ディレクトリは読み出し不可になっており,
いまでは推奨されていません.
たくさんの海賊版ソフトウェアがそこに置かれたためです.
わたしたちは, 何か不明な点があったらあなたに確認した後,
それをツリーへ置きます. あなたの名前は
FreeBSD ハンドブックやその他のファイルの
Additional FreeBSD contributors
のリストにも載るでしょう.
う〜ん, 素晴らしい. :-)
わたしたちが作業しやすいように,
障害報告の概要 (synopsis) は適切に記述してください.
たとえば新しい port の提出なら
New port: <port の簡単な説明>
,
port の更新なら
Update port: <カテゴリ>/<port 名> <更新内容の簡単な説明>
というようなものが歓迎されます.
こういう方法で報告するように心がけていれば,
誰かがその報告をすぐに見つけ,
処理できる確率がぐっと大きくなるのです.
本格的な port
残念ながら移植がそう簡単ではなく,
動かすために多少の変更が必要な場合も多いでしょう.
この節では, Ports Collection の方法論にのっとって,
そのような場合にどのように変更を施し,
動くようにしたら良いかを順を追って説明します.
port 構築の詳細
まず, あなたが port のディレクトリで
make
と入力してから起こる一連の出来事について,
順を追って説明します.
ここを読むときには, 他のウィンドウで同時に
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
に保存します.
次に実行されるのは
extract ターゲットです.
これは DISTDIR
にある配布ファイル
(普通は gzip された tar ファイル)
を読み, ソースを一時的な作業ディレクトリ
WRKDIR
(デフォルトは work)
に展開します.
次に,
patch
というターゲットが実行されます.
まず, PATCHFILES
に定義されている, すべてのパッチを適用します.
次にもし
PATCHDIR
(デフォルトは patches サブディレクトリ)
にパッチが存在すれば,
これらをアルファベット順に適用します.
次に実行されるターゲットは
configure
です. これには, いろいろな場合があります.
scripts/configure
が存在すれ場合, それが実行されます.
HAS_CONFIGURE
あるいは GNU_CONFIGURE
がセットされていれば,
WRKSRC/configure
が実行されます.
USE_IMAKE
がセットされていれば, XMKMF
(デフォルト: xmkmf -a)
が実行されます.
最後に build
というターゲットが実行されます.
これはその port の専用の作業ディレクトリ
(WRKSRC)
に移動し, コンパイルするのが役目です.
USE_GMAKE がセットされていれば
GNU make が使用されます.
そうでなければ FreeBSD の
make
が使用されます.
上記はデフォルトのルールです. さらに,
pre-何とか
や
post-何とか
というターゲットが定義してあったり,
そのような名前のスクリプトが
scripts
サブディレクトリに置いてある場合には,
それらはデフォルトの動作の前後に実行されます.
たとえば,
post-extract
というターゲットが
Makefile で定義されていて,
pre-build というファイルが
scripts サブディレクトリにあるとすると,
post-extract
ターゲットは通常の展開動作の後に呼び出され,
pre-build
スクリプトはデフォルトのコンパイルのルールが実行される前に実行されます.
もし動作が簡単であれば, Makefile
のターゲットを使用することが推奨されています.
なぜなら, その port
が何らかのデフォルトではない動作を必要とするのかどうかが一箇所にまとめて書いてあった方が,
他の人に理解しやすいからです.
デフォルトの動作は
bsd.port.mk の
do-何とか
というターゲットで行なわれます.
たとえば port を展開するコマンドは
do-extract
というターゲットにあります.
もしデフォルトのターゲットに不満があれば,
do-何とか
というターゲットを再定義することによってどのようにでも直すことができます.
メイン
のターゲット
(たとえば
extract や
configure 等)
は, すべての前段階が実行されていることを確認してから,
実際のターゲットやスクリプトを呼び出す以外のことは行ないません.
bsd.port.mk
はこれらが変更されることは仮定していませんので,
たとえば展開の仕方を変更したいときには
do-extract
を変更し,
絶対に
extract
には手を触れないでください.
これで, ユーザが
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
の記述をご覧ください).
port の修正
適当なディレクトリに tar ファイルを展開し,
FreeBSD の最新のバージョン上で正しくコンパイルできるために必要なあらゆる変更を施します.
最終的に処理は自動化するわけですから,
何を行なったかを注意深く記録しておきましょう.
あなたの port が完成した暁には, ファイルの削除, 追加,
修正を含むすべての処理が自動化されたスクリプトやパッチファイルで行なえるようになっていなければなりません.
もし, あなたの port のコンパイルやインストールのために必要な手作業があまりに多いようならば,
Larry Wall の模範的な Configure
スクリプトでも参考にしたほうが良いかも知れません.
新しい Ports Collection は最小のディスクスペースで,
個々の port がエンドユーザにできるだけ
プラグ & プレイ
の状態で make できることを目指しています.
あなたが作成し FreeBSD の ports
に寄付されたパッチファイル,
スクリプトおよびその他のファイルは,
明示的に記述されている場合を除いて
BSD の標準的な著作権条件によりカバーされていると見なされます.
パッチの適用
port
の過程で追加されたり変更されたファイルは,
再帰的 diff で変更点を取り出すことができます.
パッチは適当にまとめて
patch-xx
という名前のファイルに入れてください.
xx
はパッチが適用される順番を示します
— これらはアルファベット順,
つまり
aa が最初,
次に
ab などとなります.
これらのファイルは
PATCHDIR
に置いておくと自動的に適用さ れるようになっています.
すべてのパッチは
WRKSRC
(通常は, port の tar ファイルが展開されるところで,
make が実行されるところと同じです)
からの相対パスになります.
修正やアップグレードを容易にするため,
2 つ以上のパッチが同じファイルを修正するのは避けてください
(たとえば,
patch-aa と patch-ab が共に
WRKSRC/foobar.c を修正するなど).
コンフィグレーション
カスタマイズのために追加したいコマンドがあれば,
configure
という名前のスクリプトに入れて
scripts サブディレクトリに置きます.
上で述べたように, pre-configure
あるいは post-configure という
Makefile
のターゲット,
スクリプトで処理することもできます.
ユーザからの入力の扱い
もし, その port がビルド,
コンフィグレーション,
インストールの際にユーザからの入力を必要とするならば,
Makefile で
IS_INTERACTIVE
をセットしてください.
これによって深夜,
自動的にたくさんの port
をコンパイルすることが可能になります.
環境変数BATCHがセットされていると
IS_INTERACTIVE
の定義されている port はスキップされます
(そして,
ユーザがINTERACTIVE
という変数をセットすると入力を必要とする
port のみコンパイルされます).
もし, 適切なデフォルト設定があるのであれば,
PACKAGE_BUILDING
変数をチェックして,それが設定されている場合には,
ユーザ入力のスクリプトを起動しないようにしてください.
こうすることによって, CDROM や ftp に 置く
package をわたしたちが作成することができます.
Makefile の作成
Makefile の作成は非常に単純です.
繰り返しになりますが, 始めるまえにすでにある例を見てみることをお奨めします.
またこのハンドブックには
Makefile
のサンプルがあります.
それを見て, Makefile
内の変数の順番や空行を入れるところなどの参考にしてください.
そうすると他の人々にも読みやすいものとなります.
では,
Makefile
を設計するときに問題となるところを順に追って見てみましょう.
オリジナルのソース
ソースは
DISTDIRに標準的な
gzip された tar ファイルとして置かれていますか?
そうであれば, 次のステップに進めます.
そうでなければ, 変数
EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX,
DISTFILES
を適当に書き換えないといけません.
どれだけ変更しないといけないかは,
あなたの port の配布ファイルがどの程度標準からかけはなれているかによります
(最もよくある場合は
gzip ではなく普通の compress コマンド
で tar ファイルが圧縮されている場合で
EXTRACT_SUFX=.tar.Z
とするだけです).
最悪の場合には, 自分で
do-extract
ターゲットを作成して,
デフォルトを上書きすることもできます.
しかし, そこまでする必要があることはめったにないでしょう.
PORTNAME および
PORTVERSION
DISTNAME には
port の名前の基幹部分を入れ,
PORTVERSION
には port のバージョン番号を入れます.
PKGNAMEPREFIX および
PKGNAMESUFFIX
二つのオプション変数
PKGNAMEPREFIX および
PKGNAMESUFFIX は,
PORTNAME および
PORTVERSION と結合され,
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
として
PKGNAME を定義します.
この時, 適切な package
名を選ぶためのガイドラインに沿っているか確認してください.
特に, ハイフン (-) を
PORTVERSION
に含めることは禁止されています.
また, package 名に
language- もしくは
compiled.specifics
部分が含まれる場合, それぞれ
PKGNAMEPREFIX と
PKGNAMESUFFIX を使用します.
これらを PORTNAME の一部として含めてはいけません.
DISTNAME
DISTNAME は製作者が決めたソフトウェアの名前です.
DISTNAME はデフォルトで
${PORTNAME}-${PORTVERSION} となりますが,
必要に応じて書き換えることができます.
DISTNAME は二つの場所でしか使われません.
一つ目は配布ファイルリスト
(DISTFILES)
のデフォルト
${DISTNAME}${EXTRACT_SUFX} で,
二つ目は配布ファイルが展開されるサブディレクトリ WRKSRC
のデフォルト work/${DISTNAME} です.
PKGNAMEPREFIX と
PKGNAMESUFFIX は
DISTNAME に影響を与えないことに注意してください.
CATEGORIES
完成した package の実体は
/usr/ports/packages/All に置かれます.
また, 一つかそれ以上の
/usr/ports/packages
のサブディレクトリからのシンボリックリンクが作られます.
それらのサブディレクトリの名前が
CATEGORIES
という変数によって指定されます.
これは,
ユーザが FTPサイトや CDROM の package
の山を渡り歩くことを容易にするためです.
現在存在するカテゴリを見て,
その port に適したもを選んでください.
このリストは, この port が port ツリーのどこに
import されるかも決定します.
二つ以上のカテゴリを指定した場合には,
最初のカテゴリで指定されるサブディレクトリに置かれることになります.
適切なカテゴリを選ぶ方法については,
カテゴリの節を参照してください.
もしその port
が本当に現存するすべてのものとは異なったものを必要としている場合には,
新しいカテゴリ名を作ることもできます.
その際には, &a.ports; 宛てに新しいカテゴリ名を提案するメールを送ってください.
カテゴリ名については,
何のエラーチェックも行なわれません.
ミスタイプがあっても
make package
は何も考えずに新しいディレクトリを作ってしまいますので注意してください.
MASTER_SITES
オリジナルの配布ファイルを指し示す
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
にアーカイブ内でのパスを指定するだけです.
以下に例を示します.
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
ユーザは/etc/make.conf中で
MASTER_SITE_* 変数を設定することによって,
デフォルトの FTP サイトではなくこれらの有名なアーカイブのミラーの中で,
好みのものを使用することが可能です.
PATCHFILES
もし,
オリジナルの配布ファイル以外にも FTP か HTTP
で手に入るパッチが必要な場合には,
PATCHFILES にファイル名を,
PATCH_SITES
にサイトとディレクトリの名前を
MASTER_SITES
と同様に設定してください.
そのパッチ内のファイル名がソースツリーの一番上のディレクトリ
(WKRSRC)
からの相対パスになっていない場合には,
PATCH_DIST_STRIPを指定してください.
たとえば, パッチ内のファイル名にすべて余計な
foozolix-1.0/
がついている場合には,
PATCH_DIST_STRIP=-p1
としてください.
これらのパッチは圧縮されていても大丈夫です.
ファイル名が
.gz か .Z
で終わる場合には自動的に復元されるようになっています.
もしパッチが, 文書などその他のファイルと一緒に
gzip された tarファイルで配布されている場合には,
単純に
PATCHFILES
を使うことはできません.
このような場合には, このパッチの tar ファイルの名前と場所を
DISTFILES と
MASTER_SITES に加えます. それから,
pre-patch
ターゲットでパッチコマンドを走らせるか, パッチファイルを
PATCHDIR ディレクトリに
patch-xx
という名前でコピーするかして,
パッチを適用するようにします.
普通の gzip か compress された tar ファイルであれば,
通常のソースファイルと一緒にその時までに展開されていますので,
明示的に展開する必要はありません.
もし, 後者の方法を使用する場合には,
すでにそのディレクトリにある何かを上書きしないように注意する必要があります.
さらに pre-clean
ターゲットにコピーしたパッチファイルを削除するコマンドを追加するのを忘れないでください.
MAINTAINER
あなたのメールアドレスをここに入れてください.
お願いします.
:-)
保守担当者(maintainer)の役割についての詳細は,
Makefile 中の MAINTAINER
の節をご覧ください.
依存関係
プログラムが他の port に依存する場合には,
必要なものが自動的に作られるようにすることができます.
そのために, 以下の
5 つの変数が用意されています.
よくあるケースのためにあらかじめ設定された依存変数や,
いくつかの依存関係の制御のための変数があります.
LIB_DEPENDS
port
が必要とする非標準の共有ライブラリをこの変数で指定します.
これは
lib:dir:target
という組のリストで, そのうち
lib が共有ライブラリの名前,
dir がそのライブラリが見つからない場合にインストールする
port のあるディレクトリ,
target がそのディレクトリで呼ばれるターゲットです.
たとえば,
LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install
と指定してあれば, まずメジャーバージョンが 9 の jpeg
ライブラリがあるかどうか確認し,
ない場合には ports ツリーの中の
graphics/jpeg
というサブディレクトリに移動し,
そこでコンパイルとインストールを行ないます.
target の部分は,
DEPENDS_TARGET
(デフォルトは install)
と等しいときには省略できます.
前半の lib 部分は
ldconfig -r | grep -wF
への引数になります.
この変数には正規表現を入れられません.
この依存関係は 2 度チェックされます. まず
extract ターゲットで, 次に
install でチェックされます
(これは, その port を作成するマシンとインストールする
マシンが違う場合でも, きちんとそのライブラリが利用できる
ことを確認するためです). また, 依存するもの名前は package
の中にも含まれますので, ユーザのシステムに存在しなければ,
pkg_add が自動的にインストールします.
RUN_DEPENDS
port
を使用する際に必要となるファイル,
またはプログラムがあるときにはこの変数で指定します.
これは
path:dir:target
という組のリストで,
path
がファイルまたはプログラムの名前, そして
dir
がそれが見つからない場合に作成するためのディレクトリ名で
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
というプログラムがユーザのサーチパス中にあるかどうか探し,
ない場合には同じく ports ツリーの
x11-toolkits/tk80
というサブディレクトリから作られます.
この例で, innd
は実際にはプログラムです.
このように,
プログラムであっても標準のサーチパス以外のところにあるようなものの場合には,
絶対パスで指定してください.
この依存関係は
install
ステージのはじめでチェックされます.
また, package を作る際に必要となる
port の package 名が記録され
pkg_add
を使用するとユーザのシステムに存在しない場合には自動的にそちらの
package もインストールされるようになります.
target の部分は,
DEPENdS_TARGET
と同じ場合には省略可能です.
BUILD_DEPENDS
この変数はビルドに必要なプログラムまたはファイル名を指定します.
RUN_DEPENDSと同様に, これは
path:dir:target
という組のリストです. たとえば,
BUILD_DEPENDS=unzip:${PORTSDIR}/archivers/unzip
は
unzip という名前のプログラムを探し,
見つからない場合には
archivers/unzip
サブディレクトリで作れという意味になります.
ここで言うビルド
は,
ファイルの展開からコンパイルまでのすべてを意味します.
この依存関係は
extract
ステージからチェックされます.
target の部分は
DEPENDS_TARGET
と同じ場合には省略可能です.
FETCH_DEPENDS
この変数は,
portを取ってくるのに必要なファイルまたはプロ
グラムを指定するのに使います. 上の二つと同様に, これは
path:dir:target
という組のリストです. たとえば,
FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2
としておけば, ncftp2
という名前のプログラムを探 し,
見つからない場合には
net/ncftp2
サブディレクトリにいってインストールします.
この依存関係は
fetch
ステージからチェックされます.
target の部分は
DEPENDS_TARGET
と同じ場合には省略可能です.
DEPENDS
上記の四つのいずれにもあてはまらないような依存関係がある場合,
または他の port
がインストールされれているだけではなくソースが展開されている必要がある場合には,
この変数を使います.
これは上記の四つと違って特に確認
するものがありませんので,
dir:target
という形式のリストになります.
target の部分は
DEPENDS_TARGET
と同じ場合には省略可能です.
よくある依存関係を表す変数
もし ports が X Window System を必要とするのであれば,
USE_XLIB=yes を定義してください
(これは USE_IMAKE が定義されていれば
自動的に定義されます).
BSD make の代りに
GNU make を必要とする場合には
USE_GMAKE=yes を,
動作するのに GNU autoconf を必要とする場合には
USE_AUTOCONF=yes を,
最新の qt toolkit を使用する場合には
USE_QT=yes を,
perl 言語のバージョン 5 を必要とする場合には
USE_PERL5=yes を定義してください
(特に最後のは重要です. FreeBSD のいくつかの
バージョンでは基本システムに perl5 を含みますが,
他のものは含んでいません).
依存関係に関する注意
上で述べたように, 依存する ports
が必要になったときに呼ばれるデフォルトのターゲットは
DEPENDS_TARGET で,
そのデフォルトは install です.
これはユーザの使用する変数で port の
Makefile
で定義されるものではありません.
もしあなたの port が特別な方法で依存関係を扱う必要がある場合には,
DEPENDS_TARGET を再定義するのではなく
*_DEPENDS 変数の
:target
の部分を利用してください.
make clean
と入力したときには依存する port も自動的に clean されます.
もしそうしたくない場合には
NOCLEANDEPENDS
を環境変数として設定してください.
無条件に他の port に依存させるには, 特別に
nonexistent という文字列を
BUILD_DEPENDS あるいは
RUN_DEPENDS
の最初のフィールドに使用してください.
これは, 他の port のソースが必要なときのみ使用してください.
ターゲットも指定することによって,
コンパイルの時間を節約することができます.
たとえば,
BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
これは, 常に JPEG port
のディレクトリに行きソースの展開を行ないます.
あなたがやりたいことが他の方法ではできない場合以外は
DEPENDS を使わないでください.
これは常に 他の port
の作成を行い(さらにデフォルトでインストールを行い),
package も作成します.
もし本当にこれがあなたのやりたいことでしたら,
代りにこれを
BUILD_DEPENDS と
RUN_DEPENDS で書くことをお勧めします
— 少なくとも意図が明確になります.
ビルドのメカニズム
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 を指定してください.
コンフィグレーションステージで自動的に
xmkmf -a が実行されます.
もし フラグが問題をもたらすなら,
さらに
XMKMF=xmkmfとしてください.
もし, port が imake
を使用するけれども
install.man
ターゲットがない場合には,
NO_INSTALL_MANPAGES=yes
を指定してください.
ついでに, その port のオリジナルの作者を探し出して八つ裂きにすると
いいでしょう.
(-_-#)
port の
Makefile が
all
以外のものをメインのターゲットとしている場合には
ALL_TARGET でそれを指定してください.
install と
INSTALL_TARGET も同様です.
特別な配慮
port を作成する場合,
考慮しなくてはいけないことがさらにいくつかあります.
この節では,
それらのうちもっともありがちなものについて説明します.
ldconfig
共有ライブラリをインストールするときには,
共有ライブラリのキャッシュを更新するために 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
が使えなくなっちゃった!」).
この掟を破った者は, 永久に地獄の底で苦しみ続けるように,
閻魔様に頼んでおきます.
MASTERDIR
もし, あなたの port が変数
(たとえば解像度とか紙のサイズなど)
を変えたりした, ちょっと違うバージョンを作成する必要があるときには,
ユーザが分りやすいように package ごとに別々のサブディレクトリを作成し,
できるだけ port 間でファイルを共有するようにしてください.
典型的な例では,
うまく変数を使えばとても短いMakefileだけを
一つ以外のすべてのディレクトリに置くだけで済みます.
その短い
Makefile には
MASTERDIR を使って,
残りのファイルがあるディレクトリを指定できます.
また 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
MASTERDIR= ${.CURDIR}/../xdvi300
.include ${MASTERDIR}/Makefile
(xdvi240/Makefile と
xdvi400/Makefile も同様です).
MASTERDIR が
bsd.port.mk に
PATCHDIR や PKGDIR
などの通常のサブディレクトリが xdvi300
にあることを教えます. RESOLUTION=118
の行が, xdvi300/Makefile の
RESOLUTION=300 の行を無効にし, port
は解像度を118として作成されます.
共有ライブラリのバージョン
まず,
共有ライブラリのバージョンについての指針を読んで,
共有ライブラリのバージョンを一般的にどうすれば良いかを理解してください.
盲目的にソフトウエアの作者がちゃんと理解していると信じていてはいけません.
多くの場合, それは間違っていますし, 細い点まで考慮することは大変重要なことです.
なぜならわたしたちは,
互換性がないかもしれない大量のソフトウェアを共存させようとする特殊な状況にあるからです.
過去に不注意な 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 の中に存在していてはいけません.
マニュアルをインストール時に圧縮するかどうかを
指定するには, MANCOMPRESSED
変数を使用します. この変数は三つの値をとることができます,
yes,
no そして
maybe です.
yes はマニュアルが既に圧縮されてインストールされている,
no はされていない,
maybe はそのソフトウェアがすでに
NOMANCOMPRESS に合わせており
bsd.port.mk
が特別なにもする必要がないことを意味します.
USE_IMAKE がセットされていて,
NO_INSTALL_MANPAGES
がセットされていなければ, MANCOMPRESSED
は自動的に yes に設定され,
それ以外の場合には, no になります.
デフォルトがあなたの port
に合わない場合以外は明示的に設定する必要がありません.
PREFIX 以外のディレクトリの下に
マニュアルを置くような port では MANPREFIX
を指定することができます. さらに,
特定のセクションのマニュアルだけ,
標準ではない場所にインストールする場合,
たとえばいくつかの Perl のモジュールの ports などには,
個々のマニュアルのパスを
MANsectPREFIX
(sect は, 1-9,
または, L か N
を表わします) によって指定できます.
マニュアルが言語特有のサブディレクトリに置かれる場合には,
言語名を 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
${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) のマニュアルページを
指すシンボリックリンクが作成されます.
Motif を必要とする port
最近はコンパイルに Motif
を必要とするアプリケーションが増えてきました
(Motif 自体は有料のものがいくつかの会社から手に入りますし,
多くのアプリケーションがコンパイル可能な無料の互換ライブラリが
x11-toolkits/lesstifにあります).
Motif はかなり広く使われていますし,
製品のライセンスではライブラリを静的にリンクした実行形式は再配布が認められている場合が多いので,
Motif を必要とするソフトウェアを簡単に動的
(port からコンパイルする人々のために),
静的
(package を配布する人々のために)
にリンクできるようなしくみが用意されています.
REQUIRES_MOTIF
Motif
がないとコンパイルできない port の Makefile
ではこの変数を指定してください. これによって,
Motif を持っていない人が
この port をコンパイルしようとするのを未然に防ぎます.
MOTIFLIB
この変数は bsd.port.mk によって
Motif ライブラリの指定に置き換えられます.
ソース内の Makefile や Imakefile で Motif ライブラリを指定しているところを,
この変数に置き換えるようにパッチを適用してください.
代表的な例としては以下の二つがあげられます:
Makefile か Imakefile の中で Motif ライブラリが
として使われている場合には,
かわりに
MOTIFLIB
と書いてください.
Imakefile の中で XmClientLibs
が使われている場合には, それを
${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
ファイルを更新するようにしてください
(この節はとても長くてすいません.
しかし 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 にインストールする)
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
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* 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 の
@exec/@unexec:
以下参照)
に重複して書く必要があるからです.
しかし, もし日本語
(あるいは, 他のマルチバイト文字)の info
ファイルがある場合には
install-info
の特別な引数を使用する必要があるでしょう.
なぜなら makeinfo がこのような
texinfo ソースファイルを扱えないからです.
(このようなものをどう扱うかの例としては
japanese/skk の
Makefile と
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
@@ -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
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi \
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)
man
サブディレクトリでのデフォルトターゲットは,
info で呼ばれるのに対して,
メインの Makefile では,
all で呼びたいので,
二つ目のpatchが必要でした.
また, info info ファイルのインストールも削除しました.
なぜなら, 同じものが同じ名前ですでに
/usr/share/info
にあるからです
(このパッチはここにはありません).
もし, Makefile に
dir
ファイルをインストールする個所があれば削除します.
あなたの port がインストールしてはいけません.
また, dir
ファイルを壊してしまうようなコマンドの類も削除します.
--- ./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); \
(これは, 既存のportを修正するときのみ必要です.)
pkg/PLIST を見て,
info/dir
にパッチをあてようとするものすべてを削除します.
これらは
pkg/INSTALL
やその他のファイルにもあるかもしれないので,
いろいろさがしてみてください.
Index: pkg/PLIST
===================================================================
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/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
===================================================================
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
@@ -20,5 +20,11 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
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
+.endfor
.include <bsd.port.mk>
PLIST を編集して, 同じ働きをする
@exec 文,
それに pkg_delete のために
@unexec 文を加えてください.
Index: pkg/PLIST
===================================================================
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
@@ -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
ファイルをチェックしましょう.
pkg/ サブディレクトリ
まだ触れていない,
いくつかのこつが pkg/
サブディレクトリにはあり, 時として便利でしょう.
MESSAGE
もしインストールする人にメッセージを表示する必要がある場合には,
そのメッセージを
pkg/MESSAGE に置くことができます.
この機能は
pkg_add
の後の追加のインストール手続きを表示するときなどに重宝します.
pkg/MESSAGE ファイルは
pkg/PLIST に加える必要はありません.
また, もしユーザが package ではなく
port を使用している場合には自動的には表示されませんので,
明示的に
post-install
で表示するようにするべきでしょう.
INSTALL
バイナリパッケージが
pkg_add
でインストールされるときに実行される必要があるコマンドがあれば,
pkg/INSTALL
スクリプトを使って実行することができます.
このスクリプトは自動的に package に加えられ,
pkg_add によって二回実行されます.
はじめは
INSTALL ${PKGNAME} PRE-INSTALL
と実行され, 二回目には
INSTALL ${PKGNAME} POST-INSTALL
と実行されます.
どちらのモードで実行されているかは
$2 を調べることによってわかります.
環境変数 PKG_PREFIX には
package がインストールされるディレクトリが設定されます.
詳細は &man.pkg.add.1; を見てください.
port を make install
でインストールするときにはこのスクリプトは自動的に実行されません.
もし実行される必要があるならば port の Makefile
から明示的に呼ぶ必要があります.
REQ
port が
(インストールされるシステムの状態によって)
インストールされるべきか,
されないべきか区別する必要があるときには,
要件(requirements)
スクリプト
pkg/REQ を作ることができます.
これはインストールおよび削除
(package の削除)
の時に自動的に実行され,
それらが処理されるべきかを決定します.
make の変数にあわせた
PLIST の変更
いくつかの port, 特に p5-ports などは
configure のオプション
(あるいは, p5-ports の場合は perl のバージョン)
によって
PLIST を変える必要があります.
これを容易に実現するために
PLIST 中の
%%OSREL%%,
%%PERL_VER%%,
%%PERL_VERSION%% は適切に置き換えられるようになっています.
%%OSREL%% の値はオペレーティングシステムの数字で表されたリビジョンです
(たとえば 2.2.7).
%%PERL_VERSION%% は perl
のバージョン番号全体
(たとえば 5.00502)
で, %%PERL_VER%%
はバージョン番号からパッチレベルを引いたものです
(たとえば 5.005).
他の置き換えが必要であれば, PLIST_SUB
変数に
VAR=VALUE
という形式のペアのリストを設定することによって,
PLIST 中の
%%VAR%%
は
VALUE に置き換えられます.
たとえばバージョンに固有のたくさんのファイルをインストールする場合には,
Makefile に
OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
と書いて, PLIST
中のバージョン番号が表われるすべてのところに,
%%OCTAVE_VERSION%% と書きます.
このようにしておけば, port をアップグレードするときに,
何十行
(ときとして, 何百行)
も
PLIST
を書き替えないですみます.
この書き換えは
(マニュアルの追加も)
do-install と
post-install ターゲットの間に
PLIST を読み
TMPPLIST
(デフォルトは WRKDIR/.PLIST.mktmp)
に書き込むことによって行なわれます.
もし, あなたの port が
PLIST を実行時に生成するのであれば,
do-install
の間かその前に行うようにしてください.
また, 書きかえられたあとのファイルを編集する必要がある場合には,
post-install
で TMPPLIST を書きかえてください.
pkg
サブディレクトリにあるファイル名の変更
pkg
サブディレクトリにあるファイルはすべて変数を使用して定義されていますので,
必要であれば
Makefile 中で変更可能です.
いくつかの ports で一つの
pkg
サブディレクトリを共有する場合や,
上記のファイルに書き込む必要があるときなど特に便利です
(pkg
サブディレクトリに直接書き込むのが良くない理由については
WRKDIR
以外への書きこみ を参照してください).
以下が変数名とそのデフォルト値の表です.
変数名
デフォルト値
COMMENT
${PKGDIR}/DESCR
DESCR
${PKGDIR}/DESCR
PLIST
${PKGDIR}/PLIST
PKGINSTALL
${PKGDIR}/INSTALL
PKGDEINSTALL
${PKGDIR}/DEINSTALL
PKGREQ
${PKGDIR}/REQ
PKGMESSAGE
${PKGDIR}/MESSAGE
PKG_ARGS
を上書きせずにこれらの変数を変更するようにしてください.
PKG_ARGS
を変更すると, これらのファイルは port から正しく
/var/db/pkg
にインストールされなくなります.
ライセンス上の問題
ソフトウェアによっては制限の厳しい
ライセンスがついてきたり,
法律的に問題があるかも知れません
(PKP の公開鍵暗号の特許,
ITAR (暗号化ソフトウェアの輸出)
などが例としてあげられます).
それらをどう扱えばいいかは,
ライセンスの文面によってさまざまな場合があります.
ソフトウェア移植者として,
あなたにはライセンスをよく読み
FreeBSD プロジェクトが FTP または CD-ROM
で配布してはいけないソフトウェアを配布してしまうことのないよう注意する義務があります.
何か疑問がある場合には
&a.ports; に聞いてみてください.
よく見られるケースに対処するために,
Makefile に指定できる二つの変数が用意されています.
ソフトウェアに有償再配布を禁ずる
という趣旨のライセン スがついてきた場合には,
NO_CDROM
という変数にその理由を記述してください.
わたしたちはこれがついている port を
CD-ROM リリースに入れないようにしますが,
オリジナルのソースファイルと package を
FTP で取れるようにしておきます.
もし生成される package が個々のサイトで独自に構築される必要があったり,
ライセンスによって生成されるバイナリが配布できない場合には
NO_PACKAGE 変数にその理由を記述してください.
そのような package は FTP サイトに置かれたり,
リリース 時の CD-ROM へ入らないようにします.
ただし, いずれの場合も
distfile は (FTP や CD-ROM に)
含まれるようになります.
使用者によっては法律上の問題が生じる port
(暗号化ソフトウェアなど)
の場合,
あるいは商用利用を禁ずる
とライセンスに書いてある場合には,
RESTRICTEDという変数にその理由を入れてください.
この場合には, ソースファイルや package
が FreeBSD の FTP サイトにも置かれなくなります.
GNU 一般公有使用許諾書 (GPL) は,
バージョン 1, 2 とも port 作成上何ら問題にはなりません.
もしあなたがソースツリー管理者 (committer) であれば,
ソースツリーにこのような port を入れる際に
ports/LEGAL
ファイルを書き換えるのを忘れないようにしてください.
アップグレード
port のバージョンが原作者からのものに比べて古いことに気がついたら,
まずはあなたの持っている port が私たちの最新のもの
(ミラーサイトの ports/ports-current
というディレクトリにあります)
であることを確認してください.
また, Ports Collection 全体を最新の状態に保つために
CVSup を利用することもできます.
詳しくは
FreeBSD
ハンドブックをご覧ください.
次に port の
Makefile に
MAINTAINER (保守担当者)
のアドレスが書いてある場合には, その人にメールを出してみましょう.
保守担当者の人がすでにアップグレードの準備をしているかも知れませんし,
(新しいバージョンの安定度に問題があるなど)
あえてアップグレードをしない理由があるのかも知れません.
保守担当者にアップグレードをしてくれと頼まれた場合,
あるいは, そもそも 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 のチェックはもとより,
PR データベースにある,
他の人が作成した port のチェックもできます.
あなたがチェックした port
についてのコメントをバグ報告と一般的な論評にしたがって送ってください.
PR データベースにある port をチェックすると,
わたしたちがそれらを commit するのを早くし,
あなたが何をしているか理解していることも示します.
バイナリの strip
バイナリは strip してください.
オリジナルのソースがバイナリを
strip してくれる場合は良いですが,
そうでない場合には port の
Makefile が
install ターゲットを持っているなら
BSD_INSTALL_PROGRAM を,
持っていないなら
strip するための post-install ルールを追加して
strip するようにするとよいでしょう.
たとえばこんな風になります:
post-install:
strip ${PREFIX}/bin/xdl
インストールされた実行形式がすでに strip
されているかどうかは file
コマンドで確認できます.
not stripped
と表示されなければ strip されていることを示しています.
INSTALL_* マクロ
あなた自身の *-install
ターゲットでファイルの正しいモードとオーナを保証するために,
必ず
bsd.port.mk
で提供されているマクロを使用してください.
${INSTALL_PROGRAM}
は実行可能なバイナリをインストール
(し, その過程で strip 処理)するコマンドです.
${INSTALL_SCRIPT}
は実行可能なスクリプトをインストールするコマンドです.
${INSTALL_DATA}
は共有可能なデータをインストールするコマンドです.
${INSTALL_MAN}
はマニュアルとその他の文書をインストールするコマンドです
(圧縮はしません).
これらは基本的に install
コマンドに適切なフラグを与えたものです.
それらは distfile の Makefile
で, 頭に BSD_
が付けられた
(つまり BSD_INSTALL_PROGRM というような)
形で使うことができます.
どのようにこれらを使用するかは以下の例を見てください.
WRKDIR
WKRDIR
の外のファイルにはなにも書き込まないように
してください.
WRKDIR は
ports のビルド中に書き込こめることが保証されている唯一の場所です
(CDROM からの ports
のコンパイル を参照).
PKGDIR
にあるファイルを修正する必要があるときには変数の再定義によって行ない,
上書きはしないでください.
WRKDIRPREFIX
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 などの,
他の BSD システムへの移植が可能なように,
できるだけ汎用的な変更を行なうことを心がけてください.
4.3BSD/Reno (1990)
およびそれより新しい BSD のバージョンを古いバージョンと区別するには
BSD マクロを利用するのがよいでしょう.
これは <sys/param.h> で定義されています.
このファイルがすでにインクルードされていれば良いのですが,
もしそうでない場合には,
以下のコードをその
.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
#include <sys/param.h>
#endif
この方法を使用するときには,
Makefile 中の
CFLAGSに
-DHAVE_SYS_PARAM_H
を加えることを忘れないようにしてください.
いったん sys/param.h
がインクルードされると,
#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))
これは, 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
#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 と同じです)
2.2.1-RELEASE 以後の 2.2-STABLE
220000 (これも同じです)
texinfo-3.9 以後の 2.2-STABLE
221001
top 導入以後の 2.2-STABLE
221002
2.2.2-RELEASE
222000
2.2.2-RELEASE 以後の 2.2-STABLE
222001
2.2.5-RELEASE
225000
2.2.5-RELEASE 以後の 2.2-STABLE
225001
ldconfig -R 以後の 2.2-STABLE
225002
2.2.6-RELEASE
226000
2.2.7-RELEASE
227000
2.2.7-RELEASE 以後の 2.2-STABLE
227001
semctl(2) 変更後の 2.2-STABLE
227002
2.2.8-RELEASE
228000
2.2.8-RELEASE 以後の 2.2-STABLE
228001
mount(2) 変更以前の 3.0-CURRENT
300000
mount(2) 変更以後の 3.0-CURRENT
300001
semctl(2) 変更以後の 3.0-CURRENT
300002
ioctl 引数変更後の 3.0-CURRENT
300003
ELF 移行後の 3.0-CURRENT
300004
3.0-RELEASE
300005
3.0-RELEASE 以後の 3.0-CURRENT
300006
3/4 の分岐後の 3.0-STABLE
300007
3.1-RELEASE
310000
3.1-RELEASE 以後の 3.1-STABLE
310001
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
330002
3.4-RELEASE
340000
3.4-STABLE
340001
3.4 の分岐後の 4.0-CURRENT
400000
dynamic linker の変更後の 4.0-CURRENT
400001
C++ コンストラクタ/デストラクタ順序変更後の
4.0-CURRENT
400002
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
400005
cdevsw 登録方法の変更後の 4.0-CURRENT
400006
ソケットレベルの証明書 (credential) のための
so_cred への追加後の 4.0-CURRENT
400007
libc_r への poll syscall ラッパー追加後の
4.0-CURRENT
400008
kernel の dev_t 型から
struct spacinfo ポインタへの
変更後の 4.0-CURRENT
400009
jail(2) のセキュリティホール修正後の 4.0-CURRENT
400010
sigset_t
のデータ型変更後の 4.0-CURRENT
400011
システムコンパイラを gcc 2.95.2 にアップグレードした後の
4.0-CURRENT
400012
追加可能な Linux モードの ioctl ハンドラが追加された後の
4.0-CURRENT
400013
OpenSSL が導入された後の 4.0-CURRENT
400014
GCC 2.95.2 の C++ ABI 変更で,
デフォルトが -fvtable-thunks から -fno-vtable-thunks に変更された後の
4.0-CURRENT
400015
OpenSSH が導入された後の 4.0-CURRENT
400016
4.0-RELEASE
400017
4.0-RELEASE より後の 4.0-STABLE
400018
libxpg4 が libc にマージされた後の
4.0-STABLE
400020
Binutils の 2.10.0 へのアップグレードと
ELF バイナリのマーク付け (branding) 方法の変更,
ベースシステムへの tcsh の導入後の
4.0-STABLE
400021
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
mtree のデフォルトをオリジナルの変種に戻し,
シンボリックリンクをたどる -L オプションを追加した後の
5.0-CURRENT
500010
(2.2-STABLE は 2.2.5-RELESE 以後,
2.2.5-STABLE
と呼ばれることがあります.)
見てのとおりこれは年・月というフォーマットになっていましたが,
バージョン 2.2 からより直接的にメジャー/マイナー番号を使うように変更になりました.
並行していくつかのブランチ
(枝分かれしたバージョン)
を開発する場合には,
リリースされた日付でそれらのリリースを分類することが不可能だからです
(あなたが今 port
を作成するときに, 古い -CURRENT 達について心配する必要はありません.
これは参考のために挙げられているに過ぎないからです).
これまで, 何百もの
port が作られてきましたが,
__FreeBSD__
が正しく使われたのは一つか二つの場合だけでしょう.
以前の port が誤った場所でそのマクロを使っているからといって,
それをまねする理由はありません.
bsd.port.mk の後に書くこと
.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 で返される
オペレーティングシステム (例,
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
.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:
.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/MESSAGE
ファイルを利用してメッセージを表示することができます.
詳細は
pkg/MESSAGE を使うの節を参照してください.
MESSAGE
ファイルを
pkg/PLIST
に加える必要はありません.
DIST_SUBDIR
/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 情報を入れてください.
これらのファイルはもはや package
の作成だけに使われるものではなくなっています.
たとえ NO_PACKAGE
が定義されていたとしても必須であることに注意してください.
RCS 文字列
RCS が特別な意味を与えている文字列をパッチ内に入れないようにしてください.
ファイルを私たちのソースツリーに入れる時,
これらの文字列は CVS によって書き換えられてしまい,
後でまたパッチを使おうとした時にうまくいかないことがあります.
RCS 文字列はドル記号 ($)
で囲まれており,
$FreeBSD や
$RCS
などで始まります.
再帰的 diff
diff
の再帰
()
フラグを使って再帰的なパッチを作るのは大変結構なのですが,
でき上がったパッチは必ず目でチェックして余計なゴミが入っていないことを確認してください.
よくあるのはバックアップファイル同士の変更点,
あるいは
Imake や
GNU configure
を使うソフトウェアの
Makefile
の変更点が入っている場合などです.
また configure.in を編集して
autoconf を使って
configure を作り直すときには,
configure の diff は含めずに
(それらは良く数千行におよぶことがあります),
USE_AUTOCONF=yes を定義して
configure.in の
diff をとってください.
ファイルをまるごと消す場合には,
パッチを使わずに
post-extract ターゲットで消す方が簡単です.
できあがった差分に満足したら,
それらをソースのファイルごとに別々のパッチファイルに分割してください.
PREFIX
なるべく port は PREFIX
に対する相対パスにインストールすることができるように心がけてください
(この変数の値は
USE_X_PREFIX か
USE_IMAKE が指定してある時には
X11BASE
(デフォルト/usr/X11R6),
そうでない場合にはLOCALBASE
(デフォルト/usr/local)
にセットされます).
サイトによってフリーソフトウェアがインストールされる場所が違いますので,
ソース内で
/usr/local や
/usr/X11R6
を明示的に書かないようにしてください.
X のプログラムで
imake を使うものについては,
これは問題にはなりません.
それ以外の場合にはソース中の Makefile やスクリプトで
/usr/local
(imake を使わない X のプログラムは /usr/X11R6)
と書いてあるところを
PREFIX に書き換えてください.
この値は port のコンパイルおよび,
インストール時に自動的に環境変数として下位 make に渡されます.
USE_X_PREFIX
は本当に必要な時
(つまり X のライブラリなどとリンクしたり,
X11BASE 以下にあるファイルを参照したりする必要がある時)
以外には設定しないでください.
変数 PREFIX の値は
port の Makefile やユーザの環境で変更することもできます.
しかし, 個々の port が Makefile
でこの変数の値を明示的に設定することはなるべくしないでください.
また, 他の port からインストールされるプログラムやファイルを指定するときには,
上で述べた変数を使用してください.
たとえば less のフルパスを
PAGER というマクロに入れたい場合は,
コンパイラに
-DPAGER=\"/usr/local/bin/less\"
と渡すかわりに
-DPAGER=\"${PREFIX}/bin/less\"
(X を使う port の時は
-DPAGER=\"${LOCALBASE}/bin/less\")
を渡してください.
こうしておけば /usr/local
がまるごとどこか他の場所に移してあるサイトでもあなたの port
がそのまま使える可能性が高くなります.
ディレクトリ構成
インストール時には
PREFIX
の正しいサブディレクトリにファイルを置くように心がけてください.
ソフトウェアによっては新しいディレクトリを一つ作って,
ファイルを全部それに入れてしまうものがありますが,
それは良くありません.
また, バイナリ, ヘッダファイルとマニュアル以外のすべてを
lib
というディレクトリに入れてしまう port もありますが,
これも BSD 的なファイルシステム構成からいうと正しくありません.
これは以下のように分散すべきです.
etc
にセットアップ/コンフィグレーションファイル,
libexec
に内部で使用されるプログラム
(コマンドラインから呼ばれることのないコマンド),
sbin
に管理者用のコマンド,
info
に GNU Info 用の文書,
そして
share にアーキテクチャに依存しないファイルが入ります.
詳細については &man.hier.7; のマニュアルページを参照してください.
/usr
の構成方針はほとんどそのまま
/usr/local にもあてはまります.
USENET ニュース
を扱う ports は例外です.
これらはファイルのインストール先として
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
これを使えば, たとえ他の
port がファイルをインストールしていて
PREFIX/share/doc/gimp
が空でない場合でもエラーメッセージは表示されませんし,
pkg_delete
が異常終了することもありません.
UID
あなたの port が,
インストールされるシステム上に特定のユーザを必要とする場合は
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
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
このリストを最新の状態に保つためにも,
この範囲の UID や GID を予約するような port を作ったり,
既存の port にそのような改変を行ってわたしたちに送るときには
UID の予約に関する注意書きをつけてください.
合理的な port
Makefile
は単純かつ適切であるべきです. もし,
Makefile を数行短かくできたり,
もっと読みやすくできるのであればそうしてください.
たとえば,
シェルの if 構文を使うかわりに
make の .if 構文を使う,
EXTRACT* の再定義で代用できるのであれば
do-extract を再定義しない,
CONFIGURE_ARGS += --prefix=${PREFIX}
とするかわりに
GNU_CONFIGURE とする, などです.
CFLAGS の尊重
CFLAGS 変数は尊重すべきです.
port がこれを無視する場合は,
NO_PACKAGE=ignores cflags を
Makefile に加えてください.
CFLAGS 変数をきちんと考慮した
Makefile の例を以下に示します.
+= の部分に注目してください.
CFLAGS += -Wall -Werror
次は CFLAGS
変数を考慮しない Makefile の例です.
CFLAGS = -Wall -Werror
CFLAGS 変数は,
FreeBSD システムの
/etc/make.conf
で定義されています.
最初の例では既存の定義を保存しつつ CFLAGS
変数にオプションフラグを追加しているのに対し,
二番目の例では既存の定義をすべて無効にしてしまっています.
コンフィグレーション (設定) ファイル
もしあなたの port が設定ファイルを
PREFIX/etc
に置く必要がある場合には, それを単純にインストールしたり,
pkg/PLIST
に加えてはいけません.
こうしてしまうと
pkg_delete
によってユーザが苦労して作ったファイルが消えてしまったり,
新しくインストールする時に上書きされてしまったりします.
かわりに見本となるファイルを
サフィックス
(filename.sample が良いでしょう)
を付けてインストールしてメッセージを表示し,
ソフトウェアを動かす前にユーザがそのファイルをコピーして編集をしなければならないことを知らせましょう.
portlint
送付や commit をする前に
portlint
を使ってチェックしましょう.
フィードバック
port を作るためにソフトウェアに変更を加えたら,
なるべく原作者にその旨を伝えてパッチ等を送ってください.
これらが次のリリースに取り入れられればアップグレードが楽になります.
README.html
README.html というファイルを含めてはいけません.
このファイルは, cvs コレクションの一部ではなく,
make readme コマンドで生成されるファイルです.
その他諸々
pkg/DESCR,
pkg/COMMENT,
pkg/PLIST などのファイルはそれぞれ二重にチェックしてください.
再検討してもっと良い記述があればそれに置きかえてください.
GNU General Public License
(GNU一般公有使用許諾)
のコピーは
(すでにあるので)
コピーしないでください.
お願いします.
法律に関することには十分注意をはらってください.
わたしたちに法律に反するような形でソフトウェアの配布をさせないでください!
困ったら....
わたしたちに質問を送る前に,
既存の port の例と
bsd.port.mk をちゃんと読んでください!
;)
それでもわからないことがあったら一人で悩まないでどんどん質問してください!
:-)
Makefile のサンプル
これは port の
Makefile を作る際のお手本です.
かぎかっこ ([]) 内のコメントは忘れずに取ってください.
変数の順番, 段落の間の空行など,
Makefile
を作るときはなるべくこの形式に従ってください.
この形式は重要な情報が簡単に見つけられるように設計されています.
portlint を使って
Makefile をチェックすることが推奨されています.
[ヘッダ ... どのような 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
[このソフトウェアを最初に FreeBSD に port した人の名前, つまり,
この Makefile の最初の版を書いた人です. この port をアップグレー
ドするとき, この行も変えないでください.]
# Whom: Satoshi Asami <asami@FreeBSD.org>
#
# $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
[MASTER_SITE_* マクロを使用しない場合は,
最後のスラッシュを忘れないように ("/")!]
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
DISTNAME= xdvi-pl18
[ソースファイルが標準の ".tar.gz" 形式でない時にこれを使いましょう]
EXTRACT_SUFX= .tar.Z
[配布パッチセクション -- ない場合もあります]
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
[依存するport -- ない場合もあります]
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} に対する相対パスで作られてい
い場合にこの変数の指定が必要かも...]
PATCH_DIST_STRIP= -p1
[GNU autoconf によって生成された "configure" スクリプトを走らせたいなら...]
GNU_CONFIGURE= yes
[/usr/bin/makeでなく, GNU make を使わないといけないなら...]
USE_GMAKE= yes
[これが X のアプリケーションで "xmkmf -a" を走らせたいなら...]
USE_IMAKE= yes
[などなど]
[下の方のルールで使う非標準の変数]
MY_FAVORITE_RESPONSE= "yeah, right"
[そして, 特別なターゲット, 使用順に]
pre-fetch:
i go fetch something, yeah
post-patch:
i need to do something after patch, great
pre-install:
and then some more stuff before installing, wow
[最後には必ず]
.include <bsd.port.mk>
パッキングリストの自動生成
まず, あなたの port に
PLIST
がないことを除いて完全なことを確認して,
空の PLIST を作ってください.
&prompt.root; touch 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 をインストールしてパッキングリストを作ることができます.
&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) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg/PLIST
最後に, パッキングリストを手で整える必要があります.
完全に自動化されていると言ったのはうそです.
マニュアルページファイルはパッキングリストにではなく,
port の Makefile 中の
MANn
に記述しなければなりません.
ユーザ設定ファイルは削除するか
filename.sample
としてインストールされなければなりません.
また info/dir
ファイルはリストに含めず,
info ファイルに記述されているように,
適切な install-info 行に追加しなければなりません.
port によってインストールされるライブラリは,
ldconfig
の節で示したように記載されるべきです.
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 変数に定義されなければなりません.
名前の部分は原則的にはすべて英小文字を使います.
例外はたくさんのプログラムが入っている巨大な port の場合で,
XFree86 (ほんとにあるんですよ) や
ImageMagick
などがこれにあたります.
そうでない場合には名前の大文字を小文字に
(少なくとも最初の一字だけは)
変えてください.
もし大文字であることが重要な場合
(たとえば一文字の名前,
R とか V)
には,
あなたの裁量で大文字を使うのも良いでしょう.
Perl 5 のモジュールでは先頭に
p5- を付け,
二重コロン (::)
のセパレータをハイフン
(-)
に置きかえる習慣になっています.
たとえば
Data::Dumper は
p5-Data-Dumper になります.
また, そのソフトウェアの名前として通常使われるものに番号,
ハイフン, あるいは下線が入っている場合には,
それらを使うことも構いません
(kinput2など).
コンパイル時に環境変数や
make の引数などでハードコードされたデフォルトを変えてコンパイルできる場合,
-compiled.specifics
にそのコンパイル時のデフォルトを入れてください
(ハイフンはあってもなくてもかまいません).
用紙のサイズ, あるいはフォントの解像度などがこれにあたります.
compiled.specifics 部分は,
PKGNAMESUFFIX 変数に定義されなければなりません.
バージョン番号は数字とアルファベットからなり,
ピリオド (.) で区切ります.
アルファベットは二文字以上続けてはいけません.
ただ一つの例外は「パッチレベル」を意味する
pl で,
それ以外にバージョン番号がまったくついていない場合にのみ使うことができます.
もしソフトウェアのバージョンに
"alpha", "beta" や "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 のような文字列は使えない
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 に,
テキストベースのものは機能によって
comms か
misc に分類されます.
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
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
plan9*
Plan9 に由来するさまざまなソフトウェア
print
印刷ソフトウェア.
DTP 用ツール (プレビュアなど) もここに分類されます.
python*
python 言語で書かれたソフトウェア
+
+
+ ruby*
+ ruby 言語で書かれたソフトウェア
+
russian
ロシア語サポート
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
vietnamese
ベトナム語サポート
windowmaker*
WindowMaker ウィンドウマネージャをサポートする ports
www
World Wide Web 関連のソフトウェア.
HTML 言語サポートもここに分類されます.
x11
X ウィンドウシステムとその関連ソフトウェア.
このカテゴリは,
直接ウィンドウシステムをサポートするソフトウェアのみを対象とするものです.
通常の 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 ウィンドウマネージャ
適切なカテゴリの選択
多くのカテゴリに重なるので,
どれを第一
カテゴリにするかを決めなければならないことがたびたびあるでしょう.
これをうまく決めるルールがいくつかあります.
以下はその優先順のリストで, 優先度の高いものから低いものの順に書いてあります.
言語特有のカテゴリがまず最初です.
たとえば日本語の
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 プロジェクトに貢献するには,
それが最も簡単な方法です!
:-)
diff --git a/ja_JP.eucJP/books/porters-handbook/freebsd.dsl b/ja_JP.eucJP/books/porters-handbook/freebsd.dsl
index fa2619967c..bb171bf4fb 100644
--- a/ja_JP.eucJP/books/porters-handbook/freebsd.dsl
+++ b/ja_JP.eucJP/books/porters-handbook/freebsd.dsl
@@ -1,52 +1,59 @@
]>
へ(英語で),")
(make empty-element gi: "br")
(literal "FreeBSD ports に関する日本語での議論は <")
(make element gi: "a"
attributes: (list (list "href" "mailto:ports-jp@jp.FreeBSD.org"))
(literal "ports-jp@jp.FreeBSD.org"))
(literal "> へお願いします.")
(make empty-element gi: "br")
(literal "この文書の原文に関するお問い合わせは <")
(make element gi: "a"
attributes: (list (list "href" "mailto:doc@freebsd.org"))
(literal "doc@freebsd.org"))
(literal "> へ(英語で),")
(make empty-element gi: "br")
(literal "日本語訳に関するお問い合わせは <")
(make element gi: "a"
attributes: (list (list "href" "mailto:doc-jp@jp.FreeBSD.org"))
(literal "doc-jp@jp.FreeBSD.org"))
(literal "> へお願いします.")))
+
+
+ (element quote
+ (make sequence
+ (literal "``")
+ (process-children)
+ (literal "''")))
]]>