Tcl/Tk 8.5b1 がリリースされたので、早速クロスコンパイル環境でコンパイルをはじめていますが、苦戦しています。コアの Tcl/Tk については簡単にビルドできるのですが、拡張パッケージはそうはいきません。
Tcl/Tk は次のようなスクリプトを用意して実行すればビルドできます。
#!/bin/sh
export INSTDIR=${HOME}/mingw/build
# constants
export ver_tcltk="8.5b1"
export ver_major="85"
export ver_major2="8.5"
export prefix_tcltk=""
export target=i386-mingw32
export CC=${target}-gcc
export AR=${target}-ar
export LD=${target}-ld
export RANLIB=${target}-ranlib
export RC=${target}-windres
# remove old sources
echo "### Removing old sources & binaries"
rm -fR tcl${ver_tcltk}
rm -fR tk${ver_tcltk}
# extract sources
echo "### Expanding sources to build"
tar zxvf tcl${ver_tcltk}-src.tar.gz
tar zxvf tcl${ver_tcltk}-html.tar.gz
tar zxvf tk${ver_tcltk}-src.tar.gz
# build Tcl
echo "### build Tcl"
cd tcl${ver_tcltk}/win
./configure --prefix=${prefix_tcltk} --host=${target} --enable-threads
make INSTALL_ROOT=${INSTDIR}/tcl${ver_tcltk} install
cd ../..
# build Tk
echo "### build Tk"
cd tk${ver_tcltk}/win
./configure --prefix=${prefix_tcltk} --host=%{target} --enable-threads --with-tc
l=../../tcl${ver_tcltk}/win
make INSTALL_ROOT=${INSTDIR}/tk${ver_tcltk} install
cd ../..
# add .tcl to Tk demo script
mv ${INSTDIR}/tk${ver_tcltk}/lib/tk${ver_major2}/demos/widget ${INSTDIR}/tk${ver
_tcltk}/lib/tk${ver_major2}/demos/widget.tcl
Tcl/Tk のソースは、unix と win と OS 固有の部分が分かれているために、クロスコンパイル環境でも、Cygwin など Win32 環境と同じようにコンパイルできてしまいますが、拡張パッケージはそうはうまくいきません。
例えば、configure スクリプトを実行する際、uname -s コマンドなどで実行環境を判断してしまうため、MinGW のクロスコンパイル環境と Linux の環境がごちゃ混ぜになった Makefile が生成されてしまいます。具体的には、拡張パッケージ thread2.6.5 を、Tcl/Tk と同じようにビルドしようとすると、一応コンパイルは通りますが、thread265.dll ではなく libthread2.6.5.so が生成されます。Incr Tcl/Tk や TclX となると、コンパイルも通りません。
Makefile をゴリゴリと修正すればクロスコンパイルができそうですが、なんだかあまりスマートなやり方とは思えません。そういうやり方をすると、今後、同じやり方を維持できるかどうか不安です。そこで、tcl.m4 などをクロスコンパイル用に書き換えてコンパイルできるようにしようとしています。しかし、まだうまくいっていません。時間がかかりそうです。
Tcl/Tk8.5b1 を使いたいので、とりあえず Cygwin 環境を使ったパッケージも用意しようかとコンパイルを始めています。クロスコンパイル環境の構築に少し弱気になっています。