[Pkg-rust-maintainers] Bug#1018066: rust-rusqlite: some of the feature-specific tests fail without modern_sqlite feature
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Thu Aug 25 04:17:36 BST 2022
Package: src:rust-libsqlite3-sys
Version: 0.28.0-3
Control: forwarded -1 https://github.com/rusqlite/rusqlite/issues/1216
Control: affects -1 + src:rust-rusqlite
Several of the rusqlite features fail when supplied without including
the "modern_sqlite" feature, because they fall back to using pre-shipped
legacy bindings for older versions of libsqlite3.
failures tend to look like this:
> error[E0599]: no method named `set_estimated_rows` found for mutable reference `&mut IndexInfo` in the current scope
> --> src/vtab/array.rs:110:18
> |
> 110 | info.set_estimated_rows(100);
> | ^^^^^^^^^^^^^^^^^^ help: there is an associated function with a similar name: `set_estimated_cost`
Let me be clear that there are a few wrinkles here:
- When Debian strips the embedded copy of libsqlite3 from the
libsqlite3-sys crate source, we are also stripping the pre-generated
bindings shipped by upstream. This is upstream's "bundled_bindings"
feature, which we don't ship in Debian either.
- We change "modern_sqlite" in the rusqlite crate to depend instead on
libsqlite3-sys's "buildtime_bindgen" feature so that the bindings
actually match the version of libsqlite3-dev that is available during
build.
- However, building or testing rusqlite without any of the above
binding choices means that we end up using some of the much older
pre-crafted bindings in
`libsqlite3-sys/bindgen-bindings/bindgen_3.*.rs`. These definitely
*don't* have the features available that the user wants.
Here's the list of features that have this kind of problem, edited down
from the autopkgtest run on ci.debian.org:
librust-rusqlite-dev:array FAIL non-zero exit status 101
librust-rusqlite-dev:csvtab FAIL non-zero exit status 101
librust-rusqlite-dev:release_memory FAIL non-zero exit status 101
librust-rusqlite-dev:series FAIL non-zero exit status 101
librust-rusqlite-dev:unlock_notify FAIL non-zero exit status 101
librust-rusqlite-dev:vtab FAIL non-zero exit status 101
librust-rusqlite-dev:window FAIL non-zero exit status 101
I see four possible ways of dealing with this in debian:
a) Mark these 7 autopkgtests in rust-rusqlite as flaky because we know
that they fail in this way. Users who want to depend on these
features should *also* depend on the "modern_sqlite" or
"buildtime_bindgen" features (which do roughly the same thing)
b) patch Cargo.toml in rust-rusqlite to make those seven features
*also* depend on modern_sqlite
c) patch the failing bits of the rust-rusqlite tests so that they are
appropriately hidden behind some kind of !cfg feature flag
d) strip out the the logic in libsqlite3-sys/build.rs (around line 469)
that deals with these PREBUILT_BINDGEN_PATHS and also exclude
libsqlite3-sys/bindgen-bindings/bindgen_3.*.rs from the source in
the way we're excluding the bundled_bindings stuff. in
libsqlite3-sys/Cargo.toml, set:
default = ["buildtime_bindgen"]
Perhaps some of these four choices can or should actually be done in
combination with each other as well.
I particularly like the idea that packages built from Debian will all
use bindings generated at build time, so that we're not shipping any
autogenerated files as part of upstream. It'd be good to have the full
toolchain built as close to the libsqlite3 source as possible.
Any thoughts about the right way forward for Debian?
--dkg
PS Additionally, as a separate issue, the --all-features test fails
because it tries to build against sqlcipher while generating the
bindings using buildtime_bindgen:
rust-rusqlite:@ FLAKY non-zero exit status 101
This is because sqlcipher is out of date in debian, see
https://bugs.debian.org/1017577 for more details.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 227 bytes
Desc: not available
URL: <http://alioth-lists.debian.net/pipermail/pkg-rust-maintainers/attachments/20220824/7fa61dad/attachment.sig>
More information about the Pkg-rust-maintainers
mailing list