File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / tool / split-sqlite3c.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 splits the sqlite3.c amalgamated source code files into
    4: # several smaller files such that no single files is more than a fixed
    5: # number of lines in length (32k or 64k).  Each of the split out files
    6: # is #include-ed by the master file.
    7: #
    8: # Splitting files up this way allows them to be used with older compilers
    9: # that cannot handle really long source files.
   10: #
   11: set MAX 32768    ;# Maximum number of lines per file.
   12: 
   13: set BEGIN {^/\*+ Begin file ([a-zA-Z0-9_.]+) \*+/}
   14: set END   {^/\*+ End of %s \*+/}
   15: 
   16: set in [open sqlite3.c]
   17: set out1 [open sqlite3-all.c w]
   18: 
   19: # Copy the header from sqlite3.c into sqlite3-all.c
   20: #
   21: while {[gets $in line]} {
   22:   if {[regexp $BEGIN $line]} break
   23:   puts $out1 $line
   24: }
   25: 
   26: # Gather the complete content of a file into memory.  Store the
   27: # content in $bufout.  Store the number of lines is $nout
   28: #
   29: proc gather_one_file {firstline bufout nout} {
   30:   regexp $::BEGIN $firstline all filename
   31:   set end [format $::END $filename]
   32:   upvar $bufout buf $nout n
   33:   set buf $firstline\n
   34:   global in
   35:   set n 0
   36:   while {[gets $in line]>=0} {
   37:     incr n
   38:     append buf $line\n
   39:     if {[regexp $end $line]} break
   40:   }
   41: }
   42: 
   43: # Write a big chunk of text in to an auxiliary file "sqlite3-NNN.c".
   44: # Also add an appropriate #include to sqlite3-all.c
   45: #
   46: set filecnt 0
   47: proc write_one_file {content} {
   48:   global filecnt
   49:   incr filecnt
   50:   set out [open sqlite3-$filecnt.c w]
   51:   puts -nonewline $out $content
   52:   close $out
   53:   puts $::out1 "#include \"sqlite3-$filecnt.c\""
   54: }
   55: 
   56: # Continue reading input.  Store chunks in separate files and add
   57: # the #includes to the main sqlite3-all.c file as necessary to reference
   58: # the extra chunks.
   59: #
   60: set all {}
   61: set N 0
   62: while {[regexp $BEGIN $line]} {
   63:   set buf {}
   64:   set n 0
   65:   gather_one_file $line buf n
   66:   if {$n+$N>=$MAX} {
   67:     write_one_file $all
   68:     set all {}
   69:     set N 0
   70:   }
   71:   append all $buf
   72:   incr N $n
   73:   while {[gets $in line]>=0} {
   74:     if {[regexp $BEGIN $line]} break
   75:     puts $out1 $line
   76:   }
   77: }
   78: if {$N>0} {
   79:   write_one_file $all
   80: }
   81: close $out1
   82: close $in

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