mtshrmn / nuber

terminal epub reader with inline images
GNU General Public License v3.0
87 stars 3 forks source link

Add build instructions #7

Closed h7x4 closed 1 year ago

h7x4 commented 1 year ago

I'm having a hard time trying to build this project.

I'm not able to make the rust module build by itself if I invoke maturin directly, even if I specifically use maturin 11.3 (as pyproject.toml specifies maturin>=0.11,<0.12)

output from maturin build ```console $ maturin build 🍹 Building a mixed python/rust project 🔗 Found pyo3 bindings 🐍 Found CPython 3.10 at python3.10 📦 Built source distribution to /home/h7x4/git/nuber/target/wheels/nuber-1.1.0.tar.gz Compiling cfg-if v1.0.0 Compiling libc v0.2.101 Compiling autocfg v1.0.1 Compiling proc-macro2 v1.0.28 Compiling unicode-xid v0.2.2 Compiling syn v1.0.74 Compiling getrandom v0.1.16 Compiling ppv-lite86 v0.2.10 Compiling lazy_static v1.4.0 Compiling siphasher v0.3.6 Compiling crossbeam-utils v0.8.5 Compiling scopeguard v1.1.0 Compiling crossbeam-epoch v0.9.5 Compiling new_debug_unreachable v1.0.4 Compiling serde v1.0.127 Compiling rayon-core v1.9.1 Compiling crc32fast v1.2.1 Compiling pyo3-build-config v0.14.3 Compiling proc-macro-hack v0.5.19 Compiling mac v0.1.1 Compiling log v0.4.16 Compiling once_cell v1.8.0 Compiling utf-8 v0.7.6 Compiling precomputed-hash v0.1.1 Compiling pkg-config v0.3.19 Compiling cc v1.0.69 Compiling adler v1.0.2 Compiling fnv v1.0.7 Compiling byteorder v1.4.3 Compiling strsim v0.10.0 Compiling ident_case v1.0.1 Compiling memchr v2.4.0 Compiling adler32 v1.2.0 Compiling bitflags v1.2.1 Compiling either v1.6.1 Compiling smallvec v1.6.1 Compiling unindent v0.1.8 Compiling anyhow v1.0.43 Compiling weezl v0.1.5 Compiling regex-syntax v0.6.25 Compiling color_quant v1.1.0 Compiling xml-rs v0.8.4 Compiling bytemuck v1.7.2 Compiling percent-encoding v2.1.0 Compiling scoped_threadpool v0.1.9 Compiling unicode-width v0.1.8 Compiling remove_dir_all v0.5.3 Compiling instant v0.1.10 Compiling lock_api v0.4.4 Compiling phf_shared v0.8.0 Compiling memoffset v0.6.4 Compiling miniz_oxide v0.4.4 Compiling num-traits v0.2.14 Compiling num-integer v0.1.44 Compiling rayon v1.5.1 Compiling num-rational v0.3.2 Compiling num-iter v0.1.42 Compiling futf v0.1.4 Compiling miniz_oxide v0.3.7 Compiling deflate v0.8.6 Compiling bzip2-sys v0.1.11+1.0.8 Compiling gif v0.11.2 Compiling phf v0.8.0 Compiling tendril v0.4.2 Compiling crossbeam-channel v0.5.1 Compiling png v0.16.8 Compiling time v0.1.44 Compiling num_cpus v1.13.0 Compiling getrandom v0.2.3 Compiling parking_lot_core v0.8.3 Compiling quote v1.0.9 Compiling aho-corasick v0.7.18 Compiling rand_core v0.5.1 Compiling rand_core v0.6.3 Compiling flate2 v1.0.20 Compiling paste-impl v0.1.18 Compiling pyo3 v0.14.3 Compiling bzip2 v0.4.3 Compiling parking_lot v0.11.1 Compiling rand_chacha v0.2.2 Compiling rand_pcg v0.2.1 Compiling rand_chacha v0.3.1 Compiling crossbeam-deque v0.8.1 Compiling paste v0.1.18 Compiling rand v0.7.3 Compiling regex v1.5.4 Compiling rand v0.8.4 Compiling string_cache v0.8.1 Compiling phf_generator v0.8.0 Compiling tempfile v3.2.0 Compiling string_cache_codegen v0.5.1 Compiling phf_codegen v0.8.0 Compiling markup5ever v0.10.1 Compiling jpeg-decoder v0.1.22 Compiling tiff v0.6.1 Compiling xml5ever v0.16.1 Compiling darling_core v0.13.0 Compiling pyo3-macros-backend v0.14.3 Compiling html5ever v0.25.1 Compiling thiserror-impl v1.0.26 Compiling indoc-impl v0.3.6 Compiling image v0.23.14 Compiling indoc v0.3.6 Compiling thiserror v1.0.26 Compiling zip v0.5.13 Compiling darling_macro v0.13.0 Compiling epub v1.2.3 Compiling pyo3-macros v0.14.3 Compiling markup5ever_rcdom v0.1.0 Compiling darling v0.13.0 Compiling enumset_derive v0.5.5 Compiling html2text v0.2.1 (/home/h7x4/git/nuber/rust-html2text) Compiling enumset v1.0.7 Compiling nuber v1.1.0 (/home/h7x4/git/nuber) error[E0407]: method `decorate_header_start` is not a member of trait `TextDecorator` --> src/parser.rs:270:5 | 270 | fn decorate_header_start(&mut self, level: usize) -> (String, Self::Annotation) { | ^ --------------------- help: there is an associated function with a similar name: `decorate_code_start` | _____| | | 271 | | ("".to_string(), RichAnnotation::Header(level)) 272 | | } | |_____^ not a member of trait `TextDecorator` error[E0407]: method `decorate_header_end` is not a member of trait `TextDecorator` --> src/parser.rs:274:5 | 274 | fn decorate_header_end(&mut self) -> String { | ^ ------------------- help: there is an associated function with a similar name: `decorate_code_end` | _____| | | 275 | | "".to_string() 276 | | } | |_____^ not a member of trait `TextDecorator` error[E0532]: expected tuple struct or tuple variant, found unit variant `RichAnnotation::Image` --> src/parser.rs:134:13 | 134 | RichAnnotation::Image(_) => Some(Effect::Image.into()), | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `RichAnnotation::Image` | ::: /home/h7x4/git/nuber/rust-html2text/src/render/text_renderer.rs:1471:5 | 1471 | Image, | ----- `RichAnnotation::Image` defined here error[E0532]: expected tuple struct or tuple variant, found unit variant `RichAnnotation::Image` --> src/parser.rs:146:41 | 146 | RichAnnotation::Link(url) | RichAnnotation::Image(url) => Some(url), | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `RichAnnotation::Image` | ::: /home/h7x4/git/nuber/rust-html2text/src/render/text_renderer.rs:1471:5 | 1471 | Image, | ----- `RichAnnotation::Image` defined here error[E0532]: expected tuple struct or tuple variant, found unit variant `RichAnnotation::Image` --> src/parser.rs:207:16 | 207 | if let RichAnnotation::Image(url) = annotation { | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use this syntax instead: `RichAnnotation::Image` | ::: /home/h7x4/git/nuber/rust-html2text/src/render/text_renderer.rs:1471:5 | 1471 | Image, | ----- `RichAnnotation::Image` defined here error[E0050]: method `decorate_image` has 3 parameters but the declaration in trait `decorate_image` has 2 --> src/parser.rs:286:23 | 286 | fn decorate_image(&mut self, _title: &str, src: &str) -> (String, Self::Annotation) { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 2 parameters, found 3 | = note: `decorate_image` from trait: `fn(&mut Self, &str) -> (String, ::Annotation)` error[E0046]: not all trait items implemented, missing: `header_prefix` --> src/parser.rs:215:1 | 215 | impl<'a> TextDecorator for Decorator<'a> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `header_prefix` in implementation | = help: implement the missing item: `fn header_prefix(&mut self, _: usize) -> String { todo!() }` error[E0599]: no variant or associated item named `Header` found for enum `RichAnnotation` in the current scope --> src/parser.rs:140:29 | 140 | RichAnnotation::Header(_) => Some(Effect::Bold.into()), | ^^^^^^ variant or associated item not found in `RichAnnotation` error[E0599]: no variant or associated item named `Header` found for enum `RichAnnotation` in the current scope --> src/parser.rs:271:42 | 271 | ("".to_string(), RichAnnotation::Header(level)) | ^^^^^^ variant or associated item not found in `RichAnnotation` error[E0618]: expected function, found enum variant `RichAnnotation::Image` --> src/parser.rs:300:21 | 300 | (first_row, RichAnnotation::Image(src.to_string())) | ^^^^^^^^^^^^^^^^^^^^^----------------- | | | call expression requires function | help: `RichAnnotation::Image` is a unit variant, you need to write it without the parentheses | 300 - (first_row, RichAnnotation::Image(src.to_string())) 300 + (first_row, RichAnnotation::Image) | Buildingerror: aborting due to 10 previous errors Some errors have detailed explanations: E0046, E0050, E0407, E0532, E0599, E0618. For more information about an error, try `rustc --explain E0046`. error: could not compile `nuber` due to 11 previous errors 💥 maturin failed Caused by: Failed to build a native library through cargo Caused by: Cargo build finished with "exit status: 101": `cargo rustc --message-format json --manifest-path Cargo.toml --lib --` ```

I would suspect that the rust module was broken, but it seems like you made a commit to the project ~2 weeks ago, so that might not be the case?

This problem disappears if I rather try to invoke maturin through poetry. But based on the error, it seems like maturin doesn't even get invoked at all? Rust-Python bindings seems to be missing.

output from poetry run nuber ```console $ poetry run nuber Traceback (most recent call last): File "", line 1, in File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 1050, in _gcd_import File "", line 1027, in _find_and_load File "", line 1006, in _find_and_load_unlocked File "", line 688, in _load_unlocked File "", line 883, in exec_module File "", line 241, in _call_with_frames_removed File "/home/h7x4/git/nuber/nuber/__init__.py", line 1, in from .reader import Reader File "/home/h7x4/git/nuber/nuber/reader.py", line 6, in from .rust_module.nuber import Book, Image ModuleNotFoundError: No module named 'nuber.rust_module.nuber' ```

Do you think you could add some documentation on how to build this project?

mtshrmn commented 1 year ago

The build instructions are the same as the contribution ones except you build with a release flag maturin develp --release
I'm not sure why this didnt work because I'm unable to reproduce the error. Can you provide which build steps did you follow/ran?

I'll add build instructions in the readme once this issue is resolved, for now here they are:

$ git clone https://github.com/mtshrmn/nuber.git --recursive && cd nuber
$ cd rust-html2text && git apply ../html2text.patch && cd ..
$ poetry install && poetry shell
$ maturin develop --release && exit
$ poetry build
h7x4 commented 1 year ago

I'm just being stupid, I found the instructions at the bottom of the README now. The part that caused my build to fail, was forgetting to apply the patch.

Thanks!