| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | // Copyright 2017 The Sqlite Authors. All rights reserved. | 
					
						
							|  |  |  | // Use of this source code is governed by a BSD-style | 
					
						
							|  |  |  | // license that can be found in the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-08 21:12:23 +01:00
										 |  |  | //go:build generator | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | // +build generator | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package main | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"archive/zip" | 
					
						
							|  |  |  | 	"bufio" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"io" | 
					
						
							|  |  |  | 	"io/ioutil" | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | 	"os" | 
					
						
							|  |  |  | 	"os/exec" | 
					
						
							|  |  |  | 	"path/filepath" | 
					
						
							|  |  |  | 	"runtime" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"modernc.org/ccgo/v3/lib" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //	gcc | 
					
						
							|  |  |  | //	-g | 
					
						
							|  |  |  | //	-O2 | 
					
						
							|  |  |  | //	-DSQLITE_OS_UNIX=1 | 
					
						
							|  |  |  | //	-I. | 
					
						
							|  |  |  | //	-I/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src | 
					
						
							|  |  |  | //	-I/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/rtree | 
					
						
							|  |  |  | //	-I/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/icu | 
					
						
							|  |  |  | //	-I/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/fts3 | 
					
						
							|  |  |  | //	-I/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/async | 
					
						
							|  |  |  | //	-I/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/session | 
					
						
							|  |  |  | //	-I/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/userauth | 
					
						
							|  |  |  | //	-D_HAVE_SQLITE_CONFIG_H | 
					
						
							|  |  |  | //	-DBUILD_sqlite | 
					
						
							|  |  |  | //	-DNDEBUG | 
					
						
							|  |  |  | //	-I/usr/include/tcl8.6 | 
					
						
							|  |  |  | //	-DSQLITE_THREADSAFE=1 | 
					
						
							|  |  |  | //	-DSQLITE_HAVE_ZLIB=1 | 
					
						
							|  |  |  | //	-DSQLITE_NO_SYNC=1 | 
					
						
							|  |  |  | //	-DSQLITE_TEMP_STORE=1 | 
					
						
							|  |  |  | //	-DSQLITE_TEST=1 | 
					
						
							|  |  |  | //	-DSQLITE_CRASH_TEST=1 | 
					
						
							|  |  |  | //	-DTCLSH_INIT_PROC=sqlite3TestInit | 
					
						
							|  |  |  | //	-DSQLITE_SERVER=1 | 
					
						
							|  |  |  | //	-DSQLITE_PRIVATE= | 
					
						
							|  |  |  | //	-DSQLITE_CORE | 
					
						
							|  |  |  | //	-DBUILD_sqlite | 
					
						
							|  |  |  | //	-DSQLITE_SERIES_CONSTRAINT_VERIFY=1 | 
					
						
							|  |  |  | //	-DSQLITE_DEFAULT_PAGE_SIZE=1024 | 
					
						
							|  |  |  | //	-DSQLITE_ENABLE_STMTVTAB | 
					
						
							|  |  |  | //	-DSQLITE_ENABLE_DBPAGE_VTAB | 
					
						
							|  |  |  | //	-DSQLITE_ENABLE_BYTECODE_VTAB | 
					
						
							|  |  |  | //	-DSQLITE_ENABLE_DESERIALIZE | 
					
						
							|  |  |  | //	-o testfixture | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test1.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test2.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test3.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test4.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test5.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test6.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test7.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test8.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test9.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_autoext.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_async.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_backup.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_bestindex.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_blob.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_btree.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_config.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_delete.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_demovfs.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_devsym.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_fs.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_func.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_hexio.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_init.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_intarray.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_journal.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_malloc.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_md5.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_multiplex.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_mutex.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_onefile.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_osinst.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_pcache.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_quota.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_rtree.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_schema.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_server.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_superlock.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_syscall.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_tclsh.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_tclvar.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_thread.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_vdbecov.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_vfs.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_windirent.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_window.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/test_wsd.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/fts3/fts3_term.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/fts3/fts3_test.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/session/test_session.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/rbu/test_rbu.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/expert/sqlite3expert.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/expert/test_expert.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/amatch.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/carray.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/closure.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/csv.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/decimal.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/eval.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/explain.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/fileio.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/fuzzer.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/fts5/fts5_tcl.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/fts5/fts5_test_mi.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/fts5/fts5_test_tok.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/ieee754.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/mmapwarm.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/nextchar.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/normalize.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/percentile.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/prefixes.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/regexp.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/remember.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/series.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/spellfix.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/totype.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/unionvtab.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/wholenumber.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/misc/zipfile.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/ext/userauth/userauth.c | 
					
						
							|  |  |  | //	/home/jnml/src/modernc.org/sqlite/testdata/SQLite-3c5e63c2/src/tclsqlite.c | 
					
						
							|  |  |  | //	sqlite3.c | 
					
						
							|  |  |  | //	-L/usr/lib/x86_64-linux-gnu | 
					
						
							|  |  |  | //	-ltcl8.6 | 
					
						
							|  |  |  | //	-ldl | 
					
						
							|  |  |  | //	-lz | 
					
						
							|  |  |  | //	-lpthread | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							|  |  |  | 	volatiles = "-volatile=sqlite3_io_error_pending,sqlite3_open_file_count,sqlite3_pager_readdb_count,sqlite3_pager_writedb_count,sqlite3_pager_writej_count,sqlite3_search_count,sqlite3_sort_count,saved_cnt" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ( | 
					
						
							|  |  |  | 	configProduction = []string{ | 
					
						
							|  |  |  | 		"-DHAVE_USLEEP", | 
					
						
							|  |  |  | 		"-DLONGDOUBLE_TYPE=double", | 
					
						
							|  |  |  | 		"-DSQLITE_CORE", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_COLUMN_METADATA", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_FTS5", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_GEOPOLY", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_JSON1", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_MEMORY_MANAGEMENT", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_OFFSET_SQL_FUNC", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_PREUPDATE_HOOK", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_RBU", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_RTREE", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_SESSION", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_SNAPSHOT", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_STAT4", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_UNLOCK_NOTIFY", // Adds sqlite3_unlock_notify(). | 
					
						
							|  |  |  | 		"-DSQLITE_LIKE_DOESNT_MATCH_BLOBS", | 
					
						
							|  |  |  | 		"-DSQLITE_MUTEX_APPDEF=1", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 		"-DSQLITE_MUTEX_NOOP", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 		"-DSQLITE_SOUNDEX", | 
					
						
							|  |  |  | 		"-DSQLITE_THREADSAFE=1", | 
					
						
							|  |  |  | 		//DONT "-DNDEBUG", // To enable GO_GENERATE=-DSQLITE_DEBUG | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_DQS=0", // testfixture | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_NO_SYNC=1", | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_DECLTYPE", // testfixture | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_DEPRECATED", // mptest | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_LOAD_EXTENSION", // mptest | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_SHARED_CACHE", | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_USE_ALLOCA", | 
					
						
							|  |  |  | 		//TODO "-DHAVE_MALLOC_USABLE_SIZE" | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1", //TODO report bug | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS3", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS3_PARENTHESIS", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS3_TOKENIZER", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS4", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_ICU", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_MAX_EXPR_DEPTH=0", // bug reported https://sqlite.org/forum/forumpost/87b9262f66, fixed in https://sqlite.org/src/info/5f58dd3a19605b6f | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_MAX_MMAP_SIZE=8589934592", // testfixture, bug reported https://sqlite.org/forum/forumpost/34380589f7, fixed in https://sqlite.org/src/info/d8e47382160e98be | 
					
						
							|  |  |  | 		//TODO- "-DSQLITE_DEBUG", | 
					
						
							|  |  |  | 		//TODO- "-DSQLITE_ENABLE_API_ARMOR", | 
					
						
							|  |  |  | 		//TODO- "-DSQLITE_MEMDEBUG", | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	configTest = []string{ | 
					
						
							|  |  |  | 		"-DHAVE_USLEEP", | 
					
						
							|  |  |  | 		"-DLONGDOUBLE_TYPE=double", | 
					
						
							|  |  |  | 		"-DSQLITE_CKSUMVFS_STATIC", | 
					
						
							|  |  |  | 		"-DSQLITE_CORE",                   // testfixture | 
					
						
							|  |  |  | 		"-DSQLITE_DEFAULT_MEMSTATUS=0",    // bug reported https://sqlite.org/forum/info/d8dfd4771689be35, fixed in https://sqlite.org/src/info/3c5e63c22ffbfeb6 | 
					
						
							|  |  |  | 		"-DSQLITE_DEFAULT_PAGE_SIZE=1024", // testfixture, hardcoded. See file_pages in autovacuum.test. | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_BYTECODE_VTAB",   // testfixture | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_COLUMN_METADATA", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_DBPAGE_VTAB", // testfixture | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_DBSTAT_VTAB", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_DESERIALIZE", // testfixture | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_EXPLAIN_COMMENTS", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_FTS5", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_GEOPOLY", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_JSON1", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_MEMORY_MANAGEMENT", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_OFFSET_SQL_FUNC", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_PREUPDATE_HOOK", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_RBU", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_RTREE", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_SESSION", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_SNAPSHOT", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_STAT4", | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_STMTVTAB",      // testfixture | 
					
						
							|  |  |  | 		"-DSQLITE_ENABLE_UNLOCK_NOTIFY", // Adds sqlite3_unlock_notify(). | 
					
						
							|  |  |  | 		"-DSQLITE_HAVE_ZLIB=1",          // testfixture | 
					
						
							|  |  |  | 		"-DSQLITE_LIKE_DOESNT_MATCH_BLOBS", | 
					
						
							|  |  |  | 		"-DSQLITE_MUTEX_APPDEF=1", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 		"-DSQLITE_MUTEX_NOOP", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 		"-DSQLITE_SOUNDEX", | 
					
						
							|  |  |  | 		"-DSQLITE_TEMP_STORE=1", // testfixture | 
					
						
							|  |  |  | 		"-DSQLITE_TEST", | 
					
						
							|  |  |  | 		"-DSQLITE_THREADSAFE=1", | 
					
						
							|  |  |  | 		//DONT "-DNDEBUG", // To enable GO_GENERATE=-DSQLITE_DEBUG | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_DQS=0", // testfixture | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_NO_SYNC=1", | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_DECLTYPE", // testfixture | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_DEPRECATED", // mptest | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_LOAD_EXTENSION", // mptest | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_OMIT_SHARED_CACHE", | 
					
						
							|  |  |  | 		//DONT "-DSQLITE_USE_ALLOCA", | 
					
						
							|  |  |  | 		//TODO "-DHAVE_MALLOC_USABLE_SIZE" | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1", //TODO report bug | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS3", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS3_PARENTHESIS", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS3_TOKENIZER", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_FTS4", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_ENABLE_ICU", | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_MAX_EXPR_DEPTH=0", // bug reported https://sqlite.org/forum/forumpost/87b9262f66, fixed in https://sqlite.org/src/info/5f58dd3a19605b6f | 
					
						
							|  |  |  | 		//TODO "-DSQLITE_MAX_MMAP_SIZE=8589934592", // testfixture, bug reported https://sqlite.org/forum/forumpost/34380589f7, fixed in https://sqlite.org/src/info/d8e47382160e98be | 
					
						
							|  |  |  | 		//TODO- "-DSQLITE_DEBUG", | 
					
						
							|  |  |  | 		//TODO- "-DSQLITE_ENABLE_API_ARMOR", | 
					
						
							|  |  |  | 		//TODO- "-DSQLITE_MEMDEBUG", | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	downloads = []struct { | 
					
						
							|  |  |  | 		dir, url string | 
					
						
							|  |  |  | 		sz       int | 
					
						
							|  |  |  | 		dev      bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 		{sqliteDir, "https://www.sqlite.org/2021/sqlite-amalgamation-3370000.zip", 2457, false}, | 
					
						
							|  |  |  | 		{sqliteSrcDir, "https://www.sqlite.org/2021/sqlite-src-3370000.zip", 12814, false}, | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 	sqliteDir    = filepath.FromSlash("testdata/sqlite-amalgamation-3370000") | 
					
						
							|  |  |  | 	sqliteSrcDir = filepath.FromSlash("testdata/sqlite-src-3370000") | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func download() { | 
					
						
							|  |  |  | 	tmp, err := ioutil.TempDir("", "") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		fmt.Fprintf(os.Stderr, "%s\n", err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	defer os.RemoveAll(tmp) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, v := range downloads { | 
					
						
							|  |  |  | 		dir := filepath.FromSlash(v.dir) | 
					
						
							|  |  |  | 		root := filepath.Dir(v.dir) | 
					
						
							|  |  |  | 		fi, err := os.Stat(dir) | 
					
						
							|  |  |  | 		switch { | 
					
						
							|  |  |  | 		case err == nil: | 
					
						
							|  |  |  | 			if !fi.IsDir() { | 
					
						
							|  |  |  | 				fmt.Fprintf(os.Stderr, "expected %s to be a directory\n", dir) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		default: | 
					
						
							|  |  |  | 			if !os.IsNotExist(err) { | 
					
						
							|  |  |  | 				fmt.Fprintf(os.Stderr, "%s", err) | 
					
						
							|  |  |  | 				continue | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if err := func() error { | 
					
						
							|  |  |  | 			fmt.Printf("Downloading %v MB from %s\n", float64(v.sz)/1000, v.url) | 
					
						
							|  |  |  | 			resp, err := http.Get(v.url) | 
					
						
							|  |  |  | 			if err != nil { | 
					
						
							|  |  |  | 				return err | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			defer resp.Body.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			base := filepath.Base(v.url) | 
					
						
							|  |  |  | 			name := filepath.Join(tmp, base) | 
					
						
							|  |  |  | 			f, err := os.Create(name) | 
					
						
							|  |  |  | 			if err != nil { | 
					
						
							|  |  |  | 				return err | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			defer os.Remove(name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			n, err := io.Copy(f, resp.Body) | 
					
						
							|  |  |  | 			if err != nil { | 
					
						
							|  |  |  | 				return err | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if _, err := f.Seek(0, io.SeekStart); err != nil { | 
					
						
							|  |  |  | 				return err | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			switch { | 
					
						
							|  |  |  | 			case strings.HasSuffix(base, ".zip"): | 
					
						
							|  |  |  | 				r, err := zip.NewReader(f, n) | 
					
						
							|  |  |  | 				if err != nil { | 
					
						
							|  |  |  | 					return err | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				for _, f := range r.File { | 
					
						
							|  |  |  | 					fi := f.FileInfo() | 
					
						
							|  |  |  | 					if fi.IsDir() { | 
					
						
							|  |  |  | 						if err := os.MkdirAll(filepath.Join(root, f.Name), 0770); err != nil { | 
					
						
							|  |  |  | 							return err | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						continue | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					if err := func() error { | 
					
						
							|  |  |  | 						rc, err := f.Open() | 
					
						
							|  |  |  | 						if err != nil { | 
					
						
							|  |  |  | 							return err | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						defer rc.Close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						file, err := os.OpenFile(filepath.Join(root, f.Name), os.O_CREATE|os.O_WRONLY, fi.Mode()) | 
					
						
							|  |  |  | 						if err != nil { | 
					
						
							|  |  |  | 							return err | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						w := bufio.NewWriter(file) | 
					
						
							|  |  |  | 						if _, err = io.Copy(w, rc); err != nil { | 
					
						
							|  |  |  | 							return err | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						if err := w.Flush(); err != nil { | 
					
						
							|  |  |  | 							return err | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						return file.Close() | 
					
						
							|  |  |  | 					}(); err != nil { | 
					
						
							|  |  |  | 						return err | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				return nil | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			panic("internal error") //TODOOK | 
					
						
							|  |  |  | 		}(); err != nil { | 
					
						
							|  |  |  | 			fmt.Fprintln(os.Stderr, err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func fail(s string, args ...interface{}) { | 
					
						
							|  |  |  | 	fmt.Fprintf(os.Stderr, s, args...) | 
					
						
							|  |  |  | 	os.Exit(1) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func main() { | 
					
						
							| 
									
										
										
										
											2021-11-27 15:26:58 +01:00
										 |  |  | 	fmt.Printf("Running on %s/%s.\n", runtime.GOOS, runtime.GOARCH) | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 	env := os.Getenv("GO_GENERATE") | 
					
						
							|  |  |  | 	goarch := runtime.GOARCH | 
					
						
							|  |  |  | 	goos := runtime.GOOS | 
					
						
							|  |  |  | 	if s := os.Getenv("TARGET_GOOS"); s != "" { | 
					
						
							|  |  |  | 		goos = s | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if s := os.Getenv("TARGET_GOARCH"); s != "" { | 
					
						
							|  |  |  | 		goarch = s | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	var more []string | 
					
						
							|  |  |  | 	if env != "" { | 
					
						
							|  |  |  | 		more = strings.Split(env, ",") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	ndebug := []string{"-DNDEBUG"} | 
					
						
							|  |  |  | 	for _, v := range more { | 
					
						
							|  |  |  | 		if v == "-DSQLITE_DEBUG" { | 
					
						
							|  |  |  | 			ndebug = nil | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	more = append(more, ndebug...) | 
					
						
							|  |  |  | 	download() | 
					
						
							|  |  |  | 	switch goos { | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 	case "linux", "freebsd": | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 		configProduction = append(configProduction, "-DSQLITE_OS_UNIX=1") | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 	case "netbsd": | 
					
						
							|  |  |  | 		configProduction = append(configProduction, []string{ | 
					
						
							|  |  |  | 			"-DSQLITE_OS_UNIX=1", | 
					
						
							|  |  |  | 			"-D__libc_cond_broadcast=pthread_cond_broadcast", | 
					
						
							|  |  |  | 			"-D__libc_cond_destroy=pthread_cond_destroy", | 
					
						
							|  |  |  | 			"-D__libc_cond_init=pthread_cond_init", | 
					
						
							|  |  |  | 			"-D__libc_cond_signal=pthread_cond_signal", | 
					
						
							|  |  |  | 			"-D__libc_cond_wait=pthread_cond_wait", | 
					
						
							|  |  |  | 			"-D__libc_mutex_destroy=pthread_mutex_destroy", | 
					
						
							|  |  |  | 			"-D__libc_mutex_init=pthread_mutex_init", | 
					
						
							|  |  |  | 			"-D__libc_mutex_lock=pthread_mutex_lock", | 
					
						
							|  |  |  | 			"-D__libc_mutex_trylock=pthread_mutex_trylock", | 
					
						
							|  |  |  | 			"-D__libc_mutex_unlock=pthread_mutex_unlock", | 
					
						
							|  |  |  | 			"-D__libc_mutexattr_destroy=pthread_mutexattr_destroy", | 
					
						
							|  |  |  | 			"-D__libc_mutexattr_init=pthread_mutexattr_init", | 
					
						
							|  |  |  | 			"-D__libc_mutexattr_settype=pthread_mutexattr_settype", | 
					
						
							|  |  |  | 			"-D__libc_thr_yield=sched_yield", | 
					
						
							|  |  |  | 		}...) | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 	case "darwin": | 
					
						
							|  |  |  | 		configProduction = append(configProduction, | 
					
						
							|  |  |  | 			"-DSQLITE_OS_UNIX=1", | 
					
						
							|  |  |  | 			"-DSQLITE_WITHOUT_ZONEMALLOC", | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 		configTest = append(configTest, | 
					
						
							|  |  |  | 			"-DSQLITE_OS_UNIX=1", | 
					
						
							|  |  |  | 			"-DSQLITE_WITHOUT_ZONEMALLOC", | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 	case "windows": | 
					
						
							|  |  |  | 		configProduction = append(configProduction, | 
					
						
							|  |  |  | 			"-DSQLITE_OS_WIN=1", | 
					
						
							|  |  |  | 			"-D_MSC_VER=1900", | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 		configTest = append(configTest, | 
					
						
							|  |  |  | 			"-DSQLITE_OS_WIN=1", | 
					
						
							|  |  |  | 			"-D_MSC_VER=1900", | 
					
						
							|  |  |  | 		) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		fail("unknows/unsupported os: %s\n", goos) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	makeSqliteProduction(goos, goarch, more) | 
					
						
							|  |  |  | 	makeSqliteTest(goos, goarch, more) | 
					
						
							|  |  |  | 	makeMpTest(goos, goarch, more) | 
					
						
							|  |  |  | 	makeSpeedTest(goos, goarch, more) | 
					
						
							|  |  |  | 	makeTestfixture(goos, goarch, more) | 
					
						
							|  |  |  | 	ccgo.MustCopyDir(true, "testdata/tcl", sqliteSrcDir+"/test", nil) | 
					
						
							|  |  |  | 	ccgo.MustCopyDir(true, "testdata/tcl", "testdata/overlay", nil) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func configure(goos, goarch string) { | 
					
						
							|  |  |  | 	wd, err := os.Getwd() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		fail("%s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	defer os.Chdir(wd) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := os.Chdir(sqliteSrcDir); err != nil { | 
					
						
							|  |  |  | 		fail("%s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmd := newCmd("make", "distclean") | 
					
						
							|  |  |  | 	cmd.Run() | 
					
						
							|  |  |  | 	var args []string | 
					
						
							|  |  |  | 	switch goos { | 
					
						
							| 
									
										
										
										
											2021-11-27 15:26:58 +01:00
										 |  |  | 	case "linux", "freebsd", "netbsd": | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 		// nop | 
					
						
							|  |  |  | 	case "darwin": | 
					
						
							|  |  |  | 		args = append(args, "--with-tcl=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Tcl.framework") | 
					
						
							|  |  |  | 	case "windows": | 
					
						
							|  |  |  | 		switch goarch { | 
					
						
							|  |  |  | 		case "amd64": | 
					
						
							|  |  |  | 			args = append(args, "--host=x86_64-w64-mingw32") | 
					
						
							|  |  |  | 		case "386": | 
					
						
							|  |  |  | 			args = append(args, "--host=i686-w64-mingw32") | 
					
						
							|  |  |  | 		default: | 
					
						
							|  |  |  | 			fail("unknown/unsupported os/arch: %s/%s\n", goos, goarch) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		fail("unknown/unsupported os/arch: %s/%s\n", goos, goarch) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	cmd = newCmd("./configure", args...) | 
					
						
							|  |  |  | 	if err = cmd.Run(); err != nil { | 
					
						
							|  |  |  | 		fail("%s\n", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmd = newCmd("make", "parse.h", "opcodes.h") | 
					
						
							|  |  |  | 	if err = cmd.Run(); err != nil { | 
					
						
							|  |  |  | 		fail("%s\n", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func newCmd(bin string, args ...string) *exec.Cmd { | 
					
						
							|  |  |  | 	fmt.Printf("==== newCmd %s\n", bin) | 
					
						
							|  |  |  | 	for _, v := range args { | 
					
						
							|  |  |  | 		fmt.Printf("\t%v\n", v) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	r := exec.Command(bin, args...) | 
					
						
							|  |  |  | 	r.Stdout = os.Stdout | 
					
						
							|  |  |  | 	r.Stderr = os.Stderr | 
					
						
							|  |  |  | 	return r | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func makeTestfixture(goos, goarch string, more []string) { | 
					
						
							|  |  |  | 	dir := filepath.FromSlash(fmt.Sprintf("internal/testfixture")) | 
					
						
							|  |  |  | 	files := []string{ | 
					
						
							|  |  |  | 		"ext/expert/sqlite3expert.c", | 
					
						
							|  |  |  | 		"ext/expert/test_expert.c", | 
					
						
							|  |  |  | 		"ext/fts3/fts3_term.c", | 
					
						
							|  |  |  | 		"ext/fts3/fts3_test.c", | 
					
						
							|  |  |  | 		"ext/fts5/fts5_tcl.c", | 
					
						
							|  |  |  | 		"ext/fts5/fts5_test_mi.c", | 
					
						
							|  |  |  | 		"ext/fts5/fts5_test_tok.c", | 
					
						
							|  |  |  | 		"ext/misc/appendvfs.c", | 
					
						
							|  |  |  | 		"ext/misc/amatch.c", | 
					
						
							|  |  |  | 		"ext/misc/carray.c", | 
					
						
							|  |  |  | 		"ext/misc/cksumvfs.c", | 
					
						
							|  |  |  | 		"ext/misc/closure.c", | 
					
						
							|  |  |  | 		"ext/misc/csv.c", | 
					
						
							|  |  |  | 		"ext/misc/decimal.c", | 
					
						
							|  |  |  | 		"ext/misc/eval.c", | 
					
						
							|  |  |  | 		"ext/misc/explain.c", | 
					
						
							|  |  |  | 		"ext/misc/fileio.c", | 
					
						
							|  |  |  | 		"ext/misc/fuzzer.c", | 
					
						
							|  |  |  | 		"ext/misc/ieee754.c", | 
					
						
							|  |  |  | 		"ext/misc/mmapwarm.c", | 
					
						
							|  |  |  | 		"ext/misc/nextchar.c", | 
					
						
							|  |  |  | 		"ext/misc/normalize.c", | 
					
						
							|  |  |  | 		"ext/misc/percentile.c", | 
					
						
							|  |  |  | 		"ext/misc/prefixes.c", | 
					
						
							|  |  |  | 		"ext/misc/regexp.c", | 
					
						
							|  |  |  | 		"ext/misc/remember.c", | 
					
						
							|  |  |  | 		"ext/misc/series.c", | 
					
						
							|  |  |  | 		"ext/misc/spellfix.c", | 
					
						
							|  |  |  | 		"ext/misc/totype.c", | 
					
						
							|  |  |  | 		"ext/misc/unionvtab.c", | 
					
						
							|  |  |  | 		"ext/misc/wholenumber.c", | 
					
						
							|  |  |  | 		"ext/misc/zipfile.c", | 
					
						
							|  |  |  | 		"ext/rbu/test_rbu.c", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 		"ext/rtree/test_rtreedoc.c", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 		"ext/session/test_session.c", | 
					
						
							|  |  |  | 		"ext/userauth/userauth.c", | 
					
						
							|  |  |  | 		"src/tclsqlite.c", | 
					
						
							|  |  |  | 		"src/test1.c", | 
					
						
							|  |  |  | 		"src/test2.c", | 
					
						
							|  |  |  | 		"src/test3.c", | 
					
						
							|  |  |  | 		"src/test4.c", | 
					
						
							|  |  |  | 		"src/test5.c", | 
					
						
							|  |  |  | 		"src/test6.c", | 
					
						
							|  |  |  | 		"src/test7.c", | 
					
						
							|  |  |  | 		"src/test8.c", | 
					
						
							|  |  |  | 		"src/test9.c", | 
					
						
							|  |  |  | 		"src/test_async.c", | 
					
						
							|  |  |  | 		"src/test_autoext.c", | 
					
						
							|  |  |  | 		"src/test_backup.c", | 
					
						
							|  |  |  | 		"src/test_bestindex.c", | 
					
						
							|  |  |  | 		"src/test_blob.c", | 
					
						
							|  |  |  | 		"src/test_btree.c", | 
					
						
							|  |  |  | 		"src/test_config.c", | 
					
						
							|  |  |  | 		"src/test_delete.c", | 
					
						
							|  |  |  | 		"src/test_demovfs.c", | 
					
						
							|  |  |  | 		"src/test_devsym.c", | 
					
						
							|  |  |  | 		"src/test_fs.c", | 
					
						
							|  |  |  | 		"src/test_func.c", | 
					
						
							|  |  |  | 		"src/test_hexio.c", | 
					
						
							|  |  |  | 		"src/test_init.c", | 
					
						
							|  |  |  | 		"src/test_intarray.c", | 
					
						
							|  |  |  | 		"src/test_journal.c", | 
					
						
							|  |  |  | 		"src/test_malloc.c", | 
					
						
							|  |  |  | 		"src/test_md5.c", | 
					
						
							|  |  |  | 		"src/test_multiplex.c", | 
					
						
							|  |  |  | 		"src/test_mutex.c", | 
					
						
							|  |  |  | 		"src/test_onefile.c", | 
					
						
							|  |  |  | 		"src/test_osinst.c", | 
					
						
							|  |  |  | 		"src/test_pcache.c", | 
					
						
							|  |  |  | 		"src/test_quota.c", | 
					
						
							|  |  |  | 		"src/test_rtree.c", | 
					
						
							|  |  |  | 		"src/test_schema.c", | 
					
						
							|  |  |  | 		"src/test_server.c", | 
					
						
							|  |  |  | 		"src/test_superlock.c", | 
					
						
							|  |  |  | 		"src/test_syscall.c", | 
					
						
							|  |  |  | 		"src/test_tclsh.c", | 
					
						
							|  |  |  | 		"src/test_tclvar.c", | 
					
						
							|  |  |  | 		"src/test_thread.c", | 
					
						
							|  |  |  | 		"src/test_vdbecov.c", | 
					
						
							|  |  |  | 		"src/test_vfs.c", | 
					
						
							|  |  |  | 		"src/test_windirent.c", | 
					
						
							|  |  |  | 		"src/test_window.c", | 
					
						
							|  |  |  | 		"src/test_wsd.c", | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	for i, v := range files { | 
					
						
							|  |  |  | 		files[i] = filepath.Join(sqliteSrcDir, filepath.FromSlash(v)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	configure(goos, goarch) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-27 15:26:58 +01:00
										 |  |  | 	var defines, includes []string | 
					
						
							|  |  |  | 	switch goos { | 
					
						
							|  |  |  | 	case "freebsd": | 
					
						
							|  |  |  | 		includes = []string{"-I/usr/local/include/tcl8.6"} | 
					
						
							|  |  |  | 	case "linux": | 
					
						
							|  |  |  | 		includes = []string{"-I/usr/include/tcl8.6"} | 
					
						
							|  |  |  | 	case "windows": | 
					
						
							|  |  |  | 		includes = []string{"-I/usr/include/tcl8.6"} | 
					
						
							|  |  |  | 	case "netbsd": | 
					
						
							|  |  |  | 		includes = []string{"-I/usr/pkg/include"} | 
					
						
							|  |  |  | 		defines = []string{ | 
					
						
							|  |  |  | 			"-D__libc_cond_broadcast=pthread_cond_broadcast", | 
					
						
							|  |  |  | 			"-D__libc_cond_destroy=pthread_cond_destroy", | 
					
						
							|  |  |  | 			"-D__libc_cond_init=pthread_cond_init", | 
					
						
							|  |  |  | 			"-D__libc_cond_signal=pthread_cond_signal", | 
					
						
							|  |  |  | 			"-D__libc_cond_wait=pthread_cond_wait", | 
					
						
							|  |  |  | 			"-D__libc_mutex_destroy=pthread_mutex_destroy", | 
					
						
							|  |  |  | 			"-D__libc_mutex_init=pthread_mutex_init", | 
					
						
							|  |  |  | 			"-D__libc_mutex_lock=pthread_mutex_lock", | 
					
						
							|  |  |  | 			"-D__libc_mutex_trylock=pthread_mutex_trylock", | 
					
						
							|  |  |  | 			"-D__libc_mutex_unlock=pthread_mutex_unlock", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 			"-D__libc_mutexattr_destroy=pthread_mutexattr_destroy", | 
					
						
							|  |  |  | 			"-D__libc_mutexattr_init=pthread_mutexattr_init", | 
					
						
							|  |  |  | 			"-D__libc_mutexattr_settype=pthread_mutexattr_settype", | 
					
						
							| 
									
										
										
										
											2021-11-27 15:26:58 +01:00
										 |  |  | 			"-D__libc_thr_yield=sched_yield", | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 	args := join( | 
					
						
							|  |  |  | 		[]string{ | 
					
						
							|  |  |  | 			"ccgo", | 
					
						
							|  |  |  | 			"-DSQLITE_OMIT_LOAD_EXTENSION", | 
					
						
							|  |  |  | 			"-DSQLITE_SERIES_CONSTRAINT_VERIFY=1", | 
					
						
							|  |  |  | 			"-DSQLITE_SERVER=1", | 
					
						
							|  |  |  | 			"-DTCLSH_INIT_PROC=sqlite3TestInit", | 
					
						
							|  |  |  | 			"-D_HAVE_SQLITE_CONFIG_H", | 
					
						
							| 
									
										
										
										
											2021-11-27 15:26:58 +01:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		defines, | 
					
						
							|  |  |  | 		includes, | 
					
						
							|  |  |  | 		[]string{ | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 			"-export-defines", "", | 
					
						
							|  |  |  | 			"-export-fields", "F", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 			"-ignore-unsupported-alignment", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 			"-trace-translation-units", | 
					
						
							|  |  |  | 			volatiles, | 
					
						
							|  |  |  | 			"-lmodernc.org/sqlite/libtest", | 
					
						
							|  |  |  | 			"-lmodernc.org/tcl/lib", | 
					
						
							|  |  |  | 			"-lmodernc.org/z/lib", | 
					
						
							|  |  |  | 			"-o", filepath.Join(dir, fmt.Sprintf("testfixture_%s_%s.go", goos, goarch)), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", filepath.Join(sqliteSrcDir, filepath.FromSlash("ext/async"))), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", filepath.Join(sqliteSrcDir, filepath.FromSlash("ext/fts3"))), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", filepath.Join(sqliteSrcDir, filepath.FromSlash("ext/icu"))), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", filepath.Join(sqliteSrcDir, filepath.FromSlash("ext/rtree"))), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", filepath.Join(sqliteSrcDir, filepath.FromSlash("ext/session"))), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", filepath.Join(sqliteSrcDir, filepath.FromSlash("ext/userauth"))), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", filepath.Join(sqliteSrcDir, filepath.FromSlash("src"))), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", sqliteDir), | 
					
						
							|  |  |  | 			fmt.Sprintf("-I%s", sqliteSrcDir), | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		files, | 
					
						
							|  |  |  | 		more, | 
					
						
							|  |  |  | 		configTest, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	task := ccgo.NewTask(args, nil, nil) | 
					
						
							|  |  |  | 	if err := task.Main(); err != nil { | 
					
						
							|  |  |  | 		fail("%s\n", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func makeSpeedTest(goos, goarch string, more []string) { | 
					
						
							|  |  |  | 	task := ccgo.NewTask( | 
					
						
							|  |  |  | 		join( | 
					
						
							|  |  |  | 			[]string{ | 
					
						
							|  |  |  | 				"ccgo", | 
					
						
							|  |  |  | 				"-export-defines", "", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 				"-ignore-unsupported-alignment", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 				"-o", filepath.FromSlash(fmt.Sprintf("speedtest1/main_%s_%s.go", goos, goarch)), | 
					
						
							|  |  |  | 				"-trace-translation-units", | 
					
						
							|  |  |  | 				filepath.Join(sqliteSrcDir, "test", "speedtest1.c"), | 
					
						
							|  |  |  | 				fmt.Sprintf("-I%s", sqliteDir), | 
					
						
							|  |  |  | 				"-l", "modernc.org/sqlite/lib", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			more, | 
					
						
							|  |  |  | 			configProduction, | 
					
						
							|  |  |  | 		), | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	if err := task.Main(); err != nil { | 
					
						
							|  |  |  | 		fail("%s\n", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func makeMpTest(goos, goarch string, more []string) { | 
					
						
							|  |  |  | 	task := ccgo.NewTask( | 
					
						
							|  |  |  | 		join( | 
					
						
							|  |  |  | 			[]string{ | 
					
						
							|  |  |  | 				"ccgo", | 
					
						
							|  |  |  | 				"-export-defines", "", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 				"-ignore-unsupported-alignment", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 				"-o", filepath.FromSlash(fmt.Sprintf("internal/mptest/main_%s_%s.go", goos, goarch)), | 
					
						
							|  |  |  | 				"-trace-translation-units", | 
					
						
							|  |  |  | 				filepath.Join(sqliteSrcDir, "mptest", "mptest.c"), | 
					
						
							|  |  |  | 				fmt.Sprintf("-I%s", sqliteDir), | 
					
						
							|  |  |  | 				"-l", "modernc.org/sqlite/lib", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			more, | 
					
						
							|  |  |  | 			configProduction, | 
					
						
							|  |  |  | 		), | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	if err := task.Main(); err != nil { | 
					
						
							|  |  |  | 		fail("%s\n", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func makeSqliteProduction(goos, goarch string, more []string) { | 
					
						
							|  |  |  | 	task := ccgo.NewTask( | 
					
						
							|  |  |  | 		join( | 
					
						
							|  |  |  | 			[]string{ | 
					
						
							|  |  |  | 				"ccgo", | 
					
						
							|  |  |  | 				"-DSQLITE_PRIVATE=", | 
					
						
							|  |  |  | 				"-export-defines", "", | 
					
						
							|  |  |  | 				"-export-enums", "", | 
					
						
							|  |  |  | 				"-export-externs", "X", | 
					
						
							|  |  |  | 				"-export-fields", "F", | 
					
						
							|  |  |  | 				"-export-typedefs", "", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 				"-ignore-unsupported-alignment", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 				"-pkgname", "sqlite3", | 
					
						
							|  |  |  | 				"-o", filepath.FromSlash(fmt.Sprintf("lib/sqlite_%s_%s.go", goos, goarch)), | 
					
						
							|  |  |  | 				"-trace-translation-units", | 
					
						
							|  |  |  | 				filepath.Join(sqliteDir, "sqlite3.c"), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			more, | 
					
						
							|  |  |  | 			configProduction, | 
					
						
							|  |  |  | 		), | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	if err := task.Main(); err != nil { | 
					
						
							|  |  |  | 		fail("%s\n", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func makeSqliteTest(goos, goarch string, more []string) { | 
					
						
							|  |  |  | 	task := ccgo.NewTask( | 
					
						
							|  |  |  | 		join( | 
					
						
							|  |  |  | 			[]string{ | 
					
						
							|  |  |  | 				"ccgo", | 
					
						
							|  |  |  | 				"-DSQLITE_PRIVATE=", | 
					
						
							|  |  |  | 				"-export-defines", "", | 
					
						
							|  |  |  | 				"-export-enums", "", | 
					
						
							|  |  |  | 				"-export-externs", "X", | 
					
						
							|  |  |  | 				"-export-fields", "F", | 
					
						
							|  |  |  | 				"-export-typedefs", "", | 
					
						
							| 
									
										
										
										
											2021-12-12 15:47:51 +01:00
										 |  |  | 				"-ignore-unsupported-alignment", | 
					
						
							| 
									
										
										
										
											2021-08-29 15:41:41 +01:00
										 |  |  | 				"-pkgname", "sqlite3", | 
					
						
							|  |  |  | 				"-o", filepath.FromSlash(fmt.Sprintf("libtest/sqlite_%s_%s.go", goos, goarch)), | 
					
						
							|  |  |  | 				"-trace-translation-units", | 
					
						
							|  |  |  | 				volatiles, | 
					
						
							|  |  |  | 				filepath.Join(sqliteDir, "sqlite3.c"), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			more, | 
					
						
							|  |  |  | 			configTest, | 
					
						
							|  |  |  | 		), | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 		nil, | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	if err := task.Main(); err != nil { | 
					
						
							|  |  |  | 		fail("%s\n", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func join(a ...[]string) (r []string) { | 
					
						
							|  |  |  | 	n := 0 | 
					
						
							|  |  |  | 	for _, v := range a { | 
					
						
							|  |  |  | 		n += len(v) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	r = make([]string, 0, n) | 
					
						
							|  |  |  | 	for _, v := range a { | 
					
						
							|  |  |  | 		r = append(r, v...) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return r | 
					
						
							|  |  |  | } |