他の人がEmacs 23または22をターゲットにしているかどうかを指摘しているように、「パッケージ」はなく、ライブラリしかありません。「パッケージ」は、パッケージマネージャーが追加されたとき、Emacs 24より前のEmacsには存在しません。
ライブラリとのバンドル
それをバンドルします。
パッケージの前にライブラリをインストールする標準的な方法はないため、json.elをユーザーに提供するものにバンドルできます。ある種のアーカイブだと思います。とにかく手動でインストールする必要があるので、必要なファイルをすべて選択できます。Emacs24/25ユーザーの場合はライブラリ、古いバージョンの場合はライブラリ+ json.elだけです。
これを文書化する限り、問題は発生しません。
パッケージとの同梱
同梱は絶対にしないでください。
ただし、Emacs 24以降の適切なパッケージをビルドする場合は、を含めないでjson.el
ください。
パッケージマネージャーは、バンドルされたのコピーをjson.el
実際のライブラリと一緒に喜んでインストールします。のload-path
バンドルされたコピーの最初にパッケージが来るためjson.el
、は組み込みのものをオーバーライドし、より新しいバージョンのを期待するパッケージにあらゆる種類の問題を引き起こしますjson.el
。
行く方法(私の意見では)
パッケージの2つのディストリビューションを作成します。
- Emacs 24以降用の適切なEmacsパッケージ。たとえば、対応するパッケージメタデータを含むTAR。Emacs 24ユーザーに更新を自動的に配布するパッケージで小さなパッケージリポジトリをホストすることもできます。
- ライブラリと
json.el
を含むが、古いEmacsバージョンのユーザー向けのパッケージメタデータを含まない TARファイル。
注意する必要があるのは、古いEmacsバージョンのユーザーがEmacs 24に更新する場合のみです。この場合、ライブラリの以前のインストールを手動で削除しjson.el
、適切なEmacs 24パッケージを再度インストールする必要があります。
代替
2つの異なるディストリビューションを維持したくない場合はjson.el
、をバンドルできますが、別の名前を使用できますmy-library-json-compat.el
。別の名前を使用すると、のバンドルコピーがjson.el
組み込みのものをオーバーライドすることはありません。
バンドルされたコピー内の関数とシンボルは組み込みのものと依然として競合するため、実際のものjson.el
が使用可能な場合はバンドルされたコピーを読み込まないように注意する必要がありますが、これは簡単です。
(unless (require 'json nil 'no-error)
(require 'json "my-library-json-compat"))
Emacsはをロードしようとしjson.el
、失敗すると別の名前でバンドルされたコピーにフォールバックします。
実際の行き方(私の意見では)
ユーザーにEmacs 24にアップデートするように伝えます。Emacs22の最後のリリースは8年前、Emacs 23の最後のリリースはまだ4年前です。どちらのバージョンも古く、多くの機能が欠如しており、多くのパッケージ(Magitなど)は現在Emacs 24のみをサポートしています。Emacs 22/23は行き止まりで、そこから先に進む方法はありません。
Emacs 24へのアップデートは簡単です。最新のLinuxディストリビューションのパッケージリポジトリには、少なくともEmacs 24.1が含まれています。OS Xの場合、ビルド済みのAppバンドルが利用可能で、最新の安定したEmacs 24が人気のOS XパッケージマネージャーHomebrewに含まれています。