diff options
Diffstat (limited to 'ja/handbook/ports/chapter.sgml')
-rw-r--r-- | ja/handbook/ports/chapter.sgml | 5233 |
1 files changed, 0 insertions, 5233 deletions
diff --git a/ja/handbook/ports/chapter.sgml b/ja/handbook/ports/chapter.sgml deleted file mode 100644 index 02245a926c..0000000000 --- a/ja/handbook/ports/chapter.sgml +++ /dev/null @@ -1,5233 +0,0 @@ -<!-- - The FreeBSD Documentation Project - The FreeBSD Japanese Documentation Project - - Original revision: 1.16 - $Id: chapter.sgml,v 1.4 1999-05-08 15:13:32 kuriyama Exp $ ---> - -<chapter id="ports"> - <title>アプリケーションのインストール : ports コレクション</title> - - <para><emphasis>原作: &a.jraynard;.</emphasis></para> - - <para><emphasis>訳: &a.jp.masaki;, &a.jp.saeki;.<!-- <br> --> - 11 November 1996.</emphasis></para> - - <para>FreeBSD の ports コレクションを利用すると, 最小限の労力で - 非常に幅広くのアプリケーションのコンパイルとインストールがおこなえます.</para> - - <para>やってみたことのある方はよくご存知でしょうが, - オープンな規格とは 全くの誇大広告であって, - あるプログラムを異なるバージョンの Unix 上で - 動作させることは退屈で手間のかかる仕事です. - 求めているプログラムが自分のシステムでうまくコンパイルでき, - 正しいところにインストールできて, - 完璧に動作するとしたらとてもラッキーです. しかし, - あいにくこれは滅多にないことなのです. - ほとんどのプログラムについて, - あなたは髪を掻きむしることになるでしょうし, - かなりのプログラムでは, 白髪混じりの頭になってしまったり, - あるいは慢性の 脱毛症にすら なってしまうかもしれません...</para> - - <para>いくつかのソフトウェアディストリビューションでは, - 設定用のスクリプトを - 配布することでこの問題を解決しようとしています. - これらのスクリプトの中には非常に精巧なものもありますが, - 残念ながら, 中にはこれまで - 聞いたこともないようなシステムの名前をしゃあしゃあと - 言い放ったうえに, まるでシステムレベルの Unix - プログラミングに関する 最終試験のような, - たくさんの質問をしてくる場合があります. (例えば, - <literal>このシステムの gethitlist 関数は fromboz への const - ポインタを 返しますか? それとも const fromboz - へのポインタを返しますか?</literal>, <literal>このシステムには - Foonix スタイルの, 容認できない例外処理をおこなう - ルーチンがありますか? もしもないとしたら, - それはなぜですか?</literal>)</para> - - <para>幸いなことに, ports コレクションがあれば, - これらのきつい作業はすべて 完了しています. <command>make - install</command> とタイプするだけで, 動作するプログラムを - 入手することができるのです.</para> - - <sect1> - <title>なぜ ports コレクションを作ったのか?</title> - - <para>FreeBSD の基本システムは, - 非常に多くのツールやユーティリティから 構成されています. しかし, - よく使われるプログラムのうち多くのものが, - この基本システムには含まれていません. その理由は:-</para> - - <orderedlist> - <listitem> - <para>ある Lisp ベースのエディタのように, - それがないと生きていけないと 言う人もいれば, - ディスクの無駄だと言う人もいるようなプログラム.</para> - </listitem> - - <listitem> - <para>基本システムに組み込むには特殊すぎるプログラム. (CAD - やデータベースなど.)</para> - </listitem> - - <listitem> - <para>“時間のある時に, - ちょっと見ておかなければ”というような類の, - それがシステムに含まれていないことが - 致命的とは言えないプログラム. (おそらく, - 何らかの言語などでしょう.)</para> - </listitem> - - <listitem> - <para>FreeBSD - のような真面目なオペレーティングシステムの一部として - 供給するには遊びが過ぎるようなプログラム. ;-)</para> - </listitem> - - <listitem> - <para>たくさんのプログラムを基本システムに組み込んだとしても, - もっともっと 組み込みたいという要求が出てくるので, - どこかで制限を引かなくてはならないため. (そうしなければ - FreeBSD の配布物は, - とてつもなく膨大になってしまうでしょう.)</para> - </listitem> - </orderedlist> - - <para>すべての人が自分のお気に入りの - プログラムを手作業で移植しなければ ならないとしたら, - (途方もない膨大な作業の繰り返しをさておいたとしても) - それは明らかに不合理な話です. そこで, FreeBSD プロジェクトでは, - 標準のツールを使って移植のプロセスを - 自動化する巧妙な方法を考え出しました.</para> - - <para>なお, - これは単純ながら非常に柔軟なツールを組み合わせることで, - 非常に強力な働きをさせるという“Unix - 流”の作業の優れた実例です.</para> - </sect1> - - <sect1> - <title>ports コレクションはどのように動くのでしょうか?</title> - - <para>インターネットでは通常, <link - linkend="ports-tarball">tarball</link> の形で - プログラムが配布されています. これは, Makefile - とソースコードで構成され, 普通は何らかの説明書 (あいにく, - いつもわかりやすく書かれているとは 限りませんが) - が付属しています. ことによるとコンフィグレーションスクリプトも - 含まれているかもしれません.</para> - - <para>標準的な手順では, FTP で tarball を入手して, - 適当なディレクトリで展開します. 次に説明書を読んで, - 必要な変更をおこないます. そして, 設定スクリプトを実行し, 標準の - <command>make</command> - コマンドを使ってソースのコンパイルとインストールを - おこないます.</para> - - <para>FreeBSD の ports も tarball の仕組みを利用していますが, - これはユーザが 苦労して作業することを期待したものではなく, - どのようにすれば FreeBSD 上で - そのプログラムが動くようになるかという「ノウハウ」を <link - linkend="ports-skeleton">スケルトン</link> - を使用して収めているものです. スケルトンは, カスタマイズ済みの - <link linkend="ports-makefile">Makefile</link> も - 提供していますので, ほとんどすべての ports - は同じ手順でインストールすることが できます.</para> - - <para>もしあなたが (<ulink - URL="file://localhost/usr/ports/devel/ElectricFence">あなたの - FreeBSD システム</ulink> または <ulink - URL="ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports/devel/ElectricFence"> - FTP サイト</ulink> にある) ports スケルトンを見ていて, - そこに潜んでいる あらゆる種類の先端的な - ロケット工学的なものを見つけられると期待していると, - つまらなそうなファイルやディレクトリがそこにあるだけなのを見て, - がっかりするかもしれません. - (ports を手に入れる方法については, すぐに - <link linkend="ports-getting">FreeBSD ports コレクションの入手方法 - </link> の節でお話します.)</para> - - <para>“一体どうしたらいいんだ? ここにはソースコードが - ないじゃないか?” - というあなたの叫びが聞こえるようです.</para> - - <para>心配いりません. おとなしく読んでいけば, すべてが (たぶん) - 明らかに なるでしょう. 試しに ports をインストールして, - 何が起きるのかを見てみましょう. - ここではサンプルとして開発者向けの便利なツール, - <application>ElectricFence</application> を選択します. - このスケルトンを選んだ理由は, 他の ports - に比べても素直で理解しやすく 書かれているからです.</para> - - <note> - <para>自宅で試してみる場合には, root - になる必要があるでしょう.</para> - </note> - - <!-- kuriyama - remove informalexample --> - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports/devel/ElectricFence</userinput> -&prompt.root; <userinput>make install</userinput> ->> Checksum OK for ElectricFence-2.0.5.tar.gz. -===> Extracting for ElectricFence-2.0.5 -===> Patching for ElectricFence-2.0.5 -===> Applying FreeBSD patches for ElectricFence-2.0.5 -===> Configuring for ElectricFence-2.0.5 -===> Building for ElectricFence-2.0.5 -[大量のメッセージをコンパイラが出力します...] -===> Installing for ElectricFence-2.0.5 -===> Warning: your umask is "0002". - If this is not desired, set it to an appropriate value - and install this port again by ``make reinstall''. -install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib -install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3 -===> Compressing manual pages for ElectricFence-2.0.5 -===> Registering installation for ElectricFence-2.0.5</screen> - </informalexample> - - <para>ここではあなたが混乱しないように, コンパイル時の出力を - すべて取り除いてあります.</para> - - <para>もしもあなた自身で実行されたら, 最初にこのような - 出力結果が得られるはずです:-</para> - - <informalexample id="ports-fetch"> - <screen>&prompt.root; <userinput>make install</userinput> ->> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system. ->> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.</screen> - </informalexample> - - <para><command>make</command> プログラムは, - あなたの手元にソースコードがないことを検出し, - 処理を続けられるようにソースを FTP でダウンロードしようとします. - この例では, あらかじめ手動でソースコードを用意してあったので, - 持ってくる必要はありませんでした.</para> - - <para>では, 続けて <command>make</command> - プログラムが何をしているのか見てみましょう.</para> - - <procedure> - <step> - <para>ソースコード <link - linkend="ports-tarball">tarball</link> のありかを - 確認します. 手元にファイルが存在しなければ, FTP - サイトから入手しようとします.</para> - </step> - - <step> - <para><link linkend="ports-checksum">チェックサム</link> - テストを実行して, その tarball - が事故か何かで途中で切れていたり, ASCII モードで - ダウンロードされていたり, - 転送中にニュートリノによって傷められたりして - 改変されたりしていないかどうかを確認します.</para> - </step> - - <step> - <para>tarball を一時的な作業用ディレクトリに展開します.</para> - </step> - - <step> - <para>FreeBSD 上でコンパイルしたり, 動作させるのに必要な - すべての <link linkend="ports-patch">パッチ</link> - をソースコードに当てます.</para> - </step> - - <step> - <para>構築のために必要な - コンフィグレーションスクリプトを実行します. - コンフィグレーションスクリプトの - 質問には正確に答えてください.</para> - </step> - - <step> - <para>(いよいよ!) ソースコードをコンパイルします.</para> - </step> - - <step> - <para>実行形式のプログラム, マニュアル, - その他のサポートファイルを, - システムのプログラムと混ざってしまわないように - <filename>/usr/local</filename> 以下に インストールします. - ports はすべて同じ場所にインストールされ, - システムのあちこちにばらまかれることはありません.</para> - </step> - - <step> - <para>インストール結果はデータベースに登録されます. - これにより, - インストールしたプログラムがもしも気に入らなかったときも, - システムから すべての痕跡をきれいに <link - linkend="ports-remove">消去</link> - することができます.</para> - </step> - </procedure> - - <para>以上のステップが <command>make</command> - の出力と一致しているかどうか確認してください. - 今まで確認していなかったのなら, - 今からするようにしてください!</para> - </sect1> - - <sect1 id="ports-getting"> - <title>FreeBSD ports コレクションの入手</title> - - <para>あるプログラムの FreeBSD port - を入手するには二つの方法があります. ひとつは <link - linkend="ports-cd">FreeBSD CD-ROM</link> を使う方法で, - もうひとつは <link - linkend="ports-inet">インターネット接続</link> - を使う方法です.</para> - - <sect2 id="ports-cd"> - <title>CD-ROM からコンパイルする</title> - - <para>FreeBSD CD-ROM がドライブに入っており, - <filename>/cdrom</filename> にマウントされていると仮定すると - (マウントポイントが <filename>/cdrom</filename> - である必要があります), ただ普通に実行するだけで ports - を構築できるようになり, tarball - をネットワーク経由でダウンロードするのではなく - <filename>/cdrom/ports/distfiles/</filename> - からさがすようになります (そこにあればの話ですが).</para> - - <para>CD-ROM にある port スケルトンを使いたければ, 他に - <filename>/etc/make.conf</filename> の - 変数を以下のようにセットする方法があります:</para> - - <programlisting> -PORTSDIR= /cdrom/ports -DISTDIR= /tmp/distfiles -WRKDIRPREFIX= /tmp</programlisting> - - <para>(任意の十分な空きスペースの場所を <literal>/tmp</literal> - とおいています). - 次に, <filename>/cdrom/ports</filename> 下の適宜のサブディレクトリに - <command>cd</command> して, 例のごとく - <command>make install</command> とタイプします. - <makevar>WRKDIRPREFIX</makevar> は port に - <filename>/tmp/cdrom/ports</filename> の下でビルドさせようとします; - 例えば, <filename>games/oneko</filename> は - <filename>/tmp/cdrom/ports/games/oneko</filename> の下で - ビルドされるでしょう. - </para> - - <para>ライセンスの制限により, いくつかの ports - でオリジナルのソースコードを CD-ROM - に入れることができなかったものがあることに注意してください. - この場合, <link linkend="ports-inet">インターネット経由で - ports をコンパイルする</link> の - 節を参照してください.</para> - </sect2> - - <sect2 id="ports-inet"> - <title>インターネット経由で ports をコンパイルする</title> - - <para>CD-ROM を持っていなかったり, その ports - の最新バージョンを確実に入手したい 場合は, その ports の <link - linkend="ports-skeleton">スケルトン</link> を - ダウンロードする必要があります. ところで, これは落し穴が - たくさんある作業に見えるかもしれませんが, - 実際には非常に簡単です.</para> - - <para>初めに, あなたの動かしている FreeBSD - がリリースバージョンなら <ulink - url="http://www.freebsd.org/ports/">ports ページ </ulink> - でその FreeBSD 用の “アップグレードキット” - を手にいれてください. このパッケージには, 最新の ports - をコンパイルするのに必要な, - リリース以降に更新されたファイルが含まれています.</para> - - <para>FreeBSD の FTP サーバーがその場で <link - linkend="ports-tarball">tarball</link> - を作成できることを利用してスケルトンを入手すると - 非常に便利です. ここでは例として databases ディレクトリにある - gnats プログラムを使って説明します. - (角型かっこの中の文はコメントなので, 実際に実行する場合には, - これをタイプしないでください!):-</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>mkdir databases</userinput> -&prompt.root; <userinput>cd databases</userinput> -&prompt.root; <userinput>ftp ftp.freebsd.org</userinput> -[ユーザ名 `ftp' でログインし, パスワードを要求されたら, あなたの電子メール -アドレスを入力してください. バイナリモードを (イメージモードと呼ばれることも -あります) 使うのをお忘れなく!] -<prompt>></prompt> <userinput>cd /pub/FreeBSD/ports/ports/databases</userinput> -<prompt>></prompt> <userinput>get gnats.tar</userinput> -[gnats スケルトンの tarballs を取得] -<prompt>></prompt> <userinput>quit</userinput> -&prompt.root; <userinput>tar xf gnats.tar</userinput> -[gnats スケルトンの展開] -&prompt.root; <userinput>cd gnats</userinput> -&prompt.root; <userinput>make install</userinput> -[gnats の構築とインストール]</screen> - </informalexample> - - <para>さて何が起きるでしょうか? FTP - サイトにいつも通りに接続して, データベースの - サブディレクトリに移動します. <command>get gnats.tar</command> - とコマンドを入力すると, FTP サイトでは gnats ディレクトリを - <link linkend="ports-tarball">tarred</link> - にしてくれるのです.</para> - - <para>gnats スケルトンを展開したら, gnats ディレクトリへ移動して - ports を構築します. <link linkend="ports-fetch">すでに</link> - 説明したように, make の過程で - 手元にソースコードがないことを検出すると, - ソースコードを取得してから 展開し, - パッチ当てと構築をおこないます.</para> - - <para>それでは, 少し冒険をしてみましょう. 一つの ports - スケルトンを 取得するかわりに, たとえば ports - コレクションの中のデータベースの スケルトンをすべて, - サブディレクトリ全体を取得してみましょう. - やり方はほとんど同じです:-</para> - - <para> - <literallayout> &prompt.root; cd /usr/ports - &prompt.root; ftp ftp.freebsd.org - [ユーザ名 `ftp' でログインし, パスワードを要求されたら, あなたの電子メール -アドレスを入力してください. バイナリモードを (イメージモードと呼ばれることも -あります) 使うのをお忘れなく!] - > cd /pub/FreeBSD/ports/ports - > get databases.tar [データベースディレクトリの tarballs を取得] - > quit - &prompt.root; tar xf databases.tar [すべてのスケルトンを展開] - &prompt.root; cd databases - &prompt.root; make install [データベース ports 全部の構築とインストール] </literallayout> - </para> - <!-- kuriyama - literallayout? --> - - <para>わずかばかりの簡単なコマンドで, この FreeBSD - マシン上にデータベース - プログラムを一揃い手に入れてしまいました! 一つの ports - スケルトンを取ってきて それを構築する場合との違いは, - すべてのディレクトリを一度に取得して, - 全部を一度にコンパイルしたということだけです. - かなり感動的だと思いませんか?</para> - - <para>たくさんの ports をインストールする つもりなら, - おそらくすべての ports ディレクトリをダウンロードしておく - 価値があるでしょう.</para> - </sect2> - </sect1> - - <sect1 id="ports-skeleton"> - <title>スケルトン</title> - - <para>スケルトン (訳注: skeleton とは骸骨のことです) とは, - 締め切りを守るため, 食事をするのを忘れるほど仕事にのめり込んだ - ハッカーたちのなれの果ての ことでしょうか? FreeBSD - の屋根裏に潜む, なにか気持ちの悪いものでしょうか? いいえ, - ここでスケルトンの意味するところは, ports の魔術を実現するのに - 必要とされるすべてのものを提供する最小の骨組みのことです.</para> - - <sect2 id="ports-makefile"> - <title><filename>Makefile</filename></title> - - <para>スケルトンのもっとも重要な要素は Makefile です. Makefile - は ports を どのようにコンパイルし, - インストールをおこなうかを指示する - いろいろな命令を含んでいます. 以下に ElectricFence の Makefile - を示します:-</para> - - <programlisting> -# New ports collection makefile for: Electric Fence -# Version required: 2.0.5 -# Date created: 13 November 1997 -# Whom: jraynard -# -# $Id$ -# - -DISTNAME= ElectricFence-2.0.5 -CATEGORIES= devel -MASTER_SITES= ${MASTER_SITE_SUNSITE} -MASTER_SITE_SUBDIR= devel/lang/c - -MAINTAINER= jraynard@freebsd.org - -MAN3= libefence.3 - -do-install: - ${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib - ${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3 - -.include <bsd.port.mk></programlisting> - - <para>"#" で始まる行は, 人間のためのコメント行です. - (ほとんどの Unix のスクリプトと同じですね.)</para> - - <para><literal>DISTNAME</literal> は <link - linkend="ports-tarball">tarball</link> - の名前から拡張子を取ったものです.</para> - - <para><literal>CATEGORIES</literal> - はこのプログラムの種類を示します. この場合, - 開発者向けのユーティリティということになります. - 完全なリストはこのハンドブックの <link - linkend="porting-categories">カテゴリ</link> - をみてください.</para> - - <para><literal>MASTER_SITES</literal> はマスタ FTP サイトの URL - です. もしローカルシステムに <link - linkend="ports-tarball">tarball</link> がない場合には, - ここから取得します. これは信頼できると考えられているサイトで, - 通常はそのプログラムを - インターネット上で公式に配布しているサイトです. - (そのソフトウェアがインターネット上で「公式に」 - 配布されているとしたら)</para> - - <para><literal>MAINTAINER</literal> は, - 例えば新しいバージョンのプログラムが出た場合に, 必要であれば - スケルトンの更新をおこなう保守担当者の - 電子メールアドレスです.</para> - - <para>次の数行はとりあえず飛ばします. - - <literal>.include <bsd.port.mk></literal> - - この行は, この ports に必要なその他の命令やコマンドは - <filename>bsd.port.mk</filename> に - 入っているということを示しています. - これらはすべての ports で共通のものなので, - それぞれの Makefile に書いておく必要はありません. - そのため単一の標準ファイルに - まとめられているのです.</para> - - <para>ここでは Makefile - がどう働くかを詳細に調査するのが目的ではありませんので, - <literal>MAN3</literal> で始まる行は, インストールの後に - ElectricFence のマニュアルを 圧縮するために使用される, - と言っておくだけで充分でしょう. これにより, - 貴重なディスクスペースが保護されているわけです. オリジナルの - port では <maketarget>install</maketarget> - ターゲットが用意されていないので, - <maketarget>do-install</maketarget> からの 3 行が この ports - によって生成されたファイルを - 正しい場所に置くために使用されます.</para> - </sect2> - - <sect2> - <title><filename>files</filename> ディレクトリ</title> - - <para>ports のチェックサム算出には MD5 - アルゴリズムを使用しているので, この <link - linkend="ports-checksum">チェックサム</link> を含んでいる - ファイルは <filename>md5</filename> と呼ばれます. - ちょっと混乱するかもしれませんが, このファイルは - <filename>files</filename> という - 名前のディレクトリに置かれています.</para> - - <para>このディレクトリは, ports に必要だけれども, - 他のどこにも属さない 雑多なファイルも含んでいます.</para> - </sect2> - - <sect2> - <title><filename>patches</filename> ディレクトリ</title> - - <para>このディレクトリには, FreeBSD - ですべてを正常に動作させるのに 必要な <link - linkend="ports-patch">パッチ</link> が含まれています.</para> - </sect2> - - <sect2> - <title><filename>pkg</filename> ディレクトリ</title> - - <para>このディレクトリには, - 非常に役立つ三つのファイルが含まれています:-</para> - - <itemizedlist> - <listitem> - <para><filename>COMMENT</filename> — - プログラムについての 1 行の説明.</para> - </listitem> - - <listitem> - <para><filename>DESCR</filename> — より詳細な説明.</para> - </listitem> - - <listitem> - <para><filename>PLIST</filename> — - プログラムのインストール時に作成される, - すべてのファイルのリスト.</para> - </listitem> - </itemizedlist> - </sect2> - </sect1> - - <sect1 id="ports-troubleshooting"> - <title>ports が動かないのですが, どうしたらよいでしょう</title> - - <para>おやおや. では, 次の四つのどれかをやってみてください:</para> - - <orderedlist> - <listitem> - <para>自分で修正する. ports - の仕組みに関する技術的な詳細については, <link - linkend="porting"> - アプリケーションの移殖方法</link>をご覧ください.</para> - </listitem> - - <listitem> - <para>苦情をいう. これは電子メールで <emphasis>だけ</emphasis> - にしてください! このようなメールの宛先は &a.ports; です. - なお, 必ず port の名前やバージョン, その port のソースや - distfile(s) を どこから入手したか, - どんなエラーが発生したのかを書いておいてください.</para> - </listitem> - - <listitem> - <para>忘れてしまう. これはほとんどの場合最も簡単な方法です. - ports - のプログラムのうち必要不可欠な物はごくわずかです.</para> - </listitem> - - <listitem> - <para>FTP サイトからコンパイル済みのパッケージを入手する. - “マスター”パッケージコレクションは FreeBSD の - FTP サイトの <ulink - URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/"> - パッケージディレクトリ</ulink> に置いてありますが, - まずあなたの近くのローカルミラーサイトを確認してください! - ソースからのコンパイルに挑戦するよりも, - パッケージを使うほうが (全体的に見て) - ずっと確実に動作するでしょうし, - より手っ取り早い方法でもあります. - システムにパッケージをインストールするには, &man.pkg.add.1; - を使ってください.</para> - </listitem> - </orderedlist> - </sect1> - - <sect1> - <title>質問と回答集</title> - - <itemizedlist> - <listitem> - <para>Q. 私はモデムについての議論を - しているのかと思っていました??!</para> - - <para>A.なるほど, あなたはきっとコンピュータの背面についている - シリアルポートのことだと思ってしまったのでしょう. - あるバージョンの Unixから別のバージョンの Unix - へとプログラムを 移殖することを “porting” - というのですが, ここで我たちは “porting” の結果 - という意味で “port” を使っています. - (コンピュータに関わる人々の悪しき習慣として, - ひとつの同じ言葉を複数の - まったく違う意味として使うことがあるのです.)</para> - </listitem> - - <listitem> - <para>Q. 私は, 標準以外のプログラムのインストールには packages - を使うと 思っていたのですが.</para> - - <para>A. そのとおり. 通常は packages - が最も手早くて簡単な方法です.</para> - </listitem> - - <listitem> - <para>Q. それではどうして面倒な ports があるのですか?</para> - - <para>A. いくつかの理由があります:-</para> - - <orderedlist> - <listitem> - <para>いくつかのソフトウェアのライセンス条件には, - バイナリではなくソースコードでの - 配布を求めているものがあります.</para> - </listitem> - - <listitem> - <para>バイナリ配布を信用していない人もいます. - 少なくともソースコード があれば, ソースコードを読んで, - (理論的には) 潜在的な問題点を自分で - 見つけ出すこともできるはずです.</para> - </listitem> - - <listitem> - <para>ローカルなパッチを入手した場合, - それを自分で追加するために - ソースコードが必要になります.</para> - </listitem> - - <listitem> - <para>プログラムがいかにコンパイルされるべきかについて, - あなたはパッケージを作った人とは - 異なる見解を持っているかもしれません. - どんな最適化オプションをつけるべきかとか, - デバッグバージョンを作ってから それを strip - するべきだとか, いや, そうするべきでない, などなど, - 確固たる見解を持っている人もいるでしょう.</para> - </listitem> - - <listitem> - <para>ソースコードを手元に置いておきたい人たちもいます. - 彼らは, 退屈したときに眺めたり, あちこち解析してみたり, - ソースコードを 借用したり (もちろん, - ライセンスが許せばの話ですが) するのです.</para> - </listitem> - - <listitem> - <para>あなたがソースコードを持っていなければ, - それはソフトウェアとは 言えませんね! <!-- smiley - -->;-)</para> - </listitem> - </orderedlist> - </listitem> - - <listitem> - <para><anchor id="ports-patch"> - Q. パッチとは何ですか?</para> - - <para>A. パッチとは, - あるバージョンから他のバージョンへどのように変更するかを - 示す, (通常は) 小さなファイルです. “23 - 行目を削除”, “468 行目の後に これらの 2 - 行を追加”, または“197 - 行目をこのように変更”というような 内容を含んでいます. - これは, “diff” - という名前のプログラムで生成されます.</para> - </listitem> - - <listitem> - <para><anchor id="ports-tarball"> - Q. tarball とは一体何ですか?</para> - - <para>A. <filename>.tar</filename> または - <filename>.tar.gz</filename> という拡張子を持つファイルです. - (<filename>.tar.Z</filename> のようなバリエーションも - ありますし, DOS のファイルシステム用に - <filename>.tgz</filename> - と短縮される場合もあります.)</para> - - <para>これは基本的に, 一つのファイルに固めた - (<filename>.tar</filename>) ディレクトリツリーです. - 圧縮されている (<filename>.gz</filename>) 場合もあります. - これは元々 <emphasis>T</emphasis>ape - <emphasis>AR</emphasis>chives (訳注: テープアーカイブ) - (このため <command>tar</command> という名前なのです) - で使われていたものなのですが, - インターネット上でプログラムのソースコードを配布するために - 広く使われている方法です.</para> - - <para>これらのファイルの中身を見たり, - 展開したりすることもできます. FreeBSD - の基本システムに付属する Unix 標準の tar - コマンドを使ってみると 次のようになります:-</para> - - <informalexample> - <screen>&prompt.user; <userinput>tar tvzf foobar.tar.gz</userinput> -&prompt.user; <userinput>tar xzvf foobar.tar.gz</userinput> -&prompt.user; <userinput>tar tvf foobar.tar</userinput> -&prompt.user; <userinput>tar xvf foobar.tar</userinput> - </screen> - </informalexample> - </listitem> - - <listitem> - <para><anchor id="ports-checksum"> - Q. チェックサムとは何ですか?</para> - - <para>A. これは, - チェックしたいファイル中のすべてのデータを加えて生成した - 数値です. 何か文字が書き換わっていたら, - チェックサムが一致しなくなります. そのため, - 単純な比較だけで違いを見つけることができるのです. - (実際には, 文字の位置が入れ替わるなどの, - 単純な加算ではわからない問題も - 見つけることができる複雑な方法で計算されています.)</para> - </listitem> - - <listitem> - <para>Q. 私は, <link linkend="ports-cd">CD-ROM から ports - をコンパイルする</link> にしたがって ports - をインストールしていました. kermit - をインストールしようとするまではうまくいっていました:-</para> - - <informalexample> - <screen>&prompt.root; <userinput>make install</userinput> ->> cku190.tar.gz doesn't seem to exist on this system. ->> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.</screen> - </informalexample> - - <para>なぜ cku190.tar.gz が見つからないのでしょうか? 不良品の - CD-ROM を買ってしまったのでしょうか?</para> - - <para>A. Kermit の権利を持つチームは, 私たちの CDROM に kermit - の tarball を 入れることを許可しませんでした. - 申し分けありませんが, 手動でファイルを 入手してください. - このようなエラーメッセージが出たのは, - あなたがそのときインターネットに 接続していなかったためです. - あらかじめ上記のサイトのいずれかからファイルを - ダウンロードしておけば, プロセスを再開することができます. - (ダウンロードの際には, - あなたに最も近いサイトを選ぶようにしてください. そうすれば, - 時間とインターネットの帯域の節約になります)</para> - </listitem> - - <listitem> - <para>Q. kermit の tarball を入手しましたが, - <filename>/usr/ports/distfiles</filename> に - ファイルを置こうとすると, - 書き込み権がないというエラーがでます.</para> - - <para>A. ports のしくみは - <filename>/usr/ports/distfiles</filename> から tarball - を探します. しかし, これは read-only の CD-ROM - へのシンボリックリンクなので, - ここにファイルを置くことはできません. 次のようにすれば, - 他の場所を探すよう ports に指示することができます.</para> - - <informalexample> - <screen>&prompt.root; <userinput>make DISTDIR=<replaceable>/where/you/put/it</replaceable> install</userinput></screen> - </informalexample> - </listitem> - - <listitem> - <para>Q. ports では, すべてを <filename>/usr/ports</filename> - に置いたときだけ動作するのでしょうか? - システムの管理者によると, 私の個人的なファイルは - <filename>/u/people/guests/wurzburger</filename> - に入れなければならないのですが, これでは - うまくいかないように思います.</para> - - <para>A. <makevar>PORTSDIR</makevar> 変数と - <makevar>PREFIX</makevar> 変数を変更することで, - 違うディレクトリを 使用することができます. 例えば,</para> - - <informalexample> - <screen>&prompt.root; <userinput>make PORTSDIR=/u/people/guests/wurzburger/ports install</userinput></screen> - </informalexample> - - <para>とすると, ports は - <filename>/u/people/guests/wurzburger/ports</filename> - でコンパイルされ, すべて <filename>/usr/local</filename> - 以下にインストールされます.</para> - - <informalexample> - <screen>&prompt.root; <userinput>make PREFIX=/u/people/guests/wurzburger/local install</userinput></screen> - </informalexample> - - <para>この場合, コンパイルは <filename>/usr/ports</filename> - でおこない, - <filename>/u/people/guests/wurzburger/local</filename> - にインストールします. もちろん, - 以下のように両者を組み合わせることも可能です.</para> - - <informalexample> - <screen>&prompt.root; <userinput>make PORTSDIR=.../ports PREFIX=.../local install</userinput></screen> - </informalexample> - - <para>(省略せずに記述したら, - このページに収めるには長すぎるのですが, - 考え方は理解していただけたと思います)</para> - - <para>もし ports をインストールするたびに, - これらを毎回タイプするのが 気に入らないのであれば, - (正直に言って, 誰もそう思わないでしょう) - これらを環境変数にセットしてしまうという手があります.</para> - </listitem> - - <listitem> - <para>Q. 私は, FreeBSD の CD-ROM を持っていませんが, - 私はすべての tarball を 私のシステムに置いておきたいのです. - そうすれば, 私は ports をインストール するたびに, - 毎回ダウンロードが終わるのを待たなくてすむでしょう. - これを一度におこなう簡単な方法はありませんか?</para> - - <para>A. ports コレクション全体の tarball を持ってくるには, - 次のようにしてください.</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make fetch</userinput></screen> - </informalexample> - - <para>ports の下のディレクトリひとつの tarball - を持ってくるには, 次のように してください.</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput> -&prompt.root; <userinput>make fetch</userinput></screen> - </informalexample> - - <para>ports をひとつだけ持ってくる方法は, - きっと既にご存知だと思います.</para> - </listitem> - - <listitem> - <para>Q. マスタ FTP サイトから tarball を持ってくるより, - 近くにある FreeBSD の - ミラーサイトから持ってきた方が速いはずです. MASTER_SITES - に書かれている サイト以外から持ってくるように ports - に指示する方法はありませんか?</para> - - <para>A. もちろんあります. 例えば <hostid - role="fqdn">ftp.FreeBSD.ORG</hostid> が - <makevar>MASTER_SITES</makevar> に書かれている - サイトより近いとしたら, 以下のようにしてください.</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports/<replaceable>directory</replaceable></userinput> -&prompt.root; <userinput>make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch</userinput></screen> - </informalexample> - </listitem> - - <listitem> - <para>Q. ダウンロードをする前に, - どんなファイルが必要なのか知りたいのですが.</para> - - <para>A. <command>make fetch-list</command> とすると, ports - に必要なファイルの一覧を表示できます.</para> - </listitem> - - <listitem> - <para>Q. ports のコンパイルを途中で止める方法はありますか? - 私はインストールをする前に - いろいろとソースコードを解析したいのですが, 毎回 control-C - を打たなければならないのが少し面倒です.</para> - - <para>A. <command>make extract</command> を実行すると, - ファイル転送とソースコードの展開まで - おこなったところで停止します.</para> - </listitem> - - <listitem> - <para>Q. 自分で ports を作ろうとしています. 私の作ったパッチが - 正しく処理できることを確認できるように, - コンパイルを止めたいのです. パッチのための <command>make - extract</command> のようなものはありませんか?</para> - - <para>A. あります. <command>make patch</command> - があなたのお望みのものです. おそらく - <makevar>PATCH_DEBUG</makevar> オプションも同様に - お役に立つことでしょう. ところで, - あなたの努力に感謝いたします!!</para> - </listitem> - - <listitem> - <para>Q. あるコンパイルオプションはバグの - 原因になるという話を聞きました. 本当なのでしょうか? - どうやったら正しい設定で ports - をコンパイルできますか?</para> - - <para>A. 本当です. <command>gcc</command> の バージョン 2.6.3 - (FreeBSDの 2.1.0 と 2.1.5 に付属している バージョン) では, - <option>-O2</option> オプションを - <option>-fno-strength-reduce</option> オプションなしで - 使うと, バグのあるコードを出力します (ほとんどの ports は - <option>-O2</option> オプションを 使いません). - コンバイラオプションは次のように定義 <emphasis> すべき - </emphasis> です.</para> - - <informalexample> - <screen>&prompt.root; <userinput>make CFLAGS='-O2 -fno-strength-reduce' install</userinput></screen> - </informalexample> - - <para>これを <filename>/etc/make.conf</filename> - に書いておくこともできますが, 残念なことに すべての ports - がこの指定を尊重してくれる 訳ではありません. - もっとも確実なのは <command>make configure</command> - を実行し, ソースディレクトリの Makefile - を見て手で修整することですが, ソースが - 多くのサブディレクトリにわかれていて, 各々に Makefile - がある場合は 大変な仕事になります.</para> - </listitem> - - <listitem> - <para>Q. ports がたくさんありすぎて, - 私の欲しいものがなかなか見つけられません. どんな ports - が使えるのか, リストはどこかにありませんか?</para> - - <para>A. <filename>/usr/ports</filename> の中にある - <filename>INDEX</filename> ファイルを見てみましょう. - あるキーワードで ports コレクションを検索したければ, - それも可能です. たとえば, - 以下のようにすればプログラミング言語 LISP に関連した ports - を見つけることができます: </para> - - <screen>&prompt.user; <userinput>cd /usr/ports</userinput> -&prompt.user; <userinput>make search key=lisp</userinput></screen> - </listitem> - - <listitem> - <para>Q. <literal>foo</literal> ports - をインストールしたいのですが, それのコンパイルは - すぐに停止して, <literal>bar</literal> ports - のコンパイルが始まってしまいます. 一体どうして?</para> - - <para>A. <literal>foo</literal> ports が, - <literal>bar</literal> ports - の提供する何らかの機能を必要としているからです. 例えば - <literal>foo</literal> が画像を使うとすると, - <literal>bar</literal> は画像処理に必要な - ライブラリを持っている, などです. または, - <literal>bar</literal> は <literal>foo</literal> - をコンパイルするのに必要なツールなのかもしれません.</para> - </listitem> - - <listitem> - <para><anchor id="ports-remove"> Q. ports から - <literal>grizzle</literal> - プログラムをインストールしましたが, まったく - ディスクスペースの浪費です. 削除したいのですが, - すべてのファイルが どこへインストールされたのかわかりません. - 何か手がかりはありませんか?</para> - - <para>A. 大丈夫, 次のようにしてください.</para> - - <informalexample> - <screen>&prompt.root; <userinput>pkg_delete grizzle-6.5</userinput></screen> - </informalexample> - </listitem> - - <listitem> - <para>Q. ちょっと待ってください. - 削除しようとするコマンドのバージョン番号を - 知っていなくてはならないのでしょうか? あなたは, - 私がバージョン番号を - 覚えていることを本気で当てにしているのでしょうか?</para> - - <para>A. そんなことはありません. - バージョン番号は次のようにすればわかります.</para> - - <informalexample> - <screen>&prompt.root; <userinput>pkg_info -a | grep grizzle</userinput> -Information for grizzle-6.5: -grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.</screen> - </informalexample> - </listitem> - - <listitem> - <para>Q. ディスク容量のことなのですが, ports - のディレクトリは非常に膨大な容量を 使うように見えます. - 残しておいた方がよいのでしょうか? 削除してしまっても - よいのでしょうか?</para> - - <para>A. はい. インストールが首尾よく終わり, - もうソースコードが必要でないと思うなら, - それらを残しておく理由はないでしょう. 一番よい方法は, - 次の通りです.</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make clean</userinput></screen> - </informalexample> - - <para>これは, すべての ports のサブディレクトリを調べ, 各 - ports のスケルトン以外の削除をおこないます.</para> - </listitem> - - <listitem> - <para>Q. これを試してみたのですが, tarball や ports - で使われたファイルが <filename>distfiles</filename> - ディレクトリに残っています. - これも削除してしまっても大丈夫ですか?</para> - - <para>A. はい. それを使った作業が終わったのであれば, - 削除してしまっても大丈夫です.</para> - </listitem> - - <listitem> - <para>Q. - 私はとてもとてもたくさんのプログラムを楽しみたいのです. - 一度にすべての ports - をインストールする方法はありませんか?</para> - - <para>A. 次のようにしてください.</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make install</userinput></screen> - </informalexample> - </listitem> - - <listitem> - <para>Q. やってみました. 時間がとてもかかるだろうと思ったので, - そのまま実行を 続けさせて, 私は寝ました. - 翌朝コンピュータを見てみると, 三つ半の ports しか - 処理が終わっていませんでした. - なにか悪かったのでしょうか?</para> - - <para>A. これは ports の中には私たちの決められないこと - (例えば, あなたが A4 の 用紙に印刷したいのか, US - レターサイズの用紙に印刷したいのかなど) について - 質問してくるものがあるからです. - それらの質問には手動で答える必要があります.</para> - </listitem> - - <listitem> - <para>Q. - 私は一日中モニタの前に座って過ごしたりしたくないのですが. - 何かよいアイデアはありませんか?</para> - - <para>A. では, あなたが寝に / 仕事に / - 公園にいく前に以下を実行してください:-</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make -DBATCH install</userinput></screen> - </informalexample> - - <para>これでユーザの入力を要求しないすべての ports - をインストールします. そして, 戻ってきてから, - 次のように実行してください.</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd /usr/ports</userinput> -&prompt.root; <userinput>make -DIS_INTERACTIVE install</userinput></screen> - </informalexample> - - <para>そして, 残りの作業を実行してください.</para> - </listitem> - - <listitem> - <para>Q. 私たちは ports コレクションにある - <literal>frobble</literal> を使っています. ですが, - 私たちの必要に応じて ports を変更したところがあるのです. - 自分でパッケージを作って, それを私たちのサイトのまわりに - 簡単に配布できるような方法がありますか?</para> - - <para>A. もちろんあります. - 変更点をパッチにする方法は知っていますよね:-</para> - - <informalexample> - <screen>&prompt.root; <userinput>cd <replaceable>/usr/ports/somewhere/frobble</replaceable></userinput> -&prompt.root; <userinput>make extract</userinput> -&prompt.root; <userinput>cd work/frobble-2.8</userinput> -[あなたのパッチを当ててください] -&prompt.root; <userinput>cd ../..</userinput> -&prompt.root; <userinput>make package</userinput></screen> - </informalexample> - </listitem> - - <listitem> - <para>Q. この ports の技術は本当に賢いですね. - どのようにして動いているのか - 私はどうしても知りたいと思います. その秘密は何ですか?</para> - - <para>A. 秘密は一切ありません. <ulink - URL="file://localhost/usr/ports/Mk/">Makefiles - ディレクトリ</ulink> にある - <filename>bsd.ports.mk</filename> と - <filename>bsd.ports.subdir.mk</filename> - ファイルを見るだけです.</para> - - <note> - <para>複雑なシェルスクリプトを嫌う読者は, - このリンクを追いかけないほうが よいでしょう.</para> - </note> - </listitem> - </itemizedlist> - </sect1> - - <sect1 id="porting"> - <title>自分で port を作る</title> - - <para><emphasis>原作: &a.jkh;, &a.gpalmer;, &a.asami;, - &a.obrien; and &a.hoek;. 28 August 1996.</emphasis></para> - - <para><emphasis>訳: &a.jp.simokawa;, &a.asami;.<!-- <br> --> - 10 November 1996.</emphasis></para> - - <para>自分で port を作ることに興味がありますか, すばらしい!</para> - - <para>これから, FreeBSD 用のportを作る際の, - いくつかのガイドラインを 説明します. - 実際にportをコンパイルするときのほとんどの仕事は - <filename>/usr/ports/Mk/bsd.port.mk</filename> - というファイルでおこないます. - Portsコレクションについてのさらに細かい内部の働きについては, - そちらの ファイルを参照してください. - これにはコメントが細かく書いてありますので, Makefile - を読むのにあまり慣れていない人でも, 得るものはとても大きいで - しょう.</para> - - <note> - <para>ここでは, 変更可能な変数の一部についてのみ記述しています. - ほとんどの変数は<filename>bsd.port.mk</filename> - の始めに記述があります. - また, このファイルは非標準のタブの設定になっています. - <application>Emacs</application> や <application>Vim</application> - はファイルのロード時にこれを認識しますが, - <command>vi</command>や<command>ex</command>では, - ファイルをロードしたら <command>:set tabstop=4</command> - のようにして正しい値を設定する - ことができます.</para> - </note> - - <sect2> - <title>3分porting</title> - - <para>この節では, 簡単なportの方法について説明します. - 多くの場合これ では不十分ですが, - まあうまくいくかどうか試してみて損はないでしょ う.</para> - - <para>まず, 元のtarファイルを<makevar>DISTDIR</makevar>に置きます. - デフォルトは<filename>/usr/ports/distfiles</filename>です.</para> - - <note> - <para>以下では, - ソフトウェアはそのままコンパイルされるとします. つまり, - FreeBSDのマシンで動かすために, 変更がまったく必要ない - とします. - もしなにか変更が必要な場合には次の節も参照する必要 - があります.</para> - </note> - - <sect3> - <title><filename>Makefile</filename> の作成</title> - - <para>最小限の<filename>Makefile</filename> - は次のようなものです:</para> - - <programlisting> -# New ports collection makefile for: oneko -# Version required: 1.1b -# Date created: 5 December 1994 -# Whom: asami -# -# $Id$ -# - -DISTNAME= oneko-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></programlisting> - - <para>おわかりになりますでしょうか. - <literal>$Id$</literal>があ る行の内容については, - 気にしないでください. これはこのファイル - がportsツリーに書き込まれるときにCVSによって自動的に書 - き込まれます. もっと詳しい例が見たければ, <link - linkend="porting-samplem">Makefileのお手本</link> - の節をご覧ください.</para> - </sect3> - - <sect3> - <title>Package記述ファイルの作成</title> - - <para>どのようなportでも, packageにするしないに関わらず, 3つ - の記述ファイルが必要です. - <filename>pkg</filename>サブディレクトリにある, - <filename>COMMENT</filename>, <filename>DESCR</filename>, - それに <filename>PLIST</filename>です.</para> - - <sect4> - <title><filename>COMMENT</filename></title> - - <para>これには, そのportについての説明を1行で書きます. - Package の名前, バージョン番号等は - <emphasis>含めない</emphasis>でください. たとえば, - こんな具合です:</para> - - <programlisting> -A cat chasing a mouse all over the screen.</programlisting> - </sect4> - - <sect4> - <title><filename>DESCR</filename></title> - - <para>これは, そのソフトウェアについての, - すこし長い説明を記述します. その port - が何をするのかについての数段落程度の - 簡潔な解説があれば十分です. - このファイルはマニュアルでもなければ, - 使用方法やコンパイル方法についての細かい - 説明書でもありません. 特に, - <emphasis><filename>README</filename>ファイル manpage - をコピーしようとしてしている場合には - 注意してください</emphasis>. これらは多くの場合, - そのポートの簡潔な説明に なっていなかったり, - 扱いにくい形式(manpage の場合, - 行を揃えるために空白が調整されます)になっていたりします. - もしこのソフトウエアに公式の WWW のホームページがあれば, - ここに書いて下さい. 自動化ツールが正しく動作するように, - Web サイトのうちの <emphasis>ひとつ</emphasis> には, 前に - <literal>WWW:</literal> を付け加えてください.</para> - - <para>このファイルの最後にあなたの名前を書くことが - 推奨されています. たとえば, こんな具合です.</para> - - <programlisting> -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</programlisting> - </sect4> - - <sect4> - <title><filename>PLIST</filename></title> - - <para>このファイルには, - このportによってインストールされるファ - イルが列挙されます. このファイルはpackageを作る際のリス - トとして使われるため, `packing list' とも呼ばれます. - ここ に書かれているファイル名は, - インストール時のプレフィックス (普通は - <filename>/usr/local</filename> か - <filename>/usr/X11R6</filename>) からの 相対パスです. - <makevar>MAN<replaceable>n</replaceable></makevar> - 変数を使用する場合(使用することが推奨されています)には, - マニュアルはここに入れないでください.</para> - - <para>簡単な例を載せておきましょう:</para> - - <programlisting> -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</programlisting> - - <para>'Packing list'の詳細については, &man.pkg.create.1; - の マニュアルを参照してください. - すべてファイルを列挙しなければなりませんが, - ディレクトリ名は必要ありません. また, ports - がインストール時にディレクトリを作成する場合には, - <literal>@dirrm</literal> の行を加えて, その port - が削除されるとき, - そのディレクトリも削除されるようにしてください. </para> - - <para>このファイルには, - ファイル名をアルファベット順に並べるようにしてください. - port のアップグレートのとき, - 楽に確認ができるようになります.</para> - </sect4> - </sect3> - - <sect3> - <title>チェックサムファイルの作成</title> - - <para>ただ, <command>make makesum</command> - と入力するだけです. <filename>bsd.port.mk</filename> - にルールがあるので, - 自動的に<filename>files/md5</filename>が生成されます.</para> - </sect3> - - <sect3 id="porting-testing"> - <title>Portのテスト</title> - - <para>そのportが正しく動くことを, - package化を含めて確認してください. - 以下の重要なポイントを確認してください.</para> - - <itemizedlist> - <listitem> - <para><filename>PLIST</filename> にその port - がインストールしないものが含まれていないこと.</para> - </listitem> - - <listitem> - <para><filename>PLIST</filename> にその port - がインストールする全てのものが含まれていること.</para> - </listitem> - - <listitem> - <para><maketarget>reinstall</maketarget> - ターゲットを使うことによって, - 何度でもインストールが可能こと.</para> - </listitem> - - <listitem> - <para>deintall の際に <link - linkend="porting-cleaning">後片付け</link> - をすること.</para> - </listitem> - </itemizedlist> - - <procedure> - <title>推奨されるテストの手順</title> - - <step> - <para><command>make install</command></para> - </step> - - <step> - <para><command>make package</command></para> - </step> - - <step> - <para><command>make deinstall</command></para> - </step> - - <step> - <para><command>pkg_add `make package-name`</command></para> - </step> - - <step> - <para><command>make deinstall</command></para> - </step> - - <step> - <para><command>make reinstall</command></para> - </step> - - <step> - <para><command>make package</command></para> - </step> - </procedure> - - <para><maketarget>package</maketarget> および - <maketarget>deinstall</maketarget> の段階で, - どんな警告(warning)も出力されないことを確認してください. - ステップ3の後, - 新しいディレクトリが全て正しく消去されているかを - 確認してください. また, - ステップ4の後にそのソフトウェアを使用してみて, package - からインストールされた場合に正しく動作するかを - 確認してください.</para> - </sect3> - - <sect3 id="porting-portlint"> - <title><command>portlint</command> でチェック</title> - - <para><command>portlint</command>を使って, あなたの port - が我々のガイドラインそっているかを確認してください. - <command>portlint</command> プログラムは ports - コレクションに含まれています. 特に, <link - linkend="porting-samplem">Makefile</link> - が正しい形式になっているか, <link - linkend="porting-pkgname">package</link> - の名前が正しいか, をチェックするのに良いでしょう.</para> - </sect3> - - <sect3 id="porting-submitting"> - <title>Portの送付</title> - - <para>まず, <link - linkend="porting-dads">やってよいことといけないこと</link> - についての節を読んでください.</para> - - <para>さあ, あなたのportに満足したら, - あとはそれをFreeBSDのメイ ンのportsツリーに置いて, - 皆に使ってもらうだけです. いまある - <filename>work</filename> ディレクトリや - <filename>pkgname.tgz</filename> - パッケージは必要ありませんから, まず消去してください. - あとは, バグレポートの中に <command>shar `find - port_dir`</command> の出力を, &man.send-pr.1; - プログラムを使用して送ってください. &man.send-pr.1; - についての詳細は, <link - linkend="contrib-general">バグ報告と一般的な論評</link> - を参照してください.) もし, 圧縮していない状態で, - 20KB以上あるようなポートであれば, 圧縮して tar - ファイルにして, バグレポートに入れる前に &man.uuencode.1; - を使用してください. (20KB以下のものでも, tar - ファイルにして送ってもよいですが, あまり歓迎されません). - バクレポートの category は <literal>ports</literal>, class - は - <literal>change-request</literal>を必ず使用してください. - (レポートを <literal>confidential</literal> (内密) - にしないようにしてください!)</para> - - <para>もう一度, <emphasis>オリジナルのソースファイル, - <filename>work</filename> ディレクトリ, <command>make - package</command> - で作成したパッケージが含まれていないこと - </emphasis>を確認してください.</para> - - <note> - <para>以前, 新しい port をわれわれの ftp サイト (<hostid - role="fqdn">ftp.freebsd.org</hostid>) - にアップロードするようにお願いしたことがありますが, - 現在このサイトの <filename>incoming</filename> - ディレクトリは読み出し不可になっており, - いまでは推奨されていません. - 沢山の海賊版ソフトウェアがそこに置かれたためです.</para> - </note> - - <para>私たちは, 何か不明な点があったらあなたに確認したのち, - それをツリーへ置きます. あなたの名前は, FreeBSD - ハンドブックやその他のファイルの “Additional FreeBSD - contributors” のリストにも載るでしょう. う〜ん, - 素晴らし い. <!-- smiley -->:)</para> - <!-- kuriyama - should use link tag? --> - </sect3> - </sect2> - - <sect2> - <title>本格的なport</title> - - <para>残念ながら, 移植がそう簡単ではなく, - 動かすために多少の変更が 必要な場合も多いでしょう. - この節では, portsコレクション の方法論にのっとって, - そのような場合にどのように変更を施し, 動 - くようにしたらよいかを順を追って説明します.</para> - - <sect3> - <title>port構築の詳細</title> - - <para>まず, あなたがportのディレクトリで - <command>make</command> とタイ - プしてから起こる一連の出来事について,順を追って説明しま - す. ここを読むときには, 他のウィンドウで同時に - <filename>bsd.port.mk</filename> - も開いておくとよいかもしれません.</para> - - <para>しかし, - <filename>bsd.port.mk</filename>が何をしているのか, - 完全に理解 できなくても心配する必要はありません. - そう多くの人が理解して いるわけではないですから... <!-- - smiley --><emphasis>f(^_^;)</emphasis></para> - - <procedure> - <step> - <para>まず, <maketarget>fetch</maketarget> - というターゲットが実行されます. - この<maketarget>fetch</maketarget>ターゲットは - ローカルディスクの<makevar>DISTDIR</makevar>に配布ファ - イルがあるようにするのが役目です. もし, - <maketarget>fetch</maketarget>が必要なファ - イルを<makevar>DISTDIR</makevar>に見つけることが - できなけ れば, Makefileに指定されているURL - <makevar>MASTER_SITES</makevar>, - そして私たちのFTPサイトで ある <ulink - URL="ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/"> - ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/</ulink> - (ここ には, 私たちが取ってきたファイルを - バックアップとして置いてあ ります) に探しにいきます. - そして, ユーザのサイトがインター ネットに - 直接接続されている場合には, <makevar>FETCH</makevar> - を使って, その名前のファイルを取っ てきて, - <makevar>DISTDIR</makevar>に保存します.</para> - </step> - - <step> - <para>次に実行されるのは - <maketarget>extract</maketarget> ターゲットです. - これは, <makevar>DISTDIR</makevar>にある, 配布ファイル - (普通は gzipされたtarファイル) を読み, - ソースを一時的な作業ディレ - クトリ<makevar>WRKDIR</makevar> (デフォルトは - <filename>work</filename>) に展開します.</para> - </step> - - <step> - <para>次に, <maketarget>patch</maketarget> - というターゲットが実行されます. まず, - <makevar>PATCHFILES</makevar>に定義されている, - すべてのパッ チをあてます. - 次にもし<makevar>PATCHDIR</makevar> (デフォ ルトは - <filename>patches</filename> サブディレクトリ) - にパッチが存在す れば, - これらをアルファベット順にあてます.</para> - </step> - - <step> - <para>次に実行されるターゲットは - <maketarget>configure</maketarget>です. これには, い - ろいろな場合があります.</para> - - <orderedlist> - <listitem> - <para>もし存在すれば, - <filename>scripts/configure</filename> - が実行されます.</para> - </listitem> - - <listitem> - <para>もし, <makevar>HAS_CONFIGURE</makevar> - あるいは <makevar>GNU_CONFIGURE</makevar> - がセットされていれば, - <filename><makevar>WRKSRC</makevar>/configure</filename> - が実行されます.</para> - </listitem> - - <listitem> - <para>もし, <makevar>USE_IMAKE</makevar> - がセットされていれば, <makevar>XMKMF</makevar> - (デフォルト: <command>xmkmf -a</command>) - が実行されます.</para> - </listitem> - </orderedlist> - </step> - - <step> - <para>最後に, <maketarget>build</maketarget> - というターゲットが実行されます. これは, その port - の専用の作業ディレクトリ (<makevar>WRKSRC</makevar>) - にい き, コンパイルするのが役目です. もし - <makevar>USE_GMAKE</makevar> がセットされていれば, GNU - <command>make</command> が使用されます. - さもなければFreeBSDの <command>make</command> - が使用されます.</para> - </step> - </procedure> - - <para>上記はデフォルトのルールです. さらに, - <maketarget>pre-<replaceable>何とか</replaceable></maketarget> - や - <maketarget>post-<replaceable>何とか</replaceable></maketarget> - というターゲット が定義してあった - り,そのような名前のスクリプトが <filename>scripts</filename> - サブディレクトリに置いてある場合には, - それらはデフォルトの動作の前 - 後に実行されます.</para> - - <para>たとえば, <maketarget>post-extract</maketarget> - というターゲットがMakefile で定義されていて, - <filename>pre-build</filename> というファイルが, - <filename>scripts</filename> - サブディレクトリにあるとすると, - <maketarget>post-extract</maketarget>ターゲットは, - 通常の展開動作のあとに呼 び出され, - <filename>pre-build</filename> - スクリプトはデフォルトのコンパイ - ルのルールが実行される前に実行されます. - もし動作が簡単であれ ば, <filename>Makefile</filename> - のターゲットを使用することが推奨されています. な ぜならば, - そのportが何らかのデフォルトではない動作を必要とす - るのかどうかが一箇所にまとめて書いてあった方が他の人に - 理解しやす いからです.</para> - - <para>デフォルトの動作は <filename>bsd.port.mk</filename> の - <maketarget>do-<replaceable> 何とか - </replaceable></maketarget> - というターゲットでおこなわれます. たとえば, - portを展開するコマンドは, - <maketarget>do-extract</maketarget> - というターゲットにあります. もし, - デフォルトのターゲットに 不満があれば, - <maketarget>do-<replaceable> something - </replaceable></maketarget> というターゲッ - トを再定義することによって, - どのようにでも直すことができます.</para> - - <note> - <para>“メイン”のターゲット (例えば, - <maketarget>extract</maketarget>, - <maketarget>configure</maketarget>等) は, - すべての前段階が実行されていること を確認して, - 実際のターゲットやスクリプトを呼び出す以外のこと - はしません. - bsd.port.mkはこれらが変更されることは仮定してい - ませんので, もし, 例えば, 展開の仕方を直したいときには, - <maketarget>do-extract</maketarget> を直し, - 絶対に<maketarget>extract</maketarget>には手を - 触れないでください.</para> - </note> - - <para>これで, ユーザが <command>make</command> - と入力したときに何が起こ るのかが理解できたと思います. - では, 完璧なportを手順を追っ て作ってみましょう.</para> - </sect3> - - <sect3> - <title>オリジナルのソースの入手</title> - - <para>オリジナルのソースを, (普通は) - 圧縮されたtarファイルの形 (<filename> - <replaceable>foo</replaceable>.tar.gz</filename> - あるいは - <filename><replaceable>foo</replaceable>.tar.Z</filename>) - で入手して, それを <makevar>DISTDIR</makevar> - にコピーします. 可能なかぎり, 広 - く使われている<emphasis>主流の</emphasis> - ソースを使用するようにしてください.</para> - - <para>もし, ネットワークへの接続のよい FTP/HTTP - サイトを見つけるこ とができなかったり, - 頭にくるような非標準的な形式しか持ってい - ないサイトしか見つけられないときには, 自分で管理する確実な - ftp か http サーバ (たとえば, - あなたのホームページ)に置くこと ができます. - <makevar>MASTER_SITES</makevar> - に正しく反映されていることを確認してください.</para> - - <para>もしも, そのような都合の良く, - 安心な置き場所が見つけられない 場合(あなたが FreeBSD の - committer であれば, 自分の - <filename>public_html</filename> ディレクトリに置けます), - 私たちが, <!-- kuriyama - lack of tanslation --> - <filename> - ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/ - </filename> に置き場所を提供できます. - この場所は, 変数 <makevar>MASTER_SITE_LOCAL</makevar> - を使って参照してください. - これについての問い合わせのメールは &a.ports へお願いします. - </para> - - <para>その port の配布ファイルが特に理由もなく, - しょっちゅう変る場合には, - 配布ファイルをあなたのホームページに置いて - <makevar>MASTER_SITES</makevar>の最初に入れてください. - こうすることによって, ユーザ利用する場合に - <errorname>checksum mismatch</errorname> - エラーが起るのを防ぎ, 我々の ftp - サイトの保守の負担を減らすことができます. もし, master - site がたった一つしかない場合には, - あなたのサイトにバックアップを置いて - <makevar>MASTER_SITES</makevar> - の2番目に加えてください.</para> - - <para>もし, - あなたのportに必要ないくつかの追加パッチがインター - ネット上で手に入るのならば, それらも取ってきて, - <makevar>DISTDIR</makevar> に置きます. もし, - それらがメイン - のソースのtarファイルとは別のサイトにあっても, - 心配する必要 はありません. - そのような状況にはちゃんと対応できるようになっ ています. - (以下の<link linkend="porting-patchfiles">PATCHFILESの記述 - </link>をご覧ください).</para> - </sect3> - - <sect3> - <title>Portの修正</title> - - <para>適当なディレクトリにtarファイルを展開して, - FreeBSDの最新の バージョン上で, - 正しくコンパイルできるために必要なあらゆる変 更を施します. - 最終的に処理は自動化するわけですから, 何をおこなっ - たかを<emphasis>注意深く記録しておきましょう</emphasis>. - あなたのport が完成した暁には, ファイルの削除, 追加, - 修正を含むすべての処 理が, - 自動化されたスクリプトやパッチファイルで - おこなえるようになっ ていないといけません.</para> - - <para>もし, あなたの port - のコンパイルやインストールのために必要 - な手作業があまりに多いようならば, Larry Wall の模範的な - <application>Configure</application> - スクリプトでも参考にしたほうがいいかもしれませ ん. - 新しいportsコレクションは, 最小のディスクスペースで, - 個々のportがエンドユーザにできるだけ“プラグ & - プレ - イ”の状態でmakeできることをめざしています.</para> - - <note> - <para>あなたが作成し FreeBSD の ports - に寄付されたパッチファイル, - スクリプトおよびその他のファイルは, - 明示的に記述されている場合 を除いては, - BSDの標準的な著作権条件によりカバーされていると見な - されます.</para> - </note> - </sect3> - - <sect3> - <title>パッチをあてる</title> - - <para>port - の過程で追加されたり変更されたファイルは再帰的diffで変 - 更点を取り出すことができます. パッチは適当にまとめて, - <filename>patch-<replaceable>xx</replaceable></filename> - という名前のファイルに入れてくだ さい. - <filename><replaceable>xx</replaceable></filename> - はパッチが適用される順番を示します — これらは, - <emphasis>アルファベット順</emphasis>, つまり - <literal>aa</literal> が 最初, つぎに - <literal>ab</literal> などとなります. これらのファイル - を<makevar>PATCHDIR</makevar>に置いておくと, - 自動的に適用さ れるようになっています. すべてのパッチは - <makevar>WRKSRC</makevar> (通常は, portのtarファイルが展 - 開されるところで, makeが実行されるところと同じです) - からの相 対パスになります. - 修正やアップグレードを容易にするため, 2つ - 以上のパッチが同じファイルを修正するのは避けてください. - (例, - patch-aaとpatch-abが共に<makevar>WRKSRC</makevar>/foobar.c - を修正する, など.)</para> - </sect3> - - <sect3> - <title>コンフィグレーション</title> - - <para>カスタマイズのために追加したいコマンドがあれば, - <filename>configure</filename> - という名前のスクリプトに入れて - <filename>scripts</filename> サブディレクトリに置きます. - 上で述べたよ うに, <filename>pre-configure</filename> - あるいは <filename>post-configure</filename> という - <filename>Makefile</filename> - のターゲットおよび/あるいはスクリプトで処理す - ることもできます.</para> - </sect3> - - <sect3> - <title>ユーザからの入力の扱い</title> - - <para>もし, そのportがビルド, コンフィグレーション, - インストー ルの際にユーザからの入力を必要とするならば, - Makefileで - <makevar>IS_INTERACTIVE</makevar>をセットしてください. - これによって, 深夜, - 自動的にたくさんのportをコンパイルすることが可能にな - ります. 環境変数<envar>BATCH</envar>がセットされていると - <symbol>IS_INTERACTIVE</symbol> - の定義されているportはスキップされ ます (そして, - ユーザが<envar>INTERACTIVE</envar>という変数をセッ - トすると入力を必要とする port - <emphasis>のみ</emphasis>コンパイルされま す).</para> - - <para>もし, 適切なデフォルト設定があるのであれば, - <makevar>PACKAGE_BUILDING</makevar> - 変数をチェックして,それが設 定されて いる場合には, - ユーザ入力のスクリプトを起動しないように してください. - こうすることによって, CD-ROM や ftp に 置く - packageを我々が作成することができます. - </para> - </sect3> - </sect2> - - <sect2> - <title>Makefileの作成</title> - - <para>Makefileの作成は非常に単純です. 繰り返しになりますが, - 始める まえに, すでにある例を見てみることをお奨めします. - またこのハ ンドブックには<link - linkend="porting-samplem">Makefileのお手本</link> - があります. それを見て, Makefile内の変数の順番や空行を入れると - ころなどの参考にしてください. そうすると他の人々にも読みやすい - ものとなります.</para> - - <para>では, - Makefileをデザインするときに問題となるところを順に追っ - て見てみましょう.</para> - - <sect3> - <title>オリジナルのソース</title> - - <para>ソースは<makevar>DISTDIR</makevar>に, 標準的なgzipされた - tarファイルとして置かれていますか? そうであれば, 次のステッ - プに進めます. そうでなければ, 変数 - <makevar>EXTRACT_CMD</makevar>, - <makevar>EXTRACT_BEFORE_ARGS</makevar>, - <makevar>EXTRACT_AFTER_ARGS</makevar>, - <makevar>EXTRACT_SUFX</makevar>, - <makevar>DISTFILES</makevar> - を適当に書き換えないといけません. - どれだけ変更しないといけないかは, あなたのportの - 配布ファイルがどの程度標準からかけはなれているかによりま す. - (最もよくある場合は, gzipではなく普通のcompressコマンド - でtarファイルが圧縮されている場合で, - <literal>EXTRACT_SUFX=.tar.Z</literal> - とするだけです.)</para> - - <para>最悪の場合には, 自分で - <maketarget>do-extract</maketarget> ターゲットを作 成して, - デフォルトを上書きすることもできます. しかし, そこま - でする必要があることはめったにないでしょう.</para> - </sect3> - - <sect3> - <title><makevar>DISTNAME</makevar></title> - - <para><makevar>DISTNAME</makevar> には port - の名前の基幹部分を入れ ます. デフォルトのルールでは, - 配布ファイルのリスト (<makevar>DISTFILES</makevar>) は - <makevar>DISTNAME</makevar> <makevar>EXTRACT_SUFX</makevar> - という名前 になっています. 例えば, - <literal>foozolix-1.0.tar.gz</literal>の場 合, - 通常のtarファイルだと, <literal> - DISTNAME=foozolix-1.0</literal> のようになります.</para> - - <para>さらにデフォルトのルールでは, tarファイルは - <filename>work/<makevar>DISTNAME</makevar></filename> - というサブディレクトリ に展開されることを仮定しています, - 例えば <filename>work/foozolix-1.0/</filename> - といった具合いです.</para> - - <para>これらの動作はもちろんすべて変更可能です. - デフォルトのルー ルは最も標準的な場合を仮定しているだけです. - まず, port が複 数の配布ファイルを必要とするときには, - 単に明示的に <makevar>DISTFILES</makevar>を設定してください. - もし, <makevar>DISTFILES</makevar> - の一部だけが実際に展開される場合 には, - それらを<makevar>EXTRACT_ONLY</makevar> に設定してくだ さい. - この変数が定義されている場合には, 展開時に - <makevar>DISTFILES</makevar>に優先して利用されます. - 残りのファ イルも<makevar>DISTDIR</makevar>に取ってきますが, - 展開時に - はなにもせずに後で使うためにそのまま置いておかれます. - </para> - </sect3> - - <sect3> - <title><makevar>PKGNAME</makevar></title> - - <para>もし, <makevar>DISTNAME</makevar> が我々の <link - linkend="porting-pkgname"> package - の名前についてのガイドライン</link> - に沿ったものでない場合には, <makevar>PKGNAME</makevar> - にもっと良い名前を設定してください. - 詳細は上記のガイドラインを参照してください. - </para> - </sect3> - - <sect3> - <title><makevar>CATEGORIES</makevar> (分類)</title> - - <para>完成した package の実体は - <filename>/usr/ports/packages/All</filename> に置かれます. - また, 1つかそれ以上の - <filename>/usr/ports/packages</filename> - のサブディレクトリからのシンボリッ クリンクが作られます. - それらのサブディレクトリの名前が - <makevar>CATEGORIES</makevar> - という変数によって指定されます. これは, - ユーザがFTPサイトやCD-ROMのpackageの山を渡り歩 - くことを容易にするためです. 現在存在する <link - linkend="porting-categories">カテゴリ</link>を見て, そ - のportに適したもを選んでください.</para> - - <para>このリストは, この port が port tree のどこに import - されるかも決定します. 2つ以上のカテゴリを指定した場合には - 最初のカテゴリで指定されるサブディレクトリに置かれること - になります. 適切なカテゴリを選ぶ方法については, <link - linkend="porting-categories">カテゴリ</link> - の節を参照してください.</para> - - <para>もしその port - が本当に現在存在するすべてのものとは異なって いる場合には, - 新しいカテゴリ名を作ることもできます. その際には, &a.ports - 宛てに新しいカテゴリ名を提案する - メールを送ってください.</para> - - <para>カテゴリ名については, - なんのエラーチェックも行なわれません.ミスタイプがあっても - <command>make package</command> はなにも考えずに - 新しいディレクトリを作ってしまいますので, - 注意してください.</para> - </sect3> - - <sect3> - <title><makevar>MASTER_SITES</makevar></title> - - <para>オリジナルの配布ファイルを指し示す FTP または HTTP の - URL のディ レクトリ部分までを - <makevar>MASTER_SITES</makevar> に記録しま す. スラッシュ - (<filename>/</filename>) を最後につけることをお忘れなく. - 配布ファイルがシステム上に存在しないときに, - <command>make</command>マクロは <makevar>FETCH</makevar> - でこの変数に指定されたサイトから取っ てきます.</para> - - <para>複数の, - できれば異なる大陸のサイトをこのリストに入れておく - ことが推奨されています. これによって, 広域ネットワークにトラ - ブルがあった場合でも成功する可能性が高くなります. - 私たちはさら に, 自動的に最も近いマスタサイトを検出して, - そこから取って くるメカニズムの導入を計画しています.</para> - - <para>オリジナルのtar ファイルが, X-contrib, GNU, Perl CPAN, - TeX CTAN または Linux Sunsite - などの有名なアーカイブにある場合には, - <makevar>MASTER_SITE_XCONTRIB</makevar>, - <makevar>MASTER_SITE_GNU</makevar>, - <makevar>MASTER_SITE_PERL_CPAN</makevar>, - <makevar>MASTER_SITE_TEX_CTAN</makevar> および - <makevar>MASTER_SITE_SUNSITE</makevar> を利用することで, - 簡単にこれらのサイトを 指定することができます. あとは - <makevar>MASTER_SITE_SUBDIR</makevar> にアーカイ - ブ内でのパスを指定するだけです. 以下に例を示します.</para> - - <programlisting> -MASTER_SITES= ${MASTER_SITE_XCONTRIB} -MASTER_SITE_SUBDIR= applications</programlisting> - - <para>ユーザは<filename>/etc/make.conf</filename>中で - <makevar>MASTER_SITE_*</makevar> 変数を設定 - することによって, デフォルトの FTP サイトではなく, これらの - 有名なアーカイブの - ミラーの中で好みのものを使用することが可能 です.</para> - </sect3> - - <sect3 id="porting-patchfiles"> - <title><makevar>PATCHFILES</makevar></title> - - <para>もし, - オリジナルの配布ファイル以外にもFTPかHTTPで手に入る - パッチが必要な場合には, <makevar>PATCHFILES</makevar>にファ - イル名を, <makevar>PATCH_SITES</makevar>にサイトとディレクト - リの名前を <makevar>MASTER_SITES</makevar> - と同様に設定してく ださい.</para> - - <para>そのパッチ内のファイル名ががソースツリーの - 一番上のディレク トリ (<makevar>WKRSRC</makevar>) - からの相対パスになっていな い場合には, - <makevar>PATCH_DIST_STRIP</makevar>を指定してく ださい. - 例えば, パッチ内のファイル名にすべて余計な - <literal>foozolix-1.0/</literal> がついている場合には, - <literal>PATCH_DIST_STRIP=-p1</literal>としてください.</para> - - <para>これらのパッチは圧縮されていても大丈夫です. ファイル名が - <filename>.gz</filename> か <filename>.Z</filename> - で終わる場合には自動的に復元 - されるようになっています.</para> - - <para>もしパッチが, 文書などその他のファイルと一緒に gzip - された tarファイルで配布されている場合には,単純に - <makevar>PATCHFILES</makevar> を使うことはできません. - このような場合には, このパッチの tar ファイルの名前と場所を - <makevar>DISTFILES</makevar> と - <makevar>MASTER_SITES</makevar> に加えます. それから, - <maketarget>pre-patch</maketarget> ターゲットで, - パッチコマンドを走らせるか, パッチファイルを - <makevar>PATCHDIR</makevar> ディレクトリに - <filename>patch-<replaceable>xx</replaceable></filename> - という名前でコピーするかして, - パッチを適用するようにします.</para> - - <note> - <para>普通の gzip か compress された tar ファイルであれば, - 通常のソースファイルと一緒にその時までに - 展開されていますので, 明示的に展開する必要はありません. - もし, 後者の方法を使用する場合には, - すでにそのディレクトリにある なにかを上書きしないように, - 注意する必要があります. さらに, - <maketarget>pre-clean</maketarget> - ターゲットにコピーしたパッチファイル - を削除するコマンドを追加するのを忘れないでください.</para> - </note> - </sect3> - - <sect3> - <title><makevar>MAINTAINER</makevar></title> - - <para>あなたのメールアドレスをここに入れてください. - お願いします. <!-- smiley --><emphasis - remap=tt>:)</emphasis></para> - - <para>保守担当者(maintainer)の責任についての詳細は, <link - linkend="policies-maintainer">Makefile 中の - MAINTAINER</link> の節をご覧ください.</para> - </sect3> - - <sect3> - <title>依存関係</title> - - <para>このプログラムが他のportに依存する場合には, 必要なものが - 自動的に作られるようにすることができます. そのために, 以下の - 5つの変数が用意されています. - よくあるケースのためにあらかじめ設定された依存変数や, - いくつかの依存関係の制御のための変数があります.</para> - - <sect4> - <title><makevar>LIB_DEPENDS</makevar></title> - - <para>Port が必要とする非標準の共有ライブラリを - この変数で指定 します. これは - <replaceable>lib</replaceable>: - <replaceable>dir</replaceable><optional><replaceable>: - target</replaceable></optional> という組のリストで, - うち <replaceable>lib</replaceable> - が共有ライブラリの名前, そして - <replaceable>dir</replaceable> - がそのライブラリが見つからない場合にインストールする port - のあるディレクトリで, <replaceable>target</replaceable> - はそのディレクトリで呼ばれるターゲットです. 例えば, <!-- - kuriyama - should use programlisting? --> <programlisting> - LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install - </programlisting> と指定してあれば, - まずメジャーバージョンが9のjpegライブ - ラリがあるかどうか確認し, ない場合にはportsツリーの中の - <filename>graphics/jpeg</filename> - というサブディレクトリに移動し, そこ - でコンパイルとインストールを行ないます. - <replaceable>target</replaceable> の 部分は, - <makevar>DEPENDS_TARGET</makevar> (デフォルトは - <literal>install</literal>) - と等しいときには省略できます.</para> - - <note> - <para>前半の <replaceable>lib</replaceable> 部分は - <command>ldconfig -r | grep -wF</command> - への引数になります. - この変数には正規表現を入れられません. - </para> - </note> - - <para> - この依存関係は2度チェックされます. まず - <maketarget>extract</maketarget> ターゲットで, 次に - <maketarget>install</maketarget> でチェックされます. - (これは, その port を作成するマシンとインストールする - マシンが違う場合でも, きちんとそのライブラリが利用できる - ことを確認するためです.) また, 依存するもの名前は package - の中にも含まれますので, ユーザのシステムに存在しなければ, - <command>pkg_add</command> が自動的にインストールします. - </para> - </sect4> - - <sect4> - <title><makevar>RUN_DEPENDS</makevar></title> - - <para>Port - を使用する際に必要となるファイルまたはプログラムがある - ときにはこの変数で指定します. これは - <replaceable>path</replaceable>: - <replaceable>dir</replaceable><optional><replaceable> - :target</replaceable></optional> とい う組のリストで, - <replaceable>path</replaceable> - がファイルまたはプログラムの 名前, そして - <replaceable>dir</replaceable> - がそれが見つからない場合に作成する ためのディレクトリ名で - <replaceable>target</replaceable> - はそのディレクトリで呼ばれるターゲットです. - <replaceable>path</replaceable> の最初の文字がスラッ シュ - (<literal>/</literal>) の場合にはファイルかディレクトリ - とみなし, その存在を <command>test -e</command> - でチェックします; そうでない場合には - 実行可能であると仮定し, <command>which -s</command> - を使って そのプログラムがユーザのサーチパス上に - あるかどうか確認します.</para> - - <para>例えばMakefileに以下のように書いてあるとします.</para> - - <programlisting> -RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \ - wish8.0:${PORTSDIR}/x11-toolkits/tk80</programlisting> - - <para>まず, <filename>/usr/local/etc/innd</filename> - というファイルかディレクトリが存在 するか確認し, - ない場合にはportsツリーの中の - <filename>news/inn</filename> - というサブディレクトリから作られます. ま た, - <command>wish8.0</command> - というプログラムがユーザのサーチパス中 にあるかどうか探し, - ない場合には同じくportsツリーの - <filename>x11-toolkits/tk80</filename> - というサブディレクトリから作られます.</para> - - <note> - <para>この例で, <command>innd</command> - は実際にはプログラムです; この ように, - プログラムであっても標準のサーチパス以外のところに - あるようなものの場合には, - 絶対パスで指定してください.</para> - </note> - - <para>この依存関係は<maketarget>install</maketarget> - ステージのはじめでチェック されます. また, - packageを作る際に必要となるportのpackage名 が記録され, - <command>pkg_add</command>を使用すると - ユーザのシステムに存在しない場合には自動的にそちら - のpackageもインストールされるようになります. - <replaceable>target</replaceable> の部分は, - <makevar>DEPENdS_TARGET</makevar> - と同じ場合には省略可能です. - </para> - </sect4> - - <sect4> - <title><makevar>BUILD_DEPENDS</makevar></title> - - <para>Port - のコンパイルに必要なファイルまたはプログラムがある - ときは, この変数で指定してください. - <makevar>RUN_DEPENDS</makevar>と同 様に, これは - <replaceable>path</replaceable>: - <replaceable>dir</replaceable><optional><replaceable> - :target</replaceable></optional> - という組のリストです. 例 えば, - - <programlisting> -BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip</programlisting> - - は - <command>unzip</command> という名前のプログラムを探し, - 見つから - ない場合には<filename>archivers/unzip</filename> - サブディレクトリで作 れという意味になります.</para> - - <note> - <para>ここでは “コンパイル” - と一口にいいましたが, この変数は実際 - にはファイルの展開から実際のコンパイル・リンクまで - 全部をま とめて面倒を見てくれます. この依存関係は - <maketarget>extract</maketarget> - ステージからチェックされます. - <replaceable>target</replaceable> の部分は - <makevar>DEPENDS_TARGET</makevar> - と同じ場合には省略可能です.</para> - </note> - </sect4> - - <sect4> - <title><makevar>FETCH_DEPENDS</makevar></title> - - <para>この変数は, - portを取ってくるのに必要なファイルまたはプロ - グラムを指定するのに使います. 上の二つと同様に, これは - <replaceable>path</replaceable>: - <replaceable>dir</replaceable><optional><replaceable> - :target</replaceable></optional> - <!-- kuriyama - should use programlisting? --> - という組のリストです. 例えば, - - <programlisting> -FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2</programlisting> - - としておけば, <command>ncftp2</command> - という名前のプログラムを探 し, - 見つからない場合には<filename>net/ncftp2</filename> - サブディレク トリにいってインストールします.</para> - - <para>この依存関係は <maketarget>fetch</maketarget> - ステージからチェックされます. - <replaceable>target</replaceable> の部分は - <makevar>DEPENDS_TARGET</makevar> - と同じ場合には省略可能です.</para> - </sect4> - - <sect4> - <title><makevar>DEPENDS</makevar></title> - - <para>上記の四つのいずれにもあてはまらないような - 依存関係がある場 合, または他の port - がインストールされれているだけではなく, - ソースが展開されている必要がある場合にはこの変数 - を使います. これは - <replaceable>dir</replaceable><optional><replaceable> - :target</replaceable></optional> という形式のリスト - になります. 上記の四つと違って特に - “確認”するものがありませんので.</para> - </sect4> - - <sect4> - <title>よくある依存関係を表す変数</title> - - <para>もし ports が X Window System を必要とするのであれば, - <literal>USE_XLIB=yes</literal> を定義してください. - (これは <makevar>USE_IMAKE</makevar>も意味します) BSD - <command>make</command> の代りに GNU - <command>make</command> を必要とする場合には, - <literal>USE_GMAKE=yes</literal> を定義. 動作するのに GNU - autoconf を必要とする場合には, - <literal>USE_AUTOCONF=yes</literal> を定義. 最新の qt - toolkit を使用 する場合には <literal>USE_QT=yes</literal> - を定義. perl 言語のバージョン5 を必要とする場合には, - <literal>USE_PERL5=yes</literal> を定義してください. - (特に最後のは重要で, FreeBSD のいくつかの - バージョンでは基本システムに perl5 を含みますが, - 他のものは含んでいません.)</para> - </sect4> - - <sect4> - <title>依存関係に関する注意</title> - - <para>上で述べたように, 依存する ports - が必要になったときに呼ばれるデフォルトのターゲットは - <maketarget>DEPENDS_TARGET</maketarget> で, - そのデフォルトは <literal>install</literal> です. これは, - ユーザの使用する変数で, port の - <filename>Makefile</filename> - で定義されるものではありません. もし, - あなたのportが特別な方法で, 依存関係を扱う必要が - ある場合には, <makevar>DEPENDS_TARGET</makevar> - を再定義するのではなく, <makevar>*_DEPENDS</makevar> - 変数の <literal>:target</literal> - の部分を利用してください. </para> - - <para><command>make clean</command> とタイプしたときには, - 依存する port も自動的に clean されます. - もしそうしたくない場合には, - <makevar>NOCLEANDEPENDS</makevar> - を環境変数として設定してください.</para> - - <para>無条件に他の port に依存させるには, 特別に - <literal>nonexistent</literal> という文字列を - <makevar>BUILD_DEPENDS</makevar> あるいは - <makevar>RUN_DEPENDS</makevar> - の最初のフィールドに使用してください. これは, 他の port - のソースが必要なときのみ使用してください. target - も指定することによって, - コンパイルの時間を節約することができます. 例えば, <!-- - kuriyama - should use programlisting? --> - - <programlisting> -BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract</programlisting> - - これは, 常に JPEG port の directory - に行きソースの展開を行ないます.</para> - - <para>あなたがやりたいことが他の方法ではできない場合以外は, - <makevar>DEPENDS</makevar> を使わないでください. - これは常に 他の port - の作成を行い(さらにデフォルトでインストール を行い), - package も作成します. もし本当にこれがあなたの - やりたいことでしたら, 代りにこれを - <literal>BUILD_DEPENDS</literal> と - <literal>RUN_DEPENDS</literal> で書くことをお勧めします - — 少なくとも意図が明確になります.</para> - </sect4> - </sect3> - - <sect3> - <title>コンパイル時の特別な指定</title> - - <para>GNUの<command>make</command>を使う場合には, - <literal>USE_GMAKE=yes</literal> と指定してください. Port に - GNU の <command>configure</command> が含まれ ている場合には, - <literal>GNU_CONFIGURE=yes</literal> を使います(これは, - <literal>HAS_CONFIGURE</literal> も意味します). - <command>configure</command> に追加の引数 (デフォルトでは, - GNU の <command>configure</command> では - <literal>--prefix=${PREFIX}</literal>, GNUでない - <command>configure</command> では空) - を渡したい場合には追加部分を - <makevar>CONFIGURE_ARGS</makevar> で指定してください. - そのパッケージが <command>autoconf</command> - を使用する場合には, <literal>USE_AUTOCONF=yes</literal> - を使います. これは, <makevar>GNU_CONFIGURE</makevar> - も意味し, <command>configure</command> の前に - <command>autoconf</command> を実行します. - </para> - - <para>X Window Systemのアプリケーションなど, - <command>imake</command>を 使って - <filename>Imakefile</filename> から - <filename>Makefile</filename> を作成するportの場合には - <literal>USE_IMAKE=yes</literal> を指定してください. - コンフィグレー ションステージで自動的に<command>xmkmf - -a</command> が実行されます. も し <option>-a</option> - フラグが問題をもたらすなら, さらに - <literal>XMKMF=xmkmf</literal>としてください.</para> - - <para>もし, port が <command>imake</command> - を使用するけれども, <maketarget>install.man</maketarget> - ターゲットがない場合には, - <literal>NO_INSTALL_MANPAGES=yes</literal> - を指定してください. ついでに, その port - のオリジナルの作者を探し出して八つ裂きにすると - いいでしょう.<!-- smiley - --><emphasis>:></emphasis></para> - - <para>Portの <filename>Makefile</filename> が - <maketarget>all</maketarget> 以外のものをメインのター - ゲットとしている場合には, <makevar>ALL_TARGET</makevar> でそ - れを指定してください. <maketarget>install</maketarget> と - <makevar>INSTALL_TARGET</makevar> も同様です.</para> - - <para>もし, port の元の Makefile が - <maketarget>all</maketarget> - 以外のターゲットをメインのターゲットとしている場合には, - <makevar>ALL_TARGET</makevar> - をそれに合わせて設定してください. - <maketarget>install</maketarget> と - <makevar>INSTALL_TARGET</makevar> についても同様です.</para> - <!-- kuriyama - duplicated? --> - </sect3> - - <!-- kuriyama - needs review order --> - <sect3> - <title><makevar>NO_INSTALL_MANPAGES</makevar></title> - - <para>あなたの port が<command>imake</command>は使うものの - <filename>install.man</filename> - ターゲットを持っていない場合, - <literal>NO_INSTALL_MANPAGES=yes</literal> - を指定してください. つい でに, - 作者を探し出して八つ裂きにするといいでしょ う. <!-- smiley - --><emphasis>(-_-#)</emphasis></para> - </sect3> - </sect2> - - <sect2> - <title>特別な配慮</title> - - <para>Portを作成する場合, - 考慮しなくてはいけないことがさらにいくつかあります. - この節では, - それらのうちもっともありがちなものについて説明します.</para> - - <sect3> - <title>ldconfig</title> - - <para>共有ライブラリをインストールするときには, - 共有ライブラリのキャッシュを更新するために port の - <filename>Makefile</filename> の - <maketarget>post-install</maketarget>target - から<literal>${LDCONFIG} -m</literal> - を走らせてください. - このコマンドの引数は共有ライブラリのインストールしてある - ディレクトリ (通常 - <filename><makevar>PREFIX</makevar>/lib</filename>) - です.</para> - - <para>また, <filename>pkg/PLIST</filename> に <literal>@exec - /sbin/ldconfig -m</literal> と <literal>@unexec - /sbin/ldconfig -R</literal> の組を入れて, package - をインストールした場合にも共有ライブラリがすぐ使え, - 削除の際にも, システムがまだライブラリが存在すると - 誤認しないようにしてください. - この行は共有ライブラリを指定する行のすぐ後に - 書くのがよいでしょう:</para> - - <programlisting> -lib/libtvl80.so.1 -@exec /sbin/ldconfig -m %D/lib -@unexec /sbin/ldconfig -R</programlisting> - - <para><emphasis>絶対に</emphasis>引数なしでただ - <literal>ldconfig</literal> とだけ書いてある行を - <filename>Makefile</filename> や - <filename>pkg/PLIST</filename> ファイルに入れないでください. - このコマンドを実行すると, 共有ライブラリのキャッシュが - <filename>/usr/lib</filename> の内容のみとなり, - ユーザのマシンにさまざまな問題をもたらします (「ぎゃぁ! - このportをインストールしたら xinit - が使えなくなっちゃった!」). この掟を破った者は, - 永久に地獄の底で苦しみ続けるように, - 閻魔様に頼んでおきます.</para> - </sect3> - </sect2> - - <sect2> - <title>ELF 対応</title> - - <para>FreeBSD は 3.0-RELEASE で ELF に移行しましたので, - シェアードライブラリを作成するたくさんの port を ELF 対応 - にする必要があります. 3.0 システムは ELF としても a.out - としてmも 動作しますし, 我々は非公式ではありますが, - できるだけ長い間 2.2 - システムのサポートをしたいと思っていますので, 複雑な状況です. - 以下は a.out のみに対応している port をどのように a.out と ELF - 両方に対応させるかのガイドライ ンです.</para> - - <para>このリストの一部は, - 移行時にしかあてはまらないものもありますが, 古い port - をアップグレードしたい場合に参考になるように, - しばらくのあいだは残しておきます.</para> - - <sect3> - <title>a.out ライブラリの退避</title> - - <para>a.out ライブラリは, <filename>/usr/local/lib</filename> - から, <filename>aout</filename> サブディレクトリ - に移動しなくはなりません. (もし移動しないと, ELF ports - がそれらをあっさり上書きして しまいます.) 3.0-CURRENT の - <filename>src/Makefile</filename> にある - <maketarget>move-aout-libs</maketarget> ターゲット - (<maketarget>aout-to-elf</maketarget> から呼ばれます) - がその移動をしてくれます. a.out - ライブラリを移動するだけなので, ELF と a.out - の両方のライブラリが標準的な ディレクトリにあるシステムでは, - このターゲットを実行しても安全です.</para> - </sect3> - - <sect3> - <title>フォーマット</title> - - <para>port ツリーは package - をそのマシンのフォーマットで作成します. つまり, 2.2 では - a.out, また 3.0 では <command>`objformat`</command> - の結果によって, a.out か ELF になります. また, いったん - a.out ライブラリをサブディレクトリに移動すると a.out - ライブラリの作成はサポートされません. (つまり, - あなたがにをすれば良いのかを理解しているのならば, - うまく作成できるかもしれませんが, - 自力でやらなければならないということです)</para> - - <note> - <para>もし port が aout でしか動作しないのなら, - <makevar>BROKEN_ELF</makevar> - に原因を説明する文字列を設定してください. - この変数が設定された port は, ELF - システム上でのビルドの際スキップされます.</para> - </note> - </sect3> - - <sect3> - <title>PORTOBJFORMAT</title> - - <para><filename>bsd.port.mk</filename> において - <makevar>PORTOBJFORMAT</makevar> は <literal>aout</literal> - か <literal>elf</literal> に設定され, 環境変数 - <envar>CONFIGURE_ENV</envar>, <envar>SCRIPTS_ENV</envar>, - <envar>MAKE_ENV</envar> の中で export されます. (2.2-STABLE - では常に <literal>aout</literal> になります). また, - <literal>PORTOBJFORMAT=${PORTOBJFORMAT}</literal> として - <maketarget>PLIST_SUB</maketarget> に渡されます. (以下にある - <literal>ldconfig</literal> - に関するコメントを参照して下さい.)</para> - - <para>この変数は, 以下のようにして - <filename>bsd.port.mk</filename> 中で設定されます.</para> - - <programlisting> -PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout</programlisting> - - <para>この変数を使って, port の make - の過程で何をすべきかを決定すべきですが, もし port の - <filename>configure</filename> スクリプトが元々, ELF - システムを自動的に検出するのであれば, - <makevar>PORTOBJFORMAT</makevar> - を参照する必要はありません.</para> - </sect3> - - <sect3> - <title>共有ライブラリの作成</title> - - <para>以下は, a.out と ELF - での共有ライブラリの扱いの違いです.</para> - - <itemizedlist> - <listitem> - <para>共有ライブラリのバージョン</para> - - <para>ELF の共有ライブラリは, <filename> - libfoo.so.<replaceable>M</replaceable> </filename> - という名前になっていなければなりません. ここで - <replaceable>M</replaceable> は単一の - バージョン番号を表します. 一方 a.out のライブラリは - <filename> libfoo.so.<replaceable>M</replaceable>. - <replaceable>N</replaceable></filename> という名前で, - <replaceable>M</replaceable> はメジャーバージョン番号, - <replaceable>N</replaceable> - はマイナーバージョン番号になっている必要があります. - これらを混同しないでください. <filename> - libfoo.so.<replaceable>N</replaceable>. - <replaceable>M</replaceable></filename> という名のELF - 共有ライブラリや <filename> - libfoo.so.<replaceable>N</replaceable></filename> - という名の a.out 共有ライブラリ - (あるいはシンボリックリンク) は - <emphasis>絶対にinstallしないでください</emphasis>.</para> - </listitem> - - <listitem> - <para>リンカコマンドライン</para> - - <para>直接 <command>ld</command> を使用せずに, <command>cc - -shared</command> を使用してください. - たった一つの違いは, ELF には, <option> - -Wl,-<replaceable>soname,libfoo.so.M</replaceable> - </option> - コマンドラインにを加える必要があることです.</para> - <!-- kuriyama - strange Japanese representation --> - </listitem> - </itemizedlist> - - <para>ELF のリンカを満足させるためには, - <filename>libfoo.so</filename> から <filename> - libfoo.so.<replaceable>N</replaceable></filename> - へのシンボリックリンクを作る必要があります. これは, - <filename>PLIST</filename> にも加えなくては いけませんし, - a.out の場合でも害にはならないので (一部の port - ではダイナミックリンクローディングのために - 必要でもあります), <makevar>PORTOBJFORMAT</makevar> - の設定を気にせずに, - ただ単純にリンクを作成してください.</para> - </sect3> - - <sect3> - <title><makevar>LIB_DEPENDS</makevar></title> - - <para>すべての port の Makefile を編集して, - <makevar>LIB_DEPENDS</makevar> - からマイナー番号を除去する必要があり, - 正規表現のサポートも除去する必要があります. (例えば, - <literal>foo\\.1\\.\\(33|40\\)</literal> から - <literal>foo.2</literal>) マッチングは <command>grep - -wF</command> を使って行われます.</para> - </sect3> - - <sect3> - <title><filename>PLIST</filename></title> - - <para><filename>PLIST</filename> は, a.out - のマイナー番号が0であれば, 短い (ELFの) - 共有ライブラリの名前を含み, さもなくば長い (a.outの) - 名前を含んでいる必要があります. - <filename>bsd.port.mk</filename> は 自動的に, - <makevar>PORTOBJFORMAT</makevar> が <literal>aout</literal> - であれば, <literal>.0</literal> を - 短い共有ライブラリの名前の行に付け加え, - <makevar>PORTOBJFORMAT</makevar> が <literal>elf</literal> - であれば, マイナー番号を - 長い共有ライブラリの名前から削除します.</para> - - <para>ELF システムで 2 - つのバージョン番号を持つ共有ライブラリを インストールしたり, - aout システムで 1 - つのバージョン番号しか持たない共有ライブラリを - インストールするのが避けられない場合 - (例えば他のオペレーティングシステム用の - 互換ライブラリをインストールする port など), - <makevar>NO_FILTER_SHLIBS</makevar> 変数を定義すれば, - 前節で説明されている <filename>PLIST</filename> - 編集の機能が停止されます.</para> - </sect3> - - <sect3> - <title><literal>ldconfig</literal></title> - - <!-- kuriyama - Eng. why literal? --> - <para>Makefile 中の <literal>ldconfig</literal> - の行は以下のようになります.</para> - - <programlisting> -${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....</programlisting> - - <para>また <filename>PLIST</filename> 中では:</para> - - <programlisting> -@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ... -@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -R</programlisting> - - <para>となります. これは, - システムのデフォルトフォーマットではなく - パッケージのフォーマットに応じて, 正しい - <command>ldconfig</command> - が呼ばれることを保証するためのものです.</para> - </sect3> - </sect2> - - <sect2 id="porting-masterdir"> - <title><makevar>MASTERDIR</makevar></title> - - <para>もし, あなたの port が 変数(例えば - 解像度とか紙のサイズなど)を変えたりした, - ちょっと違うバージョンを作成する必要があるときには, - ユーザが分りやすいように, package - ごとに別々のサブディレクトリを作成し, ただし, できるだけ port - 間でファイルを共有するようにしてください. 典型的な例では, - うまく変数を使えば, - とても短い<filename>Makefile</filename>だけ, - 1つ以外のすべてのディレクトリに置くだけで済みます. その短い - <filename>Makefile</filename> には - <makevar>MASTERDIR</makevar> を使って, - 残りのファイルがあるディレクトリを指定できます. また <link - linkend="porting-pkgname"><makevar>PKGNAME</makevar> </link> - の一部に変数に使って, package - が別々の名前を持つようにしてください.</para> - - <para>以下が, とても良い例になるでしょう. これは - <filename>japanese/xdvi300/Makefile</filename> - の一部です:</para> - - <programlisting> -PKGNAME= ja-xdvi${RESOLUTION}-17 - : -# default -RESOLUTION?= 300 -.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ - ${RESOLUTION} != 300 && ${RESOLUTION} != 400 - @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" - @${ECHO} "Possible values are: 118, 240, 300 (default) and 400." - @${FALSE} -.endif</programlisting> - - <para><filename>japanese/xdvi300</filename> は通常のパッチ, - package ファイルももっています. そこで, - <command>make</command> と入力すると, - デフォルトの解像度(300)を使って, 普通に port - の作成を行います.</para> - - <para>他の解像度に関してですが, これが, - <filename>xdvi118/Makefile</filename> の(コメントを除いた) - <emphasis>すべて</emphasis>です.</para> - - <programlisting> -RESOLUTION= 118 -MASTERDIR= ${.CURDIR}/../xdvi300 - -.include ${MASTERDIR}/Makefile</programlisting> - - <para>(<filename>xdvi240/Makefile</filename> と - <filename>xdvi400/Makefile</filename> も同様です). - <makevar>MASTERDIR</makevar> が - <filename>bsd.port.mk</filename> に - <makevar>PATCHDIR</makevar> や <makevar>PKGDIR</makevar> - などの通常のサブディレクトリが <filename>xdvi300</filename> - にあることを教えます. <literal>RESOLUTION=118</literal> - の行が, <filename>xdvi300/Makefile</filename> の - <literal>RESOLUTION=300</literal> の行を無効にし, port - は解像度を118として作成されます.</para> - </sect2> - - <sect2> - <title>共有ライブラリのバージョン</title> - - <para>まず, <link linkend="policies-shlib"> - 共有ライブラリのバージョンについての指針</link> を読んで, - 共有ライブラリのバージョンを - 一般的にどうすれば良いかを理解してください. 盲目的に, - ソフトウエアの作者がちゃんと理解していると - 信じててはいけません, 多くの場合違います. - 細い点まで考慮することは大変重要なことです, - なぜなら我々は互換性がないかもしれない大量の - ソフトウェアを共存させようとする, 特殊な状況にあるからです. - 不注意な port の導入が共有ライブラリに関して, - 多大な問題を引き起したことが過去にあります (今まで, - <filename>jpeg-6b</filename> がなぜ 9.0 - といバージョン番号を持っているか不思議に - 思ったことはありませんか?). もし, 疑問があれば, &a.ports; - にメールを送ってください. ほとんどの時間は, - 正しいシェアードライブラリのバージョンを決めることと, - それを実現するためのパッチを作成することに終始します.</para> - - <para>しかしながら, が同じソフトウェアの違ったバージョンの - ソフトウェアが既にツリーにあるばあいには, - 状況は非常に複雑です. <!-- kuriyama - strange translation? --> - つまり, FreeBSD では, - ユーザがリンカにどのバージョンの共有ライブラリを - 使用するかを指定できないからです - (リンカは常にもっとも高いバージョンを選びます). これは, もし, - <filename>libfoo.so.3.2</filename> と - <filename>libfoo.so.4.0</filename> - がシステムに存在するときには, - リンカに特別なアプリケーションだけ - <filename>libfoo.so.3.2</filename> - をリンクするように指示する方法がないことを意味します. これは, - コンパイル時のリンクという意味では完全に見劣りします. - この場合の唯一の解決方法は, 共有ファイルの名前の - <emphasis>ベース</emphasis> 部分を変えることです. 例えば, - <filename>libfoo.so.4.0</filename> を - <filename>libfoo4.so.1.0</filename> へ変えることによって, - バージョン 3.2 とバージョン 4.0 共に他の port - からリンクされることができるようになります.</para> - </sect2> - - <sect2 id="porting-manpages"> - <title>マニュアル</title> - - <para><makevar>MAN[1-9LN]</makevar> 変数を使用すると, - 自動的にすべてのマニュアルを <filename>pkg/PLIST</filename> - に加えます (つまり, マニュアルを <filename>PLIST</filename> - に加えては <emphasis>いけません</emphasis> — <link - linkend="porting-plist">PLIST の生成</link> - を参照してください). またマニュアルを - <filename>/etc/make.conf</filename> 中の - <makevar>NOMANCOMPRESS</makevar> の設定に応じて, - install時に自動的に圧縮したり伸長したりします.</para> - - <para>マニュアルをインストール時に圧縮するかどうかを - 指定するには, <makevar>MANCOMPRESSED</makevar> - 変数を使用します. この変数は, 3つの値をとることができます, - <literal>yes</literal>, <literal>no</literal> そして - <literal>maybe</literal> です. <literal>yes</literal> - はマニュアルが既に圧縮されて インストールされている, - <literal>no</literal> はされていない, <literal>maybe</literal> - はそのソフトウェアがすでに, <makevar>NOMANCOMPRESS</makevar> - に合わせており <filename>bsd.port.mk</filename> - が特別なにもする必要がないことを意味します.</para> - - <para><makevar>USE_IMAKE</makevar> がセットされていて, - <makevar>NO_INSTALL_MANPAGES</makevar> - がセットされていなければ, <makevar>MANCOMPRESSED</makevar> - は自動的に <literal>yes</literal> に設定され, - それ以外の場合には, <literal>no</literal> になります. - デフォルトがあなたの port - に合わない場合以外は明示的に設定する必要がありません.</para> - - <para><makevar>PREFIX</makevar> 以外のディレクトリの下に - マニュアルを置くような port では <makevar>MANPREFIX</makevar> - を指定することができます. さらに, - 特定のセクションのマニュアルだけ, - 標準ではない場所にインストールする場合, 例えばいくつかの Perl - のモジュールの ports など, には個々のマニュアルのパスを - <makevar>MAN<replaceable>sect</replaceable>PREFIX</makevar> - (<replaceable>sect</replaceable> は, <literal>1-9</literal>, - または, <literal>L</literal> か <literal>N</literal> - を表わします) によって指定できます. ができます.</para> - <!-- kuriyama - strange representation --> - - <para>マニュアルが, 言語特有のサブディレクトリに - 置かれる場合には, 言語名を <makevar>MANLANG</makevar> - に設定してください. この変数のデフォルト値は, - <literal>""</literal> になっています (つまり, 英語のみ). - </para> - - <para>これは, 全部をまとめた例です.</para> - - <programlisting> -MAN1= foo.1 -MAN3= bar.3 -MAN4= baz.4 -MANLANG= "" ja -MAN3PREFIX= ${PREFIX}/share/foobar -MANCOMPRESSED= yes</programlisting> - - <para>以下の6個のファイルがこの port でインストールされます. - </para> - - <programlisting> -${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</programlisting> - </sect2> - - <sect2 id="porting-motif"> - <title>Motifを必要とするport</title> - - <para>最近はコンパイルに Motif - を必要とするアプリケーションが増えて きました. - (Motif自体は有料のものがいくつかの会社から手に入りま すし, - 多くのアプリケーションがコンパイル可能な無料の互換ライブラリ - が <filename>x11-toolkits/lesstif</filename>にあります) - Motifはかなり広く使われていますし, 製品のライ - センスではライブラリを静的にリンクした - 実行形式は再配布が認めら れている場合が多いので, - Motifを必要とするソフトウェアを簡単に 動的(port - からコンパイルする人々のために)/静的(package を配布 - する人々のために)にリンクできるような - しくみが用意されています.</para> - - <sect3> - <title><makevar>REQUIRES_MOTIF</makevar></title> - - <para>Motif - がないとコンパイルできないportのMakefileではこの変 - 数を指定してください. これによって, - Motifを持っていない人が - このportをコンパイルしようとするのを未然に防ぎます.</para> - </sect3> - - <sect3> - <title><makevar>MOTIFLIB</makevar></title> - - <para>この変数は <filename>bsd.port.mk</filename> によって - Motif ライブラリの指 定に置き換えられます. - ソース内のMakefileやImakefileで Motif - ライブラリを指定しているところをこの変数に置き換えるよ - うにパッチをあててください.</para> - - <para>代表的な例としては以下の二つがあげられます:</para> - - <orderedlist> - <listitem> - <para>MakefileかImakefileの中でMotifライブラリが - <option>-lXm</option> として使われている場合には, - かわりに <makevar>MOTIFLIB</makevar> - と書いてください.</para> - </listitem> - - <listitem> - <para>Imakefileの中で <literal>XmClientLibs</literal> - が使われている 場合には, それを - <literal>${MOTIFLIB} ${XTOOLLIB} - ${XLIB}</literal> と書きかえてください.</para> - </listitem> - </orderedlist> - - <note> - <para><makevar>MOTIFLIB</makevar> は通常 - <literal>-L/usr/X11R6/lib -lXm</literal> か - <literal>/usr/X11R6/lib/libXm.a</literal> に置き換えら - れます. したがって前に <option>-L</option> や - <option>-l</option> をつけ る必要はありません.</para> - </note> - </sect3> - </sect2> - - <sect2> - <title>X11 のフォント</title> - - <para>もし, あなたの port が X window system - のフォントをインストールするのであれば, それらを <filename> - <makevar>X11BASE</makevar>/lib/X11/fonts/local</filename> - に置くようにしてください. このディレクトリは XFree86 release - 3.3.3 で新設されたものです. もし, - それが存在しなければ作成し, ユーザに XFree86 を 3.3.3 - かそれより新しいものに更新か, すくなくとも, - このディレクトリを <filename>/etc/XF86Config</filename> の - font path - に加えるように促すメッセージを出力するようにしてください. - </para> - </sect2> - - <sect2> - <title>Info ファイル</title> - - <para>新しい版の texinfo(2.2.2-RELEASE - およびそれ以降に入っています) には, - <command>install-info</command> というコマンドが含まれており, - <filename>dir</filename> ファイルに項目を追加したり, - 削除したりすることがで きます. もし, あなたの port が info - ドキュメントをインストー ルするのであれば, 以下の指示に従って, - その port および package が正しく, ユーザの - <filename>${PREFIX}/info/dir</filename> ファイル - を更新するようにしてください. (この節は, - とても長くてすいません, しかし info - ファイルを作りあげるためには, これらは不可欠 です. - 正しく行なえば, <emphasis>美しい</emphasis> - リストができますので, 辛抱してください! <!-- smiley - --><emphasis>:)</emphasis></para> - - <para>まず, これを知っておかなければなりません:</para> - - <screen>&prompt.user; <userinput>install-info --help</userinput> -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 - という節に置く.) - :</screen> - - <note> - <para>このプログラムは, 実際には info - ファイルを<emphasis>インストール</emphasis> しません, 単に - <filename>dir</filename> - ファイルにエントリーを挿入したり削除し - たりするだけです.</para> - </note> - - <para>これから, <command>install-info</command> - を使用するように, ports を変換す る7段階の工程を示します. - 例として <filename>editors/emacs</filename>を - 使用します.</para> - - <procedure> - <step> - <para>まず, texinfo のソースを見て, - <literal>@dircategory</literal> と - <literal>@direntry</literal> 文がないファイルについて, - それらを追加するパッチを作成します. 以下は, - ここでの例での patchの一部です:</para> - - <programlisting> ---- ./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 - :</programlisting> - - <para>フォーマットについては見ればわかると思います. - <filename>dir</filename> - というファイルに必要な項目を書いておいてくれる作者 - も多いので, まず自分で書く前にさがしてみてください. また, - 関係 する ports も調べて, 節(section)の名前や, - インデントなどが - きちんと合っているかどうかを確認してください - (項目のテキスト は, すべて4つめのタブ・ストップ(tab - stop)から始めることを推 奨します).</para> - - <note> - <para>1つのファイルに対して1つの info - の項目しか書けないことに注 意してください, これは, - <command>install-info --delete</command> <!-- kuriyama - - not email --> が, そのバグにより, - <email>@direntry</email> セクションに複数の項目を書 - いても, - 初めの1つの項目しか削除してくれないからです.</para> - </note> - - <para>texinfo のソースにパッチをあてるかわりに, - <literal>dir</literal> の項目 を - <command>install-info</command> の - 引数((<option>--section</option>, - <option>--entry</option>) として与えることもできます. - これはあまり良い方法とは 思えません, なぜなら, - 同じ情報を3ヶ所(<filename>Makefile</filename>, - <filename>PLIST</filename> の - <literal>@exec</literal>/<literal>@unexec</literal>: - 以下参照) に重複して, 書く必要があるからです. - しかしながら, もし日本語(あるいは, 他のマルチバイト文字)の - info ファイルがあるのならば, - <command>install-info</command> - の特別な引数を使用する必要があるでしょう, なぜならば, - <command>makeinfo</command> がこのような texinfo - ソースファイル を扱えないからです. - (このようなものをどう扱うかの例としては, - <filename>japanese/skk</filename> の - <filename>Makefile</filename> と - <filename>PLIST</filename> を見て ください.)</para> - </step> - - <step> - <para>portのディレクトリに戻って, <command>make clean; - make</command> をして, info ファイルが texinfo - ソースファイルから再び生成さ れることを確認してください. - texinfo ソースファイルのほうが info - ファイルよりも新しいので, <command>make</command> - とタイプすれば, info ファイルは再構築されるはずですが, - 多くの <filename>Makefile</filename> には info - ファイルの正しい依存関係が書かれていません. - <command>emacs</command> の場合, info - ファイルの再構築ため, <filename>man</filename> - サブディレクトリ に降りていくようにするために, メインの - <filename>Makefile.in</filename> にパッ - チをあてる必要がありました.</para> - - <programlisting> ---- ./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)</programlisting> - - <para><filename>man</filename> - サブディレクトリでのデフォルトターゲットは, - <maketarget>info</maketarget> で呼ばれるのに対して, - メインの <filename>Makefile</filename> では, - <maketarget>all</maketarget> で呼びたいので, - 2つめのpatchが必要でした. また, <filename>info</filename> - info ファイルのインストールも削除しました, なぜなら, - 同じものが同じ名前で既に - <filename>/usr/share/info</filename> にあるからです. - (このパッチはここにはありません.)</para> - </step> - - <step> - <para>もし, <filename>Makefile</filename> に - <filename>dir</filename> ファイルをインストールす - る個所があれば, 削除します. あなたの port がインストー - ルしてはいけません. また, <filename>dir</filename> - ファイルを壊してしまうよう - なコマンドの類も削除します.</para> - - <programlisting> ---- ./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); \</programlisting> - </step> - - <step> - <para>(これは, 既存のportを修正するときのみ必要です.) - <filename>pkg/PLIST</filename> を見て, - <filename>info/dir</filename> にパッチをあて - ようとするものすべてを削除します. これらは, - <filename>pkg/INSTALL</filename> - やその他のファイルにもあるかもしれない ので, - いろいろさがしてみてください.</para> - - <programlisting> -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</programlisting> - </step> - - <step> - <para><maketarget>post-install</maketarget> ターゲットを - <filename>Makefile</filename> に加えて, - <filename>dir</filename> - ファイルが存在しなければ作成するようにします. また, - インストールされた info ファイルについては, - <maketarget>install-info</maketarget> - を実行するようします.</para> - - <programlisting> -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 -+ if [ ! -f ${PREFIX}/info/dir ]; then \ -+ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \ -+ fi -+.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></programlisting> - - <para>新しい info ファイルを作成するのに, - <filename>/usr/share/info/dir</filename> と上のコマンド, - 以外は使用しな いでください. 実際のところ, もし port - する人がこれに関して <filename>PLIST</filename> - に自らまったく手を加える必要がないのであれば, 上 - のパッチのはじめの3行を <filename>bsd.port.mk</filename> - に加えたでしょう.</para> - </step> - - <step> - <para><filename>PLIST</filename> を編集して, 同じ働きをする - <literal>@exec</literal> 文, そ - れに<command>pkg_delete</command> のために - <literal>@unexec</literal> 文を加えてくださ い. - <literal>@unexec</literal> を使用して - <filename>info/dir</filename> を削除する必 - 要はありません.</para> - - <programlisting> -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,15 @@ - 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 [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir -+@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</programlisting> - - <note> - <para><literal>@unexec install-info --delete</literal> - コマンドは, info ファイル自身より先に置き, - コマンドがファイルを読めるようにし - ておかなければならないことに注意してください. また, - <literal>@exec install-info</literal> コマンドは info - ファイルおよび <filename>dir</filename> ファイルを作る - <literal>@exec</literal> コマンドより後に - おかなければなりません.</para> - </note> - </step> - - <step> - <para><link linkend="porting-testing">テスト</link> - をして出来栄えに感服しましょう <!-- smiley - --><emphasis>:)</emphasis> 各段階の前後に, - <filename>dir</filename> - ファイルをチェックしましょう.</para> - </step> - </procedure> - </sect2> - - <sect2> - <title><filename>pkg/</filename> サブディレクトリ</title> - - <para>まだ触れていない, いくつかのこつが - <filename>pkg/</filename> サブディレクトリにはあり, - 時として便利でしょう.</para> - - <sect3 id="porting-message"> - <title><filename>MESSAGE</filename></title> - - <para>もし, インストールする人にメッセージを表示する - 必要がある場合には, そのメッセージを - <filename>pkg/MESSAGE</filename> に置けます. この機能は, - <command>pkg_add</command> - の後の追加のインストール手続きを表示するときなどに, - 重宝します.</para> - - <note> - <para> - <filename>pkg/MESSAGE</filename> ファイルは - <filename>pkg/PLIST</filename> に加える必要はありません. - また, もしユーザが package ではなく port を使用して - いる場合には自動的には表示されませんので, 明示的に - <maketarget>post-install</maketarget> - で表示するようにするべきでしょう.</para> - </note> - </sect3> - - <sect3> - <title><filename>INSTALL</filename></title> - - <para>バイナリパッケージが <command>pkg_add</command> - でインストールされるときに, 実行される必要がある - コマンドがあれば, <filename>pkg/INSTALL</filename> - スクリプトを使って実行することができます. - このスクリプトは自動的に package に加えられ, - <command>pkg_add</command> によって2度実行されます. はじめは - <literal>INSTALL ${PKGNAME} PRE-INSTALL</literal> - と実行され, 2度目には, <literal>INSTALL ${PKGNAME} - POST-INSTALL</literal> と実行されます. - どちらのモードで実行されているかは, - <literal>$2</literal> を調べることによってわかります. - 環境変数 <envar>PKG_PREFIX</envar> には package - がインストールされるディレクトリが設定されます. 詳細は - &man.pkg.add.1; を見てください.</para> - - <note> - <para> - port を <command>make install</command> で - インストールするときには, - このスクリプトは自動的に実行されません. もし, - 実行される必要があるならば, port の Makefile - から明示的に呼ぶ必要があります. - </para> - </note> - </sect3> - - <sect3> - <title><filename>REQ</filename></title> - - <para>port が(インストールされるシステムの状態によって) - インストールされるべきか, されないべきか区別する必要が - あるときには, “要件(requirements)” スクリプト - <filename>pkg/REQ</filename> を作ることができます. これは, - インストール及びデインストール (package - の削除)の時に自動的に実行され, - それらが処理されるべきかを決定します.</para> - </sect3> - - <sect3 id="porting-plist"> - <title>make の変数にあわせた <filename>PLIST</filename> - の変更</title> - - <para>いくつかの port, 特に p5- portsなど, は configure - のオプション (あるいは, p5- ports の場合は perl - のバージョン)によって, <filename>PLIST</filename> - を変える必要があります. これを容易に実現するために, - <filename>PLIST</filename> 中の - <literal>%%OSREL%%</literal>, - <literal>%%PERL_VER%%</literal>, - <literal>%%PERL_VERSION%%</literal> は, - 適切に置き換えられるようになっています. - <literal>%%OSREL%%</literal> の値は, - オペレーティングシステムの数字で表されたリビジョンです - (例えば, <literal>2.2.7</literal>). - <literal>%%PERL_VERSION%%</literal> は perl - のバージョン番号全体(例えば, <literal>5.00502</literal> )で, - <literal>%%PERL_VER%%</literal> はバージョン番号から, - パッチレベルを引いてものです(例えば, - <literal>5.005</literal>).</para> - - <para>他の置き換えが必要であれば, <makevar>PLIST_SUB</makevar> - 変数に <literal> <replaceable> - VAR</replaceable>=<replaceable>VALUE - </replaceable></literal> - という形式のペアのリストを設定することによって, - <filename>PLIST</filename> 中の - <literal>%%<replaceable>VAR</replaceable>%%</literal> は - <replaceable>VALUE</replaceable> に置き換えられます. 例えば, - バージョンに固有の沢山のファイルを インストールする場合には, - <filename>Makefile</filename> に</para> - <!-- kuriyama - Eng ver has unneeded quote above --> - - <programlisting> -OCTAVE_VERSION= 2.0.13 -PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting> - - <para>と書いて, <filename>PLIST</filename> - 中のバージョン番号が表われるすべてのところに, - <literal>%%OCTAVE_VERSION%%</literal> と書きます. - このようにしておけば, port をアップグレードするときに, - 何十行(ときとして, 何百行)も <filename>PLIST</filename> - を書き替えないですみます.</para> - - <para>この書き換えは (<link linkend="porting-manpages"> - マニュアル</link> の追加も) - <maketarget>do-install</maketarget> と - <maketarget>post-install</maketarget> ターゲット のあいだに, - <makevar>PLIST</makevar> を読み <makevar>TMPPLIST</makevar> - (デフォルトは, <filename> - <makevar>WRKDIR</makevar>/.PLIST.mktmp</filename> ) - に書き込むことによって行なわれます. もし, あなたの port が - <makevar>PLIST</makevar> を実行時に生成するのであれば, - <maketarget>do-install</maketarget> のあいだか, - その前に行うようにしてください. また, - 書きかえられたあとのファイルを編集する必要がある場合には, - <maketarget>post-install</maketarget> で, - <makevar>TMPPLIST</makevar> を書きかえてください.</para> - </sect3> - - <sect3> - <title id="porting-pkgsubdir"><filename>pkg</filename> - サブディレクトリにあるファイル名の変更</title> - - <para><filename>pkg</filename> - サブディレクトリにあるファイルは全て, 変数を - 使用して定義されていますので, 必要であれば - <filename>Makefile</filename> 中で 変更可能です. いくつかの - ports で 一つの <filename>pkg</filename> - サブディレクトリを共有する場合や, 上記のファイルに書き込む - 必要があるときなど, 特に便利です. (<filename>pkg</filename> - サブディレクトリに直接書き込むのが良くない理由に ついては - <link linkend="porting-wrkdir">WRKDIR - 以外への書きこみ</link> を参照してください.)</para> - - <para>以下が変数名とそのデフォルト値の表です.</para> - - <informaltable frame="none"> - <tgroup cols="2"> - <thead> - <row> - <entry>Variable</entry> - <entry>Default value</entry> - </row> - </thead> - - <tbody> - <row> - <entry><makevar>COMMENT</makevar></entry> - <entry><literal>${PKGDIR}/DESCR</literal></entry> - </row> - - <row> - <entry><makevar>DESCR</makevar></entry> - <entry><literal>${PKGDIR}/DESCR</literal></entry> - </row> - - <row> - <entry><makevar>PLIST</makevar></entry> - <entry><literal>${PKGDIR}/PLIST</literal></entry> - </row> - - <row> - <entry><makevar>PKGINSTALL</makevar></entry> - <entry><literal>${PKGDIR}/PKGINSTALL</literal></entry> - </row> - - <row> - <entry><makevar>PKGDEINSTALL</makevar></entry> - <entry><literal>${PKGDIR}/PKGDEINSTALL</literal></entry> - </row> - - <row> - <entry><makevar>PKGREQ</makevar></entry> - <entry><literal>${PKGDIR}/REQ</literal></entry> - </row> - - <row> - <entry><makevar>PKGMESSAGE</makevar></entry> - <entry><literal>${PKGDIR}/MESSAGE</literal></entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para><makevar>PKG_ARGS</makevar>を上書きせずに, - これらの変数を変更 するようにしてください. - <makevar>PKG_ARGS</makevar>を変更すると これらのファイルは - port から正しく <filename>/var/db/pkg</filename> - にインストールされなくなります.</para> - </sect3> - </sect2> - - <sect2> - <title>ライセンス上の問題</title> - - <para>ソフトウェアによっては制限の厳しい - ライセンスがついてきたり, 法律的に問題があるかもしれません. - (PKPの公開鍵暗号化, ITAR (暗 号化ソフトウェアの輸出) - などが例としてあげられます). それらを - どう扱えばいいかはライセンスの文面によって - さまざまな場合があり ます.</para> - - <note> - <para>ソフトウェア移植者として, - あなたにはライセンスをよく読み, FreeBSD プロジェクトが FTP - または CD-ROM で配布してはいけないソフ - トウェアを配布してしまうことのないよう, - 注意する義務があります. なにか疑問がある場合には, - &a.ports;に聞いてみてください.</para> - </note> - - <para>よく見られるケースに対処するために, - 二つの変数が用意されてい ます:</para> - - <orderedlist> - <listitem> - <para>ソフトウェアに “有償再配布を禁ずる” - という趣旨のライセン スがついてきた場合には - <makevar>NO_CDROM</makevar> - という変数にその理由を記述して ください. - 私たちはこれがついているportはCD-ROMリリースに入 - れないようにしますが, - オリジナルのソースファイルとpackage - はFTPでは取れるようにしておきます.</para> - </listitem> - - <listitem> - <para>もしも, 生成される package - が個々のサイトで独自に構築さ れる必要があったり, - ライセンスによって生成されるバイナリが - 配布できない場合には, <makevar>NO_PACKAGE</makevar> - 変数にその理由を記述してくだ さい. そのような package が - FTP サイトに置かれたり, リリース 時の CD-ROM - へ入らないようにします. ただし, いずれの場合も distfile - は(FTP や CD-ROM に)含まれるようになります.</para> - </listitem> - - <listitem> - <para>Portが, 使用者によっては法律上の問題が生じる時 - (暗号化ソフ トウェアなど), - または“商用利用を禁ずる”とライセンスに書い - てある場合には - <makevar>RESTRICTED</makevar>という変数にその理由を入れ - てください. この場合には, - ソースファイルやpackageは私たちの - FTPサイトにも置かれません.</para> - </listitem> - </orderedlist> - - <note> - <para>GNU一般公有使用許諾書 (GPL) はバージョン1, 2とも - port作成上は何ら問題にはなりません.</para> - </note> - - <note> - <para>もしあなたが,ソースツリー管理者 (committer) - であれば, ソースツリーにこのようなportを入れる際に, - <filename>ports/LEGAL</filename> - ファイルを書き換えるのを忘れないようにし - てください.</para> - </note> - </sect2> - - <sect2> - <title>アップグレード</title> - - <para>Port - のバージョンが原作者からのものに比べて古いことに気がつ - いたら, まずはあなたの持っているportが私たちの最新のもの - (ミラー サイトの <filename>ports/ports-current</filename> - というディレクトリにあります) - であることを確認してください.</para> - - <para>次に, portの <filename>Makefile</filename> - に<makevar>MAINTAINER</makevar> (保守担当者) の - アドレスが書いてある場合には, - その人にメールを出してみましょう. - 保守担当者の人がすでにアップグレードの準備を - しているかもしれま せんし, - (新しいバージョンの安定度に問題があるなど) あえてアッ - プグレードをしない理由があるのかもしれません.</para> - - <para>保守担当者にアップグレードをしてくれと頼まれた場合, - あるいは - そもそもportのMakefileに保守担当者が書いてない場合などは, あ - なたがアップグレードをしてくださると助かります. - その場合にはアッ プグレードをしたのち, - 変更前と変更後のディレクトリの再帰的diff (unified diff と - context diff のどちらでもいいのですが, port のコミッター達は - unified diff のほうを好むようです) をとって送ってください. - (例えば, 変更前のディレクトリが - <filename>superedit.bak</filename> という名前でとってあり, - 変更後のもの が <filename>superedit</filename> - に入っているなら, <command>diff -ruN superedit.bak - superedit</command> の結果を送ってください. ) diff - の出力を見て, すべての変更が正しくなされているか確認して - ください. 変更箇所については, &man.send-pr.1; (カテゴリーは, - <literal>ports</literal>)に diff の出力結果を添えて, - 私たちに送ってもらうのが一 番よいです. commit する際に CVS - に明確に記述しなければならない ので, - 付け加えたり削除したりしたファイルがあったら, それについ - て書いておいてください. もし diff の大きさが 20 KB 程度を - 超えるようであれば, 圧縮したものを uuencode して下さい. - そうでなければそのまま PR に入れるだけでいいです.</para> - - <para>繰り返しになりますが, ports の変更を送るときには, - &man.shar.1; ではなく &man.diff.1; - を使用してください.</para> - </sect2> - - <sect2 id="porting-dads"><!-- kuriyama - why Eng ver has anchor tag? --> - <title>やっていいことといけないこと</title> - - <para>この節では, - ソフトウェアをportする上でよくある落し穴などにつ - いて説明します. このリストを使って, あなた自身が作成した port - のチェックはもとより, PR データベースにある, 他の人が作成した - port のチェックもできます. あなたがチェックした port について - のコメントを <link - linkend="contrib-general">バグ報告と一般的な論評</link> - にしたがって, 送ってください. PR データベースにある port を - チェックすることによって, 私達がそれらを commit - するのを早くし, - あなたが何をしているか理解していることも示します.</para> - - <sect3> - <title>バイナリのstrip</title> - - <para>バイナリは strip してください. - オリジナルのソースがバイナリを strip - してくれる場合は良いですが, そうでない場合には - <literal>post-install</literal> ターゲットを指定して strip - するようにするとよいでしょう. 例えば, - こんな風になります:</para> - - <programlisting> -post-install: - strip ${PREFIX}/bin/xdl</programlisting> - - <para>インストールされた実行形式がすでに strip - されているかどうかは <command>file</command> - コマンドで確認できます. これが`not - stripped'と言わなければ, - stripされているということです.</para> - </sect3> - - <sect3> - <title><makevar>INSTALL_*</makevar> マクロ</title> - - <para>あなた自身の *-install - ターゲットでファイルの正しいモードと オーナを保証するために, - 必ず<filename>bsd.port.mk</filename>で提供されて - いるマクロを使用してください. - マクロは以下のようなものがあります.</para> - - <itemizedlist> - <listitem> - <para><makevar>${INSTALL_PROGRAM}</makevar> - は実行可能なバイナリを - インストールするコマンドです.</para> - </listitem> - - <listitem> - <para><makevar>${INSTALL_SCRIPT}</makevar> - は実行可能なスクリプトを - インストールするコマンドです.</para> - </listitem> - - <listitem> - <para><makevar>${INSTALL_DATA}</makevar> - は共有可能なデータを - インストールするコマンドです.</para> - </listitem> - - <listitem> - <para><makevar>${INSTALL_MAN}</makevar> - はマニュアルとその他のドキュメ - ントをインストールするコマンドです. - (圧縮はしません)</para> - </listitem> - </itemizedlist> - - <para>これらは基本的に <command>install</command> - コマンドに適当なフラグを与え たものです. - どのようにこれらを使用するかは以下の例を見てください. - </para> - </sect3> - - <sect3 id="porting-wrkdir"> - <title><makevar>WRKDIR</makevar></title> - - <para><makevar>WKRDIR</makevar> - の外のファイルにはなにも書き込まないように <!-- kuriyama - - to files? --> してください. <makevar>WRKDIR</makevar> は - ports のビルド中に書き込こめる - ことが保証されている唯一の場所です(<link - linkend="ports-cd"> CDROM から ports - をコンパイル</link>を参照). <makevar>PKGDIR</makevar> - にあるファイルを修正する必要がある ときには, <link - linkend="porting-pkgsubdir">変数の再定義</link> - によって行ない, 上書きはしないでください.</para> - </sect3> - - <sect3 id="porting-wrkdirprefix"> - <title><makevar>WRKDIRPREFIX</makevar></title> - - <para><makevar>WRKDIRPREFIX</makevar> - を尊重していることを確認してください. 特に, 別の port の - <makevar>WRKDIR</makevar> を参照している - ときには気を付けてください. 正しい場所は, - <filename><makevar> WRKDIRPREFIX</makevar> - <makevar>PORTSDIR</makevar> - /<replaceable>subdir</replaceable>/ - <replaceable>name</replaceable>/work</filename>, です, - <filename><makevar> - PORTSDIR</makevar>/<replaceable>subdir</replaceable>/ - <replaceable>name</replaceable>/work</filename> とか - <filename><makevar> - .CURDIR</makevar>/../../<replaceable>subdir - </replaceable>/<replaceable>name</replaceable>/work - </filename> とかではありません.</para> - - <para>また, 自分で <makevar>WRKDIR</makevar> 定義するときには, - 頭に - <literal>${WRKDIRPREFIX}${.CURDIR}</literal> - が付いている 事を確認してください.</para> - </sect3> - - <sect3 id="porting-versions"> - <title>OS や OS のバージョンの区別</title> - - <para>Port の過程で, 修正や, どのバージョンの UNIX - で動くかによる条件つきコンパイルなどが - 必要なコードに出会うかもしれません. - そのような条件つきコンパイルなどのための - 変更をおこなうときには, FreeBSD 1.x システムへの移植や, - CSRGの4.4BSD, BSD/386, 386BSD, NetBSD, OpenBSD - などの他のBSDシステムへの移植が可能なように, - できるだけ普遍的な変更をおこなうことを - 心がけてください.</para> - - <para>4.3BSD/Reno (1990) およびそれより新しい BSD - 版を古いバージョンと区別するには <literal>BSD</literal> - マクロを利用するのがよいでしょう. これは - <filename><sys/param.h></filename> で定義されています. - このファイルがすでにインクルードされていればよいのですが, - もしそうでない場合には以下のコードを, その - <filename>.c</filename> - ファイルの適当な場所に加えてください.</para> - - <programlisting> -#if (defined(__unix__) || defined(unix)) && !defined(USG) -#include <sys/param.h> -#endif</programlisting> - - <para>これらの 2 - つのシンボルが定義されているすべてのシステムには - <filename>sys/param.h</filename> があるはずです. もし, - そうでないシステムを発見したら我々にも教えてください. - &a.ports; までメールを送ってください.</para> - - <para>あるいは, GNU の Autoconf - のスタイルを使用することもできます,</para> - - <programlisting> -#ifdef HAVE_SYS_PARAM_H -#include <sys/param.h> -#endif</programlisting> - - <para>この方法を使用するときには, - <filename>Makefile</filename> 中の - <makevar>CFLAGS</makevar>に - <literal>-DHAVE_SYS_PARAM_H</literal> - を加えることを忘れないようにしてください.</para> - - <para>いったん <filename>sys/param.h</filename> - がインクルードされると,</para> - - <programlisting> -#if (defined(BSD) && (BSD >= 199103))</programlisting> - - <para>このようにしてそのコードが 4.3 Net2 コードベース, - またはそれより新しいもの (例: FreeBSD 1.x, 4.3/Reno, NetBSD - 0.9, 386BSD, BSD/386 1.1とそれ以前) - の上でコンパイルされているかを検出できます.</para> - - <programlisting> -#if (defined(BSD) && (BSD >= 199306))</programlisting> - - <para>これは, 4.4コードベース, またはそれより新しいもの (例: - FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0とそれ以後) - の上でコンパイルされているかどうかを - 検出するために使用します.</para> - - <para>4.4BSD-Lite2 コードベースでは, <literal>BSD</literal> - マクロの値は <literal>199506</literal> になっています. - これは参考程度の意味合いしかありません. 4.4-Lite ベースの - FreeBSD と 4.4-Lite2 での変更がマージされたバージョンとを - 区別するのに使用するべきものではありません. - この目的のためには, <literal>__FreeBSD__</literal> - マクロをかわりに使用してください.</para> - - <para>以下は控え目に使ってください.</para> - - <itemizedlist> - <listitem> - <para><literal>__FreeBSD__</literal> - はFreeBSDのすべての版で定義されています. 変更が - FreeBSD - だけに適用されるとき以外は使用しないでください. - Portでよくある, <function>strerror()</function> - ではなく <literal>sys_errlist[]</literal> - を使うなどは, FreeBSDでの変更ではなく, BSD - の流儀です.</para> - </listitem> - - <listitem> - <para>FreeBSD 2.xでは <literal>__FreeBSD__</literal> が - <literal>2</literal> と定義されています. - それ以前の版では <literal>1</literal> になっています. - その後の版では, - そのメジャー番号に合うように上がっていきます.</para> - </listitem> - - <listitem> - <para>もし, FreeBSD 1.x システムと FreeBSD 2.x あるいは - FreeBSD 3.x システムを区別する必要があれば, 上で述べた - <literal>BSD</literal>マクロを使用するのが, - 大抵の場合において正しい答です. もし, - FreeBSD特有の変更であれば (<command>ld</command> - を使うときのシェアードライブラリ用のなオプションなど), - <!-- kuriyama - strange translation --> - <literal>__FreeBSD__</literal>を使い <literal>#if - __FreeBSD__ > 1</literal> のようにFreeBSD 2.x - および, それ以降のシステムを検出するのはかまいません. - もし, - 2.0-RELEASE以降のFreeBSDシステムを細かく検出したけれ ば, - 以下を使用することができます.</para> - - <programlisting> -#if __FreeBSD__ >= 2 -#include <osreldate.h> -# if __FreeBSD_version >= 199504 - /* 2.0.5+ release specific code here */ -# endif -#endif</programlisting> - - <informaltable frame="none"> - <tgroup cols="2"> - <thead> - <row> - <entry>Release</entry> - <entry><literal>__FreeBSD_version</literal></entry> - </row> - </thead> - - <tbody> - <row> - <entry>2.0-RELEASE</entry> - <entry>119411</entry> - </row> - - <row> - <entry>2.1-CURRENT's</entry> - <entry>199501, 199503</entry> - </row> - - <row> - <entry>2.0.5-RELEASE</entry> - <entry>199504</entry> - </row> - - <row> - <entry>2.1 以前の 2.2-CURRENT</entry> - <entry>199508</entry> - </row> - - <row> - <entry>2.1.0-RELEASE</entry> - <entry>199511</entry> - </row> - - <row> - <entry>2.1.5 以前の 2.2-CURRENT</entry> - <entry>199512</entry> - </row> - - <row> - <entry>2.1.5-RELEASE</entry> - <entry>199607</entry> - </row> - - <row> - <entry>2.1.6 以前の 2.2-CURRENT</entry> - <entry>199608</entry> - </row> - - <row> - <entry>2.1.6-RELEASE</entry> - <entry>199612</entry> - </row> - - <row> - <entry>2.1.7-RELEASE</entry> - <entry>199612</entry> - </row> - - <row> - <entry>2.2-RELEASE</entry> - <entry>220000</entry> - </row> - - <row> - <entry>2.2.1-RELEASE</entry> - <entry>220000 (2.2-RELEASE と同じです)</entry> - </row> - - <row> - <entry>2.2.1-RELEASE 以後の 2.2-STABLE</entry> - <entry>220000 (これも同じです)</entry> - </row> - - <row> - <entry>texinfo-3.9 以後の 2.2-STABLE</entry> - <entry>221001</entry> - </row> - - <row> - <entry>top 導入以後の 2.2-STABLE</entry> - <entry>221002</entry> - </row> - - <row> - <entry>2.2.2-RELEASE</entry> - <entry>222000</entry> - </row> - - <row> - <entry>2.2.2-RELEASE 以後の 2.2-STABLE</entry> - <entry>222001</entry> - </row> - - <row> - <entry>2.2.5-RELEASE</entry> - <entry>225000</entry> - </row> - - <row> - <entry>2.2.5-RELEASE 以後の 2.2-STABLE</entry> - <entry>225001</entry> - </row> - - <row> - <entry>ldconfig -R 以後の 2.2-STABLE</entry> - <entry>225002</entry> - </row> - - <row> - <entry>2.2.6-RELEASE</entry> - <entry>226000</entry> - </row> - - <row> - <entry>2.2.7-RELEASE</entry> - <entry>227000</entry> - </row> - - <row> - <entry>2.2.7-RELEASE 以後の 2.2-STABLE</entry> - <entry>227001</entry> - </row> - - <row> - <entry>semctl(2) 変更後の 2.2-STABLE</entry> - <entry>227002</entry> - </row> - - <row> - <entry>2.2.8-RELEASE</entry> - <entry>228000</entry> - </row> - - <row> - <entry>2.2.8-RELEASE 以後の 2.2-STABLE</entry> - <entry>228001</entry> - </row> - - <row> - <entry>mount(2) 変更以前の 3.0-CURRENT</entry> - <entry>300000</entry> - </row> - - <row> - <entry>mount(2) 変更以後の 3.0-CURRENT</entry> - <entry>300001</entry> - </row> - - <row> - <entry>semctl(2) 変更以後の 3.0-CURRENT</entry> - <entry>300002</entry> - </row> - - <row> - <entry>ioctl 引数変更後の 3.0-CURRENT</entry> - <entry>300003</entry> - </row> - - <row> - <entry>ELF 移行後の 3.0-CURRENT</entry> - <entry>300004</entry> - </row> - - <row> - <entry>3.0-RELEASE</entry> - <entry>300005</entry> - </row> - - <row> - <entry>3.0-RELEASE 以後の 3.0-CURRENT</entry> - <entry>300006</entry> - </row> - - <row> - <entry>3/4 の分岐後の 3.0-STABLE</entry> - <entry>300007</entry> - </row> - - <row> - <entry>3.1-RELEASE</entry> - <entry>310000</entry> - </row> - - <row> - <entry>3.1-RELEASE 以後の 3.1-STABLE</entry> - <entry>310001</entry> - </row> - - <row> - <entry>3/4 の分岐後の 4.0-CURRENT</entry> - <entry>400000</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </listitem> - </itemizedlist> - - <note> - <para>(2.2-STABLE は, 2.2.5-RELESE 以後, - “2.2.5-STABLE” と呼ばれることがあります.) - 見ての通り, - これは年・月というフォーマットになっていましたが, - バージョン 2.2 から, - より直接的にメジャー/マイナー番号を使う - ように変更になりました. - 並行していくつかのブランチ(枝分かれし - たバージョン)を開発する場合には, - リリースされた日付でそれらの - リリースを分類することが不可能だからです. (あなたが今 port - を作成するときに, 古い -CURRENT 達について心配 - する必要はありません. - これは参考のために挙げられているにすぎま せん.)</para> - </note> - - <para>これまで, 何百ものportが作られてきましたが, - <literal>__FreeBSD__</literal> が正しく使われたのは, - 1つか2つの場合だけでしょう. - 以前のportが誤った場所でそのマクロを使っているからと いって, - それをまねする理由はありません.</para> - </sect3> - - <sect3> - <title><filename>bsd.port.mk</filename> の後に書くこと</title> - - <para><literal>.include <bsd.port.mk></literal> - の行の後には なにも書かないようにしてください. 大抵の場合は - <filename>Makefile</filename> の 中程のどこかで, - <filename>bsd.port.pre.mk</filename> を include して, 最後に - <filename>bsd.port.pre.mk</filename> を include - することによって避けることができます.</para> - - <note> - <para><filename> - pre.mk</filename>/<filename>post.mk</filename> - のペアか <filename>bsd.port.mk</filename> - だけのどちらかだけを include してください. - 2つを混ぜないでください.</para> - </note> - - <para>前者は, いくつかの変数の定義だけ をして, - <filename>Makefile</filename> でのテストに使用し, - 後者は残りを定義します.</para> - - <para> - 以下は <filename>bsd.port.pre.mk</filename> - で定義される重要な変数です. (これは, すべてではありません. - 完全なリストは <filename>bsd.port.mk</filename> - を参照してください.) - </para> - - <informaltable frame="none"> - <tgroup cols="2"> - <thead> - <row> - <entry>変数名</entry> - <entry>解説</entry> - </row> - </thead> - - <tbody> - <row> - <entry><makevar>ARCH</makevar></entry> - <entry><command>uname -m</command> で返される - アーキテクチャ. (例, <literal>i386</literal>). - </entry> - </row> - - <row> - <entry><makevar>OPSYS</makevar></entry> - <entry><command>uname -s</command> で返される - オペレーティングシステム (例, - <literal>FreeBSD</literal>).</entry> - </row> - - <row> - <entry><makevar>OSREL</makevar></entry> - <entry>オペレーティングシステムの - リリースバージョン - (例., <literal>2.1.5</literal>, - <literal>2.2.7</literal>).</entry> - </row> - - <row> - <entry><makevar>OSVERSION</makevar></entry> - <entry>数字形式のオペレーティングシステム - のバージョン, - 上記の <link linkend="porting-versions"><literal> - __FreeBSD_version</literal></link> - と同じです.</entry> - </row> - - <row> - <entry><makevar>PORTOBJFORMAT</makevar></entry> - <entry>システムのオブジェクト - フォーマット (<literal>aout</literal> あるいは - <literal>elf</literal>).</entry> - </row> - - <row> - <entry><makevar>LOCALBASE</makevar></entry> - <entry>“local” ツリーのベース. - (例, <literal>/usr/local/</literal>). - </entry> - </row> - - <row> - <entry><makevar>X11BASE</makevar></entry> - <entry>“X11” ツリーのベース. - (例, <literal>/usr/X11R6/</literal>). - </entry> - </row> - - <row> - <entry><makevar>PREFIX</makevar></entry> - <entry> portsのインストール先 - (<link linkend="porting-prefix"> - <makevar>PREFIX</makevar>について</link>を参照). - </entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <note> - <para><makevar>USE_IMAKE</makevar>, - <makevar>USE_X_PREFIX</makevar> あるいは - <makevar>MASTERDIR</makevar> - などの変数を定義する必要がある場合には, - <filename>bsd.port.pre.mk</filename> を include - する前に定義してください. 他のものは, - <filename>bsd.port.pre.mk</filename> - の前でも後でもかまいません.</para> - </note> - - <para>以下は <filename>bsd.port.pre.mk</filename> - の後に書けるものの例です:</para> - - <programlisting> -# 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</programlisting> - </sect3> - - <sect3> - <title>付加的ドキュメント</title> - - <para>普通のマニュアルや info - ファイルのほかにユーザにとって有用だ - と思えるようなドキュメントがある場合には, - <filename><makevar> PREFIX</makevar>/share/doc</filename> - の下にインストールしてく ださい. これは前記と同様, - <maketarget>post-install</maketarget>ターゲットの - 中からするのがいいでしょう.</para> - - <para>まず, あなたのportのために新しいディレクトリを作りま す. - どのportのドキュメントか簡単にわかるような名前にする必 - 要がありますので, 普通は <makevar>PKGNAME</makevar> - からバージョ ン番号を除いた部分を使うといいでしょう. - もちろん, ユーザが異 - なるバージョンのものを同時に使うことが予想される port の場合 - には, <makevar>PKGNAME</makevar> - をそのまま使ってかまいません.</para> - - <para>ユーザが <filename>/etc/make.conf</filename> - でこの部分を禁止するために <makevar>NOPORTDOCS</makevar> - という変数をセットしている場合には, これらのドキュメントが - インストールされないようにしてください. こんな具合です. - </para> - - <programlisting> -post-install: -.if !defined(NOPORTDOCS) - ${MKDIR}${PREFIX}/share/doc/xv - ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv -.endif</programlisting> - - <para>これらのファイルを <filename>pkg/PLIST</filename> - に入れるのを忘れないよ うにしてください. - (packageが<filename>/etc/make.conf</filename>内の - 変数を読む方法は今のところ存在しませんので, - <makevar>NOPORTDOCS</makevar> - については気にしないでください.)</para> - - <para>インストール時に <filename>pkg/MESSAGE</filename> - ファイルを利用して, メッセージを表示することができます. - 詳細は <link linkend="porting-message">pkg/MESSAGE を使う - </link> の節を参照してください.</para> - - <!-- kuriyama - note below is not exist in Jap ver, but Eng ver has it. why? --> - <note> - <para><filename>MESSAGE</filename> ファイルは - <filename>pkg/PLIST</filename> に加える必要はありま - せん.</para> - </note> - </sect3> - - <sect3> - <title><makevar>DIST_SUBDIR</makevar></title> - - <para><filename>/usr/ports/distfiles</filename> - ディレクトリ内をあまり散らかさ ないようにしてください. - たくさんのファイルを取ってくるport や, - 数は少なくてもほかのportのファイルと混同されるおそれが - あるファイル (<filename>Makefile</filename> など) - がある場合には, <makevar>DIST_SUBDIR</makevar> に port - の名前 (<makevar>PKGNAME</makevar> - からバージョン番号を取った部分を 使うといいでしょう) - を入れてください. すると, - <makevar>DISTDIR</makevar>がデフォルトの - <filename>/usr/ports/distfiles</filename> から <filename> - /usr/ports/distfiles/<makevar>DIST_SUBDIR</makevar> - </filename>に変更され, - 取ってきたファイルはすべてそのサブディレクトリの中に置か - れるようになります.</para> - - <para>また, - ファイルを取ってくるときにバックアップサイトとして使わ れる - <filename>ftp.freebsd.org</filename> - のディレクトリ名にもこの変数の 値が使われます. - (<makevar>DISTDIR</makevar>を明示的に指定し た場合には, - ローカルのファイルを置くところは変わりますが, こ - のサイトのディレクトリ名は変わりませんので, 必ず - <makevar>DIST_SUBDIR</makevar>を使うようにしてください.)</para> - - <note> - <para>この変数はMakefile中で明示的に指定された - <makevar>MASTER_SITES</makevar> - には影響しないことに注意して ください.</para> - </note> - </sect3> - - <sect3> - <title>RCS文字列</title> - - <para>RCS - が特別な意味を与えている文字列をパッチ内に入れないように - してください. - ファイルを私たちのソースツリーに入れる時にこれら - の文字列はCVSによって書き換えられてしまい, あとでまたパッチ - を使おうとした時にうまくいかないことがあります. RCS文字列は - ドル記号 (<literal>$</literal>) で囲まれており, - <literal>$Id</literal> や <literal>$RCS</literal> - などで始まり ます.</para> - </sect3> - - <sect3> - <title>パッチ作成上の注意</title> - - <para><command>diff</command>の再帰 (<option>-r</option>) - フラグを使って再帰的なパッ チを作るのは大変結構なのですが, - でき上がったパッチは必ず目で - チェックして余計なゴミが入っていないことを確認してくださ い. - よくあるのはバックアップファイル同士の変更点, あるいは - <command>Imake</command> や GNU <command>configure</command> - を使うソフトウェアの <filename>Makefile</filename> - の変更点が入っている場合などです. また, - <filename>configure.in</filename> を編集して, - <command>autoconf</command> を使って - <command>configure</command> を作り直す ときには, - <command>configure</command> の diff は含めずに (それらは, - 数千行になることもしばしばです), - <literal>USE_AUTOCONF=yes</literal> を定義して, - <filename>configure.in</filename> の diff - をとってください.</para> - - <para>ファイルをまるごと消す場合にはパッチを使わずに - <maketarget>post-extract</maketarget> - ターゲットで消す方が簡単です. できあがった 差分に満足したら, - それらをソースのファイルごとに別々の - パッチファイルに分割してください.</para> - </sect3> - - <sect3 id="porting-prefix"> - <title><makevar>PREFIX</makevar></title> - - <para>なるべく port は <makevar>PREFIX</makevar> - に対する相対パス - にインストールすることができるように心がけてください. - (この変数の値は <makevar>USE_X_PREFIX</makevar>か - <makevar>USE_IMAKE</makevar>が指定してある時には - <makevar>X11BASE</makevar> - (デフォルト<filename>/usr/X11R6</filename>), - そうでない場合には<makevar>LOCALBASE</makevar> - (デフォルト<filename>/usr/local</filename>) - にセットされます.)</para> - - <para>サイトによってフリーソフトウェアが - インストールされる場所が 違いますので, ソース内で - <filename>/usr/local</filename> や - <filename>/usr/X11R6</filename> - を明示的に書かないようにしてください. X のプログラムで - <command>imake</command> を使うものについては, これは問題に - はなりません. それ以外の場合には, ソース中のMakefileやスク - <!-- kuriyama - imake is command --> リプトで - <filename>/usr/local</filename> (imakeを使わないXのプログラ - ムは <filename>/usr/X11R6</filename>) と書いてあるところを - <makevar>PREFIX</makevar> に書き換えてください. この値は - portのコンパイル, - およびインストール時に自動的に環境変数として - 下位makeに渡されます.</para> - - <para><makevar>USE_X_PREFIX</makevar>は本当に必要な時 (つまり, - X のライブラリなどとリンクしたり, <makevar>X11BASE</makevar> - 以下にある ファイルを参照したりする必要がある時) - 以外には設定しないでください.</para> - - <para>変数 <makevar>PREFIX</makevar> の値は port の Makefile - やユーザの環境で変更することもできます. しかし, 個々の port - が Makefile - でこの変数の値を明示的に設定することはなるべくしない - でください.</para> - - <para>また, 他の port - からインストールされるプログラムやファイル - を指定するときには, 上で述べた変数を使用してください. - 例えば, <command>less</command> のフルパスを - <literal>PAGER</literal> というマクロに入れた い場合は, - コンパイラに - <literal>-DPAGER=\"/usr/local/bin/less\"</literal> - と渡すかわりに <programlisting> - -DPAGER=\"${PREFIX}/bin/less\"</programlisting> - (Xを使うportの時は <programlisting> - -DPAGER=\"${LOCALBASE}/bin/less\"</programlisting> ) - を渡し てください. こうしておけば, `/usr/local' - がまるごとどこか他 の場所に移してあるサイトでも, - あなたのportがそのまま使える 可能性が高くなります.</para> - </sect3> - - <sect3> - <title>ディレクトリ構成</title> - - <para>インストール時には <makevar>PREFIX</makevar> - の正しいサブディ - レクトリにファイルを置くように心がけてください. ソフトウェア - によっては新しいディレクトリを - 一つ作ってファイルを全部それに 入れてしまうものがありますが, - それはよくありません. また, バ イナリ, - ヘッダファイルとマニュアル以外のすべてを - <filename>lib</filename> - というディレクトリに入れてしまうportもあります が, - これもBSD的なファイルシステム構成からいうと正しくありま - せん. これは以下のように分散すべきです. - <filename>etc</filename> にセッ - トアップ/コンフィグレーションファイル, - <filename>libexec</filename> に 内部で使用されるプログラム - (コマンドラインから呼ばれることの ないコマンド), - <filename>sbin</filename> に管理者用のコマンド, - <filename>info</filename> に GNU Info 用のドキュメント, - そして <filename>share</filename> - にアーキテクチャに依存しないファイルが入り ます. - 詳細については man &man.hier.7; を見てくださ い. - <filename>/usr</filename>の構成方針はほとんどそのまま - <filename>/usr/local</filename>にもあてはまります. USENET - “ニュース”を 扱う ports は例外です. これらは, - ファイルのインストール先として - <filename><makevar>PREFIX</makevar>/news</filename> - を使用します.</para> - </sect3> - - <sect3 id="porting-cleaning"> - <title>空のディレクトリの除去</title> - - <para>ports は デインストール(削除) の際には, - 自分自身を消去したあとに, (ディレクトリの) - 除去をするようにしてください. これは, 大抵の場合 - <literal>@dirrm</literal> の行を ports - が作成するすべてのディレクトリについて - 加えることによって実現できます. 親ディレクトリは, - 子ディレクトリを先に消さないと - 消せないことに気をつけて下さい.</para> - - <programlisting> - : -lib/X11/oneko/pixmaps/cat.xpm -lib/X11/oneko/sounds/cat.au - : -@dirrm lib/X11/oneko/pixmals -@dirrm lib/X11/oneko/sounds -@dirrm lib/X11/oneko</programlisting> - - <para>といった感じです.</para> - - <para>しかし, ときとして, 他の port - をディレクトリを共有しているために <literal>@dirrm</literal> - がエラーを返すことがあります. <command>rmdir</command> を - <literal>@unexec</literal> から呼びだすことによって, - 警告(warning)なしで - 空のディレクトリのみを削除することができます: - </para> - - <programlisting> -@unexec rmdir %D/share/doc/gimp 2>/dev/null || true</programlisting> - - <para> - これを使えば, たとえ, 他の port がファイルを - インストールしていて, <filename><makevar> - PREFIX</makevar>/share/doc/gimp</filename> - が空でない場合でも エラーメッセージは表示されませんし, - <command>pkg_delete</command> - が異常終了することもありません.</para> - </sect3> - - <sect3> - <title>UID</title> - - <para>もしあなたの - portがインストールされるシステム上に特定のユー - ザを必要とする場合は, <filename>pkg/INSTALL</filename> - スクリプトから <command>pw</command> - コマンドを実行して自動的にそのユーザを追加するよ - うにしてください. <filename>net/cvsup-mirror</filename> の - portが参考になるでしょう.</para> - - <para>もしあなたの port が, バイナリのパッケージとしてとして - インストールされるときにも, - コンパイルされたときと同じユーザー/グループ ID - を使わなければならないのなら, 50 から 99 の間で空いている - UID を選んで登録してください. - <filename>japanese/Wnn</filename> の port - が参考になるでしょう.</para> - - <para>既にシステムや他の portで利用されている - UIDを使わないように 十分注意してください. 現在の 50から - 99までの間の UIDは以下の とおりです.</para> - - <programlisting> -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</programlisting> - - <para>このリストを最新の状態に保つためにも, - この範囲の UID や GID を予約するような port を作ったり, - 既存の port にそのような改変を行って我々に送るときには, - UID の予約に関する注意書きをつけてください.</para> - </sect3> - - <sect3> - <title>合理的な port</title> - - <para><filename>Makefile</filename> - は単純かつ適切であるべきです. もし, - <filename>Makefile</filename> を数行短かくできたり, - もっと読みやすくできるのであれば, そうしてください. 例えば, - shell の <literal>if</literal> 構文を使う代りに, make の - <literal>.if</literal> 構文を使う, - <makevar>EXTRACT*</makevar> の再定義で代用できるのであれば, - <maketarget>do-extract</maketarget> を再定義しない, - <literal>CONFIGURE_ARGS += - --prefix=${PREFIX}</literal> とするかわりに, - <makevar>GNU_CONFIGURE</makevar> とする, などです.</para> - </sect3> - - <sect3> - <title><makevar>CFLAGS</makevar> の尊重</title> - - <para><makevar>CFLAGS</makevar> 変数は尊重すべきです. その - port がこれを無視するのであれば, - <literal>NO_PACKAGE=ignores cflags</literal> を - <filename>Makefile</filename> に加えてください.</para> - </sect3> - - <sect3> - <title>コンフィグレーション(設定)ファイル</title> - - <para>もしあなたの port が設定ファイルを - <filename><makevar>PREFIX</makevar>/etc</filename> - に置く必要がある場合には, それを単純にインストールしたり, - <filename>pkg/PLIST</filename> - に加えては<emphasis>いけません</emphasis>. こうしてしまうと, - <command>pkg_delete</command> が - ユーザが苦労して作ったファイルを消してしまったり, 新しく - インストールすると上書きされてしまったりします.</para> - - <para>代りに, 見本となるファイルを suffix ( - <filename><replaceable> - filename</replaceable>.sample</filename> が良いでしょう) - を付けて インストールして, <link linkend="porting-message"> - message</link> を表示して, ソフトウエアを動かす前に, - ユーザがそのファイル - をコピーして編集をしなければならないことを知らせましょう. - </para> - </sect3> - - <sect3> - <title>Portlint</title> - - <para>送付や commit をする前に <link - linkend="porting-portlint"><command>portlint</command></link> - を使ってチェックしましょう.</para> - </sect3> - - <sect3> - <title>フィードバック</title> - - <para>Portを作るためにソフトウェアに変更を加えたら, - なるべく原作者にその旨を伝えてパッチ等を送ってください. - これらが次のリリースに取り入れられれば, - アップグレードが楽になります.</para> - </sect3> - - <sect3> - <title>その他諸々</title> - - <para><filename>pkg/DESCR</filename>, - <filename>pkg/COMMENT</filename>, - <filename>pkg/PLIST</filename> などのファイルは, - それぞれ2重にチェックしてください. - 再検討してもっと良い記述があれば, - それに置きかえてください.</para> - - <para>GNU General Public License - (GNU一般公有使用許諾)のコピーは - (すでにあるので)コピーしないでください, - おねがいします.</para> - - <para>法律に関することには, 十分注意をはらってください. - 私達に法律に反するような形でソフトフェアの配布をさせない - でください!</para> - </sect3> - - <sect3> - <title>困ったら....</title> - - <para>私たちに質問を送る前に, - 既存のportの例と<filename>bsd.port.mk</filename>を - ちゃんと読んでください! <!-- smiley - --><emphasis>;)</emphasis></para> - - <para>それでもわからないことがあったら, - 一人で悩まないでどんどん 質問してください! <!-- smiley - --><emphasis>:)</emphasis></para> - </sect3> - </sect2> - - <sect2 id="porting-samplem"> - <title><filename>Makefile</filename> のお手本</title> - - <para>これはportの <filename>Makefile</filename> - を作る際のお手本です. かぎかっこ - ([])内のコメントは忘れずに取ってください.</para> - - <para>変数の順番, 段落の間の空行など, - <filename>Makefile</filename> を作るときはなるべくこ - の形式にしたがってください. - この形式は重要な情報が簡単に見つけられるように - 設計されています. <link - linkend="porting-portlint">portlint</link> を使って - <filename>Makefile</filename> をチェックすることが - 推奨されています.</para> - - <programlisting> -[ヘッダ -- どのようなportのMakefileかすぐにわかるようになっています] -# New ports collection makefile for: xdvi -# Version required: pl18 ["1.5alpha" みたいなのでも結構です] -[この Makefile の最初の版が作成された日付です. この port をアップグ - レードするときには変えないでください.] -# Date created: 26 May 1995 -[このソフトウェアを最初に FreeBSD に port した人の名前, つまり, - この Makefile の最初の版を書いた人です. この port をアップグレー - ドするとき, この行も変えないでください.] -# Whom: Satoshi Asami <asami@FreeBSD.ORG> -# -# $Id$ -[ ^^^^ この部分は, CVS ツリーに入れる時に自動的に RCS の ID 文字列に - 置き換えられます.] -# - -[Port自体, およびオリジナルのソースを取ってくるところを記述する部分. - 最初は必ずDISTNAME, そして必要ならPKGNAME, CATEGORIES, 続いて - MASTER_SITESがおかれ, さらに MASTER_SITE_SUBDIR がおかれることもあり - ます. そのあと, EXTRACT_SUFX か DISTFILES を指定することも可能です] -DISTNAME= xdvi -PKGNAME= xdvi-pl18 -CATEGORIES= print -[MASTER_SITE_* マクロを使用しない場合は, -最後のスラッシュを忘れないように ("/")!] -MASTER_SITES= ${MASTER_SITE_XCONTRIB} -MASTER_SITE_SUBDIR= applications -[ソースファイルが標準の ".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></programlisting> - </sect2> - - <sect2 id="porting-pkgname"> - <title>Packageの名前</title> - - <para>Package の名前は以下のルールにしたがってつけてください. こ - れは package のディレクトリを見やすくするためで, 無秩序な名前 - がたくさん並んでいるとユーザが使いづらくなるのでは - という心配か らです. - (FTPサイトなどにはたくさんpackageがありますからね.)</para> - - <para>Packageの名前は以下のようにしてください. - <filename><replaceable> - 言語-</replaceable>名前<replaceable>-オプション - </replaceable><replaceable>バージョン.番号 - </replaceable></filename></para> - - <para><makevar>DISTNAME</makevar> - が上記の形式になっていない場合に は, - <makevar>PKGNAME</makevar> をそのようにしてください.</para> - - <orderedlist> - <listitem> - <para>FreeBSD - はユーザの慣れ親しんだ言語のサポートに力を入れて います. - 特定の言語のためのportのpackage名には - <replaceable>言語-</replaceable> に ISO-639 - で定義されている言語名の略称を入れ てください. 例えば, - 日本語なら <literal>ja</literal>, ロシア語なら - <literal>ru</literal>, ベト ナム語なら - <literal>vi</literal>, 中国語なら <literal>zh</literal>, - 韓国語ならば <literal>ko</literal>, ドイツ 語なら - <literal>de</literal>, といった具合です.</para> - </listitem> - - <listitem> - <para><filename>名前</filename> - の部分は原則的にはすべて英小文字 を使います. - 例外はたくさんのプログラムが入っている巨大なport の場合で, - XFree86 (ほんとにあるんですよ) やImageMagickな - どがこれにあたります. そうでない場合には, - 名前の大文字を小文 字に (少なくとも最初の一字だけは) - 変えてください. もし, 大文字であることが重要な場合(例えば, - 1文字の名前, <literal>R</literal> とか - <literal>V</literal>)には, - あなたの裁量で大文字を使うのも良いでしょう. Perl 5 - のモジュールでは, 頭に <literal>p5-</literal> を付け, - 2重コロン (<literal>::</literal>) のセパレータをハイフン( - <literal>-</literal> ) に置きかえるしきたりになっています. - 例えば, <literal>Data::Dumper</literal> は - <literal>p5-Data-Dumper</literal> になります. また, その - ソフトウェアの名前として通常使われるものに番号, ハイフン, - あ るいは下線が入っている場合には, - それらを使うことも構いません (<literal>kinput2</literal> - など).</para> - </listitem> - - <listitem> - <para>コンパイル時に環境変数や <command>make</command> - の引数などで <link linkend="porting-masterdir"> - ハードコードされたデフォルト </link> - を変えてコンパイルできる場合, - <replaceable>-compiled.specifics</replaceable> - にそのコンパイル時のデフォルトを入れてください - (ハイフンはあってもなくてもかまいません). 用紙のサイズ, - あるいはフォントの解像度などがこれにあたります.</para> - </listitem> - - <listitem> - <para>バージョン番号は数字とアルファベットからなり, ピリオド - (.) で区切ります. - アルファベットは二文字以上続けてはいけませ ん. - ただ一つの例外は「パッチレベル」を意味する - <literal>pl</literal> で, それ 以外にバージョン番号が - まったくついていない場合にのみ使うことがで きます.</para> - </listitem> - </orderedlist> - - <para>では, <makevar>DISTNAME</makevar>を正しい - <makevar>PKGNAME</makevar>に直す例を見てみましょう:</para> - - <informaltable frame="none"> - <tgroup cols="3"> - <thead> - <row> - <entry>DISTNAME</entry> - <entry>PKGNAME</entry> - <entry>理由</entry> - </row> - </thead> - - <tbody> - <row> - <entry>mule-2.2.2.</entry> - <entry>mule-2.2.2</entry> - <entry>まったく問題なし</entry> - </row> - - <row> - <entry>XFree86-3.1.2</entry> - <entry>XFree86-3.1.2</entry> - <entry>同上</entry> - </row> - - <row> - <entry>EmiClock-1.0.2</entry> - <entry>emiclock-1.0.2</entry> - <entry>プログラム一つだけの時は小文字のみ</entry> - </row> - - <row> - <entry>gmod1.4</entry> - <entry>gmod-1.4</entry> - <!-- kuriyama - need to be fixed --> - <entry>`<名前>' のあとにハイフンが必要</entry> - </row> - - <row> - <entry>xmris.4.0.2</entry> - <entry>xmris-4.0.2</entry> - <entry>同上</entry> - </row> - - <row> - <entry>rdist-1.3alpha</entry> - <entry>rdist-1.3a</entry> - <entry><literal>alpha</literal>のような文字列は使えない - </entry> - </row> - - <row> - <entry>es-0.9-beta1</entry> - <entry>es-0.9b1</entry> - <entry>同上</entry> - </row> - - <row> - <entry>v3.3beta021.src</entry> - <entry>tiff-3.3</entry> - <entry>なんなんでしょう ;)</entry> - </row> - - <row> - <entry>tvtwm</entry> - <entry>tvtwm-pl11</entry> - <entry>バージョン番号は必ず必要</entry> - </row> - - <row> - <entry>piewm</entry> - <entry>piewm-1.0</entry> - <entry>同上</entry> - </row> - - <row> - <entry>xvgr-2.10pl1</entry> - <entry>xvgr-2.10.1</entry> - <entry><literal>pl</literal> - が使えるのは他にバージョン番号がない場合のみ</entry> - </row> - - <row> - <entry>gawk-2.15.6</entry> - <entry>ja-gawk-2.15.6</entry> - <entry>日本語バージョン</entry> - </row> - - <row> - <entry>psutils-1.13</entry> - <entry>psutils-letter-1.13</entry> - <entry>コンパイル時に用紙のサイズを指定</entry> - </row> - - <row> - <entry>pkfonts</entry> - <entry>pkfonts300-1.0</entry> - <entry>300dpiフォント用のpackage</entry> - </row> - </tbody> - </tgroup> - </informaltable> - - <para>オリジナルのソースにまったくバージョン情報が見当たらず, - また原作 - 者が新しいバージョンをリリースする可能性が低いときには, - バージョ ン番号として <literal>1.0</literal> - を使えばいいでしょう (上記のpiewmの例がこ れにあたります). - そうでない場合には, 原作者に聞くか, 日付 - (<literal><replaceable> - 年</replaceable>.<replaceable>月</replaceable> - .<replaceable>日</replaceable></literal>) - を使うなどしてください.</para> - </sect2> - - <sect2 id="porting-categories"> - <title>カテゴリ</title> - - <para>すでに御存知のように, ports はいくつかのカテゴリに - 分類されています. これを有効に利用するためには, port を - 行う人々とユーザが, そろぞれのカテゴリが何であるか, - どのようにしてカテゴリに分類するかを理解する必要が - あります.</para> - - <sect3> - <title>現在のカテゴリのリスト</title> - - <para>まず, これが現在の port のカテゴリーのリストです. - アスタリスク(<literal>*</literal>) が付いているものは, - バーチャル(<emphasis>virtual</emphasis>) カテゴリです -- - これらには対応するサブディレクトリが port - ツリーにはありません.</para> - <!-- kuriyama - don't use " - - " as literal --> - - <note> - <para>バーチャルカテゴリでないものは, - そのサブディレクトリ内の <filename>pkg/COMMENT</filename> - に1行の記述があります (例, - <filename>archivers/pkg/COMMENT</filename>).</para> - </note> - - <informaltable frame="none"> - <tgroup cols="2"> - <thead> - <row> - <entry>Category</entry> - <entry>Description</entry> - </row> - </thead> - - <tbody> - <row> - <entry><filename>afterstep*</filename></entry> - <entry>Ports to support AfterStep window manager</entry> - </row> - - <row> - <entry><filename>archivers</filename></entry> - <entry>Archiving tools.</entry> - </row> - - <row> - <entry><filename>astro</filename></entry> - <entry>Astronomical ports.</entry> - </row> - - <row> - <entry><filename>audio</filename></entry> - <entry>Sound support.</entry> - </row> - - <row> - <entry><filename>benchmarks</filename></entry> - <entry>Benchmarking utilities.</entry> - </row> - - <row> - <entry><filename>biology</filename></entry> - <entry>Biology-related software.</entry> - </row> - - <row> - <entry><filename>cad</filename></entry> - <entry>Computer aided design tools.</entry> - </row> - - <row> - <entry><filename>chinese</filename></entry> - <entry>Chinese language support.</entry> - </row> - - <row> - <entry><filename>comms</filename></entry> - <entry>Communication software. Mostly software to talk to - your serial port.</entry> - </row> - - <row> - <entry><filename>converters</filename></entry> - <entry>Character code converters.</entry> - </row> - - <row> - <entry><filename>databases</filename></entry> - <entry>Databases.</entry> - </row> - - <row> - <entry><filename>deskutils</filename></entry> - <entry>Things that used to be on the desktop before - computers were invented.</entry> - </row> - - <row> - <entry><filename>devel</filename></entry> - <entry>Development utilities. Do not put libraries here just - because they are libraries—unless they truly don't - belong to anywhere else, they shouldn't be in this - category.</entry> - </row> - - <row> - <entry><filename>editors</filename></entry> - <entry>General editors. Specialized editors go in the - section for those tools (e.g., a mathematical-formula - editor will go in <filename>math</filename>).</entry> - </row> - - <row> - <entry><filename>elisp</filename></entry> - <entry>Emacs-lisp ports.</entry> - </row> - - <row> - <entry><filename>emulators</filename></entry> - <entry>Emulators for other operating systems. Terminal - emulators do <emphasis>not</emphasis> belong - here—X-based ones should go to - <filename>x11</filename> and text-based ones to either - <filename>comms</filename> or <filename>misc</filename>, - depending on the exact functionality.</entry> - </row> - - <row> - <entry><filename>games</filename></entry> - <entry>Games.</entry> - </row> - - <row> - <entry><filename>german</filename></entry> - <entry>German language support.</entry> - </row> - - <row> - <entry><filename>graphics</filename></entry> - <entry>Graphics utilities.</entry> - </row> - - <row> - <entry><filename>japanese</filename></entry> - <entry>Japanese language support.</entry> - </row> - - <row> - <entry><filename>kde*</filename></entry> - <entry>Ports that form the K Desktop Environment - (kde).</entry> - </row> - - <row> - <entry><filename>korean</filename></entry> - <entry>Korean language support.</entry> - </row> - - <row> - <entry><filename>lang</filename></entry> - <entry>Programming languages.</entry> - </row> - - <row> - <entry><filename>mail</filename></entry> - <entry>Mail software.</entry> - </row> - - <row> - <entry><filename>math</filename></entry> - <entry>Numerical computation software and other utilities - for mathematics.</entry> - </row> - - <row> - <entry><filename>mbone</filename></entry> - <entry>MBone applications.</entry> - </row> - - <row> - <entry><filename>misc</filename></entry> - <entry>Miscellaneous utilities—basically things that - doesn't belong to anywhere else. This is the only category - that should not appear with any other non-virtual - category. If you have <literal>misc</literal> with - something else in your <makevar>CATEGORIES</makevar> line, - that means you can safely delete <literal>misc</literal> - and just put the port in that other subdirectory!</entry> - </row> - - <row> - <entry><filename>net</filename></entry> - <entry>Miscellaneous networking software.</entry> - </row> - - <row> - <entry><filename>news</filename></entry> - <entry>USENET news software.</entry> - </row> - - <row> - <entry><filename>offix*</filename></entry> - <entry>Ports from the OffiX suite.</entry> - </row> - - <row> - <entry><filename>palm</filename></entry> - <entry>Software support for the 3Com Palm(tm) series.</entry> - </row> - - <row> - <entry><filename>perl5*</filename></entry> - <entry>Ports that require perl version 5 to run.</entry> - </row> - - <row> - <entry><filename>plan9*</filename></entry> - <entry>Various programs from Plan9.</entry> - </row> - - <row> - <entry><filename>print</filename></entry> - <entry>Printing software. Desktop publishing tools - (previewers, etc.) belong here too.</entry> - </row> - - <row> - <entry><filename>python*</filename></entry> - <entry>Software written in python.</entry> - </row> - - <row> - <entry><filename>russian</filename></entry> - <entry>Russian language support.</entry> - </row> - - <row> - <entry><filename>security</filename></entry> - <entry>Security utilities.</entry> - </row> - - <row> - <entry><filename>shells</filename></entry> - <entry>Command line shells.</entry> - </row> - - <row> - <entry><filename>sysutils</filename></entry> - <entry>System utilities.</entry> - </row> - - <row> - <entry><filename>tcl75*</filename></entry> - <entry>Ports that use tcl version 7.5 to run.</entry> - </row> - - <row> - <entry><filename>tcl76*</filename></entry> - <entry>Ports that use tcl version 7.6 to run.</entry> - </row> - - <row> - <entry><filename>tcl80*</filename></entry> - <entry>Ports that use tcl version 8.0 to run.</entry> - </row> - - <row> - <entry><filename>tcl81*</filename></entry> - <entry>Ports that use tcl version 8.1 to run.</entry> - </row> - - <row> - <entry><filename>textproc</filename></entry> - <entry>Text processing utilities. It does not include - desktop publishing tools, which go to print/.</entry> - </row> - - <row> - <entry><filename>tk41*</filename></entry> - <entry>Ports that use tk version 4.1 to run.</entry> - </row> - - <row> - <entry><filename>tk42*</filename></entry> - <entry>Ports that use tk version 4.2 to run.</entry> - </row> - - <row> - <entry><filename>tk80*</filename></entry> - <entry>Ports that use tk version 8.0 to run.</entry> - </row> - - <row> - <entry><filename>tk81*</filename></entry> - <entry>Ports that use tk version 8.1 to run.</entry> - </row> - - <row> - <entry><filename>vietnamese</filename></entry> - <entry>Vietnamese language support.</entry> - </row> - - <row> - <entry><filename>windowmaker*</filename></entry> - <entry>Ports to support the WindowMaker window - manager</entry> - </row> - - <row> - <entry><filename>www</filename></entry> - <entry>Software related to the World Wide Web. HTML language - support belong here too.</entry> - </row> - - <row> - <entry>x11</entry> - <entry>The X window system and friends. This category is - only for software that directly support the window system. - Do not put regular X applications here. If your port is - an X application, define <makevar>USE_XLIB</makevar> - (implied by <makevar>USE_IMAKE</makevar>) and put it in - appropriate categories. Also, many of them go into other - <filename>x11-*</filename> categories (see below).</entry> - </row> - - <row> - <entry><filename>x11-clocks</filename></entry> - <entry>X11 clocks.</entry> - </row> - - <row> - <entry><filename>x11-fm</filename></entry> - <entry>X11 file managers.</entry> - </row> - - <row> - <entry><filename>x11-fonts</filename></entry> - <entry>X11 fonts and font utilities.</entry> - </row> - - <row> - <entry><filename>x11-toolkits</filename></entry> - <entry>X11 toolkits.</entry> - </row> - - <row> - <entry><filename>x11-wm</filename></entry> - <entry>X11 window managers.</entry> - </row> - </tbody> - </tgroup> - </informaltable> - </sect3> - - <sect3> - <title>適切なカテゴリの選択</title> - - <para>多くのカテゴリに重なるので, どれを '第一' - カテゴリにするかを決めなければならないことが - たびたびあるでしょう. これを - うまく決めるルールがいくつかあります. - 以下はその優先順のリストで, 優先度の高いものから - 低いものの順に書いてあります.</para> - - <itemizedlist> - <listitem> - <para>言語特有のカテゴリがまず最初です. 例えば日本語の - X11 のフォントをインストールする port の場合, - <makevar>CATEGORIES</makevar> 行は <literal>japanese - x11-fonts</literal> となるでしょう.</para> - <!-- kuriyama - Eng. ver has x11 category. why? --> - </listitem> - - <listitem> - <para>より特徴的なカテゴリが, 一般的なカテゴリより - 優先されます. 例えば, HTML エディタの場合は <literal>www - editors</literal> となり, 逆順にはしないでください. - また, port が <literal>mail</literal>, - <literal>mbone</literal>, <literal>news</literal>, - <literal>security</literal>, <literal>www</literal> - のいづれかに属するとには, <literal>net</literal> - は必要ありません.</para> - </listitem> - - <listitem> - <para><literal>x11</literal> を第2カテゴリにするのは, - 第1カテゴリが自然言語の場合のみにしてください. 特に X - のアプリケーションには <literal>x11</literal> - を指定<emphasis>しない</emphasis>でください.</para> - </listitem> - - <listitem> - <para>もし, あなたの port が他のどのカテゴリにも - 属しないばあいには, <literal>misc</literal> - にしてください.</para> - </listitem> - </itemizedlist> - - <para>もし, あなたがカテゴリについて自信が持てない場合には, - そのことを <command>send-pr</command> するときに - 書き加えてください. そうすれば import するまえに - それについて議論できます. (もしあなたが commiter であれば, - そのことを &a.ports に送って, 先に議論 - するようにしてください — 新しい port - が間違ったカテゴリに import されて, - すぐ移動されることが多いので.)</para> - </sect3> - </sect2> - - <sect2> - <title>このドキュメントと ports システムの変更</title> - - <para>もしあなたが, たくさんの ports の保守を - しているのであれば, &a.ports メーリングリストの内容を - フォロウすることを考えてください. Ports - のしくみについての重要な変更点はここに アナウンスされます. - 最新の変更点については, いつでも, <ulink - url="http://www.FreeBSD.ORG/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk"> the bsd.port.mk CVS log</ulink> で詳細な情報を得ることができます.</para> - <!-- kuriyama - the はまずいだろ --> - </sect2> - - <sect2> - <title>やっとおしまい!</title> - - <para>いやはや, 長い文章ですみません. - ここまで読んでくださった方に は感謝, 感謝でございます. <!-- - smiley --><emphasis>(_ _)</emphasis></para> - - <para>さあ, portの作り方がわかったところで, - 世界中のソフトウェア をport化しましょう. - FreeBSDプロジェクトに貢献するには, それ - がもっとも簡単な方法です! <emphasis - remap=tt>:)</emphasis></para> - </sect2> - </sect1> -</chapter> - -<!-- - Local Variables: - mode: sgml - sgml-declaration: "../chapter.decl" - sgml-indent-data: t - sgml-omittag: nil - sgml-always-quote-attributes: t - sgml-parent-document: ("../handbook.sgml" "part" "chapter") - End: ---> |