diff --git a/README.md b/README.md index df40e62..1fbc393 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,10 @@ For reproducibility reasons, Nix build scripts cannot hit the internet, but the auto-download feature does exactly that. To successfully build under Nix the user must provide the tarball locally and specify its location via the `BITCOIND_TARBALL_FILE` env var. + +Another option is to specify the `BITCOIND_SKIP_DOWNLOAD` env var and provide the +executable via the `PATH`. + Alternatively, use the dep without auto-download feature. ## Used by diff --git a/build.rs b/build.rs index bc3992a..7db3cb5 100644 --- a/build.rs +++ b/build.rs @@ -71,6 +71,9 @@ mod download { } pub(crate) fn start() -> anyhow::Result<()> { + if std::env::var_os("BITCOIND_SKIP_DOWNLOAD").is_some() { + return Ok(()); + } let download_filename = download_filename(); let expected_hash = get_expected_sha256(&download_filename)?; let out_dir = std::env::var_os("OUT_DIR").unwrap(); diff --git a/src/lib.rs b/src/lib.rs index f30f929..fe075cb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -123,6 +123,8 @@ pub enum Error { /// Returned when -rpcuser and/or -rpcpassword is used in `Conf` args /// It will soon be deprecated, please use -rpcauth instead RpcUserAndPasswordUsed, + /// Returned when expecting an auto-downloaded executable but `BITCOIND_SKIP_DOWNLOAD` env var is set + SkipDownload, } impl fmt::Debug for Error { @@ -135,7 +137,8 @@ impl fmt::Debug for Error { Error::NoBitcoindExecutableFound => write!(f, "`bitcoind` executable is required, provide it with one of the following: set env var `BITCOIND_EXE` or use a feature like \"22_1\" or have `bitcoind` executable in the `PATH`"), Error::EarlyExit(e) => write!(f, "The bitcoind process terminated early with exit code {}", e), Error::BothDirsSpecified => write!(f, "tempdir and staticdir cannot be enabled at same time in configuration options"), - Error::RpcUserAndPasswordUsed => write!(f, "`-rpcuser` and `-rpcpassword` cannot be used, it will be deprecated soon and it's recommended to use `-rpcauth` instead which works alongside with the default cookie authentication") + Error::RpcUserAndPasswordUsed => write!(f, "`-rpcuser` and `-rpcpassword` cannot be used, it will be deprecated soon and it's recommended to use `-rpcauth` instead which works alongside with the default cookie authentication"), + Error::SkipDownload => write!(f, "expecting an auto-downloaded executable but `BITCOIND_SKIP_DOWNLOAD` env var is set"), } } } @@ -496,6 +499,10 @@ pub fn downloaded_exe_path() -> anyhow::Result { /// Provide the bitcoind executable path if a version feature has been specified #[cfg(feature = "download")] pub fn downloaded_exe_path() -> anyhow::Result { + if std::env::var_os("BITCOIND_SKIP_DOWNLOAD").is_some() { + return Err(Error::SkipDownload.into()); + } + let mut path: PathBuf = env!("OUT_DIR").into(); path.push("bitcoin"); path.push(format!("bitcoin-{}", versions::VERSION));