Starpack

A starpack is a single executable file which contains both a Tclkit and a Starkit.

See Also

qstarpack
A small script that eases migrating from freewrap to starpacks.
StarPack helper ,by JR
Custom Icons For Win32 Starpacks - The Real Story

Tools

starpacker
An sdx-based utility for making starpacks.
Packer
Builds cross-platform Starpacks with Tcllib included.

Description

Starpacks are standalone executables, which makes them even easier to distribute and use than Starkits. This convenience does introduce a number of trade-offs:

  • A Starpacks are platform-specific. One starpack must be produced for each deployment target
  • Starpacks cannot modify themselves
  • Starpacks must be updated as a whole, and are (much) larger than most Starkits

Starpacks use the same packaging mechanism as Starkits. their content can be listed and extracted with the SDX utility. The main difference is that the "header" is a large executable file, and that the files stored inside include all the standard Tcl/Tk runtime support files.

Creating Starpacks

   [https://www.magicsplat.com/blog/starpack-example/%|%Building Tcl 8.6 single file applications - a step-by-step guide], by [apn%|%Ashok P. Nadkarni], 2020-12-28:  Six steps to getting the job done.
Starting effective starkit-based pure-Tcl development: the starkit::* namespace
How an application should be laid out to be packed as a starpack.
How to create my first Starpack
Constructing a Starpack , by Steve Landers
Building Starkits and Starpacks using a Makefile

Developing for Starpacks

sbron 2005-08-17: Code can tell if it's running out of a starpack by checking the variable ::starkit::mode. In a starpack it's set to "starpack", and in a starkit it's set to (surprise!) "starkit".


LV 2006-11-14: Anyone willing to write a tutorial on creating a starpack that is designed to phone home (i.e. contact a web site) to check for updates? There are at least two scenarios I can see where this would be useful. The first, of course, is checking to see if there are new versions... sort of the functionality that sdx provides. The second would be simple updates of data files.

I suspect there are tricky parts - the application probably can't update the file that is being executed, so some messing around with renaming is probably necessary. The tclvfs is in the tclkit, right?, so that should make getting to the data a bit easier, if so. Anyways, a link to a tutorial on this subject would really be helpful.

History

The original term for a starpack was custom tclkit

Tclkit on Mac

LV: from the starkit mailing list, jcw says: You're going to have to create starpacks on the Mac. For OS 9

Reason: MacOS files have a "data fork" and a "resource fork". The .bin files are an exchange format which ties them together (along with a bit of "finder info"). Catenating anything a the end probably will simply be ignored on unpack - which is what happens once you take it to the mac and unpack through StuffIt Expander or some such (Mac browsers tend to do that automatically, right after download).

If you do it on the Mac, while the forks are distinct, sdx will concatenate after the data fork. Then you can run it through StuffIt to create the transferable .bin version.

Running SDX on the Mac takes some trickery, since SDX is command-line driven, and the Mac has only tclkit:

Launch tclkit

In its console, type:

set argv [list wrap myapp -prefix mytclkit]
source sdx.kit

The sdx starkit will perform its work (and exit, I think)

Some time later, CL notes the availability of How to Build Tcl/Tk Application Bundles: the Mac Way

Misc

The author thinks it has some VFS version problems with Windows Tclkits, but he hasn't had an opportunity to work them out. (Any advice or information on that would be useful.) He uses it on Mac OS X.


LV Thanks. I am still stuck, however, trying to figure out what I am trying to do. eskil is a stand alone Tcl/Tk late 8.5 or 8.6 based application that allows the user to compare two files and show, using color highlighting, the differences. I would like to create a starpack of the application. Since I've not found a working version of tclkit for Solaris 8 that is new enough to use for this purpose, I was hoping to be able to replace the tclkit in the sdx wrap command with kbskit to get the same effect. Is this something that is doable, or do I indeed face having to build a specialized kbskit that includes eskil in the resulting binary?

Thanks!

RZ: download eskil24.kit and then type

tclkit sdx.kit unwrap eskil24.kit
tclkit sdx.kit wrap eskil24 -runtime kbsvq8.5-gui

You get a starpack called 'eskil24'.


MHo 2012-05-07: I got the following on RHEL linux with tclkit 8.5.9:

root@tqs-test /# ./tclkitlinux
% info pa
8.5.9
% info commands
tell socket subst open eof pwd glob list pid exec auto_load_index time unknown eval lassign lrange fblocked lsearch auto_import gets case lappend proc break variable llength auto_execok return linsert error catch clock info split array if fconfigure concat join lreplace source fcopy global switch auto_qualify update close cd for auto_load file append lreverse format unload read package set binary namespace scan apply trace seek zlib while vlerq chan flush after vwait dict continue uplevel foreach lset rename rechan fileevent regexp lrepeat upvar encoding expr unset load regsub history interp exit puts incr lindex lsort tclLog string
% exit
'''libgcc_s.so.1 must be installed for pthread_cancel to work
Aborted (core dumped)'''
root@tqs-test /#

With 8.5.10, it's slightly different:#

root@tqs-test /# ./tclkitshlinux2
./tclkitshlinux2: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory
root@tqs-test /#