summaryrefslogtreecommitdiff
path: root/README-DEV
blob: 34435d2355d2d3915f4287a0140075d862b83c6d (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
This document describes the approach applied to packaging SQLite for build2. In
particular, this understanding will be useful when upgrading to a new upstream
version.

The upstream package contains the libsqlite3 library and the sqlite3 program
that we package separately (see the respective README-DEV files for details).

We extract the upstream package from the archive and symlink the required files
into the build2 package subdirectories.

For 3.27.2 the archive URL is
https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz. For the future
releases the URL can be deduced from the above.

The upstream package can be configured to contain a specific feature set. We
reproduce the union of features configured for the upstream source package in
Debian and Fedora distributions. The configuration options defining these sets
are specified in the Debian's rules and Fedora's RPM .spec files. Note,
however, that at the time of this writing Fedora doesn't provide the 3.27.2
package version, so we will use 3.29.0 instead. These files can be obtained as
follows:

$ wget http://deb.debian.org/debian/pool/main/s/sqlite3/sqlite3_3.27.2-3.debian.tar.xz
$ tar xf sqlite3_3.27.2-3.debian.tar.xz debian/rules

$ wget https://kojipkgs.fedoraproject.org//packages/sqlite/3.29.0/2.fc31/src/sqlite-3.29.0-2.fc31.src.rpm
$ rpm2cpio sqlite-3.29.0-2.fc31.src.rpm | cpio -civ '*.spec'

Some of the features are enabled via the preprocessor macro definitions and
others via the configure script options. Here are the discovered configuration
options.

Debian:

  -DSQLITE_SECURE_DELETE
  -DSQLITE_ENABLE_COLUMN_METADATA
  -DSQLITE_ENABLE_FTS3
  -DSQLITE_ENABLE_FTS3_PARENTHESIS
  -DSQLITE_ENABLE_RTREE=1
  -DSQLITE_SOUNDEX=1
  -DSQLITE_ENABLE_UNLOCK_NOTIFY
  -DSQLITE_OMIT_LOOKASIDE=1
  -DSQLITE_ENABLE_DBSTAT_VTAB
  -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1
  -DSQLITE_ENABLE_LOAD_EXTENSION
  -DSQLITE_ENABLE_JSON1
  -DSQLITE_LIKE_DOESNT_MATCH_BLOBS
  -DSQLITE_THREADSAFE=1
  -DSQLITE_ENABLE_FTS3_TOKENIZER=1
  -DSQLITE_USE_URI=1
  -DSQLITE_MAX_SCHEMA_RETRY=25
  -DSQLITE_ENABLE_PREUPDATE_HOOK
  -DSQLITE_ENABLE_SESSION
  -DSQLITE_ENABLE_STMTVTAB
  -DSQLITE_MAX_VARIABLE_NUMBER=250000

  --enable-threadsafe
  --enable-load-extension
  --enable-json1
  --enable-fts4
  --enable-fts5

Fedora:

  -DSQLITE_ENABLE_COLUMN_METADATA=1
  -DSQLITE_DISABLE_DIRSYNC=1
  -DSQLITE_ENABLE_FTS3=1
  -DSQLITE_ENABLE_RTREE=1
  -DSQLITE_SECURE_DELETE=1
  -DSQLITE_ENABLE_UNLOCK_NOTIFY=1
  -DSQLITE_ENABLE_DBSTAT_VTAB=1
  -DSQLITE_ENABLE_FTS3_PARENTHESIS=1
  -DSQLITE_ENABLE_JSON1=1

  --enable-fts5
  --enable-threadsafe
  --enable-threads-override-locks
  --enable-load-extension

Translating the configure script options into the macro definitions and adding
the unconditionally defined macros (see upstream's Makefile.am for details) we
end up with:

  -DSQLITE_ENABLE_COLUMN_METADATA=1
  -DSQLITE_ENABLE_DBPAGE_VTAB=1
  -DSQLITE_ENABLE_DBSTAT_VTAB=1
  -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1
  -DSQLITE_ENABLE_FTS3=1
  -DSQLITE_ENABLE_FTS3_PARENTHESIS=1
  -DSQLITE_ENABLE_FTS3_TOKENIZER=1
  -DSQLITE_ENABLE_FTS4=1
  -DSQLITE_ENABLE_FTS5=1
  -DSQLITE_ENABLE_JSON1=1
  -DSQLITE_ENABLE_LOAD_EXTENSION=1
  -DSQLITE_ENABLE_PREUPDATE_HOOK=1
  -DSQLITE_ENABLE_RTREE=1
  -DSQLITE_ENABLE_SESSION=1
  -DSQLITE_ENABLE_STMTVTAB=1
  -DSQLITE_ENABLE_UNLOCK_NOTIFY=1
  -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1
  -DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1
  -DSQLITE_MAX_SCHEMA_RETRY=25
  -DSQLITE_MAX_VARIABLE_NUMBER=250000
  -DSQLITE_OMIT_LOOKASIDE=1
  -DSQLITE_SECURE_DELETE=1
  -DSQLITE_SOUNDEX=1
  -DSQLITE_THREADSAFE=1
  -DSQLITE_USE_URI=1

As a side note, on Debian and Fedora the library, headers and program are
packaged as follows:

                libsqlite3   headers        sqlite3
Debian/Ubuntu:  libsqlite3-0 libsqlite3-dev sqlite3
Fedora/RHEL:    sqlite-libs  sqlite-devel   sqlite

Search for the Debian and Fedora packages at https://packages.debian.org/search
and https://apps.fedoraproject.org/packages/.