Created attachment 208474 [details]
Make script from sqlite3 a bit outdated and does not detect all OS features that can be used by sqlite3.
For example it does not detect pread()/pwrite() and sqlite3 use lseek()+read() instead of pread().
I walk trough all code and collect all HAVE_* switches that available on FreeBSD.
+ -DSQLITE_MAX_MMAP_SIZE=0x7fff0000 \
+ -DSQLITE_DEFAULT_MMAP_SIZE=0x7fff0000 \
can be set to force use mmap() instead of pread()/pwrite() but is not safe.
Doesn't the configure pick these up, or is this a different build than standard autoconf things?
autoconf does not detect these features, but CPPFLAGS passed to compiler and enable features.
Are all flags appropriate for all versions/archs of FreeBSD? If not, they should be scoped accordingly
IMHO there is no arch depend flags.
Most of flags - enables syscals, not 100% sure but it should be available on 11.2+.
I use it on 12.1 amd64.
Build info is available at https://gitlab.com/swills/freebsd-ports/pipelines/93636806
(In reply to rozhuk.im from comment #0)
You're right. These features (HAVE_PREAD, HAVE_PWRITE) are not detected during configuration.
But your patch requires further study.
For example, the flag SQLITE_MMAP_READWRITE is dangerous for many uses cases. Please read paragraph 4 in the "How Memory-Mapped I/O Works" at the link (https://www.sqlite.org/mmap.html).
Many other options auto detected in the configure script.
(In reply to Pavel Volkov from comment #6)
SQLITE_MMAP_READWRITE - does not enables mmap() usage, it enables memcpy() to mmaped memory write instead of lseek()+write() / pwrite().
I agree that it can be dangerous, or at least I do not know it there any bugs/features in FreeBSD mmap() implementations.
But mmap() io does not enabled by this patch.
To enable mmaped io some one should add -DSQLITE_DEFAULT_MMAP_SIZE=0x7fff0000 before compile this port, to force all apps use mmap() or execute "PRAGMA mmap_size=0x7fff0000" in app.
I do not insist on SQLITE_MMAP_READWRITE, but if our mmap() implementation works as sqlite3 authors expect, then we get more profit from this.
Yes, ~half of options is detected by autoconf, but I prefer to define it, just to be sure that it set.
You can set any compilation options before creating the package.
CPPFLAGS='-DHAVE_PREAD=1 -DHAVE_PWRITE=1' make clean configure
setenv CPPFLAGS '-DHAVE_PREAD=1 -DHAVE_PWRITE=1' && make clean configure
Pavel, the proposal is to add the safe features to the port, for everyone's profit. Is there an automated halfway thorough test suite we can enable so as to trigger pkg-fallout@ mail on the Tier 2/3 architectures?