Chapter 11. 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 ディレクトリの INFO-FILE を DIR-FILE にインストールする)
Options:
--delete          Delete existing entries in INFO-FILE;
                    don't insert any new entries.
                  (訳注: INFO-FILE の中の項目を削除,
                   新しい項目は一切追加しない.)
 :
--entry=TEXT      Insert TEXT as an Info directory entry.
                  (訳注: TEXT を Info ディレクトリの項目として追加する.)
 :
--section=SEC     Put this file's entries in section SEC of the directory.
                  (訳注: このファイルの項目を Info ディレクトリの SEC
                   というセクションに置く.)
 :

Note: このプログラムは, 実際には 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 も調べて, セクションの名前やインデントなどがきちんと合っているかどうかを確認してください (項目のテキスト は, すべて 4 つめのタブ・ストップ (tab stop) から始めることを推奨します).

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

    texinfo のソースにパッチを適用する代わりに dir の項目を install-info の引数 (--section, --entry) として与えることもできますが, あまり良い方法とは言えません. なぜなら同じ情報を三つの場所 (Makefile, pkg-plist@exec/@unexec: 以下参照) に重複して書く必要があるからです. しかし, もし日本語 (あるいは, 他のマルチバイト文字)の info ファイルがある場合には install-info の特別な引数を使用する必要があるでしょう. なぜなら makeinfo がこのような texinfo ソースファイルを扱えないからです. (このようなものをどう扱うかの例としては japanese/skkMakefilepkg-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)
    

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

  3. もし, Makefiledir ファイルをインストールする個所があれば削除します. あなたの 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/pkg-plist,v
    retrieving revision 1.15
    diff -u -r1.15 pkg-plist
    --- pkg-plist   1997/03/04 08:04:00     1.15
    +++ pkg-plist   1997/04/15 06:32:12
    @@ -15,9 +15,6 @@
     man/man1/emacs.1.gz
     man/man1/etags.1.gz
     man/man1/ctags.1.gz
    -@unexec cp %D/info/dir %D/info/dir.bak
    -info/dir
    -@unexec cp %D/info/dir.bak %D/info/dir
     info/cl
     info/cl-1
     info/cl-2
    
  5. post-install ターゲットを Makefile に加えてインストールされた info ファイルについては, install-info を実行するようします (dir ファイルが存在しない場合にそれを作成するようにする必要はなくなりました. install-info はこのファイルが存在しなければ自動的に作成します).

    Index: Makefile
    ===================================================================
    RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
    retrieving revision 1.26
    diff -u -r1.26 Makefile
    --- Makefile    1996/11/19 13:14:40     1.26
    +++ Makefile    1997/05/20 10:25:09     1.28
    @@ -20,5 +20,11 @@
     post-install:
     .for file in emacs-19.34 emacsclient etags ctags b2m
            strip ${PREFIX}/bin/${file}
     .endfor
    +.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
    +       install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
    +.endfor
    
     .include <bsd.port.mk>
    
  6. pkg-plist を編集して, 同じ働きをする @exec 文, それに pkg_delete のために @unexec 文を加えてください.

    Index: pkg-plist
    ===================================================================
    RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v
    retrieving revision 1.15
    diff -u -r1.15 pkg-plist
    --- pkg-plist   1997/03/04 08:04:00     1.15
    +++ pkg-plist   1997/05/20 10:25:12     1.17
    @@ -16,7 +14,14 @@
     man/man1/etags.1.gz
     man/man1/ctags.1.gz
    +@unexec install-info --delete %D/info/emacs %D/info/dir
     :
    +@unexec install-info --delete %D/info/ccmode %D/info/dir
     info/cl
     info/cl-1
    @@ -87,6 +94,18 @@
     info/viper-3
     info/viper-4
    +@exec install-info %D/info/emacs %D/info/dir
     :
    +@exec install-info %D/info/ccmode %D/info/dir
     libexec/emacs/19.34/i386--freebsd/cvtmail
     libexec/emacs/19.34/i386--freebsd/digest-doc
    

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

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

FreeBSD ports システムに関する質問は、(英語で) <ports@FreeBSD.org> へ、
この文書の原文に関するお問い合わせは、(英語で) <doc@FreeBSD.org> までお願いします。