mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-11-03 16:53:36 +03:00 
			
		
		
		
	extensions on subordinate source files, even when the number of subordinates exceeds 9. This is not yet needed, but might be soon. FossilOrigin-Name: 4150e416263f24efcbfe68d5b1e15ec7e79df41dff0b6dfdc59f06ee9e205049
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
#!/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]
 | 
						|
fconfigure $out1 -translation lf
 | 
						|
 | 
						|
# 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 label $filecnt
 | 
						|
  if {$filecnt>9} {
 | 
						|
    set label [string index ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop \
 | 
						|
                [expr {$filecnt-10}]]
 | 
						|
  } else {
 | 
						|
    set label $filecnt
 | 
						|
  }
 | 
						|
  set out [open sqlite3-$label.c w]
 | 
						|
  fconfigure $out -translation lf
 | 
						|
  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
 | 
						|
    if {$N>0} {
 | 
						|
      write_one_file $all
 | 
						|
      set N 0
 | 
						|
      set all {}
 | 
						|
    }
 | 
						|
    puts $out1 $line
 | 
						|
  }
 | 
						|
}
 | 
						|
if {$N>0} {
 | 
						|
  write_one_file $all
 | 
						|
}
 | 
						|
close $out1
 | 
						|
close $in
 |