Update HTML doc template.
[tmk.git] / bootstrap.sh
blob5af3c5e0b2e12bb29a17b9f7f7a32d6c009f735e
1 #!/bin/sh
3 set -e
5 CC=${CC:-gcc}
6 CFLAGS=${CFLAGS:- -ansi -Wall -Wextra -g -O2}
8 AR=${AR:-ar}
9 RANLIB=${RANLIB:-ranlib}
11 JIM_CFLAGS="-D_GNU_SOURCE -Wall -I. -g -O2 -fno-unwind-tables -fno-asynchronous-unwind-tables"
13 run() {
14 echo "$@"
18 rootname() {
19 echo "$1" |sed 's/\(.*\)\.[^\.]*$/\1/'
22 JIM_CSRC="_load-static-exts.c jim-subcmd.c jim-interactive.c jim-format.c
23 jim.c utf8.c jimregexp.c jim-aio.c jim-array.c jim-clock.c
24 jim-exec.c jim-file.c jim-namespace.c jim-pack.c jim-package.c
25 jim-posix.c jim-readdir.c jim-regexp.c jim-signal.c
26 jim-tclprefix.c _binary.c _glob.c _nshelper.c _oo.c _stdlib.c
27 _tclcompat.c _tree.c"
29 JIM_TCLSRC="binary.tcl glob.tcl nshelper.tcl oo.tcl stdlib.tcl
30 tclcompat.tcl tree.tcl initjimsh.tcl"
32 JIM_STATIC_EXTS="aio array clock exec file namespace pack
33 package posix readdir regexp signal tclprefix
34 binary glob nshelper oo stdlib tclcompat tree"
36 # Build the bootstrap JimTcl interpreter
37 (cd jimtcl/autosetup;
38 $CC -o ../jimsh0 jimsh0.c 2>/dev/null)
40 # Build the real JimTcl interpreter and library
41 (cd jimtcl;
42 echo '#define JIM_EMBEDDED' > _load-static-exts.c;
43 echo "./jimsh0 make-load-static-exts.tcl $JIM_STATIC_EXTS >> _load-static-exts.c";
44 ./jimsh0 make-load-static-exts.tcl $JIM_STATIC_EXTS >> _load-static-exts.c
46 for tclfile in $JIM_TCLSRC; do
47 echo '#define JIM_EMBEDDED' > _$(rootname $tclfile).c;
48 echo "./jimsh0 make-c-ext.tcl $tclfile >> _$(rootname $tclfile).c"
49 ./jimsh0 make-c-ext.tcl $tclfile >> _$(rootname $tclfile).c;
50 done;
52 JIM_OBJS=""
53 for cfile in $JIM_CSRC; do
54 JIM_OBJS="$JIM_OBJS $(rootname $cfile).o";
55 run $CC $JIM_CFLAGS -o $(rootname $cfile).o -c $cfile;
56 done;
58 run $AR cr libjim.a $JIM_OBJS;
59 run $RANLIB libjim.a
62 # Build SQLite
63 run $CC -o sqlite3.o -c jimtcl/sqlite3/sqlite3.c \
64 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 \
65 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 \
66 -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_OMIT_INCRBLOB
68 # Build TMk
69 C_SRC="tmake.c tm_crypto.c tm_target.c tm_update.c tm_core_cmds.c tm_ext_cmds.c"
71 MAKE_C_EXT="jimtcl/jimsh jimtcl/make-c-ext.tcl tm_ext_cmds.tcl"
72 echo "$MAKE_C_EXT > tm_ext_cmds.c"
73 echo "#define JIM_EMBEDDED" > tm_ext_cmds.c
74 $MAKE_C_EXT >> tm_ext_cmds.c
76 TM_OPSYS=$(uname -s)
77 TM_MACHINE_ARCH=$(uname -m)
79 run $CC -o tmk $CFLAGS -Ijimtcl -Ijimtcl/sqlite3 \
80 -DTM_OPSYS="\"$TM_OPSYS\"" -DTM_MACHINE_ARCH="\"$TM_MACHINE_ARCH\"" \
81 $C_SRC jimtcl/libjim.a sqlite3.o -lm