Arjen Markus (16 march 2005) While tclkit comes with Itcl out-of-the-box, it does not include Itk or Iwidgets. So to wrap an application that uses Iwidgets I needed to copy all the relevant script files and binary libraries into the app-xxx directory.
But there was a further complication: I had Itcl etc. version 3.2 as part of my Tcl distribution, tclkit comes with Itcl 3.3! This made Itk complain ... and I know of no way to drop a (binary) package ...
The solution is a bit tricky:
That made the starkit start and complain about the creation of the tabnotebook rather than about the incompatible versions of the various packages. One down, one to go.
I do not know why, but for some reason I needed to source two *.itk files explicitly - and then it worked!
The code below is embellished a bit, but this is what I use to start the application instead of the original script (called "interface.tcl"):
# Trick to force tclkit to use Itcl 3.2 instead of 3.3 # package provide app-interface 1.0 set scriptname [info script] set libname [file dirname [info script]] set applib [file dirname [file dirname [info script]]] set startup [string map [list SCRIPT $scriptname APP $applib LIBX $libname] { package require Tk lappend auto_path APP set env(ITCL_LIBRARY) LIBX set env(ITK_LIBRARY) LIBX package require -exact Itcl 3.2 package require -exact Itk 3.2 package require -exact Iwidgets 4.0.2 source [file join [file dirname SCRIPT] "Archetype.itk"] source [file join [file dirname SCRIPT] "Widget.itk"] source [file join [file dirname SCRIPT] "interface.tcl"] }] interp create INTERFACE interp eval INTERFACE $startup
Notes:
Eric Amundsen 03/16/05 as does Kitten, which can be a lot to haul around. However, I have had good luck unwrapping the Kitten and just taking the pieces I need and wrapping it all back up again.
Cyan Ogilvie After some playing around I got Itk 3.3 working in tclkit by copying in the lib dir and adding "set ::env(ITK_LIBRARY) $dir" at the top of the pkgIndex.tcl. This seems to be what kitten does to get it to work.