File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / tool / mksqlite3h.tcl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:17 2012 UTC (12 years, 4 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: #!/usr/bin/tclsh
    2: #
    3: # This script constructs the "sqlite3.h" header file from the following
    4: # sources:
    5: #
    6: #   1) The src/sqlite.h.in source file.  This is the template for sqlite3.h.
    7: #   2) The VERSION file containing the current SQLite version number.
    8: #   3) The manifest file from the fossil SCM.  This gives use the date.
    9: #   4) The manifest.uuid file from the fossil SCM.  This gives the SHA1 hash.
   10: #
   11: # Run this script by specifying the root directory of the source tree
   12: # on the command-line.
   13: # 
   14: # This script performs processing on src/sqlite.h.in. It:
   15: #
   16: #   1) Adds SQLITE_EXTERN in front of the declaration of global variables,
   17: #   2) Adds SQLITE_API in front of the declaration of API functions,
   18: #   3) Replaces the string --VERS-- with the current library version, 
   19: #      formatted as a string (e.g. "3.6.17"), and
   20: #   4) Replaces the string --VERSION-NUMBER-- with current library version,
   21: #      formatted as an integer (e.g. "3006017").
   22: #   5) Replaces the string --SOURCE-ID-- with the date and time and sha1 
   23: #      hash of the fossil-scm manifest for the source tree.
   24: #
   25: # This script outputs to stdout.
   26: #
   27: # Example usage:
   28: #
   29: #   tclsh mksqlite3h.tcl ../sqlite >sqlite3.h
   30: #
   31: 
   32: 
   33: # Get the source tree root directory from the command-line
   34: #
   35: set TOP [lindex $argv 0]
   36: 
   37: # Get the SQLite version number (ex: 3.6.18) from the $TOP/VERSION file.
   38: #
   39: set in [open $TOP/VERSION]
   40: set zVersion [string trim [read $in]]
   41: close $in
   42: set nVersion [eval format "%d%03d%03d" [split $zVersion .]]
   43: 
   44: # Get the fossil-scm version number from $TOP/manifest.uuid.
   45: #
   46: set in [open $TOP/manifest.uuid]
   47: set zUuid [string trim [read $in]]
   48: close $in
   49: 
   50: # Get the fossil-scm check-in date from the "D" card of $TOP/manifest.
   51: #
   52: set in [open $TOP/manifest]
   53: set zDate {}
   54: while {![eof $in]} {
   55:   set line [gets $in]
   56:   if {[regexp {^D (2[-0-9T:]+)} $line all date]} {
   57:     set zDate [string map {T { }} $date]
   58:     break
   59:   }
   60: }
   61: close $in
   62: 
   63: # Set up patterns for recognizing API declarations.
   64: #
   65: set varpattern {^[a-zA-Z][a-zA-Z_0-9 *]+sqlite3_[_a-zA-Z0-9]+(\[|;| =)}
   66: set declpattern {^ *[a-zA-Z][a-zA-Z_0-9 ]+ \**sqlite3_[_a-zA-Z0-9]+\(}
   67: 
   68: # Force the output to use unix line endings, even on Windows.
   69: fconfigure stdout -translation lf
   70: 
   71: # Process the src/sqlite.h.in ext/rtree/sqlite3rtree.h files.
   72: #
   73: foreach file [list $TOP/src/sqlite.h.in $TOP/ext/rtree/sqlite3rtree.h] {
   74:   set in [open $file]
   75:   while {![eof $in]} {
   76:   
   77:     set line [gets $in]
   78: 
   79:     # File sqlite3rtree.h contains a line "#include <sqlite3.h>". Omit this
   80:     # line when copying sqlite3rtree.h into sqlite3.h.
   81:     #
   82:     if {[string match {*#include*<sqlite3.h>*} $line]} continue
   83:   
   84:     regsub -- --VERS--           $line $zVersion line
   85:     regsub -- --VERSION-NUMBER-- $line $nVersion line
   86:     regsub -- --SOURCE-ID--      $line "$zDate $zUuid" line
   87:   
   88:     if {[regexp {define SQLITE_EXTERN extern} $line]} {
   89:       puts $line
   90:       puts [gets $in]
   91:       puts ""
   92:       puts "#ifndef SQLITE_API"
   93:       puts "# define SQLITE_API"
   94:       puts "#endif"
   95:       set line ""
   96:     }
   97:   
   98:     if {([regexp $varpattern $line] && ![regexp {^ *typedef} $line])
   99:      || ([regexp $declpattern $line])
  100:     } {
  101:       set line "SQLITE_API $line"
  102:     }
  103:     puts $line
  104:   }
  105:   close $in
  106: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>