Annotation of embedaddon/sqlite3/ext/fts2/mkfts2amal.tcl, revision 1.1
1.1 ! misho 1: #!/usr/bin/tclsh
! 2: #
! 3: # This script builds a single C code file holding all of FTS2 code.
! 4: # The name of the output file is fts2amal.c. To build this file,
! 5: # first do:
! 6: #
! 7: # make target_source
! 8: #
! 9: # The make target above moves all of the source code files into
! 10: # a subdirectory named "tsrc". (This script expects to find the files
! 11: # there and will not work if they are not found.)
! 12: #
! 13: # After the "tsrc" directory has been created and populated, run
! 14: # this script:
! 15: #
! 16: # tclsh mkfts2amal.tcl
! 17: #
! 18: # The amalgamated FTS2 code will be written into fts2amal.c
! 19: #
! 20:
! 21: # Open the output file and write a header comment at the beginning
! 22: # of the file.
! 23: #
! 24: set out [open fts2amal.c w]
! 25: set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
! 26: puts $out [subst \
! 27: {/******************************************************************************
! 28: ** This file is an amalgamation of separate C source files from the SQLite
! 29: ** Full Text Search extension 2 (fts2). By combining all the individual C
! 30: ** code files into this single large file, the entire code can be compiled
! 31: ** as a one translation unit. This allows many compilers to do optimizations
! 32: ** that would not be possible if the files were compiled separately. It also
! 33: ** makes the code easier to import into other projects.
! 34: **
! 35: ** This amalgamation was generated on $today.
! 36: */}]
! 37:
! 38: # These are the header files used by FTS2. The first time any of these
! 39: # files are seen in a #include statement in the C code, include the complete
! 40: # text of the file in-line. The file only needs to be included once.
! 41: #
! 42: foreach hdr {
! 43: fts2.h
! 44: fts2_hash.h
! 45: fts2_tokenizer.h
! 46: sqlite3.h
! 47: sqlite3ext.h
! 48: } {
! 49: set available_hdr($hdr) 1
! 50: }
! 51:
! 52: # 78 stars used for comment formatting.
! 53: set s78 \
! 54: {*****************************************************************************}
! 55:
! 56: # Insert a comment into the code
! 57: #
! 58: proc section_comment {text} {
! 59: global out s78
! 60: set n [string length $text]
! 61: set nstar [expr {60 - $n}]
! 62: set stars [string range $s78 0 $nstar]
! 63: puts $out "/************** $text $stars/"
! 64: }
! 65:
! 66: # Read the source file named $filename and write it into the
! 67: # sqlite3.c output file. If any #include statements are seen,
! 68: # process them approprately.
! 69: #
! 70: proc copy_file {filename} {
! 71: global seen_hdr available_hdr out
! 72: set tail [file tail $filename]
! 73: section_comment "Begin file $tail"
! 74: set in [open $filename r]
! 75: while {![eof $in]} {
! 76: set line [gets $in]
! 77: if {[regexp {^#\s*include\s+["<]([^">]+)[">]} $line all hdr]} {
! 78: if {[info exists available_hdr($hdr)]} {
! 79: if {$available_hdr($hdr)} {
! 80: section_comment "Include $hdr in the middle of $tail"
! 81: copy_file tsrc/$hdr
! 82: section_comment "Continuing where we left off in $tail"
! 83: }
! 84: } elseif {![info exists seen_hdr($hdr)]} {
! 85: set seen_hdr($hdr) 1
! 86: puts $out $line
! 87: }
! 88: } elseif {[regexp {^#ifdef __cplusplus} $line]} {
! 89: puts $out "#if 0"
! 90: } elseif {[regexp {^#line} $line]} {
! 91: # Skip #line directives.
! 92: } else {
! 93: puts $out $line
! 94: }
! 95: }
! 96: close $in
! 97: section_comment "End of $tail"
! 98: }
! 99:
! 100:
! 101: # Process the source files. Process files containing commonly
! 102: # used subroutines first in order to help the compiler find
! 103: # inlining opportunities.
! 104: #
! 105: foreach file {
! 106: fts2.c
! 107: fts2_hash.c
! 108: fts2_porter.c
! 109: fts2_tokenizer.c
! 110: fts2_tokenizer1.c
! 111: fts2_icu.c
! 112: } {
! 113: copy_file tsrc/$file
! 114: }
! 115:
! 116: close $out
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>