Ipe7 on Leopard

cgal ipelet についての覚書を残そうとしていたところ Ipe7 がリリースされました。それに伴い ipelet の作り方も変わりましたので、今回は Mac で Ipe7 の ipelet を作成するための準備をしたいと思います。

まだちょっと不格好ですが、なんとかMac で Ipe7 が使えることが確かめられましたので、覚書を残しておきます。

準備

  • cairo と lua のインストール

MacPorts でインストールしました。

  • pdflatex のバージョンアップ

文字を扱うには、pdflatex のバージョンをあげないといけないみたいです。今のところ1.21a が入っていますが、1.4x にしないとダメみたいです。今回は、特に対応しませんでした。以前は、MacPorts で teTeX を入れたんだと思いますが、teTeX はメンテがとまっているようです。pdflatex のソースからのコンパイルはやだな。

  • ソースのダウンロード

Ipe のソースファイルが置いてある場所は、luaforge っていうところからsourceforge になりました。今回は、ipe-7.0.7-src.tar.gz をダウンロードしました。

  • 設定ファイルとMakefileの書き換え

次のようなシェルスクリプトを用意しました。このスクリプトは、個人的に逐次的に暫定的に書いたもの(ほぼ全部コピペ)なので、いろいろアレです。読める人は適宜修正してみて下さい。よろしくお願いします。基本的には、Linux系 と BSD系 の install オプションの違いを直そうとしているものです。実行すると/opt/ipe7 というディレクトリにファイルをインストールしようとします。

#!/bin/sh

tar xfz ipe-7.0.7-src.tar.gz
cd ipe-7.0.7/src

###### compile
#<common.mak>
cat common.mak | sed 's/-shared/-dynamiclib/g' \
	| sed 's/\-t//g' > tmp
if [ ! -f common.mak.dist ] ; then
	mv common.mak common.mak.dist
fi 
mv tmp common.mak

#<config.mak>
cat config.mak | sed 's/\$(shell pkg\-config \-\-cflags lua5.1)/-I\/opt\/local\/include/g' \
	| sed 's/\$(shell pkg\-config \-\-libs lua5.1)/-L\/opt\/local\/lib -llua/g' \
	| sed 's/\$(shell pkg\-config \-\-cflags QtGui QtCore)/-I\/usr\/local\/Qt4\.5\/mkspecs\/macx\-g\+\+ \-I\. \-I\/Library\/Frameworks\/QtCore\.framework\/Versions\/4\/Headers \-I\/usr\/include\/QtCore \-I\/Library\/Frameworks\/QtGui\.framework\/Versions\/4\/Headers \-I\/usr\/include\/QtGui/g' \
	| sed 's/\$(shell pkg\-config \-\-libs QtGui QtCore)/-F\/Library\/Frameworks -L\/Library\/Frameworks -framework QtGui -framework Carbon -framework AppKit -framework QtCore -framework ApplicationServices/g' \
	| sed '55s/^#//' > tmp
if [ ! -f config.mak.dist ] ; then
	mv config.mak config.mak.dist
fi
mv tmp config.mak

####### install
subdirs="ipelib ipelets/image ipelets/lua ipetoipe ipe6upgrade \
	ipeextract ipecairo iperender ipeqtcanvas ipeview ipelua ipeui ipe"
for i in $subdirs ; do
	cat $i/Makefile | sed 's/\$(INSTALL_ROOT)\$(IPELIBDIR)\ \$(TARGET)/\$(TARGET)\ \$(INSTALL_ROOT)\$(IPELIBDIR)/g' > tmp
	if [ ! -f $i/Makefile.dist ] ; then
		mv $i/Makefile $i/Makefile.dist
	fi
	mv tmp $i/Makefile
done

# ipelib
cat ipelib/Makefile | sed 's/\$(INSTALL_ROOT)\$(IPEHEADERDIR)\ \.\.\/include\/\*\.h/..\/include\/*.h \$(INSTALL_ROOT)\$(IPEHEADERDIR)/g' > tmp
mv tmp ipelib/Makefile

# ipelets/image
cat ipelets/image/Makefile | sed 's/\$(INSTALL_ROOT)\$(IPELETDIR)\ \$(TARGET)/\$(TARGET) \$(INSTALL_ROOT)\$(IPELETDIR)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPELETDIR)\ \$(LUASCRIPT)/\$(LUASCRIPT) \$(INSTALL_ROOT)\$(IPELETDIR)/g' > tmp
mv tmp ipelets/image/Makefile

# ipelets/lua
cat ipelets/lua/Makefile | sed 's/\$(INSTALL_ROOT)\$(IPELETDIR)\ \$(LUASCRIPTS)/\$(LUASCRIPTS) \$(INSTALL_ROOT)\$(IPELETDIR)/g' > tmp
mv tmp ipelets/lua/Makefile

# ipetoipe / ipe6upgrade
bind="ipetoipe ipe6upgrade ipeextract iperender ipeview"
for i in $bind ; do
	cat $i/Makefile | sed 's/\$(INSTALL_ROOT)\$(IPEBINDIR)\ \$(TARGET)/\$(TARGET) \$(INSTALL_ROOT)\$(IPEBINDIR)/g' > tmp.1
	mv tmp.1 $i/Makefile
done

# ipe/
cat ipe/Makefile | sed 's/\$(INSTALL_ROOT)\$(IPEBINDIR)\ \$(TARGET)/\$(TARGET)\ \$(INSTALL_ROOT)\$(IPEBINDIR)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPEMANDIR)\ \.\.\/\.\.\/man\/\*\.1/..\/..\/man\/*.1 \$(INSTALL_ROOT)\$(IPEMANDIR)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPEDOCDIR)\ \.\.\/\.\.\/build\/doc\/\*/..\/..\/build\/doc\/* \$(INSTALL_ROOT)\$(IPEMANDIR)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPELUADIR)\ lua\/\*\.lua/lua\/*.lua \$(INSTALL_ROOT)\$(IPELUADIR)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPESTYLES)\ \.\.\/\.\.\/styles\/basic.isy/..\/..\/styles\/basic.isy \$(INSTALL_ROOT)\$(IPESTYLES)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPESTYLES)\ \.\.\/\.\.\/styles\/colors.isy/..\/..\/styles\/colors.isy \$(INSTALL_ROOT)\$(IPESTYLES)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPESTYLES)\ \.\.\/\.\.\/styles\/presentation.isy/..\/..\/styles\/presentation.isy \$(INSTALL_ROOT)\$(IPESTYLES)/g' \
	| sed 's/\$(INSTALL_ROOT)\$(IPEICONDIR)\ icons\/\*\.png/icons\/*.png \$(INSTALL_ROOT)\$(IPEICONDIR)/g' > tmp
mv tmp ipe/Makefile

exit 0;

インストール後の調整

すごくかっこ悪いのですが、ビルドしたディレクトリのlibへのパスを通しました。install -s のストライプが正しく動いていないのかなぁ。これ指定しないと、DYLD_LIBRARY_PATH に /opt/ipe7/lib とか指定しても、../../build/libqtcanvace.so がロードできないとか言われてしまいます。とりあえず、$(HOME)/tmp/ipe-7.0.7 以下ででコンパイルを行ったので、次のように指定してごまかしました。

setenv DYLD_LIBRARY_PATH ~/tmp/ipe-7.0.7/build/lib

おまけ

以上でおしまいです。ペンギンがかわいいですね。Ipelets は、Euclidean Geometry は動作しましたが、Insert image は失敗しました。ちょっと確認しておきましょう。

# 先週は天井ばかり眺めているような感じでした。日記を書かないとなぁと思いながら、書きかけのものをちょっと編集してお茶を濁しました。えへへ