123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- #!/usr/bin/tclsh
- #
- # To build the
- #
- # const char **azCompileOpt[]
- #
- # definition used in src/ctime.c, run this script from
- # the checkout root. It generates src/ctime.c .
- #
- # Results are normally written into src/ctime.c. But if an argument is
- # provided, results are written there instead. Examples:
- #
- # tclsh tool/mkctimec.tcl ;# <-- results to src/ctime.c
- #
- # tclsh tool/mkctimec.tcl /dev/tty ;# <-- results to the terminal
- #
- set ::headWarning {/* DO NOT EDIT!
- ** This file is automatically generated by the script in the canonical
- ** SQLite source tree at tool/mkctimec.tcl.
- **
- ** To modify this header, edit any of the various lists in that script
- ** which specify categories of generated conditionals in this file.
- */}
- # Make { and } easier to put into literals (even on EBCDIC machines.)
- regexp {(\{)(\})} "{}" ma ::lb ::rb
- set ::headCode "
- /*
- ** 2010 February 23
- **
- ** The author disclaims copyright to this source code. In place of
- ** a legal notice, here is a blessing:
- **
- ** May you do good and not evil.
- ** May you find forgiveness for yourself and forgive others.
- ** May you share freely, never taking more than you give.
- **
- *************************************************************************
- **
- ** This file implements routines used to report what compile-time options
- ** SQLite was built with.
- */
- #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS /* IMP: R-16824-07538 */
- /*
- ** Include the configuration header output by 'configure' if we're using the
- ** autoconf-based build
- */
- #if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H)
- #include \"sqlite_cfg.h\"
- #define SQLITECONFIG_H 1
- #endif
- /* These macros are provided to \"stringify\" the value of the define
- ** for those options in which the value is meaningful. */
- #define CTIMEOPT_VAL_(opt) #opt
- #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt)
- /* Like CTIMEOPT_VAL, but especially for SQLITE_DEFAULT_LOOKASIDE. This
- ** option requires a separate macro because legal values contain a single
- ** comma. e.g. (-DSQLITE_DEFAULT_LOOKASIDE=\"100,100\") */
- #define CTIMEOPT_VAL2_(opt1,opt2) #opt1 \",\" #opt2
- #define CTIMEOPT_VAL2(opt) CTIMEOPT_VAL2_(opt)
- #include \"sqliteInt.h\"
- /*
- ** An array of names of all compile-time options. This array should
- ** be sorted A-Z.
- **
- ** This array looks large, but in a typical installation actually uses
- ** only a handful of compile-time options, so most times this array is usually
- ** rather short and uses little memory space.
- */
- static const char * const sqlite3azCompileOpt\[\] = $::lb
- "
- set ::tailCode "
- $::rb ;
- const char **sqlite3CompileOptions(int *pnOpt){
- *pnOpt = sizeof(sqlite3azCompileOpt) / sizeof(sqlite3azCompileOpt\[0\]);
- return (const char**)sqlite3azCompileOpt;
- }
- #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
- "
- # All Boolean compile time options which default to something
- # other than 0 or empty. The default is paired with the PP
- # symbol so that a differing define can be detected.
- #
- set boolean_defnnz_options {
- {SQLITE_HOMEGROWN_RECURSIVE_MUTEX 1}
- {SQLITE_POWERSAFE_OVERWRITE 1}
- {SQLITE_DEFAULT_MEMSTATUS 1}
- {SQLITE_OMIT_TRACE 1}
- {SQLITE_ALLOW_COVERING_INDEX_SCAN 1}
- }
- # All Boolean compile time options which default to 0 or empty.
- #
- set boolean_defnil_options {
- SQLITE_32BIT_ROWID
- SQLITE_4_BYTE_ALIGNED_MALLOC
- SQLITE_ALLOW_ROWID_IN_VIEW
- SQLITE_ALLOW_URI_AUTHORITY
- SQLITE_BUG_COMPATIBLE_20160819
- SQLITE_CASE_SENSITIVE_LIKE
- SQLITE_CHECK_PAGES
- SQLITE_COVERAGE_TEST
- SQLITE_DEBUG
- SQLITE_DEFAULT_AUTOMATIC_INDEX
- SQLITE_DEFAULT_AUTOVACUUM
- SQLITE_DEFAULT_CKPTFULLFSYNC
- SQLITE_DEFAULT_FOREIGN_KEYS
- SQLITE_DEFAULT_LOCKING_MODE
- SQLITE_DEFAULT_RECURSIVE_TRIGGERS
- SQLITE_DEFAULT_SYNCHRONOUS
- SQLITE_DEFAULT_WAL_SYNCHRONOUS
- SQLITE_DIRECT_OVERFLOW_READ
- SQLITE_DISABLE_DIRSYNC
- SQLITE_DISABLE_FTS3_UNICODE
- SQLITE_DISABLE_FTS4_DEFERRED
- SQLITE_DISABLE_INTRINSIC
- SQLITE_DISABLE_LFS
- SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS
- SQLITE_DISABLE_SKIPAHEAD_DISTINCT
- SQLITE_ENABLE_8_3_NAMES
- SQLITE_ENABLE_API_ARMOR
- SQLITE_ENABLE_ATOMIC_WRITE
- SQLITE_ENABLE_BATCH_ATOMIC_WRITE
- SQLITE_ENABLE_BYTECODE_VTAB
- SQLITE_ENABLE_COLUMN_METADATA
- SQLITE_ENABLE_COLUMN_USED_MASK
- SQLITE_ENABLE_COSTMULT
- SQLITE_ENABLE_CURSOR_HINTS
- SQLITE_ENABLE_DBPAGE_VTAB
- SQLITE_ENABLE_DBSTAT_VTAB
- SQLITE_ENABLE_EXPENSIVE_ASSERT
- SQLITE_ENABLE_EXPLAIN_COMMENTS
- SQLITE_ENABLE_FTS3
- SQLITE_ENABLE_FTS3_PARENTHESIS
- SQLITE_ENABLE_FTS3_TOKENIZER
- SQLITE_ENABLE_FTS4
- SQLITE_ENABLE_FTS5
- SQLITE_ENABLE_GEOPOLY
- SQLITE_ENABLE_HIDDEN_COLUMNS
- SQLITE_ENABLE_ICU
- SQLITE_ENABLE_IOTRACE
- SQLITE_ENABLE_LOAD_EXTENSION
- SQLITE_ENABLE_LOCKING_STYLE
- SQLITE_ENABLE_MATH_FUNCTIONS
- SQLITE_ENABLE_MEMORY_MANAGEMENT
- SQLITE_ENABLE_MEMSYS3
- SQLITE_ENABLE_MEMSYS5
- SQLITE_ENABLE_MULTIPLEX
- SQLITE_ENABLE_NORMALIZE
- SQLITE_ENABLE_NULL_TRIM
- SQLITE_ENABLE_ORDERED_SET_AGGREGATES
- SQLITE_ENABLE_OFFSET_SQL_FUNC
- SQLITE_ENABLE_OVERSIZE_CELL_CHECK
- SQLITE_ENABLE_PREUPDATE_HOOK
- SQLITE_ENABLE_QPSG
- SQLITE_ENABLE_RBU
- SQLITE_ENABLE_RTREE
- SQLITE_ENABLE_SESSION
- SQLITE_ENABLE_SNAPSHOT
- SQLITE_ENABLE_SORTER_REFERENCES
- SQLITE_ENABLE_SQLLOG
- SQLITE_ENABLE_STAT4
- SQLITE_ENABLE_STMT_SCANSTATUS
- SQLITE_ENABLE_STMTVTAB
- SQLITE_ENABLE_TREETRACE
- SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
- SQLITE_ENABLE_UNLOCK_NOTIFY
- SQLITE_ENABLE_UPDATE_DELETE_LIMIT
- SQLITE_ENABLE_URI_00_ERROR
- SQLITE_ENABLE_VFSTRACE
- SQLITE_ENABLE_WHERETRACE
- SQLITE_ENABLE_ZIPVFS
- SQLITE_EXPLAIN_ESTIMATED_ROWS
- SQLITE_EXTRA_IFNULLROW
- SQLITE_FTS5_ENABLE_TEST_MI
- SQLITE_FTS5_NO_WITHOUT_ROWID
- SQLITE_IGNORE_AFP_LOCK_ERRORS
- SQLITE_IGNORE_FLOCK_LOCK_ERRORS
- SQLITE_INLINE_MEMCPY
- SQLITE_INT64_TYPE
- SQLITE_LEGACY_JSON_VALID
- SQLITE_LIKE_DOESNT_MATCH_BLOBS
- SQLITE_LOCK_TRACE
- SQLITE_LOG_CACHE_SPILL
- SQLITE_MEMDEBUG
- SQLITE_MIXED_ENDIAN_64BIT_FLOAT
- SQLITE_MMAP_READWRITE
- SQLITE_MUTEX_NOOP
- SQLITE_MUTEX_OMIT
- SQLITE_MUTEX_PTHREADS
- SQLITE_MUTEX_W32
- SQLITE_NEED_ERR_NAME
- SQLITE_NO_SYNC
- SQLITE_OMIT_ALTERTABLE
- SQLITE_OMIT_ANALYZE
- SQLITE_OMIT_ATTACH
- SQLITE_OMIT_AUTHORIZATION
- SQLITE_OMIT_AUTOINCREMENT
- SQLITE_OMIT_AUTOINIT
- SQLITE_OMIT_AUTOMATIC_INDEX
- SQLITE_OMIT_AUTORESET
- SQLITE_OMIT_AUTOVACUUM
- SQLITE_OMIT_BETWEEN_OPTIMIZATION
- SQLITE_OMIT_BLOB_LITERAL
- SQLITE_OMIT_CAST
- SQLITE_OMIT_CHECK
- SQLITE_OMIT_COMPLETE
- SQLITE_OMIT_COMPOUND_SELECT
- SQLITE_OMIT_CONFLICT_CLAUSE
- SQLITE_OMIT_CTE
- SQLITE_OMIT_DECLTYPE
- SQLITE_OMIT_DEPRECATED
- SQLITE_OMIT_DESERIALIZE
- SQLITE_OMIT_DISKIO
- SQLITE_OMIT_EXPLAIN
- SQLITE_OMIT_FLAG_PRAGMAS
- SQLITE_OMIT_FLOATING_POINT
- SQLITE_OMIT_FOREIGN_KEY
- SQLITE_OMIT_GET_TABLE
- SQLITE_OMIT_HEX_INTEGER
- SQLITE_OMIT_INCRBLOB
- SQLITE_OMIT_INTEGRITY_CHECK
- SQLITE_OMIT_INTROSPECTION_PRAGMAS
- SQLITE_OMIT_JSON
- SQLITE_OMIT_LIKE_OPTIMIZATION
- SQLITE_OMIT_LOAD_EXTENSION
- SQLITE_OMIT_LOCALTIME
- SQLITE_OMIT_LOOKASIDE
- SQLITE_OMIT_MEMORYDB
- SQLITE_OMIT_OR_OPTIMIZATION
- SQLITE_OMIT_PAGER_PRAGMAS
- SQLITE_OMIT_PARSER_TRACE
- SQLITE_OMIT_POPEN
- SQLITE_OMIT_PRAGMA
- SQLITE_OMIT_PROGRESS_CALLBACK
- SQLITE_OMIT_QUICKBALANCE
- SQLITE_OMIT_REINDEX
- SQLITE_OMIT_SCHEMA_PRAGMAS
- SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
- SQLITE_OMIT_SEH
- SQLITE_OMIT_SHARED_CACHE
- SQLITE_OMIT_SHUTDOWN_DIRECTORIES
- SQLITE_OMIT_SUBQUERY
- SQLITE_OMIT_TCL_VARIABLE
- SQLITE_OMIT_TEMPDB
- SQLITE_OMIT_TEST_CONTROL
- SQLITE_OMIT_TRIGGER
- SQLITE_OMIT_TRUNCATE_OPTIMIZATION
- SQLITE_OMIT_UTF16
- SQLITE_OMIT_VACUUM
- SQLITE_OMIT_VIEW
- SQLITE_OMIT_VIRTUALTABLE
- SQLITE_OMIT_WAL
- SQLITE_OMIT_WSD
- SQLITE_OMIT_XFER_OPT
- SQLITE_PERFORMANCE_TRACE
- SQLITE_PREFER_PROXY_LOCKING
- SQLITE_PROXY_DEBUG
- SQLITE_REVERSE_UNORDERED_SELECTS
- SQLITE_RTREE_INT_ONLY
- SQLITE_SECURE_DELETE
- SQLITE_SMALL_STACK
- SQLITE_SOUNDEX
- SQLITE_SUBSTR_COMPATIBILITY
- SQLITE_TCL
- SQLITE_TEST
- SQLITE_UNLINK_AFTER_CLOSE
- SQLITE_UNTESTABLE
- SQLITE_USE_ALLOCA
- SQLITE_USE_FCNTL_TRACE
- SQLITE_USE_URI
- SQLITE_VDBE_COVERAGE
- SQLITE_WIN32_MALLOC
- SQLITE_ZERO_MALLOC
- }
- # All compile time options for which the assigned value is other than boolean
- # and is a comma-separated scalar pair.
- #
- set value2_options {
- SQLITE_DEFAULT_LOOKASIDE
- }
- # All compile time options for which the assigned value is other than boolean
- # and is a single scalar.
- #
- set value_options {
- SQLITE_ATOMIC_INTRINSICS
- SQLITE_BITMASK_TYPE
- SQLITE_DEFAULT_CACHE_SIZE
- SQLITE_DEFAULT_FILE_FORMAT
- SQLITE_DEFAULT_FILE_PERMISSIONS
- SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
- SQLITE_DEFAULT_LOCKING_MODE
- SQLITE_DEFAULT_MMAP_SIZE
- SQLITE_DEFAULT_PAGE_SIZE
- SQLITE_DEFAULT_PCACHE_INITSZ
- SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
- SQLITE_DEFAULT_ROWEST
- SQLITE_DEFAULT_SECTOR_SIZE
- SQLITE_DEFAULT_SYNCHRONOUS
- SQLITE_DEFAULT_WAL_AUTOCHECKPOINT
- SQLITE_DEFAULT_WAL_SYNCHRONOUS
- SQLITE_DEFAULT_WORKER_THREADS
- SQLITE_DQS
- SQLITE_ENABLE_8_3_NAMES
- SQLITE_ENABLE_CEROD
- SQLITE_ENABLE_LOCKING_STYLE
- SQLITE_EXTRA_AUTOEXT
- SQLITE_EXTRA_INIT
- SQLITE_EXTRA_SHUTDOWN
- SQLITE_FTS3_MAX_EXPR_DEPTH
- SQLITE_INTEGRITY_CHECK_ERROR_MAX
- SQLITE_MALLOC_SOFT_LIMIT
- SQLITE_MAX_ATTACHED
- SQLITE_MAX_COLUMN
- SQLITE_MAX_COMPOUND_SELECT
- SQLITE_MAX_DEFAULT_PAGE_SIZE
- SQLITE_MAX_EXPR_DEPTH
- SQLITE_MAX_FUNCTION_ARG
- SQLITE_MAX_LENGTH
- SQLITE_MAX_LIKE_PATTERN_LENGTH
- SQLITE_MAX_MEMORY
- SQLITE_MAX_MMAP_SIZE
- SQLITE_MAX_MMAP_SIZE_
- SQLITE_MAX_PAGE_COUNT
- SQLITE_MAX_PAGE_SIZE
- SQLITE_MAX_SCHEMA_RETRY
- SQLITE_MAX_SQL_LENGTH
- SQLITE_MAX_TRIGGER_DEPTH
- SQLITE_MAX_VARIABLE_NUMBER
- SQLITE_MAX_VDBE_OP
- SQLITE_MAX_WORKER_THREADS
- SQLITE_SORTER_PMASZ
- SQLITE_STAT4_SAMPLES
- SQLITE_STMTJRNL_SPILL
- SQLITE_TEMP_STORE
- }
- # Options that require custom code.
- #
- set options(COMPILER) {
- #if defined(__clang__) && defined(__clang_major__)
- "COMPILER=clang-" CTIMEOPT_VAL(__clang_major__) "."
- CTIMEOPT_VAL(__clang_minor__) "."
- CTIMEOPT_VAL(__clang_patchlevel__),
- #elif defined(_MSC_VER)
- "COMPILER=msvc-" CTIMEOPT_VAL(_MSC_VER),
- #elif defined(__GNUC__) && defined(__VERSION__)
- "COMPILER=gcc-" __VERSION__,
- #endif
- }
- set options(HAVE_ISNAN) {
- #if HAVE_ISNAN || SQLITE_HAVE_ISNAN
- "HAVE_ISNAN",
- #endif
- }
- set options(OMIT_DATETIME_FUNCS) {
- #if defined(SQLITE_OMIT_DATETIME_FUNCS) || defined(SQLITE_OMIT_FLOATING_POINT)
- "OMIT_DATETIME_FUNCS",
- #endif
- }
- set options(SYSTEM_MALLOC) "\
- #if (!defined(SQLITE_WIN32_MALLOC) \\
- && !defined(SQLITE_ZERO_MALLOC) \\
- && !defined(SQLITE_MEMDEBUG) \\
- ) || defined(SQLITE_SYSTEM_MALLOC)
- \"SYSTEM_MALLOC\",
- #endif
- "
- set options(THREADSAFE) {
- #if defined(SQLITE_THREADSAFE)
- "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
- #elif defined(THREADSAFE)
- "THREADSAFE=" CTIMEOPT_VAL(THREADSAFE),
- #else
- "THREADSAFE=1",
- #endif
- }
- proc trim_name {in} {
- set ret $in
- if {[string range $in 0 6]=="SQLITE_"} {
- set ret [string range $in 7 end]
- }
- return $ret
- }
- foreach name_defval $boolean_defnnz_options {
- set b [lindex $name_defval 0]
- set defval [lindex $name_defval 1]
- set name [trim_name $b]
- set options($name) [subst {
- #ifdef $b
- # if $b != $defval
- "$name=" CTIMEOPT_VAL($b),
- # endif
- #endif
- }]
- }
- foreach b $boolean_defnil_options {
- set name [trim_name $b]
- set options($name) [subst {
- #ifdef $b
- "$name",
- #endif
- }]
- }
-
- foreach v $value_options {
- set name [trim_name $v]
- set options($name) [subst {
- #ifdef $v
- "$name=" CTIMEOPT_VAL($v),
- #endif
- }]
- }
-
- foreach v $value2_options {
- set name [trim_name $v]
- set options($name) [subst {
- #ifdef $v
- "$name=" CTIMEOPT_VAL2($v),
- #endif
- }]
- }
- if {$argc>0} {
- set destfile [lindex $argv 0]
- } else {
- set destfile "[file dir [file dir [file normal $argv0]]]/src/ctime.c"
- puts "Overwriting $destfile..."
- }
- if {[catch {set cfd [open $destfile w]}]!=0} {
- puts stderr "File '$destfile' unwritable."
- exit 1;
- }
- fconfigure $cfd -translation binary
- puts $cfd $::headWarning;
- puts $cfd $::headCode;
- foreach o [lsort [array names options]] {
- puts $cfd [string trim $options($o)]
- }
- puts -nonewline $cfd $::tailCode;
- close $cfd
|