1#ident "%Z%%M% %I% %E% SMI" 2# 3############################################################################### 4# The following macros should be defined before this script is 5# invoked: 6# 7# TOP The toplevel directory of the source tree. This is the 8# directory that contains this "Makefile.in" and the 9# "configure.in" script. 10# 11# BCC C Compiler and options for use in building executables that 12# will run on the platform that is doing the build. 13# 14# USLEEP If the target operating system supports the "usleep()" system 15# call, then define the HAVE_USLEEP macro for all C modules. 16# 17# THREADSAFE If you want the SQLite library to be safe for use within a 18# multi-threaded program, then define the following macro 19# appropriately: 20# 21# THREADLIB Specify any extra linker options needed to make the library 22# thread safe 23# 24# OPTS Extra compiler command-line options. 25# 26# EXE The suffix to add to executable files. ".exe" for windows 27# and "" for Unix. 28# 29# TCC C Compiler and options for use in building executables that 30# will run on the target platform. This is usually the same 31# as BCC, unless you are cross-compiling. 32# 33# AR Tools used to build a static library. 34# RANLIB 35# 36# TCL_FLAGS Extra compiler options needed for programs that use the 37# TCL library. 38# 39# LIBTCL Linker options needed to link against the TCL library. 40# 41# READLINE_FLAGS Compiler options needed for programs that use the 42# readline() library. 43# 44# LIBREADLINE Linker options needed by programs using readline() must 45# link against. 46# 47# ENCODING "UTF8" or "ISO8859" 48# 49# Once the macros above are defined, the rest of this make script will 50# build the SQLite library and testing tools. 51################################################################################ 52 53# This is how we compile 54# 55TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I. -I$(TOP)/src 56 57# Object files for the SQLite library. 58# 59LIBOBJ = attach.o auth.o btree.o btree_rb.o build.o copy.o date.o delete.o \ 60 expr.o func.o hash.o insert.o \ 61 main.o opcodes.o os.o pager.o parse.o pragma.o printf.o random.o \ 62 select.o table.o tokenize.o trigger.o update.o util.o \ 63 vacuum.o vdbe.o vdbeaux.o where.o tclsqlite.o 64 65# All of the source code files. 66# 67SRC = \ 68 $(TOP)/src/attach.c \ 69 $(TOP)/src/auth.c \ 70 $(TOP)/src/btree.c \ 71 $(TOP)/src/btree.h \ 72 $(TOP)/src/btree_rb.c \ 73 $(TOP)/src/build.c \ 74 $(TOP)/src/copy.c \ 75 $(TOP)/src/date.c \ 76 $(TOP)/src/delete.c \ 77 $(TOP)/src/encode.c \ 78 $(TOP)/src/expr.c \ 79 $(TOP)/src/func.c \ 80 $(TOP)/src/hash.c \ 81 $(TOP)/src/hash.h \ 82 $(TOP)/src/insert.c \ 83 $(TOP)/src/main.c \ 84 $(TOP)/src/os.c \ 85 $(TOP)/src/pager.c \ 86 $(TOP)/src/pager.h \ 87 $(TOP)/src/parse.y \ 88 $(TOP)/src/pragma.c \ 89 $(TOP)/src/printf.c \ 90 $(TOP)/src/random.c \ 91 $(TOP)/src/select.c \ 92 $(TOP)/src/shell.c \ 93 $(TOP)/src/sqlite.h.in \ 94 $(TOP)/src/sqliteInt.h \ 95 $(TOP)/src/table.c \ 96 $(TOP)/src/tclsqlite.c \ 97 $(TOP)/src/tokenize.c \ 98 $(TOP)/src/trigger.c \ 99 $(TOP)/src/update.c \ 100 $(TOP)/src/util.c \ 101 $(TOP)/src/vacuum.c \ 102 $(TOP)/src/vdbe.c \ 103 $(TOP)/src/vdbe.h \ 104 $(TOP)/src/vdbeaux.c \ 105 $(TOP)/src/vdbeInt.h \ 106 $(TOP)/src/where.c 107 108# Source code to the test files. 109# 110TESTSRC = \ 111 $(TOP)/src/btree.c \ 112 $(TOP)/src/func.c \ 113 $(TOP)/src/os.c \ 114 $(TOP)/src/pager.c \ 115 $(TOP)/src/test1.c \ 116 $(TOP)/src/test2.c \ 117 $(TOP)/src/test3.c \ 118 $(TOP)/src/test4.c \ 119 $(TOP)/src/vdbe.c \ 120 $(TOP)/src/md5.c 121 122# Header files used by all library source files. 123# 124HDR = \ 125 sqlite.h \ 126 $(TOP)/src/btree.h \ 127 config.h \ 128 $(TOP)/src/hash.h \ 129 opcodes.h \ 130 $(TOP)/src/os.h \ 131 $(TOP)/src/sqliteInt.h \ 132 $(TOP)/src/vdbe.h \ 133 parse.h 134 135# Header files used by the VDBE submodule 136# 137VDBEHDR = \ 138 $(HDR) \ 139 $(TOP)/src/vdbeInt.h 140 141# This is the default Makefile target. The objects listed here 142# are what get build when you type just "make" with no arguments. 143# 144all: sqlite.h config.h libsqlite.a sqlite$(EXE) 145 146# Generate the file "last_change" which contains the date of change 147# of the most recently modified source code file 148# 149last_change: $(SRC) 150 cat $(SRC) | grep '$$Id: ' | sort +4 | tail -1 \ 151 | awk '{print $$5,$$6}' >last_change 152 153libsqlite.a: $(LIBOBJ) 154 $(AR) libsqlite.a $(LIBOBJ) 155 $(RANLIB) libsqlite.a 156 157sqlite$(EXE): $(TOP)/src/shell.c libsqlite.a sqlite.h 158 $(TCCX) $(READLINE_FLAGS) -o sqlite$(EXE) $(TOP)/src/shell.c \ 159 libsqlite.a $(LIBREADLINE) $(THREADLIB) 160 161sqlite_analyzer$(EXE): $(TOP)/src/tclsqlite.c libsqlite.a $(TESTSRC) \ 162 $(TOP)/tool/spaceanal.tcl 163 sed \ 164 -e '/^#/d' \ 165 -e 's,\\,\\\\,g' \ 166 -e 's,",\\",g' \ 167 -e 's,^,",' \ 168 -e 's,$$,\\n",' \ 169 $(TOP)/tool/spaceanal.tcl >spaceanal_tcl.h 170 $(TCCX) $(TCL_FLAGS) -DTCLSH=2 -DSQLITE_TEST=1 -static -o \ 171 sqlite_analyzer$(EXE) $(TESTSRC) $(TOP)/src/tclsqlite.c \ 172 libsqlite.a $(LIBTCL) 173 174 175# This target creates a directory named "tsrc" and fills it with 176# copies of all of the C source code and header files needed to 177# build on the target system. Some of the C source code and header 178# files are automatically generated. This target takes care of 179# all that automatic generation. 180# 181target_source: $(SRC) $(VDBEHDR) opcodes.c 182 rm -rf tsrc 183 mkdir tsrc 184 cp $(SRC) $(VDBEHDR) tsrc 185 rm tsrc/sqlite.h.in tsrc/parse.y 186 cp parse.c opcodes.c tsrc 187 188# Rules to build the LEMON compiler generator 189# 190lemon: $(TOP)/tool/lemon.c $(TOP)/tool/lempar.c 191 $(BCC) -o lemon $(TOP)/tool/lemon.c 192 cp $(TOP)/tool/lempar.c . 193 194btree.o: $(TOP)/src/btree.c $(HDR) $(TOP)/src/pager.h 195 $(TCCX) -c $(TOP)/src/btree.c 196 197btree_rb.o: $(TOP)/src/btree_rb.c $(HDR) 198 $(TCCX) -c $(TOP)/src/btree_rb.c 199 200build.o: $(TOP)/src/build.c $(HDR) 201 $(TCCX) -c $(TOP)/src/build.c 202 203main.o: $(TOP)/src/main.c $(HDR) 204 $(TCCX) -c $(TOP)/src/main.c 205 206pager.o: $(TOP)/src/pager.c $(HDR) $(TOP)/src/pager.h 207 $(TCCX) -c $(TOP)/src/pager.c 208 209opcodes.o: opcodes.c 210 $(TCCX) -c opcodes.c 211 212opcodes.c: $(TOP)/src/vdbe.c 213 echo '/* Automatically generated file. Do not edit */' >opcodes.c 214 echo 'char *sqliteOpcodeNames[] = { "???", ' >>opcodes.c 215 grep '^case OP_' $(TOP)/src/vdbe.c | \ 216 sed -e 's/^.*OP_/ "/' -e 's/:.*$$/", /' >>opcodes.c 217 echo '};' >>opcodes.c 218 219opcodes.h: $(TOP)/src/vdbe.h 220 echo '/* Automatically generated file. Do not edit */' >opcodes.h 221 grep '^case OP_' $(TOP)/src/vdbe.c | \ 222 sed -e 's/://' | \ 223 awk '{printf "#define %-30s %3d\n", $$2, ++cnt}' >>opcodes.h 224 225os.o: $(TOP)/src/os.c $(HDR) 226 $(TCCX) -c $(TOP)/src/os.c 227 228parse.o: parse.c $(HDR) 229 $(TCCX) -c parse.c 230 231parse.h: parse.c 232 233parse.c: $(TOP)/src/parse.y lemon 234 cp $(TOP)/src/parse.y . 235 ./lemon parse.y 236 237# The config.h file will contain a single #define that tells us how 238# many bytes are in a pointer. This only works if a pointer is the 239# same size on the host as it is on the target. If you are cross-compiling 240# to a target with a different pointer size, you'll need to manually 241# configure the config.h file. 242# 243config.h: 244 echo '#include <stdio.h>' >temp.c 245 echo 'int main(){printf(' >>temp.c 246 echo '"#define SQLITE_PTR_SZ %d",sizeof(char*));' >>temp.c 247 echo 'exit(0);}' >>temp.c 248 $(BCC) -o temp temp.c 249 ./temp >config.h 250 echo >>config.h 251 rm -f temp.c temp 252 253sqlite.h: $(TOP)/src/sqlite.h.in 254 sed -e s/--VERS--/`cat ${TOP}/VERSION`/ \ 255 -e s/--ENCODING--/$(ENCODING)/ \ 256 $(TOP)/src/sqlite.h.in >sqlite.h 257 258tokenize.o: $(TOP)/src/tokenize.c $(HDR) 259 $(TCCX) -c $(TOP)/src/tokenize.c 260 261trigger.o: $(TOP)/src/trigger.c $(HDR) 262 $(TCCX) -c $(TOP)/src/trigger.c 263 264util.o: $(TOP)/src/util.c $(HDR) 265 $(TCCX) -c $(TOP)/src/util.c 266 267vacuum.o: $(TOP)/src/vacuum.c $(HDR) 268 $(TCCX) -c $(TOP)/src/vacuum.c 269 270vdbe.o: $(TOP)/src/vdbe.c $(VDBEHDR) 271 $(TCCX) -c $(TOP)/src/vdbe.c 272 273vdbeaux.o: $(TOP)/src/vdbeaux.c $(VDBEHDR) 274 $(TCCX) -c $(TOP)/src/vdbeaux.c 275 276where.o: $(TOP)/src/where.c $(HDR) 277 $(TCCX) -c $(TOP)/src/where.c 278 279copy.o: $(TOP)/src/copy.c $(HDR) 280 $(TCCX) -c $(TOP)/src/copy.c 281 282date.o: $(TOP)/src/date.c $(HDR) 283 $(TCCX) -c $(TOP)/src/date.c 284 285delete.o: $(TOP)/src/delete.c $(HDR) 286 $(TCCX) -c $(TOP)/src/delete.c 287 288encode.o: $(TOP)/src/encode.c 289 $(TCCX) -c $(TOP)/src/encode.c 290 291expr.o: $(TOP)/src/expr.c $(HDR) 292 $(TCCX) -c $(TOP)/src/expr.c 293 294func.o: $(TOP)/src/func.c $(HDR) 295 $(TCCX) -c $(TOP)/src/func.c 296 297hash.o: $(TOP)/src/hash.c $(HDR) 298 $(TCCX) -c $(TOP)/src/hash.c 299 300insert.o: $(TOP)/src/insert.c $(HDR) 301 $(TCCX) -c $(TOP)/src/insert.c 302 303random.o: $(TOP)/src/random.c $(HDR) 304 $(TCCX) -c $(TOP)/src/random.c 305 306select.o: $(TOP)/src/select.c $(HDR) 307 $(TCCX) -c $(TOP)/src/select.c 308 309table.o: $(TOP)/src/table.c $(HDR) 310 $(TCCX) -c $(TOP)/src/table.c 311 312update.o: $(TOP)/src/update.c $(HDR) 313 $(TCCX) -c $(TOP)/src/update.c 314 315tclsqlite.o: $(TOP)/src/tclsqlite.c $(HDR) 316 $(TCCX) $(TCL_FLAGS) -c $(TOP)/src/tclsqlite.c 317 318pragma.o: $(TOP)/src/pragma.c $(HDR) 319 $(TCCX) $(TCL_FLAGS) -c $(TOP)/src/pragma.c 320 321printf.o: $(TOP)/src/printf.c $(HDR) 322 $(TCCX) $(TCL_FLAGS) -c $(TOP)/src/printf.c 323 324attach.o: $(TOP)/src/attach.c $(HDR) 325 $(TCCX) -c $(TOP)/src/attach.c 326 327auth.o: $(TOP)/src/auth.c $(HDR) 328 $(TCCX) -c $(TOP)/src/auth.c 329 330tclsqlite: $(TOP)/src/tclsqlite.c libsqlite.a 331 $(TCCX) $(TCL_FLAGS) -DTCLSH=1 -o tclsqlite \ 332 $(TOP)/src/tclsqlite.c libsqlite.a $(LIBTCL) 333 334testfixture$(EXE): $(TOP)/src/tclsqlite.c libsqlite.a $(TESTSRC) 335 $(TCCX) $(TCL_FLAGS) -DTCLSH=1 -DSQLITE_TEST=1 -o testfixture$(EXE) \ 336 $(TESTSRC) $(TOP)/src/tclsqlite.c \ 337 libsqlite.a $(LIBTCL) $(THREADLIB) 338 339fulltest: testfixture$(EXE) sqlite$(EXE) 340 ./testfixture$(EXE) $(TOP)/test/all.test 341 342test: testfixture$(EXE) sqlite$(EXE) 343 ./testfixture$(EXE) $(TOP)/test/quick.test 344 345index.html: $(TOP)/www/index.tcl last_change 346 tclsh $(TOP)/www/index.tcl `cat $(TOP)/VERSION` >index.html 347 348sqlite.html: $(TOP)/www/sqlite.tcl 349 tclsh $(TOP)/www/sqlite.tcl >sqlite.html 350 351c_interface.html: $(TOP)/www/c_interface.tcl 352 tclsh $(TOP)/www/c_interface.tcl >c_interface.html 353 354changes.html: $(TOP)/www/changes.tcl 355 tclsh $(TOP)/www/changes.tcl >changes.html 356 357lang.html: $(TOP)/www/lang.tcl 358 tclsh $(TOP)/www/lang.tcl >lang.html 359 360vdbe.html: $(TOP)/www/vdbe.tcl 361 tclsh $(TOP)/www/vdbe.tcl >vdbe.html 362 363arch.html: $(TOP)/www/arch.tcl 364 tclsh $(TOP)/www/arch.tcl >arch.html 365 366arch.png: $(TOP)/www/arch.png 367 cp $(TOP)/www/arch.png . 368 369opcode.html: $(TOP)/www/opcode.tcl $(TOP)/src/vdbe.c 370 tclsh $(TOP)/www/opcode.tcl $(TOP)/src/vdbe.c >opcode.html 371 372mingw.html: $(TOP)/www/mingw.tcl 373 tclsh $(TOP)/www/mingw.tcl >mingw.html 374 375tclsqlite.html: $(TOP)/www/tclsqlite.tcl 376 tclsh $(TOP)/www/tclsqlite.tcl >tclsqlite.html 377 378speed.html: $(TOP)/www/speed.tcl 379 tclsh $(TOP)/www/speed.tcl >speed.html 380 381faq.html: $(TOP)/www/faq.tcl 382 tclsh $(TOP)/www/faq.tcl >faq.html 383 384formatchng.html: $(TOP)/www/formatchng.tcl 385 tclsh $(TOP)/www/formatchng.tcl >formatchng.html 386 387conflict.html: $(TOP)/www/conflict.tcl 388 tclsh $(TOP)/www/conflict.tcl >conflict.html 389 390download.html: $(TOP)/www/download.tcl 391 tclsh $(TOP)/www/download.tcl >download.html 392 393omitted.html: $(TOP)/www/omitted.tcl 394 tclsh $(TOP)/www/omitted.tcl >omitted.html 395 396datatypes.html: $(TOP)/www/datatypes.tcl 397 tclsh $(TOP)/www/datatypes.tcl >datatypes.html 398 399quickstart.html: $(TOP)/www/quickstart.tcl 400 tclsh $(TOP)/www/quickstart.tcl >quickstart.html 401 402fileformat.html: $(TOP)/www/fileformat.tcl 403 tclsh $(TOP)/www/fileformat.tcl >fileformat.html 404 405nulls.html: $(TOP)/www/nulls.tcl 406 tclsh $(TOP)/www/nulls.tcl >nulls.html 407 408 409# Files to be published on the website. 410# 411DOC = \ 412 index.html \ 413 sqlite.html \ 414 changes.html \ 415 lang.html \ 416 opcode.html \ 417 arch.html \ 418 arch.png \ 419 vdbe.html \ 420 c_interface.html \ 421 mingw.html \ 422 tclsqlite.html \ 423 download.html \ 424 speed.html \ 425 faq.html \ 426 formatchng.html \ 427 conflict.html \ 428 omitted.html \ 429 datatypes.html \ 430 quickstart.html \ 431 fileformat.html \ 432 nulls.html 433 434doc: $(DOC) 435 mkdir -p doc 436 mv $(DOC) doc 437 438install: sqlite libsqlite.a sqlite.h 439 mv sqlite /usr/bin 440 mv libsqlite.a /usr/lib 441 mv sqlite.h /usr/include 442 443clean: 444 rm -f *.o sqlite libsqlite.a sqlite.h opcodes.* 445 rm -f lemon lempar.c parse.* sqlite*.tar.gz 446 rm -f $(PUBLISH) 447 rm -f *.da *.bb *.bbg gmon.out 448 rm -rf tsrc 449