aboutsummaryrefslogtreecommitdiff
path: root/databases/sqlite3/Makefile
blob: f68f313642a0e7651ad8ae484fa0b6bcb3941f34 (plain) (blame)
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# Created by: Ying-Chieh Liao <ijliao@FreeBSD.org>

PORTNAME=	sqlite3
DISTVERSION=	3.34.1
PORTREVISION=	1
PORTEPOCH=	1
CATEGORIES=	databases
MASTER_SITES=	https://www.sqlite.org/2021/ https://www2.sqlite.org/2021/ https://www3.sqlite.org/2021/
DISTNAME=	sqlite-src-${PORTVERSION:C/\.([[:digit:]])[[:>:]]/0\1/g:S/.//g}00

MAINTAINER=	pavelivolkov@gmail.com
COMMENT=	SQL database engine in a C library

LICENSE=	PD

USES=		libtool pathfix zip
USE_LDCONFIG=	yes

GNU_CONFIGURE=	yes
MAKE_JOBS_UNSAFE=	yes
ALL_TARGET=	all
CONFIGURE_ENV=	TCLSH_CMD="${TCLSH}"
PLIST_SUB=	TCL_VER="${TCL_VER}"

# Compilation Options For SQLite https://www.sqlite.org/compile.html
OPTIONS_DEFINE=		FTS4 URI URI_AUTHORITY METADATA \
			DIRECT_READ MEMMAN SECURE_DELETE UNLOCK_NOTIFY THREADS \
			EXTENSION ARMOR STMT DBPAGE DBSTAT FTS5 RBU NULL_TRIM \
			LIKENOTBLOB STSHELL FTS3_TOKEN UNKNOWN_SQL SORT_REF \
			NORMALIZE DQS TRUSTED_SCHEMA TCL
OPTIONS_SINGLE=		RAMT
OPTIONS_RADIO=		STAT RL
OPTIONS_GROUP=		OPT_EXT OPT_FUNC UNICODE RTREEG
OPTIONS_SUB=		yes

OPTIONS_GROUP_OPT_EXT=	JSON1 SESSION
OPTIONS_GROUP_OPT_FUNC=	OFFSET SER1 SOUNDEX

OPT_EXT_DESC=		Optional extensions
OPT_FUNC_DESC=		Optional functions
URI_DESC=		Enable use the URI filename
URI_AUTHORITY_DESC=	Allow convert URL into a UNC
SOUNDEX_DESC=		Enable the soundex() SQL function
METADATA_DESC=		Enable column metadata
DIRECT_READ_DESC=	File is read directly from disk
MEMMAN_DESC=		Allow it to release unused memory
SECURE_DELETE_DESC=	Overwrite deleted information with zeros
UNLOCK_NOTIFY_DESC=	Enable notification on unlocking
EXTENSION_DESC=		Allow loadable extensions
STSHELL_DESC=		Statically link libsqlite3 into shell
NORMALIZE_DESC=		Enable normalized sql function
TCL_DESC=		Enable tcl extension and sqlite_analyzer

# https://www.sqlite.org/compile.html#dqs
DQS_DESC=		Double-quoted String Literals

# https://sqlite.org/compile.html#enable_null_trim
NULL_TRIM_DESC=		Omits NULL columns at the ends of rows

# http://www.sqlite.org/compile.html#enable_offset_sql_func
OFFSET_DESC=		Enable sqlite_offset() returning record's file offset

# https://www.sqlite.org/compile.html#enable_deserialize
SER1_DESC=		Enable the sqlite3_[de]serialize() interface

# https://www.sqlite.org/sessionintro.html
SESSION_DESC=		Enable the session extension

# https://sqlite.org/compile.html#like_doesnt_match_blobs
LIKENOTBLOB_DESC=	LIKE does not match blobs

# https://www.sqlite.org/compile.html#enable_api_armor
ARMOR_DESC=		Detect misuse of the API

# http://sqlite.org/compile.html#enable_unknown_sql_function
UNKNOWN_SQL_DESC=	Suppress unknown function errors

# https://www.sqlite.org/fts3.html
# https://www.sqlite.org/compile.html#enable_fts3_parenthesis
FTS4_DESC=		Enable FTS3/4 (Full Text Search) module

# https://www.sqlite.org/fts5.html
FTS5_DESC=		Enable version 5 full-text search engine

# https://www.sqlite.org/compile.html#enable_fts3_tokenizer
# https://www.sqlite.org/fts3.html#f3tknzr
FTS3_TOKEN_DESC=	Enable two-args version fts3_tokenizer

# https://www.sqlite.org/json1.html
JSON1_DESC=		Enable the JSON1 extension

# https://www.sqlite.org/rbu.html
RBU_DESC=		Enable the resumable bulk update

# https://www.sqlite.org/c3ref/stmt_scanstatus.html
STMT_DESC=		Prepared statement scan status

# https://www.sqlite.org/compile.html#enable_sorter_references
SORT_REF_DESC=		To use references in the sorter

# https://www.sqlite.org/compile.html#trusted_schema
TRUSTED_SCHEMA_DESC=	SQL functions & virtual tables are considered unsafe

# https://www.sqlite.org/tempfiles.html#tempstore
OPTIONS_SINGLE_RAMT=	TS0 TS1 TS2 TS3
RAMT_DESC=		Where to store temporary file
TS0_DESC=		Always use temporary file
TS1_DESC=		File by default, change allowed PRAGMA
TS2_DESC=		Memory by default, change allowed PRAGMA
TS3_DESC=		Always use memory

# https://www.sqlite.org/queryplanner-ng.html#qpstab
OPTIONS_RADIO_STAT=	STAT3 STAT4
STAT_DESC=		Which query planner to use, stability or ...
STAT3_DESC=		Collect histogram data from leftmost column
STAT4_DESC=		Collect histogram data from all columns

# https://sqlite.org/compile.html#enable_dbpage_vtab
DBPAGE_DESC=		Enable DBPAGE Virtual Table

# https://www.sqlite.org/dbstat.html
DBSTAT_DESC=		Enable DBSTAT Virtual Table

# https://www.sqlite.org/fts3.html#tokenizer
OPTIONS_GROUP_UNICODE=	ICU UNICODE61
UNICODE61_DESC=		Unicode Version 6.1 tokenizer

# https://www.sqlite.org/rtree.html
OPTIONS_GROUP_RTREEG=	RTREE RTREE_INT GEOPOLY
RTREEG_DESC=		Index type for range queries
RTREE_DESC=		Enable R*Tree module
RTREE_INT_DESC=		Store 32-bit sig int (no float) coordinates
# https://www.sqlite.org/geopoly.html
GEOPOLY_DESC=		Uses the GeoJSON notation (RFC-7946)
GEOPOLY_IMPLIES=	RTREE

OPTIONS_RADIO_RL=	READLINE LIBEDIT
RL_DESC=		Command line editing library

OPTIONS_DEFAULT=	FTS4 URI METADATA SECURE_DELETE UNLOCK_NOTIFY THREADS \
			EXTENSION TS1 UNICODE61 RTREE DBSTAT STSHELL LIBEDIT \
			FTS3_TOKEN FTS5 DQS JSON1
# SECURE_DELETE, UNLOCK_NOTIFY, DBSTAT (since 41.0) used by www/firefox et al.
# RTREE used by graphics/mapnik, databases/spatialite
# FTS3_TOKEN used by audio/clementine-player, mail/thunderbird, www/seamonkey
# FTS5 used by sysutils/tracker
# JSON1 used by net-im/py-matrix-synapse

# The default numeric file permissions for newly created database files under unix.
# If not specified, the default is 0644 which means that the files is globally
# readable but only writable by the creator.
.ifdef DEFAULT_FILE_PERMISSIONS
CPPFLAGS+=		-DSQLITE_DEFAULT_FILE_PERMISSIONS=${DEFAULT_FILE_PERMISSIONS}
.endif

# Use an in-ram database for temporary tables (never,no,yes,always),
TS0_CPPFLAGS=	-DSQLITE_TEMP_STORE=0
TS1_CPPFLAGS=	-DSQLITE_TEMP_STORE=1
TS2_CPPFLAGS=	-DSQLITE_TEMP_STORE=2
TS3_CPPFLAGS=	-DSQLITE_TEMP_STORE=3

RTREE_CPPFLAGS=	-DSQLITE_ENABLE_RTREE=1
RTREE_INT_CPPFLAGS=	-DSQLITE_RTREE_INT_ONLY=1
GEOPOLY_CPPFLAGS=	-DSQLITE_ENABLE_GEOPOLY=1

FTS4_CPPFLAGS=	-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 -DSQLITE_ENABLE_FTS4=1
FTS5_CONFIGURE_ENABLE=	fts5
FTS5_LIBS=		-lm
FTS3_TOKEN_CPPFLAGS=	-DSQLITE_ENABLE_FTS3_TOKENIZER=1

SOUNDEX_CPPFLAGS=	-DSQLITE_SOUNDEX=1
MEMMAN_CPPFLAGS=	-DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
SECURE_DELETE_CPPFLAGS=	-DSQLITE_SECURE_DELETE=1
UNLOCK_NOTIFY_CPPFLAGS=	-DSQLITE_ENABLE_UNLOCK_NOTIFY=1
METADATA_CPPFLAGS=	-DSQLITE_ENABLE_COLUMN_METADATA=1
STAT3_CPPFLAGS=	-DSQLITE_ENABLE_STAT3=1
STAT4_CPPFLAGS=	-DSQLITE_ENABLE_STAT4=1
DBPAGE_CPPFLAGS=	-DSQLITE_ENABLE_DBPAGE_VTAB=1
DBSTAT_CPPFLAGS=	-DSQLITE_ENABLE_DBSTAT_VTAB=1
URI_CPPFLAGS=	-DSQLITE_USE_URI=1
URI_AUTHORITY_CPPFLAGS=	-DSQLITE_ALLOW_URI_AUTHORITY=1
DIRECT_READ_CPPFLAGS=	-DSQLITE_DIRECT_OVERFLOW_READ=1
ARMOR_CPPFLAGS=	-DSQLITE_ENABLE_API_ARMOR=1
STMT_CPPFLAGS=	-DSQLITE_ENABLE_STMT_SCANSTATUS=1

EXTENSION_CONFIGURE_ENABLE=	dynamic-extensions

THREADS_CONFIGURE_ENABLE=	threadsafe
THREADS_LIBS=		-lpthread

TRUSTED_SCHEMA_CPPFLAGS=	-DSQLITE_TRUSTED_SCHEMA=0

ICU_BUILD_DEPENDS=	${LOCALBASE}/bin/icu-config:devel/icu
ICU_LIB_DEPENDS=	libicudata.so:devel/icu
ICU_CPPFLAGS=	`${LOCALBASE}/bin/icu-config --cppflags` -DSQLITE_ENABLE_ICU=1
ICU_LIBS=	`${LOCALBASE}/bin/icu-config --ldflags`

UNICODE61_CPPFLAGS=	""
UNICODE61_CPPFLAGS_OFF=	-DSQLITE_DISABLE_FTS3_UNICODE=1

LIBEDIT_CONFIGURE_ENABLE=	editline
LIBEDIT_USES=	libedit
READLINE_CONFIGURE_ENABLE=	readline
READLINE_USES=	readline

JSON1_CONFIGURE_ENABLE=	json1

RBU_CPPFLAGS=	-DSQLITE_ENABLE_RBU=1

LIKENOTBLOB_CPPFLAGS=	-DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1

STSHELL_CONFIGURE_ENABLE=	static-shell

SESSION_CONFIGURE_ENABLE=	session

UNKNOWN_SQL_CPPFLAGS=	-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION=1

NULL_TRIM_CPPFLAGS=	-DSQLITE_ENABLE_NULL_TRIM=1

OFFSET_CPPFLAGS=	-DSQLITE_ENABLE_OFFSET_SQL_FUNC=1

SER1_CPPFLAGS=	-DSQLITE_ENABLE_DESERIALIZE=1

SORT_REF_CPPFLAGS=	-DSQLITE_ENABLE_SORTER_REFERENCES=1

NORMALIZE_CPPFLAGS=	-DSQLITE_ENABLE_NORMALIZE=1

DQS_CPPFLAGS=	-DSQLITE_DQS=3
DQS_CPPFLAGS_OFF=	-DSQLITE_DQS=0

TCL_CONFIGURE_ENABLE=	tcl
TCL_ALL_TARGET=		sqlite3_analyzer
TCL_USES=		tcl
TCL_USES_OFF=		tcl:build

.include <bsd.port.options.mk>

# Platform Configuration
CPPFLAGS+=	-DHAVE_ISNAN=1 -DHAVE_MALLOC_USABLE_SIZE=1 -DHAVE_GMTIME_R=1 -DHAVE_LOCALTIME_R=1 -DHAVE_USLEEP=1 -DHAVE_STRCHRNUL=1
CFLAGS_powerpc64le=	-DSQLITE_BYTEORDER=1234

post-configure:
	@${ECHO_MSG} "===> CONFIGURE_ARGS=${CONFIGURE_ARGS}"
	@${ECHO_MSG} "===> CPPFLAGS=${CPPFLAGS}"
	@${ECHO_MSG} "===> CFLAGS=${CFLAGS}"
	@${ECHO_MSG} "===> LDFLAGS=${LDFLAGS}"
	@${ECHO_MSG} "===> LIBS=${LIBS}"

post-build:
.if ${ARCH}=="i386"
	@${ECHO_MSG} "===> WARNING: on ${ARCH} don't pass atof1-* tests"
.endif

post-stage:
	${SETENV} LD_LIBMAP_DISABLE=1 ldd -a "${STAGEDIR}${PREFIX}/bin/${PORTNAME}"

post-install:
	${INSTALL_MAN} ${WRKSRC}/sqlite3.1 ${STAGEDIR}${PREFIX}/man/man1
	${RM} ${STAGEDIR}${PREFIX}/include/msvc.h
	${SETENV} LD_LIBMAP_DISABLE=1 ldd -a "${STAGEDIR}${PREFIX}/bin/${PORTNAME}" "${STAGEDIR}${PREFIX}/lib/lib${PORTNAME}.so"

post-install-TCL-on:
	${INSTALL_PROGRAM} ${WRKSRC}/sqlite3_analyzer ${STAGEDIR}${PREFIX}/bin

# for compares with checksum from of the site
sha1: checksum
.if defined(SHA1) && !empty(SHA1)
	@sha1 -c ${SHA1} ${DISTDIR}/${ALLFILES}
.else
	@sha1 ${DISTDIR}/${ALLFILES}
.endif

# For compare with checksum from of the site. Now, this is a NIST SHA3-256 hash. sha256 not suitable for compare.
# But the creation of a new target does not justify the emergence of dependence on the perl5.
# sha3sum maybe installed with p5-Digest-SHA3 port.
# EXTRACT_DEPENDS=p5-Digest-SHA3:security/p5-Digest-SHA3; USES=perl5; USE_PERL5=extract;
# @${PERL} -MDigest::SHA3 -le 'print Digest::SHA3->new(sha_256_hex)->add(<>)->hexdigest' < ${DISTDIR}/${ALLFILES}
sha3: checksum
	@sha3sum -a 256 ${DISTDIR}/${ALLFILES}

.include <bsd.port.mk>