139 lines
3.2 KiB
Plaintext
139 lines
3.2 KiB
Plaintext
|
#!/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_EvalSource(interp, "$source", 1,
|
||
|
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
|
||
|
|
||
|
echo ");"
|
||
|
echo "}"
|
||
|
}
|
||
|
|
||
|
makeloadexts()
|
||
|
{
|
||
|
cat <<EOF
|
||
|
int Jim_InitStaticExtensions(Jim_Interp *interp)
|
||
|
EOF
|
||
|
echo "{"
|
||
|
for ext in $*; do
|
||
|
echo "extern int Jim_${ext}Init(Jim_Interp *);"
|
||
|
done
|
||
|
for ext in $*; do
|
||
|
echo "Jim_${ext}Init(interp);"
|
||
|
done
|
||
|
echo "return JIM_OK;"
|
||
|
echo "}"
|
||
|
}
|
||
|
|
||
|
cexts="aio readdir regexp file exec clock array"
|
||
|
tclexts="bootstrap initjimsh glob stdlib tclcompat"
|
||
|
|
||
|
# Note ordering
|
||
|
allexts="bootstrap aio readdir regexp file glob exec clock array stdlib tclcompat"
|
||
|
|
||
|
echo "/* This is single source file, bootstrap version of Jim Tcl. See http://jim.tcl.tk/ */"
|
||
|
|
||
|
# define some core features
|
||
|
for i in JIM_TCL_COMPAT JIM_ANSIC 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
|
||
|
|
||
|
cat <<EOF
|
||
|
#if defined(_MSC_VER)
|
||
|
#define TCL_PLATFORM_OS "windows"
|
||
|
#define TCL_PLATFORM_PLATFORM "windows"
|
||
|
#define TCL_PLATFORM_PATH_SEPARATOR ";"
|
||
|
#define HAVE_MKDIR_ONE_ARG
|
||
|
#define HAVE_SYSTEM
|
||
|
#elif defined(__MINGW32__)
|
||
|
#define TCL_PLATFORM_OS "mingw"
|
||
|
#define TCL_PLATFORM_PLATFORM "windows"
|
||
|
#define TCL_PLATFORM_PATH_SEPARATOR ";"
|
||
|
#define HAVE_MKDIR_ONE_ARG
|
||
|
#define HAVE_SYSTEM
|
||
|
#define HAVE_SYS_TIME_H
|
||
|
#define HAVE_DIRENT_H
|
||
|
#define HAVE_UNISTD_H
|
||
|
#define HAVE_UMASK
|
||
|
#include <sys/stat.h>
|
||
|
#ifndef S_IRWXG
|
||
|
#define S_IRWXG 0
|
||
|
#endif
|
||
|
#ifndef S_IRWXO
|
||
|
#define S_IRWXO 0
|
||
|
#endif
|
||
|
#else
|
||
|
#define TCL_PLATFORM_OS "unknown"
|
||
|
#define TCL_PLATFORM_PLATFORM "unix"
|
||
|
#define TCL_PLATFORM_PATH_SEPARATOR ":"
|
||
|
#ifdef _MINIX
|
||
|
#define vfork fork
|
||
|
#define _POSIX_SOURCE
|
||
|
#else
|
||
|
#define _GNU_SOURCE
|
||
|
#endif
|
||
|
#define HAVE_VFORK
|
||
|
#define HAVE_WAITPID
|
||
|
#define HAVE_ISATTY
|
||
|
#define HAVE_MKSTEMP
|
||
|
#define HAVE_LINK
|
||
|
#define HAVE_SYS_TIME_H
|
||
|
#define HAVE_DIRENT_H
|
||
|
#define HAVE_UNISTD_H
|
||
|
#define HAVE_UMASK
|
||
|
#endif
|
||
|
EOF
|
||
|
|
||
|
# get JIM_VERSION from auto.def
|
||
|
sed -n -e 's/^\(define JIM_VERSION.*\)/#\1/p' auto.def
|
||
|
|
||
|
outputsource()
|
||
|
{
|
||
|
sed -e '/#include.*jim/d' -e '/#include.*utf8/d' \
|
||
|
-e '/^#.*if.*JIM_BOOTSTRAP/,/^#endif.*JIM_BOOTSTRAP/d' \
|
||
|
-e 's/[ ]*\/\*.*\*\///' -e '/^[ ]*\/\*/,/\*\//d' $1
|
||
|
}
|
||
|
|
||
|
# Now output header files, removing references to jim header files
|
||
|
for i in jim-win32compat.h utf8.h jim.h jim-subcmd.h jimregexp.h jim-signal.h jimiocompat.h; do
|
||
|
outputsource $i
|
||
|
done
|
||
|
|
||
|
# Now extension source code
|
||
|
for i in $tclexts; do
|
||
|
makeext $i.tcl
|
||
|
done
|
||
|
for i in $cexts; do
|
||
|
outputsource jim-$i.c
|
||
|
done
|
||
|
makeloadexts $allexts
|
||
|
|
||
|
# And finally the core source code
|
||
|
for i in jim.c jim-subcmd.c utf8.c jim-format.c jimregexp.c jimiocompat.c jim-win32compat.c jim-nosignal.c; do
|
||
|
outputsource $i
|
||
|
done
|
||
|
echo "#ifndef JIM_BOOTSTRAP_LIB_ONLY"
|
||
|
outputsource jim-interactive.c
|
||
|
outputsource jimsh.c
|
||
|
echo "#endif"
|