summaryrefslogtreecommitdiff
path: root/sqlite3/buildfile
blob: 98c0ee62ad0cccc3e7d8f792901750e557a1cbc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# file      : sqlite3/buildfile
# copyright : not copyrighted - public domain

lib{sqlite3}: {h c}{sqlite3} h{sqlite3ext}

# For pre-releases use the complete version to make sure they cannot be used
# in place of another pre-release or the final version.
#
if $abi_prerelease
  lib{sqlite3}: bin.lib.version = @-$version
else
  lib{sqlite3}: bin.lib.version = @-$abi_major.$abi_minor

# The set of features we enable by default is inspired by Debian, Fedora, and
# the official documentation.
#
# Note that we "prefix" them to what might have been specified by the user so
# that it is possible to override the defaults by specifying them as =0 (it's
# also the reason we use cc.* instead of c.*, the former comes first).
#
# PREUPDATE_HOOK is required by SESSION
#
# -DSQLITE_ENABLE_SESSION=1 removed due to bug in 3.14.1.
#
cc.poptions =+ \
-DSQLITE_THREADSAFE=1 \
-DSQLITE_ENABLE_FTS4=1 \
-DSQLITE_ENABLE_FTS5=1 \
-DSQLITE_ENABLE_RTREE=1 \
-DSQLITE_ENABLE_JSON1=1 \
-DSQLITE_SECURE_DELETE=1 \
-DSQLITE_ENABLE_DBSTAT_VTAB=1 \
-DSQLITE_ENABLE_UNLOCK_NOTIFY=1 \
-DSQLITE_ENABLE_LOAD_EXTENSION=1 \
-DSQLITE_ENABLE_PREUPDATE_HOOK=1 \
-DSQLITE_ENABLE_COLUMN_METADATA=1 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS=1

c.poptions += -I$src_base

if ($c.target.class != "windows")
{
  cc.poptions =+ -DHAVE_USLEEP=1

  # SQLITE_THREADSAFE requres -lpthread
  # SQLITE_ENABLE_LOAD_EXTENSION requires -ldl
  # SQLITE_ENABLE_FTS5 requires -lm (calls log(1))
  #
  # You may be wondering why we didn't import them instead. While it would be
  # almost equivalent, there is a subtle difference: if we import them, then
  # build2 will start selecting static/shared libraries and we probably don't
  # want that here. These libraries are in a sense an extension of -lc and we
  # want them to be linked in the same way as -lc (e.g., the user will have to
  # specify -static to force static linking and so on).
  #
  # We also assume these are implementation dependencies (so there is no
  # c.export.libs listing them).
  #
  c.libs += -lpthread -ldl -lm
}

# Both Debian and Fedora add this so gotta be important.
#
if ($c.id != "msvc")
  c.coptions += -fno-strict-aliasing

# It would have been cleaner to handle this in a header but that will require
# modifying sqlite3.h. Note that this is also sub-optimal if we are not using
# an export stub (no dllimport).
#
lib{sqlite3}: cc.export.poptions = -I$src_base

if ($c.target.class == "windows")
{
  objs{*}: c.poptions += '-DSQLITE_API=__declspec(dllexport)'
  libs{sqlite3}: cc.export.poptions += '-DSQLITE_API=__declspec(dllimport)'
}