pkg サブディレクトリ
Portを作成する場合, 考慮しなくてはいけないことがさらにいくつか あります. この節では, それらのうちもっともありがちなものに ついて説明します.
共有ライブラリをインストールするときには, 共有ライブラリのキャッ
シュを更新するために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が使えなくなっちゃった!」). この掟を破った者は, 永久
に地獄の底で苦しみ続けるように, 閻魔様に頼んでおきます.
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 ライブラリは, /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 システム上でのビルドの際スキップされます.
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' 使って行われます.
PLISTPLIST は, a.out のマイナー番号が0であれば, 短い (ELFの)
共有ライブラリの名前を含み, さもなくば長い (a.outの) 名前を
含んでいる必要があります. bsd.port.mk は 自動的に,
PORTOBJFORMAT が aout であれば, 
`.0' を 短い共有ライブラリの名前の行に付け加え,
PORTOBJFORMAT が elf であれば, マイナー番号を
長い共有ライブラリの名前から削除します.
ELF システムで 2 つのバージョン番号を持つ共有ライブラリをイ
ンストールしたり, aout システムで 1 つのバージョン番号しか持
たない共有ライブラリをインストールするのが避けられない場合
(例えば他のオペレーティングシステム用の互換ライブラリをイン
ストールする port など), FILTER_NO_SHLIBS 変数を定義す
れば, 前節で説明されている PLIST 編集の機能が停止されま
す.
ldconfigMakefile 中の 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 が呼ばれることを保証するためのものです.
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として作成されます.
まず, 
共有ライブラリのバージョンについての指針 を読んで,
共有ライブラリのバージョンを一般的にどうすれば良いかを
理解してください. 盲目的に, ソフトウエアの作者がちゃんと理解
していると信じててはいけません, 多くの場合違います.
細い点まで考慮することは大変重要なことです, なぜなら我々は
互換性がないかもしれない大量のソフトウェアを共存させようと
する, 特殊な状況にあるからです. 不注意な 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 から
リンクされることができるようになります. 
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
最近はコンパイルにMotifを必要とするアプリケーションが増えて
きました. (Motif自体は有料のものがいくつかの会社から手に入りま
すし, 多くのアプリケーションがコンパイル可能な無料の互換ライブラリ
が x11-toolkits/lesstifにあります)
Motifはかなり広く使われていますし, 製品のライ
センスではライブラリを静的にリンクした実行形式は再配布が認めら
れている場合が多いので, Motifを必要とするソフトウェアを簡単に
動的(port からコンパイルする人々のために)/静的(package を配布
する人々のために)にリンクできるようなしくみが用意されています.
MotifがないとコンパイルできないportのMakefileではこの変 数を指定してください. これによって, Motifを持っていない人が このportをコンパイルしようとするのを未然に防ぎます.
この変数はbsd.port.mkによってMotifライブラリの指
定に置き換えられます. ソース内のMakefileやImakefileで 
Motifライブラリを指定しているところをこの変数に置き換えるよ
うにパッチをあててください.
代表的な例としては以下の二つがあげられます:
-lXm' として使われている場合には, かわりに 
`${MOTIFLIB}' と書いてください.
XmClientLibs' が使われている
場合には, それを `${MOTIFLIB}
${XTOOLLIB} ${XLIB}' と書きかえてください.${MOTIFLIB} は通常 `-L/usr/X11R6/lib -lXm' か `/usr/X11R6/lib/libXm.a' に置き換えら
れます. したがって前に `-L' や `-l' をつけ
る必要はありません.
もし, あなたの port が X window system のフォントをインストール
するのであれば, それらを
${X11BASE}/lib/X11/fonts/local に置くようにして
ください. このディレクトリは XFree86 release 3.3.3 で新設された
ものです. もし, それが存在しなければ作成し, ユーザに
XFree86 を 3.3.3 かそれより新しいものに更新か,
すくなくとも, このディレクトリを /etc/XF86Config の
font path に加えるように促すメッセージを出力するようにしてください.
新しい版の 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を
使用します.
@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 を見て
ください.)
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
にあるからです. (このパッチはここにはありません.)
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); \
pkg/PLIST を見て, info/dir にパッチをあて
ようとするものすべてを削除します.  これらは,
pkg/INSTALL やその他のファイルにもあるかもしれない
ので, いろいろさがしてみてください.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST	1997/03/04 08:04:00	1.15
+++ PLIST	1997/04/15 06:32:12
@@ -15,9 +15,6 @@
 man/man1/emacs.1.gz
 man/man1/etags.1.gz
 man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
 info/cl
 info/cl-1
 info/cl-2
post-install ターゲットを Makefile に加えて,
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 に加えたでしょう.
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 ファイルを作るコマンドより後に
おかなければなりません.
:)
各段階の前後に, dir ファイルをチェックしましょう.pkg サブディレクトリ