[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
debian-emacs-policy
現在自分で校正中ですが、とりあえず出来上がったので出しておきます。
英語が邪魔なら grep -v '^#' をかましてください。
プログラムコードとの兼ね合いもあって flavor はあえてそのままにしておき
ました。
-*-indented-text-*-
#[ Due to a general lack of time, this document is way too terse, and
# should e better organized, so be prepared to suffer a little.
# Improvements are welcome.
[ ひどく時間がないため、本文書は非常に雑であり、より良く構成されるべきです。
従ってあと少しだけ熟考して準備されるべきです。改良は歓迎します。
# Also, there will be some changes in the nearish future to allow
# add-on packages that depend on (or can interact with) other add-on
# packages to have their install/remove scripts called in the right
# order, etc. ]
また、とても近い将来、他のアドオンパッケージに依存または対話するようなア
ドオンパッケージにおいて、その install/remove スクリプトを正しい順序で呼
べるようにする等の変更が行われるでしょう。]
(訳注) ここで言うアドオンパッケージは一般に Emacs Lisp を指します。
#First, some terminology: when I say <emacs> below I mean
#{emacs,xemacs20,emacs19,emacs20}. When I say <flavor>, I mean just
#one of (xemacs20 emacs19 emacs20).
まず、いくつかの用語を定義します。 <emacs> と言ったときは、 (集合として)
{emacs,xemacs20,emacs19,emacs20} を指します。また、 <flavor> と言ったとき
は(xemacs20 emacs19 emacs20) のうちの一つを指します。
#1) New common package.
1) 新しい共通のパッケージ
# There will be a new package, emacsen-common, which all of the
# various flavors of emacs will depend on, and which will contain
# emacs flavor independent files like debian-rundir and all the
# infrastructure implementing our mechanism for dealing with all the
# various emacsen.
emacsen-common なる新しいパッケージがあります。すべてのたくさんある emacs の
flavor はそれに依存していて、 debian-rundir やたくさんの emacsen すべて
を扱うためのメカニズムを実装した基礎構造といった emacs の flavor に依存し
ないファイルを収録しています。
#2) Flavor indication
2) flavor の印
# Each emacs binary will set the variable debian-emacs-flavor to be
# the same as the name of the debian-package. For example, the
# emacs20 package would do this in startup.el: (setq
# debian-emacs-flavor 'emacs20).
すべての emacs のバイナリは Debian パッケージの名前を debian-emacs-flavor
という変数に格納します。たとえば、 emacs20 パッケージは startup.el で
(setq debian-emacs-flavor 'emacs20)
とします。
#3) Emacs startup strategy
3) emacs の起動方法
# We'll have the following startup files/directories:
以下のような起動のためのファイルとディレクトリがあります。
emacsen-common: /etc/emacs/site-start.{el,d}
xemacs20: /etc/xemacs20/site-start.d
emacs19: /etc/emacs19/site-start.d
emacs20: /etc/emacs20/site-start.d
# /etc/emacs/site-start.el will now be a conffile, and will be owned
# by a new package emacsen-common. It will no longer have anything in
# it at all by default, and the local admin can use it for whatever.
/etc/emacs/site-start.el は今となっては環境ファイルであり、新しい
emacsen-common パッケージが所有しています。デフォルトではもはや内容はあり
ませんので、ローカルな管理者が好きなように使うことができます。
# The load-path for a given emacs flavor will include /etc/<flavor>
# and /etc/emacs in that order, and on startup each emacsen will call
# (debian-startup) and then load "site-start". This means that
# /etc/emacs/site-start.el will be loaded if it exists, unless there's
# an /etc/<flavor>/site-start.el{,c} or /etc/emacs/site-start.elc
# which will take precedence.
与えられた emacs flavor の load-path は /etc/<flavor>, /etc/emacs をその順
に含みます。そして、起動時にはそれぞれの emacsen は (debian-startup) を評
価し、 "site-start" を load します。これは、優先度の高い
/etc/<flavor>/site-start.el{,c} や /etc/emacsd/site-stat.elc が存在しなく
て /etc/emacs/site-start.el が存在しているときにはそれが load されることを
意味します。
# debian-startup will, for now, just turn into a call to
# debian-run-directories whose behavior is slightly different from the
# current debian-run-directory.
debian-startup は今のところ、単に現行 (訳注:今となっては古い) の
debian-run-directory とは少しだけ振舞いが違う debian-run-directories を呼
び出しているに過ぎません。
# debian-run-directories will take the union of all the file base
# names (i.e. without any .el or .elc extension, and without the
# directory component: i.e. /etc/xemacs/site-start.d/50foo.elc =>
# foo). Then then emacs load-path will be temporarily augmented to
# include /etc/<flavor>/site-start.d and /etc/emacs/site-start.d in
# that order. Once the list of file base names has been determined,
# emacs will call (load base-name) on each of them in alphabetical
# order. This means that .elc files will take precedence over .el
# files in a given directory, and files in the <flavor> site-start.d
# directory will take precedence over those in the emacs common
# directory.
debian-run-directories はすべてのファイルの base-name (すなわち拡張子の
. el や .elc を取って、ディレクトリも取ったものです。たとえば
/etc/xemacs/site-start.d/50foo.elc なら foo となります) の和集合を取ります。
そして、 emacs の load-path は一時的に /etc/<flavor>/site-start.d と
/etc/emacs/site-start.d もその順に含むようになります。一度ファイルの
base-name が決まったら、 emacs はそれぞれの base-name においてアルファベッ
ト順に (load base-name) を評価します。これは同じディレクトリでは .elc ファ
イルが .el よりも優先し、 <flavor> site-start.d ディレクトリにあるファイル
は emacs 共通のディレクトリにあるファイルよりも優先します。
# base name は base-name としておきました。もし base name を「基本名」
# と訳したとすると、訳文に唐突に (load base-name) が出てきて、読者が混
# 乱するかもしれないと思ったからです。
#4) Code locations
$) Emacs Lisp コードの場所
# In addition to the /etc/<emacs>/site-start* directories, we'll have
# the following directories (their use will be described shortly).
/etc/<emacs>/site-start* ディレクトリに加えて、以下のようなディレクトリ
(使い方はちょっとだけ述べます) もあります。
emacsen-common: /usr/share/emacs/site-lisp/
xemacs20: /usr/share/xemacs20/site-lisp/
emacs19: /usr/share/emacs19/site-lisp/
emacs20: /usr/share/emacs20/site-lisp/
# These will be treated as part of the normal emacsen load path with
# the <flavor> dir taking precedence over the emacs (common) dir.
これらのディレクトリは通常の emacsen の load-path の要素となります。また、
<flavor> ディレクトリは共通のディレクトリをよりも優先します。
# /usr/share/<flavor>/site-lisp will be a symlink to the normal
# site-lisp directory for that flavor of emacs. For example:
/usr/share/<flavor>/site-lisp はその flavor における通常の site-lisp ディ
レクトリのシンボリックリンクとなります。たとえば、
/usr/share/emacs20/site-lisp -> ../../emacs/20.2/site-lisp
となります。
#5) Packages with only marginal emacs relevance
5) ほんの少ししか emacs に関連しないパッケージ
# Generally, if a normal package just contains some emacs helper
# files, and does not need to perform any byte-compilation or other
# emacs dependent activities upon installation (for performance or
# other reasons), then it is not necessary to specify a dependency on
# emacsen or any flavor of emacs, and the package may just include
# files located in the standard emacs add-on directories.
一般に、通常のパッケージがいくつかのヘルプファイルだけ収録し、インストー
ル時においてバイトコンパイルなどの emacs 独自の行動を行わなくて済む場合
(パフォーマンスなどの理由で) 、 emacsen や emacs の flavor のどれにも依存
関係を指定する必要はありません。そして、通常の emacs のアドオンディレクト
リに置かれるファイルのみを収録するかもしれません。
#6) Emacs add-on package support (there are examples later which make
# this much clearer)
6) アドオンパッケージのサポート
(もっともっとわかりやすくするよう後に例を示します)
# A) Each package may place a file named the same as the package into
A) それぞれのパッケージは
/usr/lib/emacsen-common/packages/install/
/usr/lib/emacsen-common/packages/remove/
にパッケージ名と同じ名前のファイルを置き、
# and the package must call
/usr/lib/emacsen-common/emacs-package-install foo
# in the postinst and
をインストール後に、
/usr/lib/emacsen-common/emacs-package-remove foo
# in the prerm.
をアンインストール前に実行します。
# For now, "emacs-package-install foo" will conceptually just turn
# into a call for the common package emacs, and for each installed
# flavor to
今のところ "emacs-package-install foo" は概念的に共通の emacs パッケー
ジに対してとそれぞれのインストールされた flavor に対してただ
/usr/lib/emacsen-common/packages/install/foo
を実行しているだけです。
# The arguments to these scripts will be the flavor being installed
# (or just the common name "emacs") followed by a list of other
# flavors already installed, potentially including the current one.
これらのスクリプトの引数はインストールされた flavor (あるいは単に共通名
である "emacs" か) と、すでにインストールされた他の flavor のリストです。
もしかすると、そのリストには現在の flavor が含まれるかも知れません。
# So if emacs20 and xemacs20 were installed, installing foo would
# result in calls to:
従って、 emacs20 と xemacs20 がインストールされているならば、 foo をイ
ンストールするときには、
/usr/lib/emacsen-common/packages/install/foo emacs emacs20 xemacs20
/usr/lib/emacsen-common/packages/install/foo emacs20 emacs20 xemacs20
/usr/lib/emacsen-common/packages/install/foo xemacs20 emacs20 xemacs20
を実行することになります。
# emacs-package remove would do the symmetric thing.
emacs-package-remove は動作が対称的になります。
# 多分 emacs-package-remove の typo だと思います。
# B) Each emacsen main package will have a call to
# "/usr/lib/emacsen-common/emacs-install <flavor> in its postinst
# and a call to "/usr/lib/emacsen-common/emacs-remove <flavor> in
# it's prerm.
B) それぞれの emacsen パッケージはインストール後に
"/usr/lib/emacsen-common/emacs-install <flavor>"
を実行し、アンインストール前に
"/usr/lib/emacsen-common/emacs-remove <flavor>" を実行します。
# The emacs-install script (for now) just executes
emacs-install スクリプトは (今のところ) 単にインストールされた <pkg> 各々
について
/usr/lib/emacsen-common/packages/install/<pkg> <flavor> <others>
# for each installed <pkg>, but might do more later. Similarly,
# emacs-remove would just be equivalent to
を実行しているだけですが、後には他のこともやるかもしれません。
同様に、 emacs-remove は今のところ単に
/usr/lib/emacsen-common/packages/remove/<pkg> <flavor> <others>
と同じです。
# for now. Don't forget that the argument list to the add-on
# package install scripts will indicate both the flavor being
# installed, and the flavors already installed. In this case,
# since we're actually installing a flavor, the first argument
# won't appear in the subsequent arguments.
アドオンパッケージのインストールスクリプトに渡される引数リストはインス
トールしている flavor とすでにインストールされた flavor の両方を指し示
すことを忘れないでください。この場合、我々は実際に flavor をインストー
ルしているので、最初の引数は残りの引数には現れません。
# C) Each add-on package has the right to place files into the
# following directories:
C) それぞれのアドオンパッケージは以下のディレクトリにファイルを置く権利が
あります。
/etc/<emacs>/site-start.d
/usr/share/<emacs>/site-lisp/<package-name>
# D) Each add-on package needs to declare relevant dependencies on
# other packages (including other add-on packages). Note that
# add-on packages should not depend on emacsen-common directly, but
# rather on either the virtual package "emacsen" (see below), or
# some appropriate combination of flavors (i.e. Depends: emacs20 |
# emacs19). In addition, any tools needed by the install/remove
# scripts must be listed as package dependencies. For example,
# many add-on packages will probably use make in the install
# script, so they need to add "Depends: make" to their control
# file.
D) それぞれのアドオンパッケージは (他のアドオンパッケージも含め) 他のパッ
ケージとの依存関係を宣言する必要があります。アドオンパッケージは直接
emacsen-common に依存するのではなく、仮想パッケージの "emacsen" (以下参
照) か正しい flavor の組み合わせ (すなわち、 Depends: emacs20 |
emacs19) に依存するようにすべきであることを言っていきます。加えて、
install/remove スクリプトが必要とするツールは Depends のリストに入って
いなければなりません。たとえば、たくさんのアドオンパッケージは多分
install スクリプトで make を使うため、 control ファイルに "Depends:
make" と加える必要があります。
#7) Mandatory binary symlink
7) バイナリのシンボリックリンクは必須
# Each emacsen main package will have a symlink
# /usr/bin/<package-name> to /usr/bin/<emacs-binary> so that when
# add-on package install/remove scripts are called, they can just use
# /usr/bin/$ARGV[0] to get the right binary for byte-compilation.
それぞれの emacsen メインパッケージは /usr/bin/<emacs-binary> へのシンボリッ
クリンク /usr/bin/<package-name> を含んでいます。そのため、アドオンパッケー
ジの install/remove スクリプトが呼ばれたとき、バイトコンパイルのために適切
なバイナリを得るためには単に /usr/bin/$ARGV[0] を使うことができます。
#8) Virtual package
8) 仮想パッケージ
# Each emacsen main package will "Provides: emacsen". It would be
# nice to use "emacs", but for historical reasons, and given the
# nature of the packaging system, we can't.
それぞれの emacsen メインパッケージは "Provides: emacsen" となっています。
"emacs" を使うのが良いでしょうが、歴史的理由と、パッケージ体系の性質を考え
ると、それはできません。
# Packages that just need to make sure some flavor of emacs is
# installed should just "Depends: emacsen". If they depend on
# specific flavors of emacs, then they should list those dependencies
# explicitly instead.
単にどれかの flavor がインストールされていることが必要なだけなパッケージな
ら、ただ "Depends: emacsen" とすべきです。もし、特定の flavor に依存してい
るのなら、 "emacsen" とするのでなく明白に flavor のリストとすべきです。
#9) Emacs lisp load path.
9) Emacs Lisp の load-path
# At a minimum, each emacs will have the following in the given order
# in their load path:
最低限、それぞれの emacs の load-path は以下のような順のリストを含みます。
/etc/<flavor>
/etc/emacs
/usr/local/share/emacs/<upstream>/site-lisp
/usr/local/share/emacs/site-lisp
/usr/share/emacs/<upstream>/site-lisp
/usr/share/emacs/site-lisp
# where <upstream> is the normal emacs upstream version number for
# the relevant flavor like 20.2 or 19.34. The symlink mentioned in
# (4) will also effectively add
ここで <upstream> は 20.2、 19.34 といった関連した flovor に対する通常の上
流バージョン番号です。 (4) で述べたシンボリックリンクは
/usr/local/share/emacs/<upstream>/site-lisp
と同じ場所に
/usr/local/share/emacs/<flavor>/site-lisp
も加えます。
# /usr/local/share/emacs/<flavor>/site-lisp
#
# in the same position as
#
# /usr/local/share/emacs/<upstream>/site-lisp
#10) Usage of autoload instead of load in the site-start.d files.
10) site-start.d においては load の代わりに autoload を使う
# It's been suggested, and is probably a good idea that maintainers
# switch to using autoload rather than load when possible in their
# site-start.d files.
開発者が site-start.d においてできる限り load から autoload に切替えること
は推奨されていますし、多分良い考えです。
# For example, instead of (load "some-package), you should use
# autoloads for all the top level, user visible functions. Currently
# the calc package has a good example of this.
たとえば (load "some-package") の代わりに、ユーザが見ることのできる上位の
関数には autoload を使うべきです。今のところ calc パッケージがこれの良い例
です。
#That's it. I think this gives the add-on package maintainers the
#flexibility they need to be able to DTRT, and I think the common case
#won't be all that difficult.
これでおしまいです。これはアドオンパッケージの開発者にとって DTRT 可能にす
るために必要な柔軟性を提供していると考えています。また、一般的な場合はそん
なに難しくないと考えています。
#Examples:
例:
#1) Xemacs20 and the add-on packages tm and auctex are already installed,
# and now someone installs emacs20.
1) xemacs20 とアドオンパッケージの tm と auctex はすでにインストールされて
いて、今 emacs20 をインストールします。
# In it's postinst, emacs20 would make this call:
インストール後には emacs20 は
/usr/lib/emacsen-common/emacs-install emacs20
を実行します。
# which would result in calls to
これは、
/usr/lib/emacsen-common/packages/install/auctex emacs xemacs20
/usr/lib/emacsen-common/packages/install/auctex emacs20 xemacs20
/usr/lib/emacsen-common/packages/emacs20/install/tm emacs xemacs20
/usr/lib/emacsen-common/packages/emacs/install/tm emacs20 xemacs20
を実行することになります。
#2) Now, given (1), assume that someone removes xemacs20.
2) 今、 (1) の状態で xemacs20 をアンインストールするとします。
# In it's postinst, xemacs20 would make this call:
アンインストール前には xemacs20 は
# 文脈から判断して postinst は prerm の typo でしょう
/usr/lib/emacsen-common/emacs-remove xemacs20
を実行します。
# which would result in calls to
これは、
/usr/lib/emacsen-common/packages/remove/auctex emacs emacs20 xemacs20
/usr/lib/emacsen-common/packages/remove/auctex xemacs20 emacs20 xemacs20
/usr/lib/emacsen-common/packages/remove/tm emacs emacs20 xemacs20
/usr/lib/emacsen-common/packages/remove/tm xemacs20 emacs20 xemacs20
を実行することになります。
#3) Now assume emacs20 and xemacs20 are installed, and that someone removes
# tm.
3) 今、 emacs20 と xemacs20 がインストールされていて tm をアンインストール
するとします。
# The call to emacsen-package-remove in tm's prerm will result in
# the following calls:
tm のアンインストール前 emacsen-package-remove を実行しますが、それは
/usr/lib/emacsen-common/packages/remove/tm emacs emacs20 xemacs20
/usr/lib/emacsen-common/packages/remove/tm emacs20 emacs20 xemacs20
/usr/lib/emacsen-common/packages/remove/tm xemacs20 emacs20 xemacs20
を実行することになります。
# In the remove/tm file, tm is responsible for cleaning up any files
# it put into it's allowed locations:
remove/tm ファイルにおいて、 tm は許可された場所である
/etc/<emacs>/site-start.d/
/usr/share/<emacs>/site-lisp/tm
に置かれたいかなるファイルも削除する責任があります。
#4) Finally, here are sample install and remove scripts for a
# hypothetical package "foo" that only needs to byte compile a list
# of files for each flavor:
4) 最後に、それぞれの flavor に対して一束のファイルをバイトコンパイルする
ことだけが必要な仮定上のパッケージ "foo" に対する install/remove スクリ
プトのサンプルを示します。
#!/bin/sh
# /usr/lib/emacsen-common/packages/install/foo
# # [ This particular script hasn't been tested, so be careful. ]
# [この特別なスクリプトはテストしていませんので注意してください。]
set -e
FLAVOR=$1
# echo install/foo: Handling install of emacsen flavor ${FLAVOR}
echo install/foo: emacsen flavor ${FLAVOR} のインストールをします。
byte_compile_options="-batch -f batch-byte-compile"
el_files="some-file.el some-other-file.el etc.el"
el_dir=/usr/share/emacs/site-lisp/foo/
elc_dir=/usr/share/${FLAVOR}/site-lisp/foo/
el_path_list=`echo ${el_files} | perl -pe 's|^|${el_dir}|o'`
elc_path_list=`echo ${el_files} | perl -pe 's|^|${elc_dir}|o'`
if [ ${FLAVOR} != emacs ]
then
# echo install/foo: byte-compiling for ${FLAVOR}
echo install/foo: ${FLAVOR} に対するバイトコンパイルをします。
# # Copy the temp .el files
# 一時的に .el ファイルをコピーします。
cp ${el_path_list} ${elc_dir}
# # Byte compile them
# バイトコンパイルします。
${FLAVOR} ${byte_compile_options} ${el_path_list}
# # remove the redundant .el files
# # presumes that any .el files in the <flavor> dir are trash.
# 余分な .el ファイルを削除します。
# <flavor> ディレクトリにあるいかなる .el は削除されるだろう。
rm ${elc_dir}/*.el
fi
exit 0;
#!/bin/sh
# /usr/lib/emacsen-common/packages/remove/foo
# # [ This particular script hasn't been tested either, so be careful. ]
# [この特別なスクリプトはテストしていませんので注意してください。]
set -e
FLAVOR=$1
# echo remove/foo: Handling removal of emacsen flavor ${FLAVOR}
remove/foo: emacsen flavor ${FLAVOR} のアンインストールをします
if [ ${FLAVOR} != emacs ]
then
# echo emacsen-common: purging byte-compiled files for ${FLAVOR}
echo emacsen-common: ${FLAVOR} に対してバイトコンパイルされたファイルを削除します。
rm -f /usr/share/${FLAVOR}/site-lisp/foo/*.elc
fi
exit 0;
--
Takashi Nishimoto: g96p0935@xxxxxxxxxxxxxxxx
I love Emacs, zsh, and Linux!!
See ftp://ftp.misao.gr.jp/pub/tak/README