本節では、Emacsの実行ファイルをビルドする手順について説明します。makefileがこれらの処理をすべて自動的に行うため、Emacsをビルド・インストールする際にこの内容を把握しておく必要はありません。この情報は、Emacsの開発者向けの内容となります。
Emacsのビルドには、GNU Make バージョン 3.81 以降が必要です。
srcディレクトリ内のCソースファイルをコンパイルすると、temacsと呼ばれる実行ファイルが生成されます。これはベア・インピュアEmacsとも呼ばれます。これにはEmacs LispインタプリタとI/Oルーチンが含まれていますが、編集コマンドは含まれていません。
コマンド temacs -l loadup は temacs を実行し、loadup.el
をロードするよう指示します。loadup ライブラリは追加の Lisp
ライブラリをロードし、これにより通常の Emacs 編集環境が構築されます。このステップを経て、Emacs の実行ファイルはもはや 素の状態 ではなくなります。
標準のLispファイルの読み込みには時間がかかるため、temacs
実行ファイルは通常、ユーザーによって直接実行されることはありません。代わりに、Emacsのビルドにおける最終段階の一つで、コマンド
‘temacs -batch -l loadup --temacs=dump-method’ が実行されます。特殊なオプション --temacs は、すべての標準プリロード済みLisp関数と変数を記録する方法を temacs
に指示するもので、これによりその後Emacsを起動した際に、起動が大幅に速くなります。--temacs オプションには引数 dump-method
が必要であり、これは以下のいずれかになります:
プリロード済みのLispデータをダンプファイルに記録します。この方法では、Emacsが起動時に読み込む追加のデータファイルが生成されます。生成されるダンプファイルは通常emacs.pdmpと呼ばれ、Emacsのexec-directoryにインストールされます(ヘルプ関数を参照)。この方法は、Emacsがメモリ割り当ての特殊な手法を用いる必要がないため、最も推奨されます。そうした手法は、セキュリティやプライバシーを向上させるために現代のシステムで採用されているさまざまなメモリレイアウト手法の妨げになる可能性があるためです。
「pdump」と同様ですが、以前のEmacsバイナリや*.elcバイトコンパイル済みLispファイルがいずれも存在しない状態で、Emacsをブートストラップする際に使用されます。この場合、生成されるダンプファイルは通常bootstrap-emacs.pdmpという名前になります。
ダンプされた emacs 実行ファイル(ピュア Emacs
とも呼ばれる)がインストールされます。ポータブル版のダンパーを使用して Emacs をビルドした場合、emacs 実行ファイルは実際には temacs
の完全なコピーであり、対応する emacs.pdmp ファイルも併せてインストールされます。変数
preloaded-file-list には、ダンプファイルまたはダンプされた Emacs
実行ファイルに記録されているプリロード済み Lisp ファイルのリストが格納されます。Emacs
を新しいオペレーティングシステムに移植し、いかなる形式のダンプも実装できない場合は、Emacs は起動するたびに loadup.el をロードする必要があります。
デフォルトでは、ダンプされた emacs
実行ファイルにビルド時刻やホスト名などの詳細情報が記録されます。configure の
--disable-build-details
オプションを使用してこれらの詳細情報を抑制すれば、同一のソースから Emacs を2回ビルド・インストールした際に、同一の Emacs
コピーが得られる可能性が高まります。
追加のファイルをプリロードするには、それらを読み込む site-load.el という名前のライブラリを記述します。ただし、マシンの高速化に伴い、追加ファイルをプリロードするメリットは小さくなります。現代のマシンでは、通常推奨されません。
loadup.el が site-load.el
を読み込んだ後、Snarf-documentation
を呼び出すことで、プリミティブ関数やプリロード済み関数(および変数)のドキュメント文字列が格納されているファイル etc/DOC を探し出します(ドキュメントへのアクセス
を参照)。
ダンプの直前に実行する他のLisp式は、site-init.elという名前のライブラリに記述することで指定できます。このファイルは、ドキュメント文字列が見つかった後に実行されます。
関数や変数の定義をプリロードしたい場合、その後Emacsを起動した際にそれらのドキュメント文字列を参照できるようにする方法が3つあります:
byte-compile-dynamic-docstrings に nil の値を指定し、site-load.el または
site-init.el のいずれかで読み込んでください。(この方法には、ドキュメント文字列が常に
Emacs の領域を占有するという欠点があります。)
site-load.el や site-init.el に、通常の未変更の Emacs
でユーザーが期待する機能を変更するような内容を記述することは推奨されません。サイトに合わせて通常の機能を上書きする必要がある場合は、ユーザーが希望すればその変更を上書きできるよう、default.el を使用してください。概要:起動時の操作手順 を参照してください。なお、site-load.el または site-init.el
によって load-path が変更された場合、その変更はダンプ後に失われます。ライブラリ検索 を参照してください。load-path に恒久的な変更を加えるには、configure の --enable-locallisppath オプションを使用してください。
プリロード可能なパッケージでは、特定の評価をEmacsのその後の起動まで遅延させる必要がある(あるいは有用な)場合があります。こうしたケースの大部分は、カスタマイズ可能な変数の値に関するものです。例えば、tutorial-directoryはプリロードされるstartup.elで定義された変数です。デフォルト値はdata-directoryに基づいて設定されます。この変数は、ダンプ時ではなくEmacsの起動時にdata-directoryの値にアクセスする必要があります。というのも、Emacsの実行ファイルは、ダンプされて以来、おそらく別の場所にインストールされているためです。
この関数は、symbol の初期化を次回の Emacs
起動時まで遅延させます。通常、この関数はカスタマイズ可能な変数の :initialize
プロパティとして指定して使用します。(引数 value は使用されず、Custom
が想定する形式との互換性のためにのみ用意されています。)
万が一、custom-initialize-delay
が提供するものよりも汎用的な機能が必要な場合は、before-init-hook
を使用できます(概要:起動時の動作シーケンスを参照)。
この関数は、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の起動時に実行されます。
現在のEmacsセッションがダンプファイルから状態を復元した場合、この関数はダンプファイルに関する情報と、Emacsの状態を復元するのにかかった時間を返します。戻り値はalist
((dumped-with-pdumper . t) (load-time . time) (dump-file-name . file)) であり、file
はダンプファイル名、time
はダンプファイルから状態を復元するのにかかった時間(秒)です。現在のセッションがダンプファイルから復元されていない場合、戻り値は nil となります。