Inkscape 0.92.1 のパッケージ(gtk/quartz backend)をつくる

Inkscape 0.92.1 がリリースされています。

Release notes/0.92.1 - Inkscape Wiki

日付が2月13日なのは少し疑問ですが、まあいいでしょう*1

相変わらずMac向けの公式バイナリはリリースされていませんが、次のリリースに向けてなんとかしようという動きはあるようです。

Tim Sheridan 氏によるビルド用のパッケージ作成スクリプトの修正版(ただしExperimental 扱い)が公開されています。

0.92.x_mac_packaging : Code : Inkscape

XQuartz 版が公開されています(まだテスト用扱い)。

inkscape.org

例によって例のごとく、XQuartzなしで動くバージョンが欲しいので、自前でビルドします。

そのうちMacPortsからsudo port install inkscape +quartzで最新版がインストールできるようになるはずです。

わざわざビルドする理由は、dmg形式にしておくとOSリカバリの時にビルドし直さなくていいよねってだけの話です。

自前でビルドしてみる

パッケージ作成スクリプトの修正版はまだメインのリポジトリに反映されていません。

素直に開発版のリポジトリから入手しようかと思いましたが、MacPortsをバージョンアップしたところ、bazaar(bzr)の挙動がおかしいので断念。

手っ取り早く最新のリビジョンを探し、”download tarball"のリンクをクリックしてダウンロード。差分だけ取得して0.92.1のソースに適用するのも可。

~tghs/inkscape/0.92.x_mac_packaging : revision 15379

今回はリビジョン15379

$ tar zxf ~tghs_inkscape_0.92.x_mac_packaging-r15379.tgz
$ cd ~tghs/inkscape/0.92.x_mac_packaging

移動した先のディレクトリの、README.txtファイルを参考にしてQuartz版を作成します(packaging/macosx/README.txt)。

ビルド

ビルド環境は過去記事でセットアップしたMavericks環境です。

まずはMacPortsのインストール先を環境変数にセット。

もし同一マシンでX11版とQuartz版を作り分けたい場合は、MacPortsのインストール先を区別できるようにするといいと思います。

$ export MP_PREFIX=/opt/local
$ cd ~tghs/inkscape/0.92.x_mac_packaging/packaging/macosx/

独自のPortfileを使用して追加パッケージをインストールすることが前提になっています。

そのためにMacPortsの設定ファイルを編集する必要があります。

$ sudo sed -e '/^rsync:/i\'$'\n'"file://$(pwd)/ports" -i "" "$MP_PREFIX/etc/macports/sources.conf"

現在のディレクトリのパスと、$MP_PREFIXの値を埋め込むので注意が必要です。

$ less "$MP_PREFIX/etc/macports/sources.conf"

最終行の一行上にPortfileの配置ディレクトリのための設定が追加されていればOK。

続いてパッケージのインデックスを更新。

$ (cd ports && portindex)

同じ要領でMacPorts全体のビルド設定(variants)を修正。以下はあくまでもQuartzバックエンドとしてビルドするためのものです。

$ sudo sed -e '$a\'$'\n''-x11 +quartz +no_x11 +rsvg +Pillow -tkinter +gnome_vfs' -i "" "$MP_PREFIX/etc/macports/variants.conf"

依存パッケージを一式インストール。それなりに時間がかかります。

$ sudo sed -e '$a\'$'\n''-x11 +quartz +no_x11 +rsvg +Pillow -tkinter +gnome_vfs' -i "" "$MP_PREFIX/etc/macports/variants.conf"

configureのバグを回避するため、osx-build.shを修正。

$ vim osx-build.sh

267行目の下に以下の二行を追加(250行目と251行目をコピーした結果)。

        # Workaround for https://bugs.launchpad.net/inkscape/+bug/1606018
        CONFFLAGS="--disable-strict-build $CONFFLAGS"

もしMountain Lion やYosemite以降でビルドするなら対応する箇所に修正が必要だと思う。いまのところMavericksでしか試していません。

起動時にエラーが表示される例のバグを回避するパッチを適用。

$ patch ScriptExec/launcher-quartz-no-macintegration.sh fix_lp476678.patch 

パッチは以下の通り。

--- ScriptExec/launcher-quartz-no-macintegration.sh.bak  2017-01-08 02:56:39.000000000 +0900
+++ ScriptExec/launcher-quartz-no-macintegration.sh 2017-01-08 02:58:25.000000000 +0900
@@ -143,7 +143,7 @@
    export LANG="en_US.UTF-8"
 else
    tmpLANG="`grep \"\`echo $LANGSTR\`_\" /usr/share/locale/locale.alias | \
-       tail -n1 | sed 's/\./ /' | awk '{print $2}'`"
+       tail -n1 | awk '{print $2}' | sed 's/\./ /' | awk '{print $1}'`"
    if [ "x$tmpLANG" == "x" ]
    then
        # override broken script

一気にdmgファイルまでビルド。

$  LIBPREFIX="$MP_PREFIX" ARCH="x86_64" ./osx-build.sh a c b -j 5 i p -s d

Inkscape.appdmgファイルが生成されているので動作確認する。

f:id:atuyosi:20170217153418p:plain

Sierra 対策

Mavericks でビルドしたバイナリをSierraで動かすと内部エラーで起動しない……。Mavericksでは普通に動くのに。

以前から知られている問題と同じようなので、その場しのぎの対応ですが、小細工で回避。

前述のパッチと同じ要領で、パッチを適応してdmgファイルだけ作り直す。

作業ディレクトリに戻ったうえで下記を実行。

$ patch Inkscape.app/Contents/MacOS/inkscape fix_SierraBuild.patch
patching file Inkscape.app/Contents/MacOS/inkscape
Hunk #1 succeeded at 154 (offset 3 lines).

dmgファイルの生成。

$ ./osx-dmg.sh  -p Inkscape.app

外付けディスプレイは外して置いたほうがいいかもしれない。

Inkscape.dmgが生成されるのでこれをインストール対象のマシンに持っていく。なお、修正パッチは下記の通り。

--- ScriptExec/launcher-quartz-no-macintegration.sh.bak  2017-01-08 02:56:39.000000000 +0900
+++ ScriptExec/launcher-quartz-no-macintegration.sh 2017-01-08 02:58:25.000000000 +0900
@@ -151,6 +151,10 @@
        export LANG="$tmpLANG.UTF-8"
    fi
 fi
+
+if  [ $OSXMINORNO -gt 11 ]; then
+    export LANG="$(echo $LANG | cut -d. -f 1)"
+fi
 [ $_DEBUG ] && echo "Setting Language: $LANG" 1>&2
 export LC_ALL="$LANG"

実行時にセキュリティがらみの警告が出る場合は、Applicationフォルダに移動して右クリックメニューから実行すればよかったはず。

もしくは環境設定からセキュリティまわりの設定を変更。

Maverciks からデフォルトのstdlibまわりが変更になっているので、コンパイラの最適化との関係で何かまずいんだろうと思う。

完成品

あまり需要がなさそうですが一応、置いておきます。 XQuartzなしで動くQuartz 版です。

www.dropbox.com

起動スクリプトのバグ修正を含みます。

変更点など

過去記事のビルドとの変更点は、以下のとおり。 独自のパッチ

  • CMake ではなく従来どおりのautotoolsによるビルド方式
  • Extension の動作に必要なファイルが追加(されたはず)

上述したとおり、独自の修正を含んでいます。

  • 日本語ロケールで起動時に「内部エラーが発生しました」というダイアログが表示されて起動できない問題
  • 特定の環境でビルドしたバイナリをSierraで実行すると起動できない

あとは冒頭のリンク先と同じです。

スクリーンショット

f:id:atuyosi:20170217200448p:plain

こんな感じ。


おしまい。

*1:確かにRC相当のプレリリース版はその辺の日付だった。