5 # const char **azCompileOpt[]
7 # definition used in src/ctime.c, run this script from
8 # the checkout root. It alters src/ctime.c in-place.
11 # All Boolean compile time options which default to something
12 # other than 0 or empty. The default is paired with the PP
13 # symbol so that a differing define can be detected.
15 set boolean_defnnz_options
{
16 {SQLITE_HOMEGROWN_RECURSIVE_MUTEX
1}
17 {SQLITE_POWERSAFE_OVERWRITE
1}
18 {SQLITE_DEFAULT_MEMSTATUS
1}
20 {SQLITE_ALLOW_COVERING_INDEX_SCAN
1}
23 # All Boolean compile time options which default to 0 or empty.
25 set boolean_defnil_options
{
27 SQLITE_4_BYTE_ALIGNED_MALLOC
29 SQLITE_ALLOW_URI_AUTHORITY
30 SQLITE_BUG_COMPATIBLE_20160819
31 SQLITE_CASE_SENSITIVE_LIKE
35 SQLITE_DEFAULT_AUTOMATIC_INDEX
36 SQLITE_DEFAULT_AUTOVACUUM
37 SQLITE_DEFAULT_CKPTFULLFSYNC
38 SQLITE_DEFAULT_FOREIGN_KEYS
39 SQLITE_DEFAULT_LOCKING_MODE
40 SQLITE_DEFAULT_RECURSIVE_TRIGGERS
41 SQLITE_DEFAULT_SYNCHRONOUS
42 SQLITE_DEFAULT_WAL_SYNCHRONOUS
43 SQLITE_DIRECT_OVERFLOW_READ
44 SQLITE_DISABLE_DIRSYNC
45 SQLITE_DISABLE_FTS3_UNICODE
46 SQLITE_DISABLE_FTS4_DEFERRED
47 SQLITE_DISABLE_INTRINSIC
49 SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS
50 SQLITE_DISABLE_SKIPAHEAD_DISTINCT
51 SQLITE_ENABLE_8_3_NAMES
52 SQLITE_ENABLE_API_ARMOR
53 SQLITE_ENABLE_ATOMIC_WRITE
54 SQLITE_ENABLE_BATCH_ATOMIC_WRITE
55 SQLITE_ENABLE_BYTECODE_VTAB
56 SQLITE_ENABLE_COLUMN_METADATA
57 SQLITE_ENABLE_COLUMN_USED_MASK
58 SQLITE_ENABLE_COSTMULT
59 SQLITE_ENABLE_CURSOR_HINTS
60 SQLITE_ENABLE_DBPAGE_VTAB
61 SQLITE_ENABLE_DBSTAT_VTAB
62 SQLITE_ENABLE_EXPENSIVE_ASSERT
63 SQLITE_ENABLE_EXPLAIN_COMMENTS
65 SQLITE_ENABLE_FTS3_PARENTHESIS
66 SQLITE_ENABLE_FTS3_TOKENIZER
70 SQLITE_ENABLE_HIDDEN_COLUMNS
74 SQLITE_ENABLE_LOAD_EXTENSION
75 SQLITE_ENABLE_LOCKING_STYLE
76 SQLITE_ENABLE_MATH_FUNCTIONS
77 SQLITE_ENABLE_MEMORY_MANAGEMENT
80 SQLITE_ENABLE_MULTIPLEX
81 SQLITE_ENABLE_NORMALIZE
82 SQLITE_ENABLE_NULL_TRIM
83 SQLITE_ENABLE_OFFSET_SQL_FUNC
84 SQLITE_ENABLE_OVERSIZE_CELL_CHECK
85 SQLITE_ENABLE_PREUPDATE_HOOK
89 SQLITE_ENABLE_SELECTTRACE
91 SQLITE_ENABLE_SNAPSHOT
92 SQLITE_ENABLE_SORTER_REFERENCES
95 SQLITE_ENABLE_STMT_SCANSTATUS
96 SQLITE_ENABLE_STMTVTAB
97 SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
98 SQLITE_ENABLE_UNLOCK_NOTIFY
99 SQLITE_ENABLE_UPDATE_DELETE_LIMIT
100 SQLITE_ENABLE_URI_00_ERROR
101 SQLITE_ENABLE_VFSTRACE
102 SQLITE_ENABLE_WHERETRACE
104 SQLITE_EXPLAIN_ESTIMATED_ROWS
105 SQLITE_EXTRA_IFNULLROW
106 SQLITE_FTS5_ENABLE_TEST_MI
107 SQLITE_FTS5_NO_WITHOUT_ROWID
108 SQLITE_IGNORE_AFP_LOCK_ERRORS
109 SQLITE_IGNORE_FLOCK_LOCK_ERRORS
112 SQLITE_LIKE_DOESNT_MATCH_BLOBS
114 SQLITE_LOG_CACHE_SPILL
116 SQLITE_MIXED_ENDIAN_64BIT_FLOAT
117 SQLITE_MMAP_READWRITE
120 SQLITE_MUTEX_PTHREADS
125 SQLITE_OMIT_ALTERTABLE
128 SQLITE_OMIT_AUTHORIZATION
129 SQLITE_OMIT_AUTOINCREMENT
131 SQLITE_OMIT_AUTOMATIC_INDEX
132 SQLITE_OMIT_AUTORESET
133 SQLITE_OMIT_AUTOVACUUM
134 SQLITE_OMIT_BETWEEN_OPTIMIZATION
135 SQLITE_OMIT_BLOB_LITERAL
139 SQLITE_OMIT_COMPOUND_SELECT
140 SQLITE_OMIT_CONFLICT_CLAUSE
143 SQLITE_OMIT_DEPRECATED
144 SQLITE_OMIT_DESERIALIZE
147 SQLITE_OMIT_FLAG_PRAGMAS
148 SQLITE_OMIT_FLOATING_POINT
149 SQLITE_OMIT_FOREIGN_KEY
150 SQLITE_OMIT_GET_TABLE
151 SQLITE_OMIT_HEX_INTEGER
153 SQLITE_OMIT_INTEGRITY_CHECK
154 SQLITE_OMIT_INTROSPECTION_PRAGMAS
155 SQLITE_OMIT_LIKE_OPTIMIZATION
156 SQLITE_OMIT_LOAD_EXTENSION
157 SQLITE_OMIT_LOCALTIME
158 SQLITE_OMIT_LOOKASIDE
160 SQLITE_OMIT_OR_OPTIMIZATION
161 SQLITE_OMIT_PAGER_PRAGMAS
162 SQLITE_OMIT_PARSER_TRACE
165 SQLITE_OMIT_PROGRESS_CALLBACK
166 SQLITE_OMIT_QUICKBALANCE
168 SQLITE_OMIT_SCHEMA_PRAGMAS
169 SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
170 SQLITE_OMIT_SHARED_CACHE
171 SQLITE_OMIT_SHUTDOWN_DIRECTORIES
173 SQLITE_OMIT_TCL_VARIABLE
175 SQLITE_OMIT_TEST_CONTROL
177 SQLITE_OMIT_TRUNCATE_OPTIMIZATION
181 SQLITE_OMIT_VIRTUALTABLE
185 SQLITE_PCACHE_SEPARATE_HEADER
186 SQLITE_PERFORMANCE_TRACE
187 SQLITE_PREFER_PROXY_LOCKING
189 SQLITE_REVERSE_UNORDERED_SELECTS
190 SQLITE_RTREE_INT_ONLY
194 SQLITE_SUBSTR_COMPATIBILITY
197 SQLITE_UNLINK_AFTER_CLOSE
200 SQLITE_USE_FCNTL_TRACE
201 SQLITE_USER_AUTHENTICATION
208 # All compile time options for which the assigned value is other than boolean
209 # and is a comma-separated scalar pair.
212 SQLITE_DEFAULT_LOOKASIDE
215 # All compile time options for which the assigned value is other than boolean
216 # and is a single scalar.
220 SQLITE_DEFAULT_CACHE_SIZE
221 SQLITE_DEFAULT_FILE_FORMAT
222 SQLITE_DEFAULT_FILE_PERMISSIONS
223 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
224 SQLITE_DEFAULT_LOCKING_MODE
225 SQLITE_DEFAULT_MMAP_SIZE
226 SQLITE_DEFAULT_PAGE_SIZE
227 SQLITE_DEFAULT_PCACHE_INITSZ
228 SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
229 SQLITE_DEFAULT_ROWEST
230 SQLITE_DEFAULT_SECTOR_SIZE
231 SQLITE_DEFAULT_SYNCHRONOUS
232 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT
233 SQLITE_DEFAULT_WAL_SYNCHRONOUS
234 SQLITE_DEFAULT_WORKER_THREADS
235 SQLITE_ENABLE_8_3_NAMES
237 SQLITE_ENABLE_LOCKING_STYLE
239 SQLITE_EXTRA_SHUTDOWN
240 SQLITE_FTS3_MAX_EXPR_DEPTH
241 SQLITE_INTEGRITY_CHECK_ERROR_MAX
242 SQLITE_MALLOC_SOFT_LIMIT
245 SQLITE_MAX_COMPOUND_SELECT
246 SQLITE_MAX_DEFAULT_PAGE_SIZE
247 SQLITE_MAX_EXPR_DEPTH
248 SQLITE_MAX_FUNCTION_ARG
250 SQLITE_MAX_LIKE_PATTERN_LENGTH
253 SQLITE_MAX_MMAP_SIZE_
254 SQLITE_MAX_PAGE_COUNT
256 SQLITE_MAX_SCHEMA_RETRY
257 SQLITE_MAX_SQL_LENGTH
258 SQLITE_MAX_TRIGGER_DEPTH
259 SQLITE_MAX_VARIABLE_NUMBER
261 SQLITE_MAX_WORKER_THREADS
264 SQLITE_STMTJRNL_SPILL
268 # Options that require custom code.
270 set options(COMPILER
) {
271 #if defined(__clang__) && defined(__clang_major__)
272 "COMPILER=clang-" CTIMEOPT_VAL
(__clang_major__
) "."
273 CTIMEOPT_VAL
(__clang_minor__
) "."
274 CTIMEOPT_VAL
(__clang_patchlevel__
),
275 #elif defined(_MSC_VER)
276 "COMPILER=msvc-" CTIMEOPT_VAL
(_MSC_VER
),
277 #elif defined(__GNUC__) && defined(__VERSION__)
278 "COMPILER=gcc-" __VERSION__
,
281 set options(HAVE_ISNAN
) {
282 #if HAVE_ISNAN || SQLITE_HAVE_ISNAN
286 set options(OMIT_DATETIME_FUNCS
) {
287 #if defined(SQLITE_OMIT_DATETIME_FUNCS) || defined(SQLITE_OMIT_FLOATING_POINT)
288 "OMIT_DATETIME_FUNCS",
291 set options(SYSTEM_MALLOC
) "\
292 #if (!defined(SQLITE_WIN32_MALLOC) \\
293 && !defined(SQLITE_ZERO_MALLOC) \\
294 && !defined(SQLITE_MEMDEBUG) \\
295 ) || defined(SQLITE_SYSTEM_MALLOC)
299 set options(THREADSAFE
) {
300 #if defined(SQLITE_THREADSAFE)
301 "THREADSAFE=" CTIMEOPT_VAL
(SQLITE_THREADSAFE
),
302 #elif defined(THREADSAFE)
303 "THREADSAFE=" CTIMEOPT_VAL
(THREADSAFE
),
309 proc trim_name
{in
} {
311 if {[string range
$in 0 6]=="SQLITE_"} {
312 set ret
[string range
$in 7 end
]
317 foreach name_defval
$boolean_defnnz_options {
318 set b
[lindex $name_defval 0]
319 set defval
[lindex $name_defval 1]
320 set name
[trim_name
$b]
321 set options($name) [subst {
324 "$name=" CTIMEOPT_VAL
($b),
330 foreach b
$boolean_defnil_options {
331 set name
[trim_name
$b]
332 set options($name) [subst {
339 foreach v
$value_options {
340 set name
[trim_name
$v]
341 set options($name) [subst {
343 "$name=" CTIMEOPT_VAL
($v),
348 foreach v
$value2_options {
349 set name
[trim_name
$v]
350 set options($name) [subst {
352 "$name=" CTIMEOPT_VAL2
($v),
357 # Split a string on a regex, return all parts in order.
358 # Any elements with an even index may be empty.
359 # Elements with odd indices will match the regex.
360 proc split_on_re
{re str
{nrepps
1}} {
363 set resm
[regexp -all -inline -indices $re $str]
364 if {[llength $resm]==0} {
368 while {$rix < [llength $resm]} {
369 set mre
[lindex $resm $rix]
371 set mbx
[lindex $mre 0]
372 set mex
[lindex $mre 1]
373 lappend chunks
[string range
$str $cix [expr $mbx - 1]]
374 lappend chunks
[string range
$str $mbx $mex]
375 set cix
[expr $mex + 1]
377 lappend chunks
[string range
$str $cix end
]
382 set ctime_c
"src/ctime.c"
383 if {[catch {set cfd
[open $ctime_c r
]}]!=0} {
384 puts stderr
"File '$ctime_c' unreadable. Run this script from checkout root."
391 set re
{/\*\s
+\*+\s
*((BEGIN
)|
(END
)) CODE GENERATED BY
(\S
+)\s
+\*/\s
+}
394 set ctfcChunks
[split_on_re
$re $ctfc $renpp]
395 if {[llength $ctfcChunks] != 5} {
396 puts stderr
"File '$ctime_c' has too few generated code markers."
400 if {[catch {set cfd
[open $ctime_c w
]}]!=0} {
401 puts stderr
"File '$ctime_c' unwritable."
405 puts -nonewline $cfd [lindex $ctfcChunks 0]
406 puts -nonewline $cfd [lindex $ctfcChunks 1]
407 foreach o
[lsort [array names
options]] {
408 puts $cfd [string trim
$options($o)]
410 puts -nonewline $cfd [lindex $ctfcChunks 3]
411 puts -nonewline $cfd [lindex $ctfcChunks 4]