あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

MacPortsをやめてHomebrewにしたけどMacPortsに戻ってmikutter環境作り直した話

わたしはmikutterをまともに使えるのでMacPorts派なんですが、XQuartzもリリースされなくなって久しく、どうもMacPortsのリリースを使えということのようですが、そうするとmac-uimの調整が面倒そうだったので、Homebrewに移行してみました。

Homebrewは昔からmikutterとの相性が悪いと言うかGTK周りが微妙に不安定で使い物にならない印象(個人の感想です)だったのですが、昨今はXQuatrzなしでも動いてIMEMacで使用しているものがそのまま動くっぽいと聞いていたので期待していたのですが……だめでした。インストールとmikutter環境の整備自体はさっくりできたんですが、mikutterのウィンドウが非アクティブの間プロセスがスリープしたような状態になっていて、ウィンドウがアクティブになると我に返ったようにTLが流れ出すというもの。なんやこれ使い物にならんやんけェ!

というわけでMacPortsにカムバックです。が、これはこれでつまづいたのでメモ。

MacPortsのインストールとgtkのインストールは難なく。あと、XQuartzはmac-uimの調整を頑張るという意味でMacPorts版をインストール。

Rubyを入れてmikutterのbundleをしていたところでエラー。cairoのところで引っかかりました。

akkie@Soful-usb:~/mikutter (master) $ gem install cairo
Building native extensions. This could take a while...
ERROR:  Error installing cairo:
	ERROR: Failed to build gem native extension.

    current directory: /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/cairo-1.15.14/ext/cairo
/Users/akkie/.rbenv/versions/2.5.1/bin/ruby -r ./siteconf20181013-80742-1d89nxg.rb extconf.rb
checking for GCC... yes
checking for Win32 OS... no
checking for cairo version (>= 1.2.0)... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/akkie/.rbenv/versions/2.5.1/bin/$(RUBY_BASE_NAME)
	--with-pkg-config
	--without-pkg-config
	--with-override-variables
	--without-override-variables
/Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:299:in `parse_pc': .pc for xproto doesn't exist. (RuntimeError)
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:196:in `declaration'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:210:in `collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:145:in `cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:215:in `block in collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:214:in `collect'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:214:in `collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:145:in `cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:212:in `block in collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:211:in `collect'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:211:in `collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:145:in `cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:212:in `block in collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:211:in `collect'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:211:in `collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:145:in `cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:215:in `block in collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:214:in `collect'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:214:in `collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:145:in `cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:212:in `block in collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:211:in `collect'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:211:in `collect_cflags'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:154:in `cflags_only_other'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:475:in `cflags_only_other'
	from /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/pkg-config-1.3.1/lib/pkg-config.rb:522:in `have_package'
	from extconf.rb:52:in `required_pkg_config_package'
	from extconf.rb:60:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-darwin-17/2.5.0-static/cairo-1.15.14/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/cairo-1.15.14 for inspection.
Results logged to /Users/akkie/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/extensions/x86_64-darwin-17/2.5.0-static/cairo-1.15.14/gem_make.out

pkgsrcのxproto.pcがないとのこと。しらべたところ、/opt/local/lib/pkgsrcと/opt/local/share/pkgsrcの2箇所に.pcファイルが分散していて後者を参照できていない様子だったので、.bash_profileに以下を追記してgot kotonaki。:$PKG_CONFIG_PATHこそつけていますが、echoしたら何もなかったです。念の為です。

export PKG_CONFIG_PATH="/opt/local/lib/pkgconfig:/opt/local/share/pkgconfig:$PKG_CONFIG_PATH"

libidnもMacPortsでlibidnを入れたり/opt/localを指定してgemをインストールする必要があるので以下の通りやっていきます。

$ sudo port install libidn
$ gem install idn-ruby -- --with-idn-dir=/opt/local

MacUIMは https://github.com/e-kato/macuim/releases から最新とMacUIM 0.6.16-2とMacUIM.appを持ってきてインストールした後にMacUIM.appを/Library/Input Methodsに放り込みます。

その他設定はあひるさんが私の過去の記事をアップデートしたものを用意してくれているのでそれを参考にやりますが、plistファイルは~/.MacOSディレクトリ以下に置いて良さそうなのでそうしました。

github.com

MacPorts版向けのmac-uimの調整。そのままuim-ximを動かすとコケます。

akkie@Soful-usb:~ $ /Library/Frameworks/UIM.framework/Versions/Current/bin/uim-xim &
[1] 866
dyld: Library not loaded: /usr/X11/lib/libXext.6.dylib
  Referenced from: /Library/Frameworks/UIM.framework/Versions/Current/bin/uim-xim
  Reason: image not found
[1]+  Abort trap: 6           /Library/Frameworks/UIM.framework/Versions/Current/bin/uim-xim

が、libXext.6.dylibは/opt/local/lib/libXext.6.dylibにあるようなので、/usr/X11を/opt/localに向ければOK。大変そうと思いきや大したことなかった。

akkie@Soful-usb:~ $ ls -l /usr/
total 0
lrwxr-xr-x    1 root  wheel      8  9 26  2017 X11 -> /opt/X11
lrwxr-xr-x    1 root  wheel      8  9 26  2017 X11R6 -> /opt/X11 ←こいつはsudoでも消えなかったので無視
akkie@Soful-usb:~ $ sudo rm -rf /usr/X11
akkie@Soful-usb:~ $ sudo ln -s /opt/local /usr/X11
akkie@Soful-usb:~ $ /Library/Frameworks/UIM.framework/Versions/Current/bin/uim-xim
uim <-> XIM bridge. Supporting multiple locales.
Using full-synchronous XIM event flow
(動いたのを確認したらCtrl+Cで止める)

これでひととおりMacPortsなmikutterが復旧しました。MacPorts版のXQuartzはオフィシャルのパッケージよりも新しいので、これは積極的に切り替えても良さそうな気がしました。Homebrewもプロセスがスリープするみたいなあの挙動がなければまあ良かったんですけどねえ。あと、「mikutterではIMEの切り替えは(MacUIMの)Shift+Space」という癖が完全に定着してしまっていて、Homebrewで普通に英数/かなで切り替えるという操作をめっちゃ失敗している自分に笑ってしまいました。もとに戻ってめっちゃ安心して草。