Version 67 of Tclkit Kitgen Build System

Updated 2009-01-12 17:46:27 by RZ

The system can generate Tclkit Lite executables, Tcl packages, starkits and starpacks for different operating systems. Tested are Linux, SunOS, Windows and Irix. Tclkit Lite: http://www.equi4.com/tclkit/tclkitlite.html

Current version uses tcl/tk 8.5.6 and tcl/tk 8.6b1

For additional information please use the following links:

Sources

available from http://sourceforge.net/projects/kbskit

  • kbs.tcl - single source file, all you need
  • *.tgz - prebuilt binaries (IRIX, SunOS, Linux, WindowsNt) containing kit-executables and *.kit files:
  • kbskit*cli* - shell application
  • kbskit*dyn* - tk dynamically linked
  • kbskit*gui* - tk statically linked
  • kbspkg85.kit with:
     bwidget-1.8.0 gridplus-2.3 icons-1.2 Img1.3 itcl3.4 itk3.4 iwidgets4.0.2
     Memchan2.2.1 mentry-3.2 ral0.8.8 sqlite3.6.7 tablelist-4.10 tcllib1.11
     tclx8.4 tdom0.8.2 thread2.6.5 tkcon tklib0.4 Tktable2.9 treectrl2.2.3
     trofs0.4.4 udp1.0.8 wcb-3.1 xotcl1.6.2
  • tksqlite - starpack of sqlite table editor (version 0.5.6)

Quick start

  • Build executables (do not mix 8.5 and 8.6!):
  ./kbs.tcl -r install kbskit-8.5
  ./kbs.tcl -r install tksqlite
  ./kbs.tcl -r -builddir=b86 install kbskit-8.6
  • Build kit-files:
  ./kbs.tcl -r install kbspkg-8.5
  • Start graphical user interface:
  ./kbs.tcl gui
  • Create internal documentation in directory ./doc/:
  ./kbs.tcl doc
  • Display online help:
  ./kbs.tcl
 Kitgen Build System (0.2.6 Revision: 1.13 )
 kbs.tcl ?options? mode ?args?
 options:
  -pkgfile=?file?      contain used Package definitions
                       (default is 'sources/kbskit-8.5/kbskit.kbs')
  -builddir=?dir?      build directory, used with [Builddir]
                       (default is './build$tcl_platform(os)')
  -CC=?command?        set configuration variable _(CC)
                       (default is 'gcc' or existing environment variable 'CC')
  -i -ignore           ignore errors and proceed (default is disabled)
  -r -recursive        recursive Require packages (default is disabled)
  -v -verbose          display running commands and command output
  --enable-symbols
  --disable-symbols    set configuration variable _(SYMBOLS)
  --enable-64bit
  --disable-64bit      set configuration variable _(64BIT)
  --enable-threads
  --disable-threads    set configuration variable _(THREADS)
  --enable-aqua
  --disable-aqua       set configuration variable _(AQUA)
 mode:
  help                 this text
  version              return current version
  doc                  create documentation
  gui                  start graphical user interface
  list ?pattern?       list packages matching pattern (default is *)
  require package ..   return call trace of packages
  sources package ..   get package source files (under sources/)
  configure package .. create [Makedir] (in [Builddir]) and configure package
  make package ..      make package (in [Makedir])
  install package ..   install package (in [Builddir])
  test package ..      test package
  clean package ..     remove make targets
  distclean package .. remove [Makedir]
 package is used for glob style matching against available packages
 (Beware, you need to hide the special meaning of * like foo\*)
 
 The following configuration variables can be used:
 _(64BIT)   = --disable-64bit
 _(AQUA)    = --enable-aqua
 _(CC)      = gcc
 _(DIR)     = unix
 _(SHARED)  = --enable-shared
 _(STATIC)  = --disable-shared
 _(SYMBOLS) = --disable-symbols
 _(THREADS) = --enable-threads
 _(TZDATA)  = --with-tzdata

Build requirements

The following external programs are needed:

  • A C compiler
  • make with handling of VPATH variables (gmake)
  • cvs, svn (not yet used), tar, gzip, unzip to get and extract sources

To build under Windows you need the msys system and put the kbs-sources inside the msys tree (/home/..).

msys: http://sourceforge.net/project/showfiles.php?group_id=10894

License & support

This work is under BSD license (see file 'license.terms')

The Tclkit-specific sources are license free; they just have a copyright. Hold the author(s) harmless and any lawful use is permitted.

This does *not* apply to any of the sources of the other major Open Source Software used in Tclkit, which each have very liberal BSD/MIT-like licenses:

The extensions used each have their own licenses. Please see their sources.

Acknowledgements

This work is based on the Kitgen system (http://www.equi4.com/tclkit/kitgen.html ) and ideas and code about a kitgen build system by Jean-Claude Wippler.

With thanks to John Ousterhout for creating Tcl/Tk, Matt Newman and Vince Darley for developing the virtual file system, and the members of the Tcl Core Team for diligently maintaining and taking forward the Tcl/Tk code base plus extensions.


Questions

LV 2007 June 22

In my resultSunOS/bin directory, I see the following:

 tclkit8.5-cli  tclkit8.5-dyn  tclkit8.5-gui

So, what are the differences between these three "tclkit"s ...

RZ This is because of kitgen and its sources from jcw and according to [L1 ]

  • tclkit-cli - a tclsh-like console app - Tk and related GUI packages are not built in.
  • tclkit-dyn - wish-like, after a package require Tk. Without the package require, at least on Unix, no GUI aspects appear.
  • tclkit-gui - same as "tclkit-dyn", but with Tk linked-in statically

I even tried a minimal tclkitsh but did not really finish the kbs.tcl build process code to do that.

LV "and, are they literally tclkits - that is, have the identical packages as the executables found at the tclkit home site, or are they interpretors that are similar to tclkits?"

LV 2007 July 09

 $ tclkit8.5 # mine is Tcl 8.5a4
 % package require Tcl 8.5
 % package require lwv
 % puts [lsort -nocase [package names]]
 http Itcl Mk4tcl mk4vfs msgcat opt platform pwb rechan scripdoc starkit Tcl tcltest Tk vfs vfs::mk4 vfs::zip vfslib zipvfs zlib

 $ kbskit
 % package require Tcl 8.5
 % package require lwv
 % puts [lsort -nocase [package names]]
 http mk4vfs mklite msgcat opt platform rechan starkit Tcl tcl::tommath tcltest Thread Tk Ttrace vfs vfs::m2m vfs::mk4 vfs::mkcl vfs::zip vfslib vlerq zlib

So, to the "are they literally tclkits" question. the answer is no. Here's the differences I see:

        Tclkit 8.5      Tclkit-lite 8.4.15      Kbskit 8.5
        dde             dde (on Windows)        (I don't know)
        http            http                    http
        Itcl            Itcl                    N/A
        Mk4tcl          N/A                     N/A
        mk4vfs          mk4vfs                  mk4vfs
                                                mklite
        msgcat          msgcat                  msgcat
        opt             opt                     opt
        platform                                platform
        pwb             pwb                     N/A
        rechan                                  rechan
        registry        registry (on Windows)   (I don't know)
        scripdoc                                N/A
        starkit         starkit                 starkit
        Tcl             Tcl                     Tcl
                                                tcl::tommath
        tcltest         tcltest                 tcltest
                                                Thread
        (I don't know)  thrill (on Windows)     (I don't know)
        (I don't know)  thrive (on Windows)     (I don't know)
        Tk              Tk                      Tk
                                                Ttrace
        vfs             vfs                     vfs
                                                vfs::m2m
        vfs::mk4        vfs::mk4                vfs::mk4
        (I don't know)  vfs::mkcl               vfs::mkcl
        vfs::zip        vfs::zip                vfs::zip
        vfslib          vfslib                  vfslib
                                                vlerq
        zipvfs          zipvfs                  N/A
        zlib            zlib                    zlib

Notice that one of the ramifications of this is that Itcl , Mk4tcl, pwb, scripdoc, and zipvfs are not available in the interpreter created.

Per the tclkit creator's wishes, please use a different name, such as kbskit, so as not to confuse applications.

RZ Ok, the executables now start with "kbskit" and the package kit file with "kbspkg".

LV I have a question for you. When I run kbs.tcl -r install kbskit-8.5, the resulting kbskit-gui that is created knows about the following package names:

  • http
  • mk4vfs
  • mklite
  • msgcat
  • opt
  • platform
  • rechan
  • starkit
  • Tcl
  • tcl::tommath
  • tcltest
  • Thread
  • Tk
  • Ttrace
  • vfs
  • vfs::m2m
  • vfs::mk4
  • vfs::mkcl
  • vfs::zip
  • vfslib
  • vlerq
  • zlib

I'm not certain how the "kbspkg" relates to this kbskit.

RZ 'kbskit*' are the executable tclkit's. The packages inside are necessary for the tclkit interpreter. 'kbspkg85.kit' is a kit file containing other extensions. It can be sourced by the 'kbskit*' interpreter.


MSH 19 Feb 2008 I have been keeping an eye on the http://www.equi4.com/pub/tk/downloads.html page for a final 8.5.0 or 8.5.1 starkit executable but no one seems to be maintaining that page anymore. Is the kitgen the only way to go now as I do not have access to a compiler so that makes things very difficult. If anyone has 8.5.1 starkit executables for windows/linux/sun anywhere accessible I would be grateful.

See http://www.patthoyts.tk/tclkit.html


LV Feb 29, 2008

Is there a way to build kbskit so that it includes Itcl? When I look at what packages come in tclkit, that is the major piece missing (also missing are Mk4tcl - but that's gone because this is a tclkit-lite, right? RZ yes, and it is the reason we do not need a C++ compiler any more), pwb, scripdoc (and I think that one is just a backwards compatibility with old code), and zipvfs (anyone know what that one is?).

RZ Before adding Itcl I would ask if it is also OK to put itcl/itk/iwidgets in kbspkg*.kit? Until now I have added the necessary build entries in the HEAD version of kbspkg.kbs. You could build everything with:

 rm -rf sources/kbskit-8.5
 kbs.tcl -r install iwidgets\*

LV I would see no problem putting itk and iwidgets in kbspkg. But the point of putting itcl in kbskit is to run existing starkits. To move itcl into kbspkg would mean that the starkit would have to be modified ...