※実験です。
動機
- 正直何をしたいのか分からないタイトルになった.
- NTEmacsはMSYS2を使ってビルドされることが一般的だが, Cygwinでも出来ないかと試してみた.
- 以前にビルドしたCygwinに依存するNTEmacsでは, 非力なWindowsマシンにおいてflycheck等で遅延が大きく実用に耐えなかったので何とかならないかを模索してる一環で試してみた.
前提 (実施環境)
ビルドする
基本的にはnt/INSTALLに記載されている方法と同様. 今回は実験的な意味合いが強いので, IMEパッチ等は当てずに実施. cygwin1.dllに依存させないようにするため, コンパイラはMinGWを使用する.
事前準備
ビルド方法
$ ./autogen.sh
configureスクリプトに対してMinGWを使うことを指定する. 今回は下記のようにCCも指定したが–buildオプションがあれば十分?
$ PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig CC='x86_64-W64-mingw32-gcc' CLFAGS='-g3 -O2 -gdwarf-2' ./configure --build=x86_64-w64-mingw32 --prefix=/path/to/install --with-w32 --with-modules --without-dbus --without-compress-install
ここからは今回詰まったところ.
上記のままconfigureスクリプトを実行すると下記のようなメッセージが表示される. pwdコマンドの実行が失敗しているようだ. build-aux/msys-to-w32の実行で起きているため, このスクリプトを見てみると"pwd -W"というコマンドを実行している.
~中略~ config.status: executing src/epaths.h commands ./build-aux/msys-to-w32: line 79: pwd: -W: invalid option pwd: usage: pwd [-LP] ~中略~
MSYS2のpwdコマンドでは, -Wオプションを付けることによってWindowsのドライブ始まりのパスを取得することができるようだ.
$ pwd -W C:/msys64/usr/lib
この状態でmakeを走らせたところtemacsを実行する際にエラーとなった. どうやらパスの扱いが上手く行っていないらしい.
$ export PATH=$PATH:/usr/x86_64-w64-mingw32/sys-root/mingw/bin $ make -j8 ~中略~ ./temacs --batch --load loadup bootstrap Warning: arch-independent data dir '/cygdrive/c/path/to/work/test_install/share/emacs/25.2/etc/': Permission denied Warning: Lisp directory '/cygdrive/c/path/to/work/emacs-25.2/emacs/lisp': Permission denied Error: charsets directory not found: c:/path/to/work/test_install/share/emacs/25.2/etc/charsets Emacs will not function correctly without the character map files. Please check your installation!
MSYS2側で試しにビルドを行ってみると, src/epaths.hに定義されている値のうちPATH_DUMPLOADSEARCHがドライブ始まりのパスとなっていたため, これに合わせてsrc/epaths.hを変更する.
- 変更前:#define PATH_DUMPLOADSEARCH “/cygdrive/c/path/to/work/emacs-25.2/emacs/lisp”
- 変更後:#define PATH_DUMPLOADSEARCH “c:/path/to/work/emacs-25.2/emacs/lisp”
あとは再度makeを走らせるだけ.
$ make -j8 $ make install
インストールし終わったあとはMSYS2と同様に各種dllへのパスを通すなどの設定が必要になるが, とりあえず起動することは確認できた. やはりこんなコーナーケースは考慮されていないようだ. 今回はsrc/epaths.hを修正する方法を取ったが, build-aux/msys-to-w32を修正する方が良さそう.