diff --git a/Cargo.lock b/Cargo.lock index b5c33ae959f0e3cdcc654e603dfe46ac4ddcf8b4..4f388ac04cf087393ddcd6fc0fd0d4fe3ff7d810 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3412,6 +3412,12 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + [[package]] name = "version_check" version = "0.9.3" @@ -3568,6 +3574,7 @@ dependencies = [ "anyhow", "run_script", "structopt", + "version-compare", "version_check", ] diff --git a/doc/dev/setup_env_dev.md b/doc/dev/setup_env_dev.md index 002b58f1dc4ed5e86eaafadc48ae7c5b418c5900..9581cc8b1fe42a9d30e4875e2e8bcc85c8894f4d 100644 --- a/doc/dev/setup_env_dev.md +++ b/doc/dev/setup_env_dev.md @@ -23,7 +23,7 @@ cargo xtask build To develop on Duniter, there is currently the following requirement: - A computer with GNU/Linux or Mac as operating system -- Build essential tools +- Build essential tools: Amongs other: GCC C++ - wget - git (apt-get install git) - Rust @@ -48,7 +48,7 @@ echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> .bashrc ### Build the project -#### Clone the repository +#### Clone the repository ```bash git clone https://git.duniter.org/nodes/typescript/duniter diff --git a/doc/use/manual_compilation.md b/doc/use/manual_compilation.md index a0e0459683a1eab38e278f162079c177c7763cce..bfc60ca0d24af1df6522f77e008103a7c7a4e317 100644 --- a/doc/use/manual_compilation.md +++ b/doc/use/manual_compilation.md @@ -61,8 +61,11 @@ Depend on your distribution: apt-get install build-essential cmake ##### Fedora +```bash +sudo dnf install gcc-c++ +``` - yum groupinstall "Development Tools" "Development Libraries" + dnf groupinstall "Development Tools" "Development Libraries" TODO: If you know how to install build essential tools for other gnu/linux distributions or for mac, you can complete this documentation and submit a merge request. diff --git a/rust-bins/xtask/Cargo.toml b/rust-bins/xtask/Cargo.toml index 461aea4f2230c8c4c43b367361288faedcee2f3f..07f47486a41c49792b9522da62fd4df76c12cd2d 100644 --- a/rust-bins/xtask/Cargo.toml +++ b/rust-bins/xtask/Cargo.toml @@ -17,3 +17,4 @@ anyhow = "1.0.32" run_script = "0.6.3" structopt = "0.3.18" version_check = "0.9.2" +version-compare = "0.0.11" diff --git a/rust-bins/xtask/src/main.rs b/rust-bins/xtask/src/main.rs index bb1bbf3e0798818a49fe831c9833c88dc372b9f5..ed7c83bc394e48f4e52bb113f1c20b9e25eb3651 100644 --- a/rust-bins/xtask/src/main.rs +++ b/rust-bins/xtask/src/main.rs @@ -16,9 +16,12 @@ use anyhow::Result; use std::process::{Command, Output}; use structopt::StructOpt; +use version_compare::Version; const MIN_RUST_VERSION: &str = "1.51.0"; -const NODE_VERSION: &str = "10.22.1"; +const MIN_NODE_VERSION: &str = "10.18.0"; +const REC_NODE_VERSION: &str = "10.22.1"; +const MAX_NODE_VERSION: &str = "11.0.0"; #[derive(StructOpt)] struct DuniterXTask { @@ -54,18 +57,21 @@ fn main() -> Result<()> { if !args.skip_npm { println!("Check node version …"); - if exec_and_get_stdout(Command::new("node").arg("-v")) - .unwrap_or_default() - .trim_end() - != format!("v{}", NODE_VERSION) - { + let node_vers = exec_and_get_stdout(Command::new("node").arg("-v")).unwrap_or_default(); + let node_vers = node_vers.trim_end(); + let node_vers_cut = Version::from(&node_vers[1..]).unwrap(); + let min_node_vers = Version::from(MIN_NODE_VERSION).unwrap(); + let max_node_vers = Version::from(MAX_NODE_VERSION).unwrap(); + if node_vers_cut < min_node_vers || max_node_vers <= node_vers_cut { eprintln!( - "Duniter requires node v{} exactly. Please install node v{} (you can use nvm).", - NODE_VERSION, NODE_VERSION + "Duniter requires node between v{} and v{} excluded.\n\ + Please install a correct node version (you can use nvm).\n\ + Current version {}. Recommended version v{}", + MIN_NODE_VERSION, MAX_NODE_VERSION, node_vers, REC_NODE_VERSION ); std::process::exit(1); } else { - println!("Node v{} already installed ✔", NODE_VERSION); + println!("Node {} installed: Is a compatible version ✔", node_vers); } } match args.command {