| Crates.io | leptonica-plumbing |
| lib.rs | leptonica-plumbing |
| version | 1.4.0 |
| created_at | 2021-03-10 22:07:41.630974+00 |
| updated_at | 2024-04-12 21:41:19.335389+00 |
| description | Safe wrapper of `leptonica-sys` |
| homepage | https://github.com/ccouzens/leptonica-plumbing |
| repository | https://github.com/ccouzens/leptonica-plumbing |
| max_upload_size | |
| id | 366979 |
| size | 85,548 |
Crate to expose a safe version of the leptonica-sys api.
This is designed to expose the C API of leptonica in a safe manner.
Adding value by deviating from the API is a non-goal. That is left to libraries
that build on top of leptonica-plumbing.
I'm a maintainer of both leptess and tesseract-rs.
I noticed that there was a lot of duplication in how they interact with both
leptonica-sys and
tesseract-sys. Having multiple layers
of abstraction in leptess and tesseract-rs made it hard to reason about
their memory safety.
Having a safety layer that stays simple improves the correctness and maintainability of the above libraries.
To test for memory leaks, test with valgrind.
cargo test --release && valgrind --leak-check=yes --error-exitcode=1 --leak-check=full --show-leak-kinds=all "$(find target/*/deps/ -executable -name 'leptonica_plumbing-*')"
You may find that leptonica always leaks 16B of memory.
To test with a manually compiled Leptonica, test with additional environment variables
LD_LIBRARY_PATH="$(pwd)/../../DanBloomberg/leptonica/local/lib" PKG_CONFIG_PATH="$(pwd)/../../DanBloomberg/leptonica/local/lib/pkgconfig" cargo test
The two can be combined
LD_LIBRARY_PATH="$(pwd)/../../DanBloomberg/leptonica/local/lib" PKG_CONFIG_PATH="$(pwd)/../../DanBloomberg/leptonica/local/lib/pkgconfig" bash -c 'cargo test --release && valgrind --leak-check=yes --error-exitcode=1 --leak-check=full --show-leak-kinds=all "$(find target/*/deps/ -executable -name 'leptonica_plumbing-*')"'