6

el-get を使用した最後の cedet のインストール中に、windows で expand-file-name 関数の奇妙な動作に遭遇しました。この問題は、オートロードの生成に関連しています。

最後の emacs 24.1.50 の autoload.el には、次の関数が含まれています。

(defun autoload-generated-file ()
  (expand-file-name generated-autoload-file
                ;; File-local settings of generated-autoload-file should
                ;; be interpreted relative to the file's location,
                ;; of course.
                (if (not (local-variable-p 'generated-autoload-file))
                    (expand-file-name "lisp" source-directory))))

私の場合、 generated-autoload-file は次のとおりです。

"/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el" 

$HOME$ 環境変数が C:/home/ngulyamov を指しているためです。この場合、上記の関数は次を返します。

"d:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el" 

ソースディレクトリが含まれているため:

"d:/devel/emacs/emacs-bzr/trunk_jenkins/".

ご覧のとおり、ドライブ文字が C: から D: に変更されます。同時に、emacs 23.3 では、source-directory に値が含まれているため、この関数は半正確な値を返します。

"c:/Users/Sean/Downloads/emacs-23.3/".

expand-file-name 関数の説明によると:

(expand-file-name NAME &optional DEFAULT-DIRECTORY)

ファイル名 NAME を絶対形式に変換し、正規化します。2 番目の引数 DEFAULT-DIRECTORY は、NAME が相対パス (スラッシュまたはチルダで始まらない)の場合に開始するディレクトリです。DEFAULT-DIRECTORY が nil または見つからない場合、現在のバッファの値 `default-directory' が使用されます。

Windows のパスは、スラッシュまたはチルダから始まることはありません。

ここで私の質問: 1. expand-file-name 関数の動作は Windows で正しいですか? 2. source-directory に開発者パスの値が含まれているのはなぜですか?

Windows で expand-file-name をバグと見なすことはできますか? それとも、autoload.el で間違って使用されているのでしょうか?

前もって感謝します。

4

1 に答える 1

2

やっとその理由がわかりました。この問題は、make 3.8 の $(abspath) 機能を使用する cedet の Makefile から発生しています。この場合、make の cygwin バージョンは UNIX 方式のパス、つまり /home/ngulyamov/... を返します。これは、d:/home/ngulyamov/... による自動ロードでソース ディレクトリ ルートに置き換えられます。make の GnuWin32 バージョン正しく動作しますが、奇妙な理由により、次の問題があります。

C:\home\ngulyamov\.emacs.d\el-get\cedet>\gnuwin32\bin\make all
Removing loaddefs.el files from subprojects.
Generating autoloads.
make[1]: Entering directory `C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet'
    > autoloads
Wrote C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/loaddefs.el
Loading vc-bzr...
Generating autoloads for C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/cedet-android.el...
Memory exhausted--use C-x s then exit and restart Emacs
make[1]: *** [autoloads] Error 127

そのため、autoload.el 自体で source-directory を次のように指定するというダーティ フィックスがあります。

(setq-default source-directory "C:/home/ngulyamov/.emacs.d/")

とにかく、source-directory が開発者のコ​​ンピューター パスを指している理由は開いたままです。

于 2012-05-14T13:05:55.367 に答える