ALL_SOURCES = $(shell git ls-files .)
RS_SOURCES = $(filter %.rs, $(ALL_SOURCES))
TOML_SOURCES = $(filter %.toml, $(ALL_SOURCES))
CARGO_SOURCES = $(RS_SOURCES) $(TOML_SOURCES)
TEST_FLAGS = RUST_BACKTRACE=1
TEST_EXTRA_FLAGS = -- --nocapture
ifneq ($(wildcard .single-thread-tests),)
TEST_EXTRA_FLAGS += --test-threads 1
endif
define PRINT_HELP_PYSCRIPT
import re, sys
for line in sys.stdin:
match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line)
if match:
target, help = match.groups()
print("%-20s %s" % (target, help.replace(' # ALLOW TODOX', '')))
endef
export PRINT_HELP_PYSCRIPT
help:
@python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST)
ifeq ($(wildcard .no-todo-x),)
todo-x: .make.todo-x
else
todo-x:
endif
TODO = todo$()x
.make.todo-x: $(ALL_SOURCES)
cargo $(TODO)
touch $@
formatted: .make.formatted
.make.formatted: .cargo/config.toml $(CARGO_SOURCES)
cargo fmt --all -- --check
touch $@
reformat: .make.reformat
.make.reformat: .cargo/config.toml $(CARGO_SOURCES)
cargo fmt --all
touch $@
check: .make.check
.make.check: .cargo/config.toml $(CARGO_SOURCES)
cargo check --tests
touch $@
smells: .make.smells
.make.smells: .cargo/config.toml .make.check
cargo clippy -- --no-deps
touch $@
build: .make.build
.make.build: .cargo/config.toml $(CARGO_SOURCES)
cargo build
cargo test --no-run
touch $@
test: .make.test
.make.test: .cargo/config.toml .make.build
$(TEST_FLAGS) cargo test $(TEST_EXTRA_FLAGS)
touch $@
retest: .cargo/config.toml
$(TEST_FLAGS) cargo test $(TEST_EXTRA_FLAGS)
coverage: .make.coverage
.make.coverage: .make.test
rm -f tarpaulin*
$(TEST_FLAGS) cargo tarpaulin --skip-clean --out Xml $(TEST_EXTRA_FLAGS)
touch $@
ifeq ($(wildcard .no-coverage-annotations),)
coverage-annotations: .make.coverage-annotations
else
coverage-annotations:
endif
.make.coverage-annotations: .cargo/config.toml .make.coverage
cargo coverage-annotations
touch $@
doc: .make.doc
.make.doc: .cargo/config.toml $(CARGO_SOURCES) README.md
cargo doc --no-deps touch $@
udeps: .make.udeps
.make.udeps: .cargo/config.toml $(CARGO_SOURCES)
cargo +nightly udeps --workspace --all-targets
touch $@
outdated: .make.outdated
.make.outdated: .cargo/config.toml $(TOML_SOURCES)
cargo outdated --root-deps-only --exit-code 1
touch $@
audit: .make.audit
.make.audit: .cargo/config.toml $(TOML_SOURCES)
cargo audit --ignore RUSTSEC-2022-0048
touch $@
common: todo-x formatted smells udeps coverage-annotations doc
dev: reformat tags common outdated audit
staged:
@if git status . | grep -q 'Changes not staged\|Untracked files'; then git status; false; else true; fi
pre-commit: tags common staged outdated audit
pre-publish: .make.pre-publish
.make.pre-publish: $(ALL_SOURCES)
cargo publish --dry-run
touch $@
on-push: common pre-publish
monthly: outdated audit
publish: on-push monthly
cargo publish
tags: $(RS_SOURCES)
ctags --recurse .
clobber:
rm -f .make.* tags
rm -rf .cargo target
clean:
rm -f .make.* tags tarpaulin* cobertura.xml
rm -rf .cargo `find target -name '*clacks*'`
.cargo/config.toml:
mkdir -p .cargo
echo '[build]' > $@
cargo tarpaulin --print-rust-flags | tail -1 | sed 's/RUSTFLAGS/rustflags/' >> $@