# Runs both fuzztest and testrunner, consecutively.
#
-devtest: testfixture$(TEXE) fuzztest testrunner
+devtest: srctree-check testfixture$(TEXE) fuzztest testrunner
-mdevtest: has_tclsh85
+mdevtest: srctree-check has_tclsh85
$(TCLSH_CMD) $(TOP)/test/testrunner.tcl mdevtest
sdevtest: has_tclsh85
$(TCLSH_CMD) $(TOP)/test/testrunner.tcl sdevtest
+# Validate that various generated files in the source tree
+# are up-to-date.
+#
+srctree-check: $(TOP)/tool/srctree-check.tcl
+ $(TCLSH_CMD) $(TOP)/tool/srctree-check.tcl
+
# Testing for a release
#
-releasetest: testfixture$(TEXE)
+releasetest: srctree-check testfixture$(TEXE)
./testfixture$(TEXE) $(TOP)/test/testrunner.tcl release
# Minimal testing that runs in less than 3 minutes
# This is the common case. Run many tests that do not take too long,
# including fuzzcheck, sqlite3_analyzer, and sqldiff tests.
#
-test: fuzztest sourcetest $(TESTPROGS) tcltest
+test: srctree-check fuzztest sourcetest $(TESTPROGS) tcltest
# Run a test using valgrind. This can take a really long time
# because valgrind is so much slower than a native machine.
-C Fix\sa\scompiler\swarning\scaused\sby\sthe\sprevious\scheck-in.
-D 2023-10-09T14:47:25.814
+C Add\sa\sTCL\sscript\sthat\sdoes\svarious\sverification\schecks\son\sthe\ssource\stree\nto\smake\ssure\sthat\sgenerated\scode\shas\sbeen\supdated\scorrectly.
+D 2023-10-09T14:56:15.716
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
-F Makefile.in bbf02cb8a9fb22d1cb78da7e5fb5e7e85a5b18cf5cb9e14c1b624db07029916d
+F Makefile.in 2ea4105b72561483befe0a18a37f94ca3adbc2324bad3770f99555d95fb9b0ea
F Makefile.linux-gcc f3842a0b1efbfbb74ac0ef60e56b301836d05b4d867d014f714fa750048f1ab6
F Makefile.msc e5c93ed28696ab0065e72ce352c7ec766c8b9e91f93fd1bb15000c6e35dfe58c
F README.md 963d30019abf0cc06b263cd2824bce022893f3f93a531758f6f04ff2194a16a8
F tool/sqltclsh.tcl 862f4cf1418df5e1315b5db3b5ebe88969e2a784525af5fbf9596592f14ed848
F tool/src-verify.c 41c586dee84d0b190ad13e0282ed83d4a65ec9fefde9adf4943efdf6558eea7f
F tool/srcck1.c 371de5363b70154012955544f86fdee8f6e5326f
+F tool/srctree-check.tcl cef630bc4ff21a460d72479c43a42bf1c1ed61897659305c35c8d72e91bcb176
F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43
F tool/stripccomments.c 20b8aabc4694d0d4af5566e42da1f1a03aff057689370326e9269a9ddcffdc37
F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P f57e8275cf1ab3ad8027044cda0893282d1c403a5aa9fabbb1c7de280597b5cd
-R 7d888a965eb459cec17310ccf81e043c
+P 7e8768bf8b4002b1c287f2bc95262548e2ae81b437936154f2bb1ea1f739a904
+R 12c539e104384e89d6175d6c2ff0dac1
U drh
-Z 6f1f41a6145e7a01f70d3d3a152db721
+Z ea1222de532c1395014340ac1b27f9c9
# Remove this line to create a well-formed Fossil manifest.
-7e8768bf8b4002b1c287f2bc95262548e2ae81b437936154f2bb1ea1f739a904
\ No newline at end of file
+1f1a358af77f4386f98010eeae8487e6d39548a6dfe58c2664552490e7661122
\ No newline at end of file
--- /dev/null
+#!/usr/bin/tclsh
+#
+# Run this script from the top of the source tree in order to confirm that
+# various aspects of the source tree are up-to-date. Items checked include:
+#
+# * Makefile.msc and autoconf/Makefile.msc agree
+# * src/ctime.tcl is consistent with tool/mkctimec.tcl
+# * VERSION agrees with autoconf/tea/configure.ac
+# * src/pragma.h agrees with tool/mkpragmatab.tcl
+#
+# Other tests might be added later.
+#
+# Error messages are printed and the process exists non-zero if problems
+# are found. If everything is ok, no output is generated and the process
+# exits with 0.
+#
+
+# Read an entire file.
+#
+proc readfile {filename} {
+ set fd [open $filename rb]
+ set txt [read $fd]
+ close $fd
+ return $txt
+}
+
+# Find the root of the tree.
+#
+set ROOT [file dir [file dir [file normalize $argv0]]]
+cd $ROOT
+
+# Name of the TCL interpreter
+#
+set TCLSH [info nameofexe]
+
+######################### autoconf/tea/configure.ac ###########################
+
+set confac [readfile $ROOT/autoconf/tea/configure.ac]
+set vers [readfile $ROOT/VERSION]
+set pattern {AC_INIT([sqlite],[}
+append pattern [string trim $vers]
+append pattern {])}
+if {[string first $pattern $confac]<=0} {
+ puts "ERROR: ./autoconf/tea/configure.ac does not agree with ./VERSION"
+ exit 1
+}
+
+######################### autoconf/Makefile.msc ###############################
+
+set f1 [readfile $ROOT/autoconf/Makefile.msc]
+exec mv $ROOT/autoconf/Makefile.msc $ROOT/autoconf/Makefile.msc.tmp
+exec $TCLSH $ROOT/tool/mkmsvcmin.tcl
+set f2 [readfile $ROOT/autoconf/Makefile.msc]
+exec mv $ROOT/autoconf/Makefile.msc.tmp $ROOT/autoconf/Makefile.msc
+if {$f1 != $f2} {
+ puts "ERROR: ./autoconf/Makefile.msc does not agree with ./Makefile.msc"
+}
+
+######################### src/pragma.h ########################################
+
+set f1 [readfile $ROOT/src/pragma.h]
+exec mv $ROOT/src/pragma.h $ROOT/src/pragma.h.tmp
+exec $TCLSH $ROOT/tool/mkpragmatab.tcl
+set f2 [readfile $ROOT/src/pragma.h]
+exec mv $ROOT/src/pragma.h.tmp $ROOT/src/pragma.h
+if {$f1 != $f2} {
+ puts "ERROR: ./src/pragma.h does not agree with ./tool/mkpragmatab.tcl"
+}
+
+######################### src/ctime.c ########################################
+
+set f1 [readfile $ROOT/src/ctime.c]
+exec mv $ROOT/src/ctime.c $ROOT/src/ctime.c.tmp
+exec $TCLSH $ROOT/tool/mkctimec.tcl
+set f2 [readfile $ROOT/src/ctime.c]
+exec mv $ROOT/src/ctime.c.tmp $ROOT/src/ctime.c
+if {$f1 != $f2} {
+ puts "ERROR: ./src/ctime.c does not agree with ./tool/mkctimec.tcl"
+}