FreeBSD ハンドブック : アプリケーションのインストール : ports コレクション : 自分で port を作る : 特別な配慮
Previous: Makefileの作成
Next: pkg サブディレクトリ

4.7.4. 特別な配慮

Portを作成する場合, 考慮しなくてはいけないことがさらにいくつか あります. この節では, それらのうちもっともありがちなものに ついて説明します.

4.7.4.1. ldconfig

共有ライブラリをインストールするときには, 共有ライブラリのキャッ シュを更新するためにportのMakefileのpost-install target から`${LDCONFIG} -m' を走らせてください. このコマンドの引数は共有ライブラリのインストールしてあるディ レクトリ (通常 ${PREFIX}/lib) です.

また, pkg/PLISTに@exec /sbin/ldconfig -m '/`@unexec /sbin/ldconfig -R' の組を入れて, package をインストールした場合にも共有ライブラリがすぐ使え, 削除の際 にも, システムがまだライブラリが存在すると誤認しないようにし てください. この行は共有ライブラリを指定する行のすぐ後に書く のがよいでしょう:

lib/libtcl80.so.1
@exec /sbin/ldconfig -m %D/lib
@unexec /sbin/ldconfig -R

絶対に引数なしでただ `ldconfig'とだけ書い てある行をMakefileやpkg/PLISTファイルに入れないでください. このコマンドを実行すると, 共有ライブラリのキャッシュが /usr/libの内容のみとなり, ユーザのマシンにさまざま な問題をもたらします (「ぎゃぁ! このportをインストールした らxinitが使えなくなっちゃった!」). この掟を破った者は, 永久 に地獄の底で苦しみ続けるように, 閻魔様に頼んでおきます.

4.7.4.2. ELF 対応

FreeBSD は 3.0-release 以後, ELF に移行しますので, シェアードライブラリを作成するたくさんの port を ELF 対応 にする必要があります. 3.0 システムは ELF も a.out も 実行できますし, 2.2 ブランチからのもう一つのリリース (2.2.8) もあるので, 複雑な状況です. 以下は a.out のみに対応している port をどのように a.out と ELF 両方に対応させるかのガイドライ ンです.

このリストの一部は, 移行時にしかあてはまらないものもあります が, 古い port をアップグレードしたい場合に参考になるように, しばらくのあいだは残しておきます.

a.out ライブラリの退避

a.out ライブラリは, /usr/local/lib から, `aout' サブディレクトリ に移動しなくはなりません. (もし移動しないと, ELF ports がそれらをあっさり上書きして しまいます.) current の src/Makefile にある `move-aout-libs' ターゲット (`aout-to-elf' から呼ば れます) がその移動をしてくれます. a.out ライブラリを 移動するだけなので, ELF と a.out の両方のライブラリが標準的な ディレクトリにあるシステムでは, このターゲットを実行しても安全 です.

フォーマット

port ツリーは package をそのマシンのフォーマットで作成しま す. つまり, 2.2 では a.out, また 3.0 では `objformat` の結果によって, a.out か ELF になります. また, いったん a.out ライブラリをサブディレクトリに移動すると a.out ライブラリの作成はサポートされません. (つまり, あなたがな にをすれば良いのかを理解しているのならば, うまく作成できるかもし れませんが, 自力でやらなければならないということです)

注: もし port が aout でしか動作しないのなら, BROKEN_ELF に原因を説明する文字列を設定してください. この変数が設定された port は, ELF システム上でのビルドの際スキップされます.

PORTOBJFORMAT

bsd.port.mk において PORTOBJFORMAT は `aout' か `elf' に設定され, 環境変数 CONFIGURE_ENV, SCRIPTS_ENV, MAKE_ENV の中で export されます. (-stableでは常に `aout' になり ます). また, `PORTOBJFORMAT=${PORTOBJFORMAT}' とし て PLIST_SUB に渡されます. (以下にある ldconfig に 関するコメントを参照して下さい.)

この変数は, 以下のようにして bsd.port.mk 中で設定され ます.

PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat ||
echo aout

この変数を使って, port の make の過程で何をすべきかを決定す べきですが, もし port の configure スクリプトが元々, ELF システムを自動的に検出するのであれば, PORTOBJFORMAT を 参照する必要はありません.

共有ライブラリの作成

以下は, a.out と ELF での共有ライブラリの扱いの違いです.

共有ライブラリのバージョン

ELF の共有ライブラリ は, "libfoo.so.M" という名前になっていなければなりませ ん. ここで M は単一のバージョン番号を表します. 一方 a.out のライブラリは "libfoo.so.M.N" という名前で, M はメジャーバージョン番号, N はマイナーバージョン 番号になっている必要があります. これらを混同しないでください. "libfoo.so.N.M" という名のELF 共有ライブラリや "libfoo.so.N" という名の a.out 共有ライブラリ(あるいは シンボリックリンク) は 絶対にinstallしないでください.

リンカコマンドライン

直接 'ld' を使用せずに, 'cc -shared' を使用してください. たった一つの違いは, ELF には, `-Wl,-soname,libfoo.so.M' コマンドライ ンにを加える必要があることです.

ELF のリンカを満足させるためには, libfoo.so -> libfoo.so.N というシンボリックリンクを作る必要があり ます. これは, PLIST にも加えなくてはいけませんし, a.out の場合でも害にはならないので (一部の port ではダイナミックリ ンクローディングのために必要でもあります), PORTOBJFORMAT の設定を気にせずに, ただ単純にリンクを作 成してください.

LIB_DEPENDS

すべての port の Makefile を編集して, LIB_DEPENDS からマイナー番号を除去する必要があり, 正規表現のサポートも 除去する必要があります. (例えば, `foo\\.1\\.\\(33|40\\)' -> `foo.2'.) マッチングは `grep -wF' 使って行われます.

PLIST

PLIST は, a.out のマイナー番号が0であれば, 短い (ELFの) 共有ライブラリの名前を含み, さもなくば長い (a.outの) 名前を 含んでいる必要があります. bsd.port.mk は 自動的に, PORTOBJFORMAT が aout であれば, `.0' を 短い共有ライブラリの名前の行に付け加え, PORTOBJFORMAT が elf であれば, マイナー番号を 長い共有ライブラリの名前から削除します.

ELF システムで 2 つのバージョン番号を持つ共有ライブラリをイ ンストールしたり, aout システムで 1 つのバージョン番号しか持 たない共有ライブラリをインストールするのが避けられない場合 (例えば他のオペレーティングシステム用の互換ライブラリをイン ストールする port など), FILTER_NO_SHLIBS 変数を定義す れば, 前節で説明されている PLIST 編集の機能が停止されま す.

ldconfig

Makefile 中の ldconfig の行は以下のようになります.

${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....
また PLIST 中では:
@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -R
となります. これは, システムのデフォルトフォーマットではなく パッケージのフォーマットに応じて, 正しい ldconfig が呼ばれることを保証するためのものです.

4.7.4.3. MASTERDIR

もし, あなたの port が 変数(例えば 解像度とか紙のサイズなど) を変えたりした, ちょっと違うバージョンを作成する必要があるとき には, ユーザが分りやすいように, package ごとに別々のサブ ディレクトリを作成し, ただし, できるだけ port 間でファイル を共有するようにしてください. 典型的な例では, うまく変数を 使えば, とても短いMakefileだけ, 1つ以外のすべてのディレクトリ に置くだけで済みます. その短い Makefile には ${MASTERDIR} を使って, 残りのファイルがある ディレクトリを指定できます. また PKGNAME の一部に変数に使って, package が別々の 名前を持つようにしてください.

以下が, とても良い例になるでしょう. これは japanese/xdvi300/Makefileの一部です:

 :
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
japanese/xdvi300 は通常のパッチ, package ファイルも もっています. そこで, `make' と入力すると, デフォルトの 解像度(300)を使って, 普通に port の作成を行います.

他の解像度に関してですが, これが, xdvi118/Makefile の(コメントを除いた)すべてです.

RESOLUTION=     118
MASTERDIR=      ${.CURDIR}/../xdvi300

.include "${MASTERDIR}/Makefile"
(xdvi240/Makefile と xdvi400/Makefile も 同様です). ${MASTERDIR} が bsd.port.mk に ${PATCHDIR} や ${PKGDIR} などの通常のサブディレクトリが xdvi300 にあることを 教えます. RESOLUTION=118 の行が, xdvi300/Makefile の RESOLUTION?=300 の行を無効にし, port は解像度を 118として作成されます.

4.7.4.4. 共有ライブラリのバージョン

まず, 共有ライブラリのバージョンについての指針 を読んで, 共有ライブラリのバージョンを一般的にどうすれば良いかを 理解してください. 盲目的に, ソフトウエアの作者がちゃんと理解 していると信じててはいけません, 多くの場合違います. 細い点まで考慮することは大変重要なことです, なぜなら我々は 互換性がないかもしれない大量のソフトウェアを共存させようと する, 特殊な状況にあるからです. 不注意な port の導入が 共有ライブラリに関して, 多大な問題を引き起したことが過去にあ ります (今まで, jpeg-6b がなぜ `9.0' といバージョン番号 を持っているか不思議に思ったことはありませんか?). もし, 疑問があれば, FreeBSD 移植ソフトウエアメーリングリスト <freebsd-ports@FreeBSD.ORG> にメールを送ってください. ほとんどの時間は, 正しいシェアードライブラリのバージョンを 決めることと, それを実現するためのパッチを作成することに 終始します.

しかしながら, が同じソフトウェアの違ったバージョンのソフト ウェアが既にツリーにあるばあいには, 状況は非常に複雑です. つまり, FreeBSD では, ユーザがリンカにどのバージョンの 共有ライブラリを使用するかを指定できないからです(リンカは 常にもっとも高いバージョンを選びます). これは, もし, libfoo.so.3.2 と libfoo.so.4.0 がシステムに存在 するときには, リンカに特別なアプリケーションだけ libfoo.so.3.2 をリンクするように指示する方法がない ことを意味します. これは, コンパイル時のリンクという意味 では完全に見劣りします. この場合の唯一の解決方法は, 共有 ファイルの名前の'ベース'部分を変えることです. 例えば, libfoo.so.4.0 を libfoo4.so.1.0 へ変えることに よって, バージョン 3.2 とバージョン 4.0 共に他の port から リンクされることができるようになります.

4.7.4.5. マニュアル

MAN[1-9LN] 変数を使用すると, 自動的にすべてのマニュアルを pkg/PLIST に加えます (つまり, マニュアルを PLIST に加えてはいけません -- PLIST の生成 を参照してください). またマニュアルを /etc/make.conf 中の NOMANCOMPRESSの設定に応じて, install時に自動的に 圧縮したり伸長したりします.

マニュアルをインストール時に圧縮するかどうかを指定するには, MANCOMPRESSED 変数を使用します. この変数は, 3つの値をとる ことができます, `yes', `no' そして `maybe です. `yes' はマニュアルが既に圧縮されてインストールされている, `no' はされていない, `maybe' はそのソフトウェアが すでに, NOMANCOMPRESS に合わせており bsd.port.mk が特別なにもする必要がないことを意味します.

USE_IMAKE がセットされていて, NO_INSTALL_MANPAGES がセットされていなければ, MANCOMPRESSED は自動的に `yes' に設定され, それ以外の場合には, `no' になります. デフォルトがあなたの port に合わない場合以外は明示的に設定 する必要がありません.

PREFIX以外のディレクトリの下にマニュアルを置く ようなportではMANPREFIXを指定することが できます. さらに, 特定のセクションのマニュアルだけ, 標準では ない場所にインストールする場合, 例えばいくつかの Perl のモ ジュールの ports など, には個々のマニュアルのパスを MANsectPREFIX (sectは, 1 から 9 または, L か N を表わします) によって指定できます. ができます.

マニュアルが, 言語特有のサブディレクトリに置かれる場合には, 言語名を MANLANG に設定してください. この変数のデフォルト 値は, "" になっています (つまり, 英語のみ).

これは, 全部をまとめた例です.

MAN1=		foo.1
MAN3=		bar.3
MAN4=		baz.4
MANLANG=	"" ja
MAN3PREFIX=	${PREFIX}/share/foobar
MAN8COMPRESSED=	yes
以下の6個のファイルがこの port でインストールされます.
${PREFIX}/man/man1/foo.1.gz
${PREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/share/foobar/man/man3/bar.3.gz
${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
${PREFIX}/man/man4/baz.4.gz
${PREFIX}/man/ja/man4/baz.4.gz

4.7.4.6. Motifを必要とするport

最近はコンパイルにMotifを必要とするアプリケーションが増えて きました. (Motif自体は有料のものがいくつかの会社から手に入りま すし, 多くのアプリケーションがコンパイル可能な無料の互換ライブラリ が x11-toolkits/lesstifにあります) Motifはかなり広く使われていますし, 製品のライ センスではライブラリを静的にリンクした実行形式は再配布が認めら れている場合が多いので, Motifを必要とするソフトウェアを簡単に 動的(port からコンパイルする人々のために)/静的(package を配布 する人々のために)にリンクできるようなしくみが用意されています.

REQUIRES_MOTIF

MotifがないとコンパイルできないportのMakefileではこの変 数を指定してください. これによって, Motifを持っていない人が このportをコンパイルしようとするのを未然に防ぎます.

${MOTIFLIB}

この変数はbsd.port.mkによってMotifライブラリの指 定に置き換えられます. ソース内のMakefileやImakefileで Motifライブラリを指定しているところをこの変数に置き換えるよ うにパッチをあててください.

代表的な例としては以下の二つがあげられます:

  1. MakefileかImakefileの中でMotifライブラリが `-lXm' として使われている場合には, かわりに `${MOTIFLIB}' と書いてください.
  2. Imakefileの中で `XmClientLibs' が使われている 場合には, それを `${MOTIFLIB} ${XTOOLLIB} ${XLIB}' と書きかえてください.

${MOTIFLIB} は通常 `-L/usr/X11R6/lib -lXm' か `/usr/X11R6/lib/libXm.a' に置き換えら れます. したがって前に `-L' や `-l' をつけ る必要はありません.

4.7.4.7. X11 のフォント

もし, あなたの port が X window system のフォントをインストール するのであれば, それらを ${X11BASE}/lib/X11/fonts/local に置くようにして ください. このディレクトリは XFree86 release 3.3.3 で新設された ものです. もし, それが存在しなければ作成し, ユーザに XFree86 を 3.3.3 かそれより新しいものに更新か, すくなくとも, このディレクトリを /etc/XF86Config の font path に加えるように促すメッセージを出力するようにしてください.

4.7.4.8. Info ファイル

新しい版の texinfo(2.2.2-RELEASE およびそれ以降に入っています) には, `install-info' というコマンドが含まれており, `dir' ファイルに項目を追加したり, 削除したりすることがで きます. もし, あなたの port が info ドキュメントをインストー ルするのであれば, 以下の指示に従って, その port および package が正しく, ユーザの ${PREFIX}/info/dir ファイル を更新するようにしてください. (この節は, とても長くてすいません, しかし info ファイルを作りあげるためには, これらは不可欠 です. 正しく行なえば, 美しい リストができますので, 辛抱してください! :)

まず, これを知っておかなければなりません:

% install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
  Install INFO-FILE in the Info directory file DIR-FILE.
  (訳注: Info ディレクトリの INO-FILE を DIR-FILE にインストールする)
Options:
--delete          Delete existing entries in INFO-FILE;
                    don't insert any new entries.
                  (訳注: INFO-FILE の中の項目を削除,
                   新しい項目は一切追加しない.)
 :
--entry=TEXT      Insert TEXT as an Info directory entry.
                  (訳注: TEXT を Info ディレクトリの項目として追加する.)
 :
--section=SEC     Put this file's entries in section SEC of the directory.
                  (訳注: このファイルの項目を Info ディレクトリの SEC 
                   という節に置く.)
 :

このプログラムは, 実際には info ファイルをインストール しません, 単に dir ファイルにエントリーを挿入したり削除し たりするだけです.

これから, install-info を使用するように, ports を変換す る7段階の工程を示します. 例として editors/emacsを 使用します.

  1. まず, texinfo のソースを見て, @dircategory と @direntry 文がないファイルについて, それらを追加するパッチを作成します. 以下は, ここでの例での patchの一部です:
    --- ./man/vip.texi.org	Fri Jun 16 15:31:11 1995
    +++ ./man/vip.texi	Tue May 20 01:28:33 1997
    @@ -2,6 +2,10 @@
     
     @setfilename ../info/vip
     @settitle VIP
    +@dircategory The Emacs editor and associated tools
    +@direntry
    +* VIP: (vip).		A VI-emulation for Emacs.
    +@end direntry
     
     @iftex
     @finalout
     :
    

    フォーマットについては見ればわかると思います. dir というファイルに必要な項目を書いておいてくれる作者 も多いので, まず自分で書く前にさがしてみてください. また, 関係 する ports も調べて, 節(section)の名前や, インデントなどが きちんと合っているかどうかを確認してください(項目のテキスト は, すべて4つめのタブ・ストップ(tab stop)から始めることを推 奨します).

    1つのファイルに対して1つの info の項目しか書けないことに注 意してください, これは, `install-info --delete' が, そのバグにより, @direntry セクションに複数の項目を書 いても, 初めの1つの項目しか削除してくれないからです.

    texinfo のソースにパッチをあてるかわりに, dir の項目 を install-info の 引数((--section, --entry) として与えることもできます. これはあまり良い方法とは 思えません, なぜなら, 同じ情報を3ヶ所(Makefile, PLIST の @exec/@unexec: 以下参照) に重複して, 書く必要があるからです. しかしながら, もし日本語(あるいは, 他のマルチバイト文字)の info ファイルがあるのならば, install-info の特別な引数を使用する必要があるでしょう, なぜならば, makeinfo がこのような texinfo ソースファイル を扱えないからです. (このようなものをどう扱うかの例としては, japanese/skk の Makefile と PLIST を見て ください.)

  2. portのディレクトリに戻って, `make clean; make' をして, info ファイルが texinfo ソースファイルから再び生成さ れることを確認してください. texinfo ソースファイルのほうが info ファイルよりも新しいので, make とタイプすれば, info ファイルは再構築されるはずですが, 多くの Makefile には info ファイルの正しい依存関係が書かれていません. emacs の場合, info ファイルの再構築ため, man サブディレクトリ に降りていくようにするために, メインの Makefile.in にパッ チをあてる必要がありました.
    --- ./Makefile.in.org	Mon Aug 19 21:12:19 1996
    +++ ./Makefile.in	Tue Apr 15 00:15:28 1997
    @@ -184,7 +184,7 @@
     # Subdirectories to make recursively.  `lisp' is not included
     # because the compiled lisp files are part of the distribution
     # and you cannot remake them without installing Emacs first.
    -SUBDIR = lib-src src
    +SUBDIR = lib-src src man
     
     # The makefiles of the directories in $SUBDIR.
     SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
    --- ./man/Makefile.in.org	Thu Jun 27 15:27:19 1996
    +++ ./man/Makefile.in	Tue Apr 15 00:29:52 1997
    @@ -66,6 +66,7 @@
     	${srcdir}/gnu1.texi \
     	${srcdir}/glossary.texi
     
    +all: info
     info: $(INFO_TARGETS)
     
     dvi: $(DVI_TARGETS)
    

    man サブディレクトリでのデフォルトターゲットは, info で呼ばれるのに対して, メインの Makefile では, all で呼びたいので, 2つめのpatchが必要でした. また, info info ファイルのインストールも削除しました, なぜなら, 同じものが同じ名前で既に /usr/share/info にあるからです. (このパッチはここにはありません.)

  3. もし, Makefile に dir ファイルをインストールす る個所があれば, 削除します. あなたの port がインストー ルしてはいけません. また, dir ファイルを壊してしまうよう なコマンドの類も削除します.
    --- ./Makefile.in.org	Mon Aug 19 21:12:19 1996
    +++ ./Makefile.in	Mon Apr 14 23:38:07 1997
    @@ -368,14 +368,8 @@
     	if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
     	then \
     	  (cd ${infodir};  \
    -	   if [ -f dir ]; then \
    -	     if [ ! -f dir.old ]; then mv -f dir dir.old; \
    -	     else mv -f dir dir.bak; fi; \
    -	   fi; \
     	   cd ${srcdir}/info ; \
    -	   (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
    -	   (cd $${thisdir}; chmod a+r ${infodir}/dir); \
     	   for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
     	     (cd $${thisdir}; \
     	      ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
     	      chmod a+r ${infodir}/$$f); \
    
  4. (これは, 既存のportを修正するときのみ必要です.) pkg/PLIST を見て, info/dir にパッチをあて ようとするものすべてを削除します. これらは, pkg/INSTALL やその他のファイルにもあるかもしれない ので, いろいろさがしてみてください.
    Index: pkg/PLIST
    ===================================================================
    RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
    retrieving revision 1.15
    diff -u -r1.15 PLIST
    --- PLIST	1997/03/04 08:04:00	1.15
    +++ PLIST	1997/04/15 06:32:12
    @@ -15,9 +15,6 @@
     man/man1/emacs.1.gz
     man/man1/etags.1.gz
     man/man1/ctags.1.gz
    -@unexec cp %D/info/dir %D/info/dir.bak
    -info/dir
    -@unexec cp %D/info/dir.bak %D/info/dir
     info/cl
     info/cl-1
     info/cl-2
    
  5. post-install ターゲットを Makefile に加えて, dir ファイルが存在しなければ作成するようにします. また, インストールされた info ファイルについては, install-info を実行するようします.
    Index: Makefile
    ===================================================================
    RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
    retrieving revision 1.26
    diff -u -r1.26 Makefile
    --- Makefile	1996/11/19 13:14:40	1.26
    +++ Makefile	1997/05/20 10:25:09	1.28
    @@ -20,5 +20,11 @@
     post-install:
     .for file in emacs-19.34 emacsclient etags ctags b2m
     	strip ${PREFIX}/bin/${file}
     .endfor
    +	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>
    

    新しい info ファイルを作成するのに, /usr/share/info/dir と上のコマンド, 以外は使用しな いでください. 実際のところ, もし port する人がこれに関して PLIST に自らまったく手を加える必要がないのであれば, 上 のパッチのはじめの3行を bsd.port.mk に加えたでしょう.

  6. PLIST を編集して, 同じ働きをする @exec 文, そ れにpkg_delete のために @unexec 文を加えてくださ い. @unexec を使用して info/dir を削除する必 要はありません.
    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
    

    @unexec install-info --delete' コマンドは, info ファイル自身より先に置き, コマンドがファイルを読めるようにし ておかなければならないことに注意してください. また, `@exec install-info' コマンドは info ファイルおよび dir ファイルを作るコマンドより後に おかなければなりません.

  7. テスト をして 出来栄えに感服しましょう :) 各段階の前後に, dir ファイルをチェックしましょう.


FreeBSD ハンドブック : アプリケーションのインストール : ports コレクション : 自分で port を作る : 特別な配慮
Previous: Makefileの作成
Next: pkg サブディレクトリ