Annotation of embedaddon/sqlite3/tool/split-sqlite3c.tcl, revision 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>