LoginSignup
2
3

More than 5 years have passed since last update.

Tcl/Tkアプリを1つの実行ファイルにまとめる方法

Last updated at Posted at 2018-07-07

この手の話題は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行目でエラーが発生することがあるので変更しておきます。

common/common.sh
111:            if [ -d "${dir}" ]; then
112:                mv "${dir}"/* . || exit 1
113:
114:                rmdir "${dir}" || exit 1
115:            fi

  ↓↓↓

common/common.sh
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

あたりを流し読みすれば大体の疑問は晴れると思います。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3