macOS向けのwxMaximaを自分でビルドする

wxMaxima とは、数式処理システム Maxima をGUIで使えるようにしたソフト(フロントエンド)である。Windows, macOS, Linux の各プラットフォームに対応する。Maxima のGUIフロントエンドの中では最もポピュラーかと思われる。

しかし、macOS 向けにリリースされているバイナリのバージョンは 15.04.0 (記事執筆時点)と、少々古い。そこで、最新版 (16.04.2) を自分でビルドしてみよう。

この記事は、ターミナルの操作に慣れていてソフトウエアのビルドもできる人向けとなる。wxMaxima や wxWidgets 特有の事情については記事の中でなるべく説明しているので知らなくても問題ない。

最新版を使うメリット

自分で手間をかけてビルドして意味があるのか、という問題について。

wxMaxima の最新版を使うメリット

ChangeLog を参照されたい。

個人的に気になったのはこの辺:

  • HTMLエクスポート機能において数式にMathJaxを使うようになった。以前はPNG画像だった。
  • 数式をMathMLとしてコピーする機能がついた。

wxWidgets の開発版を使うメリット

現在の wxWidgets の安定版 (3.0) では、タブキーでテキスト入力欄のフォーカスを移動した際に、移動先のテキストが選択されないという問題がある。これはOS標準の挙動と異なるし、実際問題として不便である。

matrix-input-wx30

しかし、開発版 (3.1) ではこの挙動が修正されていて、タブキーでテキスト入力欄を移動するとちゃんと移動先のテキストが選択される。

matrix-input-wx31

ぶっちゃけ、この修正だけのために開発版を自分でビルドしてでも使う価値がある。(wxWidgets のこの問題は macOS 特有なので、他のOSには関係ない)

用意するもの

カッコ内は筆者の環境および使ったバージョン。

Xcode は、コマンドラインツールを使えるようにしておく必要がある。ターミナルで

$ gcc

と打って clang: error: no input files と出力されればOK。もしもここで -bash: $: command not found と出力された場合は、あなたはこの記事を読むための前提条件を満たさない可能性が高い。

wxWidgets と wxMaxima のソースコードは git で取ってくるか、tarball をダウンロードする。今回、筆者は tarball を選んだ。

wxWidgetsのビルド

気分の問題だが、ソースコードとは別のディレクトリでビルドすることにする。

$ ls
wxWidgets-3.1.0  wxmaxima-16.04.2
$ mkdir build-wx
$ cd build-wx

configure のオプションについて。

--disable-shared によって、wxWidgets を静的ライブラリとしてビルドする。このオプションを指定しない場合は、動的ライブラリとしてビルドすることになる。

最新の macOS/Xcode では QTKit がお亡くなりになっていて、--disable-mediactrl をつけないとビルド中に <QTKit/QTKit.h> が見つからないと言って頓死する。(追記:Gitにある開発版では修正されたようなので、wxWidgets のソースを git clone で取ってきた場合は --disable-mediactrl は不要かと思われる)

MacPorts においては wxWidgets-3.2 という名前で wxWidgets 3.1系が用意されているが、記事執筆時点 (wxWidgets-3.2 @3.1.0) では、この QTKit 問題の対策をしていないようである。

$ ../wxWidgets-3.1.0/configure --disable-shared --disable-mediactrl
checking build system type... x86_64-apple-darwin16.0.0
checking host system type... x86_64-apple-darwin16.0.0
checking for toolkit... osx_cocoa
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
(中略)

Configured wxWidgets 3.1.0 for `x86_64-apple-darwin16.0.0'

  Which GUI toolkit should wxWidgets use?                 osx_cocoa
  Should wxWidgets be compiled into single library?       no
  Should wxWidgets be linked as a shared library?         no
  Should wxWidgets support Unicode?                       yes (using wchar_t)
  What level of wxWidgets compatibility should be enabled?
                                       wxWidgets 2.8      no
                                       wxWidgets 3.0      yes
  Which libraries should wxWidgets use?
                                       STL                no
                                       jpeg               sys
                                       png                builtin
                                       regex              builtin
                                       tiff               sys
                                       zlib               sys
                                       expat              sys
                                       libmspack          no
                                       sdl                no

configure が済んだら、いよいよ実際のビルドである。

make に渡すオプションについて:

-s オプションによって、実行中のコマンドがターミナルに表示されるのを抑制する。必須ではない。

-j オプションによって並列ビルドを行う。オプションの後の数字はジョブの数で、CPUのコアの数を勘案して適当に決める。必須ではないが、 wxWidgets のビルドにはかなり時間がかかるので、普通はつける。ちなみに、筆者の MacBook Pro ではビルドに15分くらいかかった。

$ make -s -j4

よくあるソフトウエアのインストール手順だとこの後に make install するが、今回は必要ない。

wxMaximaのビルド

README.md にも目を通すべし。wxMaxima を tarball でなく git 経由で入手した場合は、 ./bootstrap によって configure スクリプトを生成する必要がある。

wxMaxima のビルドは、ソースコードと同じディレクトリで行う。そうしないと make wxMaxima.app の段でコケる。

configure のオプションについて:

--with-wx-config によってさっきビルドした wxWidgets の位置を教えてあげる。

wxWidgets のビルドの際に macosx-version-min が 10.7 となっていた関係か、 --with-macosx-version-min を明示的に指定してやらないとコケる。

$ cd ../wxmaxima-16.04.2
$ ./configure --with-wx-config=../build-wx/wx-config --with-macosx-version-min=10.7
checking for a BSD-compatible install... /opt/local/bin/ginstall -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /opt/local/bin/gmkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking build system type... x86_64-apple-darwin16.0.0
checking host system type... x86_64-apple-darwin16.0.0
(中略)
config.status: creating test/Makefile
config.status: creating wxmaxima.spec
config.status: creating data/Info.plist
config.status: creating data/wxMaxima.desktop
config.status: creating src/Setup.h
config.status: executing depfiles commands

実際のビルドを行う。

$ make
$ make allmo
$ make wxMaxima.app

全てがうまくいけば、 wxMaxima.app ができているはずである。めでたしめでたし。

Q&A

Q. メニューバーが「ファイル(F)」「編集(E)」となっていて、カッコが見苦しい

A. wxMaxima の言語設定を英語にしろ。

真面目になんとかしたいなら、 wxMaxima のソースコードの locales/ja.po を編集して再ビルドすると良いかもしれない。

wxWidgets を使えばプラットフォームごとのAPIの違いは吸収できるが、プラットフォームごとの翻訳の流儀の違いは吸収できないのである。悲しい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です