Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

83 lines (76 sloc) 2.016 kb
#!/usr/bin/tclsh
#
# This script splits the sqlite3.c amalgamated source code files into
# several smaller files such that no single files is more than a fixed
# number of lines in length (32k or 64k). Each of the split out files
# is #include-ed by the master file.
#
# Splitting files up this way allows them to be used with older compilers
# that cannot handle really long source files.
#
set MAX 32768 ;# Maximum number of lines per file.
set BEGIN {^/\*+ Begin file ([a-zA-Z0-9_.]+) \*+/}
set END {^/\*+ End of %s \*+/}
set in [open sqlite3.c]
set out1 [open sqlite3-all.c w]
# Copy the header from sqlite3.c into sqlite3-all.c
#
while {[gets $in line]} {
if {[regexp $BEGIN $line]} break
puts $out1 $line
}
# Gather the complete content of a file into memory. Store the
# content in $bufout. Store the number of lines is $nout
#
proc gather_one_file {firstline bufout nout} {
regexp $::BEGIN $firstline all filename
set end [format $::END $filename]
upvar $bufout buf $nout n
set buf $firstline\n
global in
set n 0
while {[gets $in line]>=0} {
incr n
append buf $line\n
if {[regexp $end $line]} break
}
}
# Write a big chunk of text in to an auxiliary file "sqlite3-NNN.c".
# Also add an appropriate #include to sqlite3-all.c
#
set filecnt 0
proc write_one_file {content} {
global filecnt
incr filecnt
set out [open sqlite3-$filecnt.c w]
puts -nonewline $out $content
close $out
puts $::out1 "#include \"sqlite3-$filecnt.c\""
}
# Continue reading input. Store chunks in separate files and add
# the #includes to the main sqlite3-all.c file as necessary to reference
# the extra chunks.
#
set all {}
set N 0
while {[regexp $BEGIN $line]} {
set buf {}
set n 0
gather_one_file $line buf n
if {$n+$N>=$MAX} {
write_one_file $all
set all {}
set N 0
}
append all $buf
incr N $n
while {[gets $in line]>=0} {
if {[regexp $BEGIN $line]} break
puts $out1 $line
}
}
if {$N>0} {
write_one_file $all
}
close $out1
close $in
Jump to Line
Something went wrong with that request. Please try again.