Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / third_party / sqlite / src / tool / split-sqlite3c.tcl
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