mirror of
https://github.com/sqlite/sqlite.git
synced 2025-12-21 13:38:01 +03:00
This is now used whereever tclsqlite.c was used. Hence QRF is now in the testfixture and in the tclextension. The sqlite3 method is "format". That method is currently just a non-functional stub. FossilOrigin-Name: e08d21fe1365176f268f1dcca4048fb5ff043356e5817c8622b4ed9a1a5a58cf
107 lines
2.6 KiB
Tcl
107 lines
2.6 KiB
Tcl
#!/usr/bin/tclsh
|
|
#
|
|
# Use this script to combine multiple source code files into a single
|
|
# file. Example:
|
|
#
|
|
# tclsh mkcombo.tcl file1.c file2.c file3.c -o file123.c
|
|
#
|
|
|
|
set help {Usage: tclsh mkcombo.tcl [OPTIONS] [FILELIST]
|
|
where OPTIONS is zero or more of the following with these effects:
|
|
--linemacros=? => Emit #line directives into output or not. (? = 1 or 0)
|
|
--o FILE => write to alternative output file named FILE
|
|
--help => See this.
|
|
}
|
|
|
|
set linemacros 0
|
|
set fname {}
|
|
set src [list]
|
|
|
|
|
|
for {set i 0} {$i<[llength $argv]} {incr i} {
|
|
set x [lindex $argv $i]
|
|
if {[regexp {^-?-linemacros(?:=([01]))?$} $x ma ulm]} {
|
|
if {$ulm == ""} {set ulm 1}
|
|
set linemacros $ulm
|
|
} elseif {[regexp {^-o$} $x]} {
|
|
incr i
|
|
if {$i==[llength $argv]} {
|
|
error "No argument following $x"
|
|
}
|
|
set fname [lindex $argv $i]
|
|
} elseif {[regexp {^-?-((help)|\?)$} $x]} {
|
|
puts $help
|
|
exit 0
|
|
} elseif {[regexp {^-?-} $x]} {
|
|
error "unknown command-line option: $x"
|
|
} else {
|
|
lappend src $x
|
|
}
|
|
}
|
|
|
|
# Open the output file and write a header comment at the beginning
|
|
# of the file.
|
|
#
|
|
if {![info exists fname]} {
|
|
set fname sqlite3.c
|
|
if {$enable_recover} { set fname sqlite3r.c }
|
|
}
|
|
set out [open $fname wb]
|
|
|
|
# Return a string consisting of N "*" characters.
|
|
#
|
|
proc star N {
|
|
set r {}
|
|
for {set i 0} {$i<$N} {incr i} {append r *}
|
|
return $r
|
|
}
|
|
|
|
# Force the output to use unix line endings, even on Windows.
|
|
fconfigure $out -translation binary
|
|
puts $out "/[star 78]"
|
|
puts $out {** The following is an amalgamation of these source code files:}
|
|
puts $out {**}
|
|
foreach s $src {
|
|
regsub {^.*/(src|ext)/} $s {\1/} s2
|
|
puts $out "** $s2"
|
|
}
|
|
puts $out {**}
|
|
puts $out "[star 78]/"
|
|
|
|
# Insert a comment into the code
|
|
#
|
|
proc section_comment {text} {
|
|
global out s78
|
|
set n [string length $text]
|
|
set nstar [expr {60 - $n}]
|
|
puts $out "/************** $text [star $nstar]/"
|
|
}
|
|
|
|
# Read the source file named $filename and write it into the
|
|
# sqlite3.c output file. The only transformation is the trimming
|
|
# of EOL whitespace.
|
|
#
|
|
proc copy_file_verbatim {filename} {
|
|
global out
|
|
set in [open $filename rb]
|
|
set tail [file tail $filename]
|
|
section_comment "Begin file $tail"
|
|
while {![eof $in]} {
|
|
set line [string trimright [gets $in]]
|
|
puts $out $line
|
|
}
|
|
section_comment "End of $tail"
|
|
}
|
|
set taillist ""
|
|
foreach file $src {
|
|
copy_file_verbatim $file
|
|
append taillist ", [file tail $file]"
|
|
}
|
|
|
|
set taillist "End of the amalgamation of [string range $taillist 2 end]"
|
|
set n [string length $taillist]
|
|
set ns [expr {(75-$n)/2}]
|
|
if {$ns<3} {set ns 3}
|
|
puts $out "/[star $ns] $taillist [star $ns]/"
|
|
close $out
|