13.2. Emacs Lisp のパッケージ

Emacsen には emacsen-common というパッケージがあり、 インストールされている Emacsen の FLAVOR の情報や、 FLAVOR ごとに、その FLAVOR で byte compile された Emacs Lisp パッケージのリストを管理するという仕組みがあります。

この仕組みを用いることで以下のようなことが可能となっています。

  • パッケージのインストール時に、すでにインストールされている Emacsen の FLAVOR ごとにそれぞれ byte compile して elc ファイルを作成する。

  • パッケージのアンインストール時に、すべての FLAVOR からパッケージの elc ファイルを削除する。

  • Emacsen の FLAVOR のインストール時、アンインストール時に、その FLAVOR で byte compile する、FLAVOR で byte compile した elc を削除する。

この仕組みを利用するために、Emacs Lisp のパッケージでは以下のようなことをしておきます。

  • %installタグの部分では byte compile していない el ファイルを %{_datadir}/emacs/site-lisp/%{name} 以下にインストールします。

  • Source2 や Source3 などに byte-compile と install を行うためのスクリプトAと、 byte-compile してできた elc ファイルを削除するためのスクリプトBを用意します。 インストールに使える Makefile 等がある場合は %installタグの部分で %{_datadir}/emacs/site-lisp/%{name} 以下に Makefile 等をインストールしておき、 スクリプトの中から利用できるようにします。

  • install 用のスクリプトAでは、 Emacsen の FLAVOR に応じて %{_datadir}/FLAVOR/site-list/%{name}/ 以下に bytecompile した elc ファイルをインストールするようにします。

  • uninstall 用のスクリプトBでは、 Emacsen の FLAVOR に応じてスクリプトAでインストールした elc ファイルを削除するようにしておきます。

  • %installタグの部分で次のようにして、スクリプトAとスクリプトBをインストールします。

    %_installemacsenscript %{name} %{SOURCE2}
    
    %_removeemacsenscript  %{name} %{SOURCE3}
    
    

    スクリプトA,B はそれぞれ /usr/lib/emacsen-common/packages/install/ , /usr/lib/emacsen-common/packages/remove/ に、 %{name} という名前でインストールされます。 これによって、スクリプトA,B は、Emacs の FLAVOR がインストール、アンインストールされた時に実行されるようになります。

    %files の部分でそれぞれのスクリプトを記述しておきます。

    %{_libdir}/emacsen-common/packages/install/%{name}
    %{_libdir}/emacsen-common/packages/remove/%{name}
  • %postタグの部分は次のように記述しておきます。 if [ "$1" = 数字 ]; then ; fi は、インストール時、アップグレード時、アンインストール時、それぞれで違う動作をさせるためのものです。付録A RPMパッケージをつくるときの注意を参照してください。

    %post
    #
    # bytecompile and install
    #
    
    if [ "$1" = 2 ]; then
    %_emacsenPackageRemove %{name}
    
    fi
    
    %_addemacsenlist %{name}
    
    %_emacsenPackageInstall %{name}
    
    %preun
    
    if [ "$1" = 0 ]; then
    %_emacsenPackageRemove %{name}
    
    %_removeemacsenlist %{name}
    
    fi
    

    %_emacsenPackageInstall と %_emacsenPackageRemove は スクリプトA,B を実行するためのマクロです。

    %_addemacsenlist と %_removeemacsenlist は、インストール済み Emacs Lisp パッケージのリストにパッケージを登録する、削除するというマクロです。

    %_installemacsenscript, %_removeemacsenscript, %_emacsenPackageRemove, %_addemacsenlist, %_removeemacsenlist の行の次の行は、空行にしておかないとエラーとなるようです。