ADDED   .fossil-settings/crnl-glob
Index: .fossil-settings/crnl-glob
==================================================================
--- /dev/null
+++ .fossil-settings/crnl-glob
@@ -0,0 +1,2 @@
+tcc/patches/all/tcltcc-0.4-fixloading.diff
+tcc/patches/all/tcltcc-0.4-setincpath.diff

ADDED   .fossil-settings/ignore-glob
Index: .fossil-settings/ignore-glob
==================================================================
--- /dev/null
+++ .fossil-settings/ignore-glob
@@ -0,0 +1,109 @@
+build/test/kits
+build/test/kits/*
+itcl/build
+itcl/build/*
+itcl/build.log
+itcl/inst
+itcl/inst/*
+itcl/out
+itcl/out/*
+itcl/src
+itcl/src/*
+kitsh/build
+kitsh/build/*
+kitsh/build.log
+kitsh/buildsrc/kitsh-0.0/Makefile
+kitsh/buildsrc/kitsh-0.0/autom4te.cache
+kitsh/buildsrc/kitsh-0.0/autom4te.cache/*
+kitsh/buildsrc/kitsh-0.0/boot.tcl.h
+kitsh/buildsrc/kitsh-0.0/config.h
+kitsh/buildsrc/kitsh-0.0/config.h.in
+kitsh/buildsrc/kitsh-0.0/config.log
+kitsh/buildsrc/kitsh-0.0/config.status
+kitsh/buildsrc/kitsh-0.0/configure
+kitsh/buildsrc/kitsh-0.0/kit
+kitsh/buildsrc/kitsh-0.0/zipvfs.tcl.h
+kitsh/inst
+kitsh/inst/*
+kitsh/out
+kitsh/out/*
+mk4tcl/build
+mk4tcl/build/*
+mk4tcl/build.log
+mk4tcl/inst
+mk4tcl/inst/*
+mk4tcl/out
+mk4tcl/out/*
+mk4tcl/src
+mk4tcl/src/*
+tcl/build
+tcl/build/*
+tcl/build.log
+tcl/inst
+tcl/inst/*
+tcl/out
+tcl/out/*
+tcl/src
+tcl/src/*
+tclkit-*
+tclkit-*/*
+tclvfs/build
+tclvfs/build/*
+tclvfs/build.log
+tclvfs/inst
+tclvfs/inst/*
+tclvfs/out
+tclvfs/out/*
+tclvfs/src
+tclvfs/src/*
+thread/build
+thread/build/*
+thread/build.log
+thread/inst
+thread/inst/*
+thread/out
+thread/out/*
+thread/src
+thread/src/*
+tk/build
+tk/build/*
+tk/build.log
+tk/inst
+tk/inst/*
+tk/out
+tk/out/*
+tk/src
+tk/src/*
+zlib/build
+zlib/build/*
+zlib/build.log
+zlib/inst
+zlib/inst/*
+zlib/out
+zlib/out/*
+zlib/src
+zlib/src/*
+tcc/build
+tcc/build/*
+tcc/build.log
+tcc/inst
+tcc/inst/*
+tcc/out
+tcc/out/*
+tcc/src
+tcc/src/*
+kitdll/buildsrc/kitdll-0.0/starpack.vfs
+kitdll/buildsrc/kitdll-0.0/starpack.vfs/*
+kitdll/buildsrc/kitdll-0.0/test
+kitdll/buildsrc/kitdll-0.0/configure
+kitdll/buildsrc/kitdll-0.0/libtcl*.so
+kitdll/buildsrc/kitdll-0.0/Makefile
+kitdll/buildsrc/kitdll-0.0/*.o
+kitdll/buildsrc/kitdll-0.0/config.log
+kitdll/buildsrc/kitdll-0.0/config.status
+kitdll/buildsrc/kitdll-0.0/vfs_kitdll_data_tcl.c
+kitdll/buildsrc/kitdll-0.0/vfs_kitdll.tcl.h
+kitdll/build/kitdll-*
+kitdll/build/kitdll-*/*
+kitdll/build.log
+libtclkit-*.*

Index: kitcreator
==================================================================
--- kitcreator
+++ kitcreator
@@ -25,11 +25,12 @@
 		echo "Please remember to run 'build/pre.sh' if you expect this build to work." >&2
 	fi
 fi
 
 # Define the list of all packages, for cleaning purposes
-KITCREATOR_ALLPKGS="kitsh tcl tclvfs zlib tk itcl mk4tcl thread dbus tls tclx"
+KITCREATOR_ALLPKGS="kitsh tcl tclvfs zlib tk itcl mk4tcl thread dbus tls tclx tcc"
+
 # Always rebuild kitsh
 rm -f "kitsh/.success"
 for pkg in ${KITCREATOR_ALLPKGS}; do
 	if [ "${mode}" != "retry" -o ! -f "${pkg}/.success" ]; then
 		rm -f "${pkg}/build.log" "${pkg}/.success"

ADDED   tcc/build.sh
Index: tcc/build.sh
==================================================================
--- /dev/null
+++ tcc/build.sh
@@ -0,0 +1,192 @@
+#! /usr/bin/env bash
+
+if [ ! -f 'build.sh' ]; then
+	echo 'ERROR: This script must be run from the directory it is in' >&2
+
+	exit 1
+fi
+if [ -z "${TCLVERS}" ]; then
+	echo 'ERROR: The TCLVERS environment variable is not set' >&2
+
+	exit 1
+fi
+
+TCLTCCVERS="0.4"
+SRC="src/tcltcc-${TCLTCCVERS}.zip"
+SRCURL="https://tcltcc.googlecode.com/files/tcltcc${TCLTCCVERS}.zip"
+BUILDDIR="$(pwd)/build/tcltcc-0.4"
+OUTDIR="$(pwd)/out"
+INSTDIR="$(pwd)/inst"
+PATCHSCRIPTDIR="$(pwd)/patchscripts"
+PATCHDIR="$(pwd)/patches"
+export TCLTCCVERS SRC SRCURL BUILDDIR OUTDIR INSTDIR PATCHSCRIPTDIR PATCHDIR
+
+# Set configure options for this sub-project
+LDFLAGS="${KC_TCLTCC_LDFLAGS}"
+CFLAGS="${KC_TCLTCC_CFLAGS}"
+CPPFLAGS="${KC_TCLTCC_CPPFLAGS}"
+LIBS="${KC_TCLTCC_LIBS}"
+export LDFLAGS CFLAGS CPPFLAGS LIBS
+
+rm -rf 'build' 'out' 'inst'
+mkdir 'build' 'out' 'inst' || exit 1
+
+TCL_VERSION="unknown"
+if [ -f "${TCLCONFIGDIR}/tclConfig.sh" ]; then
+        source "${TCLCONFIGDIR}/tclConfig.sh"
+fi
+export TCL_VERSION
+
+if [ ! -f "${SRC}" ]; then
+	mkdir 'src' >/dev/null 2>/dev/null
+
+	if [ ! -d 'buildsrc' ]; then
+		rm -f "${SRC}.tmp"
+		wget -O "${SRC}.tmp" "${SRCURL}" || exit 1
+		mv "${SRC}.tmp" "${SRC}"
+	fi
+fi
+
+(
+	cd 'build' || exit 1
+
+	if [ ! -d '../buildsrc' ]; then
+		mkdir "${BUILDDIR}" || exit 1
+		(
+			cd "${BUILDDIR}" || exit 1
+			unzip "../../${SRC}"
+		)
+	else    
+		cp -rp ../buildsrc/* './'
+	fi
+
+	# Apply required patches
+	cd "${BUILDDIR}" || exit 1
+
+	# Install current Tcl headers
+	cp -r ../../../{tcl,tk}/inst/include/* include/
+
+	for patch in "${PATCHDIR}/all"/tcltcc-${TCLTCCVERS}-*.diff "${PATCHDIR}/${TCL_VERSION}"/tcltcc-${TCLTCCVERS}-*.diff; do
+		if [ ! -f "${patch}" ]; then
+			continue
+		fi
+
+		echo "Applying: ${patch}"
+		${PATCH:-patch} -p1 < "${patch}"
+	done
+
+	# Apply patch scripts if needed
+	for patchscript in "${PATCHSCRIPTDIR}"/*.sh; do
+		if [ -f "${patchscript}" ]; then
+			echo "Running patch script: ${patchscript}"
+
+			(
+				. "${patchscript}"
+			)
+		fi
+	done
+
+	# Try to build as a shared object if requested
+	if [ "${STATICTCLTCC}" = "0" ]; then
+		tryopts="--enable-shared --disable-shared"
+	elif [ "${STATICTCLTCC}" = "-1" ]; then
+		tryopts="--enable-shared"
+	else
+		tryopts="--disable-shared"
+	fi
+
+	SAVE_CFLAGS="${CFLAGS}"
+	for tryopt in $tryopts __fail__; do
+		# Clean up, if needed
+		make distclean >/dev/null 2>/dev/null
+		rm -rf "${INSTDIR}"
+		mkdir "${INSTDIR}"
+
+		if [ "${tryopt}" = "__fail__" ]; then
+			exit 1
+		fi
+
+		if [ "${tryopt}" == "--enable-shared" ]; then
+			isshared="1"
+		else
+			isshared="0"
+		fi
+
+		# If build a static TclX for KitDLL, ensure that we use PIC
+		# so that it can be linked into the shared object
+		if [ "${isshared}" = "0" -a "${KITTARGET}" = "kitdll" ]; then
+			CFLAGS="${SAVE_CFLAGS} -fPIC"
+		else
+			CFLAGS="${SAVE_CFLAGS}"
+		fi
+
+		if [ "${isshared}" = "0" ]; then
+			CFLAGS="${CFLAGS} -DCONFIG_TCC_STATIC=1"
+		fi
+		export CFLAGS
+
+		if [ "${isshared}" = '0' ]; then
+			sed 's@USE_TCL_STUBS@XXX_TCL_STUBS@g' configure > configure.new
+		else
+			sed 's@XXX_TCL_STUBS@USE_TCL_STUBS@g' configure > configure.new
+		fi
+		cat configure.new > configure
+		rm -f configure.new
+		chmod +x configure
+
+		(
+			echo "Running: ./configure $tryopt --prefix=\"${INSTDIR}\" --exec-prefix=\"${INSTDIR}\" --libdir=\"${INSTDIR}/lib\" --with-tcl=\"${TCLCONFIGDIR}\" ${CONFIGUREEXTRA}"
+			./configure $tryopt --prefix="${INSTDIR}" --exec-prefix="${INSTDIR}" --libdir="${INSTDIR}/lib" --with-tcl="${TCLCONFIGDIR}" ${CONFIGUREEXTRA}
+
+			echo "Running: ${MAKE:-make} tcllibdir=\"${INSTDIR}/lib\" AR=\"${AR:-ar}\" RANLIB=\"${RANLIB:-ranlib}\""
+			${MAKE:-make} tcllibdir="${INSTDIR}/lib" AR="${AR:-ar}" RANLIB="${RANLIB:-ranlib}" || exit 1
+
+			echo "Running: ${MAKE:-make} tcllibdir=\"${INSTDIR}/lib\" AR=\"${AR:-ar}\" RANLIB=\"${RANLIB:-ranlib}\" install"
+			${MAKE:-make} tcllibdir="${INSTDIR}/lib" AR="${AR:-ar}" RANLIB="${RANLIB:-ranlib}" install || exit 1
+		) || continue
+
+		break
+	done
+
+	# Install files needed by installation
+	pkgDir="${INSTDIR}/lib/tcc${TCLTCCVERS}"
+	pkgIndex="${pkgDir}/pkgIndex.tcl"
+
+	mkdir -p "${pkgDir}"
+
+	cp tcc.tcl "${pkgDir}"
+	cp pkgIndex.tcl "${pkgDir}"
+
+	# Install headers needed for compilation
+	incDir="${pkgDir}/include"
+	mkdir "${incDir}"
+
+	touch include/windows.h
+	cp -r include/* "${incDir}"
+
+	find "${incDir}" -name '*.a' | xargs rm -f
+
+	# Install libraries
+	libDir="${pkgDir}/lib"
+	mkdir "${libDir}"
+
+	(
+		cd c || exit 1
+		rm -f *.a *.o
+		for file in *.c; do
+			ofile="$(echo "${file}" | sed 's@\.c$@.o@')"
+			"${CC:-gcc}" -I../include -I../../../../{tcl,tk}/inst/include/ -I../../../../tcl/build/tcl${TCLVERS}/generic/ -I../../../../tcl/build/tcl${TCLVERS}/unix/ -DUSE_TCL_STUBS=1 -c "${file}" -o "${ofile}"
+		done
+		"${AR:-ar}" rcu ../lib/libtcc1.a *.o
+		"${RANLIB:-ranlib}" ../lib/libtcc1.a
+	)
+	cp lib/libtcc1.a "${libDir}"
+
+	# Create VFS-insert
+	cp -r "${INSTDIR}/lib" "${OUTDIR}" || exit 1
+	find "${OUTDIR}" -name '*.a' -type f | grep -v '/lib/libtcc1\.a$' | xargs rm -f
+
+	exit 0
+) || exit 1
+
+exit 0

ADDED   tcc/patches/all/tcltcc-0.4-fixloading.diff
Index: tcc/patches/all/tcltcc-0.4-fixloading.diff
==================================================================
--- /dev/null
+++ tcc/patches/all/tcltcc-0.4-fixloading.diff
@@ -0,0 +1,22 @@
+--- tcltcc-0.4.orig/tcc.tcl	2007-11-07 10:04:42.000000000 -0600
++++ tcltcc-0.4/tcc.tcl	2014-04-26 23:06:24.272645002 -0500
+@@ -9,10 +9,15 @@
+    variable commands
+ 
+    set dir [file dirname [info script]]
+-   switch -exact -- $::tcl_platform(platform) {
+-	   windows { load $dir/tcc02.dll tcc }
+-	   unix { load $dir/libtcc0.2.so tcc }
+-	   default {error "unsupport platform"}
++   if {[info command ::tcc] == ""} {
++      catch { load {} tcc }
++   }
++   if {[info command ::tcc] == ""} {
++       switch -exact -- $::tcl_platform(platform) {
++	       windows { load $dir/tcc04.dll tcc }
++	       unix { load $dir/libtcc0.4.so tcc }
++	       default {error "unsupport platform"}
++       }
+    }
+    set libs $dir/lib
+    set includes $dir/include

ADDED   tcc/patches/all/tcltcc-0.4-fixstaticwin32.diff
Index: tcc/patches/all/tcltcc-0.4-fixstaticwin32.diff
==================================================================
--- /dev/null
+++ tcc/patches/all/tcltcc-0.4-fixstaticwin32.diff
@@ -0,0 +1,12 @@
+diff -uNr tcltcc-0.4.orig/generic/win32/tccpe.c tcltcc-0.4-1fixstaticwin32/generic/win32/tccpe.c
+--- tcltcc-0.4.orig/generic/win32/tccpe.c	2007-11-07 10:04:32.000000000 -0600
++++ tcltcc-0.4-1fixstaticwin32/generic/win32/tccpe.c	2014-04-28 15:19:49.340645002 -0500
+@@ -397,7 +397,7 @@
+     return sym_index;
+ }
+ 
+-#ifdef WIN32
++#if defined(WIN32) && !defined(CONFIG_TCC_STATIC)
+ ST void **pe_imp;
+ ST int nb_pe_imp;
+ 

ADDED   tcc/patches/all/tcltcc-0.4-setincpath.diff
Index: tcc/patches/all/tcltcc-0.4-setincpath.diff
==================================================================
--- /dev/null
+++ tcc/patches/all/tcltcc-0.4-setincpath.diff
@@ -0,0 +1,21 @@
+Common subdirectories: tcltcc-0.4.orig/c and tcltcc-0.4/c
+Common subdirectories: tcltcc-0.4.orig/demo and tcltcc-0.4/demo
+Common subdirectories: tcltcc-0.4.orig/examples and tcltcc-0.4/examples
+Common subdirectories: tcltcc-0.4.orig/generic and tcltcc-0.4/generic
+Common subdirectories: tcltcc-0.4.orig/include and tcltcc-0.4/include
+Common subdirectories: tcltcc-0.4.orig/install and tcltcc-0.4/install
+Common subdirectories: tcltcc-0.4.orig/lib and tcltcc-0.4/lib
+diff -u tcltcc-0.4.orig/tcc.tcl tcltcc-0.4/tcc.tcl
+--- tcltcc-0.4.orig/tcc.tcl	2014-04-26 23:57:35.522645002 -0500
++++ tcltcc-0.4/tcc.tcl	2014-04-27 00:01:35.492645002 -0500
+@@ -101,6 +101,7 @@
+       set tcc(cc) tcc1
+       tcc $tcc::dir $tcc(cc)
+       $tcc(cc) add_library tcl8.5
++      $tcc(cc) add_include_path [file join $::tcc::dir include]
+   }
+   Log code:$code
+   $tcc(cc) compile $code
+Common subdirectories: tcltcc-0.4.orig/tclconfig and tcltcc-0.4/tclconfig
+Common subdirectories: tcltcc-0.4.orig/tests and tcltcc-0.4/tests
+Common subdirectories: tcltcc-0.4.orig/tools and tcltcc-0.4/tools

ADDED   tcc/patchscripts/tcltcc-0.4-addtclfuncs.sh
Index: tcc/patchscripts/tcltcc-0.4-addtclfuncs.sh
==================================================================
--- /dev/null
+++ tcc/patchscripts/tcltcc-0.4-addtclfuncs.sh
@@ -0,0 +1,23 @@
+#! /bin/bash
+
+set -x
+
+function find_syms() {
+	set -x
+
+	${CC:-gcc} ${CPPFLAGS} -E include/tcl.h  | grep '^ *extern.*Tcl_'| sed 's@^ *extern *@@;s@([^(]*$@@;s@.* *\**  *@@'  | sort -u | grep '^Tcl_' | grep -v ';$' | while read -r sym; do
+		echo "    TCCSYM($sym)"
+	done
+}
+
+add="$(find_syms)"
+
+awk -v add="${add}" '/TCCSyms tcc_syms.*=/{
+	print
+	print add
+	next
+} { print }' generic/tcc.h > generic/tcc.h.new
+cat generic/tcc.h.new > generic/tcc.h
+rm -f generic/tcc.h.new
+
+exit 0