2022-07-22 01:30:53 +00:00
#!/bin/sh
2020-11-10 23:36:07 +00:00
2022-07-22 01:30:53 +00:00
set -ex
2022-03-16 23:57:30 +00:00
2022-07-22 01:31:54 +00:00
FEATURES = "bitcoin_hashes global-context lowmemory rand recovery serde std alloc"
2022-03-02 09:01:12 +00:00
# These features are typically enabled along with the 'std' feature, so we test
# them together with 'std'.
STD_FEATURES = "rand-std bitcoin-hashes-std"
2020-11-10 23:36:07 +00:00
cargo --version
rustc --version
2022-06-28 04:04:26 +00:00
# Work out if we are using a nightly toolchain.
NIGHTLY = false
if cargo --version | grep nightly; then
NIGHTLY = true
fi
2022-03-18 23:52:14 +00:00
# Test if panic in C code aborts the process (either with a real panic or with SIGILL)
cargo test -- --ignored --exact 'tests::test_panic_raw_ctx_should_terminate_abnormally' 2>& 1 | tee /dev/stderr | grep "SIGILL\\|panicked at '\[libsecp256k1\]"
2020-12-18 12:08:52 +00:00
# Make all cargo invocations verbose
export CARGO_TERM_VERBOSE = true
2020-11-10 23:36:07 +00:00
# Defaults / sanity checks
2020-12-18 12:08:52 +00:00
cargo build --all
cargo test --all
2020-11-10 23:36:07 +00:00
if [ " $DO_FEATURE_MATRIX " = true ] ; then
2020-12-18 12:08:52 +00:00
cargo build --all --no-default-features
2022-02-01 02:43:42 +00:00
cargo test --all --no-default-features
2020-11-10 23:36:07 +00:00
# All features
2020-12-18 12:08:52 +00:00
cargo build --all --no-default-features --features= " $FEATURES "
2022-02-01 02:43:42 +00:00
cargo test --all --no-default-features --features= " $FEATURES "
2020-11-10 23:36:07 +00:00
# Single features
for feature in ${ FEATURES }
do
2020-12-18 12:08:52 +00:00
cargo build --all --no-default-features --features= " $feature "
2022-02-01 02:43:42 +00:00
cargo test --all --no-default-features --features= " $feature "
2020-11-10 23:36:07 +00:00
done
2022-03-02 09:01:12 +00:00
# Features tested with 'std' feature enabled.
for feature in ${ FEATURES }
do
cargo build --all --no-default-features --features= " std, $feature "
cargo test --all --no-default-features --features= " std, $feature "
done
2020-12-23 18:00:34 +00:00
# Other combos
2022-07-22 01:37:43 +00:00
RUSTFLAGS = '--cfg=fuzzing' RUSTDOCFLAGS = '--cfg=fuzzing' cargo test --all
RUSTFLAGS = '--cfg=fuzzing' RUSTDOCFLAGS = '--cfg=fuzzing' cargo test --all --features= " $FEATURES "
2020-12-18 12:08:52 +00:00
cargo test --all --features= "rand serde"
2022-07-22 01:35:15 +00:00
cargo test --features= " $STD_FEATURES "
2020-11-10 23:36:07 +00:00
2022-06-28 04:04:26 +00:00
if [ " $NIGHTLY " = true ] ; then
2020-12-23 18:00:34 +00:00
cargo test --all --all-features
2021-01-11 19:14:42 +00:00
RUSTFLAGS = '--cfg=fuzzing' RUSTDOCFLAGS = '--cfg=fuzzing' cargo test --all --all-features
2020-12-23 18:00:34 +00:00
fi
2020-11-10 23:36:07 +00:00
# Examples
2022-02-01 03:59:29 +00:00
cargo run --example sign_verify --features= std
cargo run --example sign_verify_recovery --features= std,recovery
cargo run --example generate_keys --features= std,rand-std
2020-11-10 23:36:07 +00:00
fi
2022-03-08 21:00:18 +00:00
# Build the docs if told to (this only works with the nightly toolchain)
2020-11-10 23:36:07 +00:00
if [ " $DO_DOCS " = true ] ; then
2022-03-08 21:00:18 +00:00
RUSTDOCFLAGS = "--cfg docsrs" cargo doc --all --features= " $FEATURES "
2020-11-10 23:36:07 +00:00
fi
# Webassembly stuff
if [ " $DO_WASM " = true ] ; then
2022-11-02 23:29:23 +00:00
clang --version
2022-03-16 23:57:30 +00:00
CARGO_TARGET_DIR = wasm cargo install --force wasm-pack
printf '\n[lib]\ncrate-type = ["cdylib", "rlib"]\n' >> Cargo.toml
2022-11-02 23:29:23 +00:00
CC = clang wasm-pack build
CC = clang wasm-pack test --node
2020-11-10 23:36:07 +00:00
fi
# Address Sanitizer
if [ " $DO_ASAN " = true ] ; then
2022-03-21 23:12:30 +00:00
clang --version
2020-11-10 23:36:07 +00:00
cargo clean
CC = 'clang -fsanitize=address -fno-omit-frame-pointer' \
RUSTFLAGS = '-Zsanitizer=address -Clinker=clang -Cforce-frame-pointers=yes' \
ASAN_OPTIONS = 'detect_leaks=1 detect_invalid_pointer_pairs=1 detect_stack_use_after_return=1' \
2022-03-16 23:57:30 +00:00
cargo test --lib --all --features= " $FEATURES " -Zbuild-std --target x86_64-unknown-linux-gnu
cargo clean
2020-11-10 23:36:07 +00:00
CC = 'clang -fsanitize=memory -fno-omit-frame-pointer' \
RUSTFLAGS = '-Zsanitizer=memory -Zsanitizer-memory-track-origins -Cforce-frame-pointers=yes' \
2022-03-16 23:57:30 +00:00
cargo test --lib --all --features= " $FEATURES " -Zbuild-std --target x86_64-unknown-linux-gnu
2020-12-18 12:08:52 +00:00
cargo run --release --manifest-path= ./no_std_test/Cargo.toml | grep -q "Verified Successfully"
2021-05-17 12:37:36 +00:00
cargo run --release --features= alloc --manifest-path= ./no_std_test/Cargo.toml | grep -q "Verified alloc Successfully"
2020-11-10 23:36:07 +00:00
fi
2022-07-13 04:40:49 +00:00
# Bench if told to, only works with non-stable toolchain (nightly, beta).
if [ " $DO_BENCH " = true ]
then
RUSTFLAGS = '--cfg=bench' cargo bench --features= recovery
2020-11-10 23:36:07 +00:00
fi
2022-03-16 23:30:36 +00:00
exit 0