Starpack

Difference between version 77 and 78 - Previous - Next
A '''starpack''' is a single executable file which contains both [base [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 **

   [http://anoved.net/2008/03/starpacker.html%|%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]:   

   [http://equi4.com/papers/skpaper4_7.html%|%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
[http://tk-components.sourceforge.net/tk-bundle-tutorial/index.html%|%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 /]#
===

<<categories>> Application | Deployment | Tclkit