summaryrefslogtreecommitdiffstats
path: root/vendor/modernc.org/sqlite/generator.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2022-01-31 00:27:37 +0100
committerWim <wim@42.be>2022-03-20 14:57:48 +0100
commite3cafeaf9292f67459ff1d186f68283bfaedf2ae (patch)
treeb69c39620aa91dba695b3b935c6651c0fb37ce75 /vendor/modernc.org/sqlite/generator.go
parente7b193788a56ee7cdb02a87a9db0ad6724ef66d5 (diff)
downloadmatterbridge-msglm-e3cafeaf9292f67459ff1d186f68283bfaedf2ae.tar.gz
matterbridge-msglm-e3cafeaf9292f67459ff1d186f68283bfaedf2ae.tar.bz2
matterbridge-msglm-e3cafeaf9292f67459ff1d186f68283bfaedf2ae.zip
Add dependencies/vendor (whatsapp)
Diffstat (limited to 'vendor/modernc.org/sqlite/generator.go')
-rw-r--r--vendor/modernc.org/sqlite/generator.go782
1 files changed, 782 insertions, 0 deletions
diff --git a/vendor/modernc.org/sqlite/generator.go b/vendor/modernc.org/sqlite/generator.go
new file mode 100644
index 00000000..8ddaaadd
--- /dev/null
+++ b/vendor/modernc.org/sqlite/generator.go
@@ -0,0 +1,782 @@
+// 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.
+
+//go:build generator
+// +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_MATH_FUNCTIONS",
+ "-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",
+ "-DSQLITE_MUTEX_NOOP",
+ "-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_MATH_FUNCTIONS",
+ "-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",
+ "-DSQLITE_MUTEX_NOOP",
+ "-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
+ }{
+ {sqliteDir, "https://www.sqlite.org/2022/sqlite-amalgamation-3370200.zip", 2457, false},
+ {sqliteSrcDir, "https://www.sqlite.org/2022/sqlite-src-3370200.zip", 12814, false},
+ }
+
+ sqliteDir = filepath.FromSlash("testdata/sqlite-amalgamation-3370200")
+ sqliteSrcDir = filepath.FromSlash("testdata/sqlite-src-3370200")
+)
+
+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() {
+ fmt.Printf("Running on %s/%s.\n", runtime.GOOS, runtime.GOARCH)
+ 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 {
+ case "linux", "freebsd":
+ configProduction = append(configProduction, "-DSQLITE_OS_UNIX=1")
+ 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",
+ }...)
+ 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 {
+ case "linux", "freebsd", "netbsd":
+ // 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",
+ "ext/rtree/test_rtreedoc.c",
+ "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)
+
+ 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",
+ "-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",
+ }
+ }
+
+ 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",
+ },
+ defines,
+ includes,
+ []string{
+ "-export-defines", "",
+ "-export-fields", "F",
+ "-ignore-unsupported-alignment",
+ "-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", "",
+ "-ignore-unsupported-alignment",
+ "-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", "",
+ "-ignore-unsupported-alignment",
+ "-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", "",
+ "-ignore-unsupported-alignment",
+ "-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", "",
+ "-ignore-unsupported-alignment",
+ "-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
+}