Next: , Up: GNU Emacsの内部   [Contents][Index]


E.1 Emacsのビルド

このセクションではEmacs実行可能形式のビルドに関するステップの説明をします。makefileがこれらすべてを自動的に行うので、Emacsをビルドやインストールをするためにこの題材を知る必要はありません。この情報はEmacs開発者に適しています。

EmacsのビルドにはGNU Makeのバージョン3.81以降が必要です。

srcディレクトリー内のCソースファイルをコンパイルすることにより、temacsと呼ばれる実行可能形式ファイルが生成されます。これはbare impure Emacs(裸で不純なEmacs)とも呼ばれます。これにはEmacs LispインタープリターとI/Oルーチンが含まれますが編集コマンドは含まれません。

コマンドtemacs -l loaduptemacsを実行してloadup.elをロードするように計らいます。loadupライブラリーは通常のEmacs編集環境をセットアップする追加のLispライブラリーをロードします。このステップの後にはEmacs実行可能形式はbare(裸)ではなくなります。

標準的なLispファイルのロードには若干の時間を要するので、ユーザーが直接temacs実行可能形式を実行することは通常はありません。そのかわり、Emacsビルドの最終ステップの1つとしてコマンド‘temacs -batch -l loadup --temacs=dump-methodが実行されます。特別なオプション--temacstemacsにたいして、この後に続けてEmacsを実行した際に開始がより高速になるように、標準のすべての事前ロードされるLispの関数と変数の記録方法を指示します。オプション--temacsには引数dump-methodが必要であり、以下のいずれかを指定できます:

pdump

ダンプファイル(dump file)に事前ロードLispデータを記録する。このメソッドはEmacsの開始時にロードされることになる追加データファイルを生成する。生成されたダンプファイルは通常はemacs.pdmpと呼ばれて、Emacsのexec-directoryにインストールされる(ヘルプ関数を参照)。これはモダンなシステムにおいてセキュリティとプライバシーを強化するために使用されるさまざまなメモリーレイアウト技術を妨害する可能性のある、メモリー割り当ての特別なテクニックの使用をEmacsに要求しないので、もっとも好ましいメソッドの1つ。

pbootstrap

pdump’と同様だが、以前のEmacsバイナリおよびバイトコンパイル済みLispファイル*.elcが存在しないときに、Emacsのブートストラップ(bootstrapping)の間に使用される。この場合には、生成されるダンプファイルは通常はbootstrap-emacs.pdmp

dump

このメソッドはすべての標準Lispファイルがすでに事前ロード済みのemacsという実行可能プログラムをtemacsにダンプさせる(‘-batch’引数はtemacsにその端末上のすべてのデータ初期化の試みを抑制するので、ダンプされたEmacsの端末情報テーブルは空になる)。このメソッドは実行中プロセスからプログラムファイルを生成するため、プログラムを実行(exec)してプロセスを開始することとある意味で反対なことからunexecとして知られている。このメソッドは伝統的にEmacsの状態を保存する手段だったが、今や非推奨となった。

bootstrap

dump’と同様だが、unexecメソッドでEmacsをブートストラップする際に使用する。

インストールされるEmacsは、ダンプされたemacs実行可能形式です(pureなEmacsとも呼ばれる)。Emacsのビルドにポータブルダンパーを使用した場合には、emacs実行可能形式は実際にはtemacsの正確なコピーであり、対応機種emacs.pdmpファイルも同様にインストールされます。変数preloaded-file-listにはダンプファイルやダンプされたEmacs実行可能形式に記録された事前ロード済みLispファイルのリストが格納されます。新たなオペレーティングシステムにEmacsをポートする際に、そのOSが何の種類のダンプも実装していなければEmacsは起動時に毎回loadup.elをロードしなければなりません。

ダンプされたemacsにはデフォルトではビルド時刻やホスト名のような詳細が記録されます。これらの詳細を抑制するためにconfigureのオプションに--disable-build-detailsを使用すれば、同一のソースからEmacsを2回ビルドしてインストールする際に同一のEmacsのコピーが生成される可能性が高くなります。

site-load.elという名前のライブラリーを記述することにより、事前ロードするファイルを追加指定できます。追加するファイルを保持するために純粋(pure)なスペースnバイトを追加するように、以下の定義

#define SITELOAD_PURESIZE_EXTRA n

でEmacsをリビルドする必要があるでしょう。src/puresize.hを参考にしてください(十分大きくなるまで20000ずつ増加させる)。しかし追加ファイルの事前ロードの優位はマシンの高速化により減少します。現代的なマシンでは通常はお勧めしません。

loadup.elsite-load.elを読み込んだ後にSnarf-documentationを呼び出すことにより、それらが格納された場所のファイルetc/DOC内にあるプリミティブと事前ロードされる関数(と変数)のドキュメント文字列を探します(Accessing Documentationを参照)。

site-init.elという名前のライブラリー名に配置することにより、ダンプ直前に実行する他のLisp式を指定できます。このファイルはドキュメント文字列を見つけた後に実行されます。

関数や変数の定義を事前ロードしたい場合には、それを行うために3つの方法があります。それらにより定義ロードしてその後のEmacs実行時にドキュメント文字列をアクセス可能にします:

通常の未変更のEmacsでユーザーが期待する何らかの機能を変更するような何かをsite-load.elsite-init.el内に配置することはお勧めしません。あなたのサイトで通常の機能をオーバーライドしなければならないと感じた場合には、default.elでそれを行えばユーザーが望む場合にあなたの変更をオーバーライドできます。要約: スタートアップ時のアクション順序を参照してください。site-load.elsite-init.elのいずれかがload-pathを変更する場合には変更はダンプ後に失われます。ライブラリー検索を参照してください。load-pathを永続的に変更するにはconfigure--enable-locallisppathオプションを指定してください。

事前ロード可能なパッケージでは、その後のEmacsスタートアップまで特定の評価の遅延が必要(または便利)なことがあります。そのようなケースの大半はカスタマイズ可能な変数の値に関するものです。たとえばtutorial-directoryは事前ロードされるstartup.el内で定義される変数です。これのデフォルト値はdata-directoryにもとづいてセットされます。この変数はEmacsダンプ時ではなくスタート時にdata-directoryの値を必要とします。なぜならEmacs実行可能形式はダンプされたものなので、恐らく異なる場所にインストールされるからです。

Function: custom-initialize-delay symbol value

この関数は次回のEmacs開始までsymbolの初期化を遅延する。通常はカスタマイズ可能変数の:initializeプロパティとしてこの関数を指定することにより使用する(引数valueはフォームCustom由来の互換性のためだけに提供されており使用しない)。

custom-initialize-delayが提供するより一般的な機能を要する稀なケースではbefore-init-hookを使用できます(要約: スタートアップ時のアクション順序を参照)。

Function: dump-emacs-portable to-file &optional track-referrers

この関数はpdumpメソッドを使用して、Emacsのカレント状態をダンプファイルto-fileにダンプする。ダンプファイルは通常はemacs-name.dmpと呼ばれる。ここでemacs-nameはEmacsの実行可能形式ファイル名。オプション引数track-referrersが非nilなら、ポータブルダンパーはpdumpメソッドでは未サポートのオブジェクトタイプの出所追跡の助けとなる追加情報を維持する。

多くのプラットフォームでポータブルダンパーのコードが実行可能だとしても、それが生成するダンプファイルに可搬性はない(ダンプしたEmacs実行可能形式だけがロードできる)。

すでにダンプ済みのEmacs内でこの関数を使用する場合には‘-batch’オプションでEmacsを実行しなければならない。

ダンプ済みのEmacsに‘.el’ファイルが含まれていて、かつその‘.el’ファイルには通常はロード時に実行されるコードがある場合には、ダンプ後にEmacsを起動する際にそのコードは実行されないだろう。この問題を回避するために、after-pdump-load-hookフックに関数を配置することができる。このフックはEmacs起動時に実行される。

Function: dump-emacs to-file from-file

この関数はunexecメソッドを使用して、Emacsのカレント状態を実行可能ファイルto-fileにダンプする。これはfrom-file (通常はファイルtemacs)からシンボルを取得する。

この関数をすでにダンプ済みのEmacsで使用することはできない。この関数は非推奨であり、Emacsはデフォルトではunexecサポートなしでビルドされているので利用できない。

Function: pdumper-stats

カレントのEmacsセッションの状態がダンプファイルからリストアされると、この関数はダンプファイルに関する情報とEmacs状態のリストアに要した時間をリターンする。値は((dumped-with-pdumper . t) (load-time . time)  (dump-file-name . file))のようなalist。ここでfileはダンプファイル名、timeはダンプファイルから状態をリストアするのに要した秒数。カレントセッションがダンプファイルからリストアされたものでなければ値はnil