Annotation of embedaddon/sqlite3/tool/split-sqlite3c.tcl, revision 1.1.1.1

1.1       misho       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>