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標準の挙動と異なるし、実際問題として不便である。
しかし、開発版 (3.1) ではこの挙動が修正されていて、タブキーでテキスト入力欄を移動するとちゃんと移動先のテキストが選択される。
ぶっちゃけ、この修正だけのために開発版を自分でビルドしてでも使う価値がある。(wxWidgets のこの問題は macOS 特有なので、他のOSには関係ない)
用意するもの
カッコ内は筆者の環境および使ったバージョン。
- Mac (macOS 10.12 Sierra)
- Xcode (Xcode 8.0)
- wxWidgets のソースコード (wxWidgets 3.1.0: リリース告知, ダウンロード)
- wxMaxima のソースコード (wxMaxima 16.04.2: ダウンロード(sf), ダウンロード(GitHub))
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の違いは吸収できるが、プラットフォームごとの翻訳の流儀の違いは吸収できないのである。悲しい。