123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #!/bin/sh
- # restart with tclsh \
- exec tclsh "$0" "$@"
- set srcdir [file dirname [file dirname [file normalize [info script]]]]
- set G(src) [string map [list %dir% $srcdir] {
- %dir%/fts5.h
- %dir%/fts5Int.h
- fts5parse.h
- fts5parse.c
- %dir%/fts5_aux.c
- %dir%/fts5_buffer.c
- %dir%/fts5_config.c
- %dir%/fts5_expr.c
- %dir%/fts5_hash.c
- %dir%/fts5_index.c
- %dir%/fts5_main.c
- %dir%/fts5_storage.c
- %dir%/fts5_tokenize.c
- %dir%/fts5_unicode2.c
- %dir%/fts5_varint.c
- %dir%/fts5_vocab.c
- }]
- set G(hdr) {
- /*
- ** This, the "fts5.c" source file, is a composite file that is itself
- ** assembled from the following files:
- **
- ** fts5.h
- ** fts5Int.h
- ** fts5parse.h <--- Generated from fts5parse.y by Lemon
- ** fts5parse.c <--- Generated from fts5parse.y by Lemon
- ** fts5_aux.c
- ** fts5_buffer.c
- ** fts5_config.c
- ** fts5_expr.c
- ** fts5_hash.c
- ** fts5_index.c
- ** fts5_main.c
- ** fts5_storage.c
- ** fts5_tokenize.c
- ** fts5_unicode2.c
- ** fts5_varint.c
- ** fts5_vocab.c
- */
- #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS5)
- #if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
- # define NDEBUG 1
- #endif
- #if defined(NDEBUG) && defined(SQLITE_DEBUG)
- # undef NDEBUG
- #endif
- #ifdef HAVE_STDINT_H
- #include <stdint.h>
- #endif
- #ifdef HAVE_INTTYPES_H
- #include <inttypes.h>
- #endif
- }
- set G(footer) {
- /* Here ends the fts5.c composite file. */
- #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS5) */
- }
- #-------------------------------------------------------------------------
- # Read and return the entire contents of text file $zFile from disk.
- #
- proc readfile {zFile} {
- set fd [open $zFile]
- set data [read $fd]
- close $fd
- return $data
- }
- #-------------------------------------------------------------------------
- # This command returns a string identifying the current sqlite version -
- # the equivalent of the SQLITE_SOURCE_ID string.
- #
- proc fts5_source_id {zDir} {
- set top [file dirname [file dirname $zDir]]
- set uuid [string trim [readfile [file join $top manifest.uuid]]]
- set L [split [readfile [file join $top manifest]]]
- set date [lindex $L [expr [lsearch -exact $L D]+1]]
- set idx [expr {[string last . $date]-1}]
- set date [string range $date 0 $idx]
- set date [string map {T { }} $date]
- return "fts5: $date $uuid"
- }
- proc fts5c_init {zOut} {
- global G
- set G(fd) stdout
- set G(fd) [open $zOut w]
- puts -nonewline $G(fd) $G(hdr)
- }
- proc fts5c_printfile {zIn} {
- global G
- set data [readfile $zIn]
- set zTail [file tail $zIn]
- puts $G(fd) "#line 1 \"$zTail\""
- set sub_map [list --FTS5-SOURCE-ID-- [fts5_source_id $::srcdir]]
- if {$zTail=="fts5parse.c"} {
- lappend sub_map yy fts5yy YY fts5YY TOKEN FTS5TOKEN
- }
- foreach line [split $data "\n"] {
- if {[regexp {^#include.*fts5} $line]} {
- set line "/* $line */"
- } elseif {
- ![regexp { sqlite3Fts5Init\(} $line]
- && [regexp {^(const )?[a-zA-Z][a-zA-Z0-9]* [*]?sqlite3Fts5} $line]
- } {
- set line "static $line"
- }
- set line [string map $sub_map $line]
- puts $G(fd) $line
- }
- }
- proc fts5c_close {} {
- global G
- puts -nonewline $G(fd) $G(footer)
- if {$G(fd)!="stdout"} {
- close $G(fd)
- }
- }
- fts5c_init fts5.c
- foreach f $G(src) { fts5c_printfile $f }
- fts5c_close
|