1#!/usr/bin/tclsh
2#
3# To build the
4#
5#   const char **azCompileOpt[]
6#
7# declaration used in src/ctime.c, run this script.
8#
9
10# All Boolean compile time options.
11#
12set boolean_options {
13  SQLITE_32BIT_ROWID
14  SQLITE_4_BYTE_ALIGNED_MALLOC
15  SQLITE_64BIT_STATS
16  SQLITE_ALLOW_COVERING_INDEX_SCAN
17  SQLITE_ALLOW_URI_AUTHORITY
18  SQLITE_BUG_COMPATIBLE_20160819
19  SQLITE_CASE_SENSITIVE_LIKE
20  SQLITE_CHECK_PAGES
21  SQLITE_COVERAGE_TEST
22  SQLITE_DEBUG
23  SQLITE_DEFAULT_AUTOMATIC_INDEX
24  SQLITE_DEFAULT_AUTOVACUUM
25  SQLITE_DEFAULT_CKPTFULLFSYNC
26  SQLITE_DEFAULT_FOREIGN_KEYS
27  SQLITE_DEFAULT_LOCKING_MODE
28  SQLITE_DEFAULT_MEMSTATUS
29  SQLITE_DEFAULT_RECURSIVE_TRIGGERS
30  SQLITE_DEFAULT_SYNCHRONOUS
31  SQLITE_DEFAULT_WAL_SYNCHRONOUS
32  SQLITE_DIRECT_OVERFLOW_READ
33  SQLITE_DISABLE_DIRSYNC
34  SQLITE_DISABLE_FTS3_UNICODE
35  SQLITE_DISABLE_FTS4_DEFERRED
36  SQLITE_DISABLE_INTRINSIC
37  SQLITE_DISABLE_LFS
38  SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS
39  SQLITE_DISABLE_SKIPAHEAD_DISTINCT
40  SQLITE_ENABLE_8_3_NAMES
41  SQLITE_ENABLE_API_ARMOR
42  SQLITE_ENABLE_ATOMIC_WRITE
43  SQLITE_ENABLE_CEROD
44  SQLITE_ENABLE_COLUMN_METADATA
45  SQLITE_ENABLE_COLUMN_USED_MASK
46  SQLITE_ENABLE_COSTMULT
47  SQLITE_ENABLE_CURSOR_HINTS
48  SQLITE_ENABLE_DBSTAT_VTAB
49  SQLITE_ENABLE_EXPENSIVE_ASSERT
50  SQLITE_ENABLE_FTS1
51  SQLITE_ENABLE_FTS2
52  SQLITE_ENABLE_FTS3
53  SQLITE_ENABLE_FTS3_PARENTHESIS
54  SQLITE_ENABLE_FTS3_TOKENIZER
55  SQLITE_ENABLE_FTS4
56  SQLITE_ENABLE_FTS5
57  SQLITE_ENABLE_HIDDEN_COLUMNS
58  SQLITE_ENABLE_ICU
59  SQLITE_ENABLE_IOTRACE
60  SQLITE_ENABLE_JSON1
61  SQLITE_ENABLE_LOAD_EXTENSION
62  SQLITE_ENABLE_LOCKING_STYLE
63  SQLITE_ENABLE_MEMORY_MANAGEMENT
64  SQLITE_ENABLE_MEMSYS3
65  SQLITE_ENABLE_MEMSYS5
66  SQLITE_ENABLE_MULTIPLEX
67  SQLITE_ENABLE_NULL_TRIM
68  SQLITE_ENABLE_OVERSIZE_CELL_CHECK
69  SQLITE_ENABLE_PREUPDATE_HOOK
70  SQLITE_ENABLE_RBU
71  SQLITE_ENABLE_RTREE
72  SQLITE_ENABLE_SELECTTRACE
73  SQLITE_ENABLE_SESSION
74  SQLITE_ENABLE_SNAPSHOT
75  SQLITE_ENABLE_SQLLOG
76  SQLITE_ENABLE_STMT_SCANSTATUS
77  SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
78  SQLITE_ENABLE_UNLOCK_NOTIFY
79  SQLITE_ENABLE_UPDATE_DELETE_LIMIT
80  SQLITE_ENABLE_URI_00_ERROR
81  SQLITE_ENABLE_VFSTRACE
82  SQLITE_ENABLE_WHERETRACE
83  SQLITE_ENABLE_ZIPVFS
84  SQLITE_EXPLAIN_ESTIMATED_ROWS
85  SQLITE_EXTRA_IFNULLROW
86  SQLITE_FTS5_ENABLE_TEST_MI
87  SQLITE_FTS5_NO_WITHOUT_ROWID
88  SQLITE_HAS_CODEC
89  SQLITE_HOMEGROWN_RECURSIVE_MUTEX
90  SQLITE_IGNORE_AFP_LOCK_ERRORS
91  SQLITE_IGNORE_FLOCK_LOCK_ERRORS
92  SQLITE_INLINE_MEMCPY
93  SQLITE_INT64_TYPE
94  SQLITE_LIKE_DOESNT_MATCH_BLOBS
95  SQLITE_LOCK_TRACE
96  SQLITE_LOG_CACHE_SPILL
97  SQLITE_MEMDEBUG
98  SQLITE_MIXED_ENDIAN_64BIT_FLOAT
99  SQLITE_MMAP_READWRITE
100  SQLITE_MUTEX_NOOP
101  SQLITE_MUTEX_NREF
102  SQLITE_MUTEX_OMIT
103  SQLITE_MUTEX_PTHREADS
104  SQLITE_MUTEX_W32
105  SQLITE_NEED_ERR_NAME
106  SQLITE_NOINLINE
107  SQLITE_NO_SYNC
108  SQLITE_OMIT_ALTERTABLE
109  SQLITE_OMIT_ANALYZE
110  SQLITE_OMIT_ATTACH
111  SQLITE_OMIT_AUTHORIZATION
112  SQLITE_OMIT_AUTOINCREMENT
113  SQLITE_OMIT_AUTOINIT
114  SQLITE_OMIT_AUTOMATIC_INDEX
115  SQLITE_OMIT_AUTORESET
116  SQLITE_OMIT_AUTOVACUUM
117  SQLITE_OMIT_BETWEEN_OPTIMIZATION
118  SQLITE_OMIT_BLOB_LITERAL
119  SQLITE_OMIT_BTREECOUNT
120  SQLITE_OMIT_CAST
121  SQLITE_OMIT_CHECK
122  SQLITE_OMIT_COMPLETE
123  SQLITE_OMIT_COMPOUND_SELECT
124  SQLITE_OMIT_CONFLICT_CLAUSE
125  SQLITE_OMIT_CTE
126  SQLITE_OMIT_DATETIME_FUNCS
127  SQLITE_OMIT_DECLTYPE
128  SQLITE_OMIT_DEPRECATED
129  SQLITE_OMIT_DISKIO
130  SQLITE_OMIT_EXPLAIN
131  SQLITE_OMIT_FLAG_PRAGMAS
132  SQLITE_OMIT_FLOATING_POINT
133  SQLITE_OMIT_FOREIGN_KEY
134  SQLITE_OMIT_GET_TABLE
135  SQLITE_OMIT_HEX_INTEGER
136  SQLITE_OMIT_INCRBLOB
137  SQLITE_OMIT_INTEGRITY_CHECK
138  SQLITE_OMIT_LIKE_OPTIMIZATION
139  SQLITE_OMIT_LOAD_EXTENSION
140  SQLITE_OMIT_LOCALTIME
141  SQLITE_OMIT_LOOKASIDE
142  SQLITE_OMIT_MEMORYDB
143  SQLITE_OMIT_OR_OPTIMIZATION
144  SQLITE_OMIT_PAGER_PRAGMAS
145  SQLITE_OMIT_PARSER_TRACE
146  SQLITE_OMIT_POPEN
147  SQLITE_OMIT_PRAGMA
148  SQLITE_OMIT_PROGRESS_CALLBACK
149  SQLITE_OMIT_QUICKBALANCE
150  SQLITE_OMIT_REINDEX
151  SQLITE_OMIT_SCHEMA_PRAGMAS
152  SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
153  SQLITE_OMIT_SHARED_CACHE
154  SQLITE_OMIT_SHUTDOWN_DIRECTORIES
155  SQLITE_OMIT_SUBQUERY
156  SQLITE_OMIT_TCL_VARIABLE
157  SQLITE_OMIT_TEMPDB
158  SQLITE_OMIT_TEST_CONTROL
159  SQLITE_OMIT_TRACE
160  SQLITE_OMIT_TRIGGER
161  SQLITE_OMIT_TRUNCATE_OPTIMIZATION
162  SQLITE_OMIT_UTF16
163  SQLITE_OMIT_VACUUM
164  SQLITE_OMIT_VIEW
165  SQLITE_OMIT_VIRTUALTABLE
166  SQLITE_OMIT_WAL
167  SQLITE_OMIT_WSD
168  SQLITE_OMIT_XFER_OPT
169  SQLITE_PCACHE_SEPARATE_HEADER
170  SQLITE_PERFORMANCE_TRACE
171  SQLITE_POWERSAFE_OVERWRITE
172  SQLITE_PREFER_PROXY_LOCKING
173  SQLITE_PROXY_DEBUG
174  SQLITE_REVERSE_UNORDERED_SELECTS
175  SQLITE_RTREE_INT_ONLY
176  SQLITE_SECURE_DELETE
177  SQLITE_SMALL_STACK
178  SQLITE_SOUNDEX
179  SQLITE_SUBSTR_COMPATIBILITY
180  SQLITE_SYSTEM_MALLOC
181  SQLITE_TCL
182  SQLITE_TEST
183  SQLITE_UNLINK_AFTER_CLOSE
184  SQLITE_UNTESTABLE
185  SQLITE_USE_ALLOCA
186  SQLITE_USE_FCNTL_TRACE
187  SQLITE_USER_AUTHENTICATION
188  SQLITE_USE_URI
189  SQLITE_VDBE_COVERAGE
190  SQLITE_WIN32_MALLOC
191  SQLITE_ZERO_MALLOC
192}
193
194# All compile time options for which the assigned value is other than boolean.
195#
196set value_options {
197  SQLITE_BITMASK_TYPE
198  SQLITE_DEFAULT_CACHE_SIZE
199  SQLITE_DEFAULT_FILE_FORMAT
200  SQLITE_DEFAULT_FILE_PERMISSIONS
201  SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
202  SQLITE_DEFAULT_LOCKING_MODE
203  SQLITE_DEFAULT_LOOKASIDE
204  SQLITE_DEFAULT_MMAP_SIZE
205  SQLITE_DEFAULT_PAGE_SIZE
206  SQLITE_DEFAULT_PCACHE_INITSZ
207  SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
208  SQLITE_DEFAULT_ROWEST
209  SQLITE_DEFAULT_SECTOR_SIZE
210  SQLITE_DEFAULT_SYNCHRONOUS
211  SQLITE_DEFAULT_WAL_AUTOCHECKPOINT
212  SQLITE_DEFAULT_WAL_SYNCHRONOUS
213  SQLITE_DEFAULT_WORKER_THREADS
214  SQLITE_ENABLE_8_3_NAMES
215  SQLITE_ENABLE_LOCKING_STYLE
216  SQLITE_EXTRA_INIT
217  SQLITE_EXTRA_SHUTDOWN
218  SQLITE_FTS3_MAX_EXPR_DEPTH
219  SQLITE_INTEGRITY_CHECK_ERROR_MAX
220  SQLITE_MALLOC_SOFT_LIMIT
221  SQLITE_MAX_ATTACHED
222  SQLITE_MAX_COLUMN
223  SQLITE_MAX_COMPOUND_SELECT
224  SQLITE_MAX_DEFAULT_PAGE_SIZE
225  SQLITE_MAX_EXPR_DEPTH
226  SQLITE_MAX_FUNCTION_ARG
227  SQLITE_MAX_LENGTH
228  SQLITE_MAX_LIKE_PATTERN_LENGTH
229  SQLITE_MAX_MEMORY
230  SQLITE_MAX_MMAP_SIZE
231  SQLITE_MAX_MMAP_SIZE_
232  SQLITE_MAX_PAGE_COUNT
233  SQLITE_MAX_PAGE_SIZE
234  SQLITE_MAX_SCHEMA_RETRY
235  SQLITE_MAX_SQL_LENGTH
236  SQLITE_MAX_TRIGGER_DEPTH
237  SQLITE_MAX_VARIABLE_NUMBER
238  SQLITE_MAX_VDBE_OP
239  SQLITE_MAX_WORKER_THREADS
240  SQLITE_SORTER_PMASZ
241  SQLITE_STAT4_SAMPLES
242  SQLITE_STMTJRNL_SPILL
243  SQLITE_TEMP_STORE
244}
245
246# Options that require custom code.
247#
248set options(ENABLE_STAT3) {
249#if defined(SQLITE_ENABLE_STAT4)
250  "ENABLE_STAT4",
251#elif defined(SQLITE_ENABLE_STAT3)
252  "ENABLE_STAT3",
253#endif
254}
255set options(COMPILER) {
256#if defined(__clang__) && defined(__clang_major__)
257  "COMPILER=clang-" CTIMEOPT_VAL(__clang_major__) "."
258                    CTIMEOPT_VAL(__clang_minor__) "."
259                    CTIMEOPT_VAL(__clang_patchlevel__),
260#elif defined(_MSC_VER)
261  "COMPILER=msvc-" CTIMEOPT_VAL(_MSC_VER),
262#elif defined(__GNUC__) && defined(__VERSION__)
263  "COMPILER=gcc-" __VERSION__,
264#endif
265}
266set options(HAVE_ISNAN) {
267#if HAVE_ISNAN || SQLITE_HAVE_ISNAN
268  "HAVE_ISNAN",
269#endif
270}
271set options(THREADSAFE) {
272#if defined(SQLITE_THREADSAFE)
273  "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
274#elif defined(THREADSAFE)
275  "THREADSAFE=" CTIMEOPT_VAL(THREADSAFE),
276#else
277  "THREADSAFE=1"
278#endif
279}
280
281proc trim_name {in} {
282  set ret $in
283  if {[string range $in 0 6]=="SQLITE_"} {
284    set ret [string range $in 7 end]
285  }
286  return $ret
287}
288
289foreach b $boolean_options {
290  set name [trim_name $b]
291  set options($name) [subst {
292#if $b
293  "$name",
294#endif
295}]
296}
297
298foreach v $value_options {
299  set name [trim_name $v]
300  set options($name) [subst {
301#ifdef $v
302  "$name=" CTIMEOPT_VAL($v),
303#endif
304}]
305}
306
307foreach o [lsort [array names options]] {
308  puts [string trim $options($o)]
309}
310
311
312