ラベル emacs packaging の投稿を表示しています。 すべての投稿を表示
ラベル emacs packaging の投稿を表示しています。 すべての投稿を表示

2009年12月8日火曜日

emacsのライブラリパッケージ取扱方針

多少調査したので、見えてきた。次の方針がよいように思う。

  • Ubuntu(Debian)のElispパッケージを採用する。(debian-emacs-policy)

    • 依存関係も管理しているので安心。
    • インストール/アンインストールも統一的。
    • ただし、パッケージをつくる手間は結構ある。

  • 補完的に、Auto Installを採用する。

    • Ubuntu(Debian)のElispで提供されていないものは、Auto InstallにてElispAreaなどから採用する。
    • パッケージ化の手間がないので、アジャイルにライブラリの導入ができる。

  • Auto Install -> Ubuntu(Debian)

    • Auto Installにて導入したライブラリが、有用であり安定しているならば、パッケージ化のプロセスに入る。

      • まず、Auto Install上での安定。依存関係があるなら、Auto Install上でbatch定義する。また、ライブラリのリビジョンを止めるために、ElispAreaではなく、ローカルに落として止めたリビジョンのみを見るなど。
      • 次に、debian-emacs-policyに準拠したdebian packageを作成する。これをプライベートリポジトリに置き運用する。
      • 最後に、debianパッケージメンテナ等に依頼して、公式リポジトリにアップロードしてもらう。



こつこつ。

debian-emacs-policyとXEmacs package systemの関係


* debian-emacs-policyとXEmacs package systemの関係
- debianのパッケージにXEmacs package systemのパッケージあり
- xemacs21-basesupport
- xemacs binary packages
- xemacs21-basesupport-el
- xemacs source packages

- ここにXEmacs package system公式提供のものはすべ
て入っているようだ。
- debian-emacs-policyに従ったpackagesと、XEmacs
package systemのpackageの両方に含まれているpackage
がけっこうある。
- どうやら、御互い無関係にやっているようだ。
- ユーザ自身が、どちらのパッケージシステムでいく
かの判断をしなければならない。


こつこつ。

XEmacs package system

XEmacs、ほぼ初めていじったといってよいのですが、このpackage systemは結構ちゃんとしていてびっくりです。依存関係管理を装備すれば、完備かと。

うーん。GNU Emacsにもこういうものが欲しい。。。


* XEmacs package system
- パッケージの置き場所
- パッケージの置き場所は、file system上のpathで
系統づけている。その系統を'パッケージ階層'と呼
ぶ。デフォルトでは3つの系統がある。
- startupの際に、パッケージ階層をXEmacsは見るこ
とができる。load-pathにする、ということではな
いようだ。M-x describe-installationでpackage
pathの値をみることができる。
- パッケージ階層 (package hierarchies)
- Local and 3rd party packages go here:
- $prefix/lib/xemacs/site-packages
- Only searched by MULE-enabled XEmacsen:
- $prefix/lib/xemacs/mule-packages
- Normal packages go here:
- $prefix/lib/xemacs/xemacs-packages
- Infodock development environments
- $prefix/lib/xemacs/infodock-packages

- $prefixはconfigure scriptに渡したパラメータ。
- 典型的には'/usr/local/'。
- ユーザのパッケージ階層
- '.xemacs/'配下
に、'site-packages'、'xemacs-packages'、
'mule-packages'ディレクトリをつくると、認識
される。
- パッケージ階層とload-path
- パッケージ階層達の優先度はXEmacsのコンパイ
ル時に指定する。
- 前項の指定順にしたがって、パッケージ階層を
調べて、load-pathを構成する。

- パッケージ
- バイナリパッケージとソースパッケージがある。
- ソースパッケージからバイナリパッケージを生成
する。'バイナリ'と言うが、実際はバイトコード
(コンパイルされたelispファイル)。

- バイナリパッケージアーカイブ
- XEmacs公式
- Official XEmacs Packages:
- XEmacs開発者によってテスト済み。
These packages have received testing from XEmacs developers and bleeding-edge users
and are available as documented in our Release Notice Archive.
- Pre-Release XEmacs Packages:
- テスト中またはテスト待ちのパッケージ。
- アーカイブではなく、パケージ個別に独立管理し
ているもの
- http://www.xemacs.org/Download/elispPackages.html
- ただし、このリストにあるもので、XEmacs
packagesに含まれることもあるとのこと。なん
のこっちゃ。
- http://ftp.xemacs.org/pub/packages/
- 130前後のパッケージあり。

- ソースパッケージリポジトリ
- XEmacs CVSリポジトリの一部。次の構造。

<repo-root>/
packages/
Makefile
iterate.rules
meta-iterate.rules
XEmacs.rules
Local.rules
Local.rules.template
Local.rules.mk
Local.rules.inc
package-compile.el
xemacs-packages/
Makefile
pkg-A-name/
pkg-B-name/
...
mule-packages/
Makefile
pkg-1-name/
pkg-2-name/
...
- 再帰的makeによって、パッケージ全体をビルドす
るようだ。

- パッケージの作法
- パッケージのflavor
- 2つのflavorがある。
- Regular Packages
- elispファイル達総体として機能をなすもの。
- 部分的に削除すると、機能しなくなる。
- Single-File Packages
- 個別elispファイルで機能するもの。そういっ
たものを共通テーマでくくったもの。
- 部分的に削除しても残りのものは機能する。
- ファイル名
- pkgname--pkg.tar.gz
- バイナリパッケージの中身の構成

_pkg.el
auto-autoloads.el
custom-load.el
ChangeLog
lib/pkgname/
lib-src/pkgname/
etc/pkgname/
info/
lisp/maybe-pkgname/
man/maybe-pkgname/
pkginfo/MANIFEST.pkgname

- _pkg.el
- パッケージ管理システム向け情報。
- auto-autoloads.el
- autoloadを中心に、pkgを使う(使えるように
する)ための設定を含む。
- custom-load.el
- customに対する設定を含む。
- pkginfo/MANIFEST.pkgname
- インストール対象ファイルの一覧を含む。

- ソースパッケージの構成
- バイナリパッケージの '_pkg.el' 、
'auto-autoloads.el'、'custom-load.el' は生
成物。そのかわりに、次のものがある。

Makefile
package-info.in

- 制御ファイル (Control Files)
- ソースとバイナリにまたがって、制御系のファ
イル達のことを制御ファイルと呼ぶ。具体的に
は、次のとおり。

Makefile
package-info.in
_pkg.el
auto-autoloads.el
custom-load.el

- インストール
- 基本的にはパッケージ階層のトップにてuntarする
だけ。
- elispによるインストールフロントエンドもあり。

- アンインストール
- 関数:package-admin-delete-binary-packageにて
削除可能。

- 依存関係
- 依存関係を扱う機構は無い。

こつこつ。

2009年12月7日月曜日

Auto Install

現在自分が使用しているRev.1.18を読んでみた。
印象は、EmacsWikiのElispAreaインターフェイス。


* Auto Install
- ソースがきれい。ちゃんとしている雰囲気。
** パッケージの取得先
- auto-install-emacswiki-base-url
- "http://www.emacswiki.org/cgi-bin/wiki/download/"
- auto-install-gist-base-url
- "http://gist.github.com/"
- auto-install-filter-url
- '(("color-grep" "http://www.bookshelf.jp/elc/"))
- auto-install-batch-list
- バッチインストールのためのパッケージ情報。
** パッケージのデフォルト保存場所
- auto-install-directory
- "~/.emacs.d/auto-install/"
- 新規に導入するelispファイルの置き場所。
** 基本的な動作
- emacswikiのelisp areaをelispの主たるアーカイブと
位置付けている。副次的なものとして、gist、
filter-urlがある。
- elisp areaから、'.el'ファイルの一覧を取得し、こ
れを取扱い可能ライブラリの名前として利用する。
- 基本動作としては、この名前でライブラリを指定し
て、ダウンロード-中身確認-採用-配置となる。
- ライブラリの指定は、mini-bufferで指定する方法と、
既存のelispをdired上で指定する方法の二種類がある。
- 配置場所も二種類ある。すでにそのライブラリが
load-path上に存在するなら、それへの上書き配置が
可能である。load-path上に存在しないなら、
auto-install-directory内に配置される。
- 依存関係を自動処理する方法は無いようだ。
- ただし、複数ファイルで構成されるライブラリについ
ては、auto-install-batch-listにて明示的にelisp
ファイルのグループをつくることによって、一括イ
ンストールが可能。

あとはXEmacsのPackage Systemだ。
こつこつ。

2009年12月5日土曜日

ELPA (Emacs Lisp Package Archive)


* ELPA (Emacs Lisp Package Archive)
- 次の2つのファイルがパッケージ一覧の基本情報。
package-list-packagesを呼ぶと、
package-refresh-contentsによってWebから取得され
る。
- http://tromey.com/elpa/archive-contents
- これがELPA提供のパッケージの一覧を含むファ
イル。依存関係も記述されている。
- 104個のパッケージを含む。
- http://tromey.com/elpa/builtin-packages
- Emacs組込パッケージと衝突しているものについ
て、整理情報を記述。22.0用と23.0用が含まれ
ている。
- バージョンを考慮した依存関係管理をしている。
- パッケージの様式
- <package-user-dir>/<NAME-VERSION>/にそれぞれのパッ
ケージをダウンロードする。
- .el
- ELPA上では'NAME-VERSION.el'というファイル名
をもつ。
- DLすると、'NAME-VERSION'というディレクト
リに'NAME.el'というファイル名で格納する。
- .tar
- "PACKAGE-pkg.el"を含まなければならない。
- このファイルの中では、define-packageが
呼ばれている。
- define-package
- パッケージを定義して、package-alistにパッケー
ジ情報を格納する関数。


こつこつ。

Emacs Lisp List


* Emacs Lisp List
- http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.html
- さて、前回ell.elをローダと書いたが、ローダでは
なかった。
- これは、ell.xmlをemacsのbufferにきれいに表示す
るものだ。いくつか機能を提供している。
- 著者名によるソート機能。
- ell.xmlに更新があった場合、更新項目に"<new>"
をつける。
- すでに導入済みのライブラリについては、項目の頭
に"*"をつける。
- ちなみに、Emacsではelispを含んだファイルをお
しなべてライブラリと呼ぶ。
- avltree
- ell.xmlをパースしてavltreeにする。
- 作成したavltreeは'~/.ell-last-read'にファイル
として保持して差分確認にも利用する。


こつこつ。

2009年12月4日金曜日

Emacsのパッケージング事情

debian emacs policyを理解できてきたところで、他のパッケージ管理機構についてざっと調べてみた。結構いろいろな情報がある。

何かひとつをちゃんと知るということは、やっぱり大変なことだなぁと再認識した。


* Emacsのパッケージング事情
** ヘッダ等の慣習
*** Conventional Headers for Emacs Libraries
- http://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Headers.html#Library-Headers
- GNU Emacs Lisp Referenceの一部。
- Elispファイルを書くときの慣習。
- ライブラリのメタデータ(著者等)をコメントとして
記述するための慣習。
- ライブラリの中身をコメントで構造化するための慣習。
- 例:メタデータ

;;; lisp-mnt.el --- minor mode for Emacs Lisp maintainers

;; Copyright (C) 1992 Free Software Foundation, Inc.

;; Author: Eric S. Raymond <esr@snark.thyrsus.com>
;; Maintainer: Eric S. Raymond <esr@snark.thyrsus.com>
;; Created: 14 Jul 1992
;; Version: 1.2
;; Keywords: docs

;; This file is part of GNU Emacs.
...
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.

ここに本体コード。

;;; filename --- description

- 例:構造化コメント

;;; Commentary:
;;; Documentation:
;;; Change Log:
;;; Code:
;;; filename ends here

*** Elisp Area Conventions
- http://www.emacswiki.org/cgi-bin/wiki/ElispAreaConventions
- EmacsWikiのElisp Areaに置くelispのかきぶりの慣
習の説明。
- GNU Emacs Lispの慣習をベースにして、詳細化や拡
張を実施している。

** ヘッダツール
*** Automatic File Headers
- http://www.emacswiki.org/emacs/AutomaticFileHeaders
**** auto insert mode
- ユーザが定義したテンプレートにしたがって、ファイ
ル作成時にヘッダを自動的に挿入する。
auto-insert-alistでファイル名パターンとテンレプー
トを紐付ける。
**** header2.el
- Elisp Area Conventionsに対応したヘッダを自動挿入
や自動更新するelisp。
- そのライブラリが必要とするfeaturesを記述する欄を
設けている。(これは他のConventionsでは定義されて
いない)
- ;; Features that might be required by this library:
**** lib-requires.el
- ライブラリの依存情報を調査して、木構造をつくる
elisp。
**** elisp-depend.el
- elispファイルをparseして、そのelispで依存してい
るライブラリを探索し、それぞれについて、それが
providedならば、require式を出力し、そうでなけれ
ばautoload式を出力する。
**** checkdoc
- http://www.emacswiki.org/emacs/CheckDoc
- elispファイルのヘッダをチェックする。GNU慣習と
EmacsArea慣習の双方に対応している。

** パッケージ管理機構
*** Emacs Lisp List
- http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.html
- http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.xml
- http://www.damtp.cam.ac.uk/user/sje30/emacs/ell.el
- パッケージ一覧ファイル(ell.xml)とそれを参照する
ローダ(ell.el)を提供。
- ell.elではavltreeをつかってパッケージのキャッシュ
を作成し管理している。興味深い。

*** Auto Install
- http://www.emacswiki.org/emacs/AutoInstall
- フルセットのパッケージ管理が可能。
- パッケージの取得先はEmacsWiki他、いくつか指定可
能。
- パッケージの依存関係の管理などがどうなっている
のかは要調査。

*** ELPA
- http://tromey.com/elpa/
- パッケージアーカイブとそれを参照するローダを提
供。
- Web上の説明が簡素なため、理解するためには使って
みる必要がありそう。
- パッケージアーカイブの仕様を調べてみたい。

*** Install Lisp
- http://www.emacswiki.org/emacs/InstallElisp
- Auto Installの前身と考えてよさそう。

*** XEmacs package system
- http://www.xemacs.org/Documentation/packageGuide.html
- XEmacsはパッケージ管理機構を組み込みでもってい
る。専用のパッケージアーカイブも存在する。
- debian-emacs-policyとはどういう関係になるのだろ
う。
- 詳細は要調査。


こつこつ。