diff options
Diffstat (limited to 'make-bootstrap-jim')
-rwxr-xr-x | make-bootstrap-jim | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/make-bootstrap-jim b/make-bootstrap-jim new file mode 100755 index 0000000..c68c756 --- /dev/null +++ b/make-bootstrap-jim @@ -0,0 +1,77 @@ +#!/bin/sh + +# This script writes to stdout, a single source file (e.g. jimsh0.c) +# which can be compiled to provide a bootstrap version of jimsh. +# e.g. cc -o jimsh0 jimsh0.c + +makeext() +{ + source="$1" + basename=`basename "$source" .tcl` +cat <<EOF +int Jim_${basename}Init(Jim_Interp *interp) +{ + if (Jim_PackageProvide(interp, "$basename", "1.0", JIM_ERRMSG)) + return JIM_ERR; + + return Jim_Eval_Named(interp, +EOF + +# Note: Keep newlines so that line numbers match in error messages +sed -e 's/^[ ]*#.*//' -e 's@\\@\\\\@g' -e 's@"@\\"@g' -e 's@^\(.*\)$@"\1\\n"@' $source +#sed -e 's@^\(.*\)$@"\1\\n"@' $source + +echo ",\"$source\", 1);" +echo "}" +} + +makeloadexts() +{ +cat <<EOF +int Jim_InitStaticExtensions(Jim_Interp *interp) +EOF + echo "{" + for ext in $*; do + echo "extern int Jim_${ext}Init(Jim_Interp *);" + echo "Jim_${ext}Init(interp);" + done + echo "return JIM_OK;" + echo "}" +} + +cexts="aio readdir regexp file exec clock array" +tclexts="bootstrap glob stdlib tclcompat" + +# Note ordering +allexts="bootstrap aio readdir glob regexp file exec clock array stdlib tclcompat" + +echo "/* This is single source file, bootstrap version of Jim Tcl. See http://jim.berlios.de/ */" + +# define some core features +for i in _GNU_SOURCE JIM_TCL_COMPAT JIM_REFERENCES JIM_ANSIC HAVE_VFORK JIM_REGEXP HAVE_NO_AUTOCONF _JIMAUTOCONF_H; do + echo "#define $i" +done +echo '#define TCL_LIBRARY "."' +# and extensions +for i in $allexts; do + echo "#define jim_ext_$i" +done + +# Now output header files, removing references to jim header files +for i in utf8.h jim.h jim-subcmd.h jimregexp.h ; do + sed -e '/#include.*jim/d' -e '/#include.*utf8/d' $i +done + +# Now extension source code +for i in $tclexts; do + makeext $i.tcl +done +for i in $cexts; do + sed -e '/#include.*jim/d' jim-$i.c +done +makeloadexts $allexts + +# And finally the core source code +for i in jim.c jim-subcmd.c utf8.c jim-interactive.c jim-format.c jimregexp.c jimsh.c; do + sed -e '/#include.*jim/d' -e '/#include.*utf8/d' $i +done |