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.
8 # Splitting files up this way allows them to be used with older compilers
9 # that cannot handle really long source files.
11 set MAX 32768 ;# Maximum number of lines per file.
13 set BEGIN {^/\*+ Begin file ([a-zA-Z0-9_.]+) \*+/}
14 set END {^/\*+ End of %s \*+/}
16 set in [open sqlite3.c]
17 set out1 [open sqlite3-all.c w]
19 # Copy the header from sqlite3.c into sqlite3-all.c
21 while {[gets $in line]} {
22 if {[regexp $BEGIN $line]} break
26 # Gather the complete content of a file into memory. Store the
27 # content in $bufout. Store the number of lines is $nout
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
36 while {[gets $in line]>=0} {
39 if {[regexp $end $line]} break
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
47 proc write_one_file {content} {
50 set out [open sqlite3-$filecnt.c w]
51 puts -nonewline $out $content
53 puts $::out1 "#include \"sqlite3-$filecnt.c\""
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
62 while {[regexp $BEGIN $line]} {
65 gather_one_file $line buf n
73 while {[gets $in line]>=0} {
74 if {[regexp $BEGIN $line]} break