Yearly Archives: 2019

2019-12-08

Windows用のEmacs26.3をMSYS2でビルドする方法(IMEパッチ、ImageMagick-6)

rzl24ozi’s gistsにIMEパッチが公開されている。README.txtに詳細なビルド方法が書いてあるのでよく読むこと。

1次情報としてはソースコードツリー内の nt/INSTALLnt/INSTALL.W64 にWindowsでのビルド方法が書いてある。

Emacs 26.2以降は最低限のIMEサポートがなされているらしいのでIMEパッチを適用しなくても公式ビルドで十分な場合もある。私の場合、ATOK使用時にCtrl+Nで部分確定した文字が正しく入力されなかった(Ctrl+各確定した文字…と解釈されてそんなキーバインドは無いと言われた)のでIMEパッチを使うことにした。

また、ImageMagickサポートがあると画像の拡大縮小ができて大きな画像も無理なく埋め込み表示出来るのでImageMagickパッチも適用することにした。

作業概要

MSYS2環境を構築(後述)してから、MinGW64のシェルから次の作業を行う。各ステップについての詳細は後述する。

# 作業用ディレクトリを作る
mkdir emacsbuild
cd emacsbuild
WORK_DIR=$(pwd)

# ImageMagickをダウンロードして展開してビルドする
IMAGEMAGICK_VER=ImageMagick-6.9.10-77
wget http://www.imagemagick.org/download/releases/$IMAGEMAGICK_VER.tar.gz
tar xvfz $IMAGEMAGICK_VER.tar.gz

IMAGEMAGICK_DIR=$WORK_DIR/ImageMagick-6
cd $IMAGEMAGICK_VER
./configure --host=x86_64-w64-mingw32 --enable-hdri --with-rsvg --prefix=$IMAGEMAGICK_DIR
make install
cd ..

# Emacsをダウンロードして展開する
EMACS_VER=emacs-26.3
wget http://ftp.gnu.org/gnu/emacs/$EMACS_VER.tar.gz
tar xvfz $EMACS_VER.tar.gz

# IMEパッチを当てる
wget https://gist.githubusercontent.com/rzl24ozi/ee4457df2f54c5f3ca0d02b56e371233/raw/16794e5883211049aed08c681f71240fa32cc28f/emacs-26.1-rc1-w32-ime.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

# ImageMagickパッチを当てる
wget https://gist.githubusercontent.com/rzl24ozi/2b6dd502f3e0fa5083fb87c808287370/raw/a56d6c576d3f4ca24f87ff7510498f588a67c236/emacs-26.1-rc1-mingw-imagemagick.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-mingw-imagemagick.diff

# ImageMagick関連dllファイル名をビルドしたバージョンに合わせて書き替える
mv $EMACS_VER/lisp/term/w32-win.el $EMACS_VER/lisp/term/w32-win.el.orig_patched
sed 's/-6\.Q16HDRI-5\.dll/-6.Q16HDRI-6.dll/g; s/-6\.Q16-5\.dll/-6.Q16-6.dll/g;' $EMACS_VER/lisp/term/w32-win.el.orig_patched > $EMACS_VER/lisp/term/w32-win.el

# Emacsをビルドする
EMACS_INSTALL_DIR=/c/app/$EMACS_VER
cd $EMACS_VER
./autogen.sh
PKG_CONFIG_PATH=$IMAGEMAGICK_DIR/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --without-dbus --with-gnutls --prefix=$EMACS_INSTALL_DIR
make -j4
make install-strip
cd ..

# dllをコピーする
cp /mingw64/bin/*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickCore*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickWand*.dll $EMACS_INSTALL_DIR/bin

Cygwin使用者への注意

Cygwinを使用している場合はCygwinの設定がMSYSと混ざらないように注意すること。

  • 環境変数HOMEが指している場所に.bashrcや.bash_profile等の設定ファイルがある場合は、それが読み込まれないようにする。そこにPKG_CONFIGやLIBRARY_PATH等の設定があるとうまくビルド出来ない。
  • PATHがCygwinのツールを参照していると問題を起こす場合がある(特にテキストマウントによる改行コードの問題)ので、PATHからCygwin関連へのパスを外す等する。

環境変数HOMEがCygwinの設定ファイルがあるディレクトリを指している場合、例えば次のようにして対処する。

  • MSYSを使う前に一時的に環境変数HOMEを削除する
  • msys2_shell.cmdの先頭に「set HOME=」を追加する
  • cmd.exeから set "HOME=" && (msysインストール先)\msys2_shell.cmd -mingw64 でMinGW64シェルを起動する
  • .bashrcや.bash_profileにCygwin以外(MSYS等)で実行した場合に対応するコードを追加する。例えば次のコードをファイルの先頭に入れるとCygwin以外は何もせず終了する

    [[ "$OSTYPE" != "cygwin" ]] && return
    

MSYS2環境の準備

MSYS2のインストール

MSYS2 homepageからMSYS2(x86_64)のインストーラをダウンロードして実行しインストールする。

MSYS2シェルの起動

スタートメニューから「MSYS2 MSYS」を選ぶとMSYS2シェルが起動する。

MSYS2の更新

すでにMSYS2をインストール済みの場合、ビルドの前に各種パッケージの更新を行う(古いバージョンのMSYS2の場合は入れ直した方が早いかも)。

スタートメニューから「MSYS2 MSYS」を選んで以下を入力。

pacman -Syuu

warning: terminate MSYS2 without returning to shell and check for updates again warning: for example close your terminal window instead of calling exit

のようなメッセージが出たらAlt+F4で終了してスタートメニューからMSYS2 MSYSを起動して再度 pacman -Syuu を実行する。

何度か繰り返して更新されなくなったらOK。

以前追加したパッケージはここで更新される。

必要なパッケージの追加

必要なパッケージについては nt/INSTALLnt/INSTALL.W64 を参照のこと。

nt/INSTALL.W64では次のパッケージをインストールしている(2019-12-07現在)。

pacman -S --needed base-devel \
  mingw-w64-x86_64-toolchain \
  mingw-w64-x86_64-xpm-nox \
  mingw-w64-x86_64-libtiff \
  mingw-w64-x86_64-giflib \
  mingw-w64-x86_64-libpng \
  mingw-w64-x86_64-libjpeg-turbo \
  mingw-w64-x86_64-librsvg \
  mingw-w64-x86_64-lcms2 \
  mingw-w64-x86_64-jansson \
  mingw-w64-x86_64-libxml2 \
  mingw-w64-x86_64-gnutls \
  mingw-w64-x86_64-zlib

不要なパッケージ(ImageMagick-7)が入っている場合は削除すること。

pacman -Rs mingw-w64-x86_64-imagemagick

MinGW64シェルに移る

スタートメニューから「MSYS2 MinGW 64-bit」を選ぶ。

Cygwinを使用している場合はCygwin使用者への注意を参照のこと。

作業用ディレクトリを用意する

mkdir emacs_build
cd emacs_build
WORK_DIR=$(pwd)

以降作業ディレクトリへのパスを $WORK_DIR とする。

ImageMagickのビルド

ImageMagickのソースコードの取得

http://www.imagemagick.org/download/releases/ から6系の最新のソースコードを取得する。

IMAGEMAGICK_VER=ImageMagick-6.9.10-77
wget http://www.imagemagick.org/download/releases/$IMAGEMAGICK_VER.tar.gz
tar xvfz $IMAGEMAGICK_VER.tar.gz

ImageMagickのビルド

MinGW64シェルから展開したディレクトリへ移動して

IMAGEMAGICK_DIR=$WORK_DIR/ImageMagick-6
cd $IMAGEMAGICK_VER
./configure --host=x86_64-w64-mingw32 --enable-hdri --with-rsvg --prefix=$IMAGEMAGICK_DIR
make install
cd ..

$WORK_DIR/ImageMagick-6 にビルド結果が格納される。そのディレクトリを以降 $IMAGEMAGICK_DIR とする。

Emacsのビルド

Emacsのソースコードの取得

Emacsの公式サイトからソースコードをダウンロードして展開する(Cygwinの場合テキストマウントに注意すること)。

http://ftp.gnu.org/gnu/emacs/

EMACS_VER=emacs-26.3
wget http://ftp.gnu.org/gnu/emacs/$EMACS_VER.tar.gz
tar xvfz $EMACS_VER.tar.gz

Gitで取得することもできる。

which gitしてgitが見えなければgitへのパスを通す(Git for WindowsなどMSYS2の外でインストールしている場合は見えないと思う)。

export PATH="/c/app/dev/Git/cmd":"$PATH"

emacs.git - Emacs source repository より好きなブランチを選んで入手する。

git clone --depth=1 -b $EMACS_VER git://git.savannah.gnu.org/emacs.git --config core.autocrlf=false

改行コードに注意すること。Windowsだとautocrlfで使っている人もいると思うので、改行コードが変換されないようにオプションを付ける。

IMEパッチを適用

rzl24ozi’s gists より最新のものを入手する。

emacs-26.3にはemacs26.1-rc1用のパッチがそのまま適用できた。

wget https://gist.githubusercontent.com/rzl24ozi/ee4457df2f54c5f3ca0d02b56e371233/raw/16794e5883211049aed08c681f71240fa32cc28f/emacs-26.1-rc1-w32-ime.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

注意: Cygwinをテキストマウントで使っている場合、Cygwinのpatchを使うと改行コードがCR+LFになることがあるので、その場合はMinGWのpatchを使うこと。

(msys2インストール先)/usr/bin/patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-w32-ime.diff

ImageMagickパッチを適用(+一部手動修正)

ImageMagickを使うときは次のパッチを使う。

wget https://gist.githubusercontent.com/rzl24ozi/2b6dd502f3e0fa5083fb87c808287370/raw/a56d6c576d3f4ca24f87ff7510498f588a67c236/emacs-26.1-rc1-mingw-imagemagick.diff
patch -p0 -d $EMACS_VER <./emacs-26.1-rc1-mingw-imagemagick.diff

した上で

lisp/term/w32-win.el 内の次の場所をDLLのファイル名に合わせて変更する。

       '(magickwand "libMagickWand-6.Q16HDRI-5.dll" "libMagickWand-6.Q16-5.dll"
                    "libMagickWand-6.Q16HDRI-2.dll" "libMagickWand-6.Q16-2.dll")
       '(magickcore "libMagickCore-6.Q16HDRI-5.dll" "libMagickCore-6.Q16-5.dll"
                    "libMagickCore-6.Q16HDRI-2.dll" "libMagickCore-6.Q16-2.dll")

例えばImageMagick-6.9.10-77をビルドすると libMagickCore*-6.dll や libMagickWand*-6.dll ができるので、上の-5.dllを-6.dllへ修正する。

mv $EMACS_VER/lisp/term/w32-win.el $EMACS_VER/lisp/term/w32-win.el.orig_patched
sed 's/-6\.Q16HDRI-5\.dll/-6.Q16HDRI-6.dll/g; s/-6\.Q16-5\.dll/-6.Q16-6.dll/g;' $EMACS_VER/lisp/term/w32-win.el.orig_patched > $EMACS_VER/lisp/term/w32-win.el

Emacsのビルド

MinGW64シェルから

EMACS_INSTALL_DIR=/c/app/$EMACS_VER
cd $EMACS_VER
./autogen.sh
PKG_CONFIG_PATH=$IMAGEMAGICK_DIR/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --without-dbus --with-gnutls --prefix=$EMACS_INSTALL_DIR
make -j4 #4コアで
make install-strip
$EMACS_INSTALL_DIR/bin/runemacs.exe -Q

DLLのコピー

msys64/mingw64/bin/*.dll をEmacsのbinディレクトリへコピーする。

cp /mingw64/bin/*.dll $EMACS_INSTALL_DIR/bin

ビルドして生成されたImageMagick用のdllもコピーする。

cp $IMAGEMAGICK_DIR/bin/libMagickCore*.dll $EMACS_INSTALL_DIR/bin
cp $IMAGEMAGICK_DIR/bin/libMagickWand*.dll $EMACS_INSTALL_DIR/bin

その他の注意

MSYS2のライブラリパッケージがバージョンアップするとビルドが通らなくなったり通っても正しく動かなくなったりする場合があります。 emacs-26.2の時はlibgnutlsのバージョンアップに伴いSSL接続が正しく動かなくなった時がありました。 上記手順は2019-12-08にビルドが通ることを確認しました。

2019-11-13

2019年秋の新番組

10/01(火) 07:30~ テレビ東京系 ばなにゃ ふしぎななかまたち
10/02(水) 18:25~ テレビ東京系 あひるの空
10/02(水) 19:25~ NHK Eテレ ラディアン 第2シーズン
× 10/02(水) 21:54~ TOKYO MX 浦島坂田船の日常
10/02(水) 23:30~ TOKYO MX 慎重勇者 ~この勇者が俺TUEEEくせに慎重すぎる~
10/02(水) 24:30~ TOKYO MX 俺を好きなのはお前だけかよ
10/02(水) 25:05~ TOKYO MX 旗揚!けものみち
10/03(木) 17:55~ テレビ東京系 プリスクタイムエッグカー』&『GO!GO!アトム
× 10/03(木) 19:26~ TOKYO MX シルバニアファミリー ミニストーリー -クローバー
10/03(木) 22:30~ TOKYO MX 超人高校生たちは異世界でも 余裕で生き抜くようです!
× 10/03(木) 23:30~ TOKYO MX アズールレーン
10/03(木) 24:30~ TOKYO MX 放課後さいころ倶楽部
10/04(金) 12:00~ ニコニコ動画 ぬるぺた
10/04(金) 17:55~ テレビ東京系 ゾイドワイルド ZERO
× 10/04(金) 22:30~ TOKYO MX 厨病激発ボーイ
10/04(金) 24:00~ TOKYO MX GRANBLUE FANTASY The Animation Season2
× 10/04(金) 25:00~ TOKYO MX どるふろ -癒し編-
10/04(金) 25:05~ TOKYO MX ハイスコアガール 第13話~第15話
10/05(土) 10:30~ テレビ東京系 アイカツオンパレード!
10/05(土) 17:35~ NHK Eテレ 魔入りました!入間くん
10/05(土) 23:30~ TOKYO MX Fate/Grand Order -絶対魔獣戦線 バビロニア-
10/05(土) 24:30~ TOKYO MX ぼくたちは勉強ができない 第2期
10/05(土) 25:00~ TOKYO MX この音とまれ! 第2クール
× 10/05(土) 25:30~ TOKYO MX 戦×恋(ヴァルラヴ)
10/06(日) 22:00~ TOKYO MX トクナナ -警視庁 特務部 特殊凶悪犯対策室 第七課-
10/06(日) 23:30~ TOKYO MX ACTORS -Songs Connection-
10/06(日) 24:00~ TOKYO MX Fairy gone フェアリーゴーン 第2クール
× 10/06(日) 24:30~ TOKYO MX アフリカのサラリーマン
10/06(日) 25:00~ TOKYO MX XL上司。
10/06(日) 深夜~ テレビ東京 フォーカード 新シリーズ
10/07(月) 21:54~ TOKYO MX 兄に付ける薬はない! 第3期
10/07(月) 22:00~ TOKYO MX バビロン
10/07(月) 22:30~ TOKYO MX ファンタシースターオンライン2 エピソード・オラクル
× 10/07(月) 23:00~ TOKYO MX スタンドマイヒーローズ-PIECE OF TRUTH-
10/07(月) 24:00~ TOKYO MX 私、能力は平均値でって言ったよね!
10/07(月) 25:00~ チバテレビ エイリは王さま!
× 10/08(火) 23:00~ TOKYO MX Z/X Code reunion
10/08(火) 24:30~ TOKYO MX 神田川JET GIRLS
10/08(火) 25:00~ TOKYO MX 耐え子の日常
10/09(水) 17:55~ テレビ東京系 七つの大罪 神々の逆鱗
10/09(水) 22:00~ TOKYO MX 本好きの下剋上 司書になるためには手段を選んでいられません
10/09(水) 23:54~ BS11 ポンコツクエスト ~魔王と派遣の魔物たち~ シーズン6
10/09(水) 25:15~ フジテレビ BEASTARS
10/10(木) 20:00~ YouTube ガンダムビルドダイバーズRe:RISE
10/10(木) 24:00~ TOKYO MX アサシンズプライド
10/10(木) 25:28~ TBS ノー・ガンズ・ライフ
10/10(木) 25:58~ TBS 星合の空-ほしあいのそら-
10/10(木) ~ Amazon PV 無限の住人-IMMORTAL-
× 10/11(金) 24:30~ TOKYO MX 食戟のソーマ 第4期
10/11(金) 25:55~ TBS 歌舞伎町シャーロック
10/11(金) 26:25~ TBS 真・中華一番!
10/12(土) 17:30~ 日本テレビ系 僕のヒーローアカデミア 第4期
10/12(土) 24:00~ TOKYO MX ソードアート・オンライン -アリシゼーション- War of Underworld
10/13(日) 22:54~ BS11 天華百剣 ~めいじ館へようこそ!~
10/13(日) 23:00~ TOKYO MX ライフル・イズ・ビューティフル
10/14(月) ~ AbemaTV SUPER SHIRO
10/17(木) 24:55~ フジテレビ PSYCHO-PASS サイコパス 第3期
10/22(火) 25:29~ 日本テレビ ちはやふる 第3期
10/25(金) 25:05~ TOKYO MX ハイスコアガールⅡ (第2期)
2019-07-14

2019年夏の新番組

異世界ものが多いとは聞いていましたが、これはきっついですね。

全体の変数が少ないのでできるだけ1話切りしないで頑張ってみようかなと思ったのですが、早々にくじけそうです。

06/14(金) Netflix アグレッシブ烈子 シーズン2
06/24(月) 27:00頃 読売テレビ あにめたまご2019
06/28(金) Netflix 7SEEDS
07/01(月) 22:00 TOKYO MX スタミュ-高校星歌劇- 第3期
07/01(月) 23:00 TOKYO MX かつて神だった獣たちへ
07/01(月) 25:00 チバテレビ われしょ!~我ら!小動物愛護委員会~
07/02(火) 07:05 テレビ東京系 おどるモワイくん
07/02(火) 23:00 TOKYO MX 手品先輩
07/02(火) 23:15 TOKYO MX ソウナンですか?
07/03(水) 23:30 TOKYO MX ダンベル何キロ持てる?
07/03(水) 24:00 TOKYO MX 魔王様、リトライ!
07/03(水) 25:05 TOKYO MX 彼方のアストラ
07/04(木) 23:30 TOKYO MX うちの娘の為ならば、俺はもしかしたら魔王も倒せるかもしれない。
× 07/05(金) 22:00 TOKYO MX Dr.STONE
07/05(金) 22:30 TOKYO MX 女子高生の無駄づかい
07/05(金) 25:25 TBS系 炎炎ノ消防隊
07/05(金) 25:55 TBS グランベルム
07/05(金) 26:25 TBS 荒ぶる季節の乙女どもよ。
07/06(土) 09:00 NHK Eテレ おしりたんてい 新シリーズ
× 07/06(土) 24:00 TOKYO MX ロード・エルメロイⅡ世の事件簿 -魔眼蒐集列車 Grace note-
07/06(土) 25:00 TOKYO MX 戦姫絶唱シンフォギアXV 第5期
07/07(日) 06:15 KBC 博多明太!ぴりからこちゃん
07/07(日) 22:00 TOKYO MX Re:ステージ! ドリームデイズ
07/07(日) 22:30 TOKYO MX あんさんぶるスターズ!
07/07(日) 23:30 TOKYO MX からかい上手の高木さん 第2期
07/07(日) 24:00 TOKYO MX ビジネスフィッシュ
07/07(日) 24:10 NHK総合 ヴィンランド・サガ
07/07(日) 24:30 TOKYO MX ナカノヒトゲノム【実況中】
07/07(日) 25:00 TOKYO MX 指先から本気の熱情-幼なじみは消防士-
07/07(日) 深夜 テレビ東京 闇芝居 第7期
07/08(月) 22:30 TOKYO MX 胡蝶綺 ~若き信長~
07/08(月) 24:00 TOKYO MX コップクラフト
× 07/08(月) 24:30 TOKYO MX ありふれた職業で世界最強
07/09(火) 24:30 TOKYO MX 可愛ければ変態でも好きになってくれますか?
× 07/10(水) 25:35 TOKYO MX 異世界チート魔術師
07/11(木) 24:55 フジテレビ ギヴン
07/11(木) 25:28 TBS まちカドまぞく
× 07/12(金) 24:00 TOKYO MX 通常攻撃が全体攻撃で二回攻撃のお母さんは好きですか?
× 07/12(金) 24:30 TOKYO MX ダンジョンに出会いを求めるのは間違っているだろうかⅡ
× 07/12(金) 25:05 TOKYO MX とある科学の一方通行
  07/14(日) 25:35 テレビ東京 BEM(妖怪人間ベム)