この手の話題はStarpackを前提にしているものが多いですが、ここではKitCreator+MinGW-w64を使った方法を紹介します。
なお以下はWindows7 32bitおよびWindows10 64bitでWindowsの実行ファイルをビルドする方法を説明しています。
MSYS2
1. KitCreatorのダウンロード
$ wget 'http://www.rkeene.org/devel/kitcreator-0.11.0.tar.gz'
$ tar xf kitcreator-0.11.0.tar.gz
2. KitCreatorの修正
詳しい理由はよく分からないのですが、112行目と114行目でエラーが発生することがあるので変更しておきます。
111: if [ -d "${dir}" ]; then
112: mv "${dir}"/* . || exit 1
113:
114: rmdir "${dir}" || exit 1
115: fi
↓↓↓
111: if [ -d "${dir}" ]; then
112: cp -a "${dir}"/* . || exit 1
113:
114: rm -fr "${dir}" || exit 1
115: fi
3. tclsh相当コマンドのビルド
ここでビルドした実行ファイルは、最後にTcl/Tkスクリプトの実行ファイルをビルドする時に使用します。
KITCREATOR_PKGSをスペースにしておくのがミソです。Tcl/Tkのバージョン(以下の例では8.6.8)はお好みで。
$ cd kitcreator-0.11.0
$ KITCREATOR_PKGS=' ' ./kitcreator 8.6.8
$ mv tclkit-8.6.8.exe tclkitsh-8.6.8.exe
4. Tcl/Tkスクリプトの準備
ビルド時には暗黙のパッケージとKITCREATOR_PKGSで指定したパッケージそれぞれをビルドするためにkitcreator-0.11.0ディレクトリ直下にあるパッケージと同じ名前のディレクトリ内のbuild.shが実行され、最後にkitshのビルド処理でkitcreator-0.11.0/*/outディレクトリの中身がそっくりそのままVFSに配置されます。
そして実行時にはVFSにmain.tclがあればそれが実行され、無ければwishと同じ挙動になります。
従ってbuild.shだけ用意し、build.shから外部のソースツリーをmakeしてoutディレクトリにmake installするという方法でもOKです。
アイコンを独自のものに変更したい場合は「kitcreator-0.11.0/kit.ico」という名前で配置します。
また実行ファイルのプロパティ(著作権情報など)を変更したい場合は「kitcreator-0.11.0/kit.rc」という名前でリソースファイルを配置します。オリジナルのリソースファイル「kitcreator-0.11.0/kitsh/build/kitsh-0.0/kit.rc」を流用すればいいでしょう。
$ cd kitcreator-0.11.0
$ mkdir -p app/buildsrc
$ cat <<EOF > app/build.sh
> #!/bin/sh
> rm -fr out
> cp -a buildsrc out
> EOF
$ cat <<EOF > app/buildsrc/main.tcl
> pack [label .w1 -text "Hello, world!"]
> pack [button .w2 -text "Quit" -command exit]
> EOF
5. Tcl/Tkスクリプトを実行ファイルとしてビルド
先程ビルドしたtclsh相当コマンドはここで使用します。Tcl/TkバージョンやVFS設定はお好みで。
$ cd kitcreator-0.11.0
$ TCLKIT=$(pwd)/tclkitsh-8.6.8.exe KITCREATOR_PKGS='tk app' ./kitcreator retry 8.6.8 --enable-kit-storage=cvfs --with-obsfucated-cvfs
$ mv tclkit-8.6.8.exe app.exe
Bash on Ubuntu on Windows
app.exeビルド時に「--host=i686-w64-mingw32」というオプションを追加すると、Windows10で利用できるようになった変態Ubuntuでクロスコンパイルすることもできます。
もやもやしたら・・・
上記の説明を不親切に感じた、あるいはもう少し詳しく知りたいといった場合は、
- kitcreator-0.11.0/kitcreator
- kitcreator-0.11.0/common.sh
- kitcreator-0.11.0/kitsh/build.sh
あたりを流し読みすれば大体の疑問は晴れると思います。