OLD | NEW |
| (Empty) |
1 #!/bin/sh | |
2 # restart with tclsh \ | |
3 exec tclsh "$0" "$@" | |
4 | |
5 set srcdir [file dirname [file dirname [info script]]] | |
6 set G(src) [string map [list %dir% $srcdir] { | |
7 %dir%/fts5.h | |
8 %dir%/fts5Int.h | |
9 fts5parse.h | |
10 fts5parse.c | |
11 %dir%/fts5_aux.c | |
12 %dir%/fts5_buffer.c | |
13 %dir%/fts5_config.c | |
14 %dir%/fts5_expr.c | |
15 %dir%/fts5_hash.c | |
16 %dir%/fts5_index.c | |
17 %dir%/fts5_main.c | |
18 %dir%/fts5_storage.c | |
19 %dir%/fts5_tokenize.c | |
20 %dir%/fts5_unicode2.c | |
21 %dir%/fts5_varint.c | |
22 %dir%/fts5_vocab.c | |
23 }] | |
24 | |
25 set G(hdr) { | |
26 | |
27 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS5) | |
28 | |
29 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) | |
30 # define NDEBUG 1 | |
31 #endif | |
32 #if defined(NDEBUG) && defined(SQLITE_DEBUG) | |
33 # undef NDEBUG | |
34 #endif | |
35 | |
36 } | |
37 | |
38 set G(footer) { | |
39 | |
40 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS5) */ | |
41 } | |
42 | |
43 #------------------------------------------------------------------------- | |
44 # Read and return the entire contents of text file $zFile from disk. | |
45 # | |
46 proc readfile {zFile} { | |
47 set fd [open $zFile] | |
48 set data [read $fd] | |
49 close $fd | |
50 return $data | |
51 } | |
52 | |
53 #------------------------------------------------------------------------- | |
54 # This command returns a string identifying the current sqlite version - | |
55 # the equivalent of the SQLITE_SOURCE_ID string. | |
56 # | |
57 proc fts5_source_id {zDir} { | |
58 set top [file dirname [file dirname $zDir]] | |
59 set uuid [string trim [readfile [file join $top manifest.uuid]]] | |
60 | |
61 set L [split [readfile [file join $top manifest]]] | |
62 set date [lindex $L [expr [lsearch -exact $L D]+1]] | |
63 set date [string range $date 0 [string last . $date]-1] | |
64 set date [string map {T { }} $date] | |
65 | |
66 return "fts5: $date $uuid" | |
67 } | |
68 | |
69 proc fts5c_init {zOut} { | |
70 global G | |
71 set G(fd) stdout | |
72 set G(fd) [open $zOut w] | |
73 | |
74 puts -nonewline $G(fd) $G(hdr) | |
75 } | |
76 | |
77 proc fts5c_printfile {zIn} { | |
78 global G | |
79 set data [readfile $zIn] | |
80 set zTail [file tail $zIn] | |
81 puts $G(fd) "#line 1 \"$zTail\"" | |
82 | |
83 set sub_map [list --FTS5-SOURCE-ID-- [fts5_source_id $::srcdir]] | |
84 if {$zTail=="fts5parse.c"} { | |
85 lappend sub_map yy fts5yy YY fts5YY TOKEN FTS5TOKEN | |
86 } | |
87 | |
88 foreach line [split $data "\n"] { | |
89 if {[regexp {^#include.*fts5} $line]} { | |
90 set line "/* $line */" | |
91 } elseif { | |
92 ![regexp { sqlite3Fts5Init\(} $line] | |
93 && [regexp {^(const )?[a-zA-Z][a-zA-Z0-9]* [*]?sqlite3Fts5} $line] | |
94 } { | |
95 set line "static $line" | |
96 } | |
97 set line [string map $sub_map $line] | |
98 puts $G(fd) $line | |
99 } | |
100 } | |
101 | |
102 proc fts5c_close {} { | |
103 global G | |
104 puts -nonewline $G(fd) $G(footer) | |
105 if {$G(fd)!="stdout"} { | |
106 close $G(fd) | |
107 } | |
108 } | |
109 | |
110 | |
111 fts5c_init fts5.c | |
112 foreach f $G(src) { fts5c_printfile $f } | |
113 fts5c_close | |
OLD | NEW |