blob: 1120bc131616f5fc60f92527530007d748849c0b [file] [log] [blame]
danda1f49b2017-06-16 19:51:47 +00001#!/usr/bin/tclsh
2#
3# To build the
4#
5# const char **azCompileOpt[]
6#
larrybrcf5ad422021-04-15 23:43:25 +00007# definition used in src/ctime.c, run this script from
larrybr04f97602022-01-12 01:42:50 +00008# the checkout root. It generates src/ctime.c .
danda1f49b2017-06-16 19:51:47 +00009#
10
larrybr04f97602022-01-12 01:42:50 +000011
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 \"config.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
larrybrcf5ad422021-04-15 23:43:25 +000084# 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.
danda1f49b2017-06-16 19:51:47 +000087#
larrybrcf5ad422021-04-15 23:43:25 +000088set boolean_defnnz_options {
89 {SQLITE_HOMEGROWN_RECURSIVE_MUTEX 1}
larrybrcf5ad422021-04-15 23:43:25 +000090 {SQLITE_POWERSAFE_OVERWRITE 1}
91 {SQLITE_DEFAULT_MEMSTATUS 1}
larrybrcf5ad422021-04-15 23:43:25 +000092 {SQLITE_OMIT_TRACE 1}
larrybrcf5ad422021-04-15 23:43:25 +000093 {SQLITE_ALLOW_COVERING_INDEX_SCAN 1}
larrybrcf5ad422021-04-15 23:43:25 +000094}
95
96# All Boolean compile time options which default to 0 or empty.
97#
98set boolean_defnil_options {
danda1f49b2017-06-16 19:51:47 +000099 SQLITE_32BIT_ROWID
100 SQLITE_4_BYTE_ALIGNED_MALLOC
101 SQLITE_64BIT_STATS
danda1f49b2017-06-16 19:51:47 +0000102 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
danda1f49b2017-06-16 19:51:47 +0000113 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
larrybrf8fb27f2021-04-15 00:26:34 +0000127 SQLITE_ENABLE_BATCH_ATOMIC_WRITE
128 SQLITE_ENABLE_BYTECODE_VTAB
danda1f49b2017-06-16 19:51:47 +0000129 SQLITE_ENABLE_COLUMN_METADATA
130 SQLITE_ENABLE_COLUMN_USED_MASK
131 SQLITE_ENABLE_COSTMULT
132 SQLITE_ENABLE_CURSOR_HINTS
larrybrf8fb27f2021-04-15 00:26:34 +0000133 SQLITE_ENABLE_DBPAGE_VTAB
danda1f49b2017-06-16 19:51:47 +0000134 SQLITE_ENABLE_DBSTAT_VTAB
135 SQLITE_ENABLE_EXPENSIVE_ASSERT
larrybrf8fb27f2021-04-15 00:26:34 +0000136 SQLITE_ENABLE_EXPLAIN_COMMENTS
danda1f49b2017-06-16 19:51:47 +0000137 SQLITE_ENABLE_FTS3
138 SQLITE_ENABLE_FTS3_PARENTHESIS
139 SQLITE_ENABLE_FTS3_TOKENIZER
140 SQLITE_ENABLE_FTS4
141 SQLITE_ENABLE_FTS5
larrybrf8fb27f2021-04-15 00:26:34 +0000142 SQLITE_ENABLE_GEOPOLY
danda1f49b2017-06-16 19:51:47 +0000143 SQLITE_ENABLE_HIDDEN_COLUMNS
144 SQLITE_ENABLE_ICU
145 SQLITE_ENABLE_IOTRACE
danda1f49b2017-06-16 19:51:47 +0000146 SQLITE_ENABLE_LOAD_EXTENSION
147 SQLITE_ENABLE_LOCKING_STYLE
larrybrf8fb27f2021-04-15 00:26:34 +0000148 SQLITE_ENABLE_MATH_FUNCTIONS
danda1f49b2017-06-16 19:51:47 +0000149 SQLITE_ENABLE_MEMORY_MANAGEMENT
150 SQLITE_ENABLE_MEMSYS3
151 SQLITE_ENABLE_MEMSYS5
152 SQLITE_ENABLE_MULTIPLEX
larrybrf8fb27f2021-04-15 00:26:34 +0000153 SQLITE_ENABLE_NORMALIZE
danda1f49b2017-06-16 19:51:47 +0000154 SQLITE_ENABLE_NULL_TRIM
larrybrf8fb27f2021-04-15 00:26:34 +0000155 SQLITE_ENABLE_OFFSET_SQL_FUNC
danda1f49b2017-06-16 19:51:47 +0000156 SQLITE_ENABLE_OVERSIZE_CELL_CHECK
157 SQLITE_ENABLE_PREUPDATE_HOOK
larrybrf8fb27f2021-04-15 00:26:34 +0000158 SQLITE_ENABLE_QPSG
danda1f49b2017-06-16 19:51:47 +0000159 SQLITE_ENABLE_RBU
160 SQLITE_ENABLE_RTREE
danda1f49b2017-06-16 19:51:47 +0000161 SQLITE_ENABLE_SESSION
162 SQLITE_ENABLE_SNAPSHOT
larrybrf8fb27f2021-04-15 00:26:34 +0000163 SQLITE_ENABLE_SORTER_REFERENCES
danda1f49b2017-06-16 19:51:47 +0000164 SQLITE_ENABLE_SQLLOG
larrybrf8fb27f2021-04-15 00:26:34 +0000165 SQLITE_ENABLE_STAT4
danda1f49b2017-06-16 19:51:47 +0000166 SQLITE_ENABLE_STMT_SCANSTATUS
larrybrf8fb27f2021-04-15 00:26:34 +0000167 SQLITE_ENABLE_STMTVTAB
drh8f1eb6f2022-04-06 12:25:04 +0000168 SQLITE_ENABLE_TREETRACE
danda1f49b2017-06-16 19:51:47 +0000169 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
danda1f49b2017-06-16 19:51:47 +0000180 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
danda1f49b2017-06-16 19:51:47 +0000191 SQLITE_MUTEX_OMIT
192 SQLITE_MUTEX_PTHREADS
193 SQLITE_MUTEX_W32
194 SQLITE_NEED_ERR_NAME
danda1f49b2017-06-16 19:51:47 +0000195 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
danda1f49b2017-06-16 19:51:47 +0000207 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
danda1f49b2017-06-16 19:51:47 +0000213 SQLITE_OMIT_DECLTYPE
214 SQLITE_OMIT_DEPRECATED
larrybr14e250a2021-05-19 20:01:53 +0000215 SQLITE_OMIT_DESERIALIZE
danda1f49b2017-06-16 19:51:47 +0000216 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
larrybrf8fb27f2021-04-15 00:26:34 +0000225 SQLITE_OMIT_INTROSPECTION_PRAGMAS
drhc5432c42022-01-12 00:52:34 +0000226 SQLITE_OMIT_JSON
danda1f49b2017-06-16 19:51:47 +0000227 SQLITE_OMIT_LIKE_OPTIMIZATION
larrybr5ae13142021-04-16 10:25:54 +0000228 SQLITE_OMIT_LOAD_EXTENSION
danda1f49b2017-06-16 19:51:47 +0000229 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
danda1f49b2017-06-16 19:51:47 +0000248 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
danda1f49b2017-06-16 19:51:47 +0000257 SQLITE_PERFORMANCE_TRACE
danda1f49b2017-06-16 19:51:47 +0000258 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
danda1f49b2017-06-16 19:51:47 +0000266 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
larrybrf8fb27f2021-04-15 00:26:34 +0000279# 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.
danda1f49b2017-06-16 19:51:47 +0000288#
289set value_options {
drha612c1c2021-07-05 18:37:37 +0000290 SQLITE_ATOMIC_INTRINSICS
danda1f49b2017-06-16 19:51:47 +0000291 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
danda1f49b2017-06-16 19:51:47 +0000297 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_ENABLE_8_3_NAMES
larrybrf8fb27f2021-04-15 00:26:34 +0000308 SQLITE_ENABLE_CEROD
danda1f49b2017-06-16 19:51:47 +0000309 SQLITE_ENABLE_LOCKING_STYLE
310 SQLITE_EXTRA_INIT
311 SQLITE_EXTRA_SHUTDOWN
312 SQLITE_FTS3_MAX_EXPR_DEPTH
313 SQLITE_INTEGRITY_CHECK_ERROR_MAX
314 SQLITE_MALLOC_SOFT_LIMIT
315 SQLITE_MAX_ATTACHED
316 SQLITE_MAX_COLUMN
317 SQLITE_MAX_COMPOUND_SELECT
318 SQLITE_MAX_DEFAULT_PAGE_SIZE
319 SQLITE_MAX_EXPR_DEPTH
320 SQLITE_MAX_FUNCTION_ARG
321 SQLITE_MAX_LENGTH
322 SQLITE_MAX_LIKE_PATTERN_LENGTH
323 SQLITE_MAX_MEMORY
324 SQLITE_MAX_MMAP_SIZE
325 SQLITE_MAX_MMAP_SIZE_
326 SQLITE_MAX_PAGE_COUNT
327 SQLITE_MAX_PAGE_SIZE
328 SQLITE_MAX_SCHEMA_RETRY
329 SQLITE_MAX_SQL_LENGTH
330 SQLITE_MAX_TRIGGER_DEPTH
331 SQLITE_MAX_VARIABLE_NUMBER
332 SQLITE_MAX_VDBE_OP
333 SQLITE_MAX_WORKER_THREADS
334 SQLITE_SORTER_PMASZ
335 SQLITE_STAT4_SAMPLES
336 SQLITE_STMTJRNL_SPILL
337 SQLITE_TEMP_STORE
danda1f49b2017-06-16 19:51:47 +0000338}
339
340# Options that require custom code.
341#
danda1f49b2017-06-16 19:51:47 +0000342set options(COMPILER) {
343#if defined(__clang__) && defined(__clang_major__)
344 "COMPILER=clang-" CTIMEOPT_VAL(__clang_major__) "."
345 CTIMEOPT_VAL(__clang_minor__) "."
346 CTIMEOPT_VAL(__clang_patchlevel__),
347#elif defined(_MSC_VER)
348 "COMPILER=msvc-" CTIMEOPT_VAL(_MSC_VER),
349#elif defined(__GNUC__) && defined(__VERSION__)
350 "COMPILER=gcc-" __VERSION__,
351#endif
352}
353set options(HAVE_ISNAN) {
354#if HAVE_ISNAN || SQLITE_HAVE_ISNAN
355 "HAVE_ISNAN",
356#endif
357}
larrybr5ae13142021-04-16 10:25:54 +0000358set options(OMIT_DATETIME_FUNCS) {
359#if defined(SQLITE_OMIT_DATETIME_FUNCS) || defined(SQLITE_OMIT_FLOATING_POINT)
360 "OMIT_DATETIME_FUNCS",
361#endif
362}
363set options(SYSTEM_MALLOC) "\
364#if (!defined(SQLITE_WIN32_MALLOC) \\
365 && !defined(SQLITE_ZERO_MALLOC) \\
366 && !defined(SQLITE_MEMDEBUG) \\
367 ) || defined(SQLITE_SYSTEM_MALLOC)
368 \"SYSTEM_MALLOC\",
369#endif
370"
dan814aad62017-06-17 17:29:24 +0000371set options(THREADSAFE) {
372#if defined(SQLITE_THREADSAFE)
373 "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
374#elif defined(THREADSAFE)
375 "THREADSAFE=" CTIMEOPT_VAL(THREADSAFE),
376#else
larrybrf8fb27f2021-04-15 00:26:34 +0000377 "THREADSAFE=1",
dan814aad62017-06-17 17:29:24 +0000378#endif
379}
danda1f49b2017-06-16 19:51:47 +0000380
381proc trim_name {in} {
382 set ret $in
383 if {[string range $in 0 6]=="SQLITE_"} {
384 set ret [string range $in 7 end]
385 }
386 return $ret
387}
388
larrybrcf5ad422021-04-15 23:43:25 +0000389foreach name_defval $boolean_defnnz_options {
390 set b [lindex $name_defval 0]
391 set defval [lindex $name_defval 1]
392 set name [trim_name $b]
393 set options($name) [subst {
394#ifdef $b
395# if $b != $defval
396 "$name=" CTIMEOPT_VAL($b),
397# endif
398#endif
399}]
400}
401
402foreach b $boolean_defnil_options {
danda1f49b2017-06-16 19:51:47 +0000403 set name [trim_name $b]
404 set options($name) [subst {
drha612c1c2021-07-05 18:37:37 +0000405#ifdef $b
danda1f49b2017-06-16 19:51:47 +0000406 "$name",
407#endif
408}]
409}
410
411foreach v $value_options {
412 set name [trim_name $v]
413 set options($name) [subst {
414#ifdef $v
415 "$name=" CTIMEOPT_VAL($v),
416#endif
417}]
418}
larrybrf8fb27f2021-04-15 00:26:34 +0000419
420foreach v $value2_options {
421 set name [trim_name $v]
422 set options($name) [subst {
423#ifdef $v
424 "$name=" CTIMEOPT_VAL2($v),
425#endif
426}]
427}
danda1f49b2017-06-16 19:51:47 +0000428
larrybrf8fb27f2021-04-15 00:26:34 +0000429set ctime_c "src/ctime.c"
larrybrf8fb27f2021-04-15 00:26:34 +0000430
431if {[catch {set cfd [open $ctime_c w]}]!=0} {
432 puts stderr "File '$ctime_c' unwritable."
433 exit 1;
434}
435
larrybr04f97602022-01-12 01:42:50 +0000436puts $cfd $::headWarning;
437puts $cfd $::headCode;
larrybrf8fb27f2021-04-15 00:26:34 +0000438foreach o [lsort [array names options]] {
439 puts $cfd [string trim $options($o)]
440}
larrybr04f97602022-01-12 01:42:50 +0000441puts -nonewline $cfd $::tailCode;
larrybrf8fb27f2021-04-15 00:26:34 +0000442
443close $cfd