본문으로 바로가기

Tclkit, Starkit, Starpack

category 카테고리 없음 2024. 6. 28. 11:39

FreeWrap 만큼 많이 사용되는 방법인, Tclkit/Starkit/Starpack 툴을 사용하여 독립 실행 파일로 만드는 방법에 대해서 알아봅니다. 

Tclkit

http://www.equi4.com/tclkit.html Tclkit은 Tcl/Tk로 작성된 애플리케이션을 스탠드얼론(stand-alone) 런타임에, 단일 실행 파일만으로 Tcl/Tk의 애플리케이션을 실행할 수 있게 하는 툴입니다. 예를 들면

tclkit-win32.upx.exe demo.tcl

위와 같이 Tcl/Tk를 설치하지 않아도 tclkit-win32.upx.exe만 있다면 Tcl/Tk를 실행할 수 있습니다. 즉, Tclkit툴을 이용하면 Tcl/Tk를 설치할 필요도 없으며 애플리케이션의 배포에도 편합니다. Tclkit은 표준으로 InerTcl, Matakit이 포함되어 있으며, 항상 최신버전의 Tcl/Tk에 대응합니다.

Tclkit의 다운로드

Windows/Linux와 기타 플랫폼 실행 형식은 Download Area 에서 받을 수 있습니다. 예를 들면, Windows 사용자는 tclkit-win32.upx.exe를 다운로드합니다. 다운로드한 파일이 바로 실행가능한 형식의 파일입니다. Linux 사용자는 tclkit-linux-x86.gz파일을 받습니다. gunzip으로 압축을 해제한 후의 파일을 바로 실행가능합니다. Solaris사용자는 CPU타입이 sparc이면 tclkit-solaris-sparc.gz를 받고, x86타입이면 tclkit-solaris-x86.gz 파일을 받습니다. Linux와 마찬가지로 압축을 해제한후의 파일은 바로 실행 가능합니다.

Tclkit의 사용법

Tclkit의 사용법은 간단합니다.

set hellobutton [button .hb -text "hello"] 
pack $hellobutton

 

위와 같이 Tcl/Tk가 설치되어 있지 않은 곳에서도 실행이 가능합니다. 하지만 우리는 작성한 tcl 스크립트 소스의 공개를 원치 않고, hello.exe 파일만 있으면 실행이 되길 원합니다.

Starkit

 

http://www.equi4.com/starkit.html

 

Starkit은 tcl 스크립트 파일을 하나의 파일로 패키징 하는 역할을 합니다. 패키징 된 파일의 확장자는 *.kit이며, 패키징된 파일은 다양한 플랫폼에서 사용 가능합니다.

Starkit 다운로드

Windows버전과 Unix버전의 SDK는 Starkit Developer eXtension 에서 다운로드할 수 있습니다. Windows용은 tclkit-win32-sh.upx.exe와 sdx.kit, sdx.bat를 다운로드합니다. 다운받은후 tclkit-win32-sh.upx.exe를 tclkitsh.exe로 파일 이름을 변경합니다. Unix라면 Tclkit을 위에서 다운받은 상태이므로, sdx.kit만 다운받습니다.

포장하기

Windows에서 hello.tcl을 패키징 하는 방법은 다음과 같습니다.

패키징 결과인 hello.kit이 생성됩니다. Windows에서 hello.kit의 실행은 다음과 같이합니다.

패키징 된 hello.kit파일의 구조를 보겠습니다.

hello.kit의 구조는 위 그림에서 보는 바와 같이 가상파일(VFS) 시스템으로 되어있습니다. hello.tcl 이외의 파일을 패키징하고 싶으면 다음과 같이 합니다.

현재 디렉토리 위치에 hello.vfs 디렉토리가 생성됩니다. 한글을 사용한 경우는, 한국어의 encoding도 함께 패키징 해야 합니다.

hello.vfs\lib\

에 tcl8.4\encoding 폴더를 만들어 Tcl의 인코딩 파일을 복사합니다. Windows의 경우라면 cp949.enc 파일을 복사합니다. 또한 패키징하고 싶은 확장 패키지가 있다면,

hello.vfs\lib

에 복사합니다. 이렇게 모든 파일의 복사가 끝났다면, 한번 더 패키징을 합니다. 실제로, hello.tcl 이외의 다른 tcl파일을 source 한 경우는 아래와 같이 원본 hello.tcl파일을 수정해야 합니다. 여기서 popup.tcl 파일은 hello.vfs\lib\app-hello 폴더에 위치합니다. 

# hello.tcl
set appdir [file join $starkit::topdir lib/app-hello]
source [file join $appdir popup.tcl]

set hellobutton [button .hb -text "hello" -command { popup_hello } ]
pack $hellobutton
# popup.tcl
proc popup_hello { } {
   tk_messageBox -message "hello :)"
}

Starpack

http://wiki.tcl.tk/3663

 

Starpack은 Tcl파일들을 단일 실행파일로 패키징 하는 역할을 합니다. 즉, Tclkit과 Starkit의 기능을 합쳐놓은 것이라 생각할 수 있습니다.

실행파일 만드는 방법

Windows에서 hello.vfs를 실행파일로 만드는 방법은 다음과 같습니다.

 

현재폴더 위치에 hello.exe 파일이 생성됩니다. 생성된 파일을 실행 후

버튼을 클릭하면

 

hello 메시지가 출력됩니다. 이상 Tcl/Tk로 만든 프로그램을 독립적인 실행파일로 만드는 방법에 대해서 알아보았습니다. 이제 여러분은 hello.exe 파일 하나만 배포하면 됩니다.

Starpack의 제한사항

현재 Starpack은 몇 개의 제한사항이 있습니다. 그중에서도 아래의 제한 사항은 치명적일 것입니다.

  • Starpack으로 패키징 한 실행파일(exe)은, exec 커맨드 또는 pipe로 실행할 수 없다.
  • 실행파일은 패키징이 안되며, 외부에 두어야 한다.

Starpack의 주의사항

Starpack은 VFS 시스템을 사용하기 때문에, 스크립트와 Starpack의 동작에 차이가 있습니다. 기대한 결과가 나오지 않는 경우, 스크립트를 수정할 필요가 있을 수 있습니다. 참고로 Starpack으로 패키징 된 실행파일이

D:/hello.exe

에 위치해 있을 때 다음과 같은 결과가 나타납니다.

 

수행 코드
설명
Starpack의 실행 결과
$argv0 스크립트의 패스 이름 D:/hello.exe/main.tcl
info script 스크립트의 패스이름 D:/hello.exe/lib/app-hello/hello.tcl
info nameofexecutable 실행 형식 이름 D:/hello.exe
file system $argv0 파일 시스템 이름 tclvfs { ::vfs::mk4::handler exe}
file system info script 파일 시스템 이름 tclvfs { ::vfs::mk4::handler exe}
file system info nameofexecutable 파일 시스템 이름 tclvfs {::vfs::mk4::handler exe}
file system $starkit::topdir 파일 시스템 이름 tclvfs {::vfs::mk4::handler exe}

 

위 결과로 보면, 함께 패키징 한 스크립트를 source시는 아래와 같이 합니다.

file dirname [info script]

또한 exec나 pipe를 한경우는 아래의 패스를 사용합니다.

file dirname [info nameofexecutable]

아이콘 커스터마이즈

Starpack의 아이콘은 기본 Tk의 아이콘이지만, *. ico 파일을 함께 패키징 함으로써 변경도 가능합니다. 아이콘 파일 하나로 아래의 해상도를 가지는 아이콘 파일을 준비해야 합니다.

16x16, 4-bit (16-color)
16x16, 8-bit (256-color)
32x32, 4-bit (16-color)
32x32, 8-bit (256-color)
48x48, 4-bit (16-color)
48x48, 8-bit (256-color)

예를 들어 hello.exe의 아이콘을 변경하고 싶은 경우는,

hello.vfs/tclkit.ico

에 아이콘을 복사하고, 다시 패키징 하는 것으로 변경이 됩니다. *.ico 파일의 이름은 반드시 tclkit.ico 이어야 합니다.

sdx.bat wrap hello.exe -runtime tclkit-win32.upx.exe

마치며...

Tclkit/Starkit/Starpack은 차세대 패키징 기술입니다. 최신의 Tclkit/Starkit/Starpack은 각종 encoding을 지원하므로, 한글을 사용한 경우 바이트코드 컴파일러가 불필요해졌습니다. 끝으로 한글을 사용한 간단한 hello.exe를 첨부합니다.

hello.exe
0.95MB

 

참고로 사용자 취향에 맞게 tclkit을 만드는 방법은 아래의 사이트를 참고하시기 바랍니다.

http://www.equi4.com/284


Starpack + BLT = dqkit

dqkit: http://sourceforge.net/project/showfiles.php?group_id=99106&package_id=106219

 

BLT는 stub화 되어 있지 않은 확장 패키지여서, Starpack에 패키징 하는 것은 불가능하므로, BLT가 포함된 Starkit인 DataQuest사의 dqkit을 사용하면 됩니다. 참고로 직접 수정한 dqkit0.4(dqkit04_ko)를 올립니다. 윈도우 전용입니다. 한국어 encoding파일을 추가했으며, Tcl/Tk 8.4.5를 지원하는 dqkit(Starkit+BLT), 표준 Tcl/Tk 8.4.6을 지원하는 Starkit을 포함하고 있습니다. 사용법은 Starkit과 거의 동일하며, 현재 아이콘의 변경은 안됩니다.

sdx.bat wrap hello.exe -runtime dqkit-Win32-i386-all.exe

Starkit과 dqkit의 비교

내장된 표준 Tcl확장 패키지를 비교해 보았습니다. dqkit은 Thread가 포함되어 있습니다.

Starkit 8.4.9 http pwb rechan zipvfs tcltest opt mk4vfs vfs::zip vfslib scripdoc msgcat zlib registry starkit Tcl Itcl dde Mk4tcl vfs vfs::mk4 Tk
dqkit 0.2 http Thread tbcload pwb rechan zipvfs BLT tcltest opt tls mk4vfs vfs::zip vfslib scripdoc msgcat Iwidgets Itk zlib registry starkit sqlite Tclx Tcl Itcl dde Mk4tcl vfs vfs::mk4 Tk

dqkit04_ko.zip
3.27MB