Build debian package for SQLCipher4

This commit is contained in:
Miguel Jacq 2025-12-21 12:58:42 +11:00
parent 2f68084bdd
commit d1aa5762bc
Signed by: mig5
GPG key ID: 59B3F0C24135C6A9
28 changed files with 285904 additions and 168 deletions

View file

@ -1,92 +1,13 @@
sqlcipher3
bouquin-sqlcipher4
==========
*NOTICE*: This is a fork of [sqlcipher3](https://github.com/coleifer/sqlcipher3)
which adds github action for creating wheels for Windows, MacOS and Linux.
The unofficial wheels from this fork are uploaded to `sqlcipher3-wheels` on pypi,
while the official wheels are `sqlcipher3-binary`.
To install openssl easily, conan is used. I made some reference with
[this fork of pysqlite3 by Dobatymo](https://github.com/Dobatymo/pysqlite3)
*NOTICE*: This is a fork of [sqlcipher3-wheels](https://github.com/laggykiller/sqlcipher3),
itself a fork of https://github.com/coleifer/sqlcipher3.
*NOTICE*: To build from this fork, copy `sqlite3.c` and `sqlite3.h`
to `src/sqlcipher`, then run `pip wheel .` or `python -m build .`
This one is intended for my Bouquin tool and is up to date with latest SQLCipher 4 (it also
reuses the SQLCipher 4 version number to be aligned with it at all times).
*NOTICE*: The wheels are built with sqlcipher version 4. You have to execute
`PRAGMA cipher_compatibility = 3` before doing any operations on a database
encrypted with SQLCipher version 3 when a newer version is installed.
Keep in mind, you have to add `PRAGMA cipher_compatibility` after `PRAGMA key`:
```python
from sqlcipher3 import dbapi2 as sqlite
conn = sqlite.connect('test.db')
c = conn.cursor()
c.execute("PRAGMA key='password'")
c.execute("PRAGMA cipher_compatibility = 3")
c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''')
c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
conn.commit()
c.close()
```
This library takes [pysqlite3](https://github.com/coleifer/pysqlite3) and makes
some small modifications so it is suitable for use with
[sqlcipher](https://github.com/sqlcipher/sqlcipher) (sqlite with encryption).
Additional features:
* User-defined window functions (requires SQLite >= 3.25)
* Flags and VFS an be specified when opening connection
* Incremental BLOB I/O, [bpo-24905](https://github.com/python/cpython/pull/271)
* Improved error messages, [bpo-16379](https://github.com/python/cpython/pull/1108)
* Simplified detection of DML statements via `sqlite3_stmt_readonly`.
* Sqlite native backup API (also present in standard library 3.7 and newer).
A completely self-contained binary package (wheel) is available for versions
0.4.0 and newer as `sqlcipher3-binary`. This package contains the latest
release of sqlcipher compiled with numerous extensions, and requires no
external dependencies.
Building with System SQLCipher
------------------------------
To build `sqlcipher3` linked against the system SQLCipher, run:
```
$ python setup.py build
```
Building a statically-linked library
------------------------------------
To build `sqlcipher3` statically-linked against a particular version of
SQLCipher, you need to obtain the SQLCipher source code and copy `sqlite3.c`
and `sqlite3.h` into the source tree.
```
# Download the latest version of SQLCipher source code and build the source
# amalgamation files (sqlite3.c and sqlite3.h).
$ git clone https://github.com/sqlcipher/sqlcipher
$ cd sqlcipher/
$ ./configure
$ make sqlite3.c
# Copy the sqlcipher amalgamation files into the root of the sqlcipher3
# checkout and run build_static + build:
$ cp sqlcipher/sqlite3.[ch] sqlcipher3/
$ cd sqlcipher3
$ python setup.py build_static build
```
You now have a statically-linked, completely self-contained `sqlcipher3`.
Using the binary package
------------------------
A binary package (wheel) is available for linux with a completely
self-contained `sqlcipher3`, statically-linked against the most recent release
of sqlcipher.
```
$ pip install sqlcipher3-binary
```
The main motivation of the 'fork' is just to bring SQLCipher up to date and also to package
it for Debian in my apt repo. This unblocks me to package Bouquin for Debian in my apt repo
too.