複数ファイルパッケージは単一ファイルパッケージより作成の手軽さが少し劣りますが、より多くの機能を提供します。複数ファイルパッケージには複数のEmacs Lispファイル、Infoマニュアル、および(イメージのような)他のファイルタイプを含めることができます。
インストールに先立ち複数パッケージはファイルとしてパッケージアーカイブに含まれます。このtarファイルはname-version.tarという名前でなければなりません。ここでnameはパッケージ名、versionはバージョン番号です。tarのコンテンツは一度解凍されたなら、コンテンツディレクトリcontent directory)であるname-versionという名前のディレクトリーにすべて解凍されなければなりません(パッケージ化の基礎を参照)。このコンテンツディレクトリーのサブディレクトリーにもファイルが抽出されるかもしれません。
このコンテンツディレクトリー内のファイルのうち1つはname-pkg.elという名前のファイルでなければなりません。このファイルには、以下で説明する関数define-package
の呼び出しから構成される単一のLispフォームを含まなければなりません。これはパッケージの属性、簡単な説明(brief
description)、必要条件(requirements)を定義します。
たとえば、複数ファイルパッケージとしてsuperfrobnicatorのバージョン1.3を配布する場合のtarファイルはsuperfrobnicator-1.3.tarになります。これのコンテンツはsuperfrobnicator-1.3に解凍されて、そのうちの1つはファイルsuperfrobnicator-pkg.elになるでしょう。
この関数はパッケージを定義する。nameはパッケージの名前(文字列)、versionは関数version-to-list
が理解できる形式のバージョン(文字列)、docstringは簡単な説明(brief
description)。
requirementsは必要となるパッケージとバージョン番号。このリスト内の各要素は(dep-name
dep-version)
という形式であること。ここでdep-nameはその依存するパッケージ名が名前であるようなシンボル、dep-versionは依存するパッケージのバージョン番号(文字列)。特別な値‘emacs’は、そのパッケージがEmacsの特定バージョン向けであることを意味する。
コンテンツディレクトリーにREADMEという名前のファイルがあれば、(すべての‘;;; Commentary:’セクションをオーバーライドして)長い説明(long description)として使用されます。
コンテンツディレクトリーにdirという名前のファイルがあれば、install-info
で作成されるInfoディレクトリーファイル名とみなされます。Invoking install-info in Texinfoを参照してください。関係のあるInfoファイルもコンテンツディレクトリー内に解凍される必要があります。この場合には、パッケージがアクティブ化されたときにEmacsが自動的にInfo-directory-list
にコンテンツディレクトリーを追加します。
パッケージ内に.elcファイルを含めないでください。これらはパッケージのインストール時に作成されます。ファイルがバイトコンパイルされる順序を制御する方法は存在しないことに注意してください。
name-autoloads.elという名前のファイルを含めてはなりません。このファイルはパッケージのautoload定義のために予約済みです(パッケージ化の基礎を参照)。これはパッケージのインストール時にパッケージ内のすべてのLispファイルからautoloadマジックコメントを検索する際に自動的に作成されます。
複数パッケージファイルが、(イメージのような)補助的なデータファイルを含む場合には、パッケージ内のLispファイルは変数load-file-name
を通じてそれらのファイルを参照できます(ロードを参照)。以下は例です:
(defconst superfrobnicator-base (file-name-directory load-file-name)) (defun superfrobnicator-fetch-image (file) (expand-file-name file superfrobnicator-base))
パッケージにユーザーに配布したくないファイル(たとえば回帰テストなど)が含まれている場合には、それらを.elpaignoreファイルに追加できます。このファイルの行にはそれぞれファイルのリスト、あるいはファイルにマッチするワイルドカードを記述します。ここで記述したファイルは、ELPA
(パッケージアーカイブの作成と保守を参照)であなたのパッケージのtarballを生成する際に無視されます(ELPAがダウンロード用にパッケージを準備する際にファイルはコマンドラインオプション-Xを通じてtar
コマンドに渡されることになる)。