Tclkit Kitgen Build System

Summary

Kitgen Build System can generate Tclkit and Tclkit Lite executables and Tcl packages for different operating systems. Tested are Linux, SunOS, Windows and Irix. Darwin binaries are provided by Christian Gollwitzer.

Current version 0.4.9 uses tcl/tk 8.6.6

See Also

Obtaining

sources and binaries are available at sourceforge.net

kbs.tcl
single source file, all you need

Metakit tclkit interpreter, read/write of kitfiles, C++ libs necessary:

kbsmk*cli*
shell application
kbsmk*dyn*
tk dynamic loadable
kbsmk*gui*
tk static inserted

Vlerq tclkit lite interpreter, readonly kitfiles:

kbsvq*cli*
shell application
kbsvq*dyn*
tk dynamic loadable
kbsvq*gui*
tk static inserted

Batteries-included interpreter:

kbsvq*bi

with:

    bwidget1.9.10 gridplus2.11 icons1.2 img1.4.6
    memchan2.3 mentry3.7 nsf2.0.0 pdf4tcl0.8.4 ral0.11.7 rbc0.1
    tablelist5.16 tcllib1.18 tclx8.4 tdom0.8.3 thread2.7.2 tkcon tkdnd2.8
    tklib0.6 tkpath0.3.3 tktable2.10 treectrl2.4.1 trofs0.4.9 udp1.0.11
    ukaz0.2 vectcl0.2 vectcltk0.2 wcb3.5 xotcl1.6.8

Sqlite table editor:

   *_tksqlite 

Quick start

Get the script:

wget -O kbs.tcl http://sourceforge.net/projects/kbskit/files/kbs/0.4.9/kbs.tcl/download

or the following on OS X (where 'wget' is a link to 'curl') *Note MAC OSX you will need to install wget and cvs separately.

curl -o kbs.tcl -L http://sourceforge.net/projects/kbskit/files/kbs/0.4.9/kbs.tcl/download

make it executable:

chmod a+x kbs.tcl

Build Tclkit executables:

./kbs.tcl -r -mk install kbskit8.5

Build Tclkit Lite executables:

./kbs.tcl -r -vq install kbskit8.5

Build user defined batteries included tclkit lite executables:

./kbs.tcl -r -vq-bi -bi=".." install kbskit8.5

Build kit-file:

./kbs.tcl -r install kbspkg8.5

Start graphical user interface:

./kbs.tcl gui

Display online help:

./kbs.tcl
Kitgen build system (0.4.9)
Usage: kbs.tcl ?options? command ?args?

options (configuration variables are available with [Get ..]):
  -pkgfile=?file?   contain used Package definitions
                    (default is empty and use only internal definitions)
  -builddir=?dir?   set used building directory containing all package
                    specific 'makedir' (default is './build$tcl_platform(os)')
  -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
  -CC=?command?     set configuration variable 'CC'
                    (default is 'gcc' or existing environment variable 'CC')
  -bi=?package ..?  set configuration variable 'bi' (default is '')
                    to list of packages for use in batteries included builds
  --enable-*
  --disable-*       set configuration variable '-*'
  Used external programs (default values are found with 'auto_execok'):
  -make=?command?   set configuration variable 'exec-make'
                    (default is first found 'gmake' or 'make')
  -cvs=?command?    set configuration variable 'exec-cvs' (default is 'cvs')
  -svn=?command?    set configuration variable 'exec-svn' (default is 'svn')
  -tar=?command?    set configuration variable 'exec-tar' (default is 'tar')
  -gzip=?command?   set configuration variable 'exec-gzip' (default is 'gzip')
  -bzip2=?command?  set configuration variable 'exec-bzip2' (default is 'bzip2')
  -git=?command?    set configuration variable 'exec-git' (default is 'git')
  -unzip=?command?  set configuration variable 'exec-unzip' (default is 'unzip')
  -wget=?command?   set configuration variable 'exec-wget' (default is 'wget')
  -doxygen=?command? set configuration variable 'exec-doxygen'
                    (default is 'doxygen') you need at least version 1.7.5
  Used interpreter in package scripts (default first found in '/home/rene/kbs.sf/buildLinux/bin')
  -kitcli=?command? set configuration variable 'kitcli' (default 'kbs*cli*')
  -kitdyn=?command? set configuration variable 'kitdyn' (default 'kbs*dyn*')
  -kitgui=?command? set configuration variable 'kitgui' (default 'kbs*gui*')
  Mk4tcl based 'tclkit' interpreter build options:
  -mk               add 'mk-cli|dyn|gui' to variable 'kit'
  -mk-cli           add 'mk-cli' to variable 'kit'
  -mk-dyn           add 'mk-dyn' to variable 'kit'
  -mk-gui           add 'mk-gui' to variable 'kit'
  -mk-bi            add 'mk-bi' to variable 'kit'
  -staticstdcpp     build with static libstdc++
  Vqtcl based 'tclkit lite' interpreter build options:
  -vq               add 'vq-cli|dyn|gui' to variable 'kit'
  -vq-cli           add 'vq-cli' to variable 'kit'
  -vq-dyn           add 'vq-dyn' to variable 'kit'
  -vq-gui           add 'vq-gui' to variable 'kit'
  -vq-bi            add 'vq-bi' to variable 'kit'
  If no interpreter option is given '-vq' will be asumed.

additional variables for use with [Get ..]):
  application       name of application including version number
  builddir          common build dir (can be set with -builddir=..)
  makedir           package specific dir under 'builddir'
  srcdir            package specific source dir under './sources/'
  builddir-sys
  makedir-sys
  srcdir-sys        system specific version (p.e. windows C:\.. -> /..)
  sys               TEA specific platform subdir (win, unix)
  TCL*              TCL* variables from tclConfig.sh, loaded on demand
  TK*               TK* variables from tkConfig.sh, loaded on demand

command:
  help              this text
  doc               create program documentation (./doc/kbs.html)
  license           display license information
  config            display used values of configuration variables
  gui               start graphical user interface
  list ?pattern? .. list packages matching pattern (default is *)
                    Trailing words print these parts of the definition too.
  require pkg ..    return call trace of packages
  sources pkg ..    get package source files (under sources/)
  configure pkg ..  create 'makedir' (in 'builddir') and configure package
  make pkg ..       make package (in 'makedir')
  install pkg ..    install package (in 'builddir')
  test pkg ..       test package
  clean pkg ..      remove make targets
  distclean pkg ..  remove 'makedir'
'pkg' is used for glob style matching against available packages
(Beware, you need to hide the special meaning of * like foo\*)

Startup configuration:
  Read files '$(HOME)/.kbsrc' and './kbsrc'. Lines starting with '#' are
  treated as comments and removed. All other lines are concatenated and
  used as command line arguments.
  Read environment variable 'KBSRC'. The contents of this variable is used
  as command line arguments.

The following external programs are needed:
  * C-compiler, C++ compiler for metakit based programs (see -CC=)
  * make with handling of VPATH variables (gmake) (see -make=)
  * cvs, svn, tar, gzip, unzip, wget to get and extract sources
    (see -cvs= -svn= -tar= -gzip= -unzip= -wget= options)
  * msys (http://sourceforge.net/project/showfiles.php?group_id=10894) is
    used to build under Windows. You need to put the kbs-sources inside
    the msys tree (/home/..).

Build Requirements

The following external programs are needed:

  • A C compiler
  • make with handling of VPATH variables (gmake aka GNU make)
  • wget, cvs, svn, bzip2, git, tar, gzip, unzip to get and extract sources

To build under Windows you need the mingw (c:\mingw32) and msys (c:\mingw32\msys). Put "c:\mingw32 /mingw" in c:\mingw32\msys\etc\fstab and copy kbs in C:\mingw32\msys\home\<USER>. And do not forget to put "c:\mingw32\bin" to the PATH environment variable. See http://www.mingw.org/wiki/Getting_Started

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-06-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 [L2 ]

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-07-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:

[to be added - the versions of the packages one finds in these options]

Tclkit 8.5 Tclkit-lite 8.4.15 Kbs (version 0.3) kbs (latest version, building 8.6 with metakit)
dde dde (on Windows) dde (on Windows) ???
N/A N/A N/A fileutil::globfind
http http http http
Itcl Itcl itcl3.4 in kbsmk8.5* itcl and Itcl 4.0 in kbsmk8.6*
Mk4tcl N/A in kbsmk* in kbsmk
mk4vfs mk4vfs mk4vfs N/A
N/A N/A mklite N/A
msgcat msgcat msgcat msgcat
opt opt opt opt
platform N/A platform platform
pwb pwb N/A N/A
rechan N/A rechan N/A
registry registry (on Windows) registry (on Windows) unknown
scripdoc N/A N/A N/A
starkit starkit starkit starkit
Tcl Tcl Tcl Tcl
tcl::tommath tcl::tommath
unknown unknown unknown tclkitpath
N/A N/A N/A TclOO
tcltest tcltest tcltest
Thread Thread
(I don't know) thrill (on Windows) (I don't know) unknown
(I don't know) thrive (on Windows) (I don't know) unknoqn
N/A N/A N/A tile
Tk Tk Tk Tk
N/A N/A N/A trsync
N/A N/A N/A Ttk
N/A N/A N/A ttk::theme::alt
N/A N/A N/A ttk::theme::clam
N/A N/A N/A ttk::theme::classic
N/A N/A N/A ttk::theme::default
unknown unknown Ttrace Ttrace
vfs vfs vfs vfs
N/A N/A N/A vfs::ftp
N/A N/A N/A vfs::http
vfs::m2m N/A
vfs::mk4 vfs::mk4 vfs::mk4 vfs::mk4
(I don't know) vfs::mkcl vfs::mkcl
N/A N/A N/A vfs::ns
N/A N/A N/A vfs::tar
N/A N/A N/A vfs::quota
N/A N/A N/A vfs::template::version
N/A N/A N/A vfs::template::version::delta
N/A N/A N/A vfs::test
N/A N/A N/A vfs::tk
N/A N/A N/A vfs::urltype
N/A N/A N/A vfs::webdav
vfs::zip vfs::zip vfs::zip
vfslib vfslib vfslib
vlerq N/A
zipvfs zipvfs N/A N/A
zlib zlib zlib N/A

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.


LV 2008-02-28: 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 ...


LV: 2009-03-27

Is there a way to provide a path to a usable tclsh to kbs.tcl so that it doesn't have to create a tclsh before beginning the configuration, etc.?

RZ: Because it is a tcl script you can do p.e.

wish8.5 kbs.tcl ...

Yes, you need at least 8.5 because of {*}! And the first invocation without this starts the compile.

Or you change the first line of 'kbs.tcl' to

#! /path/to/your/wish8.5

And you need 'sources/kbskit*/' for the standard kbskit.kbs or you always use your own with -pkgfile=<path/to/your/kbsfile>


LV 2009-04-20: Just a note for other Solaris users. In the above page, there is a requirement that the build process requires GNU make. If you encounter a case where the build fails saying "no input files", that means that your $PATH is set in such a way that you are getting /usr/ccs/bin/make instead of the GNU make.


LV 2009-May-07: I am wondering about the line

./kbs.tcl -r -vqi-bi -bi=".." install kbskit8.5

mentioned above. The -vq part of -vqi-bi, I presume, means the tclkit lite, and the -bi means batteries included. Is that really all one string, without spaces, etc.? Is the -bi=".." a literal string to provide or is there supposed to be actual text between the quotation marks?

2009-May-08: looks to me as it is a typo above - kbs.tcl says there is a -vq-bi flag. Also, if I type in the corrected line literally, there is an error saying that package .. could not be found. So, it looks like to me that the command line should be

./kbs.tcl -r -vq-bi -bi="BWidget" install kbskit8.5

where BWidget would be replaced by the name of the package to be bundled in.

rgf: I think 'bi' is a configuration variable that can be preset with a list of packages, or the list can be supplied instead of the '..'. Try

./kbs.tcl help

for the details.


One thing that would be useful to add to this page would be a series of links to tools that kbs.tcl requires to work. For instance, it requires a cvs command, some sort of C compiler, some sort of shell command. What other tools are needed?

RZ: see above under Build requirements.


anoved: I've written a brief article about my good experience with kbs on Mac OS X: http://anoved.net/2010/01/kitgen-build-system-for-tcltk/

jcw 2010-01-14: What OS version are you using? On 10.6 (Snow Leopard), I get fatal errors in tkMacOSXBitmap.c such as "‘CIconHandle’ undeclared".

anoved: 10.6.2, so I'm not sure what the discrepancy is between our experiences. How recently did you retrieve kbs.tcl or the code it downloads?

jcw: Just now, to make sure. I can't explain the difference. Odd.


JOB: On Mac OSX 10.6.4 (Leo): to get rid of those various tkMacOSXBitmap.c compilation errors you need to download the tk8.5.9-decarbon.tar.gz source from GIT-HUB (https://github.com/das/tcltk ) file repository. The cocoa port is maintained by Daniel A. Steffen out there. Once this is done, use the --enable-aqua option compile and you are fine!


CliC 2010-12-25: Any reason the prebuilt tclkits on the SF site for Windows NT don't include Tcl 8.6, whereas the ones for Unix-y platforms do? Does kbskit have problems building Tcl 8.6 on Windows, or is it just that no one has tried it or posted the results on this site? If it's the latter, I'll give it a shot -- thanks.

RZ: Tcl 8.6 needs a newer msys/mingw version. I have to upgrade first.

jcw 2011-04-10: The www.equi4.com site for sdx and zlib is now a redirect to equi4.com, to make kbs.tcl work again I had to remove the "www" prefix in two places in the script.


BJ 2012-02-28 09:52:43: has anybody had any luck with building with kbs.tcl using mingw cross compile environment on linux? I have always been reasonably succuessful building things with mingw, but I am really struggling on windows 7. Problems seem to be mostly related to symlinks not working properly.

RZ: Cross compiling is on my todo list. But which problems do you have? I have build the latest windows binaries under windows 7. Please install the msys/mingw mentioned under Build requirements


RZ: hi DcK the classic GNU compile utilities, like autoconf automake are not used inside kbs.


AMG: Using WindowsNT_kbsmk8.6-dyn.exe or WindowsNT_kbsvq8.6-dyn.exe downloaded from Sourceforge, I get these errors whenever I try to load SQLite:

% package require sqlite3
error reading package index file C:/Documents and Settings/td26063/My Documents/Invincea Downloads/WindowsNT_kbsvq8.6-gui.exe/lib/dde1.4/pkgIndex.tcl: package not known
error reading package index file C:/Documents and Settings/td26063/My Documents/Invincea Downloads/WindowsNT_kbsvq8.6-gui.exe/lib/reg1.3/pkgIndex.tcl: package not known
error reading package index file C:/Documents and Settings/td26063/My Documents/Invincea Downloads/WindowsNT_kbsvq8.6-gui.exe/lib/thread2.7b1/pkgIndex.tcl: package not known

SQLite does load successfully; it's just a package manager gripe about other broken packages. Also, these errors only happen for *-dyn.exe, not *-gui.exe. However, when loading an invalid package, these errors happen in all four binaries, followed by "can't find package foobar" or whatever.

Here's what happens when I try to load DDE:

% package require dde
(same errors as before)
can't find package dde
% load "C:/Documents and Settings/td26063/My Documents/Invincea Downloads/WindowsNT_kbsvq8.6-gui.exe/lib/dde1.4/tcldde14.dll"
cannot find symbol "Tcldde_Init"

RZ: This is because of a problem in the tcl::pkgconfig command. It will be fixed in the next release. Meanwhile you can add the following command before calling "package require":

proc ::tcl::pkgconfig {args} {
    switch -- [join $args _] {
        get_threaded {return 1}
        get_debug {return 0}
    }
}

AMG: I spotted another oddity with the aforementioned binaries. Somehow, they break the up and down arrows in Tkcon 1.113 . With every other Tcl interpreter I've tried, up and down work like Ctrl+P and Ctrl+N (previous and next history command). With WindowsNT_kbsvq8.6-gui.exe, up and down move the cursor around the [[text] widget.

APN: This has nothing to do with tclkit per se. Some changes in the Tk bindings made somewhere around the 8.6b3 time are the cause. It is not only tkcon that is affected. Not sure if apps are supposed to be modified to fix this (in which case what happens to backward compatibility?)

AMG: Yes, I confirmed this by running Tkcon using the latest version of Tcl/Tk . Apparently the reason I never saw this with other interpreters is that they were all out of date. :^)


MHo 2012-11-18: Can't use WindowsNT_kbsmk8.5-cli.exe: libstdc++-6.dll not found.

AMG: Get [L3 ] and [L4 ]. Also get 7zip or similar to unpack the lzma files. Put these two DLLs in your $env(PATH) or in the same directory as WindowsNT_kbsmk8.5-cli.exe. Alternately, use the *mk* binaries which aren't infected by the C++ virus.

RZ: I think you mean the *vq* binaries:)

AMG: Yes, you're right, I apologize.

RZ Not necessary. May be I can find a way to link statically.

LW 2014-03-12: I got it to work under Windows with MinGW/MSYS/gcc 4.8.1 by changing the following @ kbs.tcl:2075 (for a 8.6.1 kit, didn't try for a 8.5 kit):

append MYMK "[Get builddir-sys]/lib/libtclstub86s.a '''-static -static-libgcc''' -static-libstdc++ -lstdc++"

By the way, what's the use of the -staticstdcpp flag? It is enabled by default at kbs.tcl:542, and there doesn't seem to be a way to turn it off, which makes the flag pretty pointless.

LW: One more thing: the above gets the -cli and -dyn binaries working, but not the -gui one. To get this one to work, I had to add -DTCL_BROKEN_MAINARGS to the COMPILE variable in the Makefile.in file for kbskit. I.e., in sources/kbskit0.4/Makefile.in:171:

COMPILE                = $(CC) $(DEFS) -DTCL_BROKEN_MAINARGS $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)

This define was used by Tk when compiling, but not by kbskit. Strangely it does not appear in the defines in buildWindowsNT/lib/tkConfig.sh. Without this define, mykbsmk8.6-gui.exe failed with return code 5 and did not do anything. With it, it builds kbsmk8.6-gui.exe alright, which shows the Tk console indeed. I'm sure there is a cleaner way to handle this flag, but the dirty hack above at least fixes things.

This define was required for both Vq and Mk builds.


JOB 2013-03-25: Under OSX 10.8.3 (Mountain Lion) + latest version of kbs.tcl, the following options are required:

mk4tcl based:

./kbs.tcl -r --enable-64bit --enable-aqua -mk install kbskit8.6

vqtcl based:

./kbs.tcl -r --enable-64bit --enable-aqua -vq install kbskit8.6

build tksqlite:

./kbs.tcl -r --enable-64bit --enable-aqua install tksqlite0.5.8

TCV 2013-04-09: How can one include the TDBC bridges (like MySQL, PostgreSQL, and sqlite) in the resulting tclkit? If I just do something like:

$ ./kbs.tcl -r -vq-dyn install kbskit8.6
$ ./buildLinux/bin/kbsvq8.6-dyn 
% package require tdbc
1.0.0
% package require tdbc::mysql
can't find package tdbc::mysql

They are getting built (they're under buildLinux/lib/tdbcmysql1.0.0 etc), just not bundled into the tclkit. I even tried adding "tdbcmysql1.0.0" to MYKITVQ in the definition of the kbskit8.6 package in kbs.tcl but to no avail. Is that something I need to make a separate package for? Thanks for any advice.

RZ Adding "tdbcmysql1.0.0" to MYKITVQ and/or MYKITMK should be enough. Are you sure you have it added in the correct "Package kbskit8.6"? Could you try adding it to all MYKITVQ= and MYKITMK= definitions in the kbskit8.6 definition. I will add these and the other tdbc packages in the next version.

TCV OK, I added it to all four places in kbs.tcl (right after anywhere "tdbc1.0.0" was used) and it worked. Maybe I got messed up earlier by only adding it to the threaded branch (although I did have the Thread package). Anyhow, it's all good now. Thanks!

MHo After searching hours for actual downloads, and spending hours in getting kbs under Windows/MingW to work, I want to say this:

  • Most of the binaries I found in the internet are outdated
  • The few Windows 64bit binaries I found are outdated
  • Still don't know what the definitive "homesite" of tclkits is
  • The working 32bit downloads I found are all configured in a different way (info loaded) and vary greatly in EXE size; I don't always know why and in what they differ
  • Feels like I'v found 50 pages how to build tclkits from scratch in the internet and here in the wiki but I don't fully understand one of them
  • kbs failed with several error messages after hours of compiling, don't know exactly how to setup MingW to get it right...
  • Why are there no up to date tclkits downloadable at www.tcl.tk?
  • The basekits from activestate are much bigger than those from http://www.patthoyts.tk/tclkit.html even after UPXing and I don't know why
  • Sorry, but I'm simply using Tcl/Tk and tclkits because of the great productivity boost; I'm not a C/C++/make/configure guy who is able to build his building environment by himself...:-(

APN 2013-11-26 I've uploaded 8.6.1 tclkits to http://sourceforge.net/projects/twapi/files/Tcl%20binaries/


LW 2014-03-12: With a just-built kbsmk8.6-dyn.exe, I get the following problem when trying to load sqlite:

% package require sqlite3
couldn't load library "C:/Users/qmr.SPF/AppData/Local/Temp/TCL00002034/sqlite380.dll": this library or a dependent library could not be found in library path
  • Checking in package names, there is indeed a sqlite3 package.
  • Checking in the folder mentioned in the error message, there is indeed no sqlite380.dll (but itcl, tdbc and dde DLLs extract fine if I package require them).
  • Checking in the build directory, there is indeed a sqlite380.dll built there.

JOB - 2015-01-23 09:20:12

Comment: Compiling kbstcl8.6 under OSX.

Just want to state here that I could successfully compile kbskit8.6 with the current release of kbs.tcl in place.

SoftwareRelease Remark
OSX 10.9.5 Yes, there is already Maverics out here.
Xcode 6.1.1 After installation, call up Xcode GUI (only once) to disable root permissions for cc.
kbs 0.4.6 Start from scratch - sources 'll be downloaded automatically, except for cvs driven downloads. Cvs command - for whatever reason - is not available (by default) any more.
tcl/tk 8.6.3 Compilation problems for Cocoa are gone - that's great!
vfs 1.4.2 Version conflict exists - see below.

After upgrading Xcode and manually downloading the latest vfs code from fossil (http://fossil.etoyoc.com/fossil/tclvfs/taglist ), there are only a few changes required, so that the compilation won't fail:

  • Line reference numbers need to be amended as such:
## @defgroup vfs
#@verbatim
Package vfs1.4 {
  Source {Cvs tclvfs.cvs.sourceforge.net:/cvsroot/tclvfs -D 2012-01-10 tclvfs}
  Configure {
    Patch [Get srcdir]/Makefile.in 144 \
{INCLUDES        = @PKG_INCLUDES@ @TCL_INCLUDES@}\
{INCLUDES        = @TCL_INCLUDES@}
    Patch [Get srcdir]/Makefile.in 148 \
{DEFS                = @DEFS@ $(PKG_CFLAGS)
} {DEFS                = @DEFS@ $(PKG_CFLAGS) -D_USE_32BIT_TIME_T
} 
    Config [Get srcdir-sys] --with-tclinclude=[Get builddir-sys]/include
  }
  Make {Run make}
  Install {Run make install-binaries}
  Clean {Run make clean}
}
#@endverbatim
## @defgroup vfs
#@verbatim
Package vfs1.4-static {
  Source {Link vfs1.4}
  Configure {
    Patch [Get srcdir]/Makefile.in 144 \
{INCLUDES        = @PKG_INCLUDES@ @TCL_INCLUDES@}\
{INCLUDES        = @TCL_INCLUDES@}
    Patch [Get srcdir]/Makefile.in 148 \
{DEFS                = @DEFS@ $(PKG_CFLAGS)
} {DEFS                = @DEFS@ $(PKG_CFLAGS) -D_USE_32BIT_TIME_T
} 
    Config [Get srcdir-sys] --disable-shared --with-tclinclude=[Get builddir-sys]/include}
  Make {Run make}
  Install {Run make install-binaries}
  Clean {Run make clean}
}
#@endverbatim
  • Version of vfslib needs to be corrected as well:
      append MYCLI " [Get builddir-sys]/lib/vfs1.4.2/libvfs1.4.2.a"

Finally the command runs like a charm:

./kbs.tcl -vq -r install kbskit8.6