Index: third_party/sqlite/src/tool/mkmsvcmin.tcl |
diff --git a/third_party/sqlite/src/tool/mkmsvcmin.tcl b/third_party/sqlite/src/tool/mkmsvcmin.tcl |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bdd02be1fb0c450b7de1e8e6000257f93ee4adde |
--- /dev/null |
+++ b/third_party/sqlite/src/tool/mkmsvcmin.tcl |
@@ -0,0 +1,112 @@ |
+#!/usr/bin/tcl |
+# |
+# This script reads the regular MSVC makefile (../Makefile.msc) and outputs |
+# a revised version of that Makefile that is "minimal" in the sense that |
+# it uses the sqlite3.c amalgamation as input and does not require tclsh. |
+# The resulting "../Makefile.min.msc" is suitable for use in the amalgamation |
+# tarballs. |
+# |
+if {$argc==0} { |
+ set basedir [file dir [file dir [file normalize $argv0]]] |
+ set fromFileName [file join $basedir Makefile.msc] |
+ set toFileName [file join $basedir autoconf Makefile.msc] |
+} else { |
+ set fromFileName [lindex $argv 0] |
+ if {![file exists $fromFileName]} { |
+ error "input file \"$fromFileName\" does not exist" |
+ } |
+ set toFileName [lindex $argv 1] |
+ if {[file exists $toFileName]} { |
+ error "output file \"$toFileName\" already exists" |
+ } |
+} |
+ |
+proc readFile { fileName } { |
+ set file_id [open $fileName RDONLY] |
+ fconfigure $file_id -encoding binary -translation binary |
+ set result [read $file_id] |
+ close $file_id |
+ return $result |
+} |
+ |
+proc writeFile { fileName data } { |
+ set file_id [open $fileName {WRONLY CREAT TRUNC}] |
+ fconfigure $file_id -encoding binary -translation binary |
+ puts -nonewline $file_id $data |
+ close $file_id |
+ return "" |
+} |
+ |
+proc escapeSubSpec { data } { |
+ regsub -all -- {&} $data {\\\&} data |
+ regsub -all -- {\\(\d+)} $data {\\\\\1} data |
+ return $data |
+} |
+ |
+proc substVars { data } { |
+ return [uplevel 1 [list subst -nocommands -nobackslashes $data]] |
+} |
+ |
+# |
+# NOTE: This block is used to replace the section marked <<block1>> in |
+# the Makefile, if it exists. |
+# |
+set blocks(1) [string trimleft [string map [list \\\\ \\] { |
+_HASHCHAR=^# |
+!IF ![echo !IFNDEF VERSION > rcver.vc] && \\ |
+ ![for /F "delims=" %V in ('type "$(SQLITE3H)" ^| find "$(_HASHCHAR)define SQLITE_VERSION "') do (echo VERSION = ^^%V >> rcver.vc)] && \\ |
+ ![echo !ENDIF >> rcver.vc] |
+!INCLUDE rcver.vc |
+!ENDIF |
+ |
+RESOURCE_VERSION = $(VERSION:^#=) |
+RESOURCE_VERSION = $(RESOURCE_VERSION:define=) |
+RESOURCE_VERSION = $(RESOURCE_VERSION:SQLITE_VERSION=) |
+RESOURCE_VERSION = $(RESOURCE_VERSION:"=) |
+RESOURCE_VERSION = $(RESOURCE_VERSION:.=,) |
+ |
+$(LIBRESOBJS): $(TOP)\sqlite3.rc rcver.vc $(SQLITE3H) |
+ echo #ifndef SQLITE_RESOURCE_VERSION > sqlite3rc.h |
+ echo #define SQLITE_RESOURCE_VERSION $(RESOURCE_VERSION) >> sqlite3rc.h |
+ echo #endif >> sqlite3rc.h |
+ $(LTRCOMPILE) -fo $(LIBRESOBJS) -DRC_VERONLY $(TOP)\sqlite3.rc |
+}]] |
+ |
+# |
+# NOTE: This block is used to replace the section marked <<block2>> in |
+# the Makefile, if it exists. |
+# |
+set blocks(2) [string trimleft [string map [list \\\\ \\] { |
+Replace.exe: |
+ $(CSC) /target:exe $(TOP)\Replace.cs |
+ |
+sqlite3.def: Replace.exe $(LIBOBJ) |
+ echo EXPORTS > sqlite3.def |
+ dumpbin /all $(LIBOBJ) \\ |
+ | .\Replace.exe "^\s+/EXPORT:_?(sqlite3(?:session|changeset)?_[^@,]*)(?:@\d+|,DATA)?$$" $$1 true \\ |
+ | sort >> sqlite3.def |
+}]] |
+ |
+set data "#### DO NOT EDIT ####\n" |
+append data "# This makefile is automatically " |
+append data "generated from the [file tail $fromFileName] at\n" |
+append data "# the root of the canonical SQLite source tree (not the\n" |
+append data "# amalgamation tarball) using the tool/[file tail $argv0]\n" |
+append data "# script.\n#\n\n" |
+append data [readFile $fromFileName] |
+ |
+regsub -all -- {# <<mark>>\n.*?# <</mark>>\n} \ |
+ $data "" data |
+ |
+foreach i [lsort -integer [array names blocks]] { |
+ regsub -all -- [substVars \ |
+ {# <<block${i}>>\n.*?# <</block${i}>>\n}] \ |
+ $data [escapeSubSpec $blocks($i)] data |
+} |
+ |
+set data [string map [list " -I\$(TOP)\\src" ""] $data] |
+set data [string map [list " libsqlite3.lib" ""] $data] |
+set data [string map [list " \$(ALL_TCL_TARGETS)" ""] $data] |
+set data [string map [list "\$(TOP)\\src\\" "\$(TOP)\\"] $data] |
+ |
+writeFile $toFileName $data |