mingw32/MSYS2ビルドはデフォルトではIPv6未対応
Windows版のEmacsには様々なパッチと、パッチの数だけの多種のバイナリが配布されているが、本家のリファレンスである MSYS2 (64ビット)で構築したバイナリはIPv6が無効になっていて、(open-network-stream ...)
関数などでIPv4ソケットしか作れない。IPv6 only + NAT64環境で、elispアプリが使えないため気づいた。
本家のリファレンスのほか、mingw32/MSYS2環境でビルドされているほとんど大多数のWindows版EmacsバイナリではIPv6が使えない。
IPv6を有効化するパッチ
パッチのダウンロード: emacs-25.1-mingw32-ipv6.diff
変更点
- ./configure が ws2_32.{lib,dll} にある getaddrinfo(), gai_strerror() を検出できないのでチェックルールを書き足す
- Emacs for Windowsでソケット(WinSock2)関係の関数は ws2_32.dll から直接エントリポイントを読み取ってコールする作りになっているので該当処理を書き足す
その他の有用なパッチとビルド手順
実用的に使うためには、それぞれ欲しい機能を取り込んでビルドする必要があるが、よく知られたパッチとビルド手順はここで一通りまとめられている。