SHELL=/bin/bash
RUST_CHANNEL ?= stable
CARGO_FLAGS =
RUSTUP_INSTALLED = $(shell command -v rustup 2> /dev/null)
ifndef RUSTUP_INSTALLED
CARGO = cargo
else
ifdef CI
CARGO = cargo
else
CARGO = rustup run $(RUST_CHANNEL) cargo
endif
endif
.PHONY: help
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
.PHONY: check
check:
$(CARGO) check
.PHONY: build
build:
$(CARGO) build $(CARGO_FLAGS)
.PHONY: release
release: CARGO_FLAGS += --release
release: build
.PHONY: lint
lint: fmt clippy
.PHONY: fmt
fmt:
cargo fmt --all -- --check
.PHONY: clippy
clippy:
$(CARGO) clippy --all-features
.PHONY: test
test:
$(CARGO) test --all-features
.PHONY: build-examples
build-examples:
@$(CARGO) build --examples --all-features
.PHONY: run-examples
run-examples:
@for file in examples/*.rs; do \
name=$$(basename $${file/.rs/}); \
$(CARGO) run --all-features --release --example $$name; \
done;
.PHONY: doc
doc:
$(CARGO) doc
.PHONY: watch
watch:
watchman-make -p 'src/**/*.rs' -t check build
.PHONY: watch-test
watch-test:
watchman-make -p 'src/**/*.rs' 'tests/**/*.rs' 'examples/**/*.rs' -t test
.PHONY: watch-doc
watch-doc:
watchman-make -p 'src/**/*.rs' -t doc
.PHONY: stable
stable: RUST_CHANNEL = stable
stable: build test
.PHONY: beta
beta: RUST_CHANNEL = beta
beta: build test
.PHONY: nightly
nightly: RUST_CHANNEL = nightly
nightly: build lint test