1#!/usr/bin/tclsh 2# 3# To build the 4# 5# const char **azCompileOpt[] 6# 7# definition used in src/ctime.c, run this script from 8# the checkout root. It generates src/ctime.c . 9# 10 11 12set ::headWarning {/* DO NOT EDIT! 13** This file is automatically generated by the script in the canonical 14** SQLite source tree at tool/mkctimec.tcl. 15** 16** To modify this header, edit any of the various lists in that script 17** which specify categories of generated conditionals in this file. 18*/} 19 20# Make { and } easier to put into literals (even on EBCDIC machines.) 21regexp {(\{)(\})} "{}" ma ::lb ::rb 22 23set ::headCode " 24/* 25** 2010 February 23 26** 27** The author disclaims copyright to this source code. In place of 28** a legal notice, here is a blessing: 29** 30** May you do good and not evil. 31** May you find forgiveness for yourself and forgive others. 32** May you share freely, never taking more than you give. 33** 34************************************************************************* 35** 36** This file implements routines used to report what compile-time options 37** SQLite was built with. 38*/ 39#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS /* IMP: R-16824-07538 */ 40 41/* 42** Include the configuration header output by 'configure' if we're using the 43** autoconf-based build 44*/ 45#if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H) 46#include \"sqlite_cfg.h\" 47#define SQLITECONFIG_H 1 48#endif 49 50/* These macros are provided to \"stringify\" the value of the define 51** for those options in which the value is meaningful. */ 52#define CTIMEOPT_VAL_(opt) #opt 53#define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) 54 55/* Like CTIMEOPT_VAL, but especially for SQLITE_DEFAULT_LOOKASIDE. This 56** option requires a separate macro because legal values contain a single 57** comma. e.g. (-DSQLITE_DEFAULT_LOOKASIDE=\"100,100\") */ 58#define CTIMEOPT_VAL2_(opt1,opt2) #opt1 \",\" #opt2 59#define CTIMEOPT_VAL2(opt) CTIMEOPT_VAL2_(opt) 60#include \"sqliteInt.h\" 61 62/* 63** An array of names of all compile-time options. This array should 64** be sorted A-Z. 65** 66** This array looks large, but in a typical installation actually uses 67** only a handful of compile-time options, so most times this array is usually 68** rather short and uses little memory space. 69*/ 70static const char * const sqlite3azCompileOpt\[\] = $::lb 71" 72 73set ::tailCode " 74$::rb ; 75 76const char **sqlite3CompileOptions(int *pnOpt){ 77 *pnOpt = sizeof(sqlite3azCompileOpt) / sizeof(sqlite3azCompileOpt\[0\]); 78 return (const char**)sqlite3azCompileOpt; 79} 80 81#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ 82" 83 84# All Boolean compile time options which default to something 85# other than 0 or empty. The default is paired with the PP 86# symbol so that a differing define can be detected. 87# 88set boolean_defnnz_options { 89 {SQLITE_HOMEGROWN_RECURSIVE_MUTEX 1} 90 {SQLITE_POWERSAFE_OVERWRITE 1} 91 {SQLITE_DEFAULT_MEMSTATUS 1} 92 {SQLITE_OMIT_TRACE 1} 93 {SQLITE_ALLOW_COVERING_INDEX_SCAN 1} 94} 95 96# All Boolean compile time options which default to 0 or empty. 97# 98set boolean_defnil_options { 99 SQLITE_32BIT_ROWID 100 SQLITE_4_BYTE_ALIGNED_MALLOC 101 SQLITE_64BIT_STATS 102 SQLITE_ALLOW_URI_AUTHORITY 103 SQLITE_BUG_COMPATIBLE_20160819 104 SQLITE_CASE_SENSITIVE_LIKE 105 SQLITE_CHECK_PAGES 106 SQLITE_COVERAGE_TEST 107 SQLITE_DEBUG 108 SQLITE_DEFAULT_AUTOMATIC_INDEX 109 SQLITE_DEFAULT_AUTOVACUUM 110 SQLITE_DEFAULT_CKPTFULLFSYNC 111 SQLITE_DEFAULT_FOREIGN_KEYS 112 SQLITE_DEFAULT_LOCKING_MODE 113 SQLITE_DEFAULT_RECURSIVE_TRIGGERS 114 SQLITE_DEFAULT_SYNCHRONOUS 115 SQLITE_DEFAULT_WAL_SYNCHRONOUS 116 SQLITE_DIRECT_OVERFLOW_READ 117 SQLITE_DISABLE_DIRSYNC 118 SQLITE_DISABLE_FTS3_UNICODE 119 SQLITE_DISABLE_FTS4_DEFERRED 120 SQLITE_DISABLE_INTRINSIC 121 SQLITE_DISABLE_LFS 122 SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS 123 SQLITE_DISABLE_SKIPAHEAD_DISTINCT 124 SQLITE_ENABLE_8_3_NAMES 125 SQLITE_ENABLE_API_ARMOR 126 SQLITE_ENABLE_ATOMIC_WRITE 127 SQLITE_ENABLE_BATCH_ATOMIC_WRITE 128 SQLITE_ENABLE_BYTECODE_VTAB 129 SQLITE_ENABLE_COLUMN_METADATA 130 SQLITE_ENABLE_COLUMN_USED_MASK 131 SQLITE_ENABLE_COSTMULT 132 SQLITE_ENABLE_CURSOR_HINTS 133 SQLITE_ENABLE_DBPAGE_VTAB 134 SQLITE_ENABLE_DBSTAT_VTAB 135 SQLITE_ENABLE_EXPENSIVE_ASSERT 136 SQLITE_ENABLE_EXPLAIN_COMMENTS 137 SQLITE_ENABLE_FTS3 138 SQLITE_ENABLE_FTS3_PARENTHESIS 139 SQLITE_ENABLE_FTS3_TOKENIZER 140 SQLITE_ENABLE_FTS4 141 SQLITE_ENABLE_FTS5 142 SQLITE_ENABLE_GEOPOLY 143 SQLITE_ENABLE_HIDDEN_COLUMNS 144 SQLITE_ENABLE_ICU 145 SQLITE_ENABLE_IOTRACE 146 SQLITE_ENABLE_LOAD_EXTENSION 147 SQLITE_ENABLE_LOCKING_STYLE 148 SQLITE_ENABLE_MATH_FUNCTIONS 149 SQLITE_ENABLE_MEMORY_MANAGEMENT 150 SQLITE_ENABLE_MEMSYS3 151 SQLITE_ENABLE_MEMSYS5 152 SQLITE_ENABLE_MULTIPLEX 153 SQLITE_ENABLE_NORMALIZE 154 SQLITE_ENABLE_NULL_TRIM 155 SQLITE_ENABLE_OFFSET_SQL_FUNC 156 SQLITE_ENABLE_OVERSIZE_CELL_CHECK 157 SQLITE_ENABLE_PREUPDATE_HOOK 158 SQLITE_ENABLE_QPSG 159 SQLITE_ENABLE_RBU 160 SQLITE_ENABLE_RTREE 161 SQLITE_ENABLE_SESSION 162 SQLITE_ENABLE_SNAPSHOT 163 SQLITE_ENABLE_SORTER_REFERENCES 164 SQLITE_ENABLE_SQLLOG 165 SQLITE_ENABLE_STAT4 166 SQLITE_ENABLE_STMT_SCANSTATUS 167 SQLITE_ENABLE_STMTVTAB 168 SQLITE_ENABLE_TREETRACE 169 SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION 170 SQLITE_ENABLE_UNLOCK_NOTIFY 171 SQLITE_ENABLE_UPDATE_DELETE_LIMIT 172 SQLITE_ENABLE_URI_00_ERROR 173 SQLITE_ENABLE_VFSTRACE 174 SQLITE_ENABLE_WHERETRACE 175 SQLITE_ENABLE_ZIPVFS 176 SQLITE_EXPLAIN_ESTIMATED_ROWS 177 SQLITE_EXTRA_IFNULLROW 178 SQLITE_FTS5_ENABLE_TEST_MI 179 SQLITE_FTS5_NO_WITHOUT_ROWID 180 SQLITE_IGNORE_AFP_LOCK_ERRORS 181 SQLITE_IGNORE_FLOCK_LOCK_ERRORS 182 SQLITE_INLINE_MEMCPY 183 SQLITE_INT64_TYPE 184 SQLITE_LIKE_DOESNT_MATCH_BLOBS 185 SQLITE_LOCK_TRACE 186 SQLITE_LOG_CACHE_SPILL 187 SQLITE_MEMDEBUG 188 SQLITE_MIXED_ENDIAN_64BIT_FLOAT 189 SQLITE_MMAP_READWRITE 190 SQLITE_MUTEX_NOOP 191 SQLITE_MUTEX_OMIT 192 SQLITE_MUTEX_PTHREADS 193 SQLITE_MUTEX_W32 194 SQLITE_NEED_ERR_NAME 195 SQLITE_NO_SYNC 196 SQLITE_OMIT_ALTERTABLE 197 SQLITE_OMIT_ANALYZE 198 SQLITE_OMIT_ATTACH 199 SQLITE_OMIT_AUTHORIZATION 200 SQLITE_OMIT_AUTOINCREMENT 201 SQLITE_OMIT_AUTOINIT 202 SQLITE_OMIT_AUTOMATIC_INDEX 203 SQLITE_OMIT_AUTORESET 204 SQLITE_OMIT_AUTOVACUUM 205 SQLITE_OMIT_BETWEEN_OPTIMIZATION 206 SQLITE_OMIT_BLOB_LITERAL 207 SQLITE_OMIT_CAST 208 SQLITE_OMIT_CHECK 209 SQLITE_OMIT_COMPLETE 210 SQLITE_OMIT_COMPOUND_SELECT 211 SQLITE_OMIT_CONFLICT_CLAUSE 212 SQLITE_OMIT_CTE 213 SQLITE_OMIT_DECLTYPE 214 SQLITE_OMIT_DEPRECATED 215 SQLITE_OMIT_DESERIALIZE 216 SQLITE_OMIT_DISKIO 217 SQLITE_OMIT_EXPLAIN 218 SQLITE_OMIT_FLAG_PRAGMAS 219 SQLITE_OMIT_FLOATING_POINT 220 SQLITE_OMIT_FOREIGN_KEY 221 SQLITE_OMIT_GET_TABLE 222 SQLITE_OMIT_HEX_INTEGER 223 SQLITE_OMIT_INCRBLOB 224 SQLITE_OMIT_INTEGRITY_CHECK 225 SQLITE_OMIT_INTROSPECTION_PRAGMAS 226 SQLITE_OMIT_JSON 227 SQLITE_OMIT_LIKE_OPTIMIZATION 228 SQLITE_OMIT_LOAD_EXTENSION 229 SQLITE_OMIT_LOCALTIME 230 SQLITE_OMIT_LOOKASIDE 231 SQLITE_OMIT_MEMORYDB 232 SQLITE_OMIT_OR_OPTIMIZATION 233 SQLITE_OMIT_PAGER_PRAGMAS 234 SQLITE_OMIT_PARSER_TRACE 235 SQLITE_OMIT_POPEN 236 SQLITE_OMIT_PRAGMA 237 SQLITE_OMIT_PROGRESS_CALLBACK 238 SQLITE_OMIT_QUICKBALANCE 239 SQLITE_OMIT_REINDEX 240 SQLITE_OMIT_SCHEMA_PRAGMAS 241 SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS 242 SQLITE_OMIT_SHARED_CACHE 243 SQLITE_OMIT_SHUTDOWN_DIRECTORIES 244 SQLITE_OMIT_SUBQUERY 245 SQLITE_OMIT_TCL_VARIABLE 246 SQLITE_OMIT_TEMPDB 247 SQLITE_OMIT_TEST_CONTROL 248 SQLITE_OMIT_TRIGGER 249 SQLITE_OMIT_TRUNCATE_OPTIMIZATION 250 SQLITE_OMIT_UTF16 251 SQLITE_OMIT_VACUUM 252 SQLITE_OMIT_VIEW 253 SQLITE_OMIT_VIRTUALTABLE 254 SQLITE_OMIT_WAL 255 SQLITE_OMIT_WSD 256 SQLITE_OMIT_XFER_OPT 257 SQLITE_PERFORMANCE_TRACE 258 SQLITE_PREFER_PROXY_LOCKING 259 SQLITE_PROXY_DEBUG 260 SQLITE_REVERSE_UNORDERED_SELECTS 261 SQLITE_RTREE_INT_ONLY 262 SQLITE_SECURE_DELETE 263 SQLITE_SMALL_STACK 264 SQLITE_SOUNDEX 265 SQLITE_SUBSTR_COMPATIBILITY 266 SQLITE_TCL 267 SQLITE_TEST 268 SQLITE_UNLINK_AFTER_CLOSE 269 SQLITE_UNTESTABLE 270 SQLITE_USE_ALLOCA 271 SQLITE_USE_FCNTL_TRACE 272 SQLITE_USER_AUTHENTICATION 273 SQLITE_USE_URI 274 SQLITE_VDBE_COVERAGE 275 SQLITE_WIN32_MALLOC 276 SQLITE_ZERO_MALLOC 277} 278 279# All compile time options for which the assigned value is other than boolean 280# and is a comma-separated scalar pair. 281# 282set value2_options { 283 SQLITE_DEFAULT_LOOKASIDE 284} 285 286# All compile time options for which the assigned value is other than boolean 287# and is a single scalar. 288# 289set value_options { 290 SQLITE_ATOMIC_INTRINSICS 291 SQLITE_BITMASK_TYPE 292 SQLITE_DEFAULT_CACHE_SIZE 293 SQLITE_DEFAULT_FILE_FORMAT 294 SQLITE_DEFAULT_FILE_PERMISSIONS 295 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT 296 SQLITE_DEFAULT_LOCKING_MODE 297 SQLITE_DEFAULT_MMAP_SIZE 298 SQLITE_DEFAULT_PAGE_SIZE 299 SQLITE_DEFAULT_PCACHE_INITSZ 300 SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 301 SQLITE_DEFAULT_ROWEST 302 SQLITE_DEFAULT_SECTOR_SIZE 303 SQLITE_DEFAULT_SYNCHRONOUS 304 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT 305 SQLITE_DEFAULT_WAL_SYNCHRONOUS 306 SQLITE_DEFAULT_WORKER_THREADS 307 SQLITE_DQS 308 SQLITE_ENABLE_8_3_NAMES 309 SQLITE_ENABLE_CEROD 310 SQLITE_ENABLE_LOCKING_STYLE 311 SQLITE_EXTRA_INIT 312 SQLITE_EXTRA_SHUTDOWN 313 SQLITE_FTS3_MAX_EXPR_DEPTH 314 SQLITE_INTEGRITY_CHECK_ERROR_MAX 315 SQLITE_MALLOC_SOFT_LIMIT 316 SQLITE_MAX_ATTACHED 317 SQLITE_MAX_COLUMN 318 SQLITE_MAX_COMPOUND_SELECT 319 SQLITE_MAX_DEFAULT_PAGE_SIZE 320 SQLITE_MAX_EXPR_DEPTH 321 SQLITE_MAX_FUNCTION_ARG 322 SQLITE_MAX_LENGTH 323 SQLITE_MAX_LIKE_PATTERN_LENGTH 324 SQLITE_MAX_MEMORY 325 SQLITE_MAX_MMAP_SIZE 326 SQLITE_MAX_MMAP_SIZE_ 327 SQLITE_MAX_PAGE_COUNT 328 SQLITE_MAX_PAGE_SIZE 329 SQLITE_MAX_SCHEMA_RETRY 330 SQLITE_MAX_SQL_LENGTH 331 SQLITE_MAX_TRIGGER_DEPTH 332 SQLITE_MAX_VARIABLE_NUMBER 333 SQLITE_MAX_VDBE_OP 334 SQLITE_MAX_WORKER_THREADS 335 SQLITE_SORTER_PMASZ 336 SQLITE_STAT4_SAMPLES 337 SQLITE_STMTJRNL_SPILL 338 SQLITE_TEMP_STORE 339} 340 341# Options that require custom code. 342# 343set options(COMPILER) { 344#if defined(__clang__) && defined(__clang_major__) 345 "COMPILER=clang-" CTIMEOPT_VAL(__clang_major__) "." 346 CTIMEOPT_VAL(__clang_minor__) "." 347 CTIMEOPT_VAL(__clang_patchlevel__), 348#elif defined(_MSC_VER) 349 "COMPILER=msvc-" CTIMEOPT_VAL(_MSC_VER), 350#elif defined(__GNUC__) && defined(__VERSION__) 351 "COMPILER=gcc-" __VERSION__, 352#endif 353} 354set options(HAVE_ISNAN) { 355#if HAVE_ISNAN || SQLITE_HAVE_ISNAN 356 "HAVE_ISNAN", 357#endif 358} 359set options(OMIT_DATETIME_FUNCS) { 360#if defined(SQLITE_OMIT_DATETIME_FUNCS) || defined(SQLITE_OMIT_FLOATING_POINT) 361 "OMIT_DATETIME_FUNCS", 362#endif 363} 364set options(SYSTEM_MALLOC) "\ 365#if (!defined(SQLITE_WIN32_MALLOC) \\ 366 && !defined(SQLITE_ZERO_MALLOC) \\ 367 && !defined(SQLITE_MEMDEBUG) \\ 368 ) || defined(SQLITE_SYSTEM_MALLOC) 369 \"SYSTEM_MALLOC\", 370#endif 371" 372set options(THREADSAFE) { 373#if defined(SQLITE_THREADSAFE) 374 "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE), 375#elif defined(THREADSAFE) 376 "THREADSAFE=" CTIMEOPT_VAL(THREADSAFE), 377#else 378 "THREADSAFE=1", 379#endif 380} 381 382proc trim_name {in} { 383 set ret $in 384 if {[string range $in 0 6]=="SQLITE_"} { 385 set ret [string range $in 7 end] 386 } 387 return $ret 388} 389 390foreach name_defval $boolean_defnnz_options { 391 set b [lindex $name_defval 0] 392 set defval [lindex $name_defval 1] 393 set name [trim_name $b] 394 set options($name) [subst { 395#ifdef $b 396# if $b != $defval 397 "$name=" CTIMEOPT_VAL($b), 398# endif 399#endif 400}] 401} 402 403foreach b $boolean_defnil_options { 404 set name [trim_name $b] 405 set options($name) [subst { 406#ifdef $b 407 "$name", 408#endif 409}] 410} 411 412foreach v $value_options { 413 set name [trim_name $v] 414 set options($name) [subst { 415#ifdef $v 416 "$name=" CTIMEOPT_VAL($v), 417#endif 418}] 419} 420 421foreach v $value2_options { 422 set name [trim_name $v] 423 set options($name) [subst { 424#ifdef $v 425 "$name=" CTIMEOPT_VAL2($v), 426#endif 427}] 428} 429 430set ctime_c "src/ctime.c" 431 432if {[catch {set cfd [open $ctime_c w]}]!=0} { 433 puts stderr "File '$ctime_c' unwritable." 434 exit 1; 435} 436 437puts $cfd $::headWarning; 438puts $cfd $::headCode; 439foreach o [lsort [array names options]] { 440 puts $cfd [string trim $options($o)] 441} 442puts -nonewline $cfd $::tailCode; 443 444close $cfd 445