「Lisp パッケージガイドライン」の版間の差分
(翻訳) |
(相違点なし)
|
2016年11月10日 (木) 00:03時点における版
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
現時点では、Arch のリポジトリに入っている Lisp のパッケージは比較的少数しかありません。つまり、今後パッケージを作成する余地が大いにあるということです。パッケージの数は少なくても、パッケージを作成する方法を知ることは役に立ちます。
ディレクトリの構造と命名
ベースリポジトリに入っているパッケージ (libgpg-error) は Lisp ファイルを /usr/share/common-lisp/source/gpg-error
に配置しています。これに従って、他のパッケージでも Lisp ファイルは /usr/share/common-lisp/source/pkgname
に配置してください。
パッケージディレクトリは Arch リポジトリ や AUR での呼称でなく Lisp パッケージの名前にしてください。このことはファイルがひとつしかないパッケージにも適用されます。
例えば、"cl-ppcre" という名前の Lisp パッケージは AUR でも cl-ppcre
という名前で /usr/share/common-lisp/source/cl-ppcre
に配置されます。"alexandria" という名前の Lisp パッケージで AUR での名前が cl-alexandria
だったときは Lisp パッケージにあわせて /usr/share/common-lisp/source/alexandria
に配置します。
ASDF
ASDF-Install を使用してシステム全体にパッケージをインストールするのは避けてください。
ASDF 自体はパッケージのコンパイル・ロードをするときに必須あるいは役に立つツールです。ASDF を使用する際は、中央レジストリ (*.asd
のシンボリックリンクが全て置かれる場所) のディレクトリを使用することが推奨されています (/usr/share/common-lisp/systems/
)。
しかしながら、パッケージの作成において asdf を使ってコンパイルを実行すると問題が発生します。ただし以下のような package.install
ファイルを使用することでインストールすることができます:
cl-ppcre.install
# arg 1: the new package version post_install() { echo "---> Compiling lisp files <---" clisp --silent -norc -x \ "(load #p\"/usr/share/common-lisp/source/asdf/asdf\") \ (pushnew #p\"/usr/share/common-lisp/systems/\" asdf:*central-registry* :test #'equal) \ (asdf:operate 'asdf:compile-op 'cl-ppcre)" echo "---> Done compiling lisp files <---" cat << EOM To load this library, load asdf and then place the following lines in your ~/.clisprc.lisp file: (push #p"/usr/share/common-lisp/systems/" asdf:*central-registry*) (asdf:operate 'asdf:load-op 'cl-ppcre) EOM } post_upgrade() { post_install $1 } pre_remove() { rm /usr/share/common-lisp/source/cl-ppcre/{*.fas,*.lib} } op=$1 shift $op $*
もちろん、上記のファイルを使うには、asdf のシステムディレクトリに package.asd
のシンボリックリンクが必要です。パッケージのコンパイル時に、以下のような操作をすることでシンボリックリンクを作成できます:
pushd ${_lispdir}/systems ln -s ../source/cl-ppcre/cl-ppcre.asd . ln -s ../source/cl-ppcre/cl-ppcre-test.asd . popd
$_lispdir
は $pkgdir/usr/share/common-lisp
に置き換えてください。絶対パスではなく相対パスでリンクすることで、インストール後にリンクが壊れてしまうことを防いでいます。
特定の Lisp に依存するパッケージ
できるかぎり、特定の Lisp 実装に依存するパッケージは作成しないでください。クロスプラットフォームで動作するようにしてください。ただし、パッケージ自体が特定の Lisp 実装にあわせて開発されていた場合 (開発者が他のプラットフォームをサポートを考えていなかったり、他の Lisp 実装には元から備わっている機能を追加する場合など)、Arch のパッケージを lisp に依存させるのが適当です。
パッケージを実装に依存させずに、全ての実装 (SBCL, cmucl, clisp) のパッケージが PKGBUILD の common-lisp フィールドでビルドできるのが利用です。しかし、理想と現実は違います (そしてユーザーが複数の Lisp を使用している場合に問題が発生するでしょう)。また、あらゆる Lisp に依存するパッケージを作成することはできません。package.install
ファイルで Lisp をインストールするようにメッセージを出すか、あるいは sbcl の PKGBUILD に焦点をあわせてどの Lisp が必要なのか確認する条件文を書くしかありません。どちらからも理想からは遠く、他にアイデアがあれば歓迎します。
パッケージのインストール・コンパイル・ロードに ASDF が必要な場合、事態はさらに厄介になります。SBCL には asdf が付属していますが、clisp では AUR のパッケージでインストールする必要があります (CMUCL についてはよく知りません)。
特定の Lisp 限定のパッケージをメンテナンスしていて、そのパッケージを特定の Lisp 実装に依存させる必要がない場合、以下のどれかができないか考慮してください:
- PKGBUILD を編集してクロスプラットフォームにする。他の Lisp で同じパッケージを誰もメンテナンスしていない場合。
- 別の Lisp 実装による同じパッケージのメンテナンスを手助け・交代できないか交渉して、パッケージをひとつにまとめる。
- 別の Lisp 版の同一パッケージのメンテナにパッケージを譲り渡して、ひとつのパッケージにまとめられるようにする。
(このドキュメントを書いた joyfulgirl は現在 cl-ppcre と stumpwm の clisp バージョンをメンテナンスしています。SBCL バージョンのメンテナによろこんでパッケージを渡しますし、メンテナがそれを望まない場合、新しいクロスプラットフォームのパッケージが作られることを待望します)。
読者ができること
- 上記のガイドラインに従って Lisp パッケージをメンテナンスをすること。
- ガイドラインにあわせてアップデートしたり問題を解決すること。
- 何か変更があったらそれに追従すること。
- ドキュメントやメンテナンス作業について意見・提案すること。
- このページを翻訳して更新すること。