Starkitの使い方のメモ

なんとなくめんどくさそうな感じで使うのを避けてきたStarkitだけど、使ってみたいパッケージがstarkit形式で配布されてた && [source hoge.kit]でstarkit形式のパッケージが読みこめるというのを知って、ちょっと興味がでてきたので使い方をまとめてみる。。。

starkit形式

starkitはスクリプトやらバイナリやらを一つのファイルにまとめる仮想ファイルシステムで、starkit拡張の実体はlib/vfs1.x/starkit.tclのようだ。ActiveTclではデフォでインストールされている。
あと名前がややこしい。

  • Tclkit(tclkit.exe)
    wishと実行に必要なライブラリを一つにをまとめた実行形式で、Starkitのページで配布されている。Starpackを作るのに必要。
  • Starkit
    ユーザーが作ったスクリプトなどをstarkit仮想ファイルにまとめたものをこう呼ぶようだ。
  • Starpack
    ユーザーの書いたスクリプトと実行環境抱き合わせたもの(Freewrapみたいな)をこう呼ぶようだ。Tclkit + Starkit = Starpack。作るのにはTclkitが必要。
  • SDX
    仮想ファイルにラップしてStarkitやStarpackを作ったり、アンラップしたりするツール。

SDXの使い方

SDXはsdx.kitで配布されているので、実行するにはtclの実行環境が必要。tclshよりtclkitを使ったほうがバグが無いかも。

tclsh sdx.kit qwrap hoge.tcl

とか

tclkit sdx.kit qwrap hoge.tcl


コマンド

  • 単一のtclスクリプトをstarkitにラップする
    sdx qwrap myscript.tcl ?name? ?-runtime runtime.kit?
    name          name.kitに名前を変更
    -runtime file 実行環境付き
  • mystar.vfsディレクトリからstarkitを作る(複数のファイルのときはこっちを使う)
    sdx wrap mystar.kit ?options...? 
    -interp name  tclkit以外の実行環境にしたいとき(バッチファイルの出力が変るだけ)
    -nocomp       ファイルを圧縮しない
    -runtime file 実行環境付き
    -verbose      ラッピング中の挙動を一々報告する
    -writable    変更を可能にする(?)
  • starkitをアンラップする。
    sdx unwrap mystar.kit
  • starkitに含まれてるファイルのリストを表示する
    sdx lsk mystar.kit
    sdx ls ?-l? mystar.kit
    lsでディレクトリなどを掘り下げる時はsdx ls -l mystar.kit/libのようにする。
  • バージョン情報(もっとも新しいファイルの日付)を表示する
    sdx version mystar.kit~
  • コピーする。使ってない空きスペースを取り除くのでサイズが最適化される。
    sdx mkpack oldstar.kit newstar.kit
  • headファイルとtailファイル(mystar.head,mystar.tail)に分割する
    sdx mksplit mystar.kit
    headファイルにはstarkitのヘッダやexe(starpackの場合?)が含まれていて、tailファイルにはMetakitのデータが含まれている。Tclkitにエンコードを追加したいときは、このコマンドで分割し、tailファイルを作り直すようだ。
  • サーバに接続してstarkitを自動アップデートをする。
    sdx update mystar.kit ?options...?
    -from url  urlのStarsyncサーバ(http)に接続する。
    -n         差分を表示するだけでアップデートは実行しない。
    http://mini.net/sdarchive/ に色々なstarkitがある。
  • FTPサーバ
    sdx ftpd ?option?
  • HTTPサーバ
    sdx httpd ?option?

使ってみる1(単一ファイルをqwrap)

hello.tcl

package require Tk
tk_messageBox -message "Hello World"

ラップする

tclsh sdx.kit qwrap hello.tcl -runtime tclkit.exe
rename hello hello.exe

使ってみる2(複数ファイル)

複数ファイルの場合、hoge.vfsという仮想ファイルシステムのrootになるディレクトリを作りそこにファイルをまとめて置く。また、スタートアップのスクリプトはmain.tclにしておく。あとファイルパス名に注意すること。

hello.vfs/main.tcl

package require Tk
set vroot [file dirname $argv0]
set datfile [file join $vroot data.dat]

set fs [open $datfile r]
set str [read $fs]
close $fs
tk_messageBox -message $str

hello.vfs/data.dat

This is a test file.

ラップする

tclsh sdx.kit wrap hello.exe -runtime tclkit.exe

日本語エンコードの追加

日本語のエンコーディングはデフォで入っていないので追加しないと日本語が文字化けする。ここではWindowsの例を示す。 まずtclkitを用意する。ここではtclkit-win32.upx.exeを使うことにする。

tclsh sdx.kit unwrap tclkit-win32.upx.exe

としてtclkitを解凍する。できたtclkit-win32.upx.vfsディレクトリ中のlib/tcl8.4/encoding/に必要なエンコーディング(例えばcp932,shiftjis,euc-jpなど)をオリジナルのとこから持ってきてコピーする。

sdx mksplit tclkit-win32.upx.exe

としてバイナリを分離する。tclkit-win32.upx.tailと、tclkit-win32.upx.headができる。

sdx wrap tclkit-win32.upx.exe -runtime tclkit-win32.upx.head として再ラップする。この場合tclkitを上書きしてるので、嫌なら先に適当に名前を変えておくこと。

(参考) http://www.equi4.com/tkunicode.html

リンク

http://www.interq.or.jp/japan/s-imai/tcltk/tclkit.html
http://wiki.tcl.tk/8186

コメントをどーぞ



CategoryTclTk


|New|Edit|Freeze|Diff|Backup|Upload|Copy|Rename|
Last-modified: 2005-04-27 (Wed) 00:00:00 (1212d)
HTML convert time: 0.088 sec.