FreeBSD port 作成者のためのハンドブック
Prev |  | Next

# 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` のバグにより `<@direntry>` セクションに複数の項目を書いても初めの一つの項目しか削除してくれないからです。

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

Prev | Home | Next
X11 のフォント |  | `pkg-`*`` ファイル

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