elc deletion option for install-elisp-module

qa3507 @ email.mot.com qa3507 @ email.mot.com
2002年 10月 4日 (金) 00:54:30 JST


はじめまして、森島と申します

最近から apel の ML に参加させていただいております。


APEL を利用している cmail の方で今回リリース担当をしておりまして、イン
ストール関連の更新作業を行っているのですが、パッケージの依存関係で .el 
をバイトコンパイルできずに .el のみをインストールしたい場合がでてきま
した。.el だけでもインストールされていれば後で依存パッケージがインストー
ルされた時にとりあえず動作させることが可能となります。

しかし、もし以前に既にコンパイル/インストールされている .elc がインス
トール先のディレクトリに残っている場合、古い .elc が混乱の原因になりか
ねません。

そこでインストールに際して elc がインストール先にある場合にこれを消去
するようにしたいのですが、このようなオプションを install-elisp-module 
と install-elisp-modules につけて頂くことは可能でしょうか。

手元では添付のようなパッチ(10.3ベース)をあててみてるのですが、こんな感
じを想定しています。cmail で what-where をやるとこんな感じで消去予定の
モジュールが表示されます。

cmail-bbdb.el -> c:/Meadow/site-lisp/cmail/options
cmail-bbdb.elc -> c:/Meadow/site-lisp/cmail/options
cmail-bbdb-pre2_34.el -> c:/Meadow/site-lisp/cmail/options
c:/Meadow/site-lisp/cmail/options/cmail-bbdb-pre2_34.elc -> to be deleted
cmail-bbdb-curver.el -> c:/Meadow/site-lisp/cmail/options
cmail-bbdb-curver.elc -> c:/Meadow/site-lisp/cmail/options

.el のみをインストールすることについては賛否両論あるかと思いますが、こ
れを含めてのコメントで構いませんのでフィードバックがあれば嬉しいです。

よろしくお願いいたします。

ちなみにインストール先をクリーンアップする uninstall の関数とかはない
んですよね。


Index: install.el
===================================================================
RCS file: /cvsroot/cmail/src/apel/install.el,v
retrieving revision 1.2
diff -u -r1.2 install.el
--- install.el	20 Jul 2002 23:09:57 -0000	1.2
+++ install.el	3 Oct 2002 12:21:38 -0000
@@ -88,7 +88,7 @@
 ;;; @@ install Emacs Lisp files
 ;;;
 
-(defun install-elisp-module (module src dest &optional just-print)
+(defun install-elisp-module (module src dest &optional just-print del-elc)
   (let (el-file elc-file)
     (let ((name (symbol-name module)))
       (setq el-file (concat name ".el"))
@@ -106,7 +106,12 @@
 	    (princ (format "%s -> %s\n" el-file dest)))))
       (setq src-file (expand-file-name elc-file src))
       (if (not (file-exists-p src-file))
-	  nil 
+	  (let ((full-path (expand-file-name elc-file dest)))
+	    (if (and del-elc (file-exists-p full-path))
+		(if just-print
+		    (princ (format "%s -> to be deleted\n" full-path))
+		  (delete-file full-path)
+		  (princ (format "%s -> deleted\n" full-path)))))
 	(if just-print
 	    (princ (format "%s -> %s\n" elc-file dest))
 	  (let ((full-path (expand-file-name elc-file dest)))
@@ -123,14 +128,14 @@
 		  (error (princ (format "%s\n" (nth 1 err)))))))
 	    (princ (format "%s -> %s\n" elc-file dest))))))))
 
-(defun install-elisp-modules (modules src dest &optional just-print)
+(defun install-elisp-modules (modules src dest &optional just-print del-elc)
   (or just-print
       (file-exists-p dest)
       (make-directory dest t))
   (mapcar
    (function
     (lambda (module)
-      (install-elisp-module module src dest just-print)))
+      (install-elisp-module module src dest just-print del-elc)))
    modules))




More information about the APEL-ja mailing list