1: #
2: # nmake Makefile for SQLite
3: #
4:
5: # The toplevel directory of the source tree. This is the directory
6: # that contains this "Makefile.msc".
7: #
8: TOP = .
9:
10: # Set this non-0 to create and use the SQLite amalgamation file.
11: #
12: USE_AMALGAMATION = 1
13:
14: # Set this non-0 to use the International Components for Unicode (ICU).
15: #
16: USE_ICU = 0
17:
18: # Set this to non-0 to create and use PDBs.
19: #
20: SYMBOLS = 1
21:
22: # Set this to one of the following values to enable various debugging
23: # features. Each level includes the debugging options from the previous
24: # levels. Currently, the recognized values for DEBUG are:
25: #
26: # 0 == NDEBUG: Disables assert() and other runtime diagnostics.
27: # 1 == Disables NDEBUG and all optimizations and then enables PDBs.
28: # 2 == SQLITE_DEBUG: Enables various diagnostics messages and code.
29: # 3 == SQLITE_WIN32_MALLOC_VALIDATE: Validate the Win32 native heap per call.
30: # 4 == SQLITE_DEBUG_OS_TRACE: Enables output from the OSTRACE() macros.
31: # 5 == SQLITE_ENABLE_IOTRACE: Enables output from the IOTRACE() macros.
32: #
33: DEBUG = 0
34:
35: # Version numbers and release number for the SQLite being compiled.
36: #
37: VERSION = 3.7
38: VERSION_NUMBER = 3007009
39: RELEASE = 3.7.9
40:
41: # C Compiler and options for use in building executables that
42: # will run on the platform that is doing the build.
43: #
44: BCC = cl.exe
45:
46: # C Compile and options for use in building executables that
47: # will run on the target platform. (BCC and TCC are usually the
48: # same unless your are cross-compiling.)
49: #
50: TCC = cl.exe -W3 -DSQLITE_OS_WIN=1 -I. -I$(TOP)\src -fp:precise
51:
52: # The mksqlite3c.tcl and mksqlite3h.tcl scripts will pull in
53: # any extension header files by default. For non-amalgamation
54: # builds, we need to make sure the compiler can find these.
55: #
56: !IF $(USE_AMALGAMATION)==0
57: TCC = $(TCC) -I$(TOP)\ext\fts3
58: TCC = $(TCC) -I$(TOP)\ext\rtree
59: !ENDIF
60:
61: # Define -DNDEBUG to compile without debugging (i.e., for production usage)
62: # Omitting the define will cause extra debugging code to be inserted and
63: # includes extra comments when "EXPLAIN stmt" is used.
64: #
65: !IF $(DEBUG)==0
66: TCC = $(TCC) -DNDEBUG
67: !ENDIF
68:
69: !IF $(DEBUG)>1
70: TCC = $(TCC) -DSQLITE_DEBUG
71: !ENDIF
72:
73: !IF $(DEBUG)>3
74: TCC = $(TCC) -DSQLITE_DEBUG_OS_TRACE=1
75: !ENDIF
76:
77: !IF $(DEBUG)>4
78: TCC = $(TCC) -DSQLITE_ENABLE_IOTRACE
79: !ENDIF
80:
81: #
82: # Prevent warnings about "insecure" runtime library functions being used.
83: #
84: TCC = $(TCC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS
85:
86: #
87: # Use native Win32 heap instead of malloc/free?
88: #
89: # TCC = $(TCC) -DSQLITE_WIN32_MALLOC=1
90:
91: #
92: # Validate the heap on every call into the native Win32 heap subsystem?
93: #
94: !IF $(DEBUG)>2
95: TCC = $(TCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1
96: !ENDIF
97:
98: # The locations of the Tcl header and library files. Also, the library that
99: # non-stubs enabled programs using Tcl must link against. These variables
100: # (TCLINCDIR, TCLLIBDIR, and LIBTCL) may be overridden via the environment
101: # prior to running nmake in order to match the actual installed location and
102: # version on this machine.
103: #
104: !if "$(TCLINCDIR)" == ""
105: TCLINCDIR = c:\tcl\include
106: !endif
107:
108: !if "$(TCLLIBDIR)" == ""
109: TCLLIBDIR = c:\tcl\lib
110: !endif
111:
112: !if "$(LIBTCL)" == ""
113: LIBTCL = tcl85.lib
114: !endif
115:
116: # The locations of the ICU header and library files. These variables
117: # (ICUINCDIR, ICULIBDIR, and LIBICU) may be overridden via the environment
118: # prior to running nmake in order to match the actual installed location on
119: # this machine.
120: #
121: !if "$(ICUINCDIR)" == ""
122: ICUINCDIR = c:\icu\include
123: !endif
124:
125: !if "$(ICULIBDIR)" == ""
126: ICULIBDIR = c:\icu\lib
127: !endif
128:
129: !if "$(LIBICU)" == ""
130: LIBICU = icuuc.lib icuin.lib
131: !endif
132:
133: # This is the command to use for tclsh - normally just "tclsh", but we may
134: # know the specific version we want to use. This variable (TCLSH_CMD) may be
135: # overridden via the environment prior to running nmake in order to select a
136: # specific Tcl shell to use.
137: #
138: !if "$(TCLSH_CMD)" == ""
139: TCLSH_CMD = tclsh85
140: !endif
141:
142: # Compiler options needed for programs that use the readline() library.
143: #
144: READLINE_FLAGS = -DHAVE_READLINE=0
145:
146: # The library that programs using readline() must link against.
147: #
148: LIBREADLINE =
149:
150: # Should the database engine be compiled threadsafe
151: #
152: TCC = $(TCC) -DSQLITE_THREADSAFE=1
153:
154: # Do threads override each others locks by default (1), or do we test (-1)
155: #
156: TCC = $(TCC) -DSQLITE_THREAD_OVERRIDE_LOCK=-1
157:
158: # Any target libraries which libsqlite must be linked against
159: #
160: !if "$(TLIBS)" == ""
161: TLIBS =
162: !endif
163:
164: # Flags controlling use of the in memory btree implementation
165: #
166: # SQLITE_TEMP_STORE is 0 to force temporary tables to be in a file, 1 to
167: # default to file, 2 to default to memory, and 3 to force temporary
168: # tables to always be in memory.
169: #
170: TCC = $(TCC) -DSQLITE_TEMP_STORE=1
171:
172: # Enable/disable loadable extensions, and other optional features
173: # based on configuration. (-DSQLITE_OMIT*, -DSQLITE_ENABLE*).
174: # The same set of OMIT and ENABLE flags should be passed to the
175: # LEMON parser generator and the mkkeywordhash tool as well.
176:
177: # BEGIN standard options
178: OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1
179: OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1
180: OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1
181: # END standard options
182:
183: # BEGIN required Windows option
184: OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_MAX_TRIGGER_DEPTH=100
185: # END required Windows option
186:
187: TCC = $(TCC) $(OPT_FEATURE_FLAGS)
188:
189: # Add in any optional parameters specified on the make commane line
190: # ie. make "OPTS=-DSQLITE_ENABLE_FOO=1 -DSQLITE_OMIT_FOO=1".
191: TCC = $(TCC) $(OPTS)
192:
193: # If symbols are enabled, enable PDBs.
194: # If debugging is enabled, disable all optimizations and enable PDBs.
195: !IF $(DEBUG)>0
196: TCC = $(TCC) -Od -D_DEBUG
197: !ELSE
198: TCC = $(TCC) -O2
199: !ENDIF
200:
201: !IF $(DEBUG)>0 || $(SYMBOLS)!=0
202: TCC = $(TCC) -Zi
203: !ENDIF
204:
205: # If ICU support is enabled, add the compiler options for it.
206: !IF $(USE_ICU)!=0
207: TCC = $(TCC) -DSQLITE_ENABLE_ICU=1
208: TCC = $(TCC) -I$(TOP)\ext\icu
209: TCC = $(TCC) -I$(ICUINCDIR)
210: !ENDIF
211:
212: # libtool compile/link
213: LTCOMPILE = $(TCC) -Fo$@
214: LTLIB = lib.exe
215: LTLINK = $(TCC) -Fe$@
216:
217: # If a platform was set, force the linker to target that.
218: # Note that the vcvars*.bat family of batch files typically
219: # set this for you. Otherwise, the linker will attempt
220: # to deduce the binary type based on the object files.
221: !IF "$(PLATFORM)"!=""
222: LTLINKOPTS = /MACHINE:$(PLATFORM)
223: LTLIBOPTS = /MACHINE:$(PLATFORM)
224: !ENDIF
225:
226: # If debugging is enabled, enable PDBs.
227: !IF $(DEBUG)>0 || $(SYMBOLS)!=0
228: LTLINKOPTS = $(LTLINKOPTS) /DEBUG
229: !ENDIF
230:
231: # Start with the Tcl related linker options.
232: LTLIBPATHS = /LIBPATH:$(TCLLIBDIR)
233: LTLIBS = $(LIBTCL)
234:
235: # If ICU support is enabled, add the linker options for it.
236: !IF $(USE_ICU)!=0
237: LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
238: LTLIBS = $(LTLIBS) $(LIBICU)
239: !ENDIF
240:
241: # nawk compatible awk.
242: NAWK = gawk.exe
243:
244: # You should not have to change anything below this line
245: ###############################################################################
246:
247: # Object files for the SQLite library (non-amalgamation).
248: #
249: LIBOBJS0 = alter.lo analyze.lo attach.lo auth.lo \
250: backup.lo bitvec.lo btmutex.lo btree.lo build.lo \
251: callback.lo complete.lo ctime.lo date.lo delete.lo \
252: expr.lo fault.lo fkey.lo \
253: fts3.lo fts3_aux.lo fts3_expr.lo fts3_hash.lo fts3_icu.lo fts3_porter.lo \
254: fts3_snippet.lo fts3_tokenizer.lo fts3_tokenizer1.lo fts3_write.lo \
255: func.lo global.lo hash.lo \
256: icu.lo insert.lo journal.lo legacy.lo loadext.lo \
257: main.lo malloc.lo mem0.lo mem1.lo mem2.lo mem3.lo mem5.lo \
258: memjournal.lo \
259: mutex.lo mutex_noop.lo mutex_os2.lo mutex_unix.lo mutex_w32.lo \
260: notify.lo opcodes.lo os.lo os_os2.lo os_unix.lo os_win.lo \
261: pager.lo parse.lo pcache.lo pcache1.lo pragma.lo prepare.lo printf.lo \
262: random.lo resolve.lo rowset.lo rtree.lo select.lo status.lo \
263: table.lo tokenize.lo trigger.lo \
264: update.lo util.lo vacuum.lo \
265: vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo vdbesort.lo \
266: vdbetrace.lo wal.lo walker.lo where.lo utf.lo vtab.lo
267:
268: # Object files for the amalgamation.
269: #
270: LIBOBJS1 = sqlite3.lo
271:
272: # Determine the real value of LIBOBJ based on the 'configure' script
273: #
274: !IF $(USE_AMALGAMATION)==0
275: LIBOBJ = $(LIBOBJS0)
276: !ELSE
277: LIBOBJ = $(LIBOBJS1)
278: !ENDIF
279:
280: # All of the source code files.
281: #
282: SRC = \
283: $(TOP)\src\alter.c \
284: $(TOP)\src\analyze.c \
285: $(TOP)\src\attach.c \
286: $(TOP)\src\auth.c \
287: $(TOP)\src\backup.c \
288: $(TOP)\src\bitvec.c \
289: $(TOP)\src\btmutex.c \
290: $(TOP)\src\btree.c \
291: $(TOP)\src\btree.h \
292: $(TOP)\src\btreeInt.h \
293: $(TOP)\src\build.c \
294: $(TOP)\src\callback.c \
295: $(TOP)\src\complete.c \
296: $(TOP)\src\ctime.c \
297: $(TOP)\src\date.c \
298: $(TOP)\src\delete.c \
299: $(TOP)\src\expr.c \
300: $(TOP)\src\fault.c \
301: $(TOP)\src\fkey.c \
302: $(TOP)\src\func.c \
303: $(TOP)\src\global.c \
304: $(TOP)\src\hash.c \
305: $(TOP)\src\hash.h \
306: $(TOP)\src\hwtime.h \
307: $(TOP)\src\insert.c \
308: $(TOP)\src\journal.c \
309: $(TOP)\src\legacy.c \
310: $(TOP)\src\loadext.c \
311: $(TOP)\src\main.c \
312: $(TOP)\src\malloc.c \
313: $(TOP)\src\mem0.c \
314: $(TOP)\src\mem1.c \
315: $(TOP)\src\mem2.c \
316: $(TOP)\src\mem3.c \
317: $(TOP)\src\mem5.c \
318: $(TOP)\src\memjournal.c \
319: $(TOP)\src\mutex.c \
320: $(TOP)\src\mutex.h \
321: $(TOP)\src\mutex_noop.c \
322: $(TOP)\src\mutex_os2.c \
323: $(TOP)\src\mutex_unix.c \
324: $(TOP)\src\mutex_w32.c \
325: $(TOP)\src\notify.c \
326: $(TOP)\src\os.c \
327: $(TOP)\src\os.h \
328: $(TOP)\src\os_common.h \
329: $(TOP)\src\os_os2.c \
330: $(TOP)\src\os_unix.c \
331: $(TOP)\src\os_win.c \
332: $(TOP)\src\pager.c \
333: $(TOP)\src\pager.h \
334: $(TOP)\src\parse.y \
335: $(TOP)\src\pcache.c \
336: $(TOP)\src\pcache.h \
337: $(TOP)\src\pcache1.c \
338: $(TOP)\src\pragma.c \
339: $(TOP)\src\prepare.c \
340: $(TOP)\src\printf.c \
341: $(TOP)\src\random.c \
342: $(TOP)\src\resolve.c \
343: $(TOP)\src\rowset.c \
344: $(TOP)\src\select.c \
345: $(TOP)\src\status.c \
346: $(TOP)\src\shell.c \
347: $(TOP)\src\sqlite.h.in \
348: $(TOP)\src\sqlite3ext.h \
349: $(TOP)\src\sqliteInt.h \
350: $(TOP)\src\sqliteLimit.h \
351: $(TOP)\src\table.c \
352: $(TOP)\src\tclsqlite.c \
353: $(TOP)\src\tokenize.c \
354: $(TOP)\src\trigger.c \
355: $(TOP)\src\utf.c \
356: $(TOP)\src\update.c \
357: $(TOP)\src\util.c \
358: $(TOP)\src\vacuum.c \
359: $(TOP)\src\vdbe.c \
360: $(TOP)\src\vdbe.h \
361: $(TOP)\src\vdbeapi.c \
362: $(TOP)\src\vdbeaux.c \
363: $(TOP)\src\vdbeblob.c \
364: $(TOP)\src\vdbemem.c \
365: $(TOP)\src\vdbesort.c \
366: $(TOP)\src\vdbetrace.c \
367: $(TOP)\src\vdbeInt.h \
368: $(TOP)\src\vtab.c \
369: $(TOP)\src\wal.c \
370: $(TOP)\src\wal.h \
371: $(TOP)\src\walker.c \
372: $(TOP)\src\where.c
373:
374: # Source code for extensions
375: #
376: SRC = $(SRC) \
377: $(TOP)\ext\fts1\fts1.c \
378: $(TOP)\ext\fts1\fts1.h \
379: $(TOP)\ext\fts1\fts1_hash.c \
380: $(TOP)\ext\fts1\fts1_hash.h \
381: $(TOP)\ext\fts1\fts1_porter.c \
382: $(TOP)\ext\fts1\fts1_tokenizer.h \
383: $(TOP)\ext\fts1\fts1_tokenizer1.c
384: SRC = $(SRC) \
385: $(TOP)\ext\fts2\fts2.c \
386: $(TOP)\ext\fts2\fts2.h \
387: $(TOP)\ext\fts2\fts2_hash.c \
388: $(TOP)\ext\fts2\fts2_hash.h \
389: $(TOP)\ext\fts2\fts2_icu.c \
390: $(TOP)\ext\fts2\fts2_porter.c \
391: $(TOP)\ext\fts2\fts2_tokenizer.h \
392: $(TOP)\ext\fts2\fts2_tokenizer.c \
393: $(TOP)\ext\fts2\fts2_tokenizer1.c
394: SRC = $(SRC) \
395: $(TOP)\ext\fts3\fts3.c \
396: $(TOP)\ext\fts3\fts3.h \
397: $(TOP)\ext\fts3\fts3Int.h \
398: $(TOP)\ext\fts3\fts3_aux.c \
399: $(TOP)\ext\fts3\fts3_expr.c \
400: $(TOP)\ext\fts3\fts3_hash.c \
401: $(TOP)\ext\fts3\fts3_hash.h \
402: $(TOP)\ext\fts3\fts3_icu.c \
403: $(TOP)\ext\fts3\fts3_porter.c \
404: $(TOP)\ext\fts3\fts3_snippet.c \
405: $(TOP)\ext\fts3\fts3_tokenizer.h \
406: $(TOP)\ext\fts3\fts3_tokenizer.c \
407: $(TOP)\ext\fts3\fts3_tokenizer1.c \
408: $(TOP)\ext\fts3\fts3_write.c
409: SRC = $(SRC) \
410: $(TOP)\ext\icu\sqliteicu.h \
411: $(TOP)\ext\icu\icu.c
412: SRC = $(SRC) \
413: $(TOP)\ext\rtree\rtree.h \
414: $(TOP)\ext\rtree\rtree.c
415:
416:
417: # Generated source code files
418: #
419: SRC = $(SRC) \
420: keywordhash.h \
421: opcodes.c \
422: opcodes.h \
423: parse.c \
424: parse.h \
425: sqlite3.h
426:
427: # Source code to the test files.
428: #
429: TESTSRC = \
430: $(TOP)\src\test1.c \
431: $(TOP)\src\test2.c \
432: $(TOP)\src\test3.c \
433: $(TOP)\src\test4.c \
434: $(TOP)\src\test5.c \
435: $(TOP)\src\test6.c \
436: $(TOP)\src\test7.c \
437: $(TOP)\src\test8.c \
438: $(TOP)\src\test9.c \
439: $(TOP)\src\test_autoext.c \
440: $(TOP)\src\test_async.c \
441: $(TOP)\src\test_backup.c \
442: $(TOP)\src\test_btree.c \
443: $(TOP)\src\test_config.c \
444: $(TOP)\src\test_demovfs.c \
445: $(TOP)\src\test_devsym.c \
446: $(TOP)\src\test_func.c \
447: $(TOP)\src\test_fuzzer.c \
448: $(TOP)\src\test_hexio.c \
449: $(TOP)\src\test_init.c \
450: $(TOP)\src\test_intarray.c \
451: $(TOP)\src\test_journal.c \
452: $(TOP)\src\test_malloc.c \
453: $(TOP)\src\test_multiplex.c \
454: $(TOP)\src\test_mutex.c \
455: $(TOP)\src\test_onefile.c \
456: $(TOP)\src\test_osinst.c \
457: $(TOP)\src\test_pcache.c \
458: $(TOP)\src\test_quota.c \
459: $(TOP)\src\test_rtree.c \
460: $(TOP)\src\test_schema.c \
461: $(TOP)\src\test_server.c \
462: $(TOP)\src\test_superlock.c \
463: $(TOP)\src\test_syscall.c \
464: $(TOP)\src\test_stat.c \
465: $(TOP)\src\test_tclvar.c \
466: $(TOP)\src\test_thread.c \
467: $(TOP)\src\test_vfs.c \
468: $(TOP)\src\test_wholenumber.c \
469: $(TOP)\src\test_wsd.c \
470: $(TOP)\ext\fts3\fts3_term.c \
471: $(TOP)\ext\fts3\fts3_test.c
472:
473: # Source code to the library files needed by the test fixture
474: #
475: TESTSRC2 = \
476: $(TOP)\src\attach.c \
477: $(TOP)\src\backup.c \
478: $(TOP)\src\bitvec.c \
479: $(TOP)\src\btree.c \
480: $(TOP)\src\build.c \
481: $(TOP)\src\ctime.c \
482: $(TOP)\src\date.c \
483: $(TOP)\src\expr.c \
484: $(TOP)\src\func.c \
485: $(TOP)\src\insert.c \
486: $(TOP)\src\wal.c \
487: $(TOP)\src\mem5.c \
488: $(TOP)\src\os.c \
489: $(TOP)\src\os_os2.c \
490: $(TOP)\src\os_unix.c \
491: $(TOP)\src\os_win.c \
492: $(TOP)\src\pager.c \
493: $(TOP)\src\pragma.c \
494: $(TOP)\src\prepare.c \
495: $(TOP)\src\printf.c \
496: $(TOP)\src\random.c \
497: $(TOP)\src\pcache.c \
498: $(TOP)\src\pcache1.c \
499: $(TOP)\src\select.c \
500: $(TOP)\src\tokenize.c \
501: $(TOP)\src\utf.c \
502: $(TOP)\src\util.c \
503: $(TOP)\src\vdbeapi.c \
504: $(TOP)\src\vdbeaux.c \
505: $(TOP)\src\vdbe.c \
506: $(TOP)\src\vdbemem.c \
507: $(TOP)\src\vdbesort.c \
508: $(TOP)\src\vdbetrace.c \
509: $(TOP)\src\where.c \
510: parse.c \
511: $(TOP)\ext\fts3\fts3.c \
512: $(TOP)\ext\fts3\fts3_aux.c \
513: $(TOP)\ext\fts3\fts3_expr.c \
514: $(TOP)\ext\fts3\fts3_tokenizer.c \
515: $(TOP)\ext\fts3\fts3_write.c \
516: $(TOP)\ext\async\sqlite3async.c
517:
518: # Header files used by all library source files.
519: #
520: HDR = \
521: $(TOP)\src\btree.h \
522: $(TOP)\src\btreeInt.h \
523: $(TOP)\src\hash.h \
524: $(TOP)\src\hwtime.h \
525: keywordhash.h \
526: $(TOP)\src\mutex.h \
527: opcodes.h \
528: $(TOP)\src\os.h \
529: $(TOP)\src\os_common.h \
530: $(TOP)\src\pager.h \
531: $(TOP)\src\pcache.h \
532: parse.h \
533: sqlite3.h \
534: $(TOP)\src\sqlite3ext.h \
535: $(TOP)\src\sqliteInt.h \
536: $(TOP)\src\sqliteLimit.h \
537: $(TOP)\src\vdbe.h \
538: $(TOP)\src\vdbeInt.h
539:
540: # Header files used by extensions
541: #
542: EXTHDR = $(EXTHDR) \
543: $(TOP)\ext\fts1\fts1.h \
544: $(TOP)\ext\fts1\fts1_hash.h \
545: $(TOP)\ext\fts1\fts1_tokenizer.h
546: EXTHDR = $(EXTHDR) \
547: $(TOP)\ext\fts2\fts2.h \
548: $(TOP)\ext\fts2\fts2_hash.h \
549: $(TOP)\ext\fts2\fts2_tokenizer.h
550: EXTHDR = $(EXTHDR) \
551: $(TOP)\ext\fts3\fts3.h \
552: $(TOP)\ext\fts3\fts3Int.h \
553: $(TOP)\ext\fts3\fts3_hash.h \
554: $(TOP)\ext\fts3\fts3_tokenizer.h
555: EXTHDR = $(EXTHDR) \
556: $(TOP)\ext\rtree\rtree.h
557: EXTHDR = $(EXTHDR) \
558: $(TOP)\ext\icu\sqliteicu.h
559: EXTHDR = $(EXTHDR) \
560: $(TOP)\ext\rtree\sqlite3rtree.h
561:
562: # This is the default Makefile target. The objects listed here
563: # are what get build when you type just "make" with no arguments.
564: #
565: all: dll libsqlite3.lib sqlite3.exe libtclsqlite3.lib
566:
567: libsqlite3.lib: $(LIBOBJ)
568: $(LTLIB) $(LTLIBOPTS) /OUT:$@ $(LIBOBJ) $(TLIBS)
569:
570: libtclsqlite3.lib: tclsqlite.lo libsqlite3.lib
571: $(LTLIB) $(LTLIBOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite.lo libsqlite3.lib $(LIBTCL:tcl=tclstub) $(TLIBS)
572:
573: sqlite3.exe: $(TOP)\src\shell.c libsqlite3.lib sqlite3.h
574: $(LTLINK) $(READLINE_FLAGS) \
575: $(TOP)\src\shell.c \
576: /link $(LTLINKOPTS) $(LTLIBPATHS) libsqlite3.lib $(LIBREADLINE) $(LTLIBS) $(TLIBS)
577:
578: # This target creates a directory named "tsrc" and fills it with
579: # copies of all of the C source code and header files needed to
580: # build on the target system. Some of the C source code and header
581: # files are automatically generated. This target takes care of
582: # all that automatic generation.
583: #
584: .target_source: $(SRC) $(TOP)\tool\vdbe-compress.tcl
585: -rmdir /S/Q tsrc
586: -mkdir tsrc
587: for %i in ($(SRC)) do copy /Y %i tsrc
588: del /Q tsrc\sqlite.h.in tsrc\parse.y
589: $(TCLSH_CMD) $(TOP)\tool\vdbe-compress.tcl < tsrc\vdbe.c > vdbe.new
590: move vdbe.new tsrc\vdbe.c
591: echo > .target_source
592:
593: sqlite3.c: .target_source $(TOP)\tool\mksqlite3c.tcl
594: $(TCLSH_CMD) $(TOP)\tool\mksqlite3c.tcl
595:
596: sqlite3-all.c: sqlite3.c $(TOP)/tool/split-sqlite3c.tcl
597: $(TCLSH_CMD) $(TOP)/tool/split-sqlite3c.tcl
598:
599: # Rule to build the amalgamation
600: #
601: sqlite3.lo: sqlite3.c
602: $(LTCOMPILE) -c sqlite3.c
603:
604: # Rules to build the LEMON compiler generator
605: #
606: lempar.c: $(TOP)\src\lempar.c
607: copy $(TOP)\src\lempar.c .
608:
609: lemon.exe: $(TOP)\tool\lemon.c lempar.c
610: $(BCC) -Fe$@ $(TOP)\tool\lemon.c
611:
612: # Rules to build individual *.lo files from generated *.c files. This
613: # applies to:
614: #
615: # parse.lo
616: # opcodes.lo
617: #
618: parse.lo: parse.c $(HDR)
619: $(LTCOMPILE) -c parse.c
620:
621: opcodes.lo: opcodes.c
622: $(LTCOMPILE) -c opcodes.c
623:
624: # Rules to build individual *.lo files from files in the src directory.
625: #
626: alter.lo: $(TOP)\src\alter.c $(HDR)
627: $(LTCOMPILE) -c $(TOP)\src\alter.c
628:
629: analyze.lo: $(TOP)\src\analyze.c $(HDR)
630: $(LTCOMPILE) -c $(TOP)\src\analyze.c
631:
632: attach.lo: $(TOP)\src\attach.c $(HDR)
633: $(LTCOMPILE) -c $(TOP)\src\attach.c
634:
635: auth.lo: $(TOP)\src\auth.c $(HDR)
636: $(LTCOMPILE) -c $(TOP)\src\auth.c
637:
638: backup.lo: $(TOP)\src\backup.c $(HDR)
639: $(LTCOMPILE) -c $(TOP)\src\backup.c
640:
641: bitvec.lo: $(TOP)\src\bitvec.c $(HDR)
642: $(LTCOMPILE) -c $(TOP)\src\bitvec.c
643:
644: btmutex.lo: $(TOP)\src\btmutex.c $(HDR)
645: $(LTCOMPILE) -c $(TOP)\src\btmutex.c
646:
647: btree.lo: $(TOP)\src\btree.c $(HDR) $(TOP)\src\pager.h
648: $(LTCOMPILE) -c $(TOP)\src\btree.c
649:
650: build.lo: $(TOP)\src\build.c $(HDR)
651: $(LTCOMPILE) -c $(TOP)\src\build.c
652:
653: callback.lo: $(TOP)\src\callback.c $(HDR)
654: $(LTCOMPILE) -c $(TOP)\src\callback.c
655:
656: complete.lo: $(TOP)\src\complete.c $(HDR)
657: $(LTCOMPILE) -c $(TOP)\src\complete.c
658:
659: ctime.lo: $(TOP)\src\ctime.c $(HDR)
660: $(LTCOMPILE) -c $(TOP)\src\ctime.c
661:
662: date.lo: $(TOP)\src\date.c $(HDR)
663: $(LTCOMPILE) -c $(TOP)\src\date.c
664:
665: delete.lo: $(TOP)\src\delete.c $(HDR)
666: $(LTCOMPILE) -c $(TOP)\src\delete.c
667:
668: expr.lo: $(TOP)\src\expr.c $(HDR)
669: $(LTCOMPILE) -c $(TOP)\src\expr.c
670:
671: fault.lo: $(TOP)\src\fault.c $(HDR)
672: $(LTCOMPILE) -c $(TOP)\src\fault.c
673:
674: fkey.lo: $(TOP)\src\fkey.c $(HDR)
675: $(LTCOMPILE) -c $(TOP)\src\fkey.c
676:
677: func.lo: $(TOP)\src\func.c $(HDR)
678: $(LTCOMPILE) -c $(TOP)\src\func.c
679:
680: global.lo: $(TOP)\src\global.c $(HDR)
681: $(LTCOMPILE) -c $(TOP)\src\global.c
682:
683: hash.lo: $(TOP)\src\hash.c $(HDR)
684: $(LTCOMPILE) -c $(TOP)\src\hash.c
685:
686: insert.lo: $(TOP)\src\insert.c $(HDR)
687: $(LTCOMPILE) -c $(TOP)\src\insert.c
688:
689: journal.lo: $(TOP)\src\journal.c $(HDR)
690: $(LTCOMPILE) -c $(TOP)\src\journal.c
691:
692: legacy.lo: $(TOP)\src\legacy.c $(HDR)
693: $(LTCOMPILE) -c $(TOP)\src\legacy.c
694:
695: loadext.lo: $(TOP)\src\loadext.c $(HDR)
696: $(LTCOMPILE) -c $(TOP)\src\loadext.c
697:
698: main.lo: $(TOP)\src\main.c $(HDR)
699: $(LTCOMPILE) -c $(TOP)\src\main.c
700:
701: malloc.lo: $(TOP)\src\malloc.c $(HDR)
702: $(LTCOMPILE) -c $(TOP)\src\malloc.c
703:
704: mem0.lo: $(TOP)\src\mem0.c $(HDR)
705: $(LTCOMPILE) -c $(TOP)\src\mem0.c
706:
707: mem1.lo: $(TOP)\src\mem1.c $(HDR)
708: $(LTCOMPILE) -c $(TOP)\src\mem1.c
709:
710: mem2.lo: $(TOP)\src\mem2.c $(HDR)
711: $(LTCOMPILE) -c $(TOP)\src\mem2.c
712:
713: mem3.lo: $(TOP)\src\mem3.c $(HDR)
714: $(LTCOMPILE) -c $(TOP)\src\mem3.c
715:
716: mem5.lo: $(TOP)\src\mem5.c $(HDR)
717: $(LTCOMPILE) -c $(TOP)\src\mem5.c
718:
719: memjournal.lo: $(TOP)\src\memjournal.c $(HDR)
720: $(LTCOMPILE) -c $(TOP)\src\memjournal.c
721:
722: mutex.lo: $(TOP)\src\mutex.c $(HDR)
723: $(LTCOMPILE) -c $(TOP)\src\mutex.c
724:
725: mutex_noop.lo: $(TOP)\src\mutex_noop.c $(HDR)
726: $(LTCOMPILE) -c $(TOP)\src\mutex_noop.c
727:
728: mutex_os2.lo: $(TOP)\src\mutex_os2.c $(HDR)
729: $(LTCOMPILE) -c $(TOP)\src\mutex_os2.c
730:
731: mutex_unix.lo: $(TOP)\src\mutex_unix.c $(HDR)
732: $(LTCOMPILE) -c $(TOP)\src\mutex_unix.c
733:
734: mutex_w32.lo: $(TOP)\src\mutex_w32.c $(HDR)
735: $(LTCOMPILE) -c $(TOP)\src\mutex_w32.c
736:
737: notify.lo: $(TOP)\src\notify.c $(HDR)
738: $(LTCOMPILE) -c $(TOP)\src\notify.c
739:
740: pager.lo: $(TOP)\src\pager.c $(HDR) $(TOP)\src\pager.h
741: $(LTCOMPILE) -c $(TOP)\src\pager.c
742:
743: pcache.lo: $(TOP)\src\pcache.c $(HDR) $(TOP)\src\pcache.h
744: $(LTCOMPILE) -c $(TOP)\src\pcache.c
745:
746: pcache1.lo: $(TOP)\src\pcache1.c $(HDR) $(TOP)\src\pcache.h
747: $(LTCOMPILE) -c $(TOP)\src\pcache1.c
748:
749: os.lo: $(TOP)\src\os.c $(HDR)
750: $(LTCOMPILE) -c $(TOP)\src\os.c
751:
752: os_unix.lo: $(TOP)\src\os_unix.c $(HDR)
753: $(LTCOMPILE) -c $(TOP)\src\os_unix.c
754:
755: os_win.lo: $(TOP)\src\os_win.c $(HDR)
756: $(LTCOMPILE) -c $(TOP)\src\os_win.c
757:
758: os_os2.lo: $(TOP)\src\os_os2.c $(HDR)
759: $(LTCOMPILE) -c $(TOP)\src\os_os2.c
760:
761: pragma.lo: $(TOP)\src\pragma.c $(HDR)
762: $(LTCOMPILE) -c $(TOP)\src\pragma.c
763:
764: prepare.lo: $(TOP)\src\prepare.c $(HDR)
765: $(LTCOMPILE) -c $(TOP)\src\prepare.c
766:
767: printf.lo: $(TOP)\src\printf.c $(HDR)
768: $(LTCOMPILE) -c $(TOP)\src\printf.c
769:
770: random.lo: $(TOP)\src\random.c $(HDR)
771: $(LTCOMPILE) -c $(TOP)\src\random.c
772:
773: resolve.lo: $(TOP)\src\resolve.c $(HDR)
774: $(LTCOMPILE) -c $(TOP)\src\resolve.c
775:
776: rowset.lo: $(TOP)\src\rowset.c $(HDR)
777: $(LTCOMPILE) -c $(TOP)\src\rowset.c
778:
779: select.lo: $(TOP)\src\select.c $(HDR)
780: $(LTCOMPILE) -c $(TOP)\src\select.c
781:
782: status.lo: $(TOP)\src\status.c $(HDR)
783: $(LTCOMPILE) -c $(TOP)\src\status.c
784:
785: table.lo: $(TOP)\src\table.c $(HDR)
786: $(LTCOMPILE) -c $(TOP)\src\table.c
787:
788: tokenize.lo: $(TOP)\src\tokenize.c keywordhash.h $(HDR)
789: $(LTCOMPILE) -c $(TOP)\src\tokenize.c
790:
791: trigger.lo: $(TOP)\src\trigger.c $(HDR)
792: $(LTCOMPILE) -c $(TOP)\src\trigger.c
793:
794: update.lo: $(TOP)\src\update.c $(HDR)
795: $(LTCOMPILE) -c $(TOP)\src\update.c
796:
797: utf.lo: $(TOP)\src\utf.c $(HDR)
798: $(LTCOMPILE) -c $(TOP)\src\utf.c
799:
800: util.lo: $(TOP)\src\util.c $(HDR)
801: $(LTCOMPILE) -c $(TOP)\src\util.c
802:
803: vacuum.lo: $(TOP)\src\vacuum.c $(HDR)
804: $(LTCOMPILE) -c $(TOP)\src\vacuum.c
805:
806: vdbe.lo: $(TOP)\src\vdbe.c $(HDR)
807: $(LTCOMPILE) -c $(TOP)\src\vdbe.c
808:
809: vdbeapi.lo: $(TOP)\src\vdbeapi.c $(HDR)
810: $(LTCOMPILE) -c $(TOP)\src\vdbeapi.c
811:
812: vdbeaux.lo: $(TOP)\src\vdbeaux.c $(HDR)
813: $(LTCOMPILE) -c $(TOP)\src\vdbeaux.c
814:
815: vdbeblob.lo: $(TOP)\src\vdbeblob.c $(HDR)
816: $(LTCOMPILE) -c $(TOP)\src\vdbeblob.c
817:
818: vdbemem.lo: $(TOP)\src\vdbemem.c $(HDR)
819: $(LTCOMPILE) -c $(TOP)\src\vdbemem.c
820:
821: vdbesort.lo: $(TOP)\src\vdbesort.c $(HDR)
822: $(LTCOMPILE) -c $(TOP)\src\vdbesort.c
823:
824: vdbetrace.lo: $(TOP)\src\vdbetrace.c $(HDR)
825: $(LTCOMPILE) -c $(TOP)\src\vdbetrace.c
826:
827: vtab.lo: $(TOP)\src\vtab.c $(HDR)
828: $(LTCOMPILE) -c $(TOP)\src\vtab.c
829:
830: wal.lo: $(TOP)\src\wal.c $(HDR)
831: $(LTCOMPILE) -c $(TOP)\src\wal.c
832:
833: walker.lo: $(TOP)\src\walker.c $(HDR)
834: $(LTCOMPILE) -c $(TOP)\src\walker.c
835:
836: where.lo: $(TOP)\src\where.c $(HDR)
837: $(LTCOMPILE) -c $(TOP)\src\where.c
838:
839: tclsqlite.lo: $(TOP)\src\tclsqlite.c $(HDR)
840: $(LTCOMPILE) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
841:
842: tclsqlite-shell.lo: $(TOP)\src\tclsqlite.c $(HDR)
843: $(LTCOMPILE) -DTCLSH=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
844:
845: tclsqlite3.exe: tclsqlite-shell.lo libsqlite3.lib
846: $(LTLINK) tclsqlite-shell.lo \
847: /link $(LTLINKOPTS) $(LTLIBPATHS) libsqlite3.lib $(LTLIBS) $(TLIBS)
848:
849: # Rules to build opcodes.c and opcodes.h
850: #
851: opcodes.c: opcodes.h $(TOP)\mkopcodec.awk
852: $(NAWK) -f $(TOP)\mkopcodec.awk opcodes.h > opcodes.c
853:
854: opcodes.h: parse.h $(TOP)\src\vdbe.c $(TOP)\mkopcodeh.awk
855: type parse.h $(TOP)\src\vdbe.c | $(NAWK) -f $(TOP)\mkopcodeh.awk > opcodes.h
856:
857: # Rules to build parse.c and parse.h - the outputs of lemon.
858: #
859: parse.h: parse.c
860:
861: parse.c: $(TOP)\src\parse.y lemon.exe $(TOP)\addopcodes.awk
862: del /Q parse.y parse.h parse.h.temp
863: copy $(TOP)\src\parse.y .
864: .\lemon.exe $(OPT_FEATURE_FLAGS) $(OPTS) parse.y
865: move parse.h parse.h.temp
866: $(NAWK) -f $(TOP)\addopcodes.awk parse.h.temp > parse.h
867:
868: sqlite3.h: $(TOP)\src\sqlite.h.in $(TOP)\manifest.uuid $(TOP)\VERSION
869: $(TCLSH_CMD) $(TOP)\tool\mksqlite3h.tcl $(TOP) > sqlite3.h
870:
871: mkkeywordhash.exe: $(TOP)\tool\mkkeywordhash.c
872: $(BCC) -Femkkeywordhash.exe $(OPT_FEATURE_FLAGS) $(OPTS) $(TOP)\tool\mkkeywordhash.c
873:
874: keywordhash.h: $(TOP)\tool\mkkeywordhash.c mkkeywordhash.exe
875: .\mkkeywordhash.exe > keywordhash.h
876:
877:
878:
879: # Rules to build the extension objects.
880: #
881: icu.lo: $(TOP)\ext\icu\icu.c $(HDR) $(EXTHDR)
882: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\icu\icu.c
883:
884: fts2.lo: $(TOP)\ext\fts2\fts2.c $(HDR) $(EXTHDR)
885: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2.c
886:
887: fts2_hash.lo: $(TOP)\ext\fts2\fts2_hash.c $(HDR) $(EXTHDR)
888: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_hash.c
889:
890: fts2_icu.lo: $(TOP)\ext\fts2\fts2_icu.c $(HDR) $(EXTHDR)
891: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_icu.c
892:
893: fts2_porter.lo: $(TOP)\ext\fts2\fts2_porter.c $(HDR) $(EXTHDR)
894: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_porter.c
895:
896: fts2_tokenizer.lo: $(TOP)\ext\fts2\fts2_tokenizer.c $(HDR) $(EXTHDR)
897: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer.c
898:
899: fts2_tokenizer1.lo: $(TOP)\ext\fts2\fts2_tokenizer1.c $(HDR) $(EXTHDR)
900: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer1.c
901:
902: fts3.lo: $(TOP)\ext\fts3\fts3.c $(HDR) $(EXTHDR)
903: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3.c
904:
905: fts3_aux.lo: $(TOP)\ext\fts3\fts3_aux.c $(HDR) $(EXTHDR)
906: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_aux.c
907:
908: fts3_expr.lo: $(TOP)\ext\fts3\fts3_expr.c $(HDR) $(EXTHDR)
909: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_expr.c
910:
911: fts3_hash.lo: $(TOP)\ext\fts3\fts3_hash.c $(HDR) $(EXTHDR)
912: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_hash.c
913:
914: fts3_icu.lo: $(TOP)\ext\fts3\fts3_icu.c $(HDR) $(EXTHDR)
915: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_icu.c
916:
917: fts3_snippet.lo: $(TOP)\ext\fts3\fts3_snippet.c $(HDR) $(EXTHDR)
918: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_snippet.c
919:
920: fts3_porter.lo: $(TOP)\ext\fts3\fts3_porter.c $(HDR) $(EXTHDR)
921: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_porter.c
922:
923: fts3_tokenizer.lo: $(TOP)\ext\fts3\fts3_tokenizer.c $(HDR) $(EXTHDR)
924: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer.c
925:
926: fts3_tokenizer1.lo: $(TOP)\ext\fts3\fts3_tokenizer1.c $(HDR) $(EXTHDR)
927: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer1.c
928:
929: fts3_write.lo: $(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR)
930: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c
931:
932: rtree.lo: $(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR)
933: $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c
934:
935:
936: # Rules to build the 'testfixture' application.
937: #
938: # If using the amalgamation, use sqlite3.c directly to build the test
939: # fixture. Otherwise link against libsqlite3.lib. (This distinction is
940: # necessary because the test fixture requires non-API symbols which are
941: # hidden when the library is built via the amalgamation).
942: #
943: TESTFIXTURE_FLAGS = -DTCLSH=1 -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1
944: TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERVER=1 -DSQLITE_PRIVATE="" -DSQLITE_CORE
945:
946: TESTFIXTURE_SRC0 = $(TESTSRC2) libsqlite3.lib
947: TESTFIXTURE_SRC1 = sqlite3.c
948: !IF $(USE_AMALGAMATION)==0
949: TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC0)
950: !ELSE
951: TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC1)
952: !ENDIF
953:
954: testfixture.exe: $(TESTFIXTURE_SRC) $(HDR)
955: $(LTLINK) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
956: -DBUILD_sqlite -I$(TCLINCDIR) \
957: $(TESTFIXTURE_SRC) \
958: /link $(LTLINKOPTS) $(LTLIBPATHS) $(LTLIBS) $(TLIBS)
959:
960: fulltest: testfixture.exe sqlite3.exe
961: .\testfixture.exe $(TOP)\test\all.test
962:
963: soaktest: testfixture.exe sqlite3.exe
964: .\testfixture.exe $(TOP)\test\all.test -soak=1
965:
966: test: testfixture.exe sqlite3.exe
967: .\testfixture.exe $(TOP)\test\veryquick.test
968:
969: sqlite3_analyzer.c: sqlite3.c $(TOP)\src\test_stat.c $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl
970: copy sqlite3.c + $(TOP)\src\test_stat.c + $(TOP)\src\tclsqlite.c $@
971: echo static const char *tclsh_main_loop(void){ >> $@
972: echo static const char *zMainloop = >> $@
973: $(NAWK) -f $(TOP)\tool\tostr.awk $(TOP)\tool\spaceanal.tcl >> $@
974: echo ; return zMainloop; } >> $@
975:
976: sqlite3_analyzer.exe: sqlite3_analyzer.c
977: $(LTLINK) -DBUILD_sqlite -DTCLSH=2 -I$(TCLINCDIR) sqlite3_analyzer.c \
978: /link $(LTLINKOPTS) $(LTLIBPATHS) $(LTLIBS) $(TLIBS)
979:
980: clean:
981: del /Q *.lo *.ilk *.lib *.obj *.pdb sqlite3.exe libsqlite3.lib
982: del /Q sqlite3.h opcodes.c opcodes.h
983: del /Q lemon.exe lempar.c parse.*
984: del /Q mkkeywordhash.exe keywordhash.h
985: -rmdir /Q/S tsrc
986: del /Q .target_source
987: del /Q tclsqlite3.exe
988: del /Q testfixture.exe testfixture.exp test.db
989: del /Q sqlite3.dll sqlite3.lib sqlite3.exp sqlite3.def
990: del /Q sqlite3.c
991: del /Q sqlite3_analyzer.exe sqlite3_analyzer.exp sqlite3_analyzer.c
992:
993: #
994: # Windows section
995: #
996: dll: sqlite3.dll
997:
998: sqlite3.def: libsqlite3.lib
999: echo EXPORTS > sqlite3.def
1000: dumpbin /all libsqlite3.lib \
1001: | $(NAWK) "/ 1 _?sqlite3_/ { sub(/^.* _?/,\"\");print }" \
1002: | sort >> sqlite3.def
1003:
1004: sqlite3.dll: $(LIBOBJ) sqlite3.def
1005: link $(LTLINKOPTS) $(LTLIBPATHS) /DLL /DEF:sqlite3.def /OUT:$@ $(LIBOBJ) $(LTLIBS) $(TLIBS)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>